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
43 extern "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"
54 #include "htp_connection_parser.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 
67 struct htp_conn_t {
69  char *client_addr;
70 
73 
75  char *server_addr;
76 
79 
86 
89 
91  uint8_t flags;
92 
95 
98 
101 
104 };
105 
111 struct htp_file_t {
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 
145 struct htp_log_t {
148 
151 
153  const char *msg;
154 
156  enum htp_log_level_t level;
157 
159  int code;
160 
162  const char *file;
163 
165  unsigned int line;
166 };
167 
171 struct htp_header_t {
174 
177 
179  uint64_t flags;
180 };
181 
185 struct htp_param_t {
188 
191 
194 
197 
202  void *parser_data;
203 };
204 
208 struct htp_tx_t {
211 
214 
217 
223 
225  void *user_data;
226 
227 
228  // Request fields
229 
231  unsigned int request_ignored_lines;
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 
566  int is_last;
567 };
568 
575 struct htp_uri_t {
578 
581 
584 
587 
590 
597 
600 
603 
608 };
609 
615 void htp_uri_free(htp_uri_t *uri);
616 
622 htp_uri_t *htp_uri_alloc(void);
623 
636 void htp_log(htp_connp_t *connp, const char *file, int line, enum htp_log_level_t level, int code, const char *fmt, ...);
637 
649 htp_status_t htp_urldecode_inplace(htp_cfg_t *cfg, enum htp_decoder_ctx_t ctx, bstr *input, uint64_t *flags);
650 
665 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);
666 
672 char *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
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
char * htp_get_version(void)
Definition: htp_util.c:2496
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