-- RPC is the Cedar interface to the RPC runtime. -- RPC is exactly parallel to MesaRPC, the Mesa-compatible interface. -- File [Ivy]RPC>RPC.mesa -- Andrew Birrell 3-Dec-81 10:14:28 -- BZM 29-Oct-81 11:46:31 -- Taft 6-Oct-81 18:35:28 DIRECTORY Rope USING [ROPE], MesaRPC USING [AuthenticateFailure, CallFailure, Conversation, ConversationID, ConversationLevel, EncryptionKey, EndConversation, ExportFailure, GetLevel, ImportFailure, GetConversationID, GenerateConversation, matchAllVersions, maxPrincipalLength, maxShortStringLength, SecurityLevel, ShortSTRING, unencrypted, VersionRange]; RPC: DEFINITIONS IMPORTS MesaRPC = BEGIN -- Short string/rope/atom types. Used only by Lupine clients. maxShortStringLength: CARDINAL = MesaRPC.maxShortStringLength; -- maximum length of ShortSTRING/ShortROPE/ShortATOM values -- ShortSTRING: TYPE = MesaRPC.ShortSTRING; ShortROPE: TYPE = Rope.ROPE; ShortATOM: TYPE = ATOM; -- Types for Import and Export calls. InterfaceName: TYPE = RECORD [ type: ShortROPE _ NIL, -- e.g., "AlpineAccess.Alpine" instance: ShortROPE _ NIL, -- e.g., "MontBlanc.Alpine" version: VersionRange _ matchAllVersions ]; defaultInterfaceName: InterfaceName = []; VersionRange: TYPE = MesaRPC.VersionRange; matchAllVersions: VersionRange = MesaRPC.matchAllVersions; -- Parameter storage zones. Used only by Lupine clients. Zones: TYPE = RECORD [ gc: ZONE _ NIL, heap: UNCOUNTED ZONE _ NIL, mds: MDSZone _ NIL ]; standardZones: Zones = []; -- Encryption and Authentication facilities. maxPrincipalLength: CARDINAL = MesaRPC.maxPrincipalLength; -- Limit on length of ropes used for Principal names -- Principal: TYPE = ShortROPE; EncryptionKey: TYPE = MesaRPC.EncryptionKey; MakeKey: PROCEDURE [text: Rope.ROPE] RETURNS[EncryptionKey]; Conversation: TYPE = MesaRPC.Conversation; SecurityLevel: TYPE = MesaRPC.SecurityLevel; ConversationLevel: TYPE = MesaRPC.ConversationLevel; unencrypted: Conversation = MesaRPC.unencrypted; GenerateConversation: PROC RETURNS[Conversation] = INLINE { RETURN[ MesaRPC.GenerateConversation[] ] }; StartConversation: PROCEDURE[caller: Principal, key: EncryptionKey, callee: Principal, level: ConversationLevel ] RETURNS[conversation: Conversation]; EndConversation: PROCEDURE [conversation: Conversation] = INLINE { MesaRPC.EndConversation[conversation] }; GetCaller: PROCEDURE [conversation: Conversation] RETURNS [caller: Principal]; GetLevel: PROCEDURE [conversation: Conversation] RETURNS [level: SecurityLevel] = INLINE { RETURN[ MesaRPC.GetLevel[conversation] ] }; ConversationID: TYPE = MesaRPC.ConversationID; GetConversationID: PROC[conversation: Conversation] RETURNS[id: ConversationID] = INLINE { RETURN[ MesaRPC.GetConversationID[conversation] ] }; -- Public signals: AuthenticateFailure: TYPE = MesaRPC.AuthenticateFailure; ExportFailure: TYPE = MesaRPC.ExportFailure; ImportFailure: TYPE = MesaRPC.ImportFailure; CallFailure: TYPE = MesaRPC.CallFailure; AuthenticateFailed: ERROR[why: AuthenticateFailure]; -- Raised by StartConversation -- ExportFailed: ERROR[why: ExportFailure]; -- Raised by ExportInterface -- ImportFailed: ERROR[why: ImportFailure]; -- Raised by ImportInterface -- CallFailed: SIGNAL[why: CallFailure]; -- Raised by any remote call; only why=timeout is resumable -- END.