1Revision history for Perl extension HTTP::Proxy
2
30.25 Sun Jul  3 00:28:10 CEST 2011
4        [ENHANCEMENTS]
5        - new Engine: HTTP::Proxy::Engine::Threaded, by Angelos Karageorgiou
6        [FIXES]
7        - Correctly call eod() when the response has no body
8          (closed RT ticket #48310)
9
100.24 Tue Jul 21 21:28:02 CEST 2009
11        [ENHANCEMENTS]
12        - When a short-circuit response was send, the next response
13          would not be filtered at all. This has been fixed.
14        [FIXES]
15        - yet another fix for t/23connect, proposed by Marek Rouchal
16          (closed RT ticket #38995) [test skipped for now]
17        - HTTP::Headers::Util's split_header_words() returns lower case
18          tokens/keys since October 6, 2008. Fix by Maurice Aubrey.
19          (closed RT tickets #43249, #43622)
20
210.23 Thu Sep  4 02:29:47 CEST 2008
22        [ENHANCEMENTS]
23        - HTTP::Proxy::BodyFilter::save had an issue with cygwin because
24          of an incorrect use of File::Spec's catdir(). This is fixed.
25        - CONNECT requests are now forwarded to the upstream proxy, if there
26          is one. Errors from the upstream proxy are relayed to the client.
27        [TESTS]
28        - t/23connect.t does not use sysread() anymore. This time the test
29          should pass about everywhere.
30
310.22 Thu May  1 00:18:38 CEST 2008
32        [TESTS]
33        - increased test coverage
34        - t/23connect.t doesn't need an Internet connection any more,
35          thus closing RT ticket #19653.
36        - t/67complete.t tests HTTP::Proxy::BodyFilter::complete
37        [DOCUMENTATION]
38        - closed RT ticket #33465 (Jimbo), by explaining in a little
39          more detail how HTTP::Proxy::BodyFilter::complete works.
40
410.21 Sun Apr 20 04:34:47 CEST 2008
42        [ENHANCEMENTS]
43        - HTTP::Proxy::Engine::Legacy and HTTP::Proxy::Engine::ScoreBoard
44          log the number of remaining child processes (in addition to
45          their pids), thanks to Amos Shapira.
46        [FIXES]
47        - HTTP::Proxy::BodyFilter::save had a bug that prevented the
48          'filename' parameter to be correctly used to compute the 
49          filename to save to, and that made the proxy die the second
50          time the filter was called.
51          This fix allowed to close RT tickets #14548 (Max Maischein),
52          #18644 (Mark Tilford) and #33018 (Roland Stigge and Gunnar Wolf).
53        - HTTP::Proxy::BodyFilter::save had many other bugs, which the
54          test suite allowed to spot and fix.
55        [TESTS]
56        - t/67save.t provides 96% coverage of HTTP::Proxy::BodyFilter::save,
57          and helped fix many bugs in it.
58        - fixed t/22http.t and t/22transparent.t not to break when the
59          DNS wrongly resolves an invalid address.
60        [DOCUMENTATION]
61        - closed RT ticket #25295 (Matsuno Tokuhiro) with a doc patch.
62
630.20 Fri Aug 18 10:25:11 CEST 2006
64        [ENHANCEMENTS]
65        - Added a will_modify() method to HTTP::Proxy::BodyFilter, that
66          lets the proxy know if a filter may modify the content length,
67          thus closing RT ticket #21051 (Chris Dolan)
68        - If no filter in the current stack will modify the content length,
69          then the header is not removed
70        [FIXES]
71        - closed RT tickets #3184 and #20251 (chunked encoding was enforced
72          while transfering data between a client and server using
73          different versions of HTTP, causing unwanted garbage to appear
74          in the data)
75        - removed useless "ERROR: Getting request failed:" messages
76          when there are simply "No more requests from this connection"
77        [INTERNALS]
78        - Removed the HTTP::Proxy::FilterStack class from inside HTTP::Proxy
79          and put it in its own module file
80        - renamed HTTP::Proxy::FilterStack::active() as will_modify() for
81          consistency reasons
82        [TESTS]
83        - updated t/22http.t and t/23connect.t following Ken Williams'
84          recommandations in RT ticket #19986
85        [DOCUMENTATION]
86        - patched a small inconsistency in HTTP::Proxy::BodyFilter's
87          documentation (and closed RT ticket #20303)
88        - fully documented HTTP::Proxy::FilterStack
89
900.19 Fri Apr 28 19:55:41 CEST 2006
91        [ENHANCEMENTS]
92        - HTTP::Proxy::HeaderFilter::simple now lets one define an
93          end() method as well
94        [FIXES]
95        - HTTP::Proxy::(Body|Header)Filter::simple now provide a default
96          filter() that does nothing if their constructor is not given one
97          (thanks to Merijn Brand)
98        - close RT ticket #14548 by correcting the 'filename' check
99          in HTTP::Proxy::BodyFilter::save (Max Maischein)
100        - ERROR messages are always logged (Mark Tilford)
101        [TESTS]
102        - more tests for log() and logmask() in t/11log.t
103
1040.18 Sun Mar 19 23:49:38 CET 2006
105        [ENHANCEMENTS]
106        - the new known_methods() method can return all method
107          names know to HTTP::Proxy (can be helpful with the
108          method parameter of push_filter())
109        [FIXES]
110        - close RT ticket #14898 by using a per-parent lockfile for
111          HTTP::Proxy::Engine::ScoreBoard (Chris Dolan)
112        - close RT ticket #18243 by adding missing DeltaV methods
113          (Stephen Steneker)
114        [EXAMPLES]
115        - eg/perlmonks.pl   - redirect perlmonks.com to perlmonks.org
116
1170.17 Wed Sep 28 23:25:17 CEST 2005
118        [ENHANCEMENTS]
119        - Thanks to Randal Schwartz, a new HTTP::Proxy::Engine::ScoreBoard
120          engine is available. I've benchmarked a twofold speed increase.
121          This engine is still beta, you must enable it by hand.
122
1230.16  Thu Sep  1 19:13:55 CEST 2005
124        [ENHANCEMENTS]
125        - the new HTTP::Proxy::Engine class and its subclasses
126          now handle the life and death of child processes
127        - the Content-Length header is now removed only if body
128          filters will be applied on the response body
129        - HTTP::Proxy now supports some Apache-like attributes
130          (start_servers, max_clients, max_requests_per_child,
131          min_spare_servers, max_spare_servers, keep_alive,
132          max_keep_alive_requests, keep_alive_timeout)
133        - added support for ALL WebDAV/DeltaV methods
134        - the query argument to push_filter(), added in 0.14, should
135          now work (thanks to Simon Cozens for spotting the problem)
136        - the proxy now has a stash, which is a hash where filters can
137          store data (possibly to share it). (Requested by Mark Fowler)
138          Warning: since the proxy forks for each TCP connection, the
139          data is only shared between filters in the same child process.
140        [DEPRECATION]
141        - the maxchild, maxconn and maxserve accessors are now
142          deprecated. They will disappear in the future:
143          + maxchild has no replacement (should be handled by the engine)
144          + maxconn becomes max_connections
145          + maxserve becomes max_keep_alive_requests
146        - Information regarding the way the engine should behave
147          must passed in the constructor or directly to the engine
148        [NEW METHODS]
149        - $proxy->engine() return the HTTP::Proxy::Engine instance
150        - $proxy->new_connection() increase the TCP connections counter
151          (should only be used by HTTP::Proxy::Engine object)
152        [FIXES]
153        - Makefile.PL was not playing nice with Build.PL in the
154          previous distributions. This has been fixed. Sorry for the
155          inconvenience
156        - no more annoying "getsockname() on closed socket GEN0"
157          warnings (they appeared in 0.14)
158        [Win32 SUPPORT]
159        - Win32 is now supported! badly supported, but supported...
160        - until someone writes a decent engine for Win32, the default
161          Win32 engine will be HTTP::Proxy::Engine::NoFork, which
162          can only handle a single TCP connection at a time
163        [EXAMPLES]
164        - eg/yahoogroups.pl - removes ad interruptions from Yahoo! Groups
165        - eg/https.pl       - peek/poke at encrypted web pages
166        - eg/logger.pl      - improved the logger script
167
1680.15  Tue Apr  5 21:17:40 CEST 2005
169        [ENHANCEMENTS]
170        - added support for WebDAV methods (requested by Christian Laursen)
171        - The filter selection is based on the original request and response,
172          as it should
173        - improved kwalitee
174        [DEPRECATION]
175        - the start() method is no longer supported in HTTP::Proxy::BodyFilter
176          subclasses. Use begin() instead.
177        [EXAMPLES]
178        - eg/pdf.pl    - save \.pdf files and send a HTML confirmation instead
179                         (idea by Emmanuel Di Pr�toro)
180
1810.14  Tue Mar 29 11:40:51 CEST 2005
182        [ANNOUNCE]
183        - It's been more than a year since last release, which is bad.
184          I now plan to release new versions more often, maybe about
185          once a month, or when there are big changes.
186        [DEPRECATION]
187        - the start() method of HTTP::Proxy::Bodyfilter subclasses
188          is renamed begin(), since it now has an end() counterpart.
189          (On a related note, I improve my English. Be sure to check out
190          http://www.landgren.net/perl/lt-2004.html for details)          
191        - start() in filters is therefore declared deprecated, an error
192          message is logged. The start() method will not be called any
193          more as from 0.15.
194        - the FILTER constant is now named FILTERS. FILTER will disappear
195          in 0.15 as well.
196        [ENHANCEMENTS]
197        - subclasses of HTTP::Proxy::BodyFilter can now have a
198          finalisation method, named end()
199        - the start^Wbegin() method of HTTP::Proxy::BodyFilter subclasses
200          now receive the message as an argument
201        - new built-in filter: HTTP::Proxy::BodyFilter::save
202          that can save the message body to a file while browsing
203        - new built-in filter: HTTP::Proxy::BodyFilter::complete
204          that stores the message body in memory and passes it on to the
205          next filters only when it's complete
206        - logs have cleaner prefixes and the pid is always shown
207        - should work under 5.005_03 (Thanks to Mathieu Arnold)
208        - transparent proxying support (mostly to please Martin Zdila
209          and Paul Makepeace)
210        - push_filter() should now accept the query parameter
211        [FIXES]
212        - the FILTER constant is now named FILTERS
213        [BUGS]
214        - the proxy does not work under Win32, except if you force
215          maxchild to 0 (no forking at all).
216        - t/20dummy.t (and a few otrhers) hanged under Win32
217          + Ken Hirsch proposed a patch for HTTP::Daemon
218            (and a workaround for HTTP::Proxy's daemon object)
219          + Bruno De Fraine tracked down the problem to the fork()
220            emulation by Windows threads under Win32 that lead to
221            a deadlock.
222          => both explanations cover the same problem, which I haven't
223             been able to correct yet
224        - all the tests that fork a proxy and a server are therefore
225          skipped under Win32. This is ugly, and will change in the future.
226        [EXAMPLES]
227        - eg/rfc.pl    - save rfc\d+\.txt files as we browse them
228        - eg/js.pl     - save \.js files as we browse them
229        - eg/dragon.pl - enhance the Dragon Go Server web site
230        - eg/fudd.pl   - make the web tawk wike Ewmer J. Fudd
231        - eg/switch.pl - switch proxies as you browse
232        - Changed all the examples so that they can take HTTP::Proxy::new()
233          parameters on the command-line (so, call them with logmask 3,
234          for example)
235        [DOCUMENTATION]
236        - documentation for the filter initialisation methods
237        - removed all references to the so-called "store-and-forward"
238          mechanism (see HTTP::Proxy::BodyFilter::complete)
239
2400.13  Wed Mar  3 17:36:31 CET 2004
241        [ENHANCEMENTS]
242        - CONNECT support (but only transparently...)
243        - the client_headers() method (similar to hop_headers()) give
244          the filters access to the proxy's LWP::UA Client-* headers
245        - filters are applied on all supported methods by default
246        [FIXES]
247        - removed everything regarding control() and control_regex(),
248          which were not used and confusing
249        [TESTS]
250        - tests for CONNECT support
251        - tests for SSL support (not working yet)
252        [EXAMPLES]
253        - eg/adblock.pl    - a very simple adblocker
254        - eg/trim.pl       - trims whitespace from HTML pages 
255        - eg/javascript.pl - add any text right after <body>
256        [DOCUMENTATION]
257        - separate COPYRIGHT and LICENSE sections in all man pages
258
2590.12  Thu Jan 22 23:54:03 CET 2004
260        [ENHANCEMENTS]
261        - send the error message to the client when the Proxy agent dies
262          (usually because of a filter error)
263        - the proxy now sends a X-Forwarded-For header by default
264          (and the proxy method x_forwarded_for can toggle this)
265        - the proxy method client_socket() gives access to the socket
266          connected to the current client (the example in Changes for 0.10
267          was wrong: one can get the IP address of the connected agent from
268          inside a filter with $self->proxy->client_socket->peerhost)
269        [FIXES]
270        - do not block simultaneous connections when not forking
271        - clean up the filter chain after the body-request filters
272        - ensure the filter stack is reinitialised between requests
273        [TESTS]
274        - tests for X-Forwarded-For
275        - test the proxy against http://diveintomark.org/tests/client/http/
276        [EXAMPLES]
277        - eg/post.pl   - outputs the URI and parameters of all POST requests
278        - eg/logger.pl - outputs details of GET and POST requests
279
2800.11  Fri Jan  2 17:02:08 CET 2004
281        [ENHANCEMENTS]
282        - setting maxchild to 0 prevents forking (Jim Cromie)
283        - filters can now match on the query string
284        - hop-by-hop headers and Max-Forwards headers are correctly supported
285        - new mutators added to HTTP::Proxy: via, hop_headers, request,
286          response
287        - filters can now answer in place of the server, which allows
288          for authorisation filters, cache (?) filters, etc.
289        - new examples scripts: proxy-auth.pl
290        [FIXES]
291        - push_filter() now correctly supports several match criteria
292        [TESTS]
293        - all the Via: header tests are now in t/50via.t
294        - t/50standard.t now checks headers for several request types
295        - new tests:
296          + t/51simple2.t - check response header filters with an actual proxy
297          + t/61simple2.t - check response body filters with an actual proxy
298        [INTERNALS]
299        - new method _send_response_headers
300
3010.10  Wed Nov 19 01:36:59 CET 2003
302
303        *** MAJOR INTERFACE CHANGES ***
304
305        - new base classes HTTP::Proxy::HeaderFilter and
306          HTTP::Proxy::BodyFilter
307        - some useful built-in filter classes:
308          HTTP::Proxy::BodyFilter::htmlparser
309          HTTP::Proxy::BodyFilter::htmltext
310          HTTP::Proxy::BodyFilter::lines
311          HTTP::Proxy::BodyFilter::simple
312          HTTP::Proxy::BodyFilter::tags
313          HTTP::Proxy::HeaderFilter::simple
314          HTTP::Proxy::HeaderFilter::standard
315        - tests for the internal class HTTP::Proxy::FilterStack
316        - tests for the built-in filters
317        - the examples are up-to-date with the new interface 
318        - new/enhanced accessors:
319          + the proxy host() attribute becomes actually useful: by default,
320            the proxy is only usable by local user-agents (the socket
321            is bound to localhost)
322          + the filters proxy() accessor gives access to the proxy itself.
323            For example, one can get the IP address of the agent connected
324            to the proxy from inside a filter ($self->proxy->daemon->peerhost)
325        - many documentation changes
326
327        This version is NOT compatible with the previous ones
328        regarding the way filters work.
329
330        *** MAJOR INTERFACE CHANGES ***
331
3320.09  Fri Aug 15 21:12:17 CEST 2003
333        - maxserve is now correctly handled
334        - corrected a bug in the t/20keepalive.t test file that
335          made the tests fail on some machines
336
3370.08  Thu Mar 13 01:41:42 CET 2003
338        - cleaned up support for filters
339        - added support for "buffering" filters
340          and a new HTTP::Proxy::FilterStack class
341        - added an anonymiser script (eg/anonymiser.pl)
342        - the tests won't break if a local proxy is configured
343        - the interfaces are very likely to change soon
344
3450.07  Tue Feb 18 22:30:43 CET 2003
346        - the proxy now supports persistent connexions (Yay!)
347        - and tests to check for it
348        - and a new timeout accessor
349
3500.06  Mon Feb 17 00:21:37 CET 2003
351        - better forking system and better reaping of zombies
352          (thanks to David Landgren and St�phane Payrard)
353          Still won't work under Windows, though :-(
354        - replaced verbose() by logmask(), so as to fine-tune
355          the logging system
356        - put some of the test functions in a test module (t::Utils)
357
3580.05  Tue Feb  4 00:47:23 CET 2003
359        - explicitly refuse CONNECT
360        - better support for TRACE method
361        - support the Via: Header (a MUST in RFC 2616)
362        - filters, but this needs more work
363
3640.04  Sat Nov 30 12:19:22 CET 2002
365        - accept connection from other hosts
366        - better ftp support (no test yet)
367        - basic gopher support (no test yet)
368        - better HTTP error handling
369        - use CRLF in HTTP headers
370
3710.03  Fri Nov 29 11:17:36 CET 2002
372        - url() method gives a url to reach the proxy
373        - new 'control' attribute defines the control URL
374        - better subprocess management by preforking child processes
375          (thanks to Eric Cholet)
376        - a children handles only one request at a time, for better
377          performance (this means we only do HTTP/1.0 for now)
378        - correctly handle the Proxy-Connection and Connection headers
379
3800.02  Thu Oct 24 23:45:08 CEST 2002
381        - the system now forks to handle several connections
382        - but needs better test suites
383
3840.01  Tue Oct  1 11:54:07 CEST 2002
385        - original version
386