Thu Jun  1 04:45:58 2000  rushing  <rushing@seattle.nightmare.com>

        * script_handler.py: use request.split_uri() method

        * unix_user_handler.py, redirecting_handler.py, put_handler.py, default_handler.py, chat_server.py, auth_handler.py, ftp_server.py, http_server.py, dist/license.html:
        free medusa

Wed May 31 23:05:05 2000  Kent Polk <kent@tiamat.goathill.org>

	* ftp_server.py:
	When binding a data port, try to use port 'L-1' if self.bind_local_minus_one is set

Wed May 31 23:05:05 2000  Samual M. Rushing  <rushing@nightmare.com>

	* rpc_client.py, rpc_server.py: *** empty log message ***

Thu May  4 06:06:04 2000  Jim Fulton  <jim@digicool.com>

	* asyncore.py: socket_map as an optional parameter

Fri Apr 21 20:12:42 2000  Petru Paler <ppetru@coltronix.com>

	* poll/pollmodule.c: {BEGIN,END}_ALLOW_THREADS around call to poll()

Wed Mar 29 03:33:08 2000  Amos Latteier <Amos@digicool.com>

	* start_medusa.py:
	bind ftp server to IP_ADDRESS just like the http server

	* ftp_server.py:
	ftp_server.__init__(): 'ip' parameter for more control over binding interface

Fri Feb 25 11:55:03 2000  Samual M. Rushing  <rushing@eGroups.net>

	* asyncore.py: be explicit when list.appending tuples

	* sendfile/sendfilemodule.c:
	support headers/trailers on linux (using TCP_CORK) and freebsd

Sun Feb  6 03:02:33 2000  Samual M. Rushing  <rushing@eGroups.net>

	* sendfile/asynchat_sendfile.py: handle callback=None case

Tue Feb  1 00:57:38 2000  Samual M. Rushing  <rushing@eGroups.net>

	* util/name_dist.py: y2k!

	* sendfile/README, sendfile/sendfilemodule.c: *** empty log message ***

	* sendfile/test_sendfile.py: hostname argument for client mode

	* sendfile/test_sendfile.py, sendfile/asynchat_sendfile.py:
	added a 'done' callback

	* sendfile/test_sendfile.py: version string

	* sendfile/asynchat_sendfile.py: usage hints

Sat Jan 29 05:24:28 2000  Samual M. Rushing  <rushing@eGroups.net>

	* status_handler.py: asyncore.socket_map change

Fri Jan 14 17:41:44 2000  Amos Latteier <Amos@digicool.com>

	* http_server.py: handle malformed requests

Thu Jan  6 09:49:10 2000  Samual M. Rushing  <rushing@eGroups.net>

	* monitor_client.py: socket_map change

	* asyncore.py: file_dispatcher: set self._fileno

Thu Dec 23 13:46:44 1999  Samual M. Rushing  <rushing@eGroups.net>

	* asyncore.py:
	commented "{adding,closing} channel" notifications (lots of unnecessary repr() calls)

	* monitor.py: automatically grab everything from __main__
	don't use log_info to print results

	* http_server.py, asyncore.py:
	socket_map now contains {<descriptor>:<object> ...}

Tue Nov 30 01:26:07 1999  Samual M. Rushing  <rushing@eGroups.net>

	* http_server.py:
	handle accept() returning None (because of EWOULDBLOCK)

Fri Nov 19 09:25:34 1999  Samual M. Rushing  <rushing@eGroups.net>

	* ftp_server.py: use asyncore.close_all()

Thu Nov 18 11:01:08 1999  Samual M. Rushing  <rushing@eGroups.net>

	* asynchat.py: discard_buffers() ==/= bug

Mon Nov 15 02:24:55 1999  Samual M. Rushing  <rushing@eGroups.net>

	* ftp_server.py: two versions of ftp_channel.close(). Duh!

Thu Sep  2 23:21:11 1999  Samual M. Rushing  <rushing@eGroups.net>

	* Makefile: trimmed

Tue Aug 31 10:04:52 1999  Samual M. Rushing  <rushing@eGroups.net>

	* script_handler_demo/form.mpy:
	a more interesting test for script_handler.py

	* script_handler.py:
	collector: restore/reset request.collector and channel terminator when done

	* http_server.py:
	ignore leading blank lines in http request (rfc2616/sec-4.1, eparker@zyvex.com)

Tue Jul 27 00:30:01 1999  Samual M. Rushing  <rushing@eGroups.net>

	* monitor.py, resolver.py, asyncore.py, ftp_server.py, http_server.py:
	more sophisticated logging <amos@digicool.com>

	* thread/select_trigger.py: win32 support

Mon Jul 26 23:57:27 1999  Samual M. Rushing  <rushing@eGroups.net>

	* test/max_sockets.py: max_select_sockets() <amos@digicool.com>

	* http_server.py: make subclassing http_server easier

Wed Jul  7 10:33:58 1999  Samual M. Rushing  <rushing@eGroups.net>

	* asynchat.py:
	handle_read(): don't bother reporting an empty string to self.collect_incoming_data()

Tue Jul  6 22:33:38 1999  Samual M. Rushing  <rushing@eGroups.net>

	* script_handler.py: provide a default content-type of text/html

Thu Jun 24 15:10:32 1999  Samual M. Rushing  <rushing@eGroups.net>

	* asyncore.py: i love cvs.  not.  whatever.

	* asyncore.py:
	use a map of file descriptors to lessen select()'s workload

Wed Jun 23 02:43:06 1999  Samual M. Rushing  <rushing@eGroups.net>

	* script_handler.py: checkin anomalies

	* http_server.py:
	If a request begins with a blank line, ignore it (eparker@zyvex.com)

Thu May 27 04:08:25 1999  Samual M. Rushing  <rushing@eGroups.net>

	* asyncore.py: dispatcher.recv(): watch for ESHUTDOWN (Amos Latteier)

Wed May 19 17:55:36 1999  Samual M. Rushing  <rushing@eGroups.net>

	* misc/async_mysql.py: removed some debug info

	* misc/async_mysql.py: update

Sat May 15 02:07:32 1999  Samual M. Rushing  <rushing@eGroups.net>

	* script_handler_demo/form.mpy, script_handler_demo/persistent.py, script_handler_demo/start_demo.py, script_handler_demo/today.mpy:
	script demos

	* script_handler.py: changed comments
	class variable script_handler.restricted defaults to false

	* script_handler.py: handle put,post
	class persistent_script_handler

Fri May  7 00:49:32 1999  Samual M. Rushing  <rushing@eGroups.net>

	* ftp_server.py: use socket.gethostname() for default hostname

Thu May  6 03:25:18 1999  Samual M. Rushing  <rushing@eGroups.net>

	* asyncore.py: make __getattr__ faster

Sat May  1 05:04:53 1999  Samual M. Rushing  <rushing@eGroups.net>

	* asyncore.py:
	poll(): use for loop instead of lambda filters for predicates

	* asyncore.py: wrap default log() calls with "if __debug__:"

	* asynchat.py: remove line from the twilight zone

	* asynchat.py: speed up async_chat.writable()

	* http_server.py: die if we get out-of-memory-wedged

Fri Apr 30 22:53:22 1999  Samual M. Rushing  <rushing@eGroups.net>

	* http_server.py:
	close channel by default if no http version number given

	* ftp_server.py: handle data-channel errors more gracefully (Amos)

Thu Apr 29 23:47:23 1999  Samual M. Rushing  <rushing@eGroups.net>

	* ftp_server.py: missing parameter for recv_channel

Mon Apr 12 22:26:03 1999  Samual M. Rushing  <rushing@eGroups.net>

	* resolver.py:
	reap(): support timeout for DNS requests (Craig Silverstein <csilvers@google.com>)

	* fifo.py: output_fifo(): compare self._embedded to None

Tue Apr  6 04:45:36 1999  Samual M. Rushing  <rushing@eGroups.net>

	* ftp_server.py:
	Use control channel's address for PASV reply (Amos Latteier <amos@aracnet.com>)

Fri Apr  2 23:53:08 1999  Samual M. Rushing  <rushing@eGroups.net>

	* continuation.py: continuation class

	* fifo.py: output_fifo: support embedded fifo's

Wed Mar 17 00:12:58 1999  Samual M. Rushing  <rushing@eGroups.net>

	* asynchat.py: strings in the output fifo, bug fix from Amos

Tue Mar 16 02:49:29 1999  Samual M. Rushing  <rushing@eGroups.net>

	* misc/async_mysql.py: *** empty log message ***

	* logger.py: intermediate

Sun Mar 14 04:37:40 1999  Samual M. Rushing  <rushing@eGroups.net>

	* event_loop.py: use sorted event list
	record num_channels, max_channels

Thu Mar  4 01:02:07 1999  Samual M. Rushing  <rushing@eGroups.net>

	* ftp_server.py: cmd_mode()

	* ftp_server.py: cmd_stru()

Mon Mar  1 22:10:25 1999  Samual M. Rushing  <rushing@eGroups.net>

	* asyncore.py: unused: handle_oob()

Wed Feb 24 02:03:12 1999  Samual M. Rushing  <rushing@eGroups.net>

	* http_server.py: raised default listen queue length

Sat Feb 20 10:04:45 1999  Samual M. Rushing  <rushing@eGroups.net>

	* thread/thread_handler.py:
	better error message 'no header from CGI script'

Fri Feb 19 06:30:55 1999  Samual M. Rushing  <rushing@eGroups.net>

	* thread/select_trigger.py: more lambda difficulty

	* thread/select_trigger.py:
	bug in lambda construction, no more lost data

Tue Feb 16 04:11:16 1999  Samual M. Rushing  <rushing@eGroups.net>

	* thread/thread_handler.py: Shriek if a script doesn't send headers
	Use re for thread safety
	"{put,post}_collector" => "collector"

Thu Feb 11 03:32:45 1999  Samual M. Rushing  <rushing@eGroups.net>

	* asynchat.py: never call collect_incoming_data with an empty string

Wed Feb 10 23:44:46 1999  Samual M. Rushing  <rushing@eGroups.net>

	* work_in_progress/http_proxy.py: intermediate

Wed Feb 10 05:42:22 1999  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* asyncore.py: unset self.connected upon entry to self.connect().

Mon Feb  8 03:42:20 1999  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* thread/select_trigger.py: handle_error/compact_traceback changes

Tue Jan 19 14:37:35 1999  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* asyncore.py:
	dispatcher.close() not longer clears 'connected', for didactic purposes.

Fri Jan 15 09:02:19 1999  Samual M. Rushing  <rushing@nightmare.com>

	* http_server.py: typo in http_request:found_terminator()

Thu Jan 14 07:12:47 1999  Samual M. Rushing  <rushing@nightmare.com>

	* thread/select_trigger.py: dedent bug

	* thread/select_trigger.py: *** empty log message ***

Wed Jan 13 17:43:06 1999  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* status_handler.py:
	statusdir arg (Craig Silverstein <csilvers@google.com>)

	* 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  <nobody@gnome.nightmare.com>

	* asyncore.py: *** empty log message ***

Thu Jan  7 01:45:37 1999  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* asyncore.py: first hack at using poll.poll

Mon Dec 21 03:55:55 1998  Samual M. Rushing  <rushing@nightmare.com>

	* redirecting_handler.py: Initial revision

	* unix_user_handler.py: *** empty log message ***

Tue Dec 15 09:26:45 1998  Samual M. Rushing  <rushing@nightmare.com>

	* producers.py: scanning_producer

Sun Dec 13 04:49:22 1998  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* asynchat.py: discard_buffers()

Fri Nov 13 10:03:40 1998  Samual M. Rushing  <rushing@nightmare.com>

	* status_handler.py: *** empty log message ***

	* monitor.py: hint in greeting

Mon Nov  2 10:09:04 1998  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* asyncore.py: *** empty log message ***

Tue Oct 27 01:07:15 1998  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* asynchat.py: bug in regex version of find_prefix_at_end

Mon Sep 14 21:40:28 1998  Samual M. Rushing  <rushing@nightmare.com>

	* producers.py: escaping_producer

Sun Sep 13 23:45:17 1998  Samual M. Rushing  <rushing@nightmare.com>

	* event_loop.py: Initial revision

	* asyncore.py: global socket_map in close_all()

Fri Sep  4 07:51:55 1998  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* asyncore.py: more protection around repr(self)

Sun Feb 15 22:03:24 1998  Samual M. Rushing  <rushing@nightmare.com>

	* asyncore.py: more protection around __repr__

Sun Feb  8 07:42:07 1998  Samual M. Rushing  <rushing@nightmare.com>

	* ftp_server.py:
	anon_authorizer(): always create a new filesystem object.

Fri Feb  6 00:32:46 1998  Samual M. Rushing  <rushing@nightmare.com>

	* ftp_server.py: remove os.sep modification.

Thu Feb  5 12:30:06 1998  Samual M. Rushing  <rushing@nightmare.com>

	* asyncore.py: handle broken repr methods in handle_error()

Sat Jan 31 17:28:18 1998  Samual M. Rushing  <rushing@nightmare.com>

	* http_server.py: duh!

Wed Jan 28 22:06:04 1998  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* http_server.py: Watch out for handlers with no 'status' method.

Mon Oct 27 21:07:06 1997  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* ftp_server.py: only help for cmd_xxx methods.

Thu Sep 25 00:04:30 1997  Samual M. Rushing  <rushing@nightmare.com>

	* ftp_server.py:
	default logger should wrap logger.file_logger around sys.stdout

Tue Sep 23 04:21:25 1997  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* resolver.py: comments on TCP client

Wed Aug 27 02:11:03 1997  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* resolver.py: *** empty log message ***

Fri Aug  8 05:38:17 1997  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* asynchat.py: implemented the expected read buffering.

Tue Aug  5 04:17:06 1997  Samual M. Rushing  <rushing@nightmare.com>

	* asyncore.py: catch additional errors

	* http_server.py, monitor.py: *** empty log message ***

Mon Aug  4 23:15:48 1997  Samual M. Rushing  <rushing@nightmare.com>

	* producers.py: Initial revision

	* http_server.py: complete http/1.1 rewrite

Sat Aug  2 22:27:54 1997  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* monitor.py: Try SO_REUSEADDR

Fri Jul 18 22:41:45 1997  Samual M. Rushing  <rushing@nightmare.com>

	* http_server.py: prior to rewrite using request objects.

Mon Apr  7 08:47:30 1997  Samual M. Rushing  <rushing@nightmare.com>

	* ftp_server.py: count sessions correctly
	split command lines correctly

Sun Mar 30 01:47:38 1997  Samual M. Rushing  <rushing@nightmare.com>

	* http_bobo.py: Initial revision

Thu Mar 27 10:11:56 1997  Samual M. Rushing  <rushing@nightmare.com>

	* ftp_server.py: missing self in recv_channel.recv().

Tue Mar 18 07:41:44 1997  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* asyncore.py: looks like accept() can get EWOULDBLOCK

Mon Feb 10 00:27:28 1997  Samual M. Rushing  <rushing@nightmare.com>

	* medusa.py: exit after usage

Sat Feb  8 13:04:04 1997  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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 <connect>,<command> or <command>,<connect>

Sun Feb  2 00:14:08 1997  Samual M. Rushing  <rushing@nightmare.com>

	* ftp_server.py: about to redesign the data channel handling

Fri Jan 31 05:48:23 1997  Samual M. Rushing  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* 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  <rushing@nightmare.com>

	* http_server.py: first code review

Fri Jan 17 04:47:05 1997  Samual M. Rushing  <rushing@nightmare.com>

	* m_conf.py: Initial revision

Sun Oct 20 20:42:29 1996  Samual M. Rushing  <rushing@nightmare.com>

	* http_server.py: version string stuff

	* http_server.py, ftp_server.py: *** empty log message ***

