-- File: PupRouterCool.Mesa, Last Edit: HGM July 15, 1979 9:35 PM -- This section of code is mostly used when creating/destroying sockets -- Copyright Xerox Corporation 1979, 1980 DIRECTORY CommUtilDefs: FROM "CommUtilDefs" USING [InitializeCondition, GetTicks], PupRouterDefs: FROM "PupRouterDefs" USING [ routerLock, BeSurePupIsOn, pupRoutingTable, PupRoutingTableEntry, firstSocket, PupRouterSocket], DriverDefs: FROM "DriverDefs" USING [doDebug, Network, GetDeviceChain], PupDefs: FROM "PupDefs", -- EXPORTS BufferDefs: FROM "BufferDefs" USING [QueueInitialize, QueueCleanup], PupTypes: FROM "PupTypes" USING [ fillInNetID, fillInHostID, fillInSocketID, PupAddress, PupNetID, PupSocketID, Pair]; PupRouterCool: MONITOR LOCKS PupRouterDefs.routerLock IMPORTS CommUtilDefs, DriverDefs, PupRouterDefs, BufferDefs EXPORTS PupDefs, PupRouterDefs = PUBLIC BEGIN OPEN PupTypes, PupRouterDefs; spareSocket: CARDINAL _ 1000B; nextConnectionID: CARDINAL _ 1000; UniqueLocalPupSocketID: PUBLIC ENTRY PROCEDURE RETURNS [socket: PupSocketID] = BEGIN IF (spareSocket_spareSocket+1)=0 THEN spareSocket_1000B; socket _ [CommUtilDefs.GetTicks[],spareSocket]; END; UniqueLocalPupAddress: PUBLIC PROCEDURE [him: POINTER TO PupAddress] RETURNS [me: PupAddress] = BEGIN RETURN[GetLocalPupAddress[PupTypes.fillInSocketID,him]]; END; NextPupConnectionID: PUBLIC ENTRY PROCEDURE RETURNS [p: PupTypes.Pair] = BEGIN p.a _ CommUtilDefs.GetTicks[]; p.b _ nextConnectionID _ nextConnectionID+1; END; GetLocalPupAddress: PUBLIC PROCEDURE [local: PupSocketID, remote: POINTER TO PupAddress] RETURNS [me: PupAddress] = BEGIN destNet: CARDINAL _ 0; routing: DESCRIPTOR FOR ARRAY OF PupRoutingTableEntry _ GetPupRoutingTable[]; network: DriverDefs.Network _ NIL; IF remote#NIL THEN BEGIN OPEN PupTypes; destNet _ remote.net; -- Maybe we should scan for the right net if he specifies a host? IF remote.net=fillInNetID OR remote.host=fillInHostID THEN destNet _ 0; END; IF destNet