HTP 0.5
htp.h
Go to the documentation of this file.
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
39#ifndef _HTP_H
40#define _HTP_H
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46#include <sys/time.h>
47
48#include "htp_version.h"
49#include "htp_core.h"
50
51#include "bstr.h"
52#include "htp_base64.h"
53#include "htp_config.h"
55#include "htp_decompressors.h"
56#include "htp_hooks.h"
57#include "htp_list.h"
58#include "htp_multipart.h"
59#include "htp_table.h"
60#include "htp_transaction.h"
61#include "htp_urlencoded.h"
62#include "htp_utf8_decoder.h"
63
67struct htp_conn_t {
70
73
76
79
86
89
91 uint8_t flags;
92
95
98
101
104};
105
114
117
119 int64_t len;
120
122 char *tmpname;
123
125 int fd;
126};
127
134
136 const unsigned char *data;
137
139 size_t len;
140};
141
145struct htp_log_t {
148
151
153 const char *msg;
154
157
159 int code;
160
162 const char *file;
163
165 unsigned int line;
166};
167
174
177
179 uint64_t flags;
180};
181
188
191
194
197
203};
204
208struct htp_tx_t {
211
214
217
223
226
227
228 // Request fields
229
232
235
238
241
250
253
259
267
276
284
285 /* HTTP 1.1 RFC
286 *
287 * 4.3 Message Body
288 *
289 * The message-body (if any) of an HTTP message is used to carry the
290 * entity-body associated with the request or response. The message-body
291 * differs from the entity-body only when a transfer-coding has been
292 * applied, as indicated by the Transfer-Encoding header field (section
293 * 14.41).
294 *
295 * message-body = entity-body
296 * | <entity-body encoded as per Transfer-Encoding>
297 */
298
308
318
321
328
331
338
346
352
358
364
370
376
379
382
385
388
391
399
405
406
407 // Response fields
408
411
414
417
423
429
435
441
444
447
450
451 /* HTTP 1.1 RFC
452 *
453 * 4.3 Message Body
454 *
455 * The message-body (if any) of an HTTP message is used to carry the
456 * entity-body associated with the request or response. The message-body
457 * differs from the entity-body only when a transfer-coding has been
458 * applied, as indicated by the Transfer-Encoding header field (section
459 * 14.41).
460 *
461 * message-body = entity-body
462 * | <entity-body encoded as per Transfer-Encoding>
463 */
464
474
484
492
498
505
514
521
522
523 // Common fields
524
529 uint64_t flags;
530
533
536
538 size_t index;
539
542
545};
546
554
556 const unsigned char *data;
557
559 size_t len;
560
567};
568
575struct htp_uri_t {
578
581
584
587
590
597
600
603
608};
609
615void htp_uri_free(htp_uri_t *uri);
616
623
636void htp_log(htp_connp_t *connp, const char *file, int line, enum htp_log_level_t level, int code, const char *fmt, ...);
637
649htp_status_t htp_urldecode_inplace(htp_cfg_t *cfg, enum htp_decoder_ctx_t ctx, bstr *input, uint64_t *flags);
650
665htp_status_t htp_urldecode_inplace_ex(htp_cfg_t *cfg, enum htp_decoder_ctx_t ctx, bstr *input, uint64_t *flags, int *expected_status_code);
666
672char *htp_get_version(void);
673
674#ifdef __cplusplus
675}
676#endif
677
678#endif /* _HTP_H */
htp_status_t htp_urldecode_inplace(htp_cfg_t *cfg, enum htp_decoder_ctx_t ctx, bstr *input, uint64_t *flags)
Definition: htp_util.c:1534
char * htp_get_version(void)
Definition: htp_util.c:2496
void htp_log(htp_connp_t *connp, const char *file, int line, enum htp_log_level_t level, int code, const char *fmt,...)
Definition: htp_util.c:391
htp_status_t htp_urldecode_inplace_ex(htp_cfg_t *cfg, enum htp_decoder_ctx_t ctx, bstr *input, uint64_t *flags, int *expected_status_code)
Definition: htp_util.c:1539
htp_uri_t * htp_uri_alloc(void)
Definition: htp_util.c:2487
void htp_uri_free(htp_uri_t *uri)
Definition: htp_util.c:2472
htp_decoder_ctx_t
Definition: htp_config.h:51
htp_auth_type_t
Definition: htp_core.h:122
struct timeval htp_time_t
Definition: htp_core.h:60
htp_data_source_t
Definition: htp_core.h:314
htp_content_encoding_t
Definition: htp_core.h:143
htp_method_t
Definition: htp_core.h:259
htp_file_source_t
Definition: htp_core.h:184
int htp_status_t
Definition: htp_core.h:46
htp_parser_id_t
Definition: htp_core.h:296
htp_transfer_coding_t
Definition: htp_core.h:167
htp_log_level_t
Definition: htp_core.h:246
#define htp_list_t
Definition: htp_list.h:48
htp_tx_req_progress_t
Definition: htp_transaction.h:75
htp_tx_res_progress_t
Definition: htp_transaction.h:84
Definition: bstr.h:57
Definition: htp_config_private.h:123
Definition: htp.h:67
char * client_addr
Definition: htp.h:69
int64_t in_data_counter
Definition: htp.h:100
int64_t out_data_counter
Definition: htp.h:103
char * server_addr
Definition: htp.h:75
htp_time_t close_timestamp
Definition: htp.h:97
int client_port
Definition: htp.h:72
htp_time_t open_timestamp
Definition: htp.h:94
uint8_t flags
Definition: htp.h:91
htp_list_t * messages
Definition: htp.h:88
htp_list_t * transactions
Definition: htp.h:85
int server_port
Definition: htp.h:78
Definition: htp_connection_parser_private.h:51
Definition: htp.h:131
size_t len
Definition: htp.h:139
htp_file_t * file
Definition: htp.h:133
const unsigned char * data
Definition: htp.h:136
Definition: htp.h:111
char * tmpname
Definition: htp.h:122
int64_t len
Definition: htp.h:119
bstr * filename
Definition: htp.h:116
enum htp_file_source_t source
Definition: htp.h:113
int fd
Definition: htp.h:125
Definition: htp.h:171
uint64_t flags
Definition: htp.h:179
bstr * value
Definition: htp.h:176
bstr * name
Definition: htp.h:173
Definition: htp_hooks.h:52
Definition: htp.h:145
htp_tx_t * tx
Definition: htp.h:150
enum htp_log_level_t level
Definition: htp.h:156
htp_connp_t * connp
Definition: htp.h:147
const char * msg
Definition: htp.h:153
int code
Definition: htp.h:159
unsigned int line
Definition: htp.h:165
const char * file
Definition: htp.h:162
Definition: htp_multipart_private.h:85
Definition: htp.h:185
bstr * value
Definition: htp.h:190
void * parser_data
Definition: htp.h:202
enum htp_data_source_t source
Definition: htp.h:193
enum htp_parser_id_t parser_id
Definition: htp.h:196
bstr * name
Definition: htp.h:187
Definition: htp_table_private.h:63
Definition: htp.h:551
size_t len
Definition: htp.h:559
htp_tx_t * tx
Definition: htp.h:553
const unsigned char * data
Definition: htp.h:556
int is_last
Definition: htp.h:566
Definition: htp.h:208
bstr * response_line
Definition: htp.h:413
int64_t request_entity_len
Definition: htp.h:317
bstr * response_content_type
Definition: htp.h:520
int is_config_shared
Definition: htp.h:222
int response_status_number
Definition: htp.h:434
bstr * response_message
Definition: htp.h:443
int request_protocol_number
Definition: htp.h:258
enum htp_transfer_coding_t response_transfer_coding
Definition: htp.h:497
enum htp_transfer_coding_t request_transfer_coding
Definition: htp.h:327
bstr * request_line
Definition: htp.h:234
bstr * response_protocol
Definition: htp.h:416
int64_t response_content_length
Definition: htp.h:491
bstr * request_content_type
Definition: htp.h:337
bstr * request_method
Definition: htp.h:237
bstr * request_auth_username
Definition: htp.h:387
htp_conn_t * conn
Definition: htp.h:213
bstr * request_hostname
Definition: htp.h:398
htp_urlenp_t * request_urlenp_query
Definition: htp.h:363
htp_urlenp_t * request_urlenp_body
Definition: htp.h:369
enum htp_content_encoding_t response_content_encoding
Definition: htp.h:504
uint64_t flags
Definition: htp.h:529
htp_uri_t * parsed_uri
Definition: htp.h:275
bstr * response_status
Definition: htp.h:428
int is_protocol_0_9
Definition: htp.h:266
enum htp_content_encoding_t response_content_encoding_processing
Definition: htp.h:513
int64_t request_content_length
Definition: htp.h:345
uint16_t req_header_repetitions
Definition: htp.h:541
bstr * request_protocol
Definition: htp.h:252
unsigned int response_ignored_lines
Definition: htp.h:410
int64_t response_message_len
Definition: htp.h:473
uint16_t res_header_repetitions
Definition: htp.h:544
int response_status_expected_number
Definition: htp.h:440
htp_cfg_t * cfg
Definition: htp.h:216
int64_t response_entity_len
Definition: htp.h:483
enum htp_content_encoding_t request_content_encoding
Definition: htp.h:330
htp_connp_t * connp
Definition: htp.h:210
int seen_100continue
Definition: htp.h:446
enum htp_method_t request_method_number
Definition: htp.h:240
enum htp_tx_req_progress_t request_progress
Definition: htp.h:532
int64_t request_message_len
Definition: htp.h:307
enum htp_tx_res_progress_t response_progress
Definition: htp.h:535
int response_protocol_number
Definition: htp.h:422
htp_table_t * response_headers
Definition: htp.h:449
htp_table_t * request_cookies
Definition: htp.h:381
unsigned int request_ignored_lines
Definition: htp.h:231
htp_table_t * request_params
Definition: htp.h:378
void * user_data
Definition: htp.h:225
htp_table_t * request_headers
Definition: htp.h:320
bstr * request_auth_password
Definition: htp.h:390
htp_mpartp_t * request_mpartp
Definition: htp.h:375
htp_hook_t * hook_response_body_data
Definition: htp.h:357
enum htp_auth_type_t request_auth_type
Definition: htp.h:384
size_t index
Definition: htp.h:538
int request_port_number
Definition: htp.h:404
htp_uri_t * parsed_uri_raw
Definition: htp.h:283
htp_hook_t * hook_request_body_data
Definition: htp.h:351
bstr * request_uri
Definition: htp.h:249
Definition: htp.h:575
bstr * path
Definition: htp.h:599
bstr * fragment
Definition: htp.h:607
int port_number
Definition: htp.h:596
bstr * port
Definition: htp.h:589
bstr * scheme
Definition: htp.h:577
bstr * password
Definition: htp.h:583
bstr * query
Definition: htp.h:602
bstr * username
Definition: htp.h:580
bstr * hostname
Definition: htp.h:586
Definition: htp_urlencoded.h:63