📄 rfc984.txt
字号:
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 alsoClark & Lambert [Page 24]RFC 984 May 1986PCMAIL 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.Clark & Lambert [Page 25]RFC 984 May 1986PCMAILI. 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]Clark & Lambert [Page 26]RFC 984 May 1986PCMAIL => 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]Clark & Lambert [Page 27]RFC 984 May 1986PCMAIL => 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] ]]]]Clark & Lambert [Page 28]RFC 984 May 1986PCMAIL => 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]Clark & Lambert [Page 29]RFC 984 May 1986PCMAIL DMSP block types by number General block types
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -