DIRECTORY BasicTime, Commander, ComputeServer, ComputeServerClient, ComputeServerCallbacksRpcControl, ComputeServerControllerRpcControl, ComputeServerServer, ComputeServerStatistics, InterpreterToolPrivate, IO, PrincOps, Pup USING [Address, nullAddress], PupStream USING [Sockets], Rope, RPC, RuntimeError, SymTab; ComputeServerInternal: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; STREAM: TYPE = IO.STREAM; IdleTransitionsEnabled: BOOL; ActiveServices: INT; -- count of currently active services LastActiveTime: BasicTime.GMT; myHostName: ROPE; MyNetAddressRope: ROPE; ControllerGVName: ROPE; RemoteCommandDir: ROPE; LocalCommandDir: ROPE ; OKToUseLocalDisk: BOOL; DisableIFIdle: BOOL; DisableIFIdleAfter: INT; DisableIFIdleBefore: INT; RegisteredProcObject: TYPE = ComputeServerServer.RegisteredProcObject; RegisteredProcHandle: TYPE = REF RegisteredProcObject; PackageEntryObject: TYPE = RECORD [ package: ROPE _ NIL, dfCreate: BasicTime.GMT _ BasicTime.nullGMT, commands: LIST OF ROPE _ NIL, maintainer: LIST OF ROPE _ NIL, latestVersion: ROPE _ NIL, runVersion: ROPE _ NIL, exclusive: BOOL _ FALSE, maxCountActive: INT _ 10000, nowActive: INT _ 0 ]; PackageEntry: TYPE = REF PackageEntryObject; PackageTable: SymTab.Ref; CmdEntryObject: TYPE = RECORD [ service: ROPE _ NIL, package: ROPE _ NIL, version: ROPE _ NIL, firstTime: BOOL _ TRUE, doQueueing: BOOL _ FALSE, okToQueuePosted: BOOL _ FALSE ]; CmdEntry: TYPE = REF CmdEntryObject; ConfigEntryObject: TYPE = RECORD [ package: ROPE _ NIL, dfCreate: BasicTime.GMT _ BasicTime.nullGMT, maintainer: LIST OF ROPE _ NIL ]; ConfigEntry: TYPE = REF ConfigEntryObject; ConfigTable: PUBLIC SymTab.Ref; ActiveServicesListBase: ActiveServicesItem ; ActiveServicesItem: TYPE = REF ActiveServicesItemObject; ActiveServicesPointer: TYPE = LONG POINTER TO ActiveServicesItemObject; StreamEOFState: TYPE = {true, pending, false}; ActiveServicesItemObject: TYPE = RECORD [ next: ActiveServicesItem, callbacksInterface: ComputeServerCallbacksRpcControl.InterfaceRecord _ NIL, listenerPupAddress: Pup.Address, startListenGMT: BasicTime.GMT, sockets: PupStream.Sockets, heardDoService: BOOL _ FALSE, debugItem: BOOL _ FALSE, quitRendezvousAttempt: BOOL _ FALSE, rendezvousDone: BOOL _ FALSE, h: InterpreterToolPrivate.Handle _ NIL, originalListenerPupAddress: Pup.Address _ Pup.nullAddress, procHandle: RegisteredProcHandle, msg: ROPE _ NIL, success: ComputeServerClient.RemoteSuccess, remoteStream: IO.STREAM _ NIL, clientNetAddressRope: ROPE _ NIL, clientMachineName: ROPE _ NIL, userName: ROPE _ NIL, packageEntry: PackageEntry, commandEntry: CmdEntry, inEOF: BOOL _ FALSE, outEOF: StreamEOFState _ false, flushCounter: INT _ -1, outStreamBusy: BOOL _ FALSE, doingEnumerate: BOOL _ FALSE, callOver: BOOL _ FALSE, pleaseAbort: BOOL _ FALSE, request: LIST OF ComputeServer.Request ]; CurrentRequests: LIST OF ComputeServer.Request; BufStreamData: TYPE = REF BufStreamDataObject; BufStreamBufferSize: CARDINAL = 1024; -- must be a power of 2 and match BufStreamBufferSizeMask BufStreamBufferSizeMask: INT = 1777B; -- must match BufStreamBufferSize bufStreamState: TYPE = {true, pending, false}; BufStreamDataObject: TYPE = RECORD [ inPointer: CARD _ 0, outPointer: CARD _ 0, EOF: bufStreamState _ false, listenerItem: ActiveServicesItem, buffer: ARRAY [0..BufStreamBufferSize) OF CHAR _ ALL[' ], backUpChars: LIST OF CHAR _ NIL ]; CommandTable: SymTab.Ref; -- knowing a command, find the package/version MarkGuestProcess: PROC [process: PROCESS, data: LONG POINTER] RETURNS [ok: BOOL _ TRUE, oldData: LONG POINTER]; IsGuestProcess: PROC [] RETURNS [isGuest: BOOL] ; GetGuestProcessData: PROC [process: PROCESS] RETURNS [data: LONG POINTER]; MarkProcessNotGuest: PROC [process: PROCESS]; RemoveMarkProcessNotGuest: PROC [process: PROCESS]; MarkProcessUseLocalFS: PROC [process: PROCESS]; RemoveMarkProcessUseLocalFS: PROC [process: PROCESS]; AddPupAddress: PROC [serverPupAddress: Pup.Address, procHandle: RegisteredProcHandle, sockets: PupStream.Sockets] RETURNS [newItem: ActiveServicesItem]; DeletePupAddress: PROC [serverPupAddress: Pup.Address] RETURNS [found: BOOL]; MatchPupAddress: PROC [serverPupAddress: Pup.Address, flagStarted: BOOL _ FALSE] RETURNS [found: BOOL, item: ActiveServicesItem]; GetClientInterfaceFromCache: PROC [clientInstance: RPC.ShortROPE, forceNewInterface: BOOL _ FALSE] RETURNS [clientInterface: ComputeServerCallbacksRpcControl.InterfaceRecord _ NIL]; DeleteClientInterfaceFromCache: PROC [clientInterface: ComputeServerCallbacksRpcControl.InterfaceRecord] RETURNS [gotIt: BOOL _ FALSE]; findDebuggerItemFromInterpreterHandle: PROC [h: InterpreterToolPrivate.Handle] RETURNS [found: BOOL, item: ActiveServicesItem _ NIL]; KillOldUnstartedServices: PROC; inStreamProcs: REF IO.StreamProcs; outStreamProcs: REF IO.StreamProcs; inCharsAvail: PROC [self: STREAM, wait: BOOL] RETURNS [INT]; inBufGetChar: PROC [self: STREAM] RETURNS [ch: CHAR]; outBufPutChar: PROC [self: STREAM, char: CHAR]; ControllerInterface: ComputeServerControllerRpcControl.InterfaceRecord; ServiceEnabled: BOOL; SendStats: PROC [] RETURNS [success, terminateService, newPackage: BOOL, queueingCommands: LIST OF Rope.ROPE]; InitStats: PROC [myName: RPC.ShortROPE, myAddress: RPC.ShortROPE] ; InitCommands: PROC [remoteCommandDirectory, localCommandDirectory: Rope.ROPE] RETURNS [msg: Rope.ROPE _ NIL] ; getNewPackages: PROC; MyCatcher: RuntimeError.UCSProc; SummonerServerMonitor: PROC; ReportServerEvent: PROC [type: ComputeServerStatistics.ServerEventType, command: Rope.ROPE, startTime: BasicTime.GMT, endTime: BasicTime.GMT, remoteMachineName: Rope.ROPE, userName: Rope.ROPE]; END. ComputeServerInternal.mesa The internal server interface for the Summoner. This interface resides on the server, is internal to the Summoner, and is not an RPC interface. Last Edited by: Bob Hagmann, August 5, 1986 11:28:19 am PDT Hal Murray, March 23, 1986 0:27:07 am PST Copyright c 1984 by Xerox Corporation. All rights reserved. RegisteredProcObject: TYPE = RECORD [ version: Rope.ROPE, service: Rope.ROPE, commanderProcHandle: Commander.CommandProcHandle _ NIL ]; Establish this process as a guest. data must point to "guest process data" Temporarily flag this process as not a guest, but retain "guest process data". All use of FS, UserCredentials and UserProfile will now be done locally. Reverses the effect of MarkProcessNotGuest Temporarily flag this process as not a guest for FS calls, but retain "guest process data". Reverses the effect of MarkProcessUseLocalFS Note a new active service Remove an active service Find an active service by pup address - that's a unique id. Bob Hagmann April 18, 1986 10:05:03 am PST added rendezvous to ActiveServicesItemObject Bob Hagmann July 11, 1986 8:34:18 am PDT NAT is only a 16 bit value => change BufStreamDataObject to use CARD , bufStreamState Bob Hagmann August 5, 1986 11:37:51 am PDT added stuff for poweroff if idle Κ­˜headšœ™Ibodyšœ™L™;Icode™)Jšœ Οmœ1™<code2šΟk ˜ Nšœ ˜ N˜ N˜N˜N˜!Nšœ"˜"Nšœ˜Nšœ˜N˜Nšžœ˜Nšœ ˜ Nšœžœ˜!Nšœ žœ ˜Nšœ˜Nšžœ˜Nšœ ˜ N˜——šœžœž œ˜*Nšž˜Nšžœžœžœ˜Nšžœžœžœžœ˜Nšœžœ˜NšœžœΟc&˜;Nšœžœ˜Nšœ žœ˜Nšœžœ˜Nšœžœ˜Nšœžœ˜Jšœžœ˜J˜Jšœžœ˜J˜Jšœžœ˜J˜Jšœžœ˜J˜Jšœžœ˜J˜Jšœžœ+ž˜FJ™šœžœžœ™%Jšœžœ™Jšœžœ™Jšœ3ž™6Jšœ™—J˜Jšœžœžœ˜6J˜J˜šœžœžœ˜#Jšœ žœžœ˜Jšœžœ˜,Jš œ žœžœžœžœ˜Jš œ žœžœžœžœ˜Jšœžœžœ˜Jšœ žœžœ˜Jšœ žœžœ˜Jšœžœ ˜Jšœ žœ˜J˜—Jšœžœžœ˜,J˜Jšœ˜šœžœžœ˜Jšœ žœžœ˜Jšœ žœžœ˜Jšœ žœžœ˜Jšœ žœžœ˜Jšœ žœž˜Jšœžœž˜J˜—Jšœ žœžœ˜$J˜šœžœžœ˜"Jšœ žœžœ˜Jšœžœ˜,Jšœ žœžœžœž˜J˜—Jšœ žœžœ˜*Nšœ žœ ˜N˜Jšœ,˜,Jšœžœžœ˜8Jš œžœžœžœžœ˜GJšœžœ˜.šœžœžœ˜)Jšœ˜JšœGžœ˜KJšœ ˜ Jšœžœ˜Jšœ˜Jšœžœžœ˜Jšœ žœžœ˜Jšœžœžœ˜$Jšœžœžœ˜Jšœ#žœ˜'Jšœ:˜:Jšœ!˜!Jšœžœžœ˜Jšœ+˜+Jšœžœžœžœ˜Jšœžœžœ˜!Jšœžœžœ˜Jšœ žœžœ˜Jšœ˜Jšœ˜Jšœžœžœ˜Jšœ˜Jšœžœ˜Jšœžœžœ˜Jšœžœžœ˜Jšœ žœžœ˜Jšœ žœž˜Jšœ žœžœ˜&J˜J˜—JšΟnœžœžœ˜/Nšœžœžœ˜.Jšœžœ Ÿ9˜`Jšœžœ Ÿ!˜GJšœžœ˜.šœžœžœ˜$Jšœ žœ˜Jšœ žœ˜Jšžœ˜Jšœ!˜!Jš œžœžœžœžœ˜9Jšœ žœžœžœž˜J˜—JšœŸ.˜IšΠbnœžœ žœžœžœžœžœžœ žœžœ˜oN™K—Nš‘œžœžœ žœ˜1Nš ‘œžœ žœžœžœžœ˜Jš‘œžœ žœ˜-N™˜—š‘œžœ žœ˜3NšœΟo™*—š‘œžœ žœ˜/N™[—š‘œžœ žœ˜5Nšœ’™,—š‘ œžœ_žœ˜˜N™—š‘œžœ!žœ žœ˜MN™—š ‘œžœ.žœžœžœ žœ˜N™;—NšΟbœžœžœžœžœžœFžœ˜΅Nš £œžœEžœ žœžœ˜‡Nš £%œžœ$žœ žœžœ˜…Nš œžœ˜Nšœžœžœ ˜"Nšœžœžœ ˜#Nš £ œžœžœžœžœžœ˜