BluejayRegisterImpl.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Last modified by D. Swinehart, May 22, 1985 12:06:06 pm PDT
DIRECTORY
BluejaySmarts,
IO,
Names  USING [ CurrentPasskey, OwnNetAddress ],
NamesRPC  USING [ StartConversation ],
RPC   USING [ AuthenticateFailed, EncryptionKey, ImportFailed, VersionRange ],
Log   USING [ ReportFR ],
ThParty  USING [ CreateParty, Register ],
ThPartyRpcControl,
Thrush  USING [ nullHandle, PartyHandle, ROPE, SmartsHandle, unencrypted ],
ThSmarts,
ThSmartsRpcControl USING [ ExportInterface, InterfaceName ],
ThVersions USING [ GetThrushVR, JayVersion, JayVR ]
;
BluejayRegisterImpl: CEDAR PROGRAM
IMPORTS BluejaySmarts, IO, Log, Names, NamesRPC, RPC, ThParty, ThPartyRpcControl, ThSmartsRpcControl, ThVersions
EXPORTS BluejaySmarts = {
OPEN IO;
BluejayRegister: PUBLIC PROC [bluejayInstance, thrushInstance, serverPassword: Thrush.ROPE]
RETURNS [partyID: Thrush.PartyHandle←Thrush.nullHandle,
smartsID: Thrush.SmartsHandle←Thrush.nullHandle] = {
myName: ThSmartsRpcControl.InterfaceName ← [
type: "ThSmarts.Lark",
instance: bluejayInstance,
version: ThVersions.JayVR];
serverPasskey: RPC.EncryptionKey ← Names.CurrentPasskey[serverPassword];
thVR: RPC.VersionRange = ThVersions.GetThrushVR;
Export ThSmarts Interface
myName ← [
type: "ThSmarts.Lark",
instance: bluejayInstance,
version: ThVersions.JayVR];
ThSmartsRpcControl.ExportInterface[
interfaceName: myName,
user: bluejayInstance,
password: serverPasskey];
BluejaySmarts.jayShh ← IF NOT BluejaySmarts.encryptionRequested THEN Thrush.unencrypted
ELSE NamesRPC.StartConversation [
caller: bluejayInstance,
callee: thrushInstance --rName--,
key: serverPasskey,
level: --<<ECB>>--CBCCheck !
RPC.AuthenticateFailed=>GOTO InitFailed];
Import ThParty Interface
ThPartyRpcControl.ImportInterface[
interfaceName: [type: "ThParty.Lark", instance: thrushInstance, version: thVR] !
RPC.ImportFailed=> IF why=wrongVersion THEN {
Log.ReportFR["Bluejay version %d too old; import failed",
$Bluejay, NIL, card[ThVersions.JayVersion]];
GOTO InitFailed;
}];
BluejaySmarts.interfaceIsImported←TRUE;
Register First Jay Party.
partyID←ThParty.CreateParty[type: service, rName: "Recording"];
IF partyID=Thrush.nullHandle THEN ERROR;
smartsID ← ThParty.Register[
shh: BluejaySmarts.jayShh, partyID: partyID, interface: NEW[ThSmartsRpcControl.InterfaceName←myName],
properties: [x: voiceTerminal[machine: Names.OwnNetAddress[]]]];
IF smartsID=Thrush.nullHandle THEN GOTO InitFailed;
EXITS
InitFailed => IF BluejaySmarts.interfaceIsImported THEN BluejaySmarts.interfaceIsImported←FALSE;
};
}.
Swinehart, May 15, 1985 10:28:41 am PDT
Cedar 6.0
changes to: BluejayRegisterImpl
Swinehart, May 22, 1985 12:05:46 pm PDT
recording => service, Jay => Recording
changes to: BluejayRegisterImpl