forked from Yellow-Camper/libevhtp
-
Notifications
You must be signed in to change notification settings - Fork 18
/
ChangeLog
166 lines (131 loc) · 7.65 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
v0.3.7
- Due to various problems http-parser (ry/http-parser) I have written my own
parser (derived and ispired from various nginx functions) (./libhtparse).
- Re-introduced the pre_accept_cb and post_accept_cb which deprecates the
evhtp_set_connection_hooks (which would call a defined function immediately
after a connection was accepted, so it was confusing I think).
The new functions to set the pre/post accepts are:
* evhtp_set_pre_accept_cb(evhtp_t *, evhtp_pre_accept cb, void * arg);
* evhtp_set_post_accept_cb(evhtp_t *, evhtp_post_accept cb, void * arg);
- evhtp_pre_accept functions have the following attributes:
* int fd : (the allocated file descriptor)
* struct sockaddr * : self-explanitory
* int slen : size of sockaddr
* void * arg : argument passed to evhtp_set_pre_accept_cb
- evhtp_post_accept functions have the following attributes:
* evhtp_conn_t * : self explanitory
* void * arg : argument passed to evhtp_set_post_accept_cb
- libevhtp now properly honors all return evhtp_res's from defined request hooks.
Meaning if you return something other than EVHTP_RES_OK, the proper error
handling is done with the exception of EVHTP_RES_PAUSE (see notes on pausing)
- Added [currently only half-working] methods to allow for suspending and
resuming parser execution and connection handling.
A hook which returns an evhtp_res value can now return "EVHTP_RES_PAUSE" which
informs libevhtp to stop all request processing on a connection. Alternatively
you can use the functions evhtp_request_pause(evhtp_request_t *);
You may also get a copy of the suspend/resume event timer directly via the
function evhtp_request_get_resume_ev()
To resume execution/processing one must call the function
evhtp_request_resume(evhtp_request_t *);
To completely disable this functionality you may call the function
evhtp_disable_pausing(evhtp_t *) before dropping into your event loop
- Removed unnecessary bufferevent_[enable|disable] calls, it was too tedious
to work with as it could cause shitty race-like conditions if the client
bufferevent was needed outside of the library.
- EVHTP_CLOSE_* flags have been renamed to EVHTP_FLAG_CLOSE_* and length
extended to 16 bits.
- added functionality to both set and get user-set htp_request args:
evhtp_request_set_cbargs()
evhtp_request_get_cbargs()
- added a hook which is called just prior to a evhtp_request_t being free()'d
- Added the ability to define per-callback hooks. Much like per-connection hooks,
you can set various hooks which are called when a uri|regex (defined by the
set_cb functions) was matched.
In order to do this properly, set_cb functions now return a evhtp_callback_t which
can be passed to the evhtp_set_callback_hook() functions.
For example:
evhtp_callback_t * cb = evhtp_set_cb(htp, "/derp", derp_cb, NULL);
evhtp_set_callback_hook(cb, EVHTP_HOOK_HDRS_READ, derp_hdrs_cb, NULL);
In the case above once evhtp has found that the incoming request is destined
for the "/derp" specific callback, it will call "derp_hdrs_cb" after all
headers have been read.
These act just like normal per-connection hooks, but it should be noted that
if a per-callback hook has been enabled, the per-connection hook will be ignored
for that hook.
v0.3.6
- Removed submodule dependencies
- Added various evhtp_hdr functions
* evhtp_hdrs_new(): creates a new evhtp_hdrs_t struct
* evhtp_hdr_copy(): creates a copy of a evhtp_hdr_t struct
* evhtp_hdrs_copy(): creates a copy of a evhtp_hdrs_t struct
- Added a default request callback if the user has not defined one.
- Added some informational SSL accessor functions
v0.3.5
- Added evhtp_request_t accessors
evbuf_t * evhtp_request_get_input(evhtp_request_t *);
evbuf_t * evhtp_request_get_output(evhtp_request_t *);
evbase_t * evhtp_request_get_evbase(evhtp_request_t *);
evserv_t * evhtp_request_get_listener(evhtp_request_t *);
evhtp_method evhtp_request_get_method(evhtp_request_t *);
evhtp_proto evhtp_request_get_proto(evhtp_request_t *);
evhtp_conn_t * evhtp_request_get_conn(evhtp_request_t *);
evhtp_hdrs_t * evhtp_request_get_headers_in(evhtp_request_t *);
evhtp_hdrs_t * evhtp_request_get_headers_out(evhtp_request_t *);
evhtp_callback_cb evhtp_request_get_cb(evhtp_request_t *);
void * evhtp_request_get_cbarg(evhtp_request_t *);
int evhtp_request_get_sock(evhtp_request_t *);
const char * evhtp_request_get_path(evhtp_request_t *);
const char * evhtp_request_get_uri(evhtp_request_t *);
const char * evhtp_request_method_str(evhtp_request_t *);
int evhtp_request_get_matched_soff(evhtp_request_t *);
int evhtp_request_get_matched_eoff(evhtp_request_t *);
int64_t evhtp_request_get_content_length(evhtp_request_t *);
- Better callback return error and response handling.
* Callbacks which return an evhtp_res code now must use
EVHTP_RES_*, where each EVHTP_RES_* definition is a HTTP
status code. For example "return EVHTP_RES_400;" will
send a 404 error to the client, along with terminating
the parser.
- All static functions prefixed with _htp_* are now just static htp_
- Various small bugfixes.
v0.3.4
- Added optional OpenSSL support (with optional threading abstractions).
* In order to properly enable SSL for your server two things must happen:
evhtp_ssl_cfg structure must be filled with your settings:
evhtp_ssl_cfg scfg = {
.pemfile = ssl_pem,
.privfile = ssl_pem,
.cafile = ssl_ca,
.ciphers = "RC4+RSA:HIGH:+MEDIUM:+LOW",
.ssl_opts = <SSL SPECIFIC FLAGS>,
.enable_scache = 1,
.scache_timeout = 1024,
.scache_init = evhtp_ssl_scache_builtin_init,
.scache_add = evhtp_ssl_scache_builtin_add,
.scache_get = evhtp_ssl_scache_builtin_get,
.scache_del = NULL,
};
* please note that .scache_init, .scache_add, .scache_get, and .scace_del
are function points to allow for a user to define their own session cache
mechanism. Libevhtp has a few default built-in cache functions:
evhtp_ssl_scache_builtin_init,
evhtp_ssl_scache_builtin_add,
evhtp_ssl_scache_builtin_get,
evhtp_ssl_scache_builtin_del
Another side note here is that currently the builtin functions do not expire,
this will be fixed in the next beta-release.
* The second step is to enable the use of the SSL backend by calling
evhtp_use_ssl(evhtp_t *, evhtp_ssl_cfg *);
- Regular expression based path callback functions added:
evhtp_set_regex_cb(evhtp_t *, "^(/path_w_regex/).*", callback, args);
Using the case above, any path/uri in the request with /path_w_regex/*, the API
will execute your defined callback function. The output of which is the same as
any other defined callback.
- Added _htp_callbacks_find_callback_woffsets(), which (if regex) will set 2 integer
variables in the evhtp_rquest_t structure defining the beginning and end of a matched
URI/path.
- _htp_callback_new() has been modified to create regex based evhtp_callback_t's
- Made the evhtp_request_t structure private, various get/set functions have been added
to deal with the internals.
- Modified compile to support libonigurmura, a BSD licensed cross-platform regular expression
library. Currently this is only used to support posix regex functionality.