RFC984 - PCMAIL: A distributed mail system for personal comp(2)

时间:2005-02-11 来源: 作者: 点击:
Halfway through the message transmission, "office-client" runs out of disk space. Because all DMSP operations are defined to be atomic, the portion of the message already transmitted is destroyed loc
  
Halfway through the message transmission, "office-client" runs out of
disk space. Because all DMSP operations are defined to be 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's client logs out.

601 (logout) []

The repository does any housecleaning it needs to do, acknowledges
the logout request, and closes the USP connection.

7. A Current Pcmail Implementation

The following section briefly describes a current implementation of
Pcmail that services a small community of users. The Pcmail
repository runs under UNIX on a DEC VAX-750 connected to the
Internet. The clients are IBM PCs, XTs, and ATs. The network
software that communicates with the repository allows only
"batch-mode" operation. 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
operation. Users are given a rich variety of commands to operate on

RFC984 May 1986
PCMAIL

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
program takes any actions queued while operating the user interface,
and converts them into DMSP operations. All queued changes are made
before any synchronization is performed.

The limitation of client operation to batch mode was made for the
following reasons: first, the implementation is slanted toward use of
portable computers as clients. These computers are rarely connected
to the network, making interactive mode unnecessary. Those clients
that are constantly connected to the network run slightly less
efficiently than they could (since users must make changes locally
and then run the action-processing/synchronization program, rather
than simply making changes interactively).

Another important reason for limiting operation to batch mode is that
it allows a very simple locking scheme to prevent problems raised by
concurrent state updates. A user may have several clients; it is
therefore likely that the repository could get into a variety of
inconsistent states as different clients try to change the
repository's global mail state at the same time. To prevent these
inconsistencies, a user's mail state is locked as soon as a client
connects to the repository. The lock is released when the client
disconnects from the repository. This locking scheme is simple to
implement, but makes interactive-mode operation very cumbersome: if a
user remains constantly connected to the network (i.e. in interactive
mode), the repository would be unavailable to any of the user's other
clients for an unacceptable length of time.

8. Conclusions

Pcmail is now used by a small community of people at the MIT
Laboratory for Computer Science. The repository design works well,
providing a fairly efficient means of storing and maintaining mail
state for several users. Members of another research group at LCS
are currently working on a replicated, scaleable version of the
repository designed to support a very large community of users with
high availability. This repository also uses DMSP and has
successfully communicated with clients that use the current
repository implementation. DMSP therefore seems to be useable over
several flavors of repository design. The clients, being PCs, are
unfortunately very limited in the way of resources, making local mail
state manipulation difficult at times. Synchronization is also

RFC984 May 1986
PCMAIL

relatively time consuming due to the low performance of the PCs. The
"batch-mode" of client operation is very useful for portable
computers that spend a large percentage of their time unplugged and
away from a network. It is somewhat less useful for the majority of
the clients, which are always connected to the network and could make
good use of an "interactive-mode" state manipulation.

RFC984 May 1986
PCMAIL

I. DMSP Protocol Specification

Following is a list of DMSP block types and DMSP operations by object
type. Again, "=>" marks blocks flowing from client to repository;
"<=" marks blocks flowing from repository to client.

General operations:

=> or <= 503 (abort-request) [why:str]
(no acknowledgement)

=> 504 (start-debug) []
<= 500 (ok) [] |
501 (failure) [why:str]

=> 505 (end-debug) []
<= 500 (ok) []

=> 506 (send-version) [version:card]
<= 500 (ok) [] |
501 (failure) [why:str]

=> 507 (log-message) [message:str]
<= 500 (ok) [] |
501 (failure) [why:str]

=> 508 (send-message) [message:seq[str]]
<= 500 (ok) [] |
501 (failure) [why:str]

User operations:

=> 600 (login) [name:str, password:str,
client:str, create-client-object?:bool
batch-mode-flag:bool]
<= 500 (ok) [] |
501 (failure) [why:str] |
705 (force-client-reset) []

=> 601 (logout) []
<= 500 (ok) []

=> 602 (add-user) [name:str, password:str]
<= 500 (ok) [] |
501 (failure) [why:str]

RFC984 May 1986
PCMAIL

=> 603 (remove-user) [user:str]
<= 500 (ok) [] |
501 (failure) [why:str]

=> 604 (set-password) [old:str, new:str]
<= 500 (ok) [] |
501 (failure) [why:str]

Client operations:

=> 700 (list-clients) []
<= 701 (client-list) [client-list:seq[
rec[name:str], status:card]]

=> 702 (add-client) [client:str]
<= 500 (ok) [] |
501 (failure) [why:str]

=> 703 (remove-client) [client:str]
<= 500 (ok) [] |
501 (failure) [why:str]

=> 704 (reset-client) [client:str]
<= 500 (ok) [] |
501 (failure) [why:str]

Mailbox operations:

=> 800 (list-mailboxes) []
<= 801 (mailbox-list) [mailbox-list:seq[
rec[mailbox:str,
next-uid:lcard,
num-msgs:card,
num-unseen-msgs:card]]]

=> 802 (add-mailbox) [mailbox:str]
<= 500 (ok) [] |
501 (failure) [why:str]

=> 803 (remove-mailbox) [mailbox:str]
<= 500 (ok) [] |
501 (failure) [why:str]

=> 808 (expunge-mailbox) [mailbox:str]
<= 500 (ok) [] |
501 (failure) [why:str]

RFC984 May 1986
PCMAIL

=> 809 (reset-mailbox) [mailbox:str]
<= 500 (ok) [] |
501 (failure) [why:str]

Address operations:

=> 804 (list-addresses) [mailbox:str]
<= 501 (failure) [why:str] |
805 (address-list) [address-list:seq[str]]

=> 806 (add-address) [mailbox:str, address:str]
<= 500 (ok) [] |
501 (failure) [why:str]

=> 807 (remove-address) [mailbox:str, address:str]
<= 500 (ok) [] |
501 (failure) [why:str]

Message operations:

=> 1100 (get-descriptor-flags) [mailbox:str, uid:lcard]
<= 1101 (descriptor-flags) [flags:seq[bool]] |
501 (failure) [why:str]

=> 1102 (get-descriptors) [mailbox:str,
low-uid:lcard,
high-uid:lcard]
<= 501 (failure) [why:str] |
1103 (descriptor-list) [descriptor-list:seq[
ch[
expunged[uid:lcard],
descriptor[rec[uid:lcard,
flags:seq[bool],
from-field:str,
to-field:str,
date-field:str,
subject-field:str,
nun-bytes:lcard,
num-lines:lcard]
]]]]

RFC984 May 1986
PCMAIL

=> 1105 (get-changed-descriptors) [mailbox:str,
max-to-send:card]
<= 501 (failure) [why:str] |
1103 (descriptor-list) [descriptor-list:seq[
ch[
expunged[uid:lcard],
descriptor[rec[uid:lcard,
flags:seq[bool],
from-field:str,
to-field:str,
date-field:str,
subject-field:str,
num-bytes:lcard,
num-lines:lcard]
]]]]

=> 1106 (reset-changed-descriptors) [
mailbox:str,
start-uid:lcard,
end-uid:lcard]
<= 500 (ok) [] |
501 (failure) [why:str]

=> 1107 (get-message-text) [mailbox:str,
uid:lcard]
<= 501 (failure) [why:str] |
1110 (message) [message:seq[str]]

=> 1108 (print-message) [mailbox:str,
uid:lcard,
printer-name:str]
<= 500 (ok) [] |
501 (failure) [why:str]

=> 1109 (set-flag) [mailbox:str,
uid:lcard,
flag-number:card,
flag-setting:bool]
<= 500 (ok) [] |
501 (failure) [why:str]

=> 1111 copy-message[source-mailbox:str,
target-mailbox:str,
source-uid:lcard]
<= 500 (ok) [] |
501 (failure) [why:str]

RFC984 May 1986
PCMAIL

DMSP block types by number

General block types

ok 500
failure 501
abort-request 503
start-debug 504
end-debug 505
send-version 506
log-message 507
send-message 508

User operation block types

login 600
logout 601
add-user 602
remove-user 603
set-password 604

Client operation block types

list-clients 700
client-list 701
add-clien 702
remove-client 703
reset-client 704
force-client-reset 705

Mailbox operation block types

list-mailboxes 800
mailbox-list 801
add-mailbox 802
remove-mailbox 803
expunge-mailbox 808
reset-mailbox 809

RFC984 May 1986
PCMAIL

Address operation block types

list-addresses 804
address-list 805
add-address 806
remove-address 807

Message operation block types

get-descriptor-flags 1100
descriptor-flags 1101
get-descriptors 1102
descriptor-list 1103
get-changed-descriptors 1105
reset-changed-descriptors 1106
get-message-text 1107
print-message 1108
set-flag 1109
message 1110
copy-message 1111
------分隔线----------------------------
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容