-- PacketStream.mesa (last edited by Garlick on: January 23, 1981  1:49 PM)
-- Function: The internal definitions module for Pliot Packet Streams.

  BufferDefs USING [BufferAccessHandle, GetFreeBuffer, SppBuffer],
  Environment USING [Byte],
  OISCPTypes USING [bytesPerPktHeader, bytesPerLevel2SppHeader, ConnectionID],
  NetworkStream USING [
    defaultWaitTime, FailureReason, SuspendReason, WaitTime, ClassOfService],
  SpecialSystem USING [NetworkAddress];

PacketStream: DEFINITIONS IMPORTS BufferDefs, NetworkStream =


  Handle: TYPE = POINTER TO Object;
  Object: TYPE = RECORD [
    pool: BufferDefs.BufferAccessHandle,
    put: PROCEDURE [BufferDefs.SppBuffer],
    get: PROCEDURE RETURNS [BufferDefs.SppBuffer],
    waitForAttention: PROCEDURE RETURNS [BufferDefs.SppBuffer],
    setWaitTime: PROCEDURE [WaitTime],
    findAddresses: PROCEDURE
      RETURNS [local, remote: SpecialSystem.NetworkAddress],
    returnGetSppDataBuffer: PROCEDURE [BufferDefs.SppBuffer]];

  Byte: TYPE = Environment.Byte;
  bytesPerSequencedPktHeader: CARDINAL =
    OISCPTypes.bytesPerLevel2SppHeader + OISCPTypes.bytesPerPktHeader;
  WaitTime: TYPE = NetworkStream.WaitTime;
  ClassOfService: TYPE = NetworkStream.ClassOfService;
  defaultWaitTime: WaitTime = NetworkStream.defaultWaitTime;
  infiniteWaitTime: READONLY WaitTime;

  State: TYPE = {
    unestablished, activeEstablish, waitEstablish, established, open, terminating,
  SuspendReason: TYPE = NetworkStream.SuspendReason;
  FailureReason: TYPE = NetworkStream.FailureReason;

  -- interface

  -- exported by PacketStreamMgr
    local, remote: SpecialSystem.NetworkAddress,
    localConnID, remoteConnID: OISCPTypes.ConnectionID,
    establishConnection: BOOLEAN, timeout: WaitTime ← defaultWaitTime,
    classOfService: ClassOfService] RETURNS [Handle];
  Destroy: PROCEDURE [Handle];
  -- these are INLINEs in order to make call Pilot procedure calls similar in style.
  Put: PROCEDURE [psH: Handle, b: BufferDefs.SppBuffer] = INLINE
    BEGIN psH.put[b]; END;

  Get: PROCEDURE [psH: Handle] RETURNS [BufferDefs.SppBuffer] = INLINE
    BEGIN RETURN[psH.get[]]; END;

  WaitForAttention: PROCEDURE [psH: Handle] RETURNS [BufferDefs.SppBuffer] =
    INLINE BEGIN RETURN[psH.waitForAttention[]]; END;

  SetWaitTime: PROCEDURE [psH: Handle, time: WaitTime] = INLINE
    BEGIN psH.setWaitTime[time]; END;

  FindAddresses: PROCEDURE [psH: Handle]
    RETURNS [local, remote: SpecialSystem.NetworkAddress] = INLINE
    BEGIN [local, remote] ← psH.findAddresses[]; END;

  GetSendSppBuffer: PROCEDURE [psH: Handle] RETURNS [BufferDefs.SppBuffer] =
    INLINE {
      LOOPHOLE[BufferDefs.GetFreeBuffer[oisSpp, psH.pool, send],

  GetSenderSizeLimit: PROCEDURE [psH: Handle] RETURNS [CARDINAL] = INLINE
    BEGIN RETURN[psH.getSenderSizeLimit[]]; END;

  ReturnGetSppDataBuffer: PROCEDURE [psH: Handle, b: BufferDefs.SppBuffer] =
    INLINE BEGIN psH.returnGetSppDataBuffer[b]; END;
  -- connection table routines

  InsertIntoConnectionTable: PROCEDURE [
    remote: SpecialSystem.NetworkAddress, remoteConnID: OISCPTypes.ConnectionID];
  RemoveFromConnectionTable: PROCEDURE [
    remote: SpecialSystem.NetworkAddress, remoteConnID: OISCPTypes.ConnectionID];
  ConnectionAlreadyThere: PROCEDURE [
    remote: SpecialSystem.NetworkAddress, remoteConnID: OISCPTypes.ConnectionID]
  -- errors and signals
  ConnectionSuspended: ERROR [why: SuspendReason];
  ConnectionFailed: SIGNAL [why: FailureReason];



Time: May 9, 1978  12:03 PM  By: Dalal  Action: created file.
Time: January 26, 1980  1:52 PM  By: Dalal  Action: replaced SPPInternal.
Time: BLyon on: April 14, 1980  6:11 PM  By: BLyon  Action: Uses new level1 and queue level stuff.
Time: Garlick on: January 23, 1981  1:49 PM  By: BLyon  Action: Added type for ClassOfService, added infiniteWaitTime, added classOfService param and defaulted Make procedure, and removed ERROR AttentionTimeout.