39 Commits

Author SHA1 Message Date
Nick Mathewson
74c0e86298 Avoid missed-request bug when entire http request arrives before data is flushed
The trigger for starting to read the first line of a request used to
be, "When data has arrived and we're looking for the first line."
But that's not good enough: if the entire next request gets read
into our bufev->inbuf while we're still processing the current
request, we'll never see any more data arrive, and so will never
process it.

So the fix is to make sure that whenever we hit evhttp_send_done, we
call evhttp_read_cb.  We can't call it directly, though, since
evhttp_send_done is reachable from the user API, and evhttp_read_cb
can invoke user functions, and we don't want to force everyone to
have reentrant callbacks.  So, we use a deferred_cb.

Found by Ivan Andropov.  This is bug 3008344.
2010-10-25 21:53:15 -04:00
Nick Mathewson
2a3b5872fe Merge branch 'http_small_tweaks'
Conflicts:
	http-internal.h
2010-10-21 12:23:10 -04:00
Gilad Benjamini
60433a0a1a Clean up syntax on TAILQ_ENTRY() usage
Though the C standards allow it, it's apparently possible to get MSVC
upset by saying "struct { int field; } (declarator);" instead of
"struct {int field; } declarator;", so let's just not do that.

Bugfix for 3044492

(commit msg by nickm)
2010-08-13 17:08:59 -04:00
Nick Mathewson
90b3ed5bc8 Add some comments to http.c and make a few functions static. 2010-08-09 16:43:40 -04:00
Nick Mathewson
17efc1cdfa Update all our copyright notices to say "2010" 2010-03-04 01:38:48 -05:00
Nick Mathewson
e5bbd40ad7 Clean up formatting: use tabs, not 8-spaces, to indent. 2010-02-18 17:44:09 -05:00
Nick Mathewson
8f65467848 Merge remote branch 'github/http_listener'
Conflicts:
	http.c
2010-02-03 16:25:34 -05:00
Nick Mathewson
ec34533a9c Make http use evconnlistener.
Now that we have a generic listen-on-a-socket mechanism, there's no
longer any reason to have a separate listen-on-a-socket implementation
in http.c.

This also lets us use IOCP and AcceptEx() when they're enabled.

Possibly, we should have a new mechanism to add a socket given only a
listener.
2010-01-14 15:22:15 -05:00
Nick Mathewson
c698b77d19 Allow http connections to use evdns for hostname looksups.
This was as simple as using bufferevent_connect_hostname instead of
calling connect() ourself, which already knows how to use an
evdns_base if it gets one.

Untangling the bind code might be a little trickier.
2010-01-14 15:18:25 -05:00
Nick Mathewson
34f28e08b3 Fix a few types to use compatible versions
svn:r1501
2009-11-05 15:57:22 +00:00
Nick Mathewson
47bad8abb7 Implement size limits on HTTP header length and body length.
Patch from Constantine Verutin, simplified a little.

svn:r1500
2009-11-04 20:17:32 +00:00
Nick Mathewson
5082546682 Fix windows compilation warnings.
svn:r1449
2009-10-21 02:14:16 +00:00
Nick Mathewson
5d71b25b51 Remove all trailing whitespace from end-of-line.
svn:r1350
2009-07-17 18:38:38 +00:00
Nick Mathewson
9516df0e2e Fix c89 bugs reported by Cory Stup.
Others may remain.  I wasn't able to get gcc --std=c89 to build libevent
at all, so I don't know what compiler the original reporter is using here.

Note that this change requires us to disable the part of our rpc code
that uses variadic macros when using a non-gcc compiler.  This is a
problem if we want our rpc api to be portable.

svn:r1231
2009-04-23 05:40:06 +00:00
Nick Mathewson
4e8cdc6f08 Fix two windows compilation bugs.
svn:r1171
2009-04-13 18:23:02 +00:00
Nick Mathewson
b85b710cf5 Update copyright statements to reflect the facts that:
a) this is 2009
b) niels and nick have been comaintainers for a while
c) saying "all rights reserved" when you then go on to explicitly
   disclaim some rights is sheer cargo-cultism.

svn:r1065
2009-01-27 22:34:36 +00:00
Niels Provos
f700566cb9 Make the http connection close detection work properly with bufferevents and fix a potential memory leak associated with it
svn:r963
2008-12-19 21:31:43 +00:00
Niels Provos
5792d42f0f Allow setting of local port for evhttp connections to support millions of connections from a single system; from Richard Jones
svn:r948
2008-11-16 23:22:14 +00:00
Niels Provos
9998c0cbc8 correct handling of trailing headers in chunked replies; from Scott Lamb.
svn:r887
2008-06-26 00:40:57 +00:00
Niels Provos
1080852e91 allow cancelation of user initiated http requests; this will allow cancelation of rpc requests eventually
svn:r812
2008-05-12 03:12:09 +00:00
Nick Mathewson
7defe4cbc1 r15549@tombo: nickm | 2008-05-08 11:53:11 -0400
Make new http headers include minimal parts of event2/ tree; make old evhttp.h incldue event.h, since the old one did too.


svn:r798
2008-05-08 15:55:09 +00:00
Niels Provos
f2a81fbc67 add support for virtual http hosts; no tests yet
svn:r771
2008-05-05 07:17:05 +00:00
Niels Provos
f940eb4b8d fix a bug where it was not possible to bind multiple sockets to the same http
server; test that binding multiple sockets works.


svn:r769
2008-05-04 22:21:29 +00:00
Nick Mathewson
4cff82bb4f r15339@tombo: nickm | 2008-04-29 14:03:48 -0400
Note that evhttp_hostportfile is not threadsafe, and so its usage will change.  Mark its first argument const. Remove a now-redundant declaration for it in http-internal.h.


svn:r743
2008-04-29 18:11:10 +00:00
Niels Provos
e44ef375ee convert evhttp_connection to use bufferevents
svn:r742
2008-04-29 04:52:50 +00:00
Nick Mathewson
1120f04f3e r16731@catbus: nickm | 2007-11-25 16:52:53 -0500
Replace all fds on non-unix-specific APIs with evutil_socket_t, which is int on unix and intptr_t on win32.


svn:r552
2007-11-25 21:53:06 +00:00
Niels Provos
98f9616bf4 support setting local address on an evhttp_connection
svn:r416
2007-09-07 02:49:46 +00:00
Niels Provos
67947ce381 provide evhttp_new and evhttp_bind_socket instead of evhttp_start;
using evhttp_new, it is possible to associate an event_base with
the http server so that multi-threaded applications can have their
own http server per thread; add appropriate testing.


svn:r397
2007-08-19 02:41:23 +00:00
Niels Provos
a91d2b2b8c do close-detection via a separate event
svn:r301
2006-12-12 03:51:30 +00:00
Niels Provos
de7db33a61 low-level interfaces for streaming; from dug song
i applied some bug fixes and slight re-arranged the logic
on when to call the close notification callback;
i also don't like the streaming interface; i'd rather
see it do the chunked response formatting explicitly.


svn:r298
2006-12-09 02:58:12 +00:00
Niels Provos
852d05a3c0 support retrying for connections; from dug song
small tweaks from me.


svn:r297
2006-12-09 01:41:57 +00:00
Niels Provos
942656bb5c persistent connections are somewhat complicated; detect on the client side if the
server closes a persistent connection.  previously, we would have failed the next
request on that connection.  provide test case.


svn:r277
2006-11-23 06:32:20 +00:00
Niels Provos
2d028ef6c1 fix a bug where rpc would not be scheduled when they were queued; test for it.
allow a configurable timeout for connections and RPCs.


svn:r274
2006-11-22 06:54:28 +00:00
Niels Provos
ce436242ad an attempt at differentiated error handling for timeouts and eof.
really this needs to be propagated all the way to the callback.


svn:r273
2006-11-22 05:03:02 +00:00
Niels Provos
fda1216b6e generate client request code via macro; flesh out the pools a little bit.
svn:r268
2006-11-20 03:32:53 +00:00
Niels Provos
36212f9df0 make persistent connections work; needs more testing
svn:r261
2006-11-18 03:05:26 +00:00
Niels Provos
f554234f74 first stab at an rpc layer; this breaks the regression test.
svn:r254
2006-11-16 07:36:20 +00:00
Niels Provos
ba7262ebdf reorganization of the http functionality; we separate http handling into a
connection object and a request object; also make it clear which buffers are
used for input and output; unittests not complete yet.


svn:r217
2006-07-17 00:33:57 +00:00
Niels Provos
147b71e33c rename http.h to http-internal.h - i wish there were decent refactoring tools
for open source programmers.


svn:r213
2006-06-10 22:28:21 +00:00