author | Tero Marttila <terom@fixme.fi> |
Sat, 30 Aug 2008 19:13:15 +0300 | |
changeset 49 | 10c7dce1a043 |
parent 14 | 5a2246f5be78 |
permissions | -rw-r--r-- |
14
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
Index: http.c |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
=================================================================== |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
--- http.c (revision 848) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
+++ http.c (working copy) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
@@ -167,8 +167,10 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
static void evhttp_read_header_cb(struct bufferevent *bufev, void *arg); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
static void evhttp_write_cb(struct bufferevent *, void *); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
static void evhttp_error_cb(struct bufferevent *bufev, short what, void *arg); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
static int evhttp_decode_uri_internal(const char *uri, size_t length, |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
char *ret); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
+static void _evhttp_reply_notify (struct evhttp_connection *evcon, void *arg); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
#ifndef HAVE_STRSEP |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
/* strsep replacement for platforms that lack it. Only works if |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
@@ -293,13 +295,20 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
void |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
evhttp_write_buffer(struct evhttp_connection *evcon, |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
- void (*cb)(struct evhttp_connection *, void *), void *arg) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
21 |
+ void (*cb)(struct evhttp_connection *, void *), void *arg, |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
+ size_t threshold) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
{ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
event_debug(("%s: preparing to write buffer\n", __func__)); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
/* Set call back */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
evcon->cb = cb; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
evcon->cb_arg = arg; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
+ if (threshold > 0) { |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
+ bufferevent_setwatermark(evcon->bufev, EV_WRITE, threshold, 0); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
+ } else { |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
+ bufferevent_setwatermark(evcon->bufev, EV_WRITE, 0, 0); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
+ } |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
bufferevent_disable(evcon->bufev, EV_READ); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
bufferevent_enable(evcon->bufev, EV_WRITE); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
@@ -483,6 +492,17 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
switch (error) { |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
case EVCON_HTTP_TIMEOUT: |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
case EVCON_HTTP_EOF: |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
+ /* |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
+ * Fix a bug that caused a nasty infinite-malloc()-and-write() loop. |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
+ * A write buffer error (e.g. EPIPE) means that we can't write to that |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
+ * socket anymore, and evhttp_connection_fail does disable |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
+ * EV_WRITE|EV_READ for that buffer. However, if we call req->cb, then |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
+ * that adds a "400 Bad Request" to the buffer, and enables it for |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
+ * EV_WRITE... which causes evhttp_connection_incoming_fail to be |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
49 |
+ * called again with EVCON_HTTP_BUFFER_ERROR... ended up having to |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
50 |
+ * hard-reset my machine. |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
51 |
+ */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
52 |
+ case EVCON_HTTP_BUFFER_ERROR: |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
53 |
/* |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
54 |
* these are cases in which we probably should just |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
55 |
* close the connection and not send a reply. this |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
56 |
@@ -491,7 +511,6 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
57 |
*/ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
58 |
return (-1); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
59 |
case EVCON_HTTP_INVALID_HEADER: |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
60 |
- case EVCON_HTTP_BUFFER_ERROR: |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
61 |
case EVCON_HTTP_REQUEST_CANCEL: |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
62 |
default: /* xxx: probably should just error on default */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
63 |
/* the callback looks at the uri to determine errors */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
64 |
@@ -869,7 +888,7 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
65 |
/* Create the header from the store arguments */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
66 |
evhttp_make_header(evcon, req); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
67 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
68 |
- evhttp_write_buffer(evcon, evhttp_write_connectioncb, NULL); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
69 |
+ evhttp_write_buffer(evcon, evhttp_write_connectioncb, NULL, 0); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
70 |
} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
71 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
72 |
/* Reset our connection state */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
73 |
@@ -1353,9 +1372,9 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
74 |
} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
75 |
} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
76 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
77 |
- event_debug(("%s: bytes to read: %d (in buffer %ld)\n", |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
78 |
+ event_debug(("%s: bytes to read: %ld (in buffer %ld)\n", |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
79 |
__func__, req->ntoread, |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
80 |
- EVBUFFER_LENGTH(req->evcon->input_buffer))); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
81 |
+ EVBUFFER_LENGTH(EVBUFFER_INPUT(req->evcon->bufev)))); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
82 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
83 |
return (0); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
84 |
} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
85 |
@@ -1688,6 +1707,10 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
86 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
87 |
/* delete possible close detection events */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
88 |
evhttp_connection_stop_detectclose(evcon); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
89 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
90 |
+ /* now that the reply was sent, we don't need to abort on connection lost */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
91 |
+ if (req->abort_cb) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
92 |
+ evhttp_connection_set_closecb(evcon, NULL, NULL); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
93 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
94 |
need_close = |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
95 |
(req->minor == 0 && |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
96 |
@@ -1753,7 +1776,7 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
97 |
/* Adds headers to the response */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
98 |
evhttp_make_header(evcon, req); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
99 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
100 |
- evhttp_write_buffer(evcon, evhttp_send_done, NULL); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
101 |
+ evhttp_write_buffer(evcon, evhttp_send_done, NULL, 0); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
102 |
} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
103 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
104 |
void |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
105 |
@@ -1781,7 +1804,7 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
106 |
req->chunked = 1; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
107 |
} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
108 |
evhttp_make_header(req->evcon, req); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
109 |
- evhttp_write_buffer(req->evcon, NULL, NULL); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
110 |
+ evhttp_write_buffer(req->evcon, NULL, NULL, 0); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
111 |
} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
112 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
113 |
void |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
114 |
@@ -1796,9 +1819,32 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
115 |
if (req->chunked) { |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
116 |
evbuffer_add(output, "\r\n", 2); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
117 |
} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
118 |
- evhttp_write_buffer(req->evcon, NULL, NULL); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
119 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
120 |
+ evhttp_write_buffer(req->evcon, &_evhttp_reply_notify, req, req->write_threshold); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
121 |
} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
122 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
123 |
+static void |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
124 |
+_evhttp_reply_notify (struct evhttp_connection *evcon, void *arg) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
125 |
+{ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
126 |
+ struct evhttp_request *req = arg; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
127 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
128 |
+ if (req->write_cb) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
129 |
+ req->write_cb(req, req->write_cb_arg); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
130 |
+} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
131 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
132 |
+int |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
133 |
+evhttp_set_reply_notify(struct evhttp_request *req, size_t threshold, |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
134 |
+ void (*write_cb)(struct evhttp_request *, void *), void *cb_arg) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
135 |
+{ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
136 |
+ req->write_threshold = threshold; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
137 |
+ req->write_cb = write_cb; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
138 |
+ req->write_cb_arg = cb_arg; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
139 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
140 |
+ evhttp_write_buffer(req->evcon, &_evhttp_reply_notify, req, threshold); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
141 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
142 |
+ return 0; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
143 |
+} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
144 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
145 |
void |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
146 |
evhttp_send_reply_end(struct evhttp_request *req) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
147 |
{ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
148 |
@@ -1807,7 +1853,7 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
149 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
150 |
if (req->chunked) { |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
151 |
evbuffer_add(output, "0\r\n\r\n", 5); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
152 |
- evhttp_write_buffer(req->evcon, evhttp_send_done, NULL); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
153 |
+ evhttp_write_buffer(req->evcon, evhttp_send_done, NULL, 0); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
154 |
req->chunked = 0; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
155 |
} else if (EVBUFFER_LENGTH(output) == 0) { |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
156 |
/* let the connection know that we are done with the request */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
157 |
@@ -1819,6 +1865,28 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
158 |
} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
159 |
} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
160 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
161 |
+void _evhttp_reply_aborted(struct evhttp_connection *evcon, void *arg) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
162 |
+{ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
163 |
+ struct evhttp_request *req = arg; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
164 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
165 |
+ /* call the callback */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
166 |
+ req->abort_cb(req, req->abort_cb_arg); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
167 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
168 |
+ /* the request is now aborted, we don't want this called twice */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
169 |
+ evhttp_connection_set_closecb(evcon, NULL, NULL); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
170 |
+} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
171 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
172 |
+void evhttp_set_reply_abortcb(struct evhttp_request *req, |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
173 |
+ void (*cb)(struct evhttp_request *, void *), void *cb_arg) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
174 |
+{ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
175 |
+ /* store the cb/arg in req */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
176 |
+ req->abort_cb = cb; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
177 |
+ req->abort_cb_arg = cb_arg; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
178 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
179 |
+ /* add a closecb to the connection */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
180 |
+ evhttp_connection_set_closecb(req->evcon, &_evhttp_reply_aborted, req); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
181 |
+} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
182 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
183 |
void |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
184 |
evhttp_response_code(struct evhttp_request *req, int code, const char *reason) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
185 |
{ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
186 |
@@ -2448,6 +2516,19 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
187 |
* Allows for inspection of the request URI |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
188 |
*/ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
189 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
190 |
+enum evhttp_cmd_type |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
191 |
+evhttp_request_get_type(struct evhttp_request *req) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
192 |
+{ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
193 |
+ return req->type; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
194 |
+} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
195 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
196 |
+void |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
197 |
+evhttp_request_get_peer(struct evhttp_request *req, |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
198 |
+ char **address, ev_uint16_t *port) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
199 |
+{ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
200 |
+ return evhttp_connection_get_peer(req->evcon, address, port); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
201 |
+} |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
202 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
203 |
const char * |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
204 |
evhttp_request_get_uri(struct evhttp_request *req) { |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
205 |
if (req->uri == NULL) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
206 |
Index: http-internal.h |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
207 |
=================================================================== |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
208 |
--- http-internal.h (revision 848) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
209 |
+++ http-internal.h (working copy) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
210 |
@@ -141,7 +141,8 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
211 |
void evhttp_make_header(struct evhttp_connection *, struct evhttp_request *); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
212 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
213 |
void evhttp_write_buffer(struct evhttp_connection *, |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
214 |
- void (*)(struct evhttp_connection *, void *), void *); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
215 |
+ void (*)(struct evhttp_connection *, void *), void *, |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
216 |
+ size_t); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
217 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
218 |
/* response sending HTML the data in the buffer */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
219 |
void evhttp_response_code(struct evhttp_request *, int, const char *); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
220 |
Index: include/event2/http.h |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
221 |
=================================================================== |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
222 |
--- include/event2/http.h (revision 848) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
223 |
+++ include/event2/http.h (working copy) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
224 |
@@ -243,6 +243,7 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
225 |
*/ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
226 |
void evhttp_send_reply_chunk(struct evhttp_request *req, |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
227 |
struct evbuffer *databuf); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
228 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
229 |
/** |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
230 |
Complete a chunked reply. |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
231 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
232 |
@@ -250,6 +251,43 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
233 |
*/ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
234 |
void evhttp_send_reply_end(struct evhttp_request *req); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
235 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
236 |
+/** |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
237 |
+ Used to implement flow control for sending HTTP replies. |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
238 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
239 |
+ After calling evhttp_send_reply_start, and before calling |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
240 |
+ evhttp_send_reply_end, you may call this function to register a callback |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
241 |
+ that will be fired when the level of the HTTP connection's output buffer is |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
242 |
+ below the given threshold (if the output buffer is empty when this function |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
243 |
+ is called, this will happen on the next event-loop iteration). |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
244 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
245 |
+ This callback behaves in an edge-triggered way, such that it will only fire |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
246 |
+ once if the otuput buffer's level is below the threshold. It may be called |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
247 |
+ again after the next evhttp_send_reply_chunk call. |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
248 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
249 |
+ Once evhttp_send_reply_end is called (or an error occurs), the callback is |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
250 |
+ invalidated and not used anymore. |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
251 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
252 |
+ @param req a request object |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
253 |
+ @param threshold the buffer level to watch for |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
254 |
+ @param write_cb the callback to use |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
255 |
+ @param cb_arg the callback argument |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
256 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
257 |
+*/ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
258 |
+int evhttp_set_reply_notify(struct evhttp_request *req, size_t threshold, |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
259 |
+ void (*write_cb)(struct evhttp_request *, void *), void *cb_arg); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
260 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
261 |
+/** |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
262 |
+ Register a callback to get called if the request is aborted due to some |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
263 |
+ reason other than evhttp_send_{reply,error,reply_end}, e.g. the HTTP |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
264 |
+ connection was lost. |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
265 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
266 |
+ @param req a request object |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
267 |
+ @param cb the callback to use |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
268 |
+ @param cb_arg the callback argument |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
269 |
+*/ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
270 |
+void evhttp_set_reply_abortcb(struct evhttp_request *, |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
271 |
+ void (*)(struct evhttp_request *, void *), void *); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
272 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
273 |
/* |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
274 |
* Interfaces for making requests |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
275 |
*/ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
276 |
@@ -360,6 +398,11 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
277 |
void evhttp_cancel_request(struct evhttp_request *req); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
278 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
279 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
280 |
+/** Get the request type for this request */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
281 |
+enum evhttp_cmd_type evhttp_request_get_type(struct evhttp_request *req); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
282 |
+/** Get the remote address and port this request came from. */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
283 |
+void evhttp_request_get_peer(struct evhttp_request *req, |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
284 |
+ char **address, ev_uint16_t *port); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
285 |
/** Returns the request URI */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
286 |
const char *evhttp_request_get_uri(struct evhttp_request *req); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
287 |
/** Returns the input headers */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
288 |
Index: include/event2/http_struct.h |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
289 |
=================================================================== |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
290 |
--- include/event2/http_struct.h (revision 848) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
291 |
+++ include/event2/http_struct.h (working copy) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
292 |
@@ -113,6 +113,19 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
293 |
* the regular callback. |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
294 |
*/ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
295 |
void (*chunk_cb)(struct evhttp_request *, void *); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
296 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
297 |
+ /* |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
298 |
+ * Request reply flow control callback |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
299 |
+ */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
300 |
+ size_t write_threshold; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
301 |
+ void (*write_cb)(struct evhttp_request *, void *); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
302 |
+ void *write_cb_arg; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
303 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
304 |
+ /* |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
305 |
+ * Request abort callback |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
306 |
+ */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
307 |
+ void (*abort_cb)(struct evhttp_request *, void *); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
308 |
+ void *abort_cb_arg; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
309 |
}; |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
310 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
311 |
#ifdef __cplusplus |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
312 |
Index: buffer.c |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
313 |
=================================================================== |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
314 |
--- buffer.c (revision 848) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
315 |
+++ buffer.c (working copy) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
316 |
@@ -412,6 +412,9 @@ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
317 |
if (size == 0 || size > buf->total_len) |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
318 |
return (NULL); |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
319 |
|
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
320 |
+// XXX: the following will segfault if buf->total_len == 0 && size < -1 |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
321 |
+// XXX: the following will return a buffer of arbitrary length if size < -1 |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
322 |
+ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
323 |
/* No need to pull up anything; the first size bytes are |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
324 |
* already here. */ |
5a2246f5be78
added lib/libevent-terom-r848.diff
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
325 |
if (chain->off >= size) |