From f982e85f047508420657807d0d1614ec2fbab7a2 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Mon, 7 Jun 2004 16:41:29 +0000 Subject: [PATCH] * Changed "express message" to "instant message" everywhere in the code and documentation, to reflect the now industry-standard terminology for this function. (Obviously, the server command names have not changed, because that would break everything.) --- citadel/ChangeLog | 10 +++++-- citadel/citadel.c | 2 +- citadel/citadel_decls.h | 2 +- citadel/citadel_ipc.c | 4 +-- citadel/citserver.c | 2 +- citadel/client_chat.c | 2 +- citadel/commands.c | 24 ++++++++-------- citadel/docs/citadel.html | 2 +- citadel/imap_misc.c | 4 +-- citadel/imap_misc.h | 2 +- citadel/serv_chat.c | 36 ++++++++++++------------ citadel/serv_chat.h | 4 +-- citadel/serv_imap.c | 2 +- citadel/server.h | 4 +-- citadel/techdoc/session.txt | 56 +++++++++++++++++++------------------ 15 files changed, 82 insertions(+), 74 deletions(-) diff --git a/citadel/ChangeLog b/citadel/ChangeLog index 2f66c817a..398c676a2 100644 --- a/citadel/ChangeLog +++ b/citadel/ChangeLog @@ -1,11 +1,17 @@ $Log$ + Revision 621.8 2004/06/07 16:41:28 ajc + * Changed "express message" to "instant message" everywhere in the code + and documentation, to reflect the now industry-standard terminology for + this function. (Obviously, the server command names have not changed, + because that would break everything.) + Revision 621.7 2004/06/06 22:30:10 ajc * New session scheduler. All sessions which select() marks for activity are now handled before select() is called again. Revision 621.6 2004/06/03 02:49:14 ajc - * html.c: allow parsing of tags even when they're qualified (i.e. - instead of just ) + * html.c: allow parsing of tags even when they're qualified + (i.e. instead of just ) * html.c: handle escaped decimal characters (such as ' for an apostrophe) Revision 621.5 2004/06/03 02:28:16 ajc diff --git a/citadel/citadel.c b/citadel/citadel.c index d400ca56c..f99cbb7f9 100644 --- a/citadel/citadel.c +++ b/citadel/citadel.c @@ -100,7 +100,7 @@ int termn8 = 0; /* Set to nonzero to cause a logoff */ int secure; /* Set to nonzero when wire is encrypted */ int can_do_msg4 = 0; /* Set to nonzero if the server can handle MSG4 commands */ -extern char express_msgs; /* express messages waiting! */ +extern char instant_msgs; /* instant messages waiting! */ extern int rc_ansi_color; /* ansi color value from citadel.rc */ extern int next_lazy_cmd; diff --git a/citadel/citadel_decls.h b/citadel/citadel_decls.h index 0b1181eab..0daa6c2f3 100644 --- a/citadel/citadel_decls.h +++ b/citadel/citadel_decls.h @@ -25,7 +25,7 @@ extern char arg_screen; #endif extern char rc_alt_semantics; extern char rc_reply_extedit; -extern char express_msgs; +extern char instant_msgs; void logoff(CtdlIPC *ipc, int code); void formout(CtdlIPC *ipc, char *name); void sighandler(int which_sig); diff --git a/citadel/citadel_ipc.c b/citadel/citadel_ipc.c index 48338024e..103bc5b3e 100644 --- a/citadel/citadel_ipc.c +++ b/citadel/citadel_ipc.c @@ -63,7 +63,7 @@ void CtdlIPC_SetNetworkStatusCallback(CtdlIPC *ipc, void (*hook)(int state)) { } -char express_msgs = 0; +char instant_msgs = 0; static void serv_read(CtdlIPC *ipc, char *buf, unsigned int bytes); @@ -2388,7 +2388,7 @@ int CtdlIPCGenericCommand(CtdlIPC *ipc, while (1) { CtdlIPC_getline(ipc, proto_response); if (proto_response[3] == '*') - express_msgs = 1; + instant_msgs = 1; ret = atoi(proto_response); strcpy(proto_response, &proto_response[4]); switch (ret / 100) { diff --git a/citadel/citserver.c b/citadel/citserver.c index 6612d1f91..cbd012cf7 100644 --- a/citadel/citserver.c +++ b/citadel/citserver.c @@ -361,7 +361,7 @@ void cmd_info(void) { /* - * returns an asterisk if there are any express messages waiting, + * returns an asterisk if there are any instant messages waiting, * space otherwise. */ char CtdlCheckExpress(void) { diff --git a/citadel/client_chat.c b/citadel/client_chat.c index cf559526a..1c2369a63 100644 --- a/citadel/client_chat.c +++ b/citadel/client_chat.c @@ -225,7 +225,7 @@ RCL: if (send_complete_line) { } /* - * send an express message + * send an instant message */ void page_user(CtdlIPC *ipc) { diff --git a/citadel/commands.c b/citadel/commands.c index 149f09581..d6e1b04b8 100644 --- a/citadel/commands.c +++ b/citadel/commands.c @@ -94,7 +94,7 @@ struct citcmd *cmdlist = NULL; /* these variables are local to this module */ char keepalives_enabled = KA_YES; /* send NOOPs to server when idle */ -int ok_to_interrupt = 0; /* print express msgs asynchronously */ +int ok_to_interrupt = 0; /* print instant msgs asynchronously */ time_t AnsiDetect; /* when did we send the detect code? */ int enable_color = 0; /* nonzero for ANSI color */ @@ -199,9 +199,9 @@ void pprintf(const char *format, ...) { /* - * print_express() - print express messages if there are any + * print_instant() - print instant messages if there are any */ -void print_express(void) +void print_instant(void) { char buf[1024]; FILE *outpipe; @@ -213,7 +213,7 @@ void print_express(void) char *listing = NULL; int r; /* IPC result code */ - if (express_msgs == 0) + if (instant_msgs == 0) return; if (rc_exp_beep) { @@ -224,12 +224,12 @@ void print_express(void) scr_printf("\r---"); } - while (express_msgs != 0) { + while (instant_msgs != 0) { r = CtdlIPCGetInstantMessage(ipc_for_signal_handlers, &listing, buf); if (r / 100 != 1) return; - express_msgs = extract_int(buf, 0); + instant_msgs = extract_int(buf, 0); timestamp = extract_long(buf, 1); flags = extract_int(buf, 2); extract(sender, buf, 3); @@ -274,12 +274,12 @@ void print_express(void) fprintf(outpipe, " @%s", node); fprintf(outpipe, ":\n%s\n", listing); pclose(outpipe); - if (express_msgs == 0) + if (instant_msgs == 0) return; continue; } } - /* fall back to built-in express message display */ + /* fall back to built-in instant message display */ scr_printf("\n"); lines_printed++; @@ -361,10 +361,10 @@ static void really_do_keepalive(void) { */ if (keepalives_enabled == KA_YES) { r = CtdlIPCNoop(ipc_for_signal_handlers); - if (express_msgs > 0) { + if (instant_msgs > 0) { if (ok_to_interrupt == 1) { scr_printf("\r%64s\r", ""); - print_express(); + print_instant(); scr_printf("%s%c ", room_name, room_prompt(room_flags)); scr_flush(); @@ -616,7 +616,7 @@ void strprompt(char *prompt, char *str, int len) int i; char buf[128]; - print_express(); + print_instant(); color(DIM_WHITE); scr_printf("%s ", prompt); color(DIM_MAGENTA); @@ -1086,7 +1086,7 @@ int getcmd(CtdlIPC *ipc, char *argbuf) /* if we're running in idiot mode, display a cute little menu */ IFNEXPERT formout(ipc, "mainmenu"); - print_express(); + print_instant(); strcpy(argbuf, ""); cmdpos = 0; for (a = 0; a < 5; ++a) diff --git a/citadel/docs/citadel.html b/citadel/docs/citadel.html index 27aa43417..9c070724e 100644 --- a/citadel/docs/citadel.html +++ b/citadel/docs/citadel.html @@ -1830,7 +1830,7 @@ the server from a shell and watch it load. It might look something like this:

-
smw @ pixel % ./citserver

Multithreaded message server for Citadel/UX
Copyright (C) 1987-2003 by the Citadel/UX development team.
Citadel/UX is open source, covered by the GNU General Public License, and
you are welcome to change it and/or distribute copies of it under certain
conditions. There is absolutely no warranty for this software. Please
read the 'COPYING.txt' file for details.

Loading citadel.config
Opening databases
This is GDBM version 1.8.0, as of May 19, 1999.
Checking floor reference counts
Creating base rooms (if necessary)
Registered a new service (TCP port 504)
Registered a new service (TCP port 0)
Initializing loadable modules
Registered server command CHAT (Begin real-time chat)
Registered server command PEXP (Poll for express messages)
Registered server command GEXP (Get express messages)
Registered server command SEXP (Send an express message)
Registered server command DEXP (Disable express messages)
Registered a new session function (type 0)
Registered a new x-msg function (priority 0)
Loaded module: $Id$
Registered a new session function (type 1)
Registered a new message function (type 201)
Registered a new message function (type 202)
Registered server command REGI (Enter registration info)
Registered server command GREG (Get registration info)
Registered a new user function (type 100)
Loaded module: $Id$
Server-hosted upgrade level is 5.62
Loaded module: $Id$
Registered server command EXPI (Expire old system objects)
Registered server command FSCK (Check message ref counts)
Loaded module: $Id$
citserver: Can't bind: Address already in use
ERROR: could not bind to TCP port 25.

Registered a new service (TCP port 0)
Registered a new session function (type 50)
Loaded module: $Id$
citserver: Can't bind: Address already in use
ERROR: could not bind to TCP port 110.

Registered a new session function (type 0)
Loaded module: $Id$
Registered a new message function (type 202)Loaded module: $Id$
Registered server command RWHO (Display who is online)
Registered server command HCHG (Masquerade hostname)
Registered server command RCHG (Masquerade roomname)
Registered server command UCHG (Masquerade username)
Registered server command STEL (Enter/exit stealth mode)
Loaded module: $Id$
Changing uid to 513
Starting housekeeper thread
+
smw @ pixel % ./citserver

Multithreaded message server for Citadel/UX
Copyright (C) 1987-2003 by the Citadel/UX development team.
Citadel/UX is open source, covered by the GNU General Public License, and
you are welcome to change it and/or distribute copies of it under certain
conditions. There is absolutely no warranty for this software. Please
read the 'COPYING.txt' file for details.

Loading citadel.config
Opening databases
This is GDBM version 1.8.0, as of May 19, 1999.
Checking floor reference counts
Creating base rooms (if necessary)
Registered a new service (TCP port 504)
Registered a new service (TCP port 0)
Initializing loadable modules
Registered server command CHAT (Begin real-time chat)
Registered server command PEXP (Poll for instant messages)
Registered server command GEXP (Get instant messages)
Registered server command SEXP (Send an instant message)
Registered server command DEXP (Disable instant messages)
Registered a new session function (type 0)
Registered a new x-msg function (priority 0)
Loaded module: $Id$
Registered a new session function (type 1)
Registered a new message function (type 201)
Registered a new message function (type 202)
Registered server command REGI (Enter registration info)
Registered server command GREG (Get registration info)
Registered a new user function (type 100)
Loaded module: $Id$
Server-hosted upgrade level is 5.62
Loaded module: $Id$
Registered server command EXPI (Expire old system objects)
Registered server command FSCK (Check message ref counts)
Loaded module: $Id$
citserver: Can't bind: Address already in use
ERROR: could not bind to TCP port 25.

Registered a new service (TCP port 0)
Registered a new session function (type 50)
Loaded module: $Id$
citserver: Can't bind: Address already in use
ERROR: could not bind to TCP port 110.

Registered a new session function (type 0)
Loaded module: $Id$
Registered a new message function (type 202)Loaded module: $Id$
Registered server command RWHO (Display who is online)
Registered server command HCHG (Masquerade hostname)
Registered server command RCHG (Masquerade roomname)
Registered server command UCHG (Masquerade username)
Registered server command STEL (Enter/exit stealth mode)
Loaded module: $Id$
Changing uid to 513
Starting housekeeper thread

The lines emphasized in boldface in the above log output tell you that Citadel "can't bind" to various ports. The error 'address already in use' generally means that something else is already running on the diff --git a/citadel/imap_misc.c b/citadel/imap_misc.c index 8b56dfae2..882fbbdd6 100644 --- a/citadel/imap_misc.c +++ b/citadel/imap_misc.c @@ -135,9 +135,9 @@ void imap_uidcopy(int num_parms, char *parms[]) { /* - * Poll for express messages (yeah, we can do this in IMAP ... I think) + * Poll for instant messages (yeah, we can do this in IMAP ... I think) */ -void imap_print_express_messages(void) { +void imap_print_instant_messages(void) { struct ExpressMessage *ptr, *holdptr; char *dumpomatic = NULL; char tmp[SIZ]; diff --git a/citadel/imap_misc.h b/citadel/imap_misc.h index 27f1d3260..7fec93635 100644 --- a/citadel/imap_misc.h +++ b/citadel/imap_misc.h @@ -5,5 +5,5 @@ void imap_copy(int num_parms, char *parms[]); void imap_uidcopy(int num_parms, char *parms[]); -void imap_print_express_messages(void); +void imap_print_instant_messages(void); void imap_append(int num_parms, char *parms[]); diff --git a/citadel/serv_chat.c b/citadel/serv_chat.c index a88f97258..e21da82f8 100644 --- a/citadel/serv_chat.c +++ b/citadel/serv_chat.c @@ -408,9 +408,9 @@ void cmd_chat(char *argbuf) /* - * Delete any remaining express messages + * Delete any remaining instant messages */ -void delete_express_messages(void) { +void delete_instant_messages(void) { struct ExpressMessage *ptr; begin_critical_section(S_SESSION_TABLE); @@ -428,14 +428,14 @@ void delete_express_messages(void) { /* - * Poll for express messages (OLD METHOD -- ***DEPRECATED ***) + * Poll for instant messages (OLD METHOD -- ***DEPRECATED ***) */ void cmd_pexp(char *argbuf) { struct ExpressMessage *ptr, *holdptr; if (CC->FirstExpressMessage == NULL) { - cprintf("%d No express messages waiting.\n", ERROR + MESSAGE_NOT_FOUND); + cprintf("%d No instant messages waiting.\n", ERROR + MESSAGE_NOT_FOUND); return; } begin_critical_section(S_SESSION_TABLE); @@ -467,13 +467,13 @@ void cmd_pexp(char *argbuf) /* - * Get express messages (new method) + * Get instant messages (new method) */ void cmd_gexp(char *argbuf) { struct ExpressMessage *ptr; if (CC->FirstExpressMessage == NULL) { - cprintf("%d No express messages waiting.\n", ERROR + MESSAGE_NOT_FOUND); + cprintf("%d No instant messages waiting.\n", ERROR + MESSAGE_NOT_FOUND); return; } @@ -499,7 +499,7 @@ void cmd_gexp(char *argbuf) { } /* - * Asynchronously deliver express messages' + * Asynchronously deliver instant messages */ void cmd_gexp_async(void) { @@ -509,12 +509,12 @@ void cmd_gexp_async(void) { /* And don't do it if there's nothing to send. */ if (CC->FirstExpressMessage == NULL) return; - cprintf("%d express msg\n", ASYNC_MSG + ASYNC_GEXP); + cprintf("%d instant msg\n", ASYNC_MSG + ASYNC_GEXP); cmd_gexp(""); } /* - * Back end support function for send_express_message() and company + * Back end support function for send_instant_message() and company */ void add_xmsg_to_context(struct CitContext *ccptr, struct ExpressMessage *newmsg) @@ -537,11 +537,11 @@ void add_xmsg_to_context(struct CitContext *ccptr, /* - * This is the back end to the express message sending function. + * This is the back end to the instant message sending function. * Returns the number of users to which the message was sent. * Sending a zero-length message tests for recipients without sending messages. */ -int send_express_message(char *lun, char *x_user, char *x_msg) +int send_instant_message(char *lun, char *x_user, char *x_msg) { int message_sent = 0; /* number of successful sends */ @@ -652,7 +652,7 @@ int send_express_message(char *lun, char *x_user, char *x_msg) } /* - * send express messages + * send instant messages */ void cmd_sexp(char *argbuf) { @@ -798,14 +798,14 @@ void cmd_reqt(char *argbuf) { char *serv_chat_init(void) { CtdlRegisterProtoHook(cmd_chat, "CHAT", "Begin real-time chat"); - CtdlRegisterProtoHook(cmd_pexp, "PEXP", "Poll for express messages"); - CtdlRegisterProtoHook(cmd_gexp, "GEXP", "Get express messages"); - CtdlRegisterProtoHook(cmd_sexp, "SEXP", "Send an express message"); - CtdlRegisterProtoHook(cmd_dexp, "DEXP", "Disable express messages"); + CtdlRegisterProtoHook(cmd_pexp, "PEXP", "Poll for instant messages"); + CtdlRegisterProtoHook(cmd_gexp, "GEXP", "Get instant messages"); + CtdlRegisterProtoHook(cmd_sexp, "SEXP", "Send an instant message"); + CtdlRegisterProtoHook(cmd_dexp, "DEXP", "Disable instant messages"); CtdlRegisterProtoHook(cmd_reqt, "REQT", "Request client termination"); CtdlRegisterSessionHook(cmd_gexp_async, EVT_CMD); - CtdlRegisterSessionHook(delete_express_messages, EVT_STOP); - CtdlRegisterXmsgHook(send_express_message, XMSG_PRI_LOCAL); + CtdlRegisterSessionHook(delete_instant_messages, EVT_STOP); + CtdlRegisterXmsgHook(send_instant_message, XMSG_PRI_LOCAL); return "$Id$"; } diff --git a/citadel/serv_chat.h b/citadel/serv_chat.h index d5e9d34cd..f16f83a64 100644 --- a/citadel/serv_chat.h +++ b/citadel/serv_chat.h @@ -6,9 +6,9 @@ void do_chat_listing (int allflag); void cmd_chat (char *argbuf); void cmd_pexp (char *argbuf); /* arg unused */ void cmd_sexp (char *argbuf); -void delete_express_messages(void); +void delete_instant_messages(void); void cmd_gexp(char *); -int send_express_message(char *, char *, char *); +int send_instant_message(char *, char *, char *); struct savelist { struct savelist *next; diff --git a/citadel/serv_imap.c b/citadel/serv_imap.c index 23ca7a1d1..f448ecf40 100644 --- a/citadel/serv_imap.c +++ b/citadel/serv_imap.c @@ -1267,7 +1267,7 @@ void imap_command_loop(void) /* Ok, at this point we're in normal command mode. The first thing * we do is print any incoming pages (yeah! we really do!) */ - imap_print_express_messages(); + imap_print_instant_messages(); /* * Before processing the command that was just entered... if we happen diff --git a/citadel/server.h b/citadel/server.h index 1e8eea5a3..f33db3bc5 100644 --- a/citadel/server.h +++ b/citadel/server.h @@ -129,7 +129,7 @@ struct CitContext { char *output_buffer; /* hold output for one big dump */ int buffer_len; - /* A linked list of all express messages sent to us. */ + /* A linked list of all instant messages sent to us. */ struct ExpressMessage *FirstExpressMessage; int disable_exp; /* Set to 1 to disable incoming pages */ int newmail; /* Other sessions increment this */ @@ -378,7 +378,7 @@ extern struct DeleteFunctionHook *DeleteHookTable; /* * ExpressMessageFunctionHook extensions are used for hooks which implement - * the sending of an express message through various channels. Any function + * the sending of an instant message through various channels. Any function * registered should return the number of recipients to whom the message was * successfully transmitted. */ diff --git a/citadel/techdoc/session.txt b/citadel/techdoc/session.txt index 010f8188d..b498c54eb 100644 --- a/citadel/techdoc/session.txt +++ b/citadel/techdoc/session.txt @@ -1449,11 +1449,13 @@ will be a regular server command. to other users currently in chat. - SEXP (Send EXPress messages) + SEXP (Send instant message) - This is one of two commands which implement "express messages" (also known -as "paging"). An express message is a near-real-time message sent from one -logged in user to another. When an express message is sent, it will be + This is one of two commands which implement instant messages (also known +as "paging"). Commands ending in "...EXP" are so-named because we called +them "express messages" before the industry standardized on the term +"instant messages." When an instant message is sent, it will be +logged in user to another. When an instant message is sent, it will be displayed the next time the target user executes a PEXP or GEXP command. The SEXP command accepts two arguments: the name of the user to send the @@ -1468,28 +1470,28 @@ the server to return SEND_LISTING if the requested user is logged in, and the client can then transmit a multi-line page. The reserved name "broadcast" may be used instead of a user name, to -broadcast an express message to all users currently connected to the server. +broadcast an instant message to all users currently connected to the server. - Do be aware that if an express message is transmitted to a user who is logged -in using a client that does not check for express messages, the message will -never be received. Also, express messages are NOT sent via the following + Do be aware that if an instant message is transmitted to a user who is logged +in using a client that does not check for instant messages, the message will +never be received. Also, instant messages are NOT sent via the following transports: SMTP, POP3. - PEXP (Print EXPress messages) ***DEPRECATED*** + PEXP (Print instant messages) ***DEPRECATED*** This command is deprecated; it will eventually disappear from the protocol and its use is not recommended. Please use the GEXP command instead. Called without any arguments, PEXP simply dumps out the contents -of any waiting express messages. It returns ERROR if there is a problem, +of any waiting instant messages. It returns ERROR if there is a problem, otherwise it returns LISTING_FOLLOWS followed by all messages. - So how does the client know there are express messages waiting? It could + So how does the client know there are instant messages waiting? It could execute a random PEXP every now and then. Or, it can check the byte in server return code messages, between the return code and the parameters. In much the same way as FTP uses "-" to signify a continuation, Citadel uses -an "*" in this position to signify the presence of waiting express messages. +an "*" in this position to signify the presence of waiting instant messages. EBIO (Enter BIOgraphy) @@ -1773,7 +1775,7 @@ fails for any reason, ERROR is returned. 16. (placeholder -- this field is no longer in use) 17. Default purge time (in days) for users 18. Default purge time (in days) for rooms - 19. Name of room to log express messages to (or a zero-length name for none) + 19. Name of room to log instant messages to (or a zero-length name for none) 20. Access level required to create rooms 21. Maximum message length which may be entered into the system 22. Minimum number of worker threads @@ -1838,26 +1840,26 @@ appropriate ERROR code will be returned; otherwise, if the open is successful, this command will succeed returning the same information as an OPEN command. - GEXP (Get EXPress messages) + GEXP (Get instant messages) - This is a more sophisticated way of retrieving express messages than the old -PEXP method. If there are no express messages waiting, PEXP returns ERROR; + This is a more sophisticated way of retrieving instant messages than the old +PEXP method. If there are no instant messages waiting, PEXP returns ERROR; otherwise, it returns LISTING_FOLLOWS and the following arguments: 0 - a boolean value telling the client whether there are any additional - express messages waiting following this one + instant messages waiting following this one 1 - a Unix-style timestamp 2 - flags (see server.h for more info) 3 - the name of the sender 4 - the node this message originated on (for future support of PIP, ICQ, etc.) - The text sent to the client will be the body of the express message. + The text sent to the client will be the body of the instant message. - So how does the client know there are express messages waiting? It could + So how does the client know there are instant messages waiting? It could execute a random GEXP every now and then. Or, it can check the byte in server return code messages, between the return code and the parameters. In much the same way as FTP uses "-" to signify a continuation, Citadel uses -an "*" in this position to signify the presence of waiting express messages. +an "*" in this position to signify the presence of waiting instant messages. FSCK (check message base reference counts) @@ -1867,11 +1869,11 @@ the user has permission to do this then LISTING_FOLLOWS is returned, followed by a transcript of the run. Otherwise ERROR is returned. - DEXP (Disable EXPress messages) + DEXP (Disable receiving instant messages) - DEXP sets or clears the "disable express messages" flag. Pass this command a -1 or 0 to respectively set or clear the flag. When the "disable express -messages" flag is set, no one except Aides may send the user express messages. + DEXP sets or clears the "disable instant messages" flag. Pass this command a +1 or 0 to respectively set or clear the flag. When the "disable instant +messages" flag is set, no one except Aides may send the user instant messages. Any value other than 0 or 1 will not change the flag, only report its state. The command returns ERROR if it fails; otherwise, it returns OK followed by a number representing the current state of the flag. @@ -1887,7 +1889,7 @@ is returned. should be terminated, or 0 for all clients. When successful, the REQT command returns OK. - It should be noted that REQT simply transmits an express message to the + It should be noted that REQT simply transmits an instant message to the specified client(s) with the EM_GO_AWAY flag set. Older clients do not honor this flag, and it is certainly possible for users to re-program their client software to ignore it. Therefore the effects of the REQT command should be @@ -2133,9 +2135,9 @@ the writeup of the ASYN command above), the following messages may arrive at any time: - 901 (express message arriving) + 901 (instant message arriving) - There is an express message intended for this client. When the client + One or more instant messages have arrived for this client. When the client receives this message, it MUST act as if it just sent a GEXP command (the data following the 901 message WILL be a LISTING_FOLLOWS data transfer; in fact, the current implementation simply executes a GEXP command internally). -- 2.39.2