DIRECTORY CHNameP2V0, AEToCrAE, AuthenticationP14V2, AlpineP2202V2, AlpineEnvironment, AlpineFile, AlpineV2ServerInternal, ClientMap, GVNames, RPC, CardTab; AlpineV2ServerInternalImpl: CEDAR MONITOR IMPORTS AlpineFile, AlpineP2202V2, CardTab, ClientMap, GVNames, RPC, AEToCrAE EXPORTS AlpineV2ServerInternal ~ BEGIN OPEN ATC: AEToCrAE; sessions: CardTab.Ref _ CardTab.Create[]; sessionNumber: CARD _ 0; LocalSessionInfo: TYPE = RECORD [ service: CHNameP2V0.ThreePartName, credentials: AuthenticationP14V2.Credentials, gvCredentials: AlpineP2202V2.GVCredentials, conversation: RPC.Conversation]; Error: ERROR ~ CODE; CreateSession: PUBLIC ENTRY PROC [service: CHNameP2V0.ThreePartName, credentials: AuthenticationP14V2.Credentials, gvCredentials: AlpineP2202V2.GVCredentials] RETURNS [session: AlpineP2202V2.Session] ~ { ENABLE UNWIND => NULL; conversation: RPC.Conversation _ RPC.GenerateConversation[]; IF GVNames.Authenticate[gvCredentials.name, gvCredentials.pwd] # individual THEN RETURN WITH ERROR AlpineP2202V2.AuthenticationError[credentialsInvalid]; TRUSTED {ClientMap.Register[conversation, gvCredentials.name]}; [] _ CardTab.Insert[sessions, sessionNumber, NEW[LocalSessionInfo _ [service, credentials, [gvCredentials.name, NIL], conversation]]]; session _ [token: LOOPHOLE[sessionNumber], verifier: NIL]; sessionNumber _ sessionNumber.SUCC; }; DestroySession: PUBLIC ENTRY PROC [session: AlpineP2202V2.Session] ~ { ENABLE UNWIND => NULL; [] _ CardTab.Delete[sessions, LOOPHOLE[session.token]]; }; Conversation: PUBLIC ENTRY PROC [session: AlpineP2202V2.Session] RETURNS [conversation: RPC.Conversation] ~ { ENABLE UNWIND => NULL; found: BOOL; ref: REF; [found, ref] _ CardTab.Fetch[sessions, LOOPHOLE[session.token]]; IF NOT found THEN RETURN WITH ERROR AlpineP2202V2.ConnectionError[otherCallProblem]; conversation _ NARROW[ref, REF LocalSessionInfo].conversation; }; DoWork: PUBLIC PROC [work: PROC] ~ { accessReason: AlpineEnvironment.NeededAccess; lockReason: AlpineEnvironment.LockFailure; operationReason: AlpineEnvironment.OperationFailure; unknownReason: AlpineEnvironment.UnknownType; { ENABLE { AlpineFile.AccessFailed => {accessReason _ missingAccess; GOTO accessFailed}; AlpineFile.LockFailed => {lockReason _ why; GOTO lockFailed}; AlpineFile.OperationFailed => {operationReason _ why; GOTO operationFailed}; AlpineFile.PossiblyDamaged => {GOTO possiblyDamaged}; AlpineFile.StaticallyInvalid => {GOTO staticallyInvalid}; AlpineFile.Unknown => {unknownReason _ what; GOTO unknown}; }; work[]; EXITS accessFailed => ERROR AlpineP2202V2.AccessFailed[ATC.NeededAccess[accessReason]]; lockFailed => ERROR AlpineP2202V2.LockFailed[ATC.LockFailure[lockReason]]; operationFailed => ERROR AlpineP2202V2.OperationFailed[ATC.OperationFailure[operationReason]]; possiblyDamaged => ERROR AlpineP2202V2.PossiblyDamaged; staticallyInvalid => ERROR AlpineP2202V2.StaticallyInvalid; unknown => ERROR AlpineP2202V2.Unknown[ATC.UnknownType[unknownReason]]; }; }; END. VAlpineV2ServerInternalImpl.mesa Carl Hauser, November 13, 1987 1:33:48 pm PST Êÿ˜šœ™Icode™-—J™šÏk ˜ Kšœ ˜ Kšœ ˜ Kšœ˜Kšœ˜K˜K˜ Kšœ˜K˜ Kšœ˜Kšœ˜Kšœ˜K˜—K˜Kšœ ˜)KšœF˜MKšœ˜šœ˜K˜—Kšœœ ˜K˜K˜)Kšœœ˜šœœœ˜!Kšœ"˜"Kšœ-˜-Kšœ+˜+K˜ —K˜KšÏnœœœ˜šž œœœ%˜ÎKšœœœ˜Kšœ!œ˜K˜K˜—šžœ œ˜$Kšœ-˜-Kšœ*˜*Kšœ4˜4Kšœ-˜-˜šœ˜Kšœ:œ˜MKšœ+œ ˜=Kšœ6œ˜LKšœœ˜5Kšœ!œ˜9Kšœ-œ ˜;Kšœ˜—Kšœ˜š˜Kšœœ<˜QKšœœ7˜JKšœœF˜^Kšœœ˜7Kšœœ!˜;Kšœ œ7˜G—K˜—K˜K˜—K˜Kšœ˜—…— ®