v1.2.14 - !!!! SECURITY UPDATE !!!!
 o Added doxygen tags. Updated Doxyfile to include more sources and headers. (50ab41d Dan Henderson)
 o SSL logging on handshake errors (0fff6bc Nathan French)
 o Remove built-in Oniguruma, now rely on system only (a31601c Nathan French)
 o FindLibevent now displays all deps (02a9e6c Nathan French)

 * THIS IS PRIMARILY A SECURITY UPDATE:
    Oniguruma (the regex library used by libevhtp) was packaged with the source;
    this was dumb. There were several CVE's recently published that made evhtp
    insecure.

    NOTE TO USERS:

    Libevhtp will no longer ship Oniguruma with the source. Instead, the build
    process will attempt and find a system-installed version instead. There is
    a big red warning if it is not found.

    A big thanks must go to @flokli (github) for pointing this out to me.

v1.2.13
 o Rename test->test_general (test is reservet target name in cmake) (d18c6d0 Vladimir Romanov)
 o Fix CMake files (a2fcb3d Vladimir Romanov)
 o Fix compilation (74537f5 Vladimir Romanov)
 o [#32] fix crash in evhtp_unbind_socket when evlistener fails (8149a84 Nathan French)
 o [#31] use CURRENT_SOURCE_DIR instead of SOURCE_DIR in cmake (aa8a989 Nathan French)
 o Added EVHTP_DEBUG option (with new logging) (f20e5cf Nathan French)
 o minor updates for pull #33 (ccf5ce4 Nathan French)
 o Make github stop bitching about newlines. (2c98506 Nathan French)
 o transparent reference counting API (6f4dc08 Nathan French)
 o Added some debug logs (0a79919 Nathan French)
 o use evhtp/onig (76ad658 Nathan French)
 o [#38] some extra debug logging (9db2231 Nathan French)
 o [#38] I'm an idiot, fix for parser_init. (7c13a57 Nathan French)
 o proper format str for logging in parser (de287b0 Nathan French)
 o Fix typo in `evthr_new()` function name (3cfeb03 Vincent Bernat)
 o Use evhtp/onig when system version isn't found. (a59b625 Nathan French)
 o fix build on SunOS (0c54892 Sebastian Wiedenroth)
 o Parser cleanup. (db040e9 Nathan French)
 o add onigposix to build dir evhtp if sys not found (7b9d1a2 Nathan French)
 o Ignore me, just formatting. (d911f58 Nathan French)
 o Update LICENSE file (new authors / dates), no other changes (12ed7e8 Nathan French)
 o fixes #43 (no need to check for -ldl or -lrt (bb0630c Nathan French)
 o Likely defect fix for issue 42. Check connection->type to ensure that it is not evhtp_type_client. Also checked for c->htp to not be null in a couple of ssl related functions. (77a0752 Dan Henderson)
 o Bugfixes and cleanup for htp__connection_writecb_ (440e5b9 Nathan French)
 o Update issues template. (960a788 Nathan French)
 o [Bugfix #51] htp__callback_find_ length check fix (44ddf9a Nathan French)
 o Better error handling for connection_ssl_new (369fe77 Nathan French)
 o connection_ssl_new log errors to stderr (a1f6926 Nathan French)
 o Add evhtp_query_free for test_query (b150ebe Nathan French)
 o formatting (2307737 Nathan French)
 o Add RPM to package generation (8479c02 Tony Lambiris)
 o replace cruft in evhtp_unset_all_hooks with for loop (4e62d69 Nathan French)
 o [#55] More flexible package generation (4c5dbe2 Nathan French)
 o added colors.cmake for pretty printing (bec3451 Nathan French)

v1.2.12
 o remove evhtp_heap, never used (d132721 Nathan French)
 o remove evhtp_json, never used (aec4b3c Nathan French)
 o [Issue#20] Include pathing (80a69cc Nathan French)
 o Fix deprecated usage (f4c42c7 Roman Gershman)
 o Create issue_template.md (8d1a95f Nathan French)
 o [Issue#25] Return NULL if callbacks == NULL for get_cb (cfcdba4 Nathan French)
 o adding more null checks. I wish __attr__(nonull) was portable (9b552b7 Nathan French)
 o adding some struct accessor defines to make life easier (613c5bf Nathan French)
 o I think I worked out most of the potential derefs (acb42cf Nathan French)
 o Fix potential null deref in htp__strndup_ (60b85ca Nathan French)
 o Fix dead assignments in parser.c (e0a48e1 Nathan French)
 o Eat our own dogfood (use_thread_wexit()) (ea37928 Nathan French)
 o No use for strlen() in a loop (6833080 Nathan French)
 o use PROJECT_BINARY_DIR for sys/ compat headers (012341c Nathan French)
 o return int for htp__path_new_ (bf59eb1 Nathan French)
 o more return normalization (91008a6 Nathan French)
 o allocation functions set *out to NULL (0305c10 Nathan French)
 o do not return on error from requie_uri (ddc2ce6 Nathan French)
 o added user-defined custom memory functions (73b54c6 Nathan French)
 o for some reason, htparser_init was being called manually with type_request?? (a153e5f Nathan French)
 o Add htp__strndup_ memfn wrapper (763168c Nathan French)
 o add a callback member in evhtp_ssl_cfg_t for customized decrypt privfile. fixes #16 (b3a4d42 h00360646)
 o Internalize some structs / deprecate evhtp_set_hook() (50ab327 Nathan French)
 o remove cruft (1b1a037 Nathan French)
 o add include directory for compat/sys headers (948c547 Nathan French)
 o export flag functions (3467cbb Nathan French)
 o formatting (4ec8dd3 Nathan French)
 o (evhtp_send_reply): Grab reference to bufferevent during write. (a976a2f Marcus Sundberg)
 o add thread exit callback for cleaning (0c7d9c4 jgli)
 o fix memory leak (a6b00cc jgli)
 o fix thread exit callback type (c8978b6 jgli)
 o Updates for threading functionality. (b634002 Mark Ellzey)
 o Added evhtp_accept_socket (a497a14 Mark Ellzey)
 o Forgot to export evhtp_accept_socke. (c94cb5b Mark Ellzey)
 o Formatting. (4a78297 Mark Ellzey)
 o Maybe I should spell rite. (2114210 Mark Ellzey)
 o Fix cmake compilation issue in centos7 (dfc8c2b kaustubh-d)
 o Remove double-free when SSL is used. (ee32b2a Jacob Marble)
 o Add CPack commands to build a debian package. (0c4a8ec Tom Pusateri)
 o [docs] added some doxygen groups (8a247f1 Mark Ellzey)
 o check res for bufferevent_socket_connect (#136) (70b68d4 mthomas)
 o Regression from commit 67ed0bc (c96c51e Ultima1252)
 o Added build/* to gitignore (c64f1dc Mark Ellzey)
 o Updating license to include Marcus Sundberg (801c52f Mark Ellzey)
 o [htparse] fix up some stuff to make coverity happy (abc7eb4 Mark Ellzey)
 o More coverity fixes (7d3cc52 Mark Ellzey)
 o check for sockopt returns (534bb48 Mark Ellzey)
 o master travis updates (2c6bb88 Mark Ellzey)
 o added testbigendian module for old cmake (fb6a866 Mark Ellzey)
 o Added initial evhtp_json API (6e48770 Mark Ellzey)
 o LICENSE update for ripping liblz json api (fb473ef Mark Ellzey)
 o Removing the SIGNED.md file (outdated anyway) (d4bcfa8 Mark Ellzey)
 o Update README (6ef073e Mark Ellzey)
 o updates / formatting / renames (926e355 Nathan French)
 o static funcs from now on will just return int (5112b6d Nathan French)
 o fix htp__use_threads_ call error (2ed2f7f weijiazhen)
 o FIX : Socket leakage on error #6 (d13b72b Nathan French)
 o Issue#6: make evhtp_accept_socket conform to api (d0347dc Nathan French)
 o Establish conformity through flags. (58da6dd Nathan French)
 o request flags (71341d9 Nathan French)
 o EVHTP_CONN flags (087e9a7 Nathan French)
 o Flag ops (and related functions) / cleanup (0abc96f Nathan French)
 o Add flags accessor (e0f04aa Nathan French)

v1.2.11
 o Grab reference to bufferevent during write. (a976a2f Marcus Sundberg)
 o add thread exit callback for cleaning (0c7d9c4 jgli)
 o fix memory leak (a6b00cc jgli)
 o fix thread exit callback type (c8978b6 jgli)
 o Updates for threading functionality. (b634002 Mark Ellzey)
 o Added evhtp_accept_socket (a497a14 Mark Ellzey)
 o Forgot to export evhtp_accept_socke. (c94cb5b Mark Ellzey)
 o Formatting. (4a78297 Mark Ellzey)
 o Maybe I should spell rite. (2114210 Mark Ellzey)
 o Fix cmake compilation issue in centos7 (dfc8c2b kaustubh-d)
 o Remove double-free when SSL is used. (ee32b2a Jacob Marble)
 o Add CPack commands to build a debian package. (0c4a8ec Tom Pusateri)
 o [docs] added some doxygen groups (8a247f1 Mark Ellzey)
 o check res for bufferevent_socket_connect (#136) (70b68d4 mthomas)
 o Regression from commit 67ed0bc (c96c51e Ultima1252)
 o Added build/* to gitignore (c64f1dc Mark Ellzey)
 o Updating license to include Marcus Sundberg (801c52f Mark Ellzey)
 o [htparse] fix up some stuff to make coverity happy (abc7eb4 Mark Ellzey)
 o Update README.markdown (3058a6e Mark Ellzey)
 o fixes and travis integration (ad92289 Mark Ellzey)
 o check for sockopt returns (534bb48 Mark Ellzey)
 o more travis updates (a9b4d38 Mark Ellzey)
 o travis (12a91ab Mark Ellzey)
 o Update README.markdown (b595a0d Mark Ellzey)
 o added initial lightweight heap allocator (6bf121b Mark Ellzey)
 o added initial lightweight heap allocator (5f634b6 Mark Ellzey)
 o Added initial evhtp_json API (6e48770 Mark Ellzey)
 o Removing the SIGNED.md file (outdated anyway) (d4bcfa8 Mark Ellzey)
 o updates / formatting / renames (926e355 Nathan French)
 o static funcs from now on will just return int (5112b6d Nathan French)
 o fix htp__use_threads_ call error (2ed2f7f weijiazhen)
 o FIX : Socket leakage on error #6 (d13b72b Nathan French)
 o Issue#6: make evhtp_accept_socket conform to api (d0347dc Nathan French)
 o Establish conformity through flags. (58da6dd Nathan French)
 o request flags (71341d9 Nathan French)
 o EVHTP_CONN flags (087e9a7 Nathan French)
 o Flag ops (and related functions) / cleanup (0abc96f Nathan French)
 o Add flags accessor (e0f04aa Nathan French)

 o Added missing extern "C"'s to public headers (9a0d250 Mark Ellzey)
 o CMakeLists cleanup, and pretty display (fc0f5da Mark Ellzey)
 o Oops, added back find_package() for libevent (9cdae63 Mark Ellzey)
 o Does image linking work here? (c10690b Mark Ellzey)
 o [htparse] have each state consume as needed (c34dba5 Mark Ellzey)
 o [htparse] formatting (4adcc67 Mark Ellzey)
 o Cleaning up things a bit (e7268d2 Mark Ellzey)
 o updated (718de1e Mark Ellzey)
 o Install into <installdir>/include/evhtp/*.h (7065156 Mark Ellzey)
 o Optimizations / assertions / more safe_Free conversions (511fb19 Mark Ellzey)
 o Fix test_query tests (2d4c22f Mark Ellzey)
 o evthr initial shared pipe prototype (72f01f5 Mark Ellzey)
 o [evthr] shared pipe updates (0251481 Mark Ellzey)
 o Formatting. (f67f958 Mark Ellzey)
 o Added EVHTP_THR_SHARED_PIPE option (default ON) (d160452 Mark Ellzey)
 o formatting, fixes, assertions (b1cef41 Mark Ellzey)
 o Issue161 : deal with http 1.0 stuff (67ed0bc Mark Ellzey)
 o update test_basic (3ea2eba Mark Ellzey)
 o use evhtp_safe_free for authority (50dffb6 Mark Ellzey)
 o [htparse] keep-alive A_case fix (910137f Mark Ellzey)
 o sockflags, and more pipeline fixses (9b69ee7 Mark Ellzey)
 o Might want to make that listener nonblocking (d34a1d0 Mark Ellzey)
 o Coreent socket() assertion (d2263e0 Mark Ellzey)
 o htparse optimizations, backlog flag for test.c (9f5a38e Mark Ellzey)
 o scratch buffers / added test_perf for graphing (95e9ff3 Mark Ellzey)
 o rm'd ratelimit, added ability to use je/tc malloc (934cf5a Mark Ellzey)
 o Updating layouts - added lambda-pp code (8aef49d Mark Ellzey)
 o Cleanup time! (43005ad Mark Ellzey)
 o formatting (542a701 Mark Ellzey)
 o default response cb needs to set 0 len (2f1ecab Mark Ellzey)
 o use elif defined JE... (2682dca Mark Ellzey)
 o Added evhtp_get_cb (see full commit msg) (cdf5291 Mark Ellzey)
 o Various fixes / added SOVERSION'ing (73d7ee5 Mark Ellzey)
 o Move around tc/jemalloc ifdefs, btw tcmalloc is awful. (e456fe0 Mark Ellzey)
 o build: install evhtp.pc in /usr/lib/pkgconfig (0400ce0 Vincent Bernat)
 o jfkdlsa (fabe244 Mark Ellzey)
 o doxygen mod for evhtp.h (3d0e615 Mark Ellzey)
 o Default to EVHTP_PARSE_QUERY_FLAG_LENIENT for query parsing. (a462fc5 Mark Ellzey Thomas)
 o (evhtp_make_request): Add request->buffer_out as body if populated. (8bc4ab3 akalend)
 o Added setsockopt for ipv6 to only use ipv6 null check for ssl via akalend (acfc9dd Mark Ellzey Thomas)
 o modify str_to_uint64: uint64_t check can never be greater than UINT64_MAX (7d6135c xuhao)
 o use EVHTP_DISABLE_SSL instead of USE_SSL in header (c884191 Mark Ellzey)
 o export evhtp_connection_ssl_new via @rosenk, thanks! (c2168be Mark Ellzey)

v1.2.10
 o client ssl connection added. This requires a SSL_CTX and must be set by the user (439431a StunMan)
 o Only export public symbols. (cf66c7c Mark Ellzey)
 o Export evhtp_connection_set_ratelimit (df2fbd6 Mark Ellzey)
 o Uncomplexify evthr - huge performance boost. (8a6873e Mark Ellzey)
 o Do backlogs matter for evthr? I am thinking not. (76b4a96 Mark Ellzey)
 o Remove all the stupid backlog stuff. (cb4e280 Mark Ellzey)
 o Proposed changes for request pause/resume (pipelined) (6cd8946 Mark Ellzey)
 o Remove dead code from evthr (3d51c76 Mark Ellzey)
 o Remove dead declarations in evthr.h (72488a8 Mark Ellzey)
 o Be more consistent and slightly more lenient when handling GET params (86ba10b TJ Koblentz)
 o Empty query args processed with a val of NULL, extended the test_query code (bc897d2 Mark Ellzey)
 o add connection connected status for client connection (0e839f0 zhangjing)
 o Added on_event hook / cleanup (22c0fac Mark Ellzey)
 o Fixed bug with calling user-defined event callback :) (246e33d Mark Ellzey)
 o Add a pkg-config .pc file (6e85a9b Mark Ellzey)
 o TestBigEndian, and add big endian versions of _str*cmp macros (736bc80 Mark Ellzey)
 o ignore build directory (submodule doesnt become dirty on build) (1aceedb TJ Koblentz)
 o missing SSL guard + test compilation problems (-Wunused-but-set-variable) (787eeb9 TJ Koblentz)
 o Fix some empty GET param cases (with tests) (e282b6f TJ Koblentz)
 o Formatting cleanup (89f11cd Mark Ellzey)
 o Cleanup and fixes (61c7f4f Mark Ellzey)
 o (evhtp_free): Free ssl_ctx if used. (9318571 Marcus Sundberg)
 o Properly handle errors when allocating connections and requests. (ab2f567 Marcus Sundberg)
 o Prevent double free of request. (ec445f9 Martin Hedenfalk)
 o Stop parsing when we have got a complete response/request. (279a7d3 Marcus Sundberg)
 o (evhtp_connection_free): Call hook before freeing request. (c093ff9 Marcus Sundberg)
 o Properly parse CONNECT request line. (76f2830 Marcus Sundberg)
 o Support IPv6 literals in CONNECT authority string. (378b790 Marcus Sundberg)
 o Separate fragment string from query string according to RFC 3986. (a9c0679 Marcus Sundberg)
 o (evhtp_parse_query): Remove strange handling of '?' and '/'. (3d96f5e Marcus Sundberg)
 o Fix parse errors on trailing whitespace in Content-Length header. (b67068c Marcus Sundberg)
 o (evhtp_parse_query): Advance state to s_query_key after start. (a535258 Marcus Sundberg)
 o Add hooks for host and port, and fill in authority struct. (1be3a0f Marcus Sundberg)
 o (_evhtp_path_new): If len is 0 we set full to "/", just like path. (7d277f8 Marcus Sundberg)
 o Do not use different API/ABI when regexps are disabled. (39fcb28 Marcus Sundberg)
 o Fix warnings in test.c when EVHTP_DISABLE_REGEX is defined. (05b01cf Marcus Sundberg)
 o Add keepalive flag to connection. (74031a7 Marcus Sundberg)
 o Add evhtp_hook_on_conn_error hook for connection errors. (6c3ed3d Marcus Sundberg)
 o Added the function evhtp_connection_new_dns(). (47eecd0 Jan Edhner)
 o (evhtp_connection_new_dns): Handle errors. (b13994b Marcus Sundberg)
 o (evhtp_connection_new): Handle IPv6 addresses. (ac97672 Marcus Sundberg)
 o (_evhtp_create_headers): Use evbuffer_expand() to reserve space. (c4ed326 Marcus Sundberg)
 o Use malloc() instead of calloc() for buffers we will immediately fill. (3906a65 Marcus Sundberg)
 o added padding for all structs containing bitfields (a2ebece Mark Ellzey)
 o Update evthr.c (1d492cc romange)
 o Cleanup, use EVHTP_DISABLE_SSL for client (c32562a Mark Ellzey)
 o Various fixes, see full commit message (d8a4935 Mark Ellzey)
 o Added evhp_set_flags along with some documentation (27b5e8a Mark Ellzey)
 o Symbol exports moved into headers, more documentation (352aebe Mark Ellzey)
 o If available, use c99 to our advantage (read commit msg) (8a44e6f Mark Ellzey)
 o Remove duplicate evbuffer_new for buffer_in (5284ce3 Mark Ellzey)
 o Fix for client connect double-free condition (5267ed2 Mark Ellzey)
 o Don't set conn->bev to NULL if error (ce2197e Mark Ellzey)
 o Use new and faster wildcard matching function. (4047f1e Mark Ellzey)
 o Integer to string optimizations. (4189bfa Mark Ellzey)
 o Export the numtoa functions. (037c766 Mark Ellzey)
 o Disable unused tailq for client requests (for future use in pipelined) (3516276 Mark Ellzey)
 o More conversions from free to safe_free (05fd68c Mark Ellzey)

v1.2.9
 o Accept upper-case "Chunked" in addition to "chunked" for transfer encoding. (07a9322 Tim Burks)
 o [htparse] Added length checks for various header values (42050e8 Mark Ellzey)
 o Fix up some compiler warnings. (37e0c4e Mark Ellzey)
 o Use snprintf for resp hdrs, fallback to evbuffer_add_printf (c27ac5a Mark Ellzey)
 o status_code_to_str no longer uses RB lookups (d143a85 Mark Ellzey)
 o Don't call bufferevent_set_timeouts read/write NULL (f372d9c Mark Ellzey)
 o add 'libdir' support (3b7e250 Christian)
 o Add INCLUDE_INSTALL_DIR support (19cab6f Mark Ellzey)
 o Add back in tree.h (0f69673 Mark Ellzey)
 o Fix a segfault in regex handling (d1a4240 f69m)
 o Formatting cleanup (c0c2055 Mark Ellzey)
 o No need for sys/tree include (0d3619f Mark Ellzey)

v1.2.8
 o There's no libdl on FreeBSD. (a683a1f Adrian Chadd)
 o FreeBSD handles the POSIX_C_SOURCE definition very strictly - strncmp() and a lot of other stuff isn't defined in the 2001 standards.
   Thus, the functions aren't declared when you include the library headers. (0354a67 Adrian Chadd)

v1.2.7
 o Fix double free for evthr at shutdown (a2c2826 Azat Khuzhin)
 o Workaround for odd recv()'s being done when not requested. (2abd591 Mark Ellzey)
 o Only return from BEV_EOF|READ if errno is EAGAIN (00eef42 Mark Ellzey)
 o Add connection-specific rate-limiting function. (32f4115 Mark Ellzey)
 o Fix compilation without threads support (104eafd Janusz Dziemidowicz)
 o Fix compilation without regex support (a71c736 Janusz Dziemidowicz)
 o Fix crash when unable to bind socket with TCP deferred accept (60f9d71 Janusz Dziemidowicz)
 o Add missing call to SSL_CTX_free() in evhtp_free(). (891d0cf Janusz Dziemidowicz)
 o Malloc with 1 instead of sizeof(char) to avoid warnings (de445f7 Mark Ellzey)
 o Don't check for bevssl if EVHTP_DISABLE_SSL enabled (9369afc Mark Ellzey)
 o Use SSL_OP_NO_COMPRESSION if possible (2b714c5 Janusz Dziemidowicz)
 o Support for DH parameters file (3d22d56 Janusz Dziemidowicz)
 o Use proper #ifndef for ECDH (OPENSSL_NO_ECDH instead of OPENSSL_NO_EC) (35c21c4 Janusz Dziemidowicz)
 o Build evhtp-config.h to make things easier to link (77552e4 Mark Ellzey)
 o Undef optional flags as to not screw things up (374a269 Mark Ellzey)
 o Disable OpenSSL support if libevent_ssl is not found (820d314 Mark Ellzey)
 o Clean up unused variables in onig (2d38112 Mark Ellzey)

v1.2.6
 o Add connection-specific rate-limiting function. (d0caf82 Mark Ellzey)
 o Fix double free for evthr at shutdown (a514e80 Azat Khuzhin)

v1.2.5
 o Port to MinGW (b0bd094 poet)
 o Only check for 100-continue is enabled for servers, not clients. (0cea847 Mark Ellzey)
 o Only decrement the thread backlog if it is a server. (ceb1e60 Mark Ellzey)
 o Use MSYS Makefiles instead of MinGW Makefiles (fd6ae5d poetwang)

v1.2.4
 o run on_headers_begin if request type is response (this happens when a 100 continue type thing happens). (c3775e0 Mark Ellzey)

v1.2.3
 o Added evhtp_disable_100_continue() which informs evhtp to not send a 100 continue response. (1d0eb84 Mark Ellzey)

v1.2.1
 o Add signal.h as reported by gnehzuil (1ac8706 Mark Ellzey)
 o evthr_*set_backlog for SO_RCVBUF sockopts (93f35d9 Mark Ellzey)
 o SO_RCVBUF should be multiple of sizeof(evthr_cmd_t) (32bd829 Mark Ellzey)
 o Install regex header if enabled (6d61db4 Mark Ellzey)
 o Fix missing symbol SIGTERM by including signal.h (c449ad8 Dennis van Dok)
 o Examples will only built if "make examples" is run. (2abe24f Mark Ellzey)
 o Fixed enum typedef issue reported by scott-- (fee4166 Mark Ellzey)
 o Use system onig if avail, install includes in include/evthr (56067a9 Mark Ellzey)
 o Added evhtp_request_status() to get client response code. (9008a0f Mark Ellzey)
 o Removed unused code. (a7dabaa Mark Ellzey)

v1.2.0
 o Initial client API (0bd23c9 Mark Ellzey)
 o updating test_client.c (b53f25f Mark Ellzey)
 o Added sample chunk callbacks for client (849bddb Mark Ellzey)
 o Updating test_client.c (081bcfe Mark Ellzey)
 o Merge from master fixups (97bf2d1 Aaron Stone)
 o Add test_proxy: example code for using evhtp_client functionality to implement an HTTP reverse proxy. (73fdd0c Aaron Stone)
 o Add evhtp_kvs_add_kvs / evhtp_headers_add_headers to copy headers from source to dest. (b0aefd4 Aaron Stone)
 o Update test_proxy: pause the frontend request while processing the backend request; pass headers through with evhtp_headers_add_he
 o Accept requests like <method> <protocol>://<host> <http version> That is, without an extra / after the host. Consider the path as
 o Enable search engine for Doxygen. (fa4c9cc Mark Ellzey)
 o Fixed bug in body-based query checking. (8635b2b Mark Ellzey)
 o use EVHTP_DISABLE_SSL instead of USE_SSL (5052107 Mark Ellzey)
 o Fix some generic warnings in test_proxy.c (de206a8 Mark Ellzey)
 o Add documentation on fallthrough state for method proto. (c1f5216 Mark Ellzey)
 o (htparse): Properly propagate errors from hook_on_hdrs_begin_run() (1bb641f Marcus Sundberg)
 o (htparse): Use correct arguments to hook_path_run(). (8aaa419 Marcus Sundberg)
 o (htparse): Use correct length parameter when calling hooks. (51f78e4 Marcus Sundberg)
 o (htparse): Handle query parameters according to RFC 3986. (0e7bdcd Marcus Sundberg)
 o (htparse): Properly handle abolute-URI with empty path. (657fe3b Marcus Sundberg)
 o (htparse): Use correct arguments to hook_port_run(). (1f60434 Marcus Sundberg)
 o (htparse): Handle literal IPv6 addresses in URIs. (b495e81 Marcus Sundberg)
 o (htparse): Fix parsing of ftp and nfs schemes. (9f53ee5 Marcus Sundberg)
 o (htparse): Avoid memset()ing entire parse buffer on init. (6f1b93f Marcus Sundberg)
 o (htparse): Add support for CONNECT and PATCH methods. (622256b Marcus Sundberg)
 o Changed host_ipv6_done state to host_done (93e4f0f Mark Ellzey)
 o Fixes for multiple requests, new htparse tests (59de92a Mark Ellzey)
 o evhtp_free now frees all associated callbacks. (34b4261 Mark Ellzey)
 o Error checking for header_val_add() (c8165a0 Mark Ellzey)
 o Fix memory leak on hdr_val (a3ccc1e Mark Ellzey)
 o Added htparser test for empty header keys. (d5c640a Mark Ellzey)
 o parser fixes / deal with paused responses better. (9d8e243 Mark Ellzey)
 o Request pausing + threading fixes. (0e774db Mark Ellzey)
 o Fix format warnings for test_client (680bce6 Mark Ellzey)
 o rm cruft that got merged in that shouldn't have. (4289914 Mark Ellzey)
 o Apprently rm'd some critical things, added them back in. (9052e56 Mark Ellzey)
 o Added -DEVHTP_BUILD_SHARED:STRING=[OFF:ON] (4da6965 Mark Ellzey)
 o Removed old contrib crap. (cb62ca0 Mark Ellzey)
 o Fixing the -DEVHTP_BUILD_SHARED:STRING=ON option to only build static-builds or dynamic-builds when set. Avoid mixing and also the
 o Fix for issues/69 for evthr memset() (f471298 Mark Ellzey)
 o Browsers can send more trailing data after the application/x-www-form-urlencoded content type, for example, which charset is used.
 o get_content_len now returns non-modified content_len var (bb6cdac Mark Ellzey)
 o Added htparser_get_content_pending for fetching bytes left to process. (28710f8 Mark Ellzey)

v1.1.7
 o NULL check for evhtp_kvs_for_each (37f3864 Mark Ellzey)
 o Parse body as the query args if content-type is url-encoded. (ee25209 Mark Ellzey)
 o Added a write hook. (c32c0ed Mark Ellzey)

v1.1.6
 o Added __cplusplus into evthr (31e3973 Mark Ellzey)
 o Use evhtp_hook_generic_cb function pointer prototype when setting a hook (59f01f3 Gian-Paolo Musumeci)
 o ISO C fixes. (d1627f7 Mark Ellzey)
 o ISO C fixes. (5be2662 Mark Ellzey)
 o Renaming evhtp_hook_generic_cb to evhtp_hook, more ISO compliance. (60b3502 Mark Ellzey)
 o Removing strict flags from BaseConfig. (bdc6265 Mark Ellzey)

v1.1.5
 o Don't treat non hex chars as errors. (d8c584d Mark Ellzey)
 o If non hex, replace idx-1 with % (2783983 Mark Ellzey)
 o Fix off-by-one in parse_query. (86881c1 Mark Ellzey)
 o Do not use dynamically allocated timevals in evhtp_t. (3398442 Marcus Sundberg)
 o Only initialize status_code_tree once. (da64395 Marcus Sundberg)
 o Add evhtp_free() matching evhtp_new(). (60b141a Marcus Sundberg)
 o (evhtp_callback_free): Free hooks as well, if set. (6fff598 Marcus Sundberg)
 o (evhtp_callback_free): Free regexp pointer, not only regexp. (ab9adc6 Marcus Sundberg)
 o (evthr_pool_stop): Do not read queue entry after freeing. (f7cc5f2 Marcus Sundberg)
 o Use TAILQ_FOREACH_SAFE() in evhthr_pool_free() as well. (5c2adcc Marcus Sundberg)
 o (evhtp_free): Stop and free thread pool, if started. (f13c207 Marcus Sundberg)
 o Use libevent signal handling instead of signal() in test.c (e0b68b4 Marcus Sundberg)
 o Properly deallocate resources in test programs. (ea1bd57 Marcus Sundberg)
 o Add test_vhost to .gitignore (2a596c2 Marcus Sundberg)
 o Fix issue where SSL is not disabled if not found. (6f25292 Mark Ellzey)
 o Forgot LIBEVENT_OPENSSL_LIBRARY (5a933c7 Mark Ellzey)
 o add upport multiline header values. (325c5c7 Mark Ellzey)

v1.1.4
 o Fixed potential deadlock - reported by zhangpeihao (36ee722 Mark Ellzey)
 o Removing conflicting code from master branch. (51feaa9 Mark Ellzey)
 o Assure SSL is disabled if not found. (d4f3f35 Mark Ellzey)

v1.1.3
 o Added evhtp_unbind_socket() (9c9b508 Mark Ellzey)
 o Fixed issue with query argument decoding. (8ff9cf3 Mark Ellzey)
 o Fix issue 53, error on LF without CR's (d51b526 Mark Ellzey)

v1.1.2
 o Manual verification modes for SNI vhosts. (5f9b3a5 Mark Ellzey)

v1.1.1
 o Added max-body functionality. (7f0052a Mark Ellzey)
 o Added evhtp_set_max_keepalive_requests() (503ef28 Mark Ellzey)
 o inherit parent settings when adding vhosts. (c66161b Mark Ellzey)
 o Check for NULL before request status switch/case (f943a41 Mark Ellzey)
 o call tlsext_servername_callback in bind_sockaddr (d1b5433 Mark Ellzey)
 o Swap callback finder for path+file first. (2c30003 Mark Ellzey)
 o Disable BEV_WRITE when htparser_run() is active (414814a Mark Ellzey)

v1.1.0
 o Add ability for rules to be ordered. (ad8c468 Mark Ellzey)
 o Cleanup the old rule code. (fbfda73 Mark Ellzey)
 o Fixed missing variable in callback_find (4eb5e87 Mark Ellzey)

v1.0.1
 o Fixes to make coverity happy. (6776d85 Mark Ellzey)
 o Add support for empty header values. (7ec160f Mark Ellzey)

v1.0.0
 o Added some function documentation. (adc3ac6 Mark Ellzey)
 o Check for null deref on request check. (a722fc4 Mark Ellzey)
 o Fix for state set override for headers. (87fb859 Mark Ellzey)
 o No need for null checks before free(). (7783ca2 Mark Ellzey)
 o Bumping this up to 1.0.0 since it's been in production for a while.

v0.4.17
 o Added cmake option for disabling regex. (5ab2e4b Mark Ellzey)
 o Cleanup compiler warnings. (770a344 Mark Ellzey)
 o Fixed EVHTP_DISABLE_SSL compile. (e088f2b Mark Ellzey)

v0.4.16
 o Use POSIX 200112 for *NIX based builds. (09dbb0f Mark Ellzey)
 o Drain before letting ownership change. (cc50f84 Mark Ellzey)
 o jfkdal (5817bd3 Mark Ellzey)
 o Document evhtp_set_timeouts(). (acc3ed2 Mark Ellzey)

v0.4.15
 o Override global timeouts on a per-connection basis. (156f5ef Mark Ellzey)
 o Use evhtp_connection_set_timeouts in accept. (8eb5aa9 Mark Ellzey)
 o Remove use for alloca.h (339f9f2 Mark Ellzey)
 o Added a max-backlog for evthr/pools (e8ac1f9 Mark Ellzey)
 o Added evthr max backlog options. (a44d1c0 Mark Ellzey)
 o Initial commit of vhost feature. (8fb43e0 Mark Ellzey)
 o SSL SNI support. (4dcc68e Mark Ellzey)
 o Added test_vhost.c (c5a698e Mark Ellzey)
 o _evhtp_ssl_servername now uses wildcard matching. (00d0488 Mark Ellzey)
 o Added vhost aliases functionality. (bf5766f Mark Ellzey)
 o Readd inc/dec counter for evthr. (022ecf3 Mark Ellzey)
 o Make evhtp_request_free public. (9046466 Mark Ellzey)
 o Added a EVHTP_RES_USER evhtp_res type. (6b41cee Mark Ellzey)
 o Add support for ECDH ciphers (via cfg->named_curve string) (131cae3 b)
 o finding cbs/hook additions, hostname parse hooks (361a068 Mark Ellzey)
 o Optimizations. (caddf10 Mark Ellzey)
 o hook_on_hdrs_complete runs before last LF (2f77428 Mark Ellzey)

v0.4.14
 o Added example and documentation on proper thread-safe design with evhtp. (154017e Mark Ellzey)
 o Added glob/wildcard callback patterns. (d33a416 Mark Ellzey)
 o Fixed issue with path matching. (d0648ff Mark Ellzey)

v0.4.13
 o Decrement pending count when defer fails. (4e99de9 Mark Ellzey)
 o Updating documentation to say there is not much documentation. (184f33e Mark Ellzey)

v0.4.11
 o Added #ifndef EVHTP_DISABLE_EVTHR flags for compilation withotu threading support (d5bcc33 Thibaut Le Guilly)
 o Modify evthr_lock() macro previous patch for less ifdefs. (c800fe9 Mark Ellzey)
 o Took out more disable thread ifdefs. (b5de21e Mark Ellzey)
 o Remove use of bev_flush for evhtp_send_reply_end (9f2f31f Mark Ellzey)
 o Modify evthr_lock() macro previous patch for less ifdefs. (aa24e6a Mark Ellzey)
 o Took out more disable thread ifdefs. (accbe88 Mark Ellzey)
 o Bugfixes, additions, cleanup, see full commit msg. (e6155d8 Mark Ellzey)
 o Added evhtp_set_bev_flags() (a342903 Mark Ellzey)
 o Prep release v0.4.12 (acda3c8 Mark Ellzey)

v0.4.10
 o Add compile time EVHTP_DISABLE_REGEX option. (eab0d0f Andy Hochhaus)
 o Use evbuffer_add in lieu of add_reference for short writes. (2df5fbd Joe Nardone)
 o Added take_ownership functionality which frees resources but gives the underlying bufferevent to the caller. (75050f8 Mark Ellzey)
 o Release v0.4.11 (5d6339f Mark Ellzey)

v0.4.9
 o Fixed memleak with evthr_free() (10ad15a Mark Ellzey)
 o Correct SSL_Shutdown() usage. (f5f97ee Mark Ellzey)
 o Added total bytes read function in htparser. (4a9eefb Mark Ellzey)
 o Added rate-limiting option in test.c (b9e10c1 Mark Ellzey)
 o Don't add aux headers if content-type is multipart. (6be91ca Mark Ellzey)
 o Removed silly compile-time flags for OSX (0dd14a9 Mark Ellzey)
 o Ignore deprecated ssl warnings on OSX until further notice. (0aa4fb6 Mark Ellzey)
 o Prep release v0.4.10 (60d0f25 Mark Ellzey)

v0.4.8
 o Fix for non-system strndup. (d7486b4 Mark Ellzey)
 o Prepping release v0.4.9 (4ef6362 Mark Ellzey)

v0.4.7
 o Place _evhtp_run_pre_accept() into _evhtp_connection_accept() (e45adbd Mark Ellzey)
 o pre_accept_cb argument changes. (c2fbb86 Mark Ellzey)
 o Fixed test.c for pre_accept changes. (671a911 Mark Ellzey)
 o testing client ssl socket error log for debugging. (265437b Mark Ellzey)
 o Remove some extra logging. (dd45fb8 Mark Ellzey)
 o SSL client error handling debugging. (5c26eaf Mark Ellzey)
 o err (8f5013e Mark Ellzey)
 o removed some dbg msgs (84bec53 Mark Ellzey)
 o adding error to connection on eventcb (0c9690c Mark Ellzey)
 o Remove debug abort. (ca8089f Mark Ellzey)
 o Remove debug msg. (9a41148 Mark Ellzey)
 o Prepping release v0.4.8 (c140e2f Mark Ellzey)

v0.4.6
 o Fix to be able to set a verification "mode" to the SSL_CTX_set_verify() function without having to set a custom (*verify_callback). (f3c3f37 Oscar Koeroo)
 o Allow SSL_CTX_set_timeout value to be passed in via config. (4f775bd Stephen Cox)
 o Fixed issue with _evhtp_request_parser_path with no matched callbacks where the end offset was never being set. (Reported by snnn119@gmail.com) (0d20de9 Mark Ellzey)
 o evhtp_parse_query() is no longer limited to 1024 byte key/val (a8179a2 Mark Ellzey)
 o set request status to PAUSE if evhtp_request_pause() is called manually. (4d64111 Mark Ellzey)
 o Prepping release v0.4.7 (12d7cc4 Mark Ellzey)

v0.4.5
 o Don't treat EOF eventcb flags for ssl enabled connections as errors. (49c98b1 Mark Ellzey)
 o Add HTTP/1.1 chunked encoding interface. (69a29d3 Andy Hochhaus)
 o Added test-case for chunking API usage. (939517a Mark Ellzey)
 o Chunk API modifications, formatting cleanup. (b805dbd Mark Ellzey)
 o Added SSL_CTX_set_timeout() for openssl >= 1.0 (e6fa029 Mark Ellzey)
 o Prepping release 0.4.6 (81c493d Mark Ellzey)

v0.4.3
 o Added api docs (57370c1 Mark Ellzey)
 o Added various accessor functions, see full commitlog (16d3fdc Mark Ellzey)
 o Added evhtp_request_get_connection() (db1f023 Mark Ellzey)
 o Moved callback locking as optional via evhtp_use_callback_locks() (7a028eb Mark Ellzey)
 o Removing API docs. Generate yourself! (5bc036d Mark Ellzey)
 o added local PF_UNIX socket listen support (f6ef167 Mark Ellzey)
 o Adding sys/un.h checks. (6ec70e5 Mark Ellzey)
 o Added evhtp_bind_sockaddr() (8f38b01 Mark Ellzey)
 o Add a .gitignore file (09ac468 Nick Mathewson)
 o Stop using the deprecated event.h; use event2/event.h instead (c60715d Nick Mathewson)
 o Set -fno-strict-aliasing using gcc (4a43c0b Mark Ellzey)
 o Picked DISABLE_SSL fixes from nmathewson into develop (b2bfb2f Mark Ellzey)
 o Detect non-ascii hosts and refuse to build on them (b0c2267 Nick Mathewson)
 o Eliminate use of ctype.h (7d0084e Nick Mathewson)
 o Add checks for sys/queue.h and use compat when missing (f05b54a Mark Ellzey)
 o compat queue.h BSD-only move. (2b49db6 Mark Ellzey)
 o Removed README and added changelog generator. (219f2eb Mark Ellzey)
 o Prepping release v0.4.4 (d335798 Mark Ellzey)
 o ChangeLog for v0.4.4 (c5c6d19 Mark Ellzey)
 o Fixing size_t printf format issues. (c75bc5b Mark Ellzey)
 o Added support for the -C option in the test.c The internals were there, it just covers the getops. (e3636d5 Oscar Koeroo)
 o The struct evhtp_connection_s has a member ssl_ctx of type evhtp_ssl_t (a typedef of an SSL*) which by name is confusing with respect to the evhtp_ssl_ctx_t (a typedef of an SSL_CTX*). The member of struct evhtp_connection_s is now rename from ssl_ctx to ssl. (ca42b4d Oscar Koeroo)
 o Initial markdown-based API documentation. (c16b551 Mark Ellzey)
 o Documentation updates. (f097558 Mark Ellzey)
 o Documentation updates (98c8ff0 Mark Ellzey)
 o Added evhtp_unescape_string() to unescape query type strings. (d75904f Mark Ellzey)
 o added on_headers_start hook (before header parsing, post requestline parsing). (7076b8e Mark Ellzey)
 o Added htparser_set_(major|minor). fixed edgecase where major/minor is not yet set. (137aa19 Mark Ellzey)
 o Fix C++/clang++ build. (af2a0dd Andy Hochhaus)
 o Added #ifndef _GNU_SOURCE before setting it again. (f8a2308 Mark Ellzey)
 o Changes to DISABLE to EVHTP_DISABLE, also fixed enum hook missing from last merge. (0ab23de Mark Ellzey)
 o inline enum's should not be static. (5efd199 Mark Ellzey)
 o Set libevent as a required dependency (d08f4fd Mark Ellzey)
 o Prepping release v0.4.5 (a3731d7 Mark Ellzey)

v0.4.2
 o Moving libhtparse to just htparse (bf2e43a Mark Ellzey)
 o Thread-safe add/remove callback additions. (d916366 Mark Ellzey)
 o strn* compat functions set to static (cab9503 Mark Ellzey)
 o Fixed issue with OPTIONS requests. (a3487fd Mark Ellzey)
 o arg parsing fixes (8627d0d Mark Ellzey)
 o Added a basic example (c06ef72 Mark Ellzey)
 o Added IPv6 listener support. (c1482a2 Mark Ellzey)
 o Prepping release v0.4.3 (952baa9 Mark Ellzey)

v0.4.1
 o Removing tabs from ChangeLog (3f6f220 Mark Ellzey)
 o Add checks for sys/tree.h and compat when missing (40c87e5 Jason L. Shiffer)
 o Fix strdup build warnings/errors on OSX (84e17c1 Jason L. Shiffer)
 o SSL Threading changes (2631e7f Mark Ellzey)
 o Increasing the parser stack size. (b0df5a8 Mark Ellzey)
 o Added chunk hooking stuff. (2bcba66 Mark Ellzey)
 o jfdsla (1fa36b9 Mark Ellzey)
 o x509 updates (089bd8a Mark Ellzey)
 o Revert "x509 updates" (2cc9195 Mark Ellzey)
 o Add checks for sys/tree.h and compat when missing (8fa7e11 Jason L. Shiffer)
 o Fix strdup build warnings/errors on OSX (95cbcf3 Jason L. Shiffer)
 o Reworked SSL Thread initialization (38aee17 Mark Ellzey)
 o Increased default stack limit in htparse (48f338a Mark Ellzey)
 o chunk hooks, proper status code strings. (dbca386 Mark Ellzey)
 o Moved ./libhtparse to ./htparse (44c77d3 Mark Ellzey)
 o Prepping release v0.4.2 (815b023 Mark Ellzey)

v0.4.0
 o Deal with 100 return status with responses correctly (bb86d09 Mark Ellzey)
 o more 100 fixes (3ef168a Mark Ellzey)
 o hert pup (a637672 Mark Ellzey)
 o updates (83abb12 Mark Ellzey)
 o Adding struct sockaddr to connection_t (45c30c7 Mark Ellzey)
 o Swapping around SSL init globals (3327f44 Mark Ellzey)
 o Adding -lpthread for thread enabled configuration (80fff45 Mark Ellzey)
 o Added include_dir for libevent pathing (4c6dbc2 Mark Ellzey)
 o turn off compression by default (6244108 Mark Ellzey)
 o Cleanup (275329a Mark Ellzey)
 o static again (8796e10 Mark Ellzey)
 o testing timeouts (ac70f3c Mark Ellzey)
 o fix (1aa2d79 Mark Ellzey)
 o more timeout tests (7f29ff6 Mark Ellzey)
 o SSL 1.x optimizations / timeouts (b693c7f Mark Ellzey)
 o Adding LICENSE (c1ba152 Mark Ellzey)
 o blerp (1623480 Mark Ellzey)
 o hrm (964aab3 Mark Ellzey)
 o added backlog arg to evhtp_bind_socket() (584e73e Mark Ellzey)
 o Adding backlog to bufferevent (c740b0c Mark Ellzey)
 o blerp (7c8fe61 Mark Ellzey)
 o htparser fix (c76e3ea Mark Ellzey)
 o Re-added user-set timeouts (ec246ff Mark Ellzey)
 o Changing static len checks with sizeof() (7c3a79f Mark Ellzey)
 o Fixed over/underflow condition in str_to_uint64 (c72deee Mark Ellzey)
 o Fixed issue with state transition into read_body (0fc1897 Mark Ellzey)
 o added static rt (1910c19 Mark Ellzey)
 o Fixed incorrect integer conversion which misses zero edge case. (c562ede Mark Ellzey)
 o Added correct status code string definitions. (a5bc03d Mark Ellzey)
 o Include RT and DL if avail when linking test. SSL needs them. (29e35fb Mark Ellzey)
 o default cb now returns 404 (fd4e3cb Mark Ellzey)
 o Prepping release v0.4.1 (246a5da Mark Ellzey)

v0.3.7
 o linking ChangeLog to README (4da3a26 Mark Ellzey)
 o updated htparse (1706b82 Mark Ellzey)
 o removing cruft (ac3b4f4 Mark Ellzey)
 o killkillkill (45d0dfa Mark Ellzey)
 o More logical structure (3ee2531 Mark Ellzey)
 o cleanup (f7e3af2 Mark Ellzey)
 o blerp (2833315 Mark Ellzey)
 o getting better (6daf3ca Mark Ellzey)
 o Request pipeline now functional. (99554e3 Mark Ellzey)
 o derpityderp (1bd1b4e Mark Ellzey)
 o cruft (45e5a33 Mark Ellzey)
 o Fixed an issue with the body parser callback (f130965 Mark Ellzey)
 o Major cleanup / re-factor (0752eef Mark Ellzey)
 o fixups (0cc0980 Mark Ellzey)
 o Added some more documentation (56c08d6 Mark Ellzey)
 o documentation updates (3715c81 Mark Ellzey)
 o Added better functionality, more docs - see full commit log (8a8e555 Mark Ellzey)
 o Added Basic reply functions (b5434de Mark Ellzey)
 o More updates - perf updates - bug fixes (0b050cc Mark Ellzey)
 o updating ssl and test.c (37191f9 Mark Ellzey)
 o bugfix in kv_add (3a18380 Mark Ellzey)
 o pausing / fixes / request and connection fini hooks (3e98351 Mark Ellzey)
 o fixed all the pause issues.. (658650e Mark Ellzey)
 o threading fixes (97f18c5 Mark Ellzey)
 o some optimizations (6a747c6 Mark Ellzey)
 o blerp (f04c39a Mark Ellzey)
 o Added CA Path option for ssl_cfg. (Thanks Oscar Koeroo) (8ace875 Mark Ellzey)
 o Added x509_verify_cb, max_verify_depth, verify_peer and store_flags option to the struct evhtp_ssl_cfg_s. And also added HTTP return code 418 (e92e882 Oscar Koeroo)
 o Adding dummy callbacks and values to the test.c program. (e703100 Oscar Koeroo)
 o max_verify_depth -> verify_depth (556d722 Mark Ellzey)
 o OSX Compat / fixes (e844f9a Mark Ellzey)
 o cleanup (f7f25ef Mark Ellzey)
 o docs, cleanup (022d424 Mark Ellzey)
 o created verify and verify depth callbacks types (instead of using void *) (8a2f6d8 Mark Ellzey)
 o cleanup (aee4707 Mark Ellzey)
 o HTTP response parsing in libhtparser (6855a08 Mark Ellzey)
 o fix with evthr (d4a63d8 Mark Ellzey)
 o Added htparser_get_status (dae487a Mark Ellzey)
 o fixes (7c6f5ab Mark Ellzey)
 o send_reply start/body/end (33bfade Mark Ellzey)
 o thread initialization functionality (362f902 Mark Ellzey)
 o Content-Length duplicate header fix (8f74408 Mark Ellzey)
 o Added chunk_complete and chunks_complete callback hooks (f391855 Mark Ellzey)
 o Added some documentation (7853017 Mark Ellzey)
 o fixed issue with bufferevent SSL events (a34b413 Mark Ellzey)
 o on_new_chunk bugfix (de39114 Mark Ellzey)
 o Additions for HTTP/1.1 / other additions / fixes (f865ff4 Mark Ellzey)
 o Fixed conditional bug (c5c4aa4 Mark Ellzey)
 o fixed some bugs dealing with parsing and schemes (258cbec Mark Ellzey)
 o SSL shutdown / bugfixes / see commit log (c850692 Mark Ellzey)
 o Making static (add8058 Mark Ellzey)
 o linking ChangeLog to README (61866b8 Mark Ellzey)
 o fixes, docs, features: (see full commit log) (01e61e2 Mark Ellzey)
 o SSL updates (see full commit log) (b3cfb24 Mark Ellzey)
 o bugfix in kv_add (ed5699e Mark Ellzey)
 o Hook macros, fixes, additions (see full commit log) (ef3fee3 Mark Ellzey)
 o Added CA Path option for ssl_cfg. (Thanks Oscar Koeroo) (7b79640 Mark Ellzey)
 o SSL verification configuration options (62c07ff Oscar Koeroo)
 o OSX Compatability fixes (955133d Mark Ellzey)
 o Created verify and verify depth callbacks types (instead of using void *) (a2a0f09 Mark Ellzey)
 o HTTP response parsing in libhtparser (29ac2e7 Mark Ellzey)
 o evthr bugfix in evthr_new() args (17aede7 Mark Ellzey)
 o Added htparser_get_status to libhtparse (7b16bd1 Mark Ellzey)
 o Added streaming reply functionality (f0a8ed3 Mark Ellzey)
 o thread initialization functionality (78a6863 Mark Ellzey)
 o Content-Length duplicate header fix (b7d283f Mark Ellzey)
 o Additional libevhtparse chunk-specific hooks and documentation. (c0c6e59 Mark Ellzey)
 o fixed issue with bufferevent SSL events (fbe3c8b Mark Ellzey)
 o libhtparse on_new_chunk bugfix (d352dd1 Mark Ellzey)
 o Additions for HTTP/1.1 / other additions / fixes (c2883eb Mark Ellzey)
 o Fixed conditional bug for chunked responses (b159c32 Mark Ellzey)
 o libhtparse fixes when dealing with requests with schema data. (efdc171 Mark Ellzey)
 o SSL shutdown / bugfixes / see commit log (482d0bd Mark Ellzey)
 o Modified so that libevhtp creates a static library instead of shared. (ba170f1 Mark Ellzey)
 o Rebase fix for htparser_init() (ce446b0 Mark Ellzey)
 o Updating for release 0.4.0 (872c243 Mark Ellzey)

v0.3.6
 o Matched callback hooking (5b385a6 Mark Ellzey)
 o Drop connection with invalid requests. (e4cd611 Mark Ellzey)
 o added some more requests accessors (d9cf7d5 Mark Ellzey)
 o added a finished hook (c04e61b Mark Ellzey)
 o added evhtp_request_set_cbargs() (28a22dd Mark Ellzey)
 o Bunch of stuff - see full commit message. (ae49ecf Mark Ellzey)
 o If compiling as debug, http-parser will be pre-processed then compiled. (easier to debug the shitty and unnecessary macro-based function prototypes). (c378db3 Mark Ellzey)
 o Mods to pass -Wextra (2b44c46 Mark Ellzey)
 o More -Wextra mods (f2d6c9e Mark Ellzey)
 o a bit broken (17d1572 Mark Ellzey)
 o adding gitignore (b8eba44 Mark Ellzey)
 o Removing dep for http_parser over to my libhtparse codebase (11b484e Mark Ellzey)
 o Adding libhtparse.... (dd61c20 Mark Ellzey)
 o Prepping release v0.3.7 (64db298 Mark Ellzey)

v0.3.5
 o Added various SSL information accessors (8db938e Mark Ellzey)
 o evhtp_hdr functions / default 404 cb / fixes (37dbe4f Mark Ellzey)
 o Prepping the removal of submodules (354e71d Mark Ellzey)
 o No more submodules (1e0ec98 Mark Ellzey)
 o updating release_prep (5a5e495 Mark Ellzey)
 o Prepping release v0.3.6 (e582c7c Mark Ellzey)
 o Updated ChangeLog (03a8536 Mark Ellzey)

v0.3.4
 o Added evhtp_set_regex_cb for matching URI with a regex. (99e8e64 Mark Ellzey)
 o Adding oniguruma submodule (30adea5 Mark Ellzey)
 o .. (2161264 Mark Ellzey)
 o Switched over to oniguruma for regex (b80820b Mark Ellzey)
 o updates (f2bb622 Mark Ellzey)
 o httparser updates (1befd5c Mark Ellzey)
 o make install rules, cleanup of dependencies (68cb269 Mark Ellzey)
 o cmake onig test compile (75ede66 Mark Ellzey)
 o Added find_callbacks_woffsets (0174055 Mark Ellzey)
 o evhtp_request_t is now private. (c2cadcd Mark Ellzey)
 o added various request accessors (6964387 Mark Ellzey)
 o Even more evhtp_request_t accessors. (8c45457 Mark Ellzey)
 o Better error / response handling. (6e869fc Mark Ellzey)
 o Prepping release v0.3.5 (6a84efe Mark Ellzey)

v0.3.3
 o SSL and other various changes (see commit log) (76dc58d Mark Ellzey)
 o Added ChangeLog (33bab50 Mark Ellzey)
 o Updated version information. (df80701 Mark Ellzey)
 o Added contrib section with misc patches. (0b2bb36 Mark Ellzey)
 o And place it in the right directory :) (e337cb7 Mark Ellzey)
 o Fixing up problems with the conflict resolution (6a606a4 Mark Ellzey)

v0.3.2
 o initial SSL support, junk is brizzoke (fbbc2fa Mark Ellzey)
 o cleanup (57e309c Mark Ellzey)
 o not working as intended, REBASE THIS JUNK (f645813 Mark Ellzey)
 o SSL session caching. (590e226 Mark Ellzey)
 o Adding a builtin cache (0e1d01e Mark Ellzey)
 o Added SSL thread-safe functionality. (a9db78b Mark Ellzey)
 o cleanup (6f71526 Mark Ellzey)
 o Properly expire cache entries. (65f017b Mark Ellzey)
 o Cleanup (edd1b44 Mark Ellzey)
 o Prepping v0.3.3 (67307f1 Mark Ellzey)

v0.3.1
 o Modifying to use bufferevents (0c4b22e Mark Ellzey)
 o Converting back to bevents after perf issue solved (6771104 Mark Ellzey)
 o Prepping release 0.3.2 (758bb16 Mark Ellzey)

v0.3.0
 o Optional evthr support (5392bc9 Mark Ellzey)
 o Prep v0.3.1 (8a6c836 Mark Ellzey)
 o Prep release 0.3.1 (33f1a82 Mark Ellzey)

