-- File: PupTypes.Mesa,  Last Edit: HGM  December 6, 1980  3:52 PM
PupTypes: DEFINITIONS =
  BEGIN
  Byte: TYPE = [0..377B];
  Pair: TYPE = MACHINE DEPENDENT RECORD [a, b: CARDINAL];
  PupHostID: TYPE = RECORD [Byte];
  PupNetID: TYPE = RECORD [Byte];
  PupSocketID: TYPE = RECORD [a, b: WORD];
  PupAddress: TYPE = MACHINE DEPENDENT RECORD [
    net: PupNetID, host: PupHostID, socket: PupSocketID];
  -- Addressing Constants
  fillInNetID: PupNetID = [377B];
  fillInHostID: PupHostID = [377B];
  fillInSocketID: PupSocketID = [0, 0];
  fillInPupAddress: PupAddress = [fillInNetID, fillInHostID, fillInSocketID];
  allNets: PupNetID = [0]; -- host must be allHosts too
  allHosts: PupHostID = [0]; -- can be directed to a specific network
  -- Buffer size Constants
  maxDataWordsPerGatewayPup: CARDINAL = 266;
  maxDataBytesPerGatewayPup: CARDINAL = 2*maxDataWordsPerGatewayPup;
  maxDataWordsPerRoutingPup: CARDINAL = 64;
  maxDataBytesPerRoutingPup: CARDINAL = 2*maxDataWordsPerRoutingPup;
  -- Well Known Sockets:  See [MAXC]<System>Pup-Network.txt
  telnetSoc: PupSocketID = [0, 1];
  gatewaySoc: PupSocketID = [0, 2];
  ftpSoc: PupSocketID = [0, 3];
  miscSrvSoc: PupSocketID = [0, 4];
  echoSoc: PupSocketID = [0, 5];
  bspTestSoc: PupSocketID = [0, 6];
  mailSoc: PupSocketID = [0, 7];
  eftpReceiveSoc: PupSocketID = [0, 20B];
  spruceStatusSoc: PupSocketID = [0, 21B];
  statSoc: PupSocketID = [0, 22B];
  oldCopyDiskSoc: PupSocketID = [0, 24B];
  copyDiskSoc: PupSocketID = [0, 25B];
  eventReportSoc: PupSocketID = [0, 30B];
  printerReportSoc: PupSocketID = [0, 31B];
  juniperpackConversionSoc: PupSocketID = [0, 34B];
  juniperEventSoc: PupSocketID = [0, 35B];
  rpcpSoc: PupSocketID = [0, 36B];
  clearinghouseSoc: PupSocketID = [0, 37B];
  librarianSoc: PupSocketID = [0, 41B];
  pineSoc: PupSocketID = [0, 100B];
  PupErrorCode: TYPE = MACHINE DEPENDENT{
    -- Pup got to the destination machine, but wasn't processed
    badChecksumPupErrorCode(1B), noProcessPupErrorCode(2B),
    resourceLimitsPupErrorCode(3B),
    -- Pup didn't get to the destination machine
    inconsistentPupErrorCode(1001B), cantGetTherePupErrorCode(1002B),
    hostDownPupErrorCode(1003B), eightHopsPupErrorCode(1004B),
    tooBigPupErrorCode(1005B), iAmNotAGatewayPupErrorCode(518),
    gatewayResourceLimitsPupErrorCode(519),
    -- used by ForwardBuffer for various hacks
    noErrorPupErrorCode(10000), connectionLimitPupErrorCode(10001),
    filler(LAST[WORD])};
  -- This is an attempt to get the TYPE checker to help us.
  -- Unfortunately, the values are a bit sparce.
  -- Be sure to have enough values to make it an 8 bit field.
  PupType: TYPE = MACHINE DEPENDENT{
    -- 000-077 OCTAL!	Registered Pup Types
    echoMe(1B), iAmEcho, badEcho, error(4B), rfc(10B), abort, end, endRep,
    data(20B), aData, ack, mark, int, intRep, aMark, eData(30B), eAck, eEnd,
    eAbort, rpp(40B),
    -- 200+		Unregistered Pup Types
    -- Socket 2 - Gateway info
    gatewayRequest(200B), gatewayInfo(201B),
    -- Socket 4 - Misc services
    dateTenexRequest(202B), dateTenexIs, dateAltoRequest(206B), dateAltoIs,
    mailCheck(210B), mailIsNew, mailNotNew, mailError, mailCheckLaurel,
    nameLookup(220B), nameIs, nameError, addressLookup, addressIs,
    whereIsUser(230B), userIs, userError, netDirVersion(240B), sendNetDir,
    bootFileSend(244B), kissOfDeath(247B),
    -- Pine  (save a few spares too)
    request(250B), result, unsolicited, custodian, sync, pineAck, noop,
    bootDirReq(257B), bootDirReply(260B),
    last(LAST[Byte])};
  -- see <PUP>Servers.EARS (Taft)
  -- Socket 4 Misc Services - these overlap with Gateway info
  dateTextRequest: PupType = gatewayRequest;
  dateTextIs: PupType = gatewayInfo;
  -- Socket 4 Misc Services - these overlap with Pine
  userAuthReq: PupType = request; -- 250
  userAuthOk: PupType = result; -- 251
  userAuthBad: PupType = unsolicited; -- 252
  -- Socket 22 Statistics - more overlap
  statisticsRequest: PupType = gatewayRequest;
  statisticsAre: PupType = gatewayInfo;
  -- Socket 30 Event Report - more overlap
  eventReport: PupType = netDirVersion;
  eventReportReply: PupType = sendNetDir;
  END.