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 
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 };
540 
548 
550  const unsigned char *data;
551 
553  size_t len;
554 
560  int is_last;
561 };
562 
569 struct htp_uri_t {
572 
575 
578 
581 
584 
591 
594 
597 
602 };
603 
609 void htp_uri_free(htp_uri_t *uri);
610 
616 htp_uri_t *htp_uri_alloc(void);
617 
630 void htp_log(htp_connp_t *connp, const char *file, int line, enum htp_log_level_t level, int code, const char *fmt, ...);
631 
643 htp_status_t htp_urldecode_inplace(htp_cfg_t *cfg, enum htp_decoder_ctx_t ctx, bstr *input, uint64_t *flags);
644 
659 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);
660 
666 char *htp_get_version(void);
667 
668 #ifdef __cplusplus
669 }
670 #endif
671 
672 #endif /* _HTP_H */
Definition: htp_config_private.h:123
htp_time_t open_timestamp
Definition: htp.h:94
enum htp_tx_req_progress_t request_progress
Definition: htp.h:532
htp_tx_t * tx
Definition: htp.h:547
Definition: htp.h:171
enum htp_transfer_coding_t request_transfer_coding
Definition: htp.h:327
bstr * port
Definition: htp.h:583
bstr * request_protocol
Definition: htp.h:252
bstr * response_line
Definition: htp.h:413
#define htp_list_t
Definition: htp_list.h:48
int64_t response_message_len
Definition: htp.h:473
bstr * request_auth_username
Definition: htp.h:387
htp_urlenp_t * request_urlenp_body
Definition: htp.h:369
const unsigned char * data
Definition: htp.h:136
enum htp_content_encoding_t response_content_encoding
Definition: htp.h:504
enum htp_content_encoding_t response_content_encoding_processing
Definition: htp.h:513
uint8_t flags
Definition: htp.h:91
int is_protocol_0_9
Definition: htp.h:266
enum htp_auth_type_t request_auth_type
Definition: htp.h:384
void htp_uri_free(htp_uri_t *uri)
Definition: htp_util.c:2579
int code
Definition: htp.h:159
int server_port
Definition: htp.h:78
htp_content_encoding_t
Definition: htp_core.h:143
htp_tx_req_progress_t
Definition: htp_transaction.h:75
Definition: htp.h:569
int response_status_number
Definition: htp.h:434
bstr * response_protocol
Definition: htp.h:416
int64_t request_content_length
Definition: htp.h:345
bstr * request_method
Definition: htp.h:237
htp_time_t close_timestamp
Definition: htp.h:97
htp_conn_t * conn
Definition: htp.h:213
int is_last
Definition: htp.h:560
bstr * request_auth_password
Definition: htp.h:390
unsigned int response_ignored_lines
Definition: htp.h:410
enum htp_data_source_t source
Definition: htp.h:193
struct timeval htp_time_t
Definition: htp_core.h:60
unsigned int line
Definition: htp.h:165
htp_mpartp_t * request_mpartp
Definition: htp.h:375
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:364
enum htp_content_encoding_t request_content_encoding
Definition: htp.h:330
int is_config_shared
Definition: htp.h:222
htp_connp_t * connp
Definition: htp.h:210
char * htp_get_version(void)
Definition: htp_util.c:2603
bstr * request_line
Definition: htp.h:234
int fd
Definition: htp.h:125
bstr * request_content_type
Definition: htp.h:337
char * tmpname
Definition: htp.h:122
int64_t in_data_counter
Definition: htp.h:100
int request_port_number
Definition: htp.h:404
htp_list_t * messages
Definition: htp.h:88
bstr * scheme
Definition: htp.h:571
Definition: bstr.h:57
htp_decoder_ctx_t
Definition: htp_config.h:51
const char * msg
Definition: htp.h:153
Definition: htp.h:111
htp_table_t * request_cookies
Definition: htp.h:381
int htp_status_t
Definition: htp_core.h:46
htp_table_t * response_headers
Definition: htp.h:449
int64_t request_message_len
Definition: htp.h:307
int64_t out_data_counter
Definition: htp.h:103
Definition: htp.h:131
bstr * name
Definition: htp.h:173
uint64_t flags
Definition: htp.h:179
size_t index
Definition: htp.h:538
htp_method_t
Definition: htp_core.h:254
Definition: htp.h:185
bstr * request_hostname
Definition: htp.h:398
bstr * password
Definition: htp.h:577
int response_status_expected_number
Definition: htp.h:440
enum htp_log_level_t level
Definition: htp.h:156
bstr * filename
Definition: htp.h:116
htp_file_source_t
Definition: htp_core.h:181
int client_port
Definition: htp.h:72
Definition: htp.h:67
bstr * path
Definition: htp.h:593
bstr * value
Definition: htp.h:176
Definition: htp_urlencoded.h:63
htp_table_t * request_params
Definition: htp.h:378
int request_protocol_number
Definition: htp.h:258
const unsigned char * data
Definition: htp.h:550
enum htp_transfer_coding_t response_transfer_coding
Definition: htp.h:497
bstr * name
Definition: htp.h:187
int64_t response_content_length
Definition: htp.h:491
enum htp_parser_id_t parser_id
Definition: htp.h:196
int port_number
Definition: htp.h:590
enum htp_tx_res_progress_t response_progress
Definition: htp.h:535
int64_t response_entity_len
Definition: htp.h:483
htp_hook_t * hook_response_body_data
Definition: htp.h:357
bstr * username
Definition: htp.h:574
htp_parser_id_t
Definition: htp_core.h:291
enum htp_method_t request_method_number
Definition: htp.h:240
htp_uri_t * htp_uri_alloc(void)
Definition: htp_util.c:2594
Definition: htp_connection_parser_private.h:51
htp_tx_t * tx
Definition: htp.h:150
void * parser_data
Definition: htp.h:202
htp_uri_t * parsed_uri_raw
Definition: htp.h:283
htp_hook_t * hook_request_body_data
Definition: htp.h:351
size_t len
Definition: htp.h:139
size_t len
Definition: htp.h:553
bstr * request_uri
Definition: htp.h:249
int64_t len
Definition: htp.h:119
htp_tx_res_progress_t
Definition: htp_transaction.h:84
bstr * hostname
Definition: htp.h:580
int response_protocol_number
Definition: htp.h:422
int64_t request_entity_len
Definition: htp.h:317
uint64_t flags
Definition: htp.h:529
htp_table_t * request_headers
Definition: htp.h:320
htp_urlenp_t * request_urlenp_query
Definition: htp.h:363
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:1508
char * server_addr
Definition: htp.h:75
void * user_data
Definition: htp.h:225
Definition: htp_multipart_private.h:85
htp_cfg_t * cfg
Definition: htp.h:216
enum htp_file_source_t source
Definition: htp.h:113
bstr * value
Definition: htp.h:190
Definition: htp_table_private.h:63
htp_connp_t * connp
Definition: htp.h:147
const char * file
Definition: htp.h:162
bstr * response_content_type
Definition: htp.h:520
htp_log_level_t
Definition: htp_core.h:241
htp_auth_type_t
Definition: htp_core.h:122
htp_file_t * file
Definition: htp.h:133
bstr * response_message
Definition: htp.h:443
unsigned int request_ignored_lines
Definition: htp.h:231
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:1503
Definition: htp.h:545
htp_data_source_t
Definition: htp_core.h:309
int seen_100continue
Definition: htp.h:446
bstr * response_status
Definition: htp.h:428
bstr * fragment
Definition: htp.h:601
Definition: htp_hooks.h:52
char * client_addr
Definition: htp.h:69
Definition: htp.h:208
htp_list_t * transactions
Definition: htp.h:85
htp_uri_t * parsed_uri
Definition: htp.h:275
bstr * query
Definition: htp.h:596
htp_transfer_coding_t
Definition: htp_core.h:164
Definition: htp.h:145