17:39
[skypekit:skypekit.git] / skypekit_2.0.0.190_29281_CB30 / interfaces / skype / cpp_embedded / documentation / html / skype-tcp-transport_8cpp_source.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5 <title>SkypeKit C++ Wrapper: Main Page</title>
6 <link href="tabs.css" rel="stylesheet" type="text/css"/>
7 <link href="islander.css" rel="stylesheet" type="text/css"/>
8 </head>
9 <body>
10 <img src="..\skypekit.png" align="right">
11 <!-- Generated by Doxygen 1.6.2 -->
12 <script type="text/javascript">
13 <!--
14 function changeDisplayState (e){
15   var num=this.id.replace(/[^[0-9]/g,'');
16   var button=this.firstChild;
17   var sectionDiv=document.getElementById('dynsection'+num);
18   if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){
19     sectionDiv.style.display='block';
20     button.src='open.gif';
21   }else{
22     sectionDiv.style.display='none';
23     button.src='closed.gif';
24   }
25 }
26 function initDynSections(){
27   var divs=document.getElementsByTagName('div');
28   var sectionCounter=1;
29   for(var i=0;i<divs.length-1;i++){
30     if(divs[i].className=='dynheader'&&divs[i+1].className=='dynsection'){
31       var header=divs[i];
32       var section=divs[i+1];
33       var button=header.firstChild;
34       if (button!='IMG'){
35         divs[i].insertBefore(document.createTextNode(' '),divs[i].firstChild);
36         button=document.createElement('img');
37         divs[i].insertBefore(button,divs[i].firstChild);
38       }
39       header.style.cursor='pointer';
40       header.onclick=changeDisplayState;
41       header.id='dynheader'+sectionCounter;
42       button.src='closed.gif';
43       section.id='dynsection'+sectionCounter;
44       section.style.display='none';
45       section.style.marginLeft='14px';
46       sectionCounter++;
47     }
48   }
49 }
50 window.onload = initDynSections;
51 -->
52 </script>
53 <div class="navigation" id="top">
54   <div class="tabs">
55     <ul>
56       <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
57       <li><a href="annotated.html"><span>Classes</span></a></li>
58       <li class="current"><a href="files.html"><span>Files</span></a></li>
59       <li><a href="examples.html"><span>Examples</span></a></li>
60     </ul>
61   </div>
62   <div class="tabs">
63     <ul>
64       <li><a href="files.html"><span>File&nbsp;List</span></a></li>
65       <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
66     </ul>
67   </div>
68 <h1>skype-tcp-transport.cpp</h1><a href="skype-tcp-transport_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
69 <a name="l00002"></a>00002 <span class="preprocessor">#include &quot;<a class="code" href="skype-tcp-transport_8h.html">skype-tcp-transport.h</a>&quot;</span>
70 <a name="l00003"></a>00003 
71 <a name="l00004"></a>00004 <span class="preprocessor">#ifndef SE_NO_TCP_TRANSPORT</span>
72 <a name="l00005"></a>00005 <span class="preprocessor"></span>
73 <a name="l00006"></a>00006 <span class="preprocessor">#ifndef _GNU_SOURCE</span>
74 <a name="l00007"></a>00007 <span class="preprocessor"></span><span class="preprocessor">#define _GNU_SOURCE</span>
75 <a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
76 <a name="l00009"></a>00009 <span class="preprocessor"></span>
77 <a name="l00010"></a>00010 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
78 <a name="l00011"></a>00011 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
79 <a name="l00012"></a>00012 <span class="preprocessor">#include &lt;errno.h&gt;</span>
80 <a name="l00013"></a>00013 <span class="preprocessor">#include &lt;string.h&gt;</span>
81 <a name="l00014"></a>00014 <span class="preprocessor">#include &lt;ctype.h&gt;</span>
82 <a name="l00015"></a>00015 
83 <a name="l00016"></a>00016 <span class="preprocessor">#ifdef _WIN32</span>
84 <a name="l00017"></a>00017 <span class="preprocessor"></span><span class="preprocessor">#include &lt;winsock.h&gt;</span>
85 <a name="l00018"></a>00018 <span class="keywordtype">long</span> <span class="keywordtype">int</span> __res;
86 <a name="l00019"></a>00019 <span class="preprocessor">#define TEMP_FAILURE_RET(expression)                            \</span>
87 <a name="l00020"></a>00020 <span class="preprocessor">        do {                                                                                    \</span>
88 <a name="l00021"></a>00021 <span class="preprocessor">                __res = 0;                                                                      \</span>
89 <a name="l00022"></a>00022 <span class="preprocessor">                do {                                                                            \</span>
90 <a name="l00023"></a>00023 <span class="preprocessor">                        __res = (long int)(expression);                 \</span>
91 <a name="l00024"></a>00024 <span class="preprocessor">                } while(__res == -1L &amp;&amp; errno == EINTR);        \</span>
92 <a name="l00025"></a>00025 <span class="preprocessor">        } while(0)</span>
93 <a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define TEMP_FAILURE_RES        __res</span>
94 <a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#else</span>
95 <a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#include &lt;sys/socket.h&gt;</span>
96 <a name="l00029"></a>00029 <span class="preprocessor">#include &lt;sys/select.h&gt;</span>
97 <a name="l00030"></a>00030 <span class="preprocessor">#include &lt;netinet/in.h&gt;</span>
98 <a name="l00031"></a>00031 <span class="preprocessor">#include &lt;arpa/inet.h&gt;</span>
99 <a name="l00032"></a>00032 <span class="preprocessor">#include &lt;sys/socket.h&gt;</span>
100 <a name="l00033"></a>00033 <span class="preprocessor">#include &lt;sys/un.h&gt;</span>
101 <a name="l00034"></a>00034 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
102 <a name="l00035"></a>00035 
103 <a name="l00036"></a>00036 <span class="preprocessor">#ifndef TEMP_FAILURE_RETRY</span>
104 <a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">  #define TEMP_FAILURE_RETRY(cmd) cmd</span>
105 <a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
106 <a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#endif // _WIN32</span>
107 <a name="l00040"></a>00040 <span class="preprocessor"></span>
108 <a name="l00041"></a><a class="code" href="class_s_e_t_c_p_transport.html#a4f78eb9531ae32806bc7efd456e2bf85">00041</a> <a class="code" href="class_s_e_t_c_p_transport.html#a4f78eb9531ae32806bc7efd456e2bf85">SETCPTransport::SETCPTransport</a>(<span class="keyword">const</span> <a class="code" href="class_s_e_string.html" title="SEString is basic char* based string class.">SEString</a>&amp; addr, <span class="keywordtype">int</span> port)
109 <a name="l00042"></a>00042                 :<a class="code" href="class_s_e_transport.html" title="Abstract interface for transport layer.">SETransport</a>(),
110 <a name="l00043"></a>00043                 server_addr(addr),
111 <a name="l00044"></a>00044                 server_port(port),
112 <a name="l00045"></a>00045                 connected(false)
113 <a name="l00046"></a>00046 {
114 <a name="l00047"></a>00047 <span class="preprocessor">#ifdef _WIN32</span>
115 <a name="l00048"></a>00048 <span class="preprocessor"></span>        WSADATA wsaData;
116 <a name="l00049"></a>00049         WORD wVersionRequested = MAKEWORD(1, 1);
117 <a name="l00050"></a>00050         <span class="keywordtype">int</span> err = WSAStartup(wVersionRequested, &amp;wsaData);
118 <a name="l00051"></a>00051         <span class="keywordflow">if</span> (err != 0) {
119 <a name="l00052"></a>00052                 <a class="code" href="class_s_e_transport.html#a907c927da81aec7894dbdcc14d905d05">LOG</a>(<span class="stringliteral">&quot;SKYPE ERROR - SETCPTransport(), couldn&#39;t startup windows sockets!\n&quot;</span>);
120 <a name="l00053"></a>00053                 <span class="keywordflow">return</span>;
121 <a name="l00054"></a>00054         }
122 <a name="l00055"></a>00055 <span class="preprocessor">#endif</span>
123 <a name="l00056"></a>00056 <span class="preprocessor"></span>}
124 <a name="l00057"></a>00057 
125 <a name="l00058"></a><a class="code" href="class_s_e_t_c_p_transport.html#a4538c95504ad07f6b1047fd819ddc523">00058</a> <a class="code" href="class_s_e_t_c_p_transport.html#a4538c95504ad07f6b1047fd819ddc523">SETCPTransport::~SETCPTransport</a>()
126 <a name="l00059"></a>00059 {
127 <a name="l00060"></a>00060 }
128 <a name="l00061"></a>00061 
129 <a name="l00062"></a><a class="code" href="class_s_e_t_c_p_transport.html#a242d1aef375280b856f6601d3ab1ae38">00062</a> <span class="keywordtype">bool</span> <a class="code" href="class_s_e_t_c_p_transport.html#a242d1aef375280b856f6601d3ab1ae38">SETCPTransport::connect</a>()
130 <a name="l00063"></a>00063 {
131 <a name="l00064"></a>00064         sockaddr_in addr;
132 <a name="l00065"></a>00065         socket_fd = ::socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
133 <a name="l00066"></a>00066 
134 <a name="l00067"></a>00067         <span class="keywordflow">if</span> (-1 == socket_fd) {
135 <a name="l00068"></a>00068                 <a class="code" href="class_s_e_transport.html#a907c927da81aec7894dbdcc14d905d05">LOG</a>(<span class="stringliteral">&quot;SKYPE ERROR - SETCPTransport::connect(), couldn&#39;t create socket\n&quot;</span>);
136 <a name="l00069"></a>00069                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
137 <a name="l00070"></a>00070         }
138 <a name="l00071"></a>00071 
139 <a name="l00072"></a>00072         memset(&amp;addr, 0, <span class="keyword">sizeof</span>(addr));
140 <a name="l00073"></a>00073         addr.sin_family = AF_INET;
141 <a name="l00074"></a>00074         addr.sin_addr.s_addr = inet_addr((<span class="keyword">const</span> <span class="keywordtype">char</span>*)server_addr);
142 <a name="l00075"></a>00075         addr.sin_port = htons(server_port);
143 <a name="l00076"></a>00076 
144 <a name="l00077"></a>00077         <span class="keywordflow">if</span> (::<a class="code" href="class_s_e_t_c_p_transport.html#a242d1aef375280b856f6601d3ab1ae38">connect</a>(socket_fd, (<span class="keyword">struct</span> sockaddr*)&amp;addr, <span class="keyword">sizeof</span>(addr)) &lt; 0) {
145 <a name="l00078"></a>00078                 <a class="code" href="class_s_e_transport.html#a907c927da81aec7894dbdcc14d905d05">LOG</a>(<span class="stringliteral">&quot;SKYPE ERROR - SETCPTransport::connect(), couldn&#39;t connect to socket\n&quot;</span>);
146 <a name="l00079"></a>00079                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
147 <a name="l00080"></a>00080         }
148 <a name="l00081"></a>00081 
149 <a name="l00082"></a>00082         connected = <span class="keyword">true</span>;
150 <a name="l00083"></a>00083         <a class="code" href="class_s_e_transport.html#a907c927da81aec7894dbdcc14d905d05">LOG</a>(<span class="stringliteral">&quot;connected -&gt; SETCPTransport::connect() %d\n&quot;</span>, connected ? 1 : 0);
151 <a name="l00084"></a>00084 
152 <a name="l00085"></a>00085         <span class="keywordflow">return</span> <span class="keyword">true</span>;
153 <a name="l00086"></a>00086 }
154 <a name="l00087"></a>00087 
155 <a name="l00088"></a><a class="code" href="class_s_e_t_c_p_transport.html#a2ee5d03c91ffc7e898f9113642bc3fbc">00088</a> <span class="keywordtype">void</span> <a class="code" href="class_s_e_t_c_p_transport.html#a2ee5d03c91ffc7e898f9113642bc3fbc" title="Disconnects from skypekit.">SETCPTransport::disconnect</a>()
156 <a name="l00089"></a>00089 {
157 <a name="l00090"></a>00090 <span class="preprocessor">#ifdef _WIN32</span>
158 <a name="l00091"></a>00091 <span class="preprocessor"></span>        closesocket(socket_fd);
159 <a name="l00092"></a>00092 <span class="preprocessor">#else</span>
160 <a name="l00093"></a>00093 <span class="preprocessor"></span>        close(socket_fd);
161 <a name="l00094"></a>00094 <span class="preprocessor">#endif</span>
162 <a name="l00095"></a>00095 <span class="preprocessor"></span>        connected = <span class="keyword">false</span>;
163 <a name="l00096"></a>00096         
164 <a name="l00097"></a>00097         <a class="code" href="class_s_e_transport.html#a907c927da81aec7894dbdcc14d905d05">LOG</a>(<span class="stringliteral">&quot;Skypekit: disconnected\n&quot;</span>);
165 <a name="l00098"></a>00098 }
166 <a name="l00099"></a>00099 
167 <a name="l00100"></a><a class="code" href="class_s_e_t_c_p_transport.html#aee29c4ff6ccfb6291a8da93dc008a7f3">00100</a> <span class="keywordtype">bool</span> <a class="code" href="class_s_e_t_c_p_transport.html#aee29c4ff6ccfb6291a8da93dc008a7f3">SETCPTransport::read</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_bytes, <span class="keywordtype">char</span>* dest)
168 <a name="l00101"></a>00101 {
169 <a name="l00102"></a>00102         <span class="keywordflow">if</span> (!connected) {
170 <a name="l00103"></a>00103                 <a class="code" href="class_s_e_transport.html#a907c927da81aec7894dbdcc14d905d05">LOG</a>(<span class="stringliteral">&quot;SKYPE ERROR - SETCPTransport::read(), not connected\n&quot;</span>);
171 <a name="l00104"></a>00104                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
172 <a name="l00105"></a>00105         }
173 <a name="l00106"></a>00106         
174 <a name="l00107"></a>00107         <span class="keywordtype">int</span> ret;
175 <a name="l00108"></a>00108         <span class="keywordflow">while</span> (num_bytes &gt; 0) {
176 <a name="l00109"></a>00109 <span class="preprocessor">#if _WIN32</span>
177 <a name="l00110"></a>00110 <span class="preprocessor"></span>                TEMP_FAILURE_RET(recv(socket_fd, dest, num_bytes, 0));
178 <a name="l00111"></a>00111                 ret = TEMP_FAILURE_RES;
179 <a name="l00112"></a>00112 <span class="preprocessor">#else</span>
180 <a name="l00113"></a>00113 <span class="preprocessor"></span>                <a class="code" href="skype-socket-transport_8cpp.html#a716e714934372332caa3d3746da4e9ae">TEMP_FAILURE_RETRY</a>(ret = ::<a class="code" href="class_s_e_t_c_p_transport.html#aee29c4ff6ccfb6291a8da93dc008a7f3">read</a>(socket_fd, dest, num_bytes));
181 <a name="l00114"></a>00114 <span class="preprocessor">#endif</span>
182 <a name="l00115"></a>00115 <span class="preprocessor"></span>                <span class="keywordflow">if</span> (ret &lt;= 0) {
183 <a name="l00116"></a>00116                         <a class="code" href="class_s_e_t_c_p_transport.html#a2ee5d03c91ffc7e898f9113642bc3fbc" title="Disconnects from skypekit.">disconnect</a>();
184 <a name="l00117"></a>00117                         <span class="keywordflow">return</span> <span class="keyword">false</span>;
185 <a name="l00118"></a>00118                 }
186 <a name="l00119"></a>00119                 num_bytes -= ret;
187 <a name="l00120"></a>00120                 dest      += ret;
188 <a name="l00121"></a>00121         }
189 <a name="l00122"></a>00122         bytesLog(<span class="stringliteral">&quot;client::read&quot;</span>, dest, num_bytes);
190 <a name="l00123"></a>00123         
191 <a name="l00124"></a>00124         <span class="keywordflow">return</span> <span class="keyword">true</span>;
192 <a name="l00125"></a>00125 }
193 <a name="l00126"></a>00126 
194 <a name="l00127"></a><a class="code" href="class_s_e_t_c_p_transport.html#a2dff69ef79cb49c986bd41ee6ab1e1ec">00127</a> <span class="keywordtype">bool</span> <a class="code" href="class_s_e_t_c_p_transport.html#a2dff69ef79cb49c986bd41ee6ab1e1ec">SETCPTransport::write</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_bytes, <span class="keyword">const</span> <span class="keywordtype">char</span>* dest)
195 <a name="l00128"></a>00128 {
196 <a name="l00129"></a>00129         <span class="keywordflow">if</span> (!connected) {
197 <a name="l00130"></a>00130                 <a class="code" href="class_s_e_transport.html#a907c927da81aec7894dbdcc14d905d05">LOG</a>(<span class="stringliteral">&quot;SKYPE ERROR - SETCPTransport::write(), not connected\n&quot;</span>);
198 <a name="l00131"></a>00131                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
199 <a name="l00132"></a>00132         }
200 <a name="l00133"></a>00133         <span class="keywordtype">int</span> written;
201 <a name="l00134"></a>00134         <span class="keywordflow">while</span> (num_bytes &gt; 0) {
202 <a name="l00135"></a>00135 <span class="preprocessor">#               ifdef _WIN32</span>
203 <a name="l00136"></a>00136 <span class="preprocessor"></span>                              TEMP_FAILURE_RET(::send(socket_fd, dest, num_bytes, 0));
204 <a name="l00137"></a>00137                               written = TEMP_FAILURE_RES;
205 <a name="l00138"></a>00138                               <span class="keywordflow">if</span> (written &lt; 0) {
206 <a name="l00139"></a>00139                                       <a class="code" href="class_s_e_t_c_p_transport.html#a2ee5d03c91ffc7e898f9113642bc3fbc" title="Disconnects from skypekit.">disconnect</a>();
207 <a name="l00140"></a>00140                                       <span class="keywordflow">return</span> <span class="keyword">false</span>;
208 <a name="l00141"></a>00141                               }
209 <a name="l00142"></a>00142                               
210 <a name="l00143"></a>00143 <span class="preprocessor">#               else</span>
211 <a name="l00144"></a>00144 <span class="preprocessor"></span>                              written = <a class="code" href="skype-socket-transport_8cpp.html#a716e714934372332caa3d3746da4e9ae">TEMP_FAILURE_RETRY</a>(::<a class="code" href="class_s_e_t_c_p_transport.html#a2dff69ef79cb49c986bd41ee6ab1e1ec">write</a>(socket_fd, dest, num_bytes));
212 <a name="l00145"></a>00145                               <span class="keywordflow">if</span> (written &lt; 0)
213 <a name="l00146"></a>00146                               {
214 <a name="l00147"></a>00147                                       <a class="code" href="class_s_e_t_c_p_transport.html#a2ee5d03c91ffc7e898f9113642bc3fbc" title="Disconnects from skypekit.">disconnect</a>();
215 <a name="l00148"></a>00148                                       <span class="keywordflow">return</span> <span class="keyword">false</span>;
216 <a name="l00149"></a>00149                               }
217 <a name="l00150"></a>00150 <span class="preprocessor">#               endif</span>
218 <a name="l00151"></a>00151 <span class="preprocessor"></span>                dest      += written;
219 <a name="l00152"></a>00152                 num_bytes -= written;
220 <a name="l00153"></a>00153         }
221 <a name="l00154"></a>00154         
222 <a name="l00155"></a>00155         bytesLog(<span class="stringliteral">&quot;client::write&quot;</span>, dest, num_bytes);
223 <a name="l00156"></a>00156         
224 <a name="l00157"></a>00157         <span class="keywordflow">return</span> <span class="keyword">true</span>;
225 <a name="l00158"></a>00158 }
226 <a name="l00159"></a>00159 
227 <a name="l00160"></a><a class="code" href="class_s_e_t_c_p_transport.html#a3580adc084a567b049d5e0b721e5937d">00160</a> <span class="keywordtype">bool</span> <a class="code" href="class_s_e_t_c_p_transport.html#a3580adc084a567b049d5e0b721e5937d" title="Check if the connection to skypekit is still there.">SETCPTransport::isConnected</a>()<span class="keyword"> const</span>
228 <a name="l00161"></a>00161 <span class="keyword"></span>{
229 <a name="l00162"></a>00162         <span class="keywordflow">return</span> connected;
230 <a name="l00163"></a>00163 }
231 <a name="l00164"></a>00164 
232 <a name="l00165"></a><a class="code" href="class_s_e_t_c_p_transport.html#a2c14f6240ac1de67fd0bc1e9ba6f1e00">00165</a> <span class="keywordtype">int</span> <a class="code" href="class_s_e_t_c_p_transport.html#a2c14f6240ac1de67fd0bc1e9ba6f1e00" title="Returns the socket descriptor which can be used to manually call select on. If the...">SETCPTransport::getSocket</a>()<span class="keyword"> const</span>
233 <a name="l00166"></a>00166 <span class="keyword"></span>{
234 <a name="l00167"></a>00167         <span class="keywordflow">return</span> socket_fd;
235 <a name="l00168"></a>00168 }
236 <a name="l00169"></a>00169 
237 <a name="l00170"></a>00170 <span class="keywordtype">void</span> SETCPTransport::bytesLog(<span class="keyword">const</span> <span class="keywordtype">char</span>* where, <span class="keyword">const</span> <span class="keywordtype">char</span>* what, <span class="keywordtype">int</span> len)
238 <a name="l00171"></a>00171 {
239 <a name="l00172"></a>00172 <span class="preprocessor">#ifndef _WIN32</span>
240 <a name="l00173"></a>00173 <span class="preprocessor"></span>        <span class="keywordflow">if</span> (log) {
241 <a name="l00174"></a>00174                 <a class="code" href="class_s_e_transport.html#a907c927da81aec7894dbdcc14d905d05">LOG</a>(<span class="stringliteral">&quot;%s %d &#39;&quot;</span>, where, len);
242 <a name="l00175"></a>00175                 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; len; i++) {
243 <a name="l00176"></a>00176                         <span class="keywordflow">if</span> (isprint(what[i]))
244 <a name="l00177"></a>00177                                 <a class="code" href="class_s_e_transport.html#a907c927da81aec7894dbdcc14d905d05">LOG</a>(<span class="stringliteral">&quot;%c&quot;</span>, what[i]);
245 <a name="l00178"></a>00178                         <span class="keywordflow">else</span>
246 <a name="l00179"></a>00179                                 <a class="code" href="class_s_e_transport.html#a907c927da81aec7894dbdcc14d905d05">LOG</a>(<span class="stringliteral">&quot;{i=%d hex=%s%#x}&quot;</span>, what[i], what[i] &lt; 0 ? <span class="stringliteral">&quot;-&quot;</span> : <span class="stringliteral">&quot;&quot;</span>, what[i] &lt; 0 ? -what[i] : what[i]);
247 <a name="l00180"></a>00180                 }
248 <a name="l00181"></a>00181                 <a class="code" href="class_s_e_transport.html#a907c927da81aec7894dbdcc14d905d05">LOG</a>(<span class="stringliteral">&quot;&#39;\n&quot;</span>);
249 <a name="l00182"></a>00182         }
250 <a name="l00183"></a>00183 <span class="preprocessor">#endif        </span>
251 <a name="l00184"></a>00184 <span class="preprocessor"></span>}
252 <a name="l00185"></a>00185 
253 <a name="l00186"></a>00186 <span class="preprocessor">#endif // SE_NO_TCP_TRANSPORT</span>
254 <a name="l00187"></a>00187 <span class="preprocessor"></span>
255 </pre></div></div>
256
257 <hr/>   
258                 <p><b>(c) Skype Technologies S.A. Confidential/Proprietary</b></p>              
259                 <p>Last updated: 18 Jun 2010</p>                
260                 </BODY>
261 </HTML>