<> <> <> DIRECTORY Basics USING [ Comparison ], BasicTime USING [ GMT ], GVBasics USING [ Password ], Rope USING [ ROPE ], RPC USING [ Conversation, ConversationLevel, EncryptionKey, Principal, ShortROPE ], RPCPkt USING [ Machine ] ; Names: CEDAR DEFINITIONS = { ROPE: TYPE = RPC.ShortROPE; NetAddress: TYPE = RPCPkt.Machine; Rname: TYPE = ROPE; anonymousRname: Rname = NIL; FileSpec: TYPE = REF FileSpecBody; FileSpecBody: TYPE = RECORD [ server, name, password, dirName, dirPassword, fileName: Rope.ROPE_NIL]; Rspec: TYPE = REF RspecBody; RspecBody: TYPE = RECORD [ simpleName: ROPE_NIL, registry: ROPE_NIL]; Results: TYPE = {ok, notFound, error}; ModeNotFound: TYPE = { ok, create, error }; -- create not available CacheBehavior: TYPE = { lookupAfter, lookupFirst, lookInCacheOnly }; <<>> GVDetails: TYPE = REF GVDetailsR; GVDetailsR: TYPE= RECORD [ cacheIndex: NAT, rName: ROPE, lastTimeValid: BasicTime.GMT, connect: ROPE_NIL, forward: ROPE_NIL, prevForward: ROPE_NIL, mode: CHAR_ 'O, ringEnable: CHAR _ 'R, -- { R = on (regular), S = subdued, O = off }; system: ROPE_NIL, type: ROPE_NIL, instance: ROPE_NIL, range: ROPE_NIL, telephoneExtension: ROPE_NIL, key: RPC.EncryptionKey_NULL, done: CONDITION, larkSpec: BOOL_FALSE, userSpec: BOOL_FALSE, valid: BOOL_FALSE, canCreate: BOOL_FALSE, -- GetDetails can make one if it isn't there. mustAuthenticate: BOOL_FALSE, authentic: BOOL_FALSE, ringTune: ROPE_NIL --formatted as a Laurel/Hardy NewMail tune. See Play.df for description ]; ParseFile: PROCEDURE[ server: ROPE_NIL, dirName: ROPE_NIL, dirPassword: ROPE_NIL, fileName: ROPE_] RETURNS [FileSpec]; <> Registrize: PROC[name: ROPE] RETURNS [ROPE]; <> CurrentRName: PROC RETURNS [ROPE]; <> CurrentPasskey: PROC[passwordText: ROPE_NIL] RETURNS [RPC.EncryptionKey]; CurrentPassword: PROC[passwordText: ROPE_NIL] RETURNS [GVBasics.Password] = INLINE { RETURN[LOOPHOLE[CurrentPasskey[passwordText]]]; }; OwnNetAddress: PROC RETURNS [netAddress: NetAddress]; <<.DefaultRegistry>> DefaultRegistry: PROC RETURNS [ROPE]; <> <> <> This assignment can be changed dynamically if the system can>> <> <> <> <> <> GetDefaultRName: PROC[netAddress: NetAddress] RETURNS [name: Rname_NIL]; <> GetDefaultInstance: PROC[netAddress: NetAddress, tryForName: BOOL_FALSE] RETURNS [instance: ROPE]; <> <> <<(e.g., "173#125#)>> <> <<>> GetGVDetails: PROC[ rName: ROPE, mode: ModeNotFound_error, behavior: CacheBehavior_lookupAfter, authenticate: BOOL_FALSE, key: RPC.EncryptionKey_NULL -- must be supplied if authenticate=TRUE ] RETURNS [results: Results_notFound, details: GVDetails_NIL]; <> SetGVDetails: PROC[details: GVDetails]; <> GetDefaultDetails: PROC[netAddress: NetAddress] RETURNS [results: Results, details: GVDetails]; <> RestoreGVCache: PROC; SaveGVCache: PROC; FlushGVCache: PROC; WaitForGV: PROC; <> StartConversation: PROC[ caller: RPC.Principal, key: RPC.EncryptionKey, callee: RPC.Principal, level: RPC.ConversationLevel] RETURNS[ conversation: RPC.Conversation]; <> <<>> RnameToRspec: PROC[name: Rname, defaultRegistry: ROPE_NIL] RETURNS [spec: Rspec]; -- xxxxxxx.rr => Rname <> RspecToRname: PROC[spec: Rspec] RETURNS [name: Rname]; -- Rspec => xxxxxxx.rr RspecToSortName: PROC[spec: Rspec] RETURNS [name: ROPE]; -- Rspec => rr.xxxxxxx RNameAtom: PROC[rName: Rname] RETURNS [ATOM]; GMTComp: PROC[t1, t2: BasicTime.GMT] RETURNS [c: Basics.Comparison]; NetProblem: TYPE = {ok, noSuchName, invalidName, noSuchIndex, noSuchFone, badPassword, notAuthenticated, tryLater, notInitialized, cantImportSmarts}; NetError: ERROR[problem: NetProblem]; }....