-- Copyright (C) 1981, 1982, 1984 by Xerox Corporation. All rights reserved. -- File: SequinPrivate.mesa -- HGM: 10-Dec-84 21:25:54 -- Hankins: 24-Jul-84 14:45:27 Klamath update (pup and closure changes) -- MJohnson: 7-Jan-82 16:50:19 -- Levin: 6-Jul-81 16:16:17 DIRECTORY Buffer USING [AccessHandle, Buffer, QueueObject], Environment USING [Byte], PupDefs USING [PupBuffer, PupSocket], PupTypes USING [PupType]; SequinPrivate: DEFINITIONS = BEGIN -- Types -- Handle: TYPE = POINTER TO SequinObject; LongHandle: TYPE = MACHINE DEPENDENT RECORD [ shortHandle: Handle, fill: CARDINAL ← 0]; SequinObject: TYPE = MONITORED RECORD [ id: SequinID ← [inOut[0, 0]], allocate: Byte ← 1, retransmitSequence: SequenceNumber ← 0, retransmitQueue: Buffer.QueueObject ← NULL, getQueue: Buffer.QueueObject ← NULL, socket: PupDefs.PupSocket ← NULL, goAhead: CONDITION, buffersToRequeue: Byte ← 0, pupType: PupTypes.PupType, state: {init, open, destroyed} ← init, broken: BOOLEAN ← FALSE, recentRestart, restartRequested: BOOLEAN ← FALSE, pings: PingCount ← 0, lastPacketTime: Seconds ← NULL]; SequinID: TYPE = MACHINE DEPENDENT RECORD [ SELECT OVERLAID * FROM inOut => [inPart: WORD, outPart: WORD], pieces => [ allocate: Byte, receiveSequence: SequenceNumber, control: SequinControl, sendSequence: SequenceNumber], ENDCASE]; SequinControl: TYPE = MACHINE DEPENDENT{ data(0), ack(1), nop(2), restart(3), check(4), open(5), break(6), close(7), closed(8), destroy(9), dallying(10), quit(11), broken(12), retransmit(13), stifle(14), openclose(15), opendestroy(16), (255)}; SequenceNumber: TYPE = Byte; Byte: TYPE = Environment.Byte; Seconds: TYPE = LONG CARDINAL; maxPings: CARDINAL = 10; PingCount: TYPE = [0..maxPings]; -- Variables -- maxBytes: CARDINAL; maxAllocate: CARDINAL; bufferPool: Buffer.AccessHandle; -- Procedures -- Send: PROCEDURE [ sequin: Handle, packet: PupDefs.PupBuffer, control: SequinControl]; SocketWarmer: PROCEDURE [sequin: Handle]; END.