gurba-0.40/
gurba-0.40/bin/
gurba-0.40/lib/
gurba-0.40/lib/cmds/guild/fighter/
gurba-0.40/lib/cmds/monster/
gurba-0.40/lib/cmds/race/catfolk/
gurba-0.40/lib/cmds/race/dwarf/
gurba-0.40/lib/cmds/verb/
gurba-0.40/lib/daemons/data/
gurba-0.40/lib/data/boards/
gurba-0.40/lib/data/messages/
gurba-0.40/lib/data/players/
gurba-0.40/lib/design/
gurba-0.40/lib/domains/gurba/
gurba-0.40/lib/domains/gurba/guilds/fighter/
gurba-0.40/lib/domains/gurba/monsters/
gurba-0.40/lib/domains/gurba/objects/armor/
gurba-0.40/lib/domains/gurba/objects/clothing/
gurba-0.40/lib/domains/gurba/objects/weapons/
gurba-0.40/lib/domains/gurba/vendors/
gurba-0.40/lib/kernel/cmds/admin/
gurba-0.40/lib/kernel/daemons/
gurba-0.40/lib/kernel/include/
gurba-0.40/lib/kernel/lib/
gurba-0.40/lib/kernel/net/
gurba-0.40/lib/kernel/sys/
gurba-0.40/lib/logs/
gurba-0.40/lib/pub/
gurba-0.40/lib/std/modules/languages/
gurba-0.40/lib/std/races/
gurba-0.40/lib/std/races/monsters/
gurba-0.40/lib/wiz/fudge/
gurba-0.40/lib/wiz/spud/
gurba-0.40/src/host/beos/
gurba-0.40/src/host/pc/res/
gurba-0.40/src/kfun/
gurba-0.40/src/lpc/
gurba-0.40/src/parser/
gurba-0.40/tmp/
Every package has two version indicators: A dgd-net release number,
and a DGD version number. There is a loose correspondence between them,
because support for older DGD versions is often dropped in later releases.
Contact me if you need a particular release / version combination that
is not supported.

Release 1:
   - comm_receive condensed to a single loop
   - cleaned up buffer allocation
   - put SO_REUSEADDR back

Release 2:
   - fixed the call to setsockopt
   - made it compatible with precompilation

Release 3:
   - properly initialized usr->newlines (fixes crashing bug)
   - fixed bug where commands would only be executed if several were queued.

Release 4:
   - added LINEMODE patches from DGD 1.0.8.3 (+minor fix to SB/SE handling)
   - fixed send_message() for when the driver object doubles as a port object
   - reversed order of checking for errors and writability in conn_connected
   - an error is raised if a connect() fails right away (used to be silent)

Release 5:
   - Added config.c and comp/comp.c patches from DGD 1.0.8.8
   - Doc fix: accept() has been connection() since release 0.
   - Added checks for nusers < maxusers before calling comm_new
   - Made some error messages clearer
   - Made sure no writes are done to not yet connected sockets

Release 6:
   - Fixed O_USER check in kfun_send_datagram().  (Operator precedence)
   - Added SO_ERROR check to select-on-exception check for conn_connected()
   - It seems some hosts report EAGAIN rather than EINPROGRESS for
     non-blocking connect() calls.  Added check for EAGAIN.
   - Made conn_write() retry if it receives EINTR.
   - this_user() is now set during port_object->open().
   - Peeked in tinyfugue sources to see how it handles nonblocking
     connect().  conn_connected() rewritten accordingly.
   - Flow control:  When a message will not fit in the output buffer,
     allocate the space to hold it and return 1.  The driver will call
     message_done() in the connection object when the entire message has
     been sent.  If the connection object uses send_message() before
     the previous message was done, the unsent part of the previous
     message will be discarded.  This should be compatible with 1.0.19's
     handling of flow control.

Release 7:
   - Automatically try to extend the socket output buffer when a write
     can not send everything or a sendto fails with EMSGSIZE.
   - Do not send WONT ECHO when a new connection is accepted.  Clients
     must start in that mode anyway.  To help users with broken clients,
     the connection object can toggle echoing off and then on.  Also,
     every telnet client I have seen has some way to specify which side
     should echo.
   - Do not send DO LINEMODE when a new connection is accepted.  It was
     sent to help certain BSD telnet clients, which do not normally
     negotiate LINEMODE when contacting a non-standard port, but (I've heard)
     cannot function properly without it.  The user of such a client can
     specify the port as a negative number to tell it to always start
     negotiations.
   - Because no telnet-specific options are sent when a new connection
     is accepted, the "telnet" protocol has become useful for tasks like
     ftp-control and smtp.
   - *** Any object can do open_port() or connect() on itself.
   - Moved telnet-negotiation flags to a separate field.
   - Telnet protocol will now refuse unknown options.

Release 8:
   - Increased input buffers for "tcp" receive_message() and
     "udp" receive_datagram() to 8192 bytes.
   - IAC IP and IAC BREAK are now ignored.  (Used to echo DEL for IP
     and FS for BREAK.)
   - Changed reply to DO TM to WONT TM.  WILL TM implies that the WILL TM
     has been inserted at the correct place in the output stream, which is
     not true.
   - Added support for IAC EC (erase character) and IAC EL (erase line)
   - Set socket option OOBINLINE on telnet/tcp connections to receive
     out-of-band data inline.
   - When receiving a Data Mark (IAC DM) or Interrupt (IAC IP), purge the
     input buffer.  This assumes that a Data Mark is always part of a telnet
     "Synch" sequence.  Since DGD effectively treats all telnet input as
     'urgent', discarding previous input should be all that is necessary.
   - conn_accept() checks read-select before trying accept().
   - Added ports() efun.  Efun users() no longer returns ports.
     query_ip_number() returns 0 for ports.
   - Speedup when maxusers is much larger than nusers.
   - Introduced comm_confirm(), so that message_done() and close() are
     called during a separate round.
   - Use 'flush' and 'callbacks' to keep track of whether a scan of
     all users is necessary in comm_flush() and comm_confirm(), respectively.
   - Patched up some cases where bad connections were not closed.
   - Moved call to comm_init() to a better place.
   - send_message(-1) can be used to ask if the previous message is done.
     It will return 0 if all output has been written.  Otherwise, it will
     return 1 and the driver will call message_done() when all output has
     been written.
   - If receive_message() or receive_datagram() returns 1, and there is
     no more data available during the next input round, the driver will
     call process_message() or process_datagram() in the object.
   - Memory allocation in comm_send() rounds up to nearest 8k boundary,
     to help the static memory allocator.

Release 9:
   - process_message() and process_datagram() now actually work.

Release 10:
   - Avoided memmove().
   - Made "protocol" argument of connect() optional.
   - Switched arguments of open_port() and made the port number optional.
   - Bugfix: comm_new() now calls conn_del(conn) if there is an error. [rare]
   - Started adding telnet flow control.
   - Fixed infinite loop bug in comm_write().
   - Added user->optbuf and introduced comm_telopt.
   - Added telnet_fill() and made comm_send() and comm_write() use it.
   - Completed telnet flow control.
   - Simplification: Added comm_user_call() and made comm_receive() use it.
   - Instead of errors in kfun connect(), call close() later on.
   - Checked for destructed user object after receive_message() and friends.
   - Added comm_add_goahead() and made callers of comm_flush() use it.
     comm_flush() no longer has a "prompt" parameter.
   - Bugfix: Calling kfun connect() from port->connection() while
     number of users is at maximum will no longer crash the driver.
   - Made comm_confirm() be less eager to push and pop error contexts.

   This package is now complete.  Any further changes will be to fix bugs
   or to track new DGD versions.

Maintenance of package now done by by Erwin Harte.

   - Work-around for Linux-bug with non-blocking connections.
   - Fixed possible crasher in call to connection().
   - Prevented open_port() or connect() from having any effect if done from
     within close() call in the kfun destruct_object().
   - Added netpackage-specific version of block_input() that also works on
     port-objects.