Revision history for Perl extension HTTP::Proxy 0.19 Fri Apr 28 19:55:41 CEST 2006 [ENHANCEMENTS] - HTTP::Proxy::HeaderFilter::simple now lets one define an end() method as well [FIXES] - HTTP::Proxy::(Body|Header)Filter::simple now provide a default filter() that does nothing if their constructor is not given one (thanks to Merijn Brand) - close RT ticket #14548 by correcting the 'filename' check in HTTP::Proxy::BodyFilter::save (Max Maischein) - ERROR messages are always logged (Mark Tilford) [TESTS] - more tests for log() and logmask() in t/11log.t 0.18 Sun Mar 19 23:49:38 CET 2006 [ENHANCEMENTS] - the new known_methods() method can return all method names know to HTTP::Proxy (can be helpful with the method parameter of push_filter()) [FIXES] - close RT ticket #14898 by using a per-parent lockfile for HTTP::Proxy::Engine::ScoreBoard (Chris Dolan) - close RT ticket #18243 by adding missing DeltaV methods (Stephen Steneker) [EXAMPLES] - eg/perlmonks.pl - redirect perlmonks.com to perlmonks.org 0.17 Wed Sep 28 23:25:17 CEST 2005 [ENHANCEMENTS] - Thanks to Randal Schwartz, a new HTTP::Proxy::Engine::ScoreBoard engine is available. I've benchmarked a twofold speed increase. This engine is still beta, you must enable it by hand. 0.16 Thu Sep 1 19:13:55 CEST 2005 [ENHANCEMENTS] - the new HTTP::Proxy::Engine class and its subclasses now handle the life and death of child processes - the Content-Length header is now removed only if body filters will be applied on the response body - HTTP::Proxy now supports some Apache-like attributes (start_servers, max_clients, max_requests_per_child, min_spare_servers, max_spare_servers, keep_alive, max_keep_alive_requests, keep_alive_timeout) - added support for ALL WebDAV/DeltaV methods - the query argument to push_filter(), added in 0.14, should now work (thanks to Simon Cozens for spotting the problem) - the proxy now has a stash, which is a hash where filters can store data (possibly to share it). (Requested by Mark Fowler) Warning: since the proxy forks for each TCP connection, the data is only shared between filters in the same child process. [DEPRECATION] - the maxchild, maxconn and maxserve accessors are now deprecated. They will disappear in the future: + maxchild has no replacement (should be handled by the engine) + maxconn becomes max_connections + maxserve becomes max_keep_alive_requests - Information regarding the way the engine should behave must passed in the constructor or directly to the engine [NEW METHODS] - $proxy->engine() return the HTTP::Proxy::Engine instance - $proxy->new_connection() increase the TCP connections counter (should only be used by HTTP::Proxy::Engine object) [FIXES] - Makefile.PL was not playing nice with Build.PL in the previous distributions. This has been fixed. Sorry for the inconvenience - no more annoying "getsockname() on closed socket GEN0" warnings (they appeared in 0.14) [Win32 SUPPORT] - Win32 is now supported! badly supported, but supported... - until someone writes a decent engine for Win32, the default Win32 engine will be HTTP::Proxy::Engine::NoFork, which can only handle a single TCP connection at a time [EXAMPLES] - eg/yahoogroups.pl - removes ad interruptions from Yahoo! Groups - eg/https.pl - peek/poke at encrypted web pages - eg/logger.pl - improved the logger script 0.15 Tue Apr 5 21:17:40 CEST 2005 [ENHANCEMENTS] - added support for WebDAV methods (requested by Christian Laursen) - The filter selection is based on the original request and response, as it should - improved kwalitee [DEPRECATION] - the start() method is no longer supported in HTTP::Proxy::BodyFilter subclasses. Use begin() instead. [EXAMPLES] - eg/pdf.pl - save \.pdf files and send a HTML confirmation instead (idea by Emmanuel Di Prétoro) 0.14 Tue Mar 29 11:40:51 CEST 2005 [ANNOUNCE] - It's been more than a year since last release, which is bad. I now plan to release new versions more often, maybe about once a month, or when there are big changes. [DEPRECATION] - the start() method of HTTP::Proxy::Bodyfilter subclasses is renamed begin(), since it now has an end() counterpart. (On a related note, I improve my English. Be sure to check out http://www.landgren.net/perl/lt-2004.html for details) - start() in filters is therefore declared deprecated, an error message is logged. The start() method will not be called any more as from 0.15. - the FILTER constant is now named FILTERS. FILTER will disappear in 0.15 as well. [ENHANCEMENTS] - subclasses of HTTP::Proxy::BodyFilter can now have a finalisation method, named end() - the start^Wbegin() method of HTTP::Proxy::BodyFilter subclasses now receive the message as an argument - new built-in filter: HTTP::Proxy::BodyFilter::save that can save the message body to a file while browsing - new built-in filter: HTTP::Proxy::BodyFilter::complete that stores the message body in memory and passes it on to the next filters only when it's complete - logs have cleaner prefixes and the pid is always shown - should work under 5.005_03 (Thanks to Mathieu Arnold) - transparent proxying support (mostly to please Martin Zdila and Paul Makepeace) - push_filter() should now accept the query parameter [FIXES] - the FILTER constant is now named FILTERS [BUGS] - the proxy does not work under Win32, except if you force maxchild to 0 (no forking at all). - t/20dummy.t (and a few otrhers) hanged under Win32 + Ken Hirsch proposed a patch for HTTP::Daemon (and a workaround for HTTP::Proxy's daemon object) + Bruno De Fraine tracked down the problem to the fork() emulation by Windows threads under Win32 that lead to a deadlock. => both explanations cover the same problem, which I haven't been able to correct yet - all the tests that fork a proxy and a server are therefore skipped under Win32. This is ugly, and will change in the future. [EXAMPLES] - eg/rfc.pl - save rfc\d+\.txt files as we browse them - eg/js.pl - save \.js files as we browse them - eg/dragon.pl - enhance the Dragon Go Server web site - eg/fudd.pl - make the web tawk wike Ewmer J. Fudd - eg/switch.pl - switch proxies as you browse - Changed all the examples so that they can take HTTP::Proxy::new() parameters on the command-line (so, call them with logmask 3, for example) [DOCUMENTATION] - documentation for the filter initialisation methods - removed all references to the so-called "store-and-forward" mechanism (see HTTP::Proxy::BodyFilter::complete) 0.13 Wed Mar 3 17:36:31 CET 2004 [ENHANCEMENTS] - CONNECT support (but only transparently...) - the client_headers() method (similar to hop_headers()) give the filters access to the proxy's LWP::UA Client-* headers - filters are applied on all supported methods by default [FIXES] - removed everything regarding control() and control_regex(), which were not used and confusing [TESTS] - tests for CONNECT support - tests for SSL support (not working yet) [EXAMPLES] - eg/adblock.pl - a very simple adblocker - eg/trim.pl - trims whitespace from HTML pages - eg/javascript.pl - add any text right after [DOCUMENTATION] - separate COPYRIGHT and LICENSE sections in all man pages 0.12 Thu Jan 22 23:54:03 CET 2004 [ENHANCEMENTS] - send the error message to the client when the Proxy agent dies (usually because of a filter error) - the proxy now sends a X-Forwarded-For header by default (and the proxy method x_forwarded_for can toggle this) - the proxy method client_socket() gives access to the socket connected to the current client (the example in Changes for 0.10 was wrong: one can get the IP address of the connected agent from inside a filter with $self->proxy->client_socket->peerhost) [FIXES] - do not block simultaneous connections when not forking - clean up the filter chain after the body-request filters - ensure the filter stack is reinitialised between requests [TESTS] - tests for X-Forwarded-For - test the proxy against http://diveintomark.org/tests/client/http/ [EXAMPLES] - eg/post.pl - outputs the URI and parameters of all POST requests - eg/logger.pl - outputs details of GET and POST requests 0.11 Fri Jan 2 17:02:08 CET 2004 [ENHANCEMENTS] - setting maxchild to 0 prevents forking (Jim Cromie) - filters can now match on the query string - hop-by-hop headers and Max-Forwards headers are correctly supported - new mutators added to HTTP::Proxy: via, hop_headers, request, response - filters can now answer in place of the server, which allows for authorisation filters, cache (?) filters, etc. - new examples scripts: proxy-auth.pl [FIXES] - push_filter() now correctly supports several match criteria [TESTS] - all the Via: header tests are now in t/50via.t - t/50standard.t now checks headers for several request types - new tests: + t/51simple2.t - check response header filters with an actual proxy + t/61simple2.t - check response body filters with an actual proxy [INTERNALS] - new method _send_response_headers 0.10 Wed Nov 19 01:36:59 CET 2003 *** MAJOR INTERFACE CHANGES *** - new base classes HTTP::Proxy::HeaderFilter and HTTP::Proxy::BodyFilter - some useful built-in filter classes: HTTP::Proxy::BodyFilter::htmlparser HTTP::Proxy::BodyFilter::htmltext HTTP::Proxy::BodyFilter::lines HTTP::Proxy::BodyFilter::simple HTTP::Proxy::BodyFilter::tags HTTP::Proxy::HeaderFilter::simple HTTP::Proxy::HeaderFilter::standard - tests for the internal class HTTP::Proxy::FilterStack - tests for the built-in filters - the examples are up-to-date with the new interface - new/enhanced accessors: + the proxy host() attribute becomes actually useful: by default, the proxy is only usable by local user-agents (the socket is bound to localhost) + the filters proxy() accessor gives access to the proxy itself. For example, one can get the IP address of the agent connected to the proxy from inside a filter ($self->proxy->daemon->peerhost) - many documentation changes This version is NOT compatible with the previous ones regarding the way filters work. *** MAJOR INTERFACE CHANGES *** 0.09 Fri Aug 15 21:12:17 CEST 2003 - maxserve is now correctly handled - corrected a bug in the t/20keepalive.t test file that made the tests fail on some machines 0.08 Thu Mar 13 01:41:42 CET 2003 - cleaned up support for filters - added support for "buffering" filters and a new HTTP::Proxy::FilterStack class - added an anonymiser script (eg/anonymiser.pl) - the tests won't break if a local proxy is configured - the interfaces are very likely to change soon 0.07 Tue Feb 18 22:30:43 CET 2003 - the proxy now supports persistent connexions (Yay!) - and tests to check for it - and a new timeout accessor 0.06 Mon Feb 17 00:21:37 CET 2003 - better forking system and better reaping of zombies (thanks to David Landgren and Stéphane Payrard) Still won't work under Windows, though :-( - replaced verbose() by logmask(), so as to fine-tune the logging system - put some of the test functions in a test module (t::Utils) 0.05 Tue Feb 4 00:47:23 CET 2003 - explicitly refuse CONNECT - better support for TRACE method - support the Via: Header (a MUST in RFC 2616) - filters, but this needs more work 0.04 Sat Nov 30 12:19:22 CET 2002 - accept connection from other hosts - better ftp support (no test yet) - basic gopher support (no test yet) - better HTTP error handling - use CRLF in HTTP headers 0.03 Fri Nov 29 11:17:36 CET 2002 - url() method gives a url to reach the proxy - new 'control' attribute defines the control URL - better subprocess management by preforking child processes (thanks to Eric Cholet) - a children handles only one request at a time, for better performance (this means we only do HTTP/1.0 for now) - correctly handle the Proxy-Connection and Connection headers 0.02 Thu Oct 24 23:45:08 CEST 2002 - the system now forks to handle several connections - but needs better test suites 0.01 Tue Oct 1 11:54:07 CEST 2002 - original version