<> <> <> <> <> <<>> DIRECTORY Basics USING [FWORD, HWORD], CrRPC USING [BeginErrorProc, BeginRejectProc, BeginReturnProc, ProcsObject, Handle, HandleClass, RefAddress, ServerProc, StopServerQueryProc], XNS USING [Host, Net]; CrRPCBackdoor: CEDAR DEFINITIONS ~ { OPEN CrRPC; <> <> <> FWORD: TYPE ~ Basics.FWORD; HWORD: TYPE ~ Basics.HWORD; bitsPerByte: CARDINAL ~ BITS[BYTE]; <> courierVersionNum: CARDINAL ~ 3; <
> SessionHdr: TYPE ~ WORD16 MACHINE DEPENDENT RECORD [ lowVersion: HWORD, highVersion: HWORD ]; sessionHdrBytes: CARDINAL ~ BITS[SessionHdr]/BITS[BYTE]; sessionHdrHWords: CARDINAL ~ BITS[SessionHdr]/BITS[HWORD]; <
> MsgHdr: TYPE ~ WORD16 MACHINE DEPENDENT RECORD [ msgType: HWORD ]; callMsgType: HWORD ~ [0, 0]; rejectMsgType: HWORD ~ [0, 1]; returnMsgType: HWORD ~ [0, 2]; abortMsgType: HWORD ~ [0, 3]; msgHdrBytes: CARDINAL ~ BITS[MsgHdr]/BITS[BYTE]; msgHdrHWords: CARDINAL ~ BITS[MsgHdr]/BITS[HWORD]; <
> CallHdr: TYPE ~ WORD16 MACHINE DEPENDENT RECORD [ tID: HWORD, pgmNum: FWORD, pgmVersion: HWORD, procNum: HWORD ]; callHdrBytes: CARDINAL ~ BITS[CallHdr]/BITS[BYTE]; callHdrHWords: CARDINAL ~ BITS[CallHdr]/BITS[HWORD]; CallMsgHdr: TYPE ~ WORD16 MACHINE DEPENDENT RECORD [ msgHdr: MsgHdr, callHdr: CallHdr ]; callMsgHdrBytes: CARDINAL ~ BITS[CallMsgHdr]/BITS[BYTE]; callMsgHdrHWords: CARDINAL ~ BITS[CallMsgHdr]/BITS[HWORD]; <> <
> RejectHdr: TYPE ~ WORD16 MACHINE DEPENDENT RECORD [ tID: HWORD, rejectReason: HWORD -- noSuchProgram(0), noSuchVersion(1), noSuchProcedure(2), invalidArgument(3), unspecifiedReject(ffffH), ]; <> <> rejectHdrBytes: CARDINAL ~ BITS[RejectHdr]/BITS[BYTE]; rejectHdrHWords: CARDINAL ~ BITS[RejectHdr]/BITS[HWORD]; RejectMsgHdr: TYPE ~ WORD16 MACHINE DEPENDENT RECORD [ msgHdr: MsgHdr, rejectHdr: RejectHdr ]; rejectMsgHdrBytes: CARDINAL ~ BITS[RejectMsgHdr]/BITS[BYTE]; rejectMsgHdrHWords: CARDINAL ~ BITS[RejectMsgHdr]/BITS[HWORD]; <> RejectBody: TYPE ~ WORD16 MACHINE DEPENDENT RECORD [ SELECT OVERLAID * FROM noSuchProgram => [], noSuchVersion => [ lowPgmVersion: HWORD, highPgmVersion: HWORD], noSuchProcedure => [], invalidArgument => [], unspecifiedReject => [] ENDCASE ]; <
> ReturnHdr: TYPE ~ WORD16 MACHINE DEPENDENT RECORD [ tID: HWORD ]; returnHdrBytes: CARDINAL ~ BITS[ReturnHdr]/BITS[BYTE]; returnHdrHWords: CARDINAL ~ BITS[ReturnHdr]/BITS[HWORD]; ReturnMsgHdr: TYPE ~ WORD16 MACHINE DEPENDENT RECORD [ msgHdr: MsgHdr, returnHdr: ReturnHdr ]; returnMsgHdrBytes: CARDINAL ~ BITS[ReturnMsgHdr]/BITS[BYTE]; returnMsgHdrHWords: CARDINAL ~ BITS[ReturnMsgHdr]/BITS[HWORD]; <> <
> AbortHdr: TYPE ~ WORD16 MACHINE DEPENDENT RECORD [ tID: HWORD, errNum: HWORD ]; abortHdrBytes: CARDINAL ~ BITS[AbortHdr]/BITS[BYTE]; abortHdrHWords: CARDINAL ~ BITS[AbortHdr]/BITS[HWORD]; AbortMsgHdr: TYPE ~ WORD16 MACHINE DEPENDENT RECORD [ msgHdr: MsgHdr, abortHdr: AbortHdr ]; abortMsgHdrBytes: CARDINAL ~ BITS[AbortMsgHdr]/BITS[BYTE]; abortMsgHdrHWords: CARDINAL ~ BITS[AbortMsgHdr]/BITS[HWORD]; <> <> BulkDataDescriptorType: TYPE ~ MACHINE DEPENDENT { null(0), immediate(1), passive(2), active(3) }; BulkDataXferID: TYPE ~ RECORD [ host: XNS.Host, hostRelativeXferID: ARRAY [0..2) OF CARDINAL]; BulkDataDescriptor: TYPE ~ RECORD [ SELECT type: BulkDataDescriptorType FROM null => [], immediate => [], passive, active => [ network: XNS.Net, host: XNS.Host, identifier: BulkDataXferID] ENDCASE ]; <> CreateClientHandleProc: TYPE ~ PROC [remote: RefAddress] RETURNS [Handle]; <> RegisterCreateClientHandleProc: PROC [ class: HandleClass, proc: CreateClientHandleProc]; <> NewClientObject: PROC [class: HandleClass, procs: REF ProcsObject, data: REF ¬ NIL, clientData: REF ¬ NIL] RETURNS [Handle]; <> <> StartServerInstanceProc: TYPE ~ PROC [pgm: CARD32, pgmVersion: CARD16, local: RefAddress ¬ NIL]; <> RegisterStartServerInstanceProc: PROC [ class: HandleClass, startServerInstanceProc: StartServerInstanceProc]; LookUpServerProcs: PROC [pgm: CARD32, pgmVersion: CARD16] RETURNS [serverProc: CrRPC.ServerProc, stopServerQueryProc: CrRPC.StopServerQueryProc]; <> }.