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.
