1 /*************************************************************************** 2 * Copyright (c) 2009-2010 Open Information Security Foundation 3 * Copyright (c) 2010-2013 Qualys, Inc. 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are 8 * met: 9 * 10 * - Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 13 * - Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 17 * - Neither the name of the Qualys, Inc. nor the names of its 18 * contributors may be used to endorse or promote products derived from 19 * this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 ***************************************************************************/ 33 34 /** 35 * @file 36 * @author Ivan Ristic <ivanr@webkreator.com> 37 */ 38 39 #ifndef _HTP_DECOMPRESSORS_H 40 #define _HTP_DECOMPRESSORS_H 41 42 #ifdef __cplusplus 43 extern "C" { 44 #endif 45 46 #include <zlib.h> 47 #include "lzma/LzmaDec.h" 48 49 typedef struct htp_decompressor_gzip_t htp_decompressor_gzip_t; 50 typedef struct htp_decompressor_t htp_decompressor_t; 51 52 #define GZIP_BUF_SIZE 8192 53 54 #define DEFLATE_MAGIC_1 0x1f 55 #define DEFLATE_MAGIC_2 0x8b 56 57 struct htp_decompressor_t { 58 htp_status_t (*decompress)(htp_decompressor_t *, htp_tx_data_t *); 59 htp_status_t (*callback)(htp_tx_data_t *); 60 void (*destroy)(htp_decompressor_t *); 61 struct htp_decompressor_t *next; 62 struct timeval time_before; 63 int32_t time_spent; 64 uint32_t nb_callbacks; 65 }; 66 67 struct htp_decompressor_gzip_t { 68 htp_decompressor_t super; 69 #if 0 70 int initialized; 71 #endif 72 int zlib_initialized; 73 uint8_t restart; /**< deflate restarted to try rfc1950 instead of 1951 */ 74 uint8_t passthrough; /**< decompression failed, pass through raw data */ 75 z_stream stream; 76 uint8_t header[LZMA_PROPS_SIZE + 8]; 77 uint8_t header_len; 78 CLzmaDec state; 79 unsigned char *buffer; 80 unsigned long crc; 81 }; 82 83 htp_decompressor_t *htp_gzip_decompressor_create(htp_connp_t *connp, enum htp_content_encoding_t format); 84 85 #ifdef __cplusplus 86 } 87 #endif 88 89 #endif /* _HTP_DECOMPRESSORS_H */ 90 91