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: PROC RETURNS [ROPE]; GetDefaultRName: PROC[netAddress: NetAddress] RETURNS [name: Rname_NIL]; GetDefaultInstance: PROC[netAddress: NetAddress, tryForName: BOOL_FALSE] RETURNS [instance: ROPE]; 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]; }.... ŠNames.Mesa Last modified by Swinehart, November 23, 1983 10:39 am Last Edited by: Pier, May 1, 1984 11:13:41 am PDT adds default registry if there's no registry in the input. LoggedInName.DefaultRegistry Key made from logged in password. .DefaultRegistry Determine Internet database values associated with hardware network addresses Larks are associated by default with individuals, or groups of individuals <> This assignment can be changed dynamically if the system can determine that the individuals are elsewhere. The current implementation uses Grapevine (Lark registry) to store the mappings; they are set using Maintain, retrieved using the following functions. Given the hardware machine identification of a Lark (a NetAddress), derive the default Rname. These days, uses GetDefaultDetails, extracts RName -- expected to languish. Raises NetError Given the hardware machine identification of a Lark, use the inverse name lookup service to derive a machine name, if possible; otherwise return a string form of the NetAddress (e.g., "173#125#) Raises NetError Basic access to Grapevine and to a local cache of recent GV name lookups. Caller shouldn't believe details after call; call Get ... again to re-use. Uses GetGVDetails to obtain RName and particulars describing a particular Lark. Wait for all updates to/from the Grapevine cache to complete. Calls for cooperation on the part of the user/clients, who should not also be launching new actions that will cause Grapevine activities. Used to determine when it's OK to do a RollBack. Parsing Rnames returns NIL if name is not in form xxxxxxx.rr and no default registry is provided. Êû˜Jšœ ™ Jšœ6™6J™1J˜šÏk ˜ Jšœœ˜Jšœ œ ˜Jšœ œ˜Jšœœœ˜JšœœJ˜SJšœœ ˜J˜J˜—Jšœœ˜J˜Jšœœœ ˜Jšœ œ˜"Jšœœœ˜Jšœœ˜J˜Jšœ œœ˜"šœœœ˜Jšœ=œœ˜GJ˜—Jšœœœ ˜šœ œœ˜Jšœ œœ˜Jšœ œœ˜J˜—J˜&JšœœÏc˜CJšœœ1˜DJ™Jšœ œœ ˜!šœ œœ˜Jšœ œ˜Jšœœ˜ Jšœœ˜Jšœ œœ˜Jšœ œœ˜Jšœ œœ˜Jšœœ˜Jšœ œž.˜EJšœœœ˜Jšœœœ˜Jšœ œœ˜Jšœœ˜Jšœœœ˜Jšœœœ˜Jšœ œ˜Jšœ œœ˜Jšœ œœ˜Jšœœ˜Jšœ œœž-˜DJšœœœ˜Jšœ œ˜Jšœ œœžG˜ZJ˜—J˜J˜šÏn œ œ˜Jšœœœ˜Jšœ œœ˜Jšœ œœ˜Jšœ œœ ˜$J˜Jšœ:™:—Jš Ÿ œœœœœ˜,˜Jšœ™—JšŸ œœœœ˜"˜Jšœ!™!—Jš Ÿœœœœœœ˜Iš Ÿœœœœœœ˜TJšœœ#˜2—JšŸ œœœ˜5˜Jšœ™—JšŸœœœœ˜%˜JšœM™MJ˜—JšœP™PJšœN™NJšœ-™-JšœP™PJšœE™EJšœ]™]J™KJ˜šŸœœœœ˜HJšœ™J˜—J˜š Ÿœœ%œœœ œ˜bJšœ[™[JšœT™TJšœ™Jšœ™J™—šŸ œœ˜Jšœœ˜ J˜J˜$Jšœœœ˜Jšœœœž(˜DJšœœ0œ˜?J™IJ˜—šŸ œœ˜'J™JJ˜—šŸœœœ'˜_J™O—J˜JšŸœœ˜JšŸ œœ˜JšŸ œœ˜JšŸ œœ˜Jšœù™ùJ˜šŸœœ˜Jš œœœœœ˜cJšœœ˜)—J˜J™J™š Ÿ œœœœœž˜iJšœR™R—JšŸ œœœž˜NJš Ÿœœœœž˜OJ˜JšŸ œœœœ˜-J˜Jšœ œœ˜DJ˜Jšœ œ…˜•Jšœ œ˜%J˜J˜J˜—…— 8½