# ALPHA-TEST release of LambdaMOO version 1.8.0alpha4

Pavel Curtis (pavel@parc.xerox.com)
Sat, 30 Dec 1995 19:42:26 PST

- Messages sorted by:[ date ][ thread ][ subject ][ author ]

    I have made (yet) another *alpha-test* release of version 1.8.0 of the
    LambdaMOO server in the usual place:

    	ftp://ftp.parc.xerox.com/pub/MOO/LambdaMOO-1.8.0alpha4.tar.Z

    This is still an ALPHA TEST release of the server and, although a number of
    nasty bugs from the previous release have been fixed, there are almost
    certainly some more server-crashing, database-losing bugs remaining, so please
    DO NOT USE THIS RELEASE IN A PRODUCTION SETTING!

    Please continue to send your bug reports to the main MOO-Cows mailing list so
    that everyone can stay informed and we can perhaps thereby cut down on useless
    duplication of bug reporting.

    I still expect to make more test releases before the final, production-approved
    one.  For particularly nasty reported bugs, I will either make another test
    release containing the fix or else send out a patch; announcements of new test
    releases will be made to MOO-Cows-Announce, but all test-release patches will
    just be posted to the main MOO-Cows list, to reduce the amount of noise on the
    -Announce list.

    NOTE that there is an important compatibility `NOTE' in the ChangeLog.txt entry
    for this release; PLEASE read it BEFORE trying out this version of the server.

    Here's the ChangeLog.txt entry for this release:
    -------------------------------------------------------------------------------
    Version 1.8.0alpha4, 30 December 1995
    -- Fixed foolish C-syntax bug in the delete_verb() built-in.  (Thanks to Brian
       Buchanan and Nate Massey for finding this.)
    -- Fixed configuration problem on FreeBSD and perhaps other platforms.  (Thanks
       again to Brian Buchanan for pointing this out.)
    -- Fixed compilation warning in net_bsd_tcp.c when OUTBOUND_NETWORK was
       defined.  (Thanks to Martian and others for reporting this.)
    -- Fixed nasty occasional memory smash in delete_property().  (Thanks to Kai
       Storbeck for reporting it.)
    -- All DB-configurable messages (e.g., $server_options.timeout_msg, etc.) can
       now be given as either a string or a list of strings; in the latter case,
       each string will be printed on a separate line.
    -- New DB-configurable message $server_options.server_full_msg is printed to
       any connection that arrives when the server really can't accept any more
       connections; after printing the message, the temporarily-accepted connection
       is immediately closed.  The default for this message is as was formerly
       hardwired into the server:
            *** Sorry, but the server cannot accept any more connections right now.
    	*** Please try again later.
    -- The DB-configurable messages are no longer printed on outbound connections.
    -- Added a version of the MPL (multiple-port listening) extension first
       implemented by Ivan Judson.  This involves the addition of three new
       built-in functions:
    	listen(OBJ, DESC [, PRINT_MESSAGES]) => CANON_DESC
    	    Create a new point at which the server will listen for network
    	    connections, just as it does normally.  OBJ is the object whose
    	    verbs :do_login_command, :do_command, :do_out_of_band_command,
    	    :user_connected, :user_created, :user_reconnected,
    	    :user_disconnected, and :user_client_disconnected will be called at
    	    appropriate points, just like these verbs are called on #0 for
    	    normal connections.  (If a user reconnects and the user's old and
    	    new connections are on two different listening points being handled
    	    by different objects, then :user_client_disconnected is called for
    	    the old connection and :user_connected for the new one.)  DESC is a
    	    network-configuration- specific parameter describing the listening
    	    point.  For the TCP configurations, DESC is a port number on which
    	    to listen.  If PRINT_MESSAGES is provided and true, then the
    	    various DB- configurable messages will be printed on connections
    	    received at the new listening point.  CANON_DESC is a
    	    `canonicalized' version of DESC, with any configuration-specific
    	    defaulting or aliasing accounted for.  For the TCP configurations,
    	    CANON_DESC is equal to DESC unless DESC is zero, in which case
    	    CANON_DESC is a port number assigned by the operating system.  This
    	    raises E_PERM if the programmer is not a wizard, E_INVARG if OBJ is
    	    invalid or there is already a listening point described by DESC,
    	    and E_QUOTA if some network-configuration-specific error occurred.
    	unlisten(DESC)
    	    Stop listening for connections on the point described by DESC,
    	    which should be a value returned by some successful call to
    	    listen().  Raises E_PERM if the programmer is not a wizard and
    	    E_INVARG if there does not exist a listener with that description.
    	listeners() => {{OBJ, DESC, PRINT_MESSAGES}, ...}
    	    Returns a list of all existing listeners, including the default one
    	    set up by the server at boot time.
       I believe that this implementation is upward-compatible with the existing
       uses of Ivan's package.  As far as I know, the only differences are that his
       package did not have the PRINT_MESSAGES argument to listen(), did not work
       for the non-BSD/TCP networking configurations, did not call :do_command or
       :do_out_of_band_command, did not distinguish the case of a user reconnecting
       on a different listening point, and did not have the listeners() function.
          Please note that there is now nothing special about the initial listening
       point created by the server at boot time; you can use unlisten() on it just
       as if it had been created by listen().  This can be useful; for example, you
       might start up your server on some obscure port, say 12345, connect to it by
       yourself for a while, and then open it up to normal users with the command
    	;;unlisten(12345); listen(#0, 7777, 1)
    -- Changed the result of connection_name() to expose information about the
       listening point on which the connection was accepted.  For the TCP
       networking configurations, the format is now:
    	  "port 7777 from foo.bar.com, port 3456"
       where 7777 is the server port on which the connection arrived and the rest
       is as before.
       ********** Before upgrading an existing LambdaCore-based MOO to use this
       ** NOTE ** version of the server, you should modify the verb
       ********** $string_utils:connection_hostname_bsd as follows:
    		    @program $string_utils:connection_hostname_bsd
    		    s = args[1];
    		    m = match(s, "^.* %(from%|to%) %([^, ]+%)");
    		    return m ? substitute("%2", m) | "";
    		    .
       This code should work compatibly with any version of the server since 1.6.0.
    -- Added a new kind of expression, allowed only within the indexing/subranging
       brackets `[...]'; in this context, the expression `$' means the length of
       the value being indexed or subranged.  This allows, for example, expressions
       like `x[2..$]' to get the `rest' of a list after the first element or
       `x[random($)]' to get a random element of a list.  You can also use this on
       the left-hand side of an assignment; for example `x[$] = 7' sets the last
       element of a list, and `x[$+1..$] = {y}' adds y onto the end of the list x.
       My favorite abuse of the new syntax is `x[l = $]' as a substitute for the
       verbose and now old-fashioned `l = length(x)'.
    -- Fixed longstanding bug in `client_sysv', the client for the SYSV/LOCAL
       networking configuration; it never worked to specify a server connection
       file on the command line!
    -------------------------------------------------------------------------------