MOO-cows Mailing List Archive
[Prev][Next][Index][Thread]
ALPHA-TEST release of LambdaMOO version 1.8.0alpha4
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!
-------------------------------------------------------------------------------
Home |
Subject Index |
Thread Index