<> <> <> <<>> <<>> DIRECTORY Basics USING [FWORD, HWORD], CrRPC USING [BeginErrorProc, BeginRejectProc, BeginReturnProc, ProcsObject, Handle, HandleClass, RefAddress, ServerProc], 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 ~ MACHINE DEPENDENT RECORD [ lowVersion: HWORD, highVersion: HWORD ]; sessionHdrBytes: CARDINAL ~ BITS[SessionHdr]/BITS[BYTE]; sessionHdrHWords: CARDINAL ~ BITS[SessionHdr]/BITS[HWORD]; <
> MsgHdr: TYPE ~ 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 ~ 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 ~ MACHINE DEPENDENT RECORD [ msgHdr: MsgHdr, callHdr: CallHdr ]; callMsgHdrBytes: CARDINAL ~ BITS[CallMsgHdr]/BITS[BYTE]; callMsgHdrHWords: CARDINAL ~ BITS[CallMsgHdr]/BITS[HWORD]; <> <
> RejectHdr: TYPE ~ 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 ~ MACHINE DEPENDENT RECORD [ msgHdr: MsgHdr, rejectHdr: RejectHdr ]; rejectMsgHdrBytes: CARDINAL ~ BITS[RejectMsgHdr]/BITS[BYTE]; rejectMsgHdrHWords: CARDINAL ~ BITS[RejectMsgHdr]/BITS[HWORD]; <> RejectBody: TYPE ~ MACHINE DEPENDENT RECORD [ SELECT OVERLAID * FROM noSuchProgram => [], noSuchVersion => [ lowPgmVersion: HWORD, highPgmVersion: HWORD], noSuchProcedure => [], invalidArgument => [], unspecifiedReject => [] ENDCASE ]; <
> ReturnHdr: TYPE ~ MACHINE DEPENDENT RECORD [ tID: HWORD ]; returnHdrBytes: CARDINAL ~ BITS[ReturnHdr]/BITS[BYTE]; returnHdrHWords: CARDINAL ~ BITS[ReturnHdr]/BITS[HWORD]; ReturnMsgHdr: TYPE ~ MACHINE DEPENDENT RECORD [ msgHdr: MsgHdr, returnHdr: ReturnHdr ]; returnMsgHdrBytes: CARDINAL ~ BITS[ReturnMsgHdr]/BITS[BYTE]; returnMsgHdrHWords: CARDINAL ~ BITS[ReturnMsgHdr]/BITS[HWORD]; <> <
> AbortHdr: TYPE ~ MACHINE DEPENDENT RECORD [ tID: HWORD, errNum: HWORD ]; abortHdrBytes: CARDINAL ~ BITS[AbortHdr]/BITS[BYTE]; abortHdrHWords: CARDINAL ~ BITS[AbortHdr]/BITS[HWORD]; AbortMsgHdr: TYPE ~ 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]; <> RenewClientObject: PROC [handle: Handle]; <> <> CreateListenerProc: TYPE ~ PROC [local: RefAddress]; <> RegisterCreateListenerProc: PROC [ class: HandleClass, createListenerProc: CreateListenerProc]; LookUpServerProc: PROC [pgm: CARD32, pgmVersion: CARD16] RETURNS [serverProc: ServerProc]; <> }.