<> <> <> <> <> DIRECTORY BufferDefs USING[ PupBuffer ], DESFace USING[ Block, IV, Key ], RPC USING[ Conversation, InterfaceName, Principal, SecurityLevel, VersionRange ], RPCLupine USING[ DataLength, Dispatcher, RPCPkt], RPCPkt USING[ CallCount, ConnectionID, ConversationID, DispatcherDetails, DispatcherID, ExportHandle, Header, PktConversationID, PktID, Machine]; RPCInternal: DEFINITIONS = BEGIN <<******** Modules for start-up sequence. Main control is RPCPktIO ********>> RPCBinding: PROGRAM; RPCSecurity: PROGRAM; RPCPktStreams: PROGRAM; <<******** Binding: exported by RPCBinding ********>> ExportInstance: TYPE = RECORD[ <> id: RPCPkt.DispatcherID, dispatcher: RPCLupine.Dispatcher, mds: CARDINAL, name: RPC.InterfaceName, stubProtocol: RPC.VersionRange ]; ExportTable: TYPE = RECORD[ used: CARDINAL, entries: SEQUENCE length: RPCPkt.ExportHandle OF ExportInstance]; exportTable: REF ExportTable; ImportInstance: TYPE = RECORD[ <> host: RPCPkt.Machine, dispatcher: RPCPkt.DispatcherDetails ]; <<******** Authentication/Security: exported by RPCSecurity ********>> ConversationObject: TYPE = RECORD[ next: REF ConversationObject, id: RPCPkt.ConversationID, level: RPC.SecurityLevel, key: DESFace.Key, -- conversation key -- iv: DESFace.IV, originator: RPC.Principal, responder: RPC.Principal, authenticator: Authenticator]; Authenticator: TYPE = REF AuthenticatorObject; AuthenticatorObject: TYPE = RECORD[ <> SEQUENCE nBlks: CARDINAL OF DESFace.Block ]; firstConversation: RPCPkt.PktConversationID; -- for unencrypted conversations -- EncryptPkt: PROC[pkt: RPCLupine.RPCPkt, l: RPCLupine.DataLength] RETURNS[CARDINAL]; <> DecryptPkt: PROC[header: LONG POINTER TO RPCPkt.Header, convHandle: RPC.Conversation] RETURNS[ok: BOOLEAN, l: RPCLupine.DataLength]; <> GetConnectionState: PROC[ decrypted: BOOLEAN, callPkt: RPCLupine.RPCPkt] RETURNS[ ok: BOOLEAN, id: RPCPkt.ConnectionID, call: RPCPkt.CallCount, conv: RPC.Conversation, l: RPCLupine.DataLength ]; <> ReplyToRFA: PROC[b: BufferDefs.PupBuffer,-- incoming packet -- callHeader: LONG POINTER TO RPCPkt.Header, -- encrypted -- callPktID: RPCPkt.PktID-- clear --, convHandle: RPC.Conversation] RETURNS[BOOLEAN]; <> <<******** Packet stream functions: exported by RPCPktStream ********>> DoSignal: PROC[b: BufferDefs.PupBuffer, pktLength: RPCLupine.DataLength, signalHandler: RPCLupine.Dispatcher, convHandle: RPC.Conversation] RETURNS[resumePkt: RPCLupine.RPCPkt, resumeLength: RPCLupine.DataLength, myLocalFrame: POINTER]; <> ServerMain: PROCEDURE; <> END.