DIRECTORY Basics USING [FWORD, HWORD], BasicTime USING [Pulses], Rope USING [ROPE], XNS USING [Address], XNSBuf USING [Buffer], XNSSocket USING [Handle], XNSSPPBuf USING [Buffer, maxBodyBytes], XNSSPPTypes USING [defaultSST], XNSStream USING [AttentionType, CloseReason, Milliseconds, SubSequenceType]; XNSStreamPrivate: CEDAR DEFINITIONS ~ { FWORD: TYPE ~ Basics.FWORD; HWORD: TYPE ~ Basics.HWORD; XNSBuffer: TYPE ~ XNSBuf.Buffer; SPPBuffer: TYPE ~ XNSSPPBuf.Buffer; SubSequenceType: TYPE ~ XNSStream.SubSequenceType; AttentionType: TYPE ~ XNSStream.AttentionType; SignedDiff: PROC [a, b: CARD16] RETURNS [INTEGER] ~ INLINE { RETURN [ LOOPHOLE[a-b] ] }; BufIndex: TYPE = [0..XNSSPPBuf.maxBodyBytes]; FingerState: TYPE ~ { empty, emptying, halfEmpty, filling, halfFull, full, sending }; Finger: TYPE ~ REF FingerObject; FingerObject: TYPE ~ RECORD [ next: Finger _ NIL, state: FingerState _ empty, attention: BOOL _ FALSE, index: BufIndex _ 0, bytes: BufIndex _ 0, buffer: SPPBuffer _ NIL ]; OBAttn: TYPE ~ REF OBAttnObject; OBAttnObject: TYPE ~ RECORD [ next: OBAttn, seqNum: CARD16, attentionType: AttentionType]; unknownConnectionID: HWORD ~ [0, 0]; Handle: TYPE = REF Object; Object: TYPE = MONITORED RECORD [ next: Handle _ NIL, socket: XNSSocket.Handle _ NIL, remote: XNS.Address _ NULL, connectionID: HWORD _ unknownConnectionID, remoteConnectionID: HWORD _ unknownConnectionID, closed: BOOL _ FALSE, closeReason: XNSStream.CloseReason _ unknown, closeText: Rope.ROPE _ NIL, finished: BOOL _ FALSE, auxProcCnt: CARDINAL _ 0, auxProcsDone: CONDITION, roundTripPulses: BasicTime.Pulses _ 0, getTimeout: XNSStream.Milliseconds _ 0, getPulseOut: BasicTime.Pulses _ 0, putTimeout: XNSStream.Milliseconds _ 0, putPulseOut: BasicTime.Pulses _ 0, waitForAckPulseOut: BasicTime.Pulses _ NULL, waitForAllocPulseOut: BasicTime.Pulses _ NULL, cacheFlushPulseOut: BasicTime.Pulses _ NULL, probePulseOut: BasicTime.Pulses _ NULL, noActivityPulseOut: BasicTime.Pulses _ NULL, inputReady: CONDITION, -- (B, T~getTimeout). There's a newly-full input buffer. doneEmptying: CONDITION, -- (B, T~infinity). outputSpace: CONDITION, -- (B, T~putTimeout). There's a newly-empty output buffer. outputReady: CONDITION, -- (N, T~infinity). There's a newly-full output buffer. recvdNewAlloc: CONDITION, -- (B, T~putTimeout). doneFilling: CONDITION, -- (B, T~infinity). doneSending: CONDITION, -- (B, T~infinity). mgrShortWakeup: CONDITION, -- (X, T~waitForAck). This is how mgr times out on overdue Ack or Alloc. May be NOTIFYed by InputDequeue if it's time to send a system packet. mgrLongWakeup: CONDITION, -- (X, T~probe). This is how mgr times out to send a probe if there's no other activity. NOTIFYed whenever an ack request is sent, and whenever mgrShortWakeup is NOTIFYed. flusherWakeup: CONDITION, -- (B, T set by client). Broadcast whenever ??? is received. recvdOBAttn: CONDITION, -- (B, T set by client). recvdTime: BasicTime.Pulses _ NULL, cacheFlushedTime: BasicTime.Pulses _ NULL, sentAckReqTime: BasicTime.Pulses _ NULL, expectedAckNum: CARD16 _ 0, sentAllocNum: CARD16 _ 0, recvdAllocNum: CARD16 _ 0, heWantsAlloc: BOOL _ FALSE, mustSendAck: BOOL _ FALSE, inputEnqueue: Finger _ NIL, inputEnqueueNum: CARD16 _ 0, inputAck: Finger _ NIL, inputAckNum: CARD16 _ 0, inputDequeue: Finger _ NIL, inputDequeueNum: CARD16 _ 0, inputBuffersAllocated: CARDINAL _ 0, inputSSType: SubSequenceType _ 0, recvdOBAttnList: OBAttn _ NIL, outputEnqueue: Finger _ NIL, outputEnqueueNum: CARD16 _ 0, outputSend: Finger _ NIL, outputSendNum: CARD16 _ 0, outputDequeue: Finger _ NIL, outputDequeueNum: CARD16 _ 0, outputBuffersAllocated: CARDINAL _ 0, outputSSType: SubSequenceType _ XNSSPPTypes.defaultSST, outputIBAttnCnt: CARDINAL _ 0, flusherCnt: CARDINAL _ 0 ]; }. XNSStreamPrivate.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Demers, January 8, 1987 0:34:16 am PST Copied Types Sequence Numbers Our Types Auxiliary processes associated with stream: Timeouts: Conditions: inputSpace: CONDITION, -- Nonexistent! Most recent significant events: Ring of input buffers: SubSequenceType last seen by the stream client: Out-of-Band Attentions received and not yet read by WaitAttention: Ring of output buffers: SubSequenceType that will be assigned to next data byte written by client (this ssType is attached to outputEnqueue, and may be different from the type attached to outputSend): In-Band Attentions on the output queue: Flushing: flusherCnt>0 forces each packet to be sent with its sendAck bit on. ???? Κ˜codešœ™Kšœ Οmœ1™