71 #define HTP_BASE_VERSION_TEXT "0.3.0"
76 #define HTP_DATA_OTHER 2
77 #define HTP_DECLINED 3
79 #define PROTOCOL_UNKNOWN -1
84 #define HTP_LOG_MARK __FILE__,__LINE__
86 #define HTP_LOG_ERROR 1
87 #define HTP_LOG_WARNING 2
88 #define HTP_LOG_NOTICE 3
89 #define HTP_LOG_INFO 4
90 #define HTP_LOG_DEBUG 5
91 #define HTP_LOG_DEBUG2 6
93 #define HTP_HEADER_MISSING_COLON 1
94 #define HTP_HEADER_INVALID_NAME 2
95 #define HTP_HEADER_LWS_AFTER_FIELD_NAME 3
96 #define HTP_LINE_TOO_LONG_HARD 4
97 #define HTP_LINE_TOO_LONG_SOFT 5
99 #define HTP_HEADER_LIMIT_HARD 18000
100 #define HTP_HEADER_LIMIT_SOFT 9000
102 #define HTP_VALID_STATUS_MIN 100
103 #define HTP_VALID_STATUS_MAX 999
105 #define LOG_NO_CODE 0
122 #define M_PROPPATCH 9
128 #define M_VERSION_CONTROL 15
129 #define M_CHECKOUT 16
130 #define M_UNCHECKOUT 17
135 #define M_MKWORKSPACE 22
136 #define M_MKACTIVITY 23
137 #define M_BASELINE_CONTROL 24
144 #define HTP_FIELD_UNPARSEABLE 0x000001
145 #define HTP_FIELD_INVALID 0x000002
146 #define HTP_FIELD_FOLDED 0x000004
147 #define HTP_FIELD_REPEATED 0x000008
148 #define HTP_FIELD_LONG 0x000010
149 #define HTP_FIELD_NUL_BYTE 0x000020
150 #define HTP_REQUEST_SMUGGLING 0x000040
151 #define HTP_INVALID_FOLDING 0x000080
152 #define HTP_INVALID_CHUNKING 0x000100
153 #define HTP_MULTI_PACKET_HEAD 0x000200
154 #define HTP_HOST_MISSING 0x000400
155 #define HTP_AMBIGUOUS_HOST 0x000800
156 #define HTP_PATH_ENCODED_NUL 0x001000
157 #define HTP_PATH_INVALID_ENCODING 0x002000
158 #define HTP_PATH_INVALID 0x004000
159 #define HTP_PATH_OVERLONG_U 0x008000
160 #define HTP_PATH_ENCODED_SEPARATOR 0x010000
162 #define HTP_PATH_UTF8_VALID 0x020000
163 #define HTP_PATH_UTF8_INVALID 0x040000
164 #define HTP_PATH_UTF8_OVERLONG 0x080000
165 #define HTP_PATH_FULLWIDTH_EVASION 0x100000
167 #define HTP_STATUS_LINE_INVALID 0x200000
169 #define PIPELINED_CONNECTION 1
171 #define HTP_SERVER_MINIMAL 0
172 #define HTP_SERVER_GENERIC 1
173 #define HTP_SERVER_IDS 2
174 #define HTP_SERVER_IIS_4_0 4
175 #define HTP_SERVER_IIS_5_0 5
176 #define HTP_SERVER_IIS_5_1 6
177 #define HTP_SERVER_IIS_6_0 7
178 #define HTP_SERVER_IIS_7_0 8
179 #define HTP_SERVER_IIS_7_5 9
180 #define HTP_SERVER_TOMCAT_6_0 10
181 #define HTP_SERVER_APACHE 11
182 #define HTP_SERVER_APACHE_2_2 12
188 #define TX_PROGRESS_NEW 0
189 #define TX_PROGRESS_REQ_LINE 1
190 #define TX_PROGRESS_REQ_HEADERS 2
191 #define TX_PROGRESS_REQ_BODY 3
192 #define TX_PROGRESS_REQ_TRAILER 4
193 #define TX_PROGRESS_WAIT 5
194 #define TX_PROGRESS_RES_LINE 6
195 #define TX_PROGRESS_RES_HEADERS 7
196 #define TX_PROGRESS_RES_BODY 8
197 #define TX_PROGRESS_RES_TRAILER 9
198 #define TX_PROGRESS_DONE 10
200 #define STREAM_STATE_NEW 0
201 #define STREAM_STATE_OPEN 1
202 #define STREAM_STATE_CLOSED 2
203 #define STREAM_STATE_ERROR 3
204 #define STREAM_STATE_TUNNEL 4
205 #define STREAM_STATE_DATA_OTHER 5
206 #define STREAM_STATE_DATA 9
208 #define URL_DECODER_PRESERVE_PERCENT 0
209 #define URL_DECODER_REMOVE_PERCENT 1
210 #define URL_DECODER_DECODE_INVALID 2
211 #define URL_DECODER_STATUS_400 400
218 #define STATUS_400 400
219 #define STATUS_404 401
221 #define HTP_AUTH_NONE 0
222 #define HTP_AUTH_BASIC 1
223 #define HTP_AUTH_DIGEST 2
224 #define HTP_AUTH_UNKNOWN 9
226 #define HTP_FILE_MULTIPART 1
227 #define HTP_FILE_PUT 2
229 #define IN_TEST_NEXT_BYTE_OR_RETURN(X) \
230 if ((X)->in_current_offset >= (X)->in_current_len) { \
234 #define IN_NEXT_BYTE(X) \
235 if ((X)->in_current_offset < (X)->in_current_len) { \
236 (X)->in_next_byte = (X)->in_current_data[(X)->in_current_offset]; \
237 (X)->in_current_offset++; \
238 (X)->in_stream_offset++; \
240 (X)->in_next_byte = -1; \
243 #define IN_NEXT_BYTE_OR_RETURN(X) \
244 if ((X)->in_current_offset < (X)->in_current_len) { \
245 (X)->in_next_byte = (X)->in_current_data[(X)->in_current_offset]; \
246 (X)->in_current_offset++; \
247 (X)->in_stream_offset++; \
252 #define IN_COPY_BYTE_OR_RETURN(X) \
253 if ((X)->in_current_offset < (X)->in_current_len) { \
254 (X)->in_next_byte = (X)->in_current_data[(X)->in_current_offset]; \
255 (X)->in_current_offset++; \
256 (X)->in_stream_offset++; \
261 if ((X)->in_line_len < (X)->in_line_size) { \
262 (X)->in_line[(X)->in_line_len] = (X)->in_next_byte; \
263 (X)->in_line_len++; \
264 if (((X)->in_line_len == HTP_HEADER_LIMIT_SOFT)&&(!((X)->in_tx->flags & HTP_FIELD_LONG))) { \
265 (X)->in_tx->flags |= HTP_FIELD_LONG; \
266 htp_log((X), HTP_LOG_MARK, HTP_LOG_ERROR, HTP_LINE_TOO_LONG_SOFT, "Request field over soft limit"); \
269 htp_log((X), HTP_LOG_MARK, HTP_LOG_ERROR, HTP_LINE_TOO_LONG_HARD, "Request field over hard limit"); \
273 #define OUT_TEST_NEXT_BYTE_OR_RETURN(X) \
274 if ((X)->out_current_offset >= (X)->out_current_len) { \
278 #define OUT_NEXT_BYTE(X) \
279 if ((X)->out_current_offset < (X)->out_current_len) { \
280 (X)->out_next_byte = (X)->out_current_data[(X)->out_current_offset]; \
281 (X)->out_current_offset++; \
282 (X)->out_stream_offset++; \
284 (X)->out_next_byte = -1; \
287 #define OUT_NEXT_BYTE_OR_RETURN(X) \
288 if ((X)->out_current_offset < (X)->out_current_len) { \
289 (X)->out_next_byte = (X)->out_current_data[(X)->out_current_offset]; \
290 (X)->out_current_offset++; \
291 (X)->out_stream_offset++; \
296 #define OUT_COPY_BYTE_OR_RETURN(X) \
297 if ((X)->out_current_offset < (X)->out_current_len) { \
298 (X)->out_next_byte = (X)->out_current_data[(X)->out_current_offset]; \
299 (X)->out_current_offset++; \
300 (X)->out_stream_offset++; \
305 if ((X)->out_line_len < (X)->out_line_size) { \
306 (X)->out_line[(X)->out_line_len] = (X)->out_next_byte; \
307 (X)->out_line_len++; \
308 if (((X)->out_line_len == HTP_HEADER_LIMIT_SOFT)&&(!((X)->out_tx->flags & HTP_FIELD_LONG))) { \
309 (X)->out_tx->flags |= HTP_FIELD_LONG; \
310 htp_log((X), HTP_LOG_MARK, HTP_LOG_ERROR, HTP_LINE_TOO_LONG_SOFT, "Response field over soft limit"); \
313 htp_log((X), HTP_LOG_MARK, HTP_LOG_ERROR, HTP_LINE_TOO_LONG_HARD, "Response field over hard limit"); \
1209 #define CFG_NOT_SHARED 0
1210 #define CFG_SHARED 1
1266 int htp_chomp(
unsigned char *data,
size_t *len);
1302 void htp_log(
htp_connp_t *connp,
const char *file,
int line,
int level,
int code,
const char *fmt, ...);
1306 void fprint_raw_data(FILE *stream,
const char *name,
unsigned char *data,
size_t len);
1307 void fprint_raw_data_ex(FILE *stream,
const char *name,
unsigned char *data,
size_t offset,
size_t len);