Changeset 5506

Show
Ignore:
Timestamp:
05/08/08 13:49:31 (1 week ago)
Author:
morris
Message:

Reuse zlib streams

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • libwired/trunk/libwired/p7/wi-p7-socket.c

    r5454 r5506  
    148148         
    149149        wi_boolean_t                                                    compression_enabled; 
     150        z_stream                                                                deflate_stream; 
     151        z_stream                                                                inflate_stream; 
    150152         
    151153        wi_boolean_t                                                    checksum_enabled; 
     
    193195static wi_p7_message_t *                                        _wi_p7_socket_read_xml_message(wi_p7_socket_t *, wi_time_interval_t, wi_string_t *); 
    194196 
     197static wi_boolean_t                                                     _wi_p7_socket_configure_compression(wi_p7_socket_t *); 
    195198static wi_integer_t                                                     _wi_p7_socket_deflate(wi_p7_socket_t *, const void *, uint32_t); 
    196199static wi_integer_t                                                     _wi_p7_socket_inflate(wi_p7_socket_t *, const void *, uint32_t); 
     
    11011104         
    11021105        if(p7_socket->compression_enabled) { 
     1106                wi_log_info(WI_STR("compressing")); 
     1107                 
    11031108                compressed_size = _wi_p7_socket_deflate(p7_socket, send_buffer, send_size); 
    11041109                 
     
    11111116         
    11121117        if(p7_socket->encryption_enabled) { 
     1118                wi_log_info(WI_STR("encrypting")); 
     1119 
    11131120                encrypted_size = send_size + wi_cipher_block_size(p7_socket->cipher); 
    11141121                 
     
    11461153        if(p7_socket->checksum_enabled) { 
    11471154                _wi_p7_socket_checksum_binary_message(p7_socket, p7_message, checksum_buffer); 
     1155                 
     1156                wi_log_info(WI_STR("send message data %@"), wi_data_with_bytes(send_buffer, send_size)); 
     1157                wi_log_info(WI_STR("writing checksum %@"), wi_data_with_bytes(checksum_buffer, p7_socket->checksum_length)); 
    11481158                 
    11491159                if(wi_socket_write_buffer(p7_socket->socket, timeout, checksum_buffer, p7_socket->checksum_length) < 0) 
     
    13071317#pragma mark - 
    13081318 
     1319static wi_boolean_t _wi_p7_socket_configure_compression(wi_p7_socket_t *p7_socket) { 
     1320        int             err; 
     1321         
     1322        p7_socket->deflate_stream.data_type = Z_UNKNOWN; 
     1323         
     1324        err = deflateInit(&p7_socket->deflate_stream, Z_DEFAULT_COMPRESSION); 
     1325         
     1326        if(err != Z_OK) { 
     1327                wi_error_set_zlib_error(err); 
     1328                 
     1329                return false; 
     1330        } 
     1331         
     1332        err = inflateInit(&p7_socket->inflate_stream); 
     1333         
     1334        if(err != Z_OK) { 
     1335                wi_error_set_zlib_error(err); 
     1336                 
     1337                return false; 
     1338        } 
     1339         
     1340        p7_socket->compression_enabled = true; 
     1341         
     1342        return true; 
     1343} 
     1344 
     1345 
     1346 
    13091347static wi_integer_t _wi_p7_socket_deflate(wi_p7_socket_t *p7_socket, const void *in_buffer, uint32_t in_size) { 
    1310         z_stream               stream
     1348        wi_integer_t   bytes
    13111349        int                             err, enderr; 
    13121350         
     
    13181356                p7_socket->compression_buffer = wi_realloc(p7_socket->compression_buffer, p7_socket->compression_buffer_length); 
    13191357 
    1320         stream.data_type        = Z_UNKNOWN; 
    1321         stream.zalloc           = Z_NULL; 
    1322         stream.zfree            = Z_NULL; 
    1323         stream.opaque           = Z_NULL; 
    1324         stream.next_in          = (unsigned char *) in_buffer; 
    1325         stream.avail_in         = in_size; 
    1326         stream.next_out         = p7_socket->compression_buffer; 
    1327         stream.avail_out        = p7_socket->compression_buffer_length; 
    1328          
    1329         err = deflateInit(&stream, Z_DEFAULT_COMPRESSION); 
    1330          
    1331         if(err != Z_OK) { 
    1332                 wi_error_set_zlib_error(err); 
    1333                  
    1334                 return -1; 
    1335         } 
    1336          
    1337         err = deflate(&stream, Z_FINISH); 
    1338         enderr = deflateEnd(&stream); 
     1358        p7_socket->deflate_stream.next_in               = (unsigned char *) in_buffer; 
     1359        p7_socket->deflate_stream.avail_in              = in_size; 
     1360        p7_socket->deflate_stream.next_out              = p7_socket->compression_buffer; 
     1361        p7_socket->deflate_stream.avail_out             = p7_socket->compression_buffer_length; 
     1362         
     1363        err             = deflate(&p7_socket->deflate_stream, Z_FINISH); 
     1364        bytes   = p7_socket->deflate_stream.total_out; 
     1365        enderr  = deflateReset(&p7_socket->deflate_stream); 
    13391366         
    13401367        if(err != Z_STREAM_END) { 
     
    13531380        } 
    13541381         
    1355         return stream.total_out
     1382        return bytes
    13561383} 
    13571384 
     
    13591386 
    13601387static wi_integer_t _wi_p7_socket_inflate(wi_p7_socket_t *p7_socket, const void *in_buffer, uint32_t in_size) { 
    1361         z_stream                stream; 
    1362         wi_uinteger_t   multiple; 
     1388        wi_uinteger_t   multiple, bytes; 
    13631389        int                             err, enderr; 
    13641390         
     
    13711397                        p7_socket->compression_buffer = wi_realloc(p7_socket->compression_buffer, p7_socket->compression_buffer_length); 
    13721398 
    1373                 stream.zalloc           = Z_NULL; 
    1374                 stream.zfree            = Z_NULL; 
    1375                 stream.next_in          = (unsigned char *) in_buffer; 
    1376                 stream.avail_in         = in_size; 
    1377                 stream.next_out         = (unsigned char *) p7_socket->compression_buffer; 
    1378                 stream.avail_out        = p7_socket->compression_buffer_length; 
    1379                  
    1380                 err = inflateInit(&stream); 
    1381                  
    1382                 if(err != Z_OK) { 
    1383                         wi_error_set_zlib_error(err); 
    1384                          
    1385                         return -1; 
    1386                 } 
    1387                  
    1388                 err = inflate(&stream, Z_FINISH); 
    1389                 enderr = inflateEnd(&stream); 
     1399                p7_socket->inflate_stream.next_in               = (unsigned char *) in_buffer; 
     1400                p7_socket->inflate_stream.avail_in              = in_size; 
     1401                p7_socket->inflate_stream.next_out              = (unsigned char *) p7_socket->compression_buffer; 
     1402                p7_socket->inflate_stream.avail_out             = p7_socket->compression_buffer_length; 
     1403                 
     1404                err             = inflate(&p7_socket->inflate_stream, Z_FINISH); 
     1405                bytes   = p7_socket->inflate_stream.total_out; 
     1406                enderr  = inflateReset(&p7_socket->inflate_stream); 
    13901407                 
    13911408                if(err == Z_STREAM_END) { 
     
    13971414                } 
    13981415        } 
    1399          
    1400         return stream.total_out
     1416 
     1417        return bytes
    14011418} 
    14021419 
     
    14401457                return false; 
    14411458         
     1459        if(WI_P7_COMPRESSION_ENABLED(p7_socket->options)) { 
     1460                if(!_wi_p7_socket_configure_compression(p7_socket)) 
     1461                        return false; 
     1462        } 
     1463         
    14421464        if(WI_P7_CHECKSUM_ENABLED(p7_socket->options)) 
    14431465                _wi_p7_socket_configure_checksum(p7_socket); 
     
    14721494                return false; 
    14731495         
     1496        if(WI_P7_COMPRESSION_ENABLED(p7_socket->options)) { 
     1497                if(!_wi_p7_socket_configure_compression(p7_socket)) 
     1498                        return false; 
     1499        } 
     1500 
    14741501        if(WI_P7_CHECKSUM_ENABLED(p7_socket->options)) 
    14751502                _wi_p7_socket_configure_checksum(p7_socket);