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