{"shas":[["61866b8898b4702a3f9046f7c364511e1215fd55","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","linking ChangeLog to README","Mark Ellzey"],["01e61e22206e3080bb8572bb74416446aa78ae22","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","fixes, docs, features: (see full commit log)\n\n* libhtparse fixes and additions\n\t- Check for [kK]eep-Alive instead of [kK]eep-alive to determine the value.\n\t- Fixed issue with htparser_should_keepalive() returning wrong values.\n\n* Major refactor of evhtp structure and design\n\t- evhtp_request_t, evhtp_connection_t evhtp_t are now exposed to the user\n\t- htparse_hooks are no longer tied to a evhtp_t, but are private\n\t\tglobals (shouldn't ever be changed).\n\t- bufferevent operations now share a single set of callbacks with an\n\t\tevhtp_connection_t argument. This keeps things consistent.\n\t\t\t* evhtp_connection_readcb reads and parses requests\n\t\t\t* evhtp_connection_writecb determines if a response is completed\n\t\t\t\tand whether it should keep the connection alive or close it.\n\t- requests and connections can be paused and resumed.\n\t\t\t* if you pause a request, all further request parsing is stopped so\n\t\t\t\tthat no further hooks are called until evhtp_request_resume() is\n\t\t\t\tcalled.\n\t- Callback definitions are now abstracted into a parent evhtp_callback_t\n\t\tstructure containing the type, hooks which can be added to a callback\n\t\t\t* The callback-hooks act just like the old per-connection hooks.\n\t- Callback searches have been cleaned up to facilitate both connection\n\t\tbased hooks and request based.\n\t- Callback searches have now been broken up into 3 different functions:\n\t\t_evhtp_callback_find,\n\t\t_evhtp_callback_regex_find,\n\t\t_evhtp_callback_hash_find\n\t\t\t* _evhtp_callback_find is a wrapper around the other functions,\n\t\t\t* _evhtp_callback_regex_find will now set a start and end matched\n\t\t\t\toffset (so that a user can see exactly where the regex matched)\n\t- Better API for defining a RFC compliant URI\n\t\t* evhtp_uri_t structure is a wrapper around an entire URI\n\t\t\t-> evhtp_request_authority_t\n\t\t\t\t\t-- Container where username/password/hostname/port information\n\t\t\t\t\t\t is stored if in the request.\n\t\t\t-> evhtp_request_path_t\n\t\t\t\t\t-- Container where various path information from the URI is stored\n\t\t\t\t\t\t\t* \"full\" = the full path including file, query args, and fragments\n\t\t\t\t\t\t\t* \"path\" = just the parsed path (doesn't include file / qargs / fragments)\n\t\t\t\t\t\t\t* \"file\" = the file found \"/path/<file.ext>\": file.txt being the file\n\t\t\t\t\t\t\t* matched_soff = the offset where matched path was found\n\t\t\t\t\t\t\t* matched_eoff = the offset where matched path was ended\n\t\t\t-> fragment\n\t\t\t\t\t-- a string containing fragment data in URI \"...#stuff\"\n\t\t\t-> evhtp_request_query_t\n\t\t\t\t\t-- A key/val queue of parsed URI query arguments\n\t\t\t-> htp_scheme\n\t\t\t\t\t- If a scheme was present, this is the enum value of the scheme\n\t- Added _evhtp_request_path_new()\n\t- Added _evhtp_request_parser_path()\n\t- Added _evhtp_uri_new()\n\t- Added evhtp_request_parse_query which will take the query portion of the\n\t  request URI and does a no-copy parse into an evhtp_request_query_t structure\n\t\t(?h=b;c=d&b=4 would become a list of key-values stored in the query_t struct)\n\t- Added evhtp_set_pre_accept_cb which calls user-defined function prior to\n\t\taccepting a connection.\n\t- Added evhtp_set_post_accept_cb which calls user-defined function after\n\t  accepting a connection.\n\t- Added evhtp_send_reply()\n\t\t\t* this replaces the old method of sending a reply, it's just cleaner\n\t- Added _evhtp_create_reply which creates a full response, tweaking various\n\t\theaders and buffers where needed.\n\t- Added evhtp_kv_t structures which are generic key/value queues\n\t- Added evhtp_kv_new()\n\t- Added evhtp_kvs_new()\n\t- Added evhtp_kv_free()\n\t- Added evhtp_kvs_free()\n\t- Added evhtp_kvs_for_each() - an iterator for kvs\n\t- Added evhtp_kv_find() - returns the value (if found) for a key.\n\t- Added evhtp_header_new()\n\t- Added evhtp_headers_add_header()\n\t- Added evhtp_header_key_add()\n\t- Added _evhtp_request_free()\n\t- Added _evhtp_uri_free()\n\t- Added _evhtp_path_free()\n\t- Added _evhtp_connection_free()\n\t- evhtp_hook_type enum's have been been changed to not be in all CAPS:\n\t\t\t* evhtp_hook_on_header  = type for a hook after one header is parsed\n\t\t\t* evhtp_hook_on_headers = type for a hook after all headers are parsed\n\t\t\t* evhtp_hook_on_path    = type for a hook after path is parsed\n\t\t\t* evhtp_hook_on_read    = type for a hook when body data is read\n\t\t\t* evhtp_hook_on_fini    = type for a hook just prior to being free()'d\n\t\t\t* evhtp_hook_on_error   = type for a hook when a fatal error occurs\n\t- Removed a bunch of code that was no longer relevant to the new arch.\n\n* Added lots of API documentation including doxygen support.","Mark Ellzey"],["b3cfb24bbef95d25fe8f8679752420197fbf48b4","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","SSL updates (see full commit log)\n\n- Added evhtp_ssl_use_threads() which will properly initialize\n\tthread support for OpenSSL operations.\n- evhtp_ssl_init() has been modified to support a better ssl_cfg_t\n- ssl cfg now has 4 modes of defining how SSL session caching works\n\t\t* evhtp_ssl_scache_type_disabled - disable cache entirely\n\t\t* evhtp_ssl_scache_type_internal - use OpenSSL's build-in cache\n\t\t* evhtp_ssl_scache_type_user     - use user-defined caching callbacks\n\t\t* evhtp_ssl_scache_type_builtin  - use libevhtp's built-in cache (currently doesn't do anything)\n- updated test.c to use the refactored API correctly","Mark Ellzey"],["ed5699efcc1e2c8f0daeaa6dd76ccc884a3d6e6f","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","bugfix in kv_add","Mark Ellzey"],["ef3fee39495d06945337abc155aca3b64c4d1bb1","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","Hook macros, fixes, additions (see full commit log)\n\n- Fix bug in _evhtp_callback_regex_find()\n\t* use re_nsub for array index accessor for start and end offsets\n- _evhtp_request_free() will now call user-defined fini hook prior to free()'ing\n- Added _evhtp_connection_fini_hook() - called when connection is being shutdown\n- Added _evhtp_request_fini_hook() - called when a request is being free()'d\n- Created hook macros which checks and calls request-specific hooks,\n  otherwise checks and calls connection-specific hooks.\n- _evhtp_request_parser_path now correctly sets matched start and end offsets\n- on body hooks now pass an evbuffer as the data instead of a char and len.\n\t* if the body hook does not drain this buffer, it is kept in teh requests\n\t\tbuffer_in evbuffer.\n- evhtp_callbacks_free() will now properly free all associated resources.\n- Added evhtp_callback_free()\n- Updated test.c with an example of how request pausing can be used.\n- Updated documentation","Mark Ellzey"],["7b79640de573964d1495b899e17c27488ca0986a","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","Added CA Path option for ssl_cfg. (Thanks Oscar Koeroo)","Mark Ellzey"],["62c07fff2a5956516f4a1849eefb727248d21ad6","d896026d603eddb3b40431703a0cda578c92f02e@gmail.com","SSL verification configuration options\n\n- 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\n- Added dummy callbacks and values to the test.c program.\n- Added more documentation","Oscar Koeroo"],["955133d97c8e8496a2ca8a70477c4526da7d12e1","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","OSX Compatability fixes\n\n- Cmake checks for various functions needed\n- Added strnlen compatability function is not available.\n- Removed need for specifying number of processors for evthr","Mark Ellzey"],["a2a0f09b1ad1ffbcf91a03b40410484e5d1cd5b7","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","Created verify and verify depth callbacks types (instead of using void *)\n\n- Setting callbacks to a void * is actually bad, which was the case in some ssl\n  cfg stuff. Fixed that.","Mark Ellzey"],["29ac2e7e1f9fa35515bdecb03878c425a8399141","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","HTTP response parsing in libhtparser\n\nConflicts:\n\n\tevhtp.c","Mark Ellzey"],["17aede7670c08cc0b30f973fc49f21821cb39e85","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","evthr bugfix in evthr_new() args","Mark Ellzey"],["7b16bd17a8675fd882a307ef5a75c5e5a4df812f","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","Added htparser_get_status to libhtparse","Mark Ellzey"],["f0a8ed37ed8011ad0f699f6658c42a6a1ee938d3","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","Added streaming reply functionality\n\n- If a user wants to stream data back to a client the following functions\n  facilitate this:\n\t\t* evhtp_send_reply_start() - creates the initial reply and sends\n\t\t* evhtp_send_reply_body()  - sends a chunk of data to the client\n\t\t* evhtp_send_reply_end()   - informs evhtp that the user is done streaming\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t data and figures out whether to keep the connection alive or not.","Mark Ellzey"],["78a68632dd9a3f7a8f52c9dc642d1847494be3a9","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","thread initialization functionality","Mark Ellzey"],["b7d283fce4a9c865c1beeb2c9ba0b29d56576efe","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","Content-Length duplicate header fix\n\n- fixed a case where the Content-Length header in a reply would be added twice.","Mark Ellzey"],["c0c6e595af13607fe7e3447ecd331908e7fc1cc0","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","Additional libevhtparse chunk-specific hooks and documentation.\n\n- Added an on_chunk_complete hook in htparse which is called\n  when a single chunk has been fully parsed.\n- Added an on_chunks_complete hook in htparse which is called\n  after all chunks in a request have been parsed.\n- Added more documentation","Mark Ellzey"],["fbe3c8b514ae531992329c821d13f913b151f44a","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","fixed issue with bufferevent SSL events\n\n- SSL bufferevents will call your eventcb with BEV_EVENT_CONNECTED once\n\tthe SSL handshake is completed. This was not being checked previously and\n\tresulted in connections being dropped.","Mark Ellzey"],["d352dd1abc8a21e70b33476187b584d1c6261b35","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","libhtparse on_new_chunk bugfix\n\n- the on_new_chunk callback was being called in the wrong area. The\n  hook was moved into the right area.","Mark Ellzey"],["c2883eba498c0fd27752c2ea3ec55d85a4774279","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","Additions for HTTP/1.1 / other additions / fixes\n\n- If Content-Length is 0, while transfer-encoding includes \"chunked\",\n  _evhtp_create_reply will no longer include a zero length content-length\n  header.\n\n- Added evhtp_kv_rm_and_free which will take a evhtp_kvs_t and evhtp_kv_t set\n  of arguments, remove the kv_t from kvs_t and free the kv_t structure.\n\n- Added evhtp_kvs_find_kv which acts like kv_find but instead returns an\n  evhtp_kv_t structure.","Mark Ellzey"],["b159c328b08a3cc91559875fe45801a26f2bdd8c","efc7f8b731bc85d9a967f99f1157b02061a1b48e@mandiant.com","Fixed conditional bug for chunked responses\n\n- _evhtp_create_reply() was adding a Content-Length: 0 header even if\n\tthe response is chunked (this breaks RFC).","Mark Ellzey"]],"ref":"refs/heads/master","size":25,"head":"487a9fba621034a6679b2f12f7643147a85b13a7","push_id":41953872}