1709c21c4SNick MathewsonChanges in 2.0.3-alpha: 2709c21c4SNick Mathewson o Add a new code to support SSL/TLS on bufferevents, using the OpenSSL library (where available). 3f8b527e6SNick Mathewson o Fix a bug where we didn't allocate enough memory in event_get_supported_methods(). 412199fa7SNick Mathewson o Avoid segfault during failed allocation of locked evdns_base. (Found by Rocco Carbone.) 572ea534fSNick Mathewson o Export new evutil_ascii_* functions to perform locale-independent character type operations. 63c99c79dSNick Mathewson o Try to compile better with MSVC: patches from Brodie Thiesfield 775fe762eSNick Mathewson o New evconnlistener_get_fd function to expose a listener's associated socket. 87c20a6aeSNick Mathewson o Expose an ev_socklen_t type for consistent use across platforms. 925af6954SNick Mathewson o Make bufferevent_socket_connect() work when the original fd was -1. 10d1a2254bSNick Mathewson o Fix a bug in bufferevent_socket_connect() when the connection succeeds too quickly. 11621aafd2SNick Mathewson o Export an evutil_sockaddr_cmp() to compare to sockaddr objects for equality. 127c688dd9SNick Mathewson o Add a bufferevent_get_enabled() to tell what a bufferevent has been configured to do. 13d4134772SNick Mathewson o Add an evbuffer_search_eol() function to locate the end of a line nondestructively. 147a55c48dSNick Mathewson o Add an evbuffer_search_range() function to search a bounded range of a buffer. 157a55c48dSNick Mathewson o Fix a rare crash bug in evdns. 167a55c48dSNick Mathewson o Have bufferevent_socket_connect() with no arguments put a bufferevent into connecting mode. 1722bd5b42SNick Mathewson o Support sendfile on Solaris: patch from Caitlin Mercer. 182c1b0e44SNick Mathewson o New functions to explicitly reference a socket used by an evhttp object. Patches from David Reiss. 19f65b8b09SNick Mathewson o When we send a BEV_EVENT_CONNECTED to indicate connected status, we no longer invoke the write callback as well unless we actually wrote data too. 203b461a6dSNick Mathewson o If the kernel tells us that there are a negative number of bytes to read from a socket, do not believe it. Fixes bug 2841177; found by Alexander Pronchenkov. 21e3f89fa2SNick Mathewson o Do not detect whether we have monotonic clock support every time a new event base is created: instead do it only once. Patch taken from Chromium. 2285255a63SNick Mathewson o Do not allocate the maximum event queue for the epoll backend at startup. Instead, start out accepting 32 events at a time, and double the queue's size when it seems that the OS is generating events faster than we're requesting them. Saves up to 374K per epoll-based event_base. Resolves bug 2839240. 23c2ead9f1SNick Mathewson o Treat an event with a negative fd as valid but untriggerable by Libevent. This is useful for applications that want to manually activate events. 2418fe4008SNick Mathewson o Fix compilation on Android, which forgot to define fd_mask in its sys/select.h 258e8d94a3SNiels Provos o Do not drop data from evbuffer when out of memory; reported by Jacek Masiulaniec 26d5b640fcSNick Mathewson o New event_base_got_exit() and event_base_got_break() functions to tell whether an event loop exited because of an event_base_loopexit() or an event_base_loopbreak(). Patch from Ka-Hing Cheung. 27633f3fb7SNick Mathewson o When adding or deleting an event from a non-main thread, only wake up the main thread when its behavior actually needs to change. 28fc83ca3cSNick Mathewson o Fix some bugs when using the old evdns interfaces to initialize the evdns module. 2925af6954SNick Mathewson o Detect errors during bufferevent_connect(). Patch from Christopher Davis. 30e1c9b84aSNiels Provos o Fix compilation for listener.h for C++ - missing extern "C". Patch from Ferenc Szalai. 316b22e74aSNick Mathewson o Make the event_base_loop() family of functions respect thread-safety better. This should clear up a few hard-to-debug race conditions. 326b22e74aSNick Mathewson o Fix a bug when using a specialized memory allocator on win32. 33d8164d0cSNick Mathewson o Have the win32 select() backend label TCP-socket-connected events as EV_WRITE, not EV_READ. This should bring it in line with the other backends, and improve portability. Patch from Christopher Davis. 34b73ad7bcSNick Mathewson o Stop using enums as arguments or return values when what we mean is a bitfield of enum values. C++ doesn't believe that you can OR two enum values together and get another enum, and C++ takes its typing seriously. Patch from Christopher Davis. 35a8267663SNick Mathewson o Add an API to replace all fatal calls to exit() with a user-provided panic function. 367f10fac3SNick Mathewson o Replace all assert() calls with a variant that is aware of the user-provided logging and panic functions. 37e9ee1057SNick Mathewson o Add a return value to event_assign so that it can fail rather than asserting when the user gives it bad input. event_set still dies on bad input. 38904b5721SNick Mathewson o The event_base_new() and event_base_new_with_config() functions now never call exit() on failure. For backward "compatibility", event_init() still does, but more consistently. 390fd0255fSNick Mathewson o Remove compat/sys/_time.h. It interfered with system headers on HPUX, and its functionality has been subsumed by event2/util.h and util-internal.h. 400b9eb1bfSNick Mathewson o Add a new bufferevent_socket_connect_hostname() to encapsulate the resolve-then-connect operation. 414d48cf61SNick Mathewson o Build kqueue.c correctly on GNU/kFreeBSD platforms. Patch pulled upstream from Debian. 42693c24efSNick Mathewson o Alternative queue-based timeout algorithm for programs that use a large number of timeouts with the same value. 43ab96b5f3SNick Mathewson o New event_base_config option to disable the timeval cache entirely. 44e88079a8SNick Mathewson o Make EV_PERSIST timeouts more accurate: schedule the next event based on the scheduled time of the previous event, not based on the current time. 4537e23f80SNick Mathewson o Allow http.c to handle cases where getaddrinfo returns an IPv6 address. Patch from Ryan Phillips. 4674871cacSNick Mathewson o Fix a problem with excessive memory allocation when using multiple event priorities. 47629a6133SNick Mathewson o Default to using arc4random for DNS transaction IDs on systems that have it; from OpenBSD. 48629a6133SNick Mathewson o Never check the environment when we're running setuid or setgid; from OpenBSD. 4972bafc17SNick Mathewson o Options passed to evdns_set_option() no longer need to end with a colon. 5086f57420SNick Mathewson o Add an evutil_getaddrinfo() function to clone getaddrinfo on platforms that don't have it. 5186f57420SNick Mathewson o Add an evdns_getaddrinfo() function to provide a nonblocking getaddrinfo using evdns, so programs can perform useful hostname lookup. 52*bdfe72f3SNick Mathewson o Finally expose the IOCP-based bufferevent backend. It passes its unit tests, but probably still has some bugs remaining. Code by Nick Mathewson and Christopher Davis. 53*bdfe72f3SNick Mathewson o Numerous other bugfixes. 54e88079a8SNick Mathewson 55709c21c4SNick Mathewson 56a98a512bSNick MathewsonChanges in 2.0.2-alpha: 57a98a512bSNick Mathewson o Add a new flag to bufferevents to make all callbacks automatically deferred. 58b7907a7bSNick Mathewson o Make evdns functionality locked, and automatically defer dns callbacks. 59d3fbe7faSNick Mathewson o Fix a possible free(NULL) when freeing an event_base with no signals. 6001bda2b8SNick Mathewson o Add a flag to disable checking environment varibles when making an event_base 61253151c5SNick Mathewson o Disallow setting less than 1 priority. 628b7a3b36SNick Mathewson o Fix a bug when removing a timeout from the heap. [Patch from Marko Kreen] 63df0617f2SNick Mathewson o Use signal.h, not sys/signal.h. [Patch from mmadia] 649516df0eSNick Mathewson o Try harder to build with certain older c99 compilers. 65faa756c7SNick Mathewson o Make sure that an event_config's flags field is always initialized to 0. [Bug report from Victor Goya] 66a5897917SNick Mathewson o Avoid data corruption when reading data entirely into the second-to-last chain of an evbuffer. [Bug report from Victor Goya] 675c4c13d8SNiels Provos o Make sendfile work on FreeBSD 68b228ff91SNiels Provos o Do not use vararg macros for accessing evrpc structures; this is not backwards compatible, but we did not promise any backwards compatibility for the rpc code. 692ebfd3baSNick Mathewson o Actually define the event_config_set_flag() function. 70a109d95cSNick Mathewson o Try harder to compile with Visual C++. 71d5ca0763SNick Mathewson o Move event_set() and its allies to event2/event_compat.h where they belong. 720e63e72aSNick Mathewson o Remove the event_gotsig code, which has long been deprecated and unused. 730fd70978SNick Mathewson o Add an event_get_base() function to return the base assigned to an event. 74659d54d5SNick Mathewson o New function to automate connecting on a socket-based bufferevent. 75659d54d5SNick Mathewson o New functions to automate listening for incoming TCP connections. 76f11dff2cSNick Mathewson o Do case-insensitive checks with a locale-independent comparison function. 7783f46e51SNick Mathewson o Rename the evbuffercb and everrorcb callbacks to bufferevent_data_cb and bufferevent_event_cb respectively. The old names are available in bufferevent_compat.h. 7883f46e51SNick Mathewson o Rename the EVBUFFER_* codes used by bufferevent event callbacks to BEV_EVENT_*, to avoid namespace collision with evbuffer flags. The old names are available in bufferevent_compat.h. 7983f46e51SNick Mathewson o Move the EVBUFFER_INPUT and EVBUFFER_OUTPUT macros to bufferevent_compat.h 8031d89f27SNick Mathewson o Add a bufferevent_getfd() function to mirror bufferevent_setfd() 8131d89f27SNick Mathewson o Make bufferevent_setfd() return an error code if the operation is not successful. 82b4886ec8SNick Mathewson o Shave 22 bytes off struct event on 32-bit platforms by shrinking and re-ordering fields. The savings on 64-bit platforms is likely higher. 83b4886ec8SNick Mathewson o Cap the maximum number of priorities at 256. 84bba69e03SNick Mathewson o Change the semantics of evbuffer_cb_set_flags() to be set-flag only; add a new evbuffer_cb_clear_flags() to remove set flags. 85dc4c7b95SNick Mathewson o Change the interface of evbuffer_add_reference so that the cleanup callback gets more information 8666df9dafSNick Mathewson o Revise the new evbuffer_reserve_space/evbuffer_commit_space() interfaces so that you can use them without causing extraneous copies or leaving gaps in the evbuffer. 8766df9dafSNick Mathewson o Add a new evbuffer_peek() interface to inspect data in an evbuffer without removing it. 8859484297SNick Mathewson o Fix a deadlock when suspending reads in a bufferevent due to a full buffer. (Spotted by Joachim Bauch.) 8959cd4936SNick Mathewson o Fix a memory error when freeing a thread-enabled event base with registered events. (Spotted by Joachim Bauch.) 908c66eb2eSNick Mathewson o Try to contain degree of failure when running on a win32 version so heavily firewalled that we can't fake a socketpair. 91cdaca02cSNick Mathewson o Activate fd events in a pseudorandom order with O(N) backends, so that we don't systematically favor low fds (select) or earlier-added fds (poll, win32). 92342ad355SNick Mathewson o Replace some read()/write() instances with send()/recv() to work properly on win32. 93342ad355SNick Mathewson o Set truncated flag correctly in evdns server replies. 9437d3e16cSNiels Provos o Raise RpcGenError in event_rpcgen.py; from jmanison and Zack Weinberg 95bbcc54efSNiels Provos o Fix preamble of rpcgen-generated files to rely on event2 includes; based on work by jmansion; patch from Zack Weinberg. 96fbb181d1SNiels Provos o Allow specifying the output filename for rpcgen; based on work by jmansion; patch from Zack Weinberg. 976469598eSNiels Provos o Allow C identifiers as struct names; allow multiple comments in .rpc files; from Zack Weinberg 98a501d683SNick Mathewson o Mitigate a race condition when using socket bufferevents in multiple threads. 99d3a8ccb8SNick Mathewson o Use AC_SEARCH_LIBS, not AC_CHECK_LIB to avoid needless library use. 1006b4b77a2SNick Mathewson o Do not allow event_del(ev) to return while that event's callback is executing in another thread. This fixes a nasty race condition. 1019fcd84d1SNick Mathewson o event_get_supported_methods() now lists methods that have been disabled with the EVENT_NO* environment options. 102e8400a43SNick Mathewson o Rename encode_int[64] to evtag_encode_int[64] to avoid polluting the global namespace. The old method names are still available as macros in event2/tag_compat.h. 103a98a512bSNick Mathewson 104a98a512bSNick MathewsonChanges in 2.0.1-alpha: 105d50afbb3SNiels Provos o free minheap on event_base_free(); from Christopher Layne 10656934d5dSNiels Provos o debug cleanups in signal.c; from Christopher Layne 107f586f428SNiels Provos o provide event_base_new() that does not set the current_base global 108af6f331aSNiels Provos o bufferevent_write now uses a const source argument; report from Charles Kerr 10970248ca8SNick Mathewson o improve documentation on event_base_loopexit; patch from Scott Lamb 1101c23e219SNick Mathewson o New function, event_{base_}loopbreak. Like event_loopexit, it makes an event loop stop executing and return. Unlike event_loopexit, it keeps subsequent pending events from getting executed. Patch from Scott Lamb 111d1ad9403SNick Mathewson o Check return value of event_add in signal.c 11288897852SNiels Provos o provide event_reinit() to reintialize an event_base after fork 1137eb250e9SNick Mathewson o New function event_set_mem_functinons. It allows the user to give libevent replacement functions to use for memory management in place of malloc(), free(), etc. This should be generally useful for memory instrumentation, specialized allocators, and so on. 1142823cb05SNick Mathewson o The kqueue implementation now catches signals that are raised after event_add() is called but before the event_loop() call. This makes it match the other implementations. 1152823cb05SNick Mathewson o The kqueue implementation now restores original signal handlers correctly when its signal events are removed. 116fa95fe46SNick Mathewson o Check return value of event_add in signal.c 117cbf9cfdfSNick Mathewson o Add a more powerful evbuffer_readln as a replacement for evbuffer_readline. The new function handles more newline styles, and is more useful with buffers that may contain a nul characters. 1181120f04fSNick Mathewson o Do not mangle socket handles on 64-bit windows. 119ce4ee418SNick Mathewson o The configure script now takes an --enable-gcc-warnigns option that turns on many optional gcc warnings. (Nick has been building with these for a while, but they might be useful to other developers.) 1205f3e3159SNiels Provos o move EV_PERSIST handling out of the event backends 121f175befaSNiels Provos o small improvements to evhttp documentation 12274b3db50SNiels Provos o always generate Date and Content-Length headers for HTTP/1.1 replies 1235482192bSNick Mathewson o set the correct event base for HTTP close events 1243206bbcaSNick Mathewson o When building with GCC, use the "format" attribute to verify type correctness of calls to printf-like functions. 1252e2104f4SNick Mathewson o Rewrite win32.c backend to be O(n lg n) rather than O(n^2). 126e8b916c3SNiels Provos o Removed obsoleted recalc code 127ba487199SNiels Provos o support for 32-bit tag numbers in rpc structures; this is wire compatible, but changes the API slightly. 1283b345f3eSNiels Provos o pull setters/getters out of RPC structures into a base class to which we just need to store a pointer; this reduces the memory footprint of these structures. 129ffd606cdSNiels Provos o prefix {encode,decode}_tag functions with evtag to avoid collisions 13085053473SNiels Provos o fix a bug with event_rpcgen for integers 1317ab26a2cSNick Mathewson o Correctly handle DNS replies with no answers set (Fixes bug 1846282) 132d4bdbca8SNiels Provos o add -Wstrict-aliasing to warnings and more cleanup 133fdafb66bSNiels Provos o removed linger from http server socket; reported by Ilya Martynov 13468725dc8SNiels Provos o event_rpcgen now allows creating integer arrays 1357e3a7af7SNiels Provos o support string arrays in event_rpcgen 136819d4a33SNiels Provos o change evrpc hooking to allow pausing of RPCs; this will make it possible for the hook to do some meaning ful work; this is not backwards compatible. 137955c6abfSNiels Provos o allow an http request callback to take ownership of a request structure 1385a5609c7SNiels Provos o allow association of meta data with RPC requests for hook processing 1392460aa59SNiels Provos o associate more context for hooks to query such as the connection object 1408c66d4e2SNiels Provos o remove pending timeouts on event_base_free() 1416baff522SNiels Provos o also check EAGAIN for Solaris' event ports; from W.C.A. Wijngaards 142f38aec8bSNiels Provos o devpoll and evport need reinit; tested by W.C.A Wijngaards 1438ab61891SNiels Provos o event_base_get_method; from Springande Ulv 144677a9586SNick Mathewson o Send CRLF after each chunk in HTTP output, for compliance with RFC2626. Patch from "propanbutan". Fixes bug 1894184. 145807ab182SNick Mathewson o Add a int64_t parsing function, with unit tests, so we can apply Scott Lamb's fix to allow large HTTP values. 146d47907a7SNick Mathewson o Use a 64-bit field to hold HTTP content-lengths. Patch from Scott Lamb. 14723ef0d09SNiels Provos o Allow regression code to build even without Python installed 148506d4dbcSNiels Provos o remove NDEBUG ifdefs from evdns.c 14911230f7eSNick Mathewson o detect integer types properly on platforms without stdint.h 15087bef9e9SNiels Provos o udpate documentation of event_loop and event_base_loop; from Tani Hosokawa. 15167bf29adSNiels Provos o simplify evbuffer by removing orig_buffer 152bb914ed9SNiels Provos o do not insert event into list when evsel->add fails 153b14cd655SNiels Provos o add support for PUT/DELETE requests; from Josh Rotenberg 1540b114da2SNiels Provos o introduce evhttp_accept_socket() to accept from an already created socket 155960be588SNiels Provos o include Content-Length in reply for HTTP/1.0 requests with keep-alive 1567470ce52SNiels Provos o increase listen queue for http sockets to 128; if that is not enough the evhttp_accpet_socket() api can be used with a prepared socket. 157e7ad5493SNick Mathewson o Patch from Tani Hosokawa: make some functions in http.c threadsafe. 158eb9b9580SNiels Provos o test support for PUT/DELETE requests; from Josh Rotenberg 1595c70ea4cSNiels Provos o rewrite of the evbuffer code to reduce memory copies 16069717730SNick Mathewson o Some older Solaris versions demand that _REENTRANT be defined to get strtok_r(); do so. 16119dad166SNiels Provos o Do not free the kqop file descriptor in other processes, also allow it to be 0; from Andrei Nigmatulin 162558de9b3SNiels Provos o Provide OpenSSL style support for multiple threads accessing the same event_base 163d5c15b2eSNiels Provos o make event_rpcgen.py generate code include event-config.h; reported by Sam Banks. 164c182bacaSNiels Provos o switch thread support so that locks get allocated as they are needed. 165ca42671aSNiels Provos o make event methods static so that they are not exported; from Andrei Nigmatulin 1668920ac4dSNiels Provos o make RPC replies use application/octet-stream as mime type 1673ef1f504SNiels Provos o do not delete uninitialized timeout event in evdns 1680c843507SNick Mathewson o Correct the documentation on buffer printf functions. 16944ceb945SNick Mathewson o Don't warn on unimplemented epoll_create(): this isn't a problem, just a reason to fall back to poll or select. 170f9f4d4feSNick Mathewson o Correctly handle timeouts larger than 35 minutes on Linux with epoll.c. This is probably a kernel defect, but we'll have to support old kernels anyway even if it gets fixed. 171fc41ffdeSNick Mathewson o Make name_from_addr() threadsafe in http.c 172e688a88aSNick Mathewson o Add new thread-safe interfaces to evdns functions. 1738d2a6160SNick Mathewson o Make all event_tagging interfaces threadsafe. 17449868b61SNick Mathewson o Rename internal memory management functions. 17594fb4d0aSNick Mathewson o New functions (event_assign, event_new, event_free) for use by apps that want to be safely threadsafe, or want to remain ignorant of the contents of struct event. 17689f63b20SNiels Provos o introduce bufferevent_read_buffer; allows reading without memory copy. 1773278012fSNiels Provos o expose bufferevent_setwatermark via header files and fix high watermark on read 1783a17aeedSNiels Provos o fix a bug in buffrevent read water marks and add a test for them 179f6c40173SNiels Provos o fix a bug in which bufferevent_write_buffer would not schedule a write event 180dd183f7cSNiels Provos o provide bufferevent_input and bufferevent_output without requiring knowledge of the structure 1819485ff9aSNiels Provos o introduce bufferevent_setcb and bufferevent_setfd to allow better manipulation of bufferevents 182e44ef375SNiels Provos o convert evhttp_connection to use bufferevents. 1839626a421SNick Mathewson o use libevent's internal timercmp on all platforms, to avoid bugs on old platforms where timercmp(a,b,<=) is buggy. 18498dc98c5SNick Mathewson o Remove the never-exported, never-used evhttp_hostportfile function. 185682adc44SNiels Provos o Support input/output filters for bufferevents; somewhat similar to libio's model. This will allow us to implement SSL, compression, etc, transparently to users of bufferevents such as the http layer. 18685c4904bSNiels Provos o allow connections to be removed from an rpc pool 1875fbc7f0aSNick Mathewson o add new evtimer_assign, signal_assign, evtimer_new, and signal_new functions to manipulate timer and signal events, analagous to the now-recommended event_assign and event_new 1885fbc7f0aSNick Mathewson o switch internal uses of event_set over to use event_assign. 189becc89b7SNiels Provos o introduce evbuffer_contiguous_space() api that tells a user how much data is available in the first buffer chain 190f04497e4SNiels Provos o introduce evbuffer_reserve_space() and evbuffer_commit_space() to make processing in filters more efficient. 19145e6fb0dSNiels Provos o reduce system calls for getting current time by caching it. 1928c750eafSNiels Provos o separate signal events from io events; making the code less complex. 1931d30750bSNiels Provos o support for periodic timeouts 194f2a81fbcSNiels Provos o support for virtual HTTP hosts. 195d0c3644eSNick Mathewson o turn event_initialized() into a function, and add function equivalents to EVENT_SIGNAL and EVENT_FD so that people don't need to include event_struct.h 19668fecb7aSNick Mathewson o Build test directory correctly with CPPFLAGS set. 1973b2022efSNiels Provos o Provide an API for retrieving the supported event mechanisms. 1983f56e364SNiels Provos o event_base_new_with_config() and corresponding config APIs. 199de1c4392SNiels Provos o migrate the evhttp header to event2/ but accessors are still missing. 20085ed7133SNiels Provos o deprecate timeout_* event functions by moving them to event_compat.h 201a26442c5SNick Mathewson o Move windows gettimeofday replacement into a new evutil_gettimeofday(). 20264ce7990SNick Mathewson o Make configure script work on IRIX. 2031080852eSNiels Provos o provide a method for canceling ongoing http requests. 204c6da86ffSNick Mathewson o Make vsnprintf() returns consistent on win32. 205ec3956baSNiels Provos o Fix connection keep-alive behavior for HTTP/1.0 206134344b7SNiels Provos o Fix use of freed memory in event_reinit; pointed out by Peter Postma 2078b66f1bdSNiels Provos o constify struct timeval * where possible 2082deb3ce0SNiels Provos o make event_get_supported_methods obey environment variables 20939400e68SNick Mathewson o support for edge-triggered events on epoll and kqueue backends: patch from Valery Kholodkov 21005965921SNick Mathewson o support for selecting event backends by their features, and for querying the features of a backend. 21105965921SNick Mathewson o change failing behavior of event_base_new_with_config: if a config is provided and no backend is selected, return NULL instead of aborting. 212344c2b56SNiels Provos o deliver partial data to request callbacks when chunked callback is set even if there is no chunking on the http level; allows cancelation of requests from within the chunked callback; from Scott Lamb. 213a6ce520cSNiels Provos o allow min_heap_erase to be called on removed members; from liusifan. 2142baaac7fSNick Mathewson o Rename INPUT and OUTPUT to EVRPC_INPUT and EVRPC_OUTPUT. Retain INPUT/OUTPUT aliases on on-win32 platforms for backwards compatibility. 2154c56ba1cSNiels Provos o Do not use SO_REUSEADDR when connecting 21699a1063eSNiels Provos o Support 64-bit integers in RPC structs 2179998c0cbSNiels Provos o Correct handling of trailing headers in chunked replies; from Scott Lamb. 218cb7c3bd6SNiels Provos o Support multi-line HTTP headers; based on a patch from Moshe Litvin 219707f6784SNiels Provos o Reject negative Content-Length headers; anonymous bug report 220409236a7SNiels Provos o Detect CLOCK_MONOTONIC at runtime for evdns; anonymous bug report 221df97fca9SNiels Provos o Various HTTP correctness fixes from Scott Lamb 2225512be01SNiels Provos o Fix a bug where deleting signals with the kqueue backend would cause subsequent adds to fail 223c4af6211SNiels Provos o Support multiple events listening on the same signal; make signals regular events that go on the same event queue; problem report by Alexander Drozdov. 224e67a5ea9SNiels Provos o Fix a problem with epoll() and reinit; problem report by Alexander Drozdov. 2251aa6826fSNiels Provos o Fix off-by-one errors in devpoll; from Ian Bell 226cca2f8faSNiels Provos o Make event_add not change any state if it fails; reported by Ian Bell. 227c968eb3eSNiels Provos o Fix a bug where headers arriving in multiple packets were not parsed; fix from Jiang Hong; test by me. 228a710d817SNiels Provos o Match the query in DNS replies to the query in the request; from Vsevolod Stakhov. 229de069b99SNick Mathewson o Add new utility functions to correctly observe and log winsock errors. 230b3d6a569SNiels Provos o Do not remove Accept-Encoding header 23131cfe526SNiels Provos o Clear the timer cache on entering the event loop; reported by Victor Chang 23250202d75SNiels Provos o Only bind the socket on connect when a local address has been provided; reported by Alejo Sanchez 2335792d42fSNiels Provos o Allow setting of local port for evhttp connections to support millions of connections from a single system; from Richard Jones. 2344fe25cefSNiels Provos o Clear the timer cache when leaving the event loop; reported by Robin Haberkorn 2354fa4a562SNiels Provos o Fix a typo in setting the global event base; reported by lance. 236dd731685SNick Mathewson o Set the 0x20 bit on outgoing alphabetic characters in DNS requests randomly, and insist on a match in replies. This helps resist DNS poisoning attacks. 237f700566cSNiels Provos o Make the http connection close detection work properly with bufferevents and fix a potential memory leak associated with it. 23802b2b4d1SNiels Provos o Restructure the event backends so that they do not need to keep track of events themselves, as a side effect multiple events can use the same fd or signal. 2390d9d5cfeSNick Mathewson o Add generic implementations for parsing and emiting IPv6 addresses on platforms that do not have inet_ntop and/or inet_pton. 240135591aeSNick Mathewson o Allow DNS servers that have IPv6 addresses. 24199db0e7fSNick Mathewson o Add an evbuffer_write_atmost() function to write a limited number of bytes to an fd. 242a5901991SNick Mathewson o Refactor internal notify-main-thread logic to prefer eventfd to pipe, then pipe to socketpair, and only use socketpairs as a last resort. 243f6eb1f81SNick Mathewson o Try harder to pack all evbuffer reads into as few chains as possible, using readv/WSARecv as appropriate. 244309fc7c4SNick Mathewson o New evthread_use_windows_threads() and evthread_use_pthreads() functions to set up the evthread callbacks with reasonable defaults. 24556ea4687SNiels Provos o Change the semantics of timeouts in conjunction with EV_PERSIST; timeouts in that case will now repeat until deleted. 246fdf69493SNiels Provos o sendfile, mmap and memory reference support for evbuffers. 247c7b2f8fdSNick Mathewson o New evutil_make_listen_socket_reuseable() to abstract SO_REUSEADDR. 24877c80b8dSNick Mathewson o New bind-to option to allow DNS clients to bind to an arbitrary port for outgoing requests. 249747331d1SNick Mathewson o evbuffers can now be "frozen" to prevent operations at one or both ends. 25072b6ffe8SNick Mathewson o Bufferevents now notice external attempts to add data to an inbuf or remove it from an outbuf, and stop them. 251ce146eb1SNiels Provos o Fix parsing of queries where the encoded queries contained \r, \n or + 252e3d82497SNick Mathewson o Do not allow internal events to starve lower-priority events. 2531aa6826fSNiels Provos 254d50afbb3SNiels ProvosChanges in 1.4.0: 25511a0a9e4SNiels Provos o allow \r or \n individually to separate HTTP headers instead of the standard "\r\n"; from Charles Kerr. 256ff9e1af6SNiels Provos o demote most http warnings to debug messages 2579c3ac4e4SNick Mathewson o Fix Solaris compilation; from Magne Mahre 2588d5ef326SNick Mathewson o Add a "Date" header to HTTP responses, as required by HTTP 1.1. 25998f9616bSNiels Provos o Support specifying the local address of an evhttp_connection using set_local_address 260e2f56411SNiels Provos o Fix a memory leak in which failed HTTP connections whould not free the request object 261babd622fSNiels Provos o Make adding of array members in event_rpcgen more efficient, but doubling memory allocation 2627c66bf33SNiels Provos o Fix a memory leak in the DNS server 263c396c767SNick Mathewson o Fix compilation when DNS_USE_OPENSSL_FOR_ID is enabled 2648b392549SNick Mathewson o Fix buffer size and string generation in evdns_resolve_reverse_ipv6(). 26582153e6eSNick Mathewson o Respond to nonstandard DNS queries with "NOTIMPL" rather than by ignoring them. 26682153e6eSNick Mathewson o In DNS responses, the CD flag should be preserved, not the TC flag. 267b835ee08SNiels Provos o Fix http.c to compile properly with USE_DEBUG; from Christopher Layne 268bfd27f58SNick Mathewson o Handle NULL timeouts correctly on Solaris; from Trond Norbye 269bfd27f58SNick Mathewson o Recalculate pending events properly when reallocating event array on Solaris; from Trond Norbye 2707135ffb6SNick Mathewson o Add Doxygen documentation to header files; from Mark Heily 271626cc5f9SNick Mathewson o Add a evdns_set_transaction_id_fn() function to override the default 272626cc5f9SNick Mathewson transaction ID generation code. 27325007183SNick Mathewson o Add an evutil module (with header evutil.h) to implement our standard cross-platform hacks, on the theory that somebody else would like to use them too. 2748b256b8eSNick Mathewson o Fix signals implementation on windows. 2758b256b8eSNick Mathewson o Fix http module on windows to close sockets properly. 2765a0d671fSNick Mathewson o Make autogen.sh script run correctly on systems where /bin/sh isn't bash. (Patch from Trond Norbye, rewritten by Hagne Mahre and then Hannah Schroeter.) 277f4c84e86SNick Mathewson o Skip calling gettime() in timeout_process if we are not in fact waiting for any events. (Patch from Trond Norbye) 2781e1f77c5SNick Mathewson o Make test subdirectory compile under mingw. 279db43c1e1SNick Mathewson o Fix win32 buffer.c behavior so that it is correct for sockets (which do not like ReadFile and WriteFile). 2804ed48673SNick Mathewson o Make the test.sh script run unit tests for the evpoll method. 2814ed48673SNick Mathewson o Make the entire evdns.h header enclosed in "extern C" as appropriate. 282bc7b7c24SNick Mathewson o Fix implementation of strsep on platforms that lack it 28349ede3beSNick Mathewson o Fix implementation of getaddrinfo on platforms that lack it; mainly, this will make Windows http.c work better. Original patch by Lubomir Marinov. 28418ac9248SNiels Provos o Fix evport implementation: port_disassociate called on unassociated events resulting in bogus errors; more efficient memory management; from Trond Norbye and Prakash Sangappa 28565236aa8SNiels Provos o support for hooks on rpc input and output; can be used to implement rpc independent processing such as compression or authentication. 28630ae40ccSNiels Provos o use a min heap instead of a red-black tree for timeouts; as a result finding the min is a O(1) operation now; from Maxim Yegorushkin 2871d3a008aSNiels Provos o associate an event base with an rpc pool 28888173102SNiels Provos o added two additional libraries: libevent_core and libevent_extra in addition to the regular libevent. libevent_core contains only the event core whereas libevent_extra contains dns, http and rpc support 2891bcb112bSNick Mathewson o Begin using libtool's library versioning support correctly. If we don't mess up, this will more or less guarantee binaries linked against old versions of libevent continue working when we make changes to libevent that do not break backward compatibility. 290d7d91461SNick Mathewson o Fix evhttp.h compilation when TAILQ_ENTRY is not defined. 291bbed0954SNiels Provos o Small code cleanups in epoll_dispatch(). 29281802bf9SNick Mathewson o Increase the maximum number of addresses read from a packet in evdns to 32. 293e9564eceSNick Mathewson o Remove support for the rtsig method: it hasn't compiled for a while, and nobody seems to miss it very much. Let us know if there's a good reason to put it back in. 2947c507668SNick Mathewson o Rename the "class" field in evdns_server_request to dns_question_class, so that it won't break compilation under C++. Use a macro so that old code won't break. Mark the macro as deprecated. 295bab0e6d4SNick Mathewson o Fix DNS unit tests so that having a DNS server with broken IPv6 support is no longer cause for aborting the unit tests. 296206d4336SNick Mathewson o Make event_base_free() succeed even if there are pending non-internal events on a base. This may still leak memory and fds, but at least it no longer crashes. 297f74e7258SNick Mathewson o Post-process the config.h file into a new, installed event-config.h file that we can install, and whose macros will be safe to include in header files. 298f74e7258SNick Mathewson o Remove the long-deprecated acconfig.h file. 299f74e7258SNick Mathewson o Do not require #include <sys/types.h> before #include <event.h>. 300f74e7258SNick Mathewson o Add new evutil_timer* functions to wrap (or replace) the regular timeval manipulation functions. 30192cd548fSNick Mathewson o Fix many build issues when using the Microsoft C compiler. 302cabcd62fSNick Mathewson o Remove a bash-ism in autogen.sh 303321dfd55SNick Mathewson o When calling event_del on a signal, restore the signal handler's previous value rather than setting it to SIG_DFL. Patch from Christopher Layne. 3044a1a2e0dSNiels Provos o Make the logic for active events work better with internal events; patch from Christopher Layne. 3053742868aSNiels Provos o We do not need to specially remove a timeout before calling event_del; patch from Christopher Layne. 306