-- Copyright (C) 1987 by Xerox Corporation. All rights reserved. -- Stub file was translated on April 4, 1987 3:21:18 pm PST by Lupine of January 22, 1987 5:37:32 pm PST -- Source interface LarkFeep came from file LarkFeep.bcd, which was created on April 4, 1987 3:21:13 pm PST with version stamp 101#214#2235355475 from source of February 6, 1987 11:04:05 am PST. -- The RPC stub modules for LarkFeep are: -- LarkFeepRpcControl.mesa; -- LarkFeepRpcClientImpl.mesa; -- LarkFeepRpcBinderImpl.mesa; -- LarkFeepRpcServerImpl.mesa. -- The parameters for this translation are: -- Target language = Cedar -- Default parameter passing = VALUE -- Deallocate server heap arguments = TRUE -- Inline RpcServerImpl dispatcher stubs = TRUE -- Declare signals = TRUE -- Warn about short POINTER ("MDS") allocations = TRUE -- Maximum number of dynamic heap NEWs = 50, MDS NEWs = 50 -- Acceptable parameter protocols = VersionRange[1..1]. DIRECTORY RefID, Rope, Thrush, LarkFeep, LarkFeepRpcControl USING [InterMdsCallsOnly, LupineProtocolVersion, ProcedureIndex, SignalIndex], RPC USING [EncryptionKey, InterfaceName, Principal, standardZones, Zones], RPCLupine --USING SOME OF [Call, DataLength, Dispatcher, ExportHandle, -- ExportInterface, GetStubPkt, maxDataLength, maxPrincipalLength, -- maxShortStringLength, pktOverhead, ReceiveExtraPkt, SendPrelimPkt, -- StartCall, StartSignal, StubPkt, UnexportInterface]--, LupineRuntime --USING SOME OF [BindingError, CheckPktLength, CopyFromPkt, -- CopyFromMultiplePkts, CopyToPkt, CopyToMultiplePkts, defaultZones, -- DispatchingError, FinishThisPkt, ListHeader, MarshalingError, -- MarshalingExprError, MarshalAtom, MarshalRope, NilHeader, ProtocolError, -- RopeHeader, RpcPktDoubleWord, RuntimeError, SequenceHeader, SHORT, -- StartNextPkt, StringHeader, StubPktDoubleWord, TranslationError, -- UnmarshalingError, UnmarshalingExprError, UnmarshalAtom, UnmarshalRope, -- WordsForChars]--, Atom --USING SOME OF [GetPName, MakeAtom]--; LarkFeepRpcServerImpl: MONITOR IMPORTS LarkFeep, RpcPrivate: RPCLupine, Lupine: LupineRuntime, Atom, Rope EXPORTS LarkFeepRpcControl SHARES LarkFeep, LarkFeepRpcControl, Rope = BEGIN OPEN LarkFeep, RpcControl: LarkFeepRpcControl, RpcPublic: RPC; -- Standard remote binding routines. bound: BOOLEAN ← FALSE; myInterface: RpcPrivate.ExportHandle; paramZones: RpcPublic.Zones ← RpcPublic.standardZones; ExportInterface: PUBLIC ENTRY SAFE PROCEDURE [ interfaceName: RpcPublic.InterfaceName, user: RpcPublic.Principal, password: RpcPublic.EncryptionKey, parameterStorage: RpcPublic.Zones ] = TRUSTED BEGIN ENABLE UNWIND => NULL; IsNull: PROCEDURE [string: Rope.ROPE] RETURNS [BOOLEAN] = INLINE {RETURN[string.Length[] = 0]}; IF bound THEN Lupine.BindingError; myInterface ← RpcPrivate.ExportInterface [ interface: [ type: IF ~IsNull[interfaceName.type] THEN interfaceName.type ELSE "LarkFeep~101#214#2235355475", instance: interfaceName.instance, version: interfaceName.version ], user: user, password: password, dispatcher: ServerDispatcher, localOnly: RpcControl.InterMdsCallsOnly, stubProtocol: RpcControl.LupineProtocolVersion ]; paramZones ← [ gc: IF parameterStorage.gc # NIL THEN parameterStorage.gc ELSE Lupine.defaultZones.gc, heap: IF parameterStorage.heap # NIL THEN parameterStorage.heap ELSE Lupine.defaultZones.heap, mds: IF parameterStorage.mds # NIL THEN parameterStorage.mds ELSE Lupine.defaultZones.mds ]; bound ← TRUE; END; UnexportInterface: PUBLIC ENTRY SAFE PROCEDURE = TRUSTED BEGIN ENABLE UNWIND => NULL; IF ~bound THEN Lupine.BindingError; myInterface ← RpcPrivate.UnexportInterface[myInterface]; paramZones ← RpcPublic.standardZones; bound ← FALSE; END; -- Public procedure dispatcher and public signal and error catcher. ServerDispatcher: --PROCEDURE [pkt: RPCPkt, callLength: DataLength, -- lastPkt: BOOLEAN, localConversation: Conversation] RETURNS [returnLength: -- DataLength]-- RpcPrivate.Dispatcher = BEGIN -- Catch public signals. ENABLE BEGIN END; -- Catch public signals. -- Call public procedures (still in dispatcher). SELECT LOOPHOLE[pkt.data[0], RpcControl.ProcedureIndex] FROM Feep => RETURN[ FeepStub[pkt: pkt, callLength: callLength, lastPkt: lastPkt, localConversation: localConversation]]; Flash => RETURN[ FlashStub[pkt: pkt, callLength: callLength, lastPkt: lastPkt, localConversation: localConversation]]; ENDCASE => RETURN[Lupine.DispatchingError[]]; END; -- ServerDispatcher -- Public procedure dispatcher stubs. FeepStub: --PROCEDURE [shhh: Thrush.SHHH, serviceID: RefID.ID, convID: -- Thrush.ConversationID, requestingParty: Thrush.PartyID, number: -- Rope.ROPE, noisy: BOOLEAN, on: CARDINAL, off: CARDINAL] -- RETURNS [nb: Thrush.NB]-- RpcPrivate.Dispatcher = INLINE BEGIN serviceID: RefID.ID; convID: Thrush.ConversationID; requestingParty: Thrush.PartyID; number: Rope.ROPE; noisy: BOOLEAN; on: CARDINAL; off: CARDINAL; nb: Thrush.NB; ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [ transferIndex (0): RpcControl.ProcedureIndex, serviceID (1): RefID.ID, convID (3): Thrush.ConversationID, requestingParty (5): Thrush.PartyID, noisy (7): BOOLEAN, on (8): CARDINAL, off (9): CARDINAL]; argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0]; pktLength: RpcPrivate.DataLength ← 10; BEGIN -- OnePkt. onePkt: BOOLEAN = lastPkt; IF ~onePkt THEN BEGIN -- Must move statics from pkt now. [serviceID: serviceID, convID: convID, requestingParty: requestingParty, noisy: noisy, on: on, off: off] ← argPkt↑; END; BEGIN -- Unmarshal number: Rope.ROPE from pkt.data[pktLength]. [number, pktLength] ← Lupine.UnmarshalRope[pkt, pktLength, FALSE]; END; -- Unmarshal number. Lupine.CheckPktLength[pkt: pkt, pktLength: pktLength]; IF onePkt THEN [nb] ← Feep[localConversation, argPkt.serviceID, argPkt.convID, argPkt.requestingParty, number, argPkt.noisy, argPkt.on, argPkt.off] ELSE [nb] ← Feep[localConversation, serviceID, convID, requestingParty, number, noisy, on, off]; END; -- OnePkt. pktLength ← 0; BEGIN -- Marshal nb: Thrush.NB to pkt.data[pktLength]. pktLength ← Lupine.MarshalAtom[nb, pkt, pktLength]; END; -- Marshal nb. RETURN[returnLength: pktLength]; END; -- FeepStub. FlashStub: --PROCEDURE [shhh: Thrush.SHHH, serviceID: RefID.ID, convID: -- Thrush.ConversationID, requestingParty: Thrush.PartyID, actionID: -- Thrush.ActionID, extraTime: CARDINAL] -- RETURNS [nb: Thrush.NB]-- RpcPrivate.Dispatcher = INLINE BEGIN nb: Thrush.NB; ArgumentOverlay: TYPE = MACHINE DEPENDENT RECORD [ transferIndex (0): RpcControl.ProcedureIndex, serviceID (1): RefID.ID, convID (3): Thrush.ConversationID, requestingParty (5): Thrush.PartyID, actionID (7): Thrush.ActionID, extraTime (9): CARDINAL]; argPkt: LONG POINTER TO ArgumentOverlay = @pkt.data[0]; pktLength: RpcPrivate.DataLength ← 10; Lupine.CheckPktLength[pkt: pkt, pktLength: pktLength]; [nb] ← Flash[localConversation, argPkt.serviceID, argPkt.convID, argPkt.requestingParty, argPkt.actionID, argPkt.extraTime]; pktLength ← 0; BEGIN -- Marshal nb: Thrush.NB to pkt.data[pktLength]. pktLength ← Lupine.MarshalAtom[nb, pkt, pktLength]; END; -- Marshal nb. RETURN[returnLength: pktLength]; END; -- FlashStub. -- Marshall/Unmarshal procedures. -- No module initialization. END. -- LarkFeepRpcServerImpl.