Go to the source code of this file.
Functions | |
SOCKET | lzhl_socket (int af, int type, int protocol) |
SOCKET | lzhl_accept (SOCKET s, struct sockaddr *addr, int *addrlen) |
int | lzhl_send (SOCKET s, const char *buf, int len, int flags) |
int | lzhl_recv (SOCKET s, char *buf, int len, int flags) |
int | lzhl_closesocket (SOCKET sock) |
|
Definition at line 55 of file Lzhl_tcp.cpp. |
|
Definition at line 244 of file Lzhl_tcp.cpp. 00244 { 00245 GlobalMapType::iterator iter = globalMap.find( sock ); 00246 00247 if ( iter != globalMap.end() ) { 00248 LZHL_CHANDLE ch = (*iter).second.ch; 00249 00250 if ( ch != LZHL_CHANDLE_NULL ) 00251 LZHLDestroyCompressor( ch ); 00252 00253 LZHL_DHANDLE dh = (*iter).second.dh; 00254 00255 if ( dh != LZHL_DHANDLE_NULL ) 00256 LZHLDestroyDecompressor( dh ); 00257 00258 delete [] (*iter).second.dBuf; 00259 } 00260 return closesocket( sock ); 00261 } |
|
Definition at line 155 of file Lzhl_tcp.cpp. 00156 { 00157 GlobalMapType::iterator iter = globalMap.find( sock ); 00158 if ( iter != globalMap.end() ) { 00159 LZHL_SOCKET& ls = (*iter).second; 00160 LZHL_DHANDLE& dh = ls.dh; 00161 00162 if ( dh == LZHL_DHANDLE_NULL ) 00163 dh = LZHLCreateDecompressor(); 00164 00165 if ( ls.dBuf == 0 ) { 00166 unsigned int dataSz, compSz; 00167 BYTE tmp[ 10 ]; 00168 int bytesRead = 0; 00169 int hdrSz; 00170 00171 for (;;) { 00172 int bytes = recv( sock, (char*)( tmp + bytesRead ), 1, flags ); 00173 00174 if ( bytes <= 0 ) 00175 return bytes; 00176 00177 bytesRead += bytes; 00178 BYTE* p = tmp; 00179 00180 int err = _getInt( p, bytesRead, &dataSz ); 00181 00182 if ( err == 1 ) 00183 continue; //forever 00184 else if ( err > 0 ) 00185 return -1; 00186 00187 err = _getInt( p, bytesRead - ( p - tmp ), &compSz ); 00188 00189 if ( err == 1 ) 00190 continue; //forever 00191 else if ( err > 0 ) 00192 return -1; 00193 00194 hdrSz = p - tmp; 00195 break; //forever 00196 } 00197 00198 BYTE* compBuf = new BYTE[ compSz ]; 00199 bytesRead -= hdrSz; 00200 memcpy( compBuf, tmp + hdrSz, bytesRead ); 00201 for (;;) { 00202 int bytes = recv( sock, (char*)( compBuf + bytesRead ), compSz - bytesRead, flags ); 00203 if ( bytes <= 0 ) { 00204 delete [] compBuf; 00205 return bytes; 00206 } 00207 00208 bytesRead += bytes; 00209 if ( bytesRead == compSz ) 00210 break; //forever 00211 } 00212 00213 ls.dSz = dataSz; 00214 ls.dDisp = 0; 00215 ls.dBuf = new BYTE[ dataSz ]; 00216 00217 int Ok = LZHLDecompress( dh, ls.dBuf, &dataSz, compBuf, &compSz ); 00218 delete [] compBuf; 00219 00220 if ( !Ok ) { 00221 delete [] ls.dBuf; 00222 ls.dBuf = 0; 00223 return -1; 00224 } 00225 00226 } // if ( ls.dBuf == 0 ) 00227 00228 assert( ls.dBuf ); 00229 int sz = min( bufSz, ls.dSz - ls.dDisp ); 00230 memcpy( buf, ls.dBuf + ls.dDisp, sz ); 00231 ls.dDisp += sz; 00232 00233 if ( ls.dDisp == ls.dSz ) { 00234 delete [] ls.dBuf; 00235 ls.dBuf = 0; 00236 } 00237 return sz; 00238 00239 } else { 00240 return recv( sock, buf, bufSz, flags ); 00241 } 00242 } |
|
Definition at line 101 of file Lzhl_tcp.cpp. 00101 { 00102 GlobalMapType::iterator iter = globalMap.find( sock ); 00103 if ( iter != globalMap.end() ) { 00104 LZHL_CHANDLE& ch = (*iter).second.ch; 00105 00106 if ( ch == LZHL_CHANDLE_NULL ) 00107 ch = LZHLCreateCompressor(); 00108 00109 size_t maxSz = 10 + LZHLCompressorCalcMaxBuf( dataSz ); 00110 BYTE* buf = new BYTE[ maxSz ]; 00111 size_t compSz = LZHLCompress( ch, buf + 10, data, dataSz ); 00112 00113 int dSz; 00114 00115 { 00116 BYTE tmp[ 5 ]; 00117 BYTE* p = tmp; 00118 _putInt( p, compSz ); 00119 int szSz = p - tmp; 00120 dSz = szSz; 00121 assert( dSz <= 10 ); 00122 memcpy( buf + 10 - dSz, tmp, szSz ); 00123 00124 p = tmp; 00125 _putInt( p, dataSz ); 00126 szSz = p - tmp; 00127 dSz += szSz; 00128 assert( dSz <= 10 ); 00129 memcpy( buf + 10 - dSz, tmp, szSz ); 00130 } 00131 00132 { 00133 BYTE* p = buf + 10 - dSz; 00134 int sz = dSz + compSz; 00135 00136 while( sz ) { 00137 int bytes = send( sock, (char*)( buf + 10 - dSz ), dSz + compSz, flags ); 00138 00139 if ( bytes < 0 ) 00140 return bytes; 00141 00142 assert( bytes <= sz ); 00143 sz -= bytes; 00144 p += bytes; 00145 } 00146 } 00147 00148 delete [] buf; 00149 return dataSz; 00150 } else { 00151 return send( sock, data, dataSz, flags ); 00152 } 00153 } |
|
Definition at line 46 of file Lzhl_tcp.cpp. |