-- PacketExchange.mesa (last edited by: BLyon on: January 20, 1981 3:00 PM) DIRECTORY Environment USING [Block], OISCPTypes USING [ ExchangeClientType, ExchangeID, maxDataBytePerExchange, WaitTime], SpecialSystem USING [SocketNumber], System USING [NetworkAddress]; PacketExchange: DEFINITIONS = BEGIN -- The Packet Exchange Protocol is a request/reply protocol that provides a little more -- reliability than raw packets transmitetd from a socket, and less reliabilty than the -- Sequenced Packet Protocol. Usually one end will provide some service at a -- well known socket or at a network address that is available through a binding -- process involving the Clearinghouse. The other end acquires a socket and sends a -- request. The request will be retransmitted a number of times with the interval -- between retransmissions based on the delay to the remote entity. -- definitions -- types and constants. ExchangeHandle: TYPE [2]; RequestHandle: TYPE = LONG POINTER TO RequestObject; -- returned by WaitForRequest RequestObject: TYPE = RECORD [ nBytes: CARDINAL, -- the byte size of the request Block requestType: OISCPTypes.ExchangeClientType, -- the next to fields are used in the reply; clients should not touch these. requestersExchangeID: PRIVATE OISCPTypes.ExchangeID, requestersAddress: PRIVATE System.NetworkAddress]; maxBlockLength: CARDINAL = OISCPTypes.maxDataBytePerExchange; -- in bytes ErrorReason: TYPE = { blockTooBig, blockTooSmall, noDestinationSocket, noRouteToDestination, hardwareProblem, aborted, timeout}; defaultWaitTime: OISCPTypes.WaitTime = 60000; -- in msecs -- interface -- errors and signals Error: ERROR [why: ErrorReason]; Timeout: SIGNAL; -- this may be RESUMEd -- procedures -- the requestor CreateRequestor: PROCEDURE [waitTime: OISCPTypes.WaitTime ← defaultWaitTime] RETURNS [ExchangeHandle]; -- at any socket number SendRequest: PUBLIC PROCEDURE [ h: ExchangeHandle, remote: System.NetworkAddress, requestBlk, replyBlk: Environment.Block, requestType: OISCPTypes.ExchangeClientType ← unspecified] RETURNS [nBytes: CARDINAL, replyType: OISCPTypes.ExchangeClientType]; -- the replyer CreateReplyer: PROCEDURE [ localSocket: SpecialSystem.SocketNumber, requestCount: CARDINAL ← 1, waitTime: OISCPTypes.WaitTime ← defaultWaitTime] RETURNS [ExchangeHandle]; -- requestCount is estimate of number of "to be queued" requests -- user must save rH inorder to send a reply WaitForRequest: PROCEDURE [ h: ExchangeHandle, requestBlk: Environment.Block, requiredRequestType: OISCPTypes.ExchangeClientType ← unspecified] RETURNS [rH: RequestHandle]; -- upon success return of SendReply, rH is invalid. SendReply: PUBLIC PROCEDURE [ h: ExchangeHandle, rH: RequestHandle, replyBlk: Environment.Block, replyType: OISCPTypes.ExchangeClientType ← unspecified]; -- request and reply can both point to the same piece of storage. Delete: PROCEDURE [h: ExchangeHandle]; SetWaitTime: PROCEDURE [h: ExchangeHandle, waitTime: OISCPTypes.WaitTime]; END. LOG Time: October 23, 1980 1:50 PM By: Dalal Action: created file. Time: January 13, 1981 5:01 PM By: BLyon Action: moved file to Pilot Communication.