Wed Feb 10 05:42:22 1999 Samual M. Rushing * old/medusa.py: *** empty log message *** * default_handler.py: lowercase filename extension * http_server.py: new request object methods: split_uri(), get_header(), get_header_with_regex() * asynchat.py: support 'numeric terminator' * xmlrpc_handler.py: *** empty log message *** Tue Feb 9 21:53:42 1999 Samual M. Rushing * asyncore.py: unset self.connected upon entry to self.connect(). Mon Feb 8 03:42:20 1999 Samual M. Rushing * virtual_handler.py: intermediate * thread/thread_handler.py: flag work threads as daemon threads handle strange (or nonexistent) headers watch for 'Content-Type' header flush on close post_collector and put_collector fixed * thread/select_trigger.py: use a pipe don't use tagged thunks, execute them all buffered trigger_file Mon Feb 1 04:04:17 1999 Samual M. Rushing * Attic/medusa.py: *** empty log message *** * default_handler.py: cancel version * monitor.py: hint in secure monitor, too * monitor.py: cancel version * monitor.py: *** empty log message *** * producers.py, redirecting_handler.py, resolver.py, script_handler.py, status_handler.py: cancel version * monitor.py: Can't cancel a version. CVS sucks. * http_server.py: * http_server.py: oops, _have_ to use simple_producer * monitor.py: *** empty log message *** * status_handler.py, script_handler.py, resolver.py, redirecting_handler.py, monitor.py, http_server.py, default_handler.py: don't use simple_producer * asynchat.py: allow strings in the output queue Sat Jan 30 21:02:02 1999 Samual M. Rushing * asynchat.py: try/except around self.send() * ftp_server.py: use self.write_commands when checking commands for read-only auth * Attic/m_conf.py: *** empty log message *** Wed Jan 20 11:04:07 1999 Samual M. Rushing * thread/select_trigger.py: handle_error/compact_traceback changes Tue Jan 19 14:37:35 1999 Samual M. Rushing * producers.py: class buffer_list_producer * asynchat.py, ftp_server.py: new handle_error interface * Attic/reaper.py: *** empty log message *** * resolver.py, monitor.py, http_server.py, ftp_server.py: new compact_traceback interface * asyncore.py: new handle_error() interface * asyncore.py: move call to sys.exc_info() into compact_traceback() * thread/select_trigger.py: try/except around thunk() * thread/select_trigger.py: custom __repr__ * thread/test_module.py: *** empty log message *** * http_server.py: float cast in the wrong place Sat Jan 16 12:25:14 1999 Samual M. Rushing * asyncore.py: dispatcher.close() not longer clears 'connected', for didactic purposes. Fri Jan 15 09:02:19 1999 Samual M. Rushing * http_server.py: typo in http_request:found_terminator() Thu Jan 14 07:12:47 1999 Samual M. Rushing * thread/select_trigger.py: dedent bug * thread/select_trigger.py: *** empty log message *** Wed Jan 13 17:43:06 1999 Samual M. Rushing * http_server.py, redirecting_handler.py: *** empty log message *** * fifo.py: node cache for fast iteration * asyncore.py: *** empty log message *** Tue Jan 12 16:24:37 1999 Samual M. Rushing * fifo.py: *** empty log message *** * monitor.py: use set_reuse_addr() * http_server.py: Don't die if gethostbyaddr() fails. (csilvers@google.com) * http_date.py: intermediate * redirecting_handler.py: status method (csilvers@google.com) * Makefile: *** empty log message *** Sun Jan 10 13:16:12 1999 Samual M. Rushing * asyncore.py: don't cache fileno * asyncore.py: optionally ignore the 'exception' (third) fd_set arg to select() Fri Jan 8 07:09:14 1999 Samual M. Rushing * status_handler.py: statusdir arg (Craig Silverstein ) * contrib/bobo_handler.py, contrib/sample_cgi.py, demo/publish.py, dist/license.html, docs/README.html, docs/composing_producers.gif, docs/data_flow.gif, docs/data_flow.html, docs/producers.gif, docs/proxy_notes.txt, http_server.py, misc/recorder.py, misc/syncsock.py, notes/async_blurbs.txt, notes/debugging.txt, notes/threads.txt, notes/tkinter.txt, old/argparse.py, old/default_extension.py, old/http_server.py, old/medusa.py, old/mstatus.py, old/producers.py, patches/README, patches/configure, patches/posixmodule.c, poll/pollmodule.c, scripts/dual_server.py, scripts/my_mime_types.py, scripts/script_server.py, scripts/simple_anon_ftpd.py, scripts/simple_httpd.py, test/asyn_http_bench.py, test/max_sockets.py, test/test_11.py, test/test_lb.py, test/test_medusa.py, test/test_single_11.py, test/tests.txt, thread/thread_channel.py, util/bench.py, util/convert_mime_type_table.py, util/name_dist.py, work_in_progress/blank_gif.py, work_in_progress/cgi_ext.py, work_in_progress/cookie.py, work_in_progress/filecache.py, work_in_progress/ftp_proxy.py, work_in_progress/http_bobo.py, work_in_progress/http_form.py, work_in_progress/http_proxy.py, work_in_progress/http_proxy.py.backup, work_in_progress/msql.py, work_in_progress/reaper.py: Imported from RCS * contrib/bobo_handler.py, contrib/sample_cgi.py, demo/publish.py, dist/license.html, docs/README.html, docs/composing_producers.gif, docs/data_flow.gif, docs/data_flow.html, docs/producers.gif, docs/proxy_notes.txt, misc/recorder.py, misc/syncsock.py, notes/async_blurbs.txt, notes/debugging.txt, notes/threads.txt, notes/tkinter.txt, old/argparse.py, old/default_extension.py, old/http_server.py, old/medusa.py, old/mstatus.py, old/producers.py, patches/README, patches/configure, patches/posixmodule.c, poll/pollmodule.c, scripts/dual_server.py, scripts/my_mime_types.py, scripts/script_server.py, scripts/simple_anon_ftpd.py, scripts/simple_httpd.py, test/asyn_http_bench.py, test/max_sockets.py, test/test_11.py, test/test_lb.py, test/test_medusa.py, test/test_single_11.py, test/tests.txt, thread/thread_channel.py, util/bench.py, util/convert_mime_type_table.py, util/name_dist.py, work_in_progress/blank_gif.py, work_in_progress/cgi_ext.py, work_in_progress/cookie.py, work_in_progress/filecache.py, work_in_progress/ftp_proxy.py, work_in_progress/http_bobo.py, work_in_progress/http_form.py, work_in_progress/http_proxy.py, work_in_progress/http_proxy.py.backup, work_in_progress/msql.py, work_in_progress/reaper.py: Initial revision * ANNOUNCE.txt, ANNOUNCE_970922.txt, auth_handler.py, chat_server.py, counter.py, default_handler.py, ftp_server.py, http_date.py, logger.py, m_syslog.py, medusa.html, medusa_gif.py, monitor.py, monitor_client.py, monitor_client_win32.py, producers.py, put_handler.py, redirecting_handler.py, resolver.py, script_handler.py, start_medusa.py, status_handler.py, unix_user_handler.py, virtual_handler.py: Imported from RCS * ANNOUNCE.txt, ANNOUNCE_970922.txt, http_date.py, logger.py, m_syslog.py, medusa.html, medusa_gif.py, monitor_client.py, monitor_client_win32.py, start_medusa.py, virtual_handler.py: Initial revision * INSTALL.txt, Makefile, filesys.py, mime_type_table.py: Imported from RCS * INSTALL.txt, Makefile, mime_type_table.py: Initial revision Fri Jan 8 03:07:47 1999 Nobody * asyncore.py: *** empty log message *** Thu Jan 7 01:45:37 1999 Samual M. Rushing * default_handler.py: use %s when printing counters * asyncore.py: support for poll(2) * ftp_server.py: Limit valid command set before auth. Mon Dec 28 04:30:02 1998 Samual M. Rushing * asyncore.py: first hack at using poll.poll Mon Dec 21 03:55:55 1998 Samual M. Rushing * redirecting_handler.py: Initial revision * unix_user_handler.py: *** empty log message *** Tue Dec 15 09:26:45 1998 Samual M. Rushing * producers.py: scanning_producer Sun Dec 13 04:49:22 1998 Samual M. Rushing * status_handler.py: request.done() and hyper_respond() were interacting strangely with chunked encoding. * http_server.py: better support for POST/PUT * monitor.py: Solaris will select a listening socket for FD_WRITE Tue Nov 24 05:36:12 1998 Samual M. Rushing * asynchat.py: discard_buffers() Fri Nov 13 10:03:40 1998 Samual M. Rushing * status_handler.py: *** empty log message *** * monitor.py: hint in greeting Mon Nov 2 10:09:04 1998 Samual M. Rushing * status_handler.py: *** empty log message *** * producers.py: nix the '0x' from chunk-size in chunked_producer Thu Oct 29 01:16:46 1998 Samual M. Rushing * asyncore.py: *** empty log message *** Tue Oct 27 01:07:15 1998 Samual M. Rushing * status_handler.py: disable emergency_debug by default * status_handler.py: Initial revision * monitor.py: *** empty log message *** * asyncore.py: record socket family and type * http_server.py: set_reuse_addr * asyncore.py: set_reuse_addr() * ftp_server.py: self.set_reuse_addr() Mon Oct 26 22:05:52 1998 Samual M. Rushing * monitor.py, ftp_server.py, resolver.py: long-valued counters * script_handler.py: Initial revision * http_server.py: long-valued counters exception-triggered memory leak * resolver.py: long-valued counters * resolver.py: handle 16-bit ID overflow * auth_handler.py: long-valued counter * counter.py: Initial revision * producers.py: *** empty log message *** Sat Sep 19 15:41:05 1998 Samual M. Rushing * asynchat.py: bug in regex version of find_prefix_at_end Mon Sep 14 21:40:28 1998 Samual M. Rushing * producers.py: escaping_producer Sun Sep 13 23:45:17 1998 Samual M. Rushing * event_loop.py: Initial revision * asyncore.py: global socket_map in close_all() Fri Sep 4 07:51:55 1998 Samual M. Rushing * http_server.py: removed request<-->handler cycle * http_server.py: maintenance interface, automatic zombie killing Mon Jun 22 05:44:48 1998 Samual M. Rushing * http_server.py, ftp_server.py, filesys.py: *** empty log message *** * filesys.py: protect against bogus ST_MTIME values * ftp_server.py: catch error before channel attribute exists * ftp_server.py, http_server.py, asyncore.py, monitor.py, resolver.py: compact traceback Sun Jun 21 23:54:30 1998 Samual M. Rushing * default_handler.py: *** empty log message *** * http_server.py: can't unquote an entire URI at once. * default_handler.py: unquote path instead of entire URI * http_server.py: zombie timeouts Sun Feb 22 20:16:27 1998 Samual M. Rushing * asyncore.py: more protection around repr(self) Sun Feb 15 22:03:24 1998 Samual M. Rushing * asyncore.py: more protection around __repr__ Sun Feb 8 07:42:07 1998 Samual M. Rushing * ftp_server.py: anon_authorizer(): always create a new filesystem object. Fri Feb 6 00:32:46 1998 Samual M. Rushing * ftp_server.py: remove os.sep modification. Thu Feb 5 12:30:06 1998 Samual M. Rushing * asyncore.py: handle broken repr methods in handle_error() Sat Jan 31 17:28:18 1998 Samual M. Rushing * http_server.py: duh! Wed Jan 28 22:06:04 1998 Samual M. Rushing * filesys.py: oops * filesys.py: use os.sep instead of '/' when translating pathnames * asyncore.py: redefine dispatcher.writable() on the mac * chat_server.py, ftp_server.py: don't select server for write * http_server.py: don't select server for write. Sat Jan 24 09:48:39 1998 Samual M. Rushing * auth_handler.py: long integer for time.time() miscellaneous * resolver.py: support for MAPS long integer for time.time() * filesys.py: convert time.time() to long, not int. * asyncore.py: new traceback format * default_handler.py: pull in unquote * http_server.py: divide by zero in req/conn ratio * http_server.py: handle exception thrown by accept() Mon Jan 19 19:17:57 1998 Samual M. Rushing * ftp_server.py: support for MKD, RMD, DELE * filesys.py: mkdir, rmdir, unlink added to os_filesystem. Wed Dec 3 01:55:54 1997 Samual M. Rushing * http_server.py: Watch out for handlers with no 'status' method. Mon Oct 27 21:07:06 1997 Samual M. Rushing * http_server.py: handle unquoting in http_channel, not default_handler * default_handler.py: moved unquote into http_channel * default_handler.py: auto-redirect of http://host/place => http://host/place/ Fri Sep 26 23:59:07 1997 Samual M. Rushing * ftp_server.py: only help for cmd_xxx methods. Thu Sep 25 00:04:30 1997 Samual M. Rushing * ftp_server.py: default logger should wrap logger.file_logger around sys.stdout Tue Sep 23 04:21:25 1997 Samual M. Rushing * unix_user_handler.py: handle `/~user' instead of `/~user/' * unix_user_handler.py: handle bogus user names * default_handler.py: move counters into __init__ Mon Sep 22 21:15:24 1997 Samual M. Rushing * filesys.py: Initial revision * ftp_server.py: bind to the control channel's ip address * http_server.py: `collector' support for PUT and POST handlers * unix_user_handler.py: Initial revision Sun Sep 21 20:56:41 1997 Samual M. Rushing * put_handler.py, auth_handler.py, default_handler.py: Initial revision * monitor.py: support encryption via stream cipher Mon Sep 1 20:27:07 1997 Samual M. Rushing * resolver.py: support new status handler * producers.py: compressing producer * chat_server.py: support binding IP address argument * monitor.py: use counters fix secure initialization/counter bug support new status handler * http_server.py: support resolving logger support new status handler * ftp_server.py: support new status handler support resolving logger use counter objects make xmit_channel:handle_error() work on non-posix, too. new anon_authorizer object takes a filesystem argument Sat Aug 30 23:11:24 1997 Samual M. Rushing * resolver.py: comments on TCP client Wed Aug 27 02:11:03 1997 Samual M. Rushing * resolver.py: missing TTL parameter in callback invocation * resolver.py: version number in status * resolver.py: support PTR requests Mon Aug 25 23:28:56 1997 Samual M. Rushing * monitor.py: secure_monitor_server needs a hostname param * monitor.py: hostname param to secure monitor server * monitor.py: mstatus => status_handler * http_server.py: preparing for late 1997 release * asyncore.py: allow waiting on connect when there's no data queued for write * asynchat.py: trying out 'push mode' support Mon Aug 11 21:41:00 1997 Samual M. Rushing * asynchat.py: comment touch-ups let writable() poll for connect when the outgoing queue is empty. Sun Aug 10 18:20:46 1997 Samual M. Rushing * resolver.py: *** empty log message *** Fri Aug 8 05:38:17 1997 Samual M. Rushing * asynchat.py: handle None as terminator * asynchat.py: removed commented C version of find_prefix_at_end * asynchat.py: support the null terminator * resolver.py: Initial revision Thu Aug 7 06:08:18 1997 Samual M. Rushing * asynchat.py: implemented the expected read buffering. Tue Aug 5 04:17:06 1997 Samual M. Rushing * asyncore.py: catch additional errors * http_server.py, monitor.py: *** empty log message *** Mon Aug 4 23:15:48 1997 Samual M. Rushing * producers.py: Initial revision * http_server.py: complete http/1.1 rewrite Sat Aug 2 22:27:54 1997 Samual M. Rushing * asynchat.py: removed deprecated more_to_send() logic. * asyncore.py: removed deprecated write_blocked, more_to_send. removed type check on socket error exception value * asynchat.py: support for C version of find_prefix_at_end Tue Jul 22 01:47:01 1997 Samual M. Rushing * monitor.py: Try SO_REUSEADDR Fri Jul 18 22:41:45 1997 Samual M. Rushing * http_server.py: prior to rewrite using request objects. Mon Apr 7 08:47:30 1997 Samual M. Rushing * ftp_server.py: count sessions correctly split command lines correctly Sun Mar 30 01:47:38 1997 Samual M. Rushing * http_bobo.py: Initial revision Thu Mar 27 10:11:56 1997 Samual M. Rushing * ftp_server.py: missing self in recv_channel.recv(). Tue Mar 18 07:41:44 1997 Samual M. Rushing * asyncore.py: fixed accept() again. * asyncore.py: last fix was bogus * chat_server.py: Initial revision Mon Mar 3 18:22:31 1997 Samual M. Rushing * asyncore.py: looks like accept() can get EWOULDBLOCK Mon Feb 10 00:27:28 1997 Samual M. Rushing * medusa.py: exit after usage Sat Feb 8 13:04:04 1997 Samual M. Rushing * medusa.py: re-arranged server startup Grim Reaper added * reaper.py: Initial revision * ftp_server.py: debugging additions * asynchat.py: *** empty log message *** * asyncore.py: __getattr__ gotcha. have to catch a getattr for the surrogate! Fri Feb 7 01:59:56 1997 Samual M. Rushing * ftp_server.py: handle [urgent] ABOR command * monitor.py: deliver python copyright notice * ftp_server.py, http_server.py: nicer byte counts Thu Feb 6 12:37:11 1997 Samual M. Rushing * medusa.py: send a blip * monitor.py: handle multi-line input * http_server.py: minor changes to status * ftp_server.py: byte and file out counts Mon Feb 3 07:16:20 1997 Samual M. Rushing * ftp_server.py: clean up the log output * ftp_server.py: changes to server ident * monitor.py: version info * monitor.py: Initial revision * ftp_server.py: more sane naming of data channel classes (recv_channel, xmit_channel, etc..) when accepting PASV connections, tolerate either , or , Sun Feb 2 00:14:08 1997 Samual M. Rushing * ftp_server.py: about to redesign the data channel handling Fri Jan 31 05:48:23 1997 Samual M. Rushing * ftp_server.py: removed a print * asyncore.py: . * asyncore.py: poll(): move the exception handler up one level. this will take care of a connection being closed in the read() handler. * asyncore.py: handle ECONNRESET from recv() on unix. * asyncore.py: *** empty log message *** * medusa.py: . * medusa.py: driver version string * medusa.py: Initial revision Sat Jan 25 02:39:46 1997 Samual M. Rushing * ftp_server.py: first code review * http_server.py: use the If-Modified-Since 'length' field if it's there. Fri Jan 24 22:27:40 1997 Samual M. Rushing * http_server.py: first code review Fri Jan 17 04:47:05 1997 Samual M. Rushing * m_conf.py: Initial revision Sun Oct 20 20:42:29 1996 Samual M. Rushing * http_server.py: version string stuff * http_server.py, ftp_server.py: *** empty log message ***