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.)
15 files changed:
+ 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
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. <TAG foo=bar>
- instead of just <TAG> )
+ * html.c: allow parsing of tags even when they're qualified
+ (i.e. <TAG foo=bar> instead of just <TAG> )
* html.c: handle escaped decimal characters (such as ' for an apostrophe)
Revision 621.5 2004/06/03 02:28:16 ajc
* html.c: handle escaped decimal characters (such as ' for an apostrophe)
Revision 621.5 2004/06/03 02:28:16 ajc
int secure; /* Set to nonzero when wire is encrypted */
int can_do_msg4 = 0; /* Set to nonzero if the server can handle MSG4 commands */
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;
extern int rc_ansi_color; /* ansi color value from citadel.rc */
extern int next_lazy_cmd;
#endif
extern char rc_alt_semantics;
extern char rc_reply_extedit;
#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);
void logoff(CtdlIPC *ipc, int code);
void formout(CtdlIPC *ipc, char *name);
void sighandler(int which_sig);
static void serv_read(CtdlIPC *ipc, char *buf, unsigned int bytes);
static void serv_read(CtdlIPC *ipc, char *buf, unsigned int bytes);
while (1) {
CtdlIPC_getline(ipc, proto_response);
if (proto_response[3] == '*')
while (1) {
CtdlIPC_getline(ipc, proto_response);
if (proto_response[3] == '*')
ret = atoi(proto_response);
strcpy(proto_response, &proto_response[4]);
switch (ret / 100) {
ret = atoi(proto_response);
strcpy(proto_response, &proto_response[4]);
switch (ret / 100) {
- * 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) {
* space otherwise.
*/
char CtdlCheckExpress(void) {
- * send an express message
+ * send an instant message
*/
void page_user(CtdlIPC *ipc)
{
*/
void page_user(CtdlIPC *ipc)
{
/* these variables are local to this module */
char keepalives_enabled = KA_YES; /* send NOOPs to server when idle */
/* 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 */
time_t AnsiDetect; /* when did we send the detect code? */
int enable_color = 0; /* nonzero for ANSI color */
- * 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;
{
char buf[1024];
FILE *outpipe;
char *listing = NULL;
int r; /* IPC result code */
char *listing = NULL;
int r; /* IPC result code */
return;
if (rc_exp_beep) {
return;
if (rc_exp_beep) {
- while (express_msgs != 0) {
+ while (instant_msgs != 0) {
r = CtdlIPCGetInstantMessage(ipc_for_signal_handlers, &listing, buf);
if (r / 100 != 1)
return;
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);
timestamp = extract_long(buf, 1);
flags = extract_int(buf, 2);
extract(sender, buf, 3);
fprintf(outpipe, " @%s", node);
fprintf(outpipe, ":\n%s\n", listing);
pclose(outpipe);
fprintf(outpipe, " @%s", node);
fprintf(outpipe, ":\n%s\n", listing);
pclose(outpipe);
- /* fall back to built-in express message display */
+ /* fall back to built-in instant message display */
scr_printf("\n");
lines_printed++;
scr_printf("\n");
lines_printed++;
*/
if (keepalives_enabled == KA_YES) {
r = CtdlIPCNoop(ipc_for_signal_handlers);
*/
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", "");
if (ok_to_interrupt == 1) {
scr_printf("\r%64s\r", "");
scr_printf("%s%c ", room_name,
room_prompt(room_flags));
scr_flush();
scr_printf("%s%c ", room_name,
room_prompt(room_flags));
scr_flush();
color(DIM_WHITE);
scr_printf("%s ", prompt);
color(DIM_MAGENTA);
color(DIM_WHITE);
scr_printf("%s ", prompt);
color(DIM_MAGENTA);
/* if we're running in idiot mode, display a cute little menu */
IFNEXPERT formout(ipc, "mainmenu");
/* if we're running in idiot mode, display a cute little menu */
IFNEXPERT formout(ipc, "mainmenu");
strcpy(argbuf, "");
cmdpos = 0;
for (a = 0; a < 5; ++a)
strcpy(argbuf, "");
cmdpos = 0;
for (a = 0; a < 5; ++a)
server from a shell and watch it load. It might look something like
this:</p>
<font size="-2"> </font>
server from a shell and watch it load. It might look something like
this:</p>
<font size="-2"> </font>
-<pre><font size="-2">smw @ pixel % ./citserver<br><br>Multithreaded message server for Citadel/UX<br>Copyright (C) 1987-2003 by the Citadel/UX development team.<br>Citadel/UX is open source, covered by the GNU General Public License, and<br>you are welcome to change it and/or distribute copies of it under certain<br>conditions. There is absolutely no warranty for this software. Please<br>read the 'COPYING.txt' file for details.<br><br>Loading citadel.config<br>Opening databases<br>This is GDBM version 1.8.0, as of May 19, 1999.<br>Checking floor reference counts<br>Creating base rooms (if necessary)<br>Registered a new service (TCP port 504)<br>Registered a new service (TCP port 0)<br>Initializing loadable modules<br>Registered server command CHAT (Begin real-time chat)<br>Registered server command PEXP (Poll for express messages)<br>Registered server command GEXP (Get express messages)<br>Registered server command SEXP (Send an express message)<br>Registered server command DEXP (Disable express messages)<br>Registered a new session function (type 0)<br>Registered a new x-msg function (priority 0)<br>Loaded module: $Id$<br>Registered a new session function (type 1)<br>Registered a new message function (type 201)<br>Registered a new message function (type 202)<br>Registered server command REGI (Enter registration info)<br>Registered server command GREG (Get registration info)<br>Registered a new user function (type 100)<br>Loaded module: $Id$<br>Server-hosted upgrade level is 5.62<br>Loaded module: $Id$<br>Registered server command EXPI (Expire old system objects)<br>Registered server command FSCK (Check message ref counts)<br>Loaded module: $Id$<br><b>citserver: Can't bind: Address already in use<br>ERROR: could not bind to TCP port 25.</b><br>Registered a new service (TCP port 0)<br>Registered a new session function (type 50)<br>Loaded module: $Id$<br><b>citserver: Can't bind: Address already in use<br>ERROR: could not bind to TCP port 110.</b><br>Registered a new session function (type 0)<br>Loaded module: $Id$<br>Registered a new message function (type 202)Loaded module: $Id$<br>Registered server command RWHO (Display who is online)<br>Registered server command HCHG (Masquerade hostname)<br>Registered server command RCHG (Masquerade roomname)<br>Registered server command UCHG (Masquerade username)<br>Registered server command STEL (Enter/exit stealth mode)<br>Loaded module: $Id$<br>Changing uid to 513<br>Starting housekeeper thread<br></font></pre>
+<pre><font size="-2">smw @ pixel % ./citserver<br><br>Multithreaded message server for Citadel/UX<br>Copyright (C) 1987-2003 by the Citadel/UX development team.<br>Citadel/UX is open source, covered by the GNU General Public License, and<br>you are welcome to change it and/or distribute copies of it under certain<br>conditions. There is absolutely no warranty for this software. Please<br>read the 'COPYING.txt' file for details.<br><br>Loading citadel.config<br>Opening databases<br>This is GDBM version 1.8.0, as of May 19, 1999.<br>Checking floor reference counts<br>Creating base rooms (if necessary)<br>Registered a new service (TCP port 504)<br>Registered a new service (TCP port 0)<br>Initializing loadable modules<br>Registered server command CHAT (Begin real-time chat)<br>Registered server command PEXP (Poll for instant messages)<br>Registered server command GEXP (Get instant messages)<br>Registered server command SEXP (Send an instant message)<br>Registered server command DEXP (Disable instant messages)<br>Registered a new session function (type 0)<br>Registered a new x-msg function (priority 0)<br>Loaded module: $Id$<br>Registered a new session function (type 1)<br>Registered a new message function (type 201)<br>Registered a new message function (type 202)<br>Registered server command REGI (Enter registration info)<br>Registered server command GREG (Get registration info)<br>Registered a new user function (type 100)<br>Loaded module: $Id$<br>Server-hosted upgrade level is 5.62<br>Loaded module: $Id$<br>Registered server command EXPI (Expire old system objects)<br>Registered server command FSCK (Check message ref counts)<br>Loaded module: $Id$<br><b>citserver: Can't bind: Address already in use<br>ERROR: could not bind to TCP port 25.</b><br>Registered a new service (TCP port 0)<br>Registered a new session function (type 50)<br>Loaded module: $Id$<br><b>citserver: Can't bind: Address already in use<br>ERROR: could not bind to TCP port 110.</b><br>Registered a new session function (type 0)<br>Loaded module: $Id$<br>Registered a new message function (type 202)Loaded module: $Id$<br>Registered server command RWHO (Display who is online)<br>Registered server command HCHG (Masquerade hostname)<br>Registered server command RCHG (Masquerade roomname)<br>Registered server command UCHG (Masquerade username)<br>Registered server command STEL (Enter/exit stealth mode)<br>Loaded module: $Id$<br>Changing uid to 513<br>Starting housekeeper thread<br></font></pre>
<p>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
<p>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
- * 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];
struct ExpressMessage *ptr, *holdptr;
char *dumpomatic = NULL;
char tmp[SIZ];
void imap_copy(int num_parms, char *parms[]);
void imap_uidcopy(int num_parms, char *parms[]);
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[]);
void imap_append(int num_parms, char *parms[]);
- * 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);
struct ExpressMessage *ptr;
begin_critical_section(S_SESSION_TABLE);
- * 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) {
*/
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);
return;
}
begin_critical_section(S_SESSION_TABLE);
- * Get express messages (new method)
+ * Get instant messages (new method)
*/
void cmd_gexp(char *argbuf) {
struct ExpressMessage *ptr;
if (CC->FirstExpressMessage == NULL) {
*/
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);
- * Asynchronously deliver express messages'
+ * Asynchronously deliver instant messages
*/
void cmd_gexp_async(void) {
*/
void cmd_gexp_async(void) {
/* And don't do it if there's nothing to send. */
if (CC->FirstExpressMessage == NULL) return;
/* 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);
- * 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)
*/
void add_xmsg_to_context(struct CitContext *ccptr,
struct ExpressMessage *newmsg)
- * 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.
*/
* 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 */
{
int message_sent = 0; /* number of successful sends */
- * send express messages <bc>
+ * send instant messages <bc>
*/
void cmd_sexp(char *argbuf)
{
*/
void cmd_sexp(char *argbuf)
{
char *serv_chat_init(void)
{
CtdlRegisterProtoHook(cmd_chat, "CHAT", "Begin real-time chat");
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);
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);
void cmd_chat (char *argbuf);
void cmd_pexp (char *argbuf); /* arg unused */
void cmd_sexp (char *argbuf);
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);
-int send_express_message(char *, char *, char *);
+int send_instant_message(char *, char *, char *);
struct savelist {
struct savelist *next;
struct savelist {
struct savelist *next;
/* Ok, at this point we're in normal command mode. The first thing
* we do is print any incoming pages (yeah! we really do!)
*/
/* 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
/*
* Before processing the command that was just entered... if we happen
char *output_buffer; /* hold output for one big dump */
int buffer_len;
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 */
struct ExpressMessage *FirstExpressMessage;
int disable_exp; /* Set to 1 to disable incoming pages */
int newmail; /* Other sessions increment this */
/*
* ExpressMessageFunctionHook extensions are used for hooks which implement
/*
* 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.
*/
* registered should return the number of recipients to whom the message was
* successfully transmitted.
*/
to other users currently in chat.
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
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
client can then transmit a multi-line page.
The reserved name "broadcast" may be used instead of a user name, to
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
- 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
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.
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
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.
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
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
20. Access level required to create rooms
21. Maximum message length which may be entered into the system
22. Minimum number of worker threads
this command will succeed returning the same information as an OPEN command.
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
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.)
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
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)
FSCK (check message base reference counts)
by a transcript of the run. Otherwise ERROR is returned.
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.
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.
should be terminated, or 0 for all clients. When successful, the REQT command
returns OK.
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
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
- 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).
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).