0.4 --- - Removed the HOOK_* constants. Use the equivalent HTP_* constants instead. - Added the "htp_" prefix to all hook functions. - Renamed hooks.h to htp_hooks.h and hooks.c to htp_hooks.c. - Added the "htp_" prefix to all table structures and functions. - list_array_replace returns HTP_ERROR (-1) instead of 0 when the index does not exist. - Removed list iterators. Use this instead: for (int i = 0, n = htp_list_size(l); i < n; i++) { bstr *b = htp_list_get(l, i); // Do something with b here } - Removed table iterators. Use this instead: bstr *key = NULL; bstr *value = NULL; for (int i = 0, n = htp_table_size(t); i < n; i++) { value = htp_table_get_index(l, i, &key); // Do something with key and value here } - Removed htp_connp_create_copycfg(), along with the ability of connection parsers to have private configurations. - htp_conn_remove_tx() now returns HTP_ERROR on error (was 0). - Renamed STREAM_STATE_* constants to HTP_STREAM_* - Personality HTP_SERVER_APACHE_2_2 renamed to HTP_SERVER_APACHE_2. Personality HTP_SERVER_APACHE removed. - Request parameters are now stored in a single structure called request_params. Previously, there were 2 structures, one for query string parameters (GET) and another for body parameters (e.g., POST). Further, before LibHTP stored parameter names and values in these structures. Now there is htp_param_t, which stores additional useful information (e.g., allows parameters to be tracked back to the parsers)parsers. - Improve the table code to support 3 key management strategies. Strategy is determined when the first add function is invoked, with consistency checks to ensure that approach is always used. - A number of *_destroy functions and bstr_free() used to take a pointer to a pointer. Now all such functions are taking pointers to the structures that need to be destroyed. - Renamed HTP_FIELD_NUL_BYTE flag to HTP_FIELD_RAW_NUL. - Renamed HTP_PATH_FULLWIDTH_EVASION to HTP_PATH_HALF_FULL_RANGE. - Removed htp_tx_t::request_line_raw, htp_tx_t::response_line_raw. - Removed htp_tx_t::request_header_lines, htp_tx_t::response_header_lines. - Removed htp_tx_get_request_headers_raw() and htp_tx_get_response_headers_raw(). - Changed REQUEST_LINE callback signature from int (*callback_fn)(htp_connp_t *) to int (*callback_fn)(htp_connp_t *, unsigned char *, size_t). The additional parameters are used to expose the entire request line (incl. line terminators) to the callback. - Refactor how normalization options are configured. LibHTP now supports multiple normalization contexts, with 2 used at this time: HTP_DECODER_URL_PATH and HTP_DECODER_URLENCODED. - New hooks to receive raw request header and trailer data: REQUEST_HEADER_DATA and REQUEST_TRAILER_DATA. - New hooks to receive raw response header and trailer data: RESPONSE_HEADER_DATA and RESPONSE_TRAILER_DATA. - Removed field htp_tx_t::request_uri_normalized. - Removed fields htp_tx_t::request_line_nul and htp_tx_t::request_line_nul_offset. - Renamed htp_tx_t::parsed_uri_incomplete to htp_tx_t::parsed_uri_raw. - Added request_hostname and request_port_number to htp_tx_t. These fields will hold the information on what's the correct hostname/port, per RFC. Before, this information was in parsed_uri, but parsed_uri now stores only what was actually supplied in the URI.