<> <> DIRECTORY Arpa USING [Address, nullAddress], ArpaUDP USING [nullPort, Port], Basics USING [Card16FromH, Card32FromF, FFromCard32, FWORD, HFromCard16, HWORD, UnsafeBlock], Rope USING [ROPE], SunRPCAuth USING [Conversation] ; SunRPC: CEDAR DEFINITIONS IMPORTS Basics ~ { <> ROPE: TYPE ~ Rope.ROPE; Address: TYPE ~ Arpa.Address; nullAddress: Address ~ Arpa.nullAddress; Port: TYPE ~ ArpaUDP.Port; nullPort: Port ~ ArpaUDP.nullPort; UnsafeBlock: TYPE ~ Basics.UnsafeBlock; Handle: TYPE ~ REF Object; Object: TYPE; Server: TYPE ~ REF ServerObject; ServerObject: TYPE; Conversation: TYPE ~ SunRPCAuth.Conversation; <> Create: PROC [remoteAddress: Address _ nullAddress, remotePort: Port _ nullPort] RETURNS [h: Handle]; <> GetRemote: PROC [h: Handle] RETURNS [remoteAddress: Address, remotePort: Port]; <> <<>> SetRemote: PROC [h: Handle, remoteAddress: Address _ nullAddress, remotePort: Port _ nullPort] RETURNS [newH: Handle]; <> Destroy: PROC [h: Handle]; <> <> StartCall: PROC [h: Handle, c: Conversation, pgm, version, proc: CARD]; <> <> SendCallAndReceiveReply: PROC [h: Handle, timeoutMsec: CARD, retries: CARD] RETURNS [remoteAddress: Address, remotePort: Port]; <> <> <]>> ReceiveAnotherReply: PROC [h: Handle, timeoutMsec: CARD] RETURNS [remoteAddress: Address, remotePort: Port]; <> <> <> <<>> ReleaseReply: PROC [h: Handle]; <> <> <> CreateServer: PROC [pgm, version: CARD, serverProc: ServerProc, port: Port _ nullPort, concurrency: CARDINAL _ 1, clientData: REF _ NIL] RETURNS [s: Server]; <> <> GetServerPort: PROC [s: Server] RETURNS [port: Port]; <> DestroyServer: PROC [s: Server]; <> <> ServerProc: TYPE ~ PROC [h: Handle, c: Conversation, proc: CARD, clientData: REF] RETURNS [doReply: BOOL, replyTimeToLive: CARDINAL]; <> <> <> StartReply: PROC [h: Handle]; <> <> <> <> OpenReader: PROC [block: REF TEXT] RETURNS [h: Handle]; CloseReader: PUBLIC PROC [h: Handle]; <> OpenWriter: PROC [maxBytes: CARDINAL] RETURNS [h: Handle]; CloseWriter: PROC [h: Handle] RETURNS [output: REF TEXT]; <> <> BytesRemaining: PROC [h: Handle] RETURNS [bytes: CARDINAL]; <> GetByte: PROC [h: Handle] RETURNS [byte: BYTE]; SkipBytes: PROC [h: Handle, bytes: CARDINAL]; GetAlign: PROC [h: Handle]; GetH: PROC [h: Handle] RETURNS [hword: Basics.HWORD]; GetCard16: PROC [h: Handle] RETURNS [card16: CARD16] ~ INLINE { RETURN [Basics.Card16FromH[GetH[h]]] }; GetInt16: PROC [h: Handle] RETURNS [int16: INT16] ~ INLINE { RETURN [LOOPHOLE[Basics.Card16FromH[GetH[h]]]] }; GetF: PROC [h: Handle] RETURNS [fword: Basics.FWORD]; GetCard32: PROC [h: Handle] RETURNS [card32: CARD32] ~ INLINE { RETURN [Basics.Card32FromF[GetF[h]]] }; GetInt32: PROC [h: Handle] RETURNS [int32: INT32] ~ INLINE { RETURN [LOOPHOLE[Basics.Card32FromF[GetF[h]]]] }; UnsafeGetBlock: UNSAFE PROC [h: Handle, block: UnsafeBlock]; GetBlock: PROC [h: Handle, block: REF TEXT, startIndex: CARDINAL _ 0, count: CARDINAL _ CARDINAL.LAST]; GetRefText: PROC [h: Handle] RETURNS [refText: REF TEXT]; GetEphemeralRefText: PROC [h: Handle, oldBuffer: REF TEXT _ NIL] RETURNS [newBuffer: REF TEXT]; <> GetRope: PROC [h: Handle] RETURNS [ROPE]; PutByte: PROC [h: Handle, byte: BYTE]; PutAlign: PROC [h: Handle, padValue: BYTE _ 0]; PutH: PROC [h: Handle, hword: Basics.HWORD]; PutCard16: PROC [h: Handle, card16: CARD16] ~ INLINE { PutH[h, Basics.HFromCard16[card16]] }; PutInt16: PROC [h: Handle, int16: INT16] ~ INLINE { PutH[h, Basics.HFromCard16[LOOPHOLE[int16]]] }; PutF: PROC [h: Handle, fword: Basics.FWORD]; PutCard32: PROC [h: Handle, card32: CARD32] ~ INLINE { PutF[h, Basics.FFromCard32[card32]] }; PutInt32: PROC [h: Handle, int32: INT32] ~ INLINE { PutF[h, Basics.FFromCard32[LOOPHOLE[int32]]] }; UnsafePutBlock: UNSAFE PROC [h: Handle, block: UnsafeBlock]; PutBlock: PROC [h: Handle, block: REF READONLY TEXT, startIndex: CARDINAL _ 0, count: CARDINAL _ CARDINAL.LAST]; PutRefText: PROC [h: Handle, refText: REF READONLY TEXT]; PutRope: PROC [h: Handle, rope: ROPE]; <> Error: ERROR [code: ATOM]; <> <<$outOfBufferSpace -- for PutXXX>> <<$outOfData -- for GetXXX>> <<$notNetworkHandle -- inappropriate Destroy of reader or writer handle.>> <<$notLocalHandle -- inappropriate CloseReader or CloseWriter of network handle.>> <<>> <<$unreachable>> <<$timeout>> <<>> <<$wrongRPCVersion>> <<$protocolError>> <<>> <<$badCredentials -- I can't parse them.>> <<$wrongCredentials -- I never heard of you.>> <<$badVerifier -- I can't parse it.>> <<$wrongVerifier -- The verifier doesn't agree with the credentials.>> <<>> <<$badReplyVerifier -- I can't parse it.>> <<$wrongReplyVerifier -- Not what I expected.>> <<>> <<$weakCredentials -- I believe who you are, but you're not privileged to do this.>> <<>> <<$wrongProgram -- Specified program not exported by this server.>> <<$wrongProgramVersion -- Specified program available, but not in the specified version.>> <<$wrongProc -- Specified program and version available, but doesn't have the specified proc.>> <<>> }...