]> code.citadel.org Git - citadel.git/blobdiff - citadel/techdoc/protocol.txt
* MSG4 (and CtdlOutputMsg() as well) now accepts an optional MIME part
[citadel.git] / citadel / techdoc / protocol.txt
index a15d74478bff86d5fcce0c313a34853eff798cb7..0c69ad7c4da9d917a1c016b7a787bf2afe16f316 100644 (file)
@@ -42,6 +42,17 @@ our application layer assumes a clean, reliable, sequenced connection, the use
 of UDP would render the server unstable and unusable, so we stick with TCP.
 
 
+ CHARACTER SETS
+ --------------
+ The native character set for the Citadel system is UTF-8.  Unless otherwise
+specified, all data elements are expected to be in the UTF-8 character set.
+Specifically, all non-MIME messages should be assumed to be in UTF-8.  MIME
+messages may be in whatever character set is specified by the MIME header, of
+course; however, some clients (such as WebCit) will automatically convert
+messages from other character sets before displaying them.
  GENERAL INFORMATION ABOUT THE SERVER
  ------------------------------------
 
@@ -375,10 +386,14 @@ GOTO command to _BASEROOM_ is guaranteed to succeed.  This is useful to
 allow client software to return to the base room when it doesn't know
 where else to go.
 
- There are also two additional reserved room names:
- "_MAIL_" translates to the system's designated room for e-mail messages.
- "_BITBUCKET_" goes to whatever room has been chosen for messages
-without a home.
+ There are also several additional reserved room names:
+ "_MAIL_" goes to the user's inbox (i.e. the Mail> room).
+ "_BITBUCKET_" goes to a room that has been chosen for messages without a home.
+ "_CALENDAR_" goes to the user's primary personal calendar.
+ "_CONTACTS_" goes to the user's primary personal address book.
+ "_NOTES_" goes to the user's primary personal notes room.
+ "_TASKS_" goes to the user's primary personal task list.
 
  The second (and optional) parameter is a password, if one is required for
 access to the room.  This allows for all types of rooms to be accessed via
@@ -450,18 +465,23 @@ restrictions, though.
 which the client may request.  This command may be passed a single parameter:
 either "all", "old", or "new" to request all messages, only old messages, or
 new messages.  Or it may be passed two parameters: "last" plus a number, in
-which case that many message pointers will be returned, or "first" plus a
-number, for the corresponding effect.  If no parameters are specified, "all"
-is assumed.
-
- In Citadel 5.00 and above, the client may also specify "gt" plus a number,
-to list all messages in the current room with a message number greater than
-the one specified.
-
- The third argument, valid only in Citadel 5.60 and above, may be either
-0 or 1.  If it is 1, this command behaves differently: before a listing is
-returned, the client must transmit a list of fields to search for.  The field
-headers are listed below in the writeup for the "MSG0" command.
+which case that many message pointers will be returned; "first" plus a
+number, for the corresponding effect; or "gt" plus a number, to list all
+messages in the current room with a message number greater than the one
+specified.  If no parameters are specified, "all" is assumed.
+
+ The third argument, may be either 0 or 1.  If it is 1, this command behaves
+differently: before a listing is returned, the client must transmit a list
+of fields to search for.  The field headers are listed below in the writeup
+for the "MSG0" command.
+ The optional fourth argument may also be either 0 or 1.  If it is 1, the
+output of this command will include not only a list of message numbers, but
+a simple header summary of each message as well.  This is somewhat resource
+intensive so you shouldn't do this unless you absolutely need all the headers
+immediately.  The fields which are output (in the usual delimited fashion, of
+course) are: message number, timestamp, display name, node name, Internet
+email address (if present), subject (if present).
 
  This command can return three possible results.  ERROR + NOT_LOGGED_IN will
 be returned if no user is currently logged in.  Otherwise, LISTING_FOLLOWS
@@ -780,9 +800,9 @@ perform this operation at the beginning of an "enter message" command
 in vain that will not be permitted to be saved.  If it is set to 2, the
 server will accept an "apparent" post name if the user is privileged enough.
 This post name is arg 5.
-  1  -  Recipient.  This argument is utilized only for private mail messages.
-It is ignored for public messages.  It contains, of course, the name of the
-recipient of the message.
+  1  -  Recipient (To: field).  This argument is utilized only for private
+mail.  It is ignored for public messages.  It contains, of course, the name
+of the recipient(s) of the message.
   2  -  Anonymous flag.  This argument is ignored unless the room allows
 anonymous messages.  In such rooms, this flag may be set to 1 to flag a
 message as anonymous, otherwise 0 for a normal message.
@@ -796,6 +816,12 @@ This is an Aide only command.
 you set this to nonzero, ENT0 will reply with a confirmation message after
 you submit the message text.  The reply code for the ENT0 command will be
 START_CHAT_MODE instead of SEND_LISTING.
+  7  -  Recipient (Cc: field).  This argument is utilized only for private
+mail.  It is ignored for public messages.  It contains, of course, the name
+of the recipient(s) of the message.
+  8  -  Recipient (Bcc: field).  This argument is utilized only for private
+mail.  It is ignored for public messages.  It contains, of course, the name
+of the recipient(s) of the message.
 
  Possible result codes:
   OK  -  The request is valid.  (Client did not set the "post" flag, so the
@@ -1828,6 +1854,9 @@ fails for any reason, ERROR is returned.
  41. Port number for POP3S (SSL-encrypted POP3)
  42. Port number for SMTPS (SSL-encrypted SMTP)
  43. Flag (0 or 1) - enable full text search index
+ 44. Flag (0 or 1) - automatically cull database log files
+ 45. Flag (0 or 1) - enable IMAP "instant expunge" of deleted messages
+ 46. Flag (0 or 1) - allow unauthenticated SMTP clients to spoof my domains
 
  CONF also accepts two additional commands: GETSYS and PUTSYS followed by an
 arbitrary MIME type (such as application/x-citadel-internet-config) which
@@ -1848,6 +1877,15 @@ will output RFC822-like MIME part headers such as "Content-type:" and
 "Content-length:".  MIME formats are chosen and/or converted based on the
 client's preferred format settings, which are set using the MSGP command,
 described below.
+ The MSG4 command also accepts an optional second argument, which may be the
+MIME part specifier of an encapsulated message/rfc822 message.  This is useful
+for fetching the encapsulated message instead of the top-level message, for
+example, when someone has forwarded a message as an attachment.  Note that the
+only way for the client to know the part specifier is to fetch the top-level
+message and then look for attachments of type message/rfc822, and then call
+MSG4 again with that part specifier.
+
 
 
 
@@ -2160,14 +2198,53 @@ asynchronous messages as they arrive, before doing anything else.
 
 
 
+ AUTO   (AUTOcompletion of email addresses)
+ The AUTO command is used by clients which want to request a list of email
+recipients whose names or email addresses match a partial string supplied by
+the client.  This string is the only parameter passed to this command.  The
+command will return ERROR if no user is logged in or if no address book could
+be found; otherwise, it returns LISTING_FOLLOWS followed by zero or more
+candidate recipients.
+
+
+
  SRCH   (SeaRCH the message base)
  
  This command's implementation is incomplete and will be documented when it
-is finished.
+is finished.  The current implementation accepts a search string as its sole
+argument, and will respond with LISTING_FOLLOWS followed by a list of
+messages (globally, not just in the current room) which contain ALL of the
+words in the search string.  If the client desires an "exact phrase" match,
+it must then slow-search the text of each returned message for the exact
+string.  The client should also compare the returned message numbers against
+those which actually exist in the room or rooms being searched.  In
+particular, clients should avoid telling the user about messages which exist
+only in rooms to which the user does not have access.
+ Again, keep in mind that this is a temporary implementation and is not
+guaranteed to continue to exist in this form.
+
 
+EUID   (get message number using an EUID)}
 
+ Returns the message number, if present, of the message in the current room
+which is indexed using the supplied EUID (exclusive message ID).  There can be
+only one message in a room with any given EUID; if another message arrives
+with the same EUID, the existing one is replaced.  This makes it possible to
+reference things like calendar items using an immutable URL that does not
+change even when the message number changes due to an update.
 
+ The format of this command is:  EUID <euid>
 
+ If successful, EUID returns OK followed by a message number.
+ If no message exists in the current room with the supplied EUID, the command
+returns ERROR+MESSAGE_NOT_FOUND.
+
  ASYNCHRONOUS MESSAGES
  ---------------------