summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc993.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc993.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc993.txt')
-rw-r--r--doc/rfc/rfc993.txt1651
1 files changed, 1651 insertions, 0 deletions
diff --git a/doc/rfc/rfc993.txt b/doc/rfc/rfc993.txt
new file mode 100644
index 0000000..d62f3b6
--- /dev/null
+++ b/doc/rfc/rfc993.txt
@@ -0,0 +1,1651 @@
+
+
+Network Working Group David D. Clark (MIT)
+Request for Comments: 993 Mark L. Lambert (MIT)
+Obsoletes: RFC-984 December 1986
+
+
+
+ PCMAIL: A Distributed Mail System for Personal Computers
+
+
+
+1. Status of this Document
+
+ This document is a discussion of the Pcmail workstation-based distri-
+ buted mail system. It is a revision of the design published in NIC
+ RFC-984. The revision is based on discussion and comment from a
+ variety of sources, as well as further research into the design of
+ interactive Pcmail clients and the use of client code on machines
+ other than IBM PCs. As this design may change, implementation of
+ this document is not advised. Distribution of this memo is unlimit-
+ ed.
+
+2. Introduction
+
+ Pcmail is a distributed mail system providing mail service to an ar-
+ bitrary number of users, each of whom owns one or more workstations.
+ Pcmail's motivation is to provide very flexible mail service to a
+ wide variety of different workstations, ranging in power from small,
+ resource-limited machines like IBM PCs to resource-rich (where
+ "resources" are primarily processor speed and disk space) machines
+ like Suns or Microvaxes. It attempts to provide limited service to
+ resource-limited workstations while still providing full service to
+ resource-rich machines. It is intended to work well with machines
+ only infrequently connected to a network as well as machines per-
+ manently connected to a network. It is also designed to offer disk-
+ less workstations full mail service.
+
+ The system is divided into two halves. The first consists of a sin-
+ gle entity called the "repository". The repository is a storage
+ center for incoming mail. Mail for a Pcmail user can arrive exter-
+ nally from the Internet or internally from other repository users.
+ The repository also maintains a stable copy of each user's mail state
+ (this will hereafter be referred to as the user's "global mail
+ state"). The repository is therefore typically a computer with a
+ large amount of disk storage.
+
+ The second half of Pcmail consists of one or more "clients". Each
+ Pcmail user may have an arbitrary number of clients, typically
+ single-user workstations. The clients provide a user with a friendly
+ means of accessing the user's global mail state over a network. In
+ order to make the interaction between the repository and a user's
+ clients more efficient, each client maintains a local copy of its
+
+
+
+Clark & Lambert [Page 1]
+
+RFC 993 December 1986
+
+
+ user's global mail state, called the "local mail state". It is as-
+ sumed that clients, possibly being small personal computers, may not
+ always have access to a network (and therefore to the global mail
+ state in the repository). This means that the local and global mail
+ states may not be identical all the time, making synchronization
+ between local and global mail states necessary.
+
+ Clients communicate with the repository via the Distributed Mail Sys-
+ tem Protocol (DMSP); the specification for this protocol appears in
+ appendix A. The repository is therefore a DMSP server in addition to
+ a mail end-site and storage facility. DMSP provides a complete set
+ of mail manipulation operations ("send a message", "delete a mes-
+ sage", "print a message", etc.). DMSP also provides special opera-
+ tions to allow easy synchronization between a user's global mail
+ state and his clients' local mail states. Particular attention has
+ been paid to the way in which DMSP operations act on a user's mail
+ state. All DMSP operations are failure-atomic (that is, they are
+ guaranteed either to succeed completely, or leave the user's mail
+ state unchanged ). A client can be abruptly disconnected from the
+ repository without leaving inconsistent or damaged mail states.
+
+ Pcmail's design has been directed by the characteristics of currently
+ available workstations. Some workstations are fairly portable, and
+ can be packed up and moved in the back seat of an automobile. A few
+ are truly portable--about the size of a briefcase--and battery-
+ powered. Some workstations have constant access to a high-speed
+ local-area network; pcmail should allow for "on-line" mail delivery
+ for these machines while at the same time providing "batch" mail
+ delivery for other workstations that are not always connected to a
+ network. Portable and semi-portable workstations tend to be
+ resource-poor. A typical IBM PC has a small amount (typically less
+ than one megabyte) of main memory and little in the way of mass
+ storage (floppy-disk drives that can access perhaps 360 kilobytes of
+ data). Pcmail must be able to provide machines like this with ade-
+ quate mail service without hampering its performance on more
+ resource-rich workstations. Finally, all workstations have some com-
+ mon characteristics that Pcmail should take advantage of. For in-
+ stance, workstations are fairly inexpensive compared to the various
+ time-shared systems that most people use for mail service. This
+ means that people may own more than one workstation, perhaps putting
+ a Microvax in an office and an IBM PC at home.
+
+ Pcmail's design reflects the differing characteristics of the various
+ workstations. Since one person can own several workstations, Pcmail
+ allows users multiple access points to their mail state. Each Pcmail
+ user can have several client workstations, each of which can access
+ the user's mail by communicating with the repository over a network.
+ The clients all maintain local copies of the user's global mail
+ state, and synchronize the local and global states using DMSP.
+
+ It is also possible that some workstations will only infrequently be
+
+
+
+Clark & Lambert [Page 2]
+
+RFC 993 December 1986
+
+
+ connected to a network (and thus be able to communicate with the re-
+ pository). The Pcmail design therefore allows two modes of communi-
+ cation between repository and client. "Interactive mode" is used
+ when the client is always connected to the network. Any changes to
+ the client's local mail state are immediately also made to the
+ repository's global mail state, and any incoming mail is immediately
+ transmitted from repository to client. "Batch mode" is used by
+ clients that have infrequent access to the repository. Users manipu-
+ late the client's local mail state, queueing the changes locally.
+ When the client is next connected to the repository, the changes are
+ executed, and the client's local mail state is synchronized with the
+ repository's global mail state.
+
+ Finally, the Pcmail design minimizes the effect of using a resource-
+ poor workstation as a client. Mail messages are split into two
+ parts: a "descriptor" and a "body". The descriptor is a capsule mes-
+ sage summary whose length (typically about 100 bytes) is independent
+ of the actual message length. The body is the actual message text,
+ including an RFC-822 standard message header. While the client may
+ not have enough storage to hold a complete set of messages, it can
+ usually hold a complete set of descriptors, thus providing the user
+ with at least a summary of his mail state. For clients with extreme-
+ ly limited resources, Pcmail allows the storage of partial sets of
+ descriptors. Although this means the user does not have a complete
+ local mail state, he can at least look at summaries of some messages.
+ In the cases where the client cannot immediately store message bo-
+ dies, it can always pull them over from the repository as storage be-
+ comes available.
+
+ The remainder of this document is broken up into sections discussing
+ the following:
+
+ - The repository architecture
+
+ - DMSP, its operations, and motivation for its design
+
+ - The client architecture
+
+ - A typical DMSP session between the repository and a
+ client
+
+ - The current Pcmail implementation
+
+3. Repository architecture
+
+ A typical machine running repository code has a relatively powerful
+ processor and a large amount of disk storage. It must also be a per-
+ manent network site, for two reasons. First clients communicate with
+ the repository over a network, and rely on the repository's being
+ available at any time. Second, people sending mail to repository
+ users rely on the repository's being available to receive mail at any
+
+
+
+Clark & Lambert [Page 3]
+
+RFC 993 December 1986
+
+
+ time.
+
+ The repository must perform several tasks. First, and most impor-
+ tantly, the repository must efficiently manage a potentially large
+ number of users and their mail states. Mail must be reliably stored
+ in a manner that makes it easy for multiple clients to access the
+ global mail state and synchronize their local mail states with the
+ global state. Since a large category of electronic mail is
+ represented by bulletin boards (bboards), the repository should effi-
+ ciently manage bboard mail, using a minimum of storage to store
+ bboard messages in a manner that still allows any user subscribing to
+ the bboard to read the mail. Second, the repository must be able to
+ communicate efficiently with its clients. The protocol used to com-
+ municate between repository and client must be reliable and must pro-
+ vide operations that (1) allow typical mail manipulation, and (2)
+ support Pcmail's distributed nature by allowing efficient synchroni-
+ zation between local and global mail states. Third, the repository
+ must be able to process mail from sources outside the repository's
+ own user community (a primary outside source is the Internet). In-
+ ternet mail will arrive with a NIC RFC-822 standard message header;
+ the recipient names in the message must be properly translated from
+ the RFC-822 namespace into the repository's namespace.
+
+3.1. Management of user mail state
+
+ Pcmail divides the world into a community of users. Each user is re-
+ ferred to by a user object. A user object consists of a unique name,
+ a password (which the user's clients use to authenticate themselves
+ to the repository before manipulating a global mail state), a list of
+ "client objects" describing those clients belonging to the user, and
+ a list of "mailbox objects".
+
+ A client object consists of a unique name and a status. A user has
+ one client object for every client he owns; a client cannot communi-
+ cate with the repository unless it has a corresponding client object
+ in a user's client list. Client objects therefore serve as a means
+ of identifying valid clients to the repository. Client objects also
+ allow the repository to manage local and global mail state synchroni-
+ zation; the repository associates with every global state change a
+ list of client objects corresponding to those clients which have not
+ recorded the global change locally.
+
+ A client's status is either "active" or "inactive". The repository
+ defines inactive clients as those clients which have not connected to
+ the repository within a set time period (one week in the current re-
+ pository implementation). When an inactive client does connect to
+ the repository, the repository notifies the client that it has been
+ "reset". The repository resets a client by marking all messages in
+ the user's mail state as having changed since the client last logged
+ in. When the client next synchronizes with the repository, it will
+ receive a complete copy of the repository's global mail state. A
+
+
+
+Clark & Lambert [Page 4]
+
+RFC 993 December 1986
+
+
+ forced reset is performed on the assumption that enough global state
+ changes occur in a week that the client would spend too much time
+ performing an ordinary local state-global state synchronization.
+
+ Messages are stored in mailboxes. Users can have an arbitrary number
+ of mailboxes, which serve both to store and to categorize messages.
+ A mailbox object both names a mailbox and describes its contents.
+ Mailboxes are identified by a unique name; their contents are
+ described by three numeric values. The first is the total number of
+ messages in the mailbox, the second is the total number of unseen
+ messages (messages that have never been seen by the user via any
+ client) in the mailbox, and the third is the mailbox's next available
+ message unique identifier (UID). The above information is stored in
+ the mailbox object to allow clients to get a summary of a mailbox's
+ contents without having to read all the messages within the mailbox.
+
+ Some mailboxes are special, in that other users may read the messages
+ stored in them. These mailboxes are called "bulletin board mail-
+ boxes" or "bboard mailboxes". The repository uses bboard mailboxes
+ to store bboard mail. Bboard mailboxes differ from ordinary mail-
+ boxes in the following ways:
+
+ - Their names are unique across the entire repository;
+ for instance, only one bboard mailbox named "sf-lovers"
+ may exist in the entire repository community. This
+ does not preclude other users from having an ordinary
+ mailbox named "sf-lovers".
+
+ - Subscribers to the bboard are granted read-only access
+ to the messages in the bboard mailbox. The bboard
+ mailbox's owner (typically the system manager) has
+ read/update/delete access to the mailbox.
+
+ A bboard subscriber keeps track of the messages he has looked at via
+ a bboard object. The bboard object contains the name of the bboard,
+ its owner (the user who owns the bboard mailbox where all the mes-
+ sages are stored), and the UID of the first message not yet seen by
+ the subscriber .
+
+ Users gain read-only access to a bboard by "subscribing" to it; they
+ lose that access when they "unsubscribe" to it.
+
+ Associated with each mailbox are an arbitrary number of message ob-
+ jects. Each message is broken into two parts--a "descriptor", which
+ contains a summary of useful information about the message, and a
+ "body", which is the message text itself, including its NIC RFC-822
+ message header. Each message is assigned a monotonically increasing
+ UID based on the owning mailbox's next available UID. Each mailbox
+ has its own set of UIDs which, together with the mailbox name and
+ user name, uniquely identify the message within the repository.
+
+
+
+
+Clark & Lambert [Page 5]
+
+RFC 993 December 1986
+
+
+ A descriptor holds the following information: the message UID, the
+ message size in bytes and lines, four "useful" message header fields
+ (the "date:", "to:", "from:", and "subject:" fields), and sixteen
+ flags. These flags are given identifying numbers 0 through: 15.
+ Eight of these flags are reserved for the repository's use. Some of
+ these are actually used by the repository, while others are simply
+ held for informational purposes. In the current repository implemen-
+ tation these flags mark:
+
+ - (#0) whether it has been deleted
+
+ - (#1) whether the message has been seen
+
+ - (#2) whether it has been forwarded to the user
+
+ - (#3) whether it has been forwarded by the user
+
+ - (#4) whether it has been filed (written to a text file
+ outside the repository)
+
+ - (#5) whether it has been printed (locally or remotely)
+
+ - (#6) whether it has been replied to
+
+ - (#7) whether it has been copied to another mailbox
+
+ The remaining eight flags are reserved for future use.
+
+ Descriptors serve as an efficient means for clients to get message
+ information without having to waste time retrieving the message from
+ the repository.
+
+3.2. Repository-to-RFC-822 name translation
+
+ "Address objects" provide the repository with a means for translating
+ the RFC-822-style mail addresses in Internet messages into repository
+ names. The repository provides its own namespace for message iden-
+ tification. Any message is uniquely identified by the triple (user-
+ name, mailbox-name, message-UID). Any mailbox is uniquely identified
+ by the pair (user-name, mailbox-name). Thus to send a message
+ between two repository users, a user would address the message to
+ (user-name, mailbox-name). The repository would deliver the message
+ to the named user and mailbox, and assign it a UID based on the re-
+ quested mailbox's next available UID.
+
+ In order to translate between RFC-822-style mail addresses and repo-
+ sitory names, the repository maintains a list of address objects.
+ Each address object is an association between an RFC-822-style ad-
+ dress and a (user-name, mailbox-name) pair. When mail arrives from
+ the Internet, the repository can use the address object list to
+ translate the recipients into (user-name, mailbox-name) pairs and
+
+
+
+Clark & Lambert [Page 6]
+
+RFC 993 December 1986
+
+
+ route the message correctly.
+
+4. Communication between repository and client: DMSP
+
+ The Distributed Mail System Protocol (DMSP) is a block-stream proto-
+ col that defines and manipulates the objects mentioned in the previ-
+ ous section. It has been designed to work with Pcmail's single-
+ repository/multiple-client model of the world. In addition to pro-
+ viding typical mail manipulation functions, DMSP provides functions
+ that allow easy synchronization of global and local mail states.
+
+ DMSP is implemented on top of the Unified Stream Protocol (USP),
+ specified in MIT-LCS RFC-272. USP provides a reliable virtual cir-
+ cuit block-stream connection between two machines. It defines a
+ basic set of data types ("strings", "integers", "booleans", etc.);
+ instances of these data types are grouped in an application-defined
+ order to form USP blocks. Each USP block is defined by a numeric
+ "block type"; a USP application can thus interpret a block's contents
+ based on knowledge of the block's type. DMSP consists of a set of
+ operations, each of which is comprised of one or more different USP
+ blocks that are sent between repository and client.
+
+ A DMSP session proceeds as follows: a client begins the session with
+ the repository by opening a USP connection to the repository's
+ machine. The client then authenticates both itself and its user to
+ the repository with a "login" operation. If the authentication is
+ successful, the user performs an arbitrary number of DMSP operations
+ before ending the session with a "logout" operation (at which time
+ the connection is closed by the repository).
+
+ Because DMSP can manipulate a pair of mail states (local and global)
+ at once, it is extremely important that all DMSP operations are
+ failure-atomic. Failure of any DMSP operation must leave both states
+ in a consistent, known state. For this reason, a DMSP operation is
+ defined to have failed unless an explicit acknowledgement is received
+ by the operation initiator. This acknowledgement can take one of two
+ basic forms, based on two broad categories that all DMSP operations
+ fall into. First, an operation can be a request to perform some mail
+ state modification, in which case the repository will acknowledge the
+ request with either an "ok" or a "failure" (in which case the reason
+ for the failure is also returned). Second, an operation can be a re-
+ quest for information, in which case the request is acknowledged by
+ the repository's providing the information to the client. Operations
+ such as "delete a message" fall into the first category; operations
+ like "send a list of mailboxes" fall into the second category.
+
+ Following is a general discussion of all the DMSP operations. The
+ operations are broken down by type: general operations, user opera-
+ tions, client operations, mailbox operations, address operations,
+ bboard operations, and message operations.
+
+
+
+
+Clark & Lambert [Page 7]
+
+RFC 993 December 1986
+
+
+4.1. General operations
+
+ The first group of DMSP operations perform general functions that
+ operate on no one particular class of object. DMSP has two general
+ operations, which provide the following services:
+
+ In order to prevent protocol version skew between clients and the re-
+ pository, DMSP provides a "send-version" operation. The client sup-
+ plies its DMSP version number as an argument; the operation succeeds
+ if the supplied version number matches the repository's DMSP version
+ number. It fails if the two version numbers do not match. The ver-
+ sion number is an unsigned quantity, like "100", "101", "200". The
+ "send-version" operation should be the first that a client sends to
+ the repository, since no other operation my work if the client and
+ repository are using different versions of DMSP.
+
+ Users can send mail to other users via the "send-message" operation.
+ The message must have an Internet-style header as defined by NIC
+ RFC-822. The repository takes the message and distributes it to the
+ mailboxes specified on the "to:", "cc:", and "bcc:" fields of the
+ message header. If one or more of the mailboxes exists outside the
+ repository's user community, the repository is responsible for hand-
+ ing the message to a local SMTP server.
+
+ An OK is sent from the repository only if the entire message was suc-
+ cessfully transmitted. If the message was destined for the Internet,
+ the send-message operation is successful if the message was success-
+ fully transmitted to the local SMTP server.
+
+4.2. User operations
+
+ The next series of DMSP operations manipulates user objects. The
+ most common of these operations are "login" and "logout". A client
+ must perform a login operation before being able to access a user's
+ mail state. A DMSP login block contains five items: (1) the user's
+ name, (2) the user's password, (3) the name of the client performing
+ the login, (4) a flag telling the repository to create a client ob-
+ ject for the client if one does not exist, and (5) a flag set to TRUE
+ if the client wishes to operate in "batch mode" and FALSE if the
+ client wishes to operate in "interactive" mode. The flag value al-
+ lows the repository to tune internal parameters for either mode of
+ operation.
+
+ The repository can return either an OK block (indicating successful
+ authentication), a FAILURE block (indicating failed authentication),
+ or a FORCE-RESET block. This last is sent if the client logging in
+ has been marked as "inactive" by the repository (clients are marked
+ inactive if they have not connected to the repository in over a
+ week). The FORCE-RESET block indicates that the client should erase
+ its local mail state and pull over a complete version of the
+ repository's mail state. This is done on the assumption that so many
+
+
+
+Clark & Lambert [Page 8]
+
+RFC 993 December 1986
+
+
+ mail state changes have been made in a week that it would be ineffi-
+ cient to perform a normal synchronization.
+
+ When a client has completed a session with the repository, it per-
+ forms a logout operation. This allows the repository to perform any
+ necessary cleanup before closing the USP connection.
+
+ A user can change his password via the "set-password" operation. The
+ operation works much the same as the UNIX change-password operation,
+ taking as arguments the user's current password and a desired new
+ password. If the current password given matches the user's current
+ password, the user's current password is changed to the new password
+ given.
+
+4.3. Client operations
+
+ DMSP provides four operations to manipulate client objects. The
+ first, "list-clients", tells the repository to send the user's client
+ list to the requesting client. The list takes the form of a series
+ of (client-name, status) pairs. The status is either 0 (inactive) or
+ 1 (active).
+
+ The "create-client" operation allows a user to add a client object to
+ his list of client objects. Although the login operation duplicates
+ this functionality via the "create-this-client?" flag, the add-client
+ operation is a useful means of creating a number of new client ob-
+ jects while logged into the repository via an existing client. The
+ create-client operation requires the name of the client to add.
+
+ The "delete-client" operation removes an existing client object from
+ a user's client list. The client being removed cannot be in use by
+ anyone at the time.
+
+ The last client operation, "reset-client", causes the repository to
+ mark all messages in the user's mail state as having changed since
+ the client last logged in. When a client next synchronizes with the
+ repository, it will end up receiving a complete copy of the
+ repository's global mail state. This is useful for two reasons.
+ First, a client's local mail state could easily become lost or dam-
+ aged, especially if it is stored on a floppy disk. Second, if a
+ client has been marked as inactive by the repository, the reset-
+ client operation provides a fast way of resynchronizing with the re-
+ pository, assuming that so many differences exist between the local
+ and global mail states that a normal synchronization would take far
+ too much time.
+
+4.4. Mailbox operations
+
+ DMSP supports five operations that manipulate mailbox objects.
+ First, "list-mailboxes" has the repository send to the requesting
+ client information on each mailbox. This information consists of the
+
+
+
+Clark & Lambert [Page 9]
+
+RFC 993 December 1986
+
+
+ mailbox name, total message count, unseen message count, and "next
+ available UID". This operation is useful in synchronizing local and
+ global mail states, since it allows a client to compare the user's
+ global mailbox list with a client's local mailbox list. The list of
+ mailboxes also provides a quick summary of each mailbox's contents
+ without having the contents present.
+
+ The "create-mailbox" has the repository create a new mailbox and at-
+ tach it to the user's list of mailboxes. An address object binding
+ the (user-name, mailbox-name) pair to an RFC-822-style address is au-
+ tomatically created and placed in the repository's list of address
+ objects. This allows mail coming from the Internet to be correctly
+ routed to the new mailbox.
+
+ "Delete-mailbox" removes a mailbox from the user's list of mailboxes.
+ All messages within the mailbox are also deleted and permanently re-
+ moved from the system. Any address objects binding the mailbox name
+ to RFC-822-style mailbox addresses are also removed from the system.
+
+ "Reset-mailbox" causes the repository to mark all the messages in a
+ named mailbox as having changed since the current client last saw
+ them. When the client next synchronizes with the repository, it will
+ receive a complete copy of the named mailbox's mail state. This
+ operation is merely a more specific version of the reset-client
+ operation (which allows the client to pull over a complete copy of
+ the user's global mail state). Its primary use is for mailboxes
+ whose contents have accidentally been destroyed locally.
+
+ Finally, DMSP has an "expunge-mailbox" operation. Any message can be
+ deleted and "undeleted" at will. Deletions are made permanent by
+ performing an expunge-mailbox operation. The expunge operation
+ causes the repository to look through a named mailbox, removing from
+ the system any messages marked "deleted".
+
+4.5. Address operations
+
+ DMSP provides three operations that allow users to manipulate address
+ objects. First, the "list-address" operation returns a list of ad-
+ dress objects associated with a particular (user-name, mailbox-name)
+ pair.
+
+ The "create-address" operation adds a new address object that associ-
+ ates a (user-name, mailbox-name) pair with a given RFC-822-style
+ mailbox address.
+
+ Finally, the "delete-address" operation destroys the address object
+ binding the given RFC-822-style mail address and the given (user-
+ name, mailbox-name) pair.
+
+
+
+
+
+
+Clark & Lambert [Page 10]
+
+RFC 993 December 1986
+
+
+4.6. Bboard operations
+
+ DMSP provides seven bulletin board operations. The first, "list-
+ bboards", gives the user a list of the bboards he is currently sub-
+ scribing to. The list contains an entry for each bboard that the
+ user subscribes to. Each entry contains the following information:
+
+ - The bulletin board's name
+
+ - The UID of the first message the subscriber has not yet
+ seen
+
+ - The highest message UID in the bulletin board
+
+ - The number of messages the subscriber has not yet seen
+
+ "List-all-bboards" gives the user a list of all bboards he can sub-
+ scribe to.
+
+ "Create-bboard" allows a user to create a bboard mailbox. The name
+ given must be unique across the entire repository user community.
+ Once the bboard mailbox has been created, other users may subscribe
+ to the bboard, using bboard objects to keep track of which messages
+ they have read on which bboards.
+
+ "Delete-bboard" allows a bboard's owner to delete a bboard mailbox.
+ Subscribers who attempt to read from a bboard mailbox after it has
+ been deleted are told that the bboard no longer exists.
+
+ DMSP also provides operations to subscribe to, and unsubscribe from,
+ any bboard. "Subscribe-bboard" adds a bboard object to the users
+ bboard object list; "unsubscribe-bboard" removes a bboard object from
+ the list. Note that this does not delete the bboard mailbox (obvi-
+ ously only the bboard's owner can do that). It merely removes the
+ user from the list of the bboard's subscribers.
+
+ DMSP allows for the user to tell the repository which messages in a
+ bboard he has seen. Every bboard object contains the UID of the
+ first message the user has not yet seen; the "set-first-unread-
+ message-UID" operation updates that number, insuring that the user
+ sees a given bboard message only once.
+
+4.7. Message operations
+
+ The most commonly-manipulated Pcmail objects are messages; DMSP
+ therefore provides special message operations to allow efficient syn-
+ chronization, as well as a set of operations to perform standard
+ message-manipulation functions. In the following paragraphs, the
+ terms "message" and "descriptor" will be used interchangeably.
+
+ A user may request a series of descriptors with the "get-descriptors"
+
+
+
+Clark & Lambert [Page 11]
+
+RFC 993 December 1986
+
+
+ operation. The series is identified by a pair of message UIDs,
+ representing the lower and upper bounds of the list. Since UIDs are
+ defined to be monotonically increasing numbers, a pair of UIDs is
+ sufficient to completely identify the series of descriptors. If the
+ lower bound UID does not exist, the repository starts the series with
+ the first message with UID greater than the lower bound. Similarly,
+ if the upper bound does not exist, the repository ends the series
+ with the last message with UID less than the upper bound. If certain
+ UIDs within the series no longer exist, the repository (obviously)
+ does not send them. The repository returns the descriptors in a se-
+ quence of "choices". Elements of the sequence can either be descrip-
+ tors, in which case the choice is tagged as a descriptor, or they can
+ be notification that the requested message has been expunged subse-
+ quent to the client's last connection to the repository. A descrip-
+ tor choice is a record containing the message's UID, flags, to, from,
+ date, and subject fields, length in bytes, and length in lines. An
+ expunged choice contains only the expunged message's UID.
+
+ The "get-changed-descriptors" operation is intended for use during
+ state synchronization. Whenever a descriptor changes state (is
+ deleted, for example), the repository notes those clients which have
+ not yet recorded the change locally. Get-changed-descriptors has the
+ repository send to the client a given number of descriptors which
+ have changed since the client's last synchronization. The list sent
+ begins with the earliest-changed descriptor. Note that the list of
+ descriptors is only guaranteed to be monotonically increasing for a
+ given call to "get-changed-descriptors"; messages with lower UIDs may
+ be changed by other clients in between calls to "get-changed-
+ descriptors".
+
+ Once the changed descriptors have been looked at, a user will want to
+ inform the repository that the current client has recorded the change
+ locally. The "reset-changed-descriptors" causes the repository to
+ mark as "seen by current client" a given series of descriptors. The
+ series is identified by a low UID and a high UID. UIDs within the
+ series that no longer exist are not reset.
+
+ Message bodies are transmitted from repository to user with the
+ "get-message-text" operation. The separation of "get-descriptors"
+ and "get-message-text" operations allows clients with small amounts
+ of disk storage to obtain a small message summary (via "get-
+ descriptors" or "get-changed-descriptors") without having to pull
+ over the entire message.
+
+ Frequently, a message may be too large for some clients to store lo-
+ cally. Users can still look at the message contents via the "print-
+ message" operation. This operation has the repository send a copy of
+ the message to a named printer. The printer name need only have
+ meaning to the particular repository implementation; DMSP transmits
+ the name only as a means of identification.
+
+
+
+
+Clark & Lambert [Page 12]
+
+RFC 993 December 1986
+
+
+ Copying of one message into another mailbox is accomplished via the
+ "copy-message" operation. A descriptor list of length one, contain-
+ ing a descriptor for the copied message is returned if the copy
+ operation is successful. This descriptor is required because the
+ copied message acquires a UID different from the original message.
+ The client cannot be expected to know which UID has been assigned the
+ copy, hence the repository's sending a descriptor containing the UID.
+
+5. Client Architecture
+
+ Clients can be any of a number of different workstations; Pcmail's
+ architecture must therefore take into account the range of charac-
+ teristics of these workstations. First, most workstations are much
+ more affordable than the large computers currently used for mail ser-
+ vice. It is therefore possible that a user may well have more than
+ one. Second, some workstations are portable and they are not expect-
+ ed to be constantly tied into a network. Finally, many of the small-
+ er workstations resource-poor, so they are not expected to be able to
+ store a significant amount of state information locally. The follow-
+ ing subsections describe the particular parts of Pcmail's client ar-
+ chitecture that address these different characteristics.
+
+5.1. Multiple clients
+
+ The fact that Pcmail users may own more than one workstation forms
+ the rationalization for the multiple client model that Pcmail uses.
+ A Pcmail user may have one client at home, another at an office, and
+ maybe even a third portable client. Each client maintains a separate
+ copy of the user's mail state, hence Pcmail's distributed nature.
+ The notion of separate clients allows Pcmail users to access mail
+ state from several different locations. Pcmail places no restric-
+ tions on a user's ability to communicate with the repository from
+ several clients at the same time. Instead, the decision to allow
+ several clients concurrent access to a user's mail state is made by
+ the repository implementation.
+
+5.2. Synchronization
+
+ Some workstations tend to be small and fairly portable; the likeli-
+ hood of their always being connected to a network is relatively
+ small. This is another reason for each client's maintaining a local
+ copy of a user's mail state. The user can then manipulate the local
+ mail state while not connected to the network (and the repository).
+ This immediately brings up the problem of synchronization between lo-
+ cal and global mail states. The repository is continually in a posi-
+ tion to receive global mail state updates, either in the form of in-
+ coming mail, or in the form of changes from other clients. A client
+ that is not always connected to the net cannot immediately receive
+ the global changes. In addition, the client's user can make his own
+ changes on the local mail state.
+
+
+
+
+Clark & Lambert [Page 13]
+
+RFC 993 December 1986
+
+
+ Pcmail's architecture allows fast synchronization between client lo-
+ cal mail states and the repository's global mail state. Each client
+ is identified in the repository by a client object attached to the
+ user. This object forms the basis for synchronization between local
+ and global mail states. Some of the less common state changes in-
+ clude the adding and deleting of user mailboxes and the adding and
+ deleting of address objects. Synchronization of these changes is
+ performed via DMSP list operations, which allow clients to compare
+ their local versions of mailbox and address object lists with the
+ repository's global version and make any appropriate changes. The
+ majority of possible changes to a user's mail state are in the form
+ of changed descriptors. Since most users will have a large number of
+ messages, and message states will change relatively often, special
+ attention needs to be paid to message synchronization.
+
+ An existing descriptor can be changed in one of two ways: first, one
+ of its sixteen flags values can be changed (this encompasses reading
+ an unseen message, deleting a message, and expunging a message). The
+ second way to change a descriptor is via the arrival of incoming mail
+ or the copying of a message from one mailbox to another. Both result
+ in a new message being added to a mailbox.
+
+ In both the above cases, synchronization is required between the re-
+ pository and every client that has not previously noted a change. To
+ keep track of which clients have noticed a global mail state change
+ and changed their local states accordingly, each mailbox has associ-
+ ated with it a list of active clients. Each client has a (potential-
+ ly empty) "update list" of messages which have changed since that
+ client last read them.
+
+ When a client connects to the repository, it executes a DMSP "get-
+ changed-descriptors" operation. This causes the repository to return
+ a list of all descriptor objects on that client's update list As the
+ client receives the changed descriptors, it can store them locally,
+ thus updating the local mail state. After a changed descriptor has
+ been recorded, the client uses the DMSP "reset-descriptors" operation
+ to remove the message from its update list. That descriptor will now
+ not be sent to the client unless (1) it is explicitly requested, or
+ (2) it changes again.
+
+ In this manner, a client can run through its user's mailboxes, get-
+ ting all changed descriptors, incorporating them into the local mail
+ state, and marking the change as recorded.
+
+5.3. Batch operation versus interactive operation
+
+ Because of the portable nature of some workstations, they may not al-
+ ways be connected to a network (and able to communicate with the re-
+ pository). Since each client maintains a local mail state, Pcmail
+ users can manipulate the local state while not connected to the repo-
+ sitory. This is known as "batch" operation, since all changes are
+
+
+
+Clark & Lambert [Page 14]
+
+RFC 993 December 1986
+
+
+ recorded by the client and made to the repository's global state in a
+ batch, when the client next connects to the repository. Interactive
+ operation occurs when a client is always connected to the repository.
+ In interactive mode, changes made to the local mail state are also
+ immediately made to the global state via DMSP operations.
+
+ In batch mode, interaction between client and repository takes the
+ following form: the client connects to the repository and sends over
+ all the changes made by the user to the local mail state. The repo-
+ sitory changes its global mail state accordingly. When all changes
+ have been processed, the client begins synchronization, to incor-
+ porate newly-arrived mail, as well as mail state changes by other
+ clients, into the local state.
+
+ In interactive mode, since local changes are immediately propagated
+ to the repository, the first part of batch-type operation is elim-
+ inated. The synchronization process also changes; although one syn-
+ chronization is required when the client first opens a connection to
+ the repository, subsequent synchronizations can be performed either
+ at the user's request or automatically every so often by the client.
+
+5.4. Message summaries
+
+ Smaller workstations may have little in the way of disk storage.
+ Clients running on these workstations may never have enough room for
+ a complete local copy of a user's global mail state. This means that
+ Pcmail's client architecture must allow user's to obtain a clear pic-
+ ture of their mail state without having all their messages present.
+
+ Descriptors provide message information without taking up large
+ amounts of storage. Each descriptor contains a summary of informa-
+ tion on a message. This information includes the message UID, its
+ length in bytes and lines, its status (encoded in the eight system-
+ defined and eight user-defined flags), and portions of its RFC-822
+ header (the "to:", "from:", "subject:" and "date:" fields). All of
+ this information can be encoded in a small (around 100 bytes) data
+ structure whose length is independent of the size of the message it
+ describes.
+
+ Most clients should be able to store a complete list of message
+ descriptors with little problem. This allows a user to get a com-
+ plete picture of his mail state without having all his messages
+ present locally. If a client has extremely limited amounts of disk
+ storage, it is also possible to get a subset of the descriptors from
+ the repository. Short messages can reside on the client, along with
+ the descriptors, and long messages can either be printed via the DMSP
+ print-message operation, or specially pulled over via the fetch-
+ message-text operation.
+
+
+
+
+
+
+Clark & Lambert [Page 15]
+
+RFC 993 December 1986
+
+
+6. Typical interactive-style client-repository interaction
+
+ The following example describes a typical communication session
+ between the repository and a client. The client is one of three be-
+ longing to user "Fred". Its name is "office-client", and since Fred
+ uses the client regularly to access his mail, the client is marked as
+ "active". Fred has two mailboxes: "main" is where all of his current
+ mail is stored; "archive" is where messages of lasting importance are
+ kept. The example will run through a simple synchronization opera-
+ tion followed by a series of typical mail state manipulations. Typi-
+ cally, the synchronization will be performed by an application pro-
+ gram that connects to the repository, logs in, synchronizes, and logs
+ out.
+
+ For the example, all DMSP operations will be shown in a user-readable
+ format. In reality, the operations would be sent as a stream of USP
+ blocks consisting of a block-type number followed by a stream of
+ bytes representing the block's components.
+
+ In order to access his global mail state, the client software must
+ authenticate Fred to the repository; this is done via the DMSP login
+ operation:
+
+ login ["fred", "fred-password", "office-client", F, F]
+
+ This tells the repository that Fred is logging in via "office-
+ client", and that "office-client" is identified by an existing client
+ object attached to Fred's user object. The first component of the
+ login block is Fred's repository user name. The second component is
+ Fred's password. The third component is the name of the client com-
+ municating with the repository. The fourth component tells the repo-
+ sitory not to create "office-client" even if it cannot find its
+ client object. The final component tells the repository that Fred's
+ client is not operating in batch mode but rather in interactive mode.
+
+ Fred's authentication checks out, so the repository logs him in, ack-
+ nowledging the login request with an OK block.
+
+ Now that Fred is logged in, the client performs an initial synchroni-
+ zation. This process starts with the client's asking for an up-to-
+ date list of mailboxes:
+
+ list-mailboxes []
+
+ The repository replies with:
+
+ mailbox-list [["main", 10, 1, 253],
+ ["archive", 100, 0, 101]]
+
+ This tells the client that there are two mailboxes, "main" and "ar-
+ chive". "Main" has 10 messages, one of which is unseen. The next
+
+
+
+Clark & Lambert [Page 16]
+
+RFC 993 December 1986
+
+
+ incoming message will be assigned a UID of 253. "Archive", on the
+ other hand, has 100 message, none of which are unseen. The next mes-
+ sage sent to "archive" will be assigned the UID 101. There are no
+ new mailboxes in the list (if there were, the client program would
+ create them. On the other hand, if some mailboxes in the client's
+ local list were not in the repository's list, the program would as-
+ sume them deleted by another client and delete them locally as well).
+
+ To synchronize the client need only look at each mailbox's contents
+ to see if (1) any new mail has arrived, or (2) if Fred changed any
+ messages on one of his other two clients subsequent to "office-
+ client"'s last connection to the repository.
+
+ The client asks for any changed descriptors via the "get-changed-
+ descriptors" operation. It requests at most ten changed descriptors
+ since storage is very limited on "office-client".
+
+ get-changed-descriptors ["main", 10]
+
+ The repository responds with:
+
+ descriptor-list [[descriptor[
+ 6,
+ [T T F F F F F F F F F F
+ F F F F],
+ "Fred@borax",
+ "Joe@fab",
+ "Wed, 23 Jan 86 11:11 EST",
+ "tomorrow's meeting",
+ 621,
+ 10]]
+ [descriptor[
+ 10,
+ [F T F F F F F F F F F F
+ F F F F],
+ "Fred",
+ "Freds-secretary",
+ "Fri, 25 Jan 86 11:11 EST",
+ "Monthly progress report",
+ 13211,
+ 350]]
+ ]
+
+ The first descriptor in the list is one which Fred deleted on another
+ client yesterday. "Office-client" marks the local version of the
+ message as deleted. The second descriptor in the list is a new one.
+ "Office-client" adds the descriptor to its local list. Since both
+ changes have now been recorded locally, the descriptors can be reset:
+
+ reset-descriptors ["main", 6, 10]
+
+
+
+
+Clark & Lambert [Page 17]
+
+RFC 993 December 1986
+
+
+ The repository removes from "office-client"'s update list all mes-
+ sages with UIDs between 6 and 10 (in this case just two messages)
+ "Main" has now been synchronized. The client now turns to Fred's
+ "archive" mailbox and asks for the first ten changed descriptors.
+
+ get-changed-descriptors ["archive", 10]
+
+ The repository responds with
+
+ descriptor-list []
+
+ The zero-length list tells "office-client" that no descriptors have
+ been changed in "archive" since its last synchronization. No new
+ synchronization needs to be performed.
+
+ Fred's client is now ready to pull over the new message. The message
+ is 320 lines long; there might not be sufficient storage on "office-
+ client" to hold the new message. The client tries anyway:
+
+ fetch-message-text ["main", 10]
+
+ The repository begins transmitting the message:
+
+ message ["From: Fred's-secretary",
+ "To: Fred",
+ "Subject: Monthly progress report",
+ "Date: Fri, 25 Jan 86 11:11 EST",
+ "",
+ "Dear Fred,",
+ "Here is this month's progress report",
+ ...
+ ]
+
+ Halfway through the message transmission, "office-client" runs out of
+ disk space. Because all DMSP operations are defined to be failure-
+ atomic, the portion of the message already transmitted is destroyed
+ locally and the operation fails. "Office-client" informs Fred that
+ the message cannot be pulled over because of a lack of disk space.
+ The synchronization process is now finished and Fred can start read-
+ ing his mail. The new message that was too big to fit on "office-
+ client" will be marked "off line"; Fred can either remote-print it or
+ delete other messages until he has enough space to store the new mes-
+ sage.
+
+ Since he is running in interactive mode, changes he makes to any mes-
+ sages will immediately be transmitted into DMSP operations and sent
+ to the repository. Depending on the client implementation, Fred will
+ either have to execute a "synchronize" command periodically or the
+ client will synchronize for him automatically every so often.
+
+
+
+
+
+Clark & Lambert [Page 18]
+
+RFC 993 December 1986
+
+
+7. A current Pcmail implementation
+
+ The following section briefly describes a current Pcmail system that
+ services a small community of users. The Pcmail repository runs
+ under UNIX on a DEC VAX-750 connected to the Internet. The clients
+ run on IBM PCs, XTs, and ATs, as well as Sun workstations, Micro-
+ vaxes, and VAX-750s.
+
+7.1. IBM PC client code
+
+ Client code for the IBM machines operates only in batch mode. Users
+ make local state changes, which are queued until the client connects
+ to the repository. At that time, the changes are performed and the
+ local and global states synchronized. The client then disconnects
+ from the repository.
+
+ Users access and modify their local mail state via a user interface
+ program. The program uses windows and a full-screen mode of opera-
+ tion. Users are given a variety of commands to operate on individual
+ messages as well as mailboxes. The interface allows use of any text
+ editor to compose messages, and adds features of its own to make
+ RFC-822-style header composition easier.
+
+ Synchronization and the processing of queued changes is performed by
+ a separate program, which the user runs whenever he wishes. The pro-
+ gram takes any actions queued while operating the user interface, and
+ converts them into DMSP operations. All queued changes are made be-
+ fore any synchronization is performed.
+
+ The limitation of IBM PC client operation to batch mode was made be-
+ cause of development environment limitations. The user interface
+ could not work with the network code inside it due to program size
+ limitations. Since MS-DOS has no multi-processing facilities, the
+ two programs could not run in tandem either. The only solution was
+ to provide a two-part client, one part of which read the mail and one
+ part of which interacted with the repository.
+
+7.2. UNIX client code
+
+ Client code for the Suns, Microvaxes, and VAX-750s runs on 4.2/4.3BSD
+ UNIX. It is fully interactive, with a powerful user interface inside
+ Richard Stallman's GNU-EMACS editor. Since UNIX-based workstations
+ have a good deal of main memory and disk storage, no effort was made
+ to lower local mail state size by keeping message descriptors rather
+ than message text.
+
+ The local mail state consists of a number of BABYL-format mailboxes.
+ The interface is very similar to the RMAIL mail reader already
+ present in GNU-EMACS.
+
+ The user interface communicates with the repository through a DMSP
+
+
+
+Clark & Lambert [Page 19]
+
+RFC 993 December 1986
+
+
+ implementation built into the GNU-EMACS kernel. Changes to the local
+ mail state are immediately made on the repository; the repository is
+ fast enough that there is little noticeable delay in performing the
+ operation over the network.
+
+ There is no provision for automatic synchronization whenever new mail
+ arrives or old mail is changed by another client. Instead, users
+ must get any new mail explicitly. A simple "notification" program
+ runs in the background and wakes up every minute to check for new
+ mail; when mail arrives, the user executes a command to get the new
+ mail, synchronizing the mailbox at the same time.
+
+7.3. Repository code
+
+ The repository is implemented in C on 4.2/4.3BSD UNIX. Currently it
+ runs on DEC VAX-750s and Microvaxes, although other repositories will
+ soon be running on IBM RT machines and Sun workstations. The reposi-
+ tory code is designed to allow several clients belonging to a partic-
+ ular user to "concurrently" modify the user's state. A mailbox lock-
+ ing scheme prevents one client from modifying a mailbox while another
+ client is modifying the same mailbox.
+
+8. Conclusions
+
+ Pcmail is now used by a small community of people at the MIT Labora-
+ tory for Computer Science. The repository design works well, provid-
+ ing an efficient means of storing and maintaining mail state for
+ several users. Its performance is quite good when up to ten users
+ are connected; it remains to be seen whether or not the repository
+ will be efficient at managing the state of ten or a hundred times
+ that many users. Given sufficient disk storage, it should be able
+ to, since communication between different users' clients and the re-
+ pository is likely to be very asynchronous and likely to occur in
+ short bursts with long "quiet intervals" in between as users are busy
+ doing other things.
+
+ Members of another research group at LCS are currently working on a
+ replicated, scalable version of the repository designed to support a
+ very large community of users with high availability. This reposito-
+ ry also uses DMSP and has successfully communicated with clients that
+ use the current repository implementation. DMSP therefore seems to
+ be usable over several flavors of repository design.
+
+ The IBM PC clients are unfortunately very limited in the way of
+ resources, making local mail state manipulation difficult at times.
+ Synchronization is also relatively time consuming due to the low per-
+ formance of the PCs. The "batch-mode" that the PCs use tends to be
+ good for those PCs that spend a large percentage of their time un-
+ plugged and away from a network. It is somewhat inconvenient for
+ those PCs that are always connected to a network and could make good
+ use of an "interactive-mode" state manipulation.
+
+
+
+Clark & Lambert [Page 20]
+
+RFC 993 December 1986
+
+
+ The UNIX-based clients are far easier to use than their PC counter-
+ parts. Synchronization is much faster, and there is far more func-
+ tionality in the user interface (having an interface that runs within
+ GNU-EMACS helps a lot in this respect). Most of those people using
+ the Pcmail system use the UNIX-based client code.
+
+
+ APPENDIX
+
+
+A. DMSP Protocol Specification
+
+ Following are a list of DMSP operations by object type, their block
+ types and arguments, and their expected acknowledgement block types.
+ Each DMSP block has a different number; the first digit of each block
+ type defines the object being manipulated: Operations numbered 5xx
+ are general, operations numbered 6xx are user operations, operations
+ numbered 7xx are client operations, operations numbered 8xx are mail-
+ box operations, operations numbered 9xx are address operations,
+ operations numbered 10xx are bboard operations, and operations num-
+ bered 11xx are message operations.
+
+ Failure blocks contain two fields, a "code" and a "why". The "code"
+ is an unsigned number placing the error in one of several broad
+ categories (listed below). The "why" is a text string, possibly ex-
+ plaining the error in greater detail.
+
+ Error codes:
+
+ - 1: network error while reading or writing data
+
+ - 2: internal repository error. This can be due to lack
+ of memory, a fatal bug, lack of disk space, etc.
+
+ - 3: requested object already exists. For example, you
+ tried to create a mailbox that already exists
+
+ - 4: requested object not found. For example, you tried
+ to delete a message or a mailbox that doesn't exist.
+
+ - 5: protocol error. Typically DMSP protocol version
+ skew.
+
+ - 6: block argument error. For example, a "set-message-flag"
+ operation was attempted on a bboard by someone
+ other than the bboard's owner.
+
+ - 7: data read error. The repository was unable to read
+ the mail state information requested.
+
+
+
+
+
+Clark & Lambert [Page 21]
+
+RFC 993 December 1986
+
+
+ - 8: data write error. The repository was unable to
+ write out changed mail state information, perhaps
+ because the disk was full.
+
+ - 9: operating system error: Should be reserved for
+ things like fork or pipe call errors.
+
+ - 10: unexpected or unknown block type received. For
+ example, you sent a "delete-mailbox" block and received
+ a "mailbox-list" block in response.
+
+ Blocks marked "=>" flow from client to repository; blocks marked "<="
+ flow from repository to client. If more than one block can be sent,
+ the choices are delimited by "or" ("|") characters.
+
+ For clarity, each block type is put in a human-understandable form.
+ The block number is followed by an operation name; this name is never
+ transmitted as part of a USP block. Block arguments are identified
+ by name and type, and enclosed in square brackets. "Record" data
+ types are described by a list of "field-name:field-type" pairs con-
+ tained in square brackets. "Choice" data types are described by a
+ list of "tag-name:tag-type" pairs contained in square brackets. USP
+ data types are defined as follows (the definitions are brief; refer
+ to the USP specification for more detailed descriptions):
+
+A.1. Primitive data types
+
+ string (S): a series of bytes, null-byte padded to even length and
+ preceded by a 16-bit length specifier. Strings are sent in "net-
+ ascii" format (newline sequence is carriage return followed by
+ linefeed, single carriage returns to be followed by a null byte).
+
+ - cardinal (C): a 16-bit unsigned number.
+
+ - long-cardinal (LC): a 32-bit unsigned number.
+
+ - integer (I): a 16-bit signed number.
+
+ - long-integer (LI): a 32-bit signed number.
+
+ - boolean (B): a 16-bit number with either a 1 or a 0 in the
+ 16th bit.
+
+A.2. Compound data types
+
+ - sequence (SEQ): A list of data items, all the same type and
+ preceded by a 16-bit sequence length specifier.
+
+
+
+
+
+
+
+Clark & Lambert [Page 22]
+
+RFC 993 December 1986
+
+
+ - array (AR): A fixed-length list of data items, all the same
+ type. A particular array's length is fixed by the application.
+
+ - record (REC): A list of data items of any type. A
+ particular record's format is fixed by the application.
+
+ - choice (CH): One of a list of possible data types. The data
+ type contained in the choice is identified by a 16-bit numeric
+ tag. The application interprets the data item based on the tag
+ value.
+
+
+A.3. DMSP Abstract Data Types
+
+ Following are data types defined and used only by DMSP:
+
+ - client: a record with the following format:
+ REC[name:S, status:C] Status is either 1 (active) or 0
+ (inactive)
+
+ - mailbox: a record with the following format:
+ REC[name:S, next-uid:LC, #msgs:C, #new-msgs:C]
+
+ - bboard: a record with the following format:
+ REC[name:S, first-unread-message-UID:LC
+ number-of-unseen-messages:C highest-UID:LC]
+
+ - descriptor: a record with the following format:
+
+ - REC[UID:LC, flags:SEQ[B], from, to, date, subject:S,
+ #bytes:LC, #lines:LC]
+
+ - desc-choice: a choice with the following format:
+ CH[expunged-message-UID:LC, desc:descriptor] Descriptor
+ tag number is 1. Expunged-message tag number is 0.
+
+A.4. General operations
+
+ => 502 (send-version) [version:C]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+
+ => 503 (send-message) [message:SEQ[S]]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+
+
+
+
+
+
+
+Clark & Lambert [Page 23]
+
+RFC 993 December 1986
+
+
+A.5. User operations
+
+ => 600 (login) [name:S, password:S, client:S,
+ create-client-object?:B
+ batch-mode?:B]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S] |
+ 705 (force-client-reset) []
+
+
+ => 601 (logout) []
+ <= 500 (ok) []
+
+
+ => 602 (set-password) [old:S, new:S]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+A.6. Client operations
+
+ => 701 (list-clients) []
+ <= 700 (client-list) [client-list:SEQ[client]]
+
+
+ => 702 (create-client) [client:S]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+ => 703 (delete-client) [client:S]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+
+ => 704 (reset-client) [client:S]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+A.7. Mailbox operations
+
+ => 801 (list-mailboxes) []
+ <= 800 (mailbox-list) [mailbox-list:SEQ[mailbox]]
+
+
+ => 802 (create-mailbox) [mailbox:S]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+
+ => 803 (delete-mailbox) [mailbox:S]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+
+
+Clark & Lambert [Page 24]
+
+RFC 993 December 1986
+
+
+ => 804 (reset-mailbox) [mailbox:S]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+
+ => 805 (expunge-mailbox) [mailbox:S]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S
+
+A.8. Address operations
+
+ => 901 (list-addresses) [mailbox:S]
+ <= 501 (failure) [code:C, why:S] |
+ 900 (address-list) [address-list:SEQ[S]]
+
+
+ => 902 (create-address) [mailbox:S, address:S]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+
+ => 903 (delete-address) [mailbox:S, address:S]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+A.9. Bboard operations
+
+ => 1001 (list-bboards) []
+ <= 1000 (bboard-list) [bboard-list:SEQ[bboard]]
+ 501 (failure) [code:C, why:S]
+
+
+ => 1002 (create-bboard) [name:S]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+
+ => 1003 (delete-bboard) [name:S]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+
+ => 1004 (subscribe-bboard) [name:S]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+
+ => 1005 (unsubscribe-bboard) [name:S]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+
+
+
+Clark & Lambert [Page 25]
+
+RFC 993 December 1986
+
+
+ => 1006 (set-bboard-first-unread) [name:S, UID:LC]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+ => 1007 (list-all-bboards) []
+ <= 1008 (bboard-name-list) [bboard-name-list:SEQ[S]]
+ 501 (failure) [code:C, why:S]
+
+A.10. Message operations
+
+ => 1102 (get-descriptors) [mailbox:S,
+ low-uid:LC,
+ high-uid:LC]
+ <= 501 (failure) [code:C, why:S] |
+ 1100 (desc-list) [desc-list:SEQ[desc-choice]]
+
+
+ => 1103 (get-changed-descriptors) [mailbox:S,
+ max-to-send:C]
+ <= 501 (failure) [code:C, why:S] |
+ 1100 (desc-list) [desc-list:SEQ[desc-choice]]
+
+
+ => 1104 (reset-changed-descriptors) [
+ mailbox:S,
+ start-uid:LC,
+ end-uid:LC]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+
+ => 1105 (get-message-text) [mailbox:S,
+ uid:LC]
+ <= 501 (failure) [code:C, why:S] |
+ 1101 (message) [message:SEQ[S]]
+
+
+ => 1106 (print-message) [mailbox:S,
+ uid:LC,
+ printer-name:S]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S]
+
+
+ => 1107 copy-message[source-mailbox:S,
+ target-mailbox:S,
+ source-uid:LC]
+ <= 501 (failure) [code:C, why:S]
+ <= 501 (failure) [code:C, why:S] |
+ 1100 (desc-list) [desc-list:SEQ[desc-choice]]
+
+
+
+
+Clark & Lambert [Page 26]
+
+RFC 993 December 1986
+
+
+ => 1108 (set-flag) [mailbox:S,
+ uid:LC,
+ flag-number:C,
+ flag-setting:B]
+ <= 500 (ok) [] |
+ 501 (failure) [code:C, why:S] 30
+
+ DMSP block types by number
+
+ General block types
+
+ ok 500
+ failure 501
+ send-version 502
+ send-message 503
+
+ User operation block types
+
+ login 600
+ logout 601
+ set-password 602
+
+ Client operation block types
+
+ client-list 700
+ list-clients 701
+ create-client 702
+ delete-client 703
+ reset-client 704
+ force-client-reset 705
+
+ Mailbox operation block types
+
+ mailbox-list 800
+ list-mailboxes 801
+ create-mailbox 802
+ delete-mailbox 803
+ reset-mailbox 804
+ expunge-mailbox 805
+
+ Address operation block types
+
+ address-list 900
+ list-addresses 901
+ create-address 902
+ delete-address 903
+
+
+
+
+
+
+
+
+Clark & Lambert [Page 27]
+
+RFC 993 December 1986
+
+
+ Bboard operation block types
+
+ bboard-list 1000
+ list-bboards 1001
+ create-bboard 1002
+ delete-bboard 1003
+ subscribe-bboard 1004
+ unsubscribe-bboard 1005
+ set-bboard-first-unread 1006
+ get-n-new-bboard-descriptors 1007
+ list-all-bboards 1008
+ bboard-name-list 1009
+
+ Message operation block types
+
+ descriptor-list 1100
+ message 1101
+ get-descriptors 1102
+ get-changed-descriptors 1103
+ reset-changed-descriptors 1104
+ get-message-text 1105
+ print-message 1106
+ copy-message 1107
+ set-flag 1108
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clark & Lambert [Page 28]
+