<> <> <> <> <> <> DIRECTORY PupBuffer USING [Buffer], DESFace USING [Block, IV, Key], PupWKS USING [rpc], 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 <<******** Start-up sequence. Main control is RPCPktIO ********>> StartRPCBinding: PROC [RPCPkt.Machine]; StartRPCSecurity: PROC [RPCPkt.Machine]; StartRPCPktStreams: PROC [RPCPkt.Machine]; RollbackRPCBinding: PROC; RollbackRPCSecurity: PROC; RollbackRPCPktStreams: PROC; <<******** Binding: exported by RPCBinding ********>> ExportInstance: TYPE = RECORD[ <> id: RPCPkt.DispatcherID, dispatcher: RPCLupine.Dispatcher, 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: PupBuffer.Buffer,-- 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: PupBuffer.Buffer, pktLength: RPCLupine.DataLength, signalHandler: RPCLupine.Dispatcher, convHandle: RPC.Conversation] RETURNS[resumePkt: RPCLupine.RPCPkt, resumeLength: RPCLupine.DataLength, myLocalFrame: POINTER]; <> ServerMain: PROCEDURE; <> <<******** For some Voice kludgery that I don't understand /HGM, Jan 86 ********>> <<>> CopyPrincipal: PROC [from: RPC.Principal, to: LONG POINTER]; EntryGenerate: PROC [ level: RPC.SecurityLevel, iv: DESFace.IV, originator, responder: RPC.Principal, convKey: DESFace.Key, auth: RPCInternal.Authenticator] RETURNS [ conversation: REF RPCInternal.ConversationObject ]; AddToExportTable: PROC [interface: RPC.InterfaceName, dispatcher: RPCLupine.Dispatcher, stubProtocol: RPC.VersionRange] RETURNS [ instance: RPCPkt.ExportHandle ]; <<>> <<******** For new Communication package /HGM, Jan 86 ********>> <<>> AllocBuffer: PROC RETURNS [b: PupBuffer.Buffer]; GiveBackBuffer: PROC [b: PupBuffer.Buffer]; SendBuffer: PROC [b: PupBuffer.Buffer]; <<******** Moved from RPCPkt /HGM, Apr 86 ********>> <<>> pktLengthOverhead: RPCLupine.DataLength = SIZE[RPCPkt.Header] + 1--checksum--; <> SetupResponse: PROC [header: LONG POINTER TO RPCPkt.Header] = INLINE BEGIN header.destHost _ header.srceHost; header.destSoc _ PupWKS.rpc; header.destPSB _ header.srcePSB; header.outcome _ result; END; PktExchangeState: TYPE = { receiving, sending, call, endCall, authReq }; PktExchange: PROC[inPkt: RPCLupine.RPCPkt, length: RPCLupine.DataLength, maxlength: RPCLupine.DataLength, state: PktExchangeState, signalHandler: RPCLupine.Dispatcher _ NIL] RETURNS[newPkt: BOOLEAN, newLength: RPCLupine.DataLength]; <> IdleReceive: PROC[pkt: RPCLupine.RPCPkt, maxlength: CARDINAL]; <> EnqueueAgain: PROC [b: PupBuffer.Buffer]; <> END.