<> <> <> <> DIRECTORY Rope USING[ ROPE ], GVBasics USING[ ItemType, Password, RName ]; GVSend: CEDAR DEFINITIONS = BEGIN OPEN Rope; <> Handle: TYPE = REF Object; Object: TYPE; Create: PROC RETURNS[handle: Handle]; <> <> <> <> <> <> <> SendFailed: ERROR [ why: Rope.ROPE, notDelivered: BOOLEAN ] ; <<"StartSend" raises no signals that may be caught by the client. The ERROR "SendFailed" may be raised by any of AddRecipient, CheckValidity, StartItem, AddToItem, or Send if some communication failure occurs. If it is raised, the client should generally catch it, go back to the start of the message, and re-call "StartSend". "StartSend" will then attempt to find a better mail server to talk to. Only when "StartSend" returns "allDown" is it not possible to>> << send the message. The client may want to inform the user if this>> << re-try mechanism has been invoked.>> StartSendInfo: TYPE = MACHINE DEPENDENT { ok, badPwd, badSender, badReturnTo, allDown }; SetMailDropList: PROC [list: Rope.ROPE]; StartSend: PROC[ handle: Handle, senderPwd: ROPE, sender: GVBasics.RName, returnTo: GVBasics.RName _ NIL, validate: BOOLEAN ] RETURNS[ StartSendInfo ]; <> SendFromClient: PROC[ handle: Handle, fromNet: [0..256) _ 0, fromHost: [0..256) _ 0, senderKey: GVBasics.Password, sender: GVBasics.RName, returnTo: GVBasics.RName, validate: BOOLEAN ] RETURNS[ StartSendInfo ]; <> AddRecipient: PROC[ handle: Handle, recipient: GVBasics.RName ]; <> CheckValidity: PROC[ handle: Handle, notify: PROC[INT,GVBasics.RName] ] RETURNS[ ok: INT ]; <> StartItem: PROC[ handle: Handle, type: GVBasics.ItemType ]; <> StartText: PROC[ handle: Handle ] = INLINE{ StartItem[handle,Text] }; AddToItem: PROC[ handle: Handle, buffer: ROPE ]; <> Send: PROC[ handle: Handle ]; <> Abort: PROC[ handle: Handle ]; <> ExpandInfo: TYPE = MACHINE DEPENDENT { ok, notFound, individual, allDown} ; ExpandFailed: ERROR[why: Rope.ROPE]; Expand: PROC[name: GVBasics.RName, work: PROC[GVBasics.RName]] RETURNS[ ExpandInfo ]; <> END.