PortNotes.tioga
Copyright Ó 1990 by Xerox Corporation. All rights reserved.
Polle Zellweger (PTZ) July 20, 1990 1:32:15 pm PDT
Swinehart, September 18, 1990 8:18:56 am PDT
September 18, 1990 7:05:05 am PDT, D. Swinehart
Comments on Voice rope client-side implementation:
The management of conversations and connections is seriously limited (a euphemism for brain-damaged). For instance, I don't think it would be possible to have two simultaneous connections to the voice file server, one on hold and one active. Let alone two playing simultaneously, not a ridiculous idea. The code knows of just one at a time, which is for some reason hanging off the property list of an atom. I'm not going to fix it now, but it will severely restrict us. That's wrong. The property list is specific to each conversation. I guess this is OK.
Also, there don't appear to be ENTRY procedures where I'd expect them. But that's a problem, anyway -- at how many levels should there be ENTRYs?
If the location of the voice server ever changes during one instance of Finch, the registration that is locked into the Voice Rope code will not recover. Once imported, it remains imported. It will probably recover when the serer is rolled around or when contact is otherwise lost and regained, though, based on the underlying recovery mechanisms. If ever there are two or more different providers of voice rope services, forget it in the current setup.
Failures in VoiceRope calls don't terminate the conversation; maybe they should.
If ever a failure occurs that is not recoverable, such that the underlying SHandle.enabled is cleared, the current Voice rope code, and any others modeled after it, will not recover during the session. But maybe that's all right, since it represents a condition we're unprepared for anyway?
September 15, 1990 1:25:50 pm PDT, D. Swinehart
Recent modifications to the interface between Finch and ThParty client stubs (see also /Intervoice/SunRPCNotes.tioga):
FinchRegisterTestImpl, which was created by PTZ to contain the remnants of ThPartyRpcClientImpl that were too Finch-specific to be included in ThPartyToThPartySunRPC, has been institutionalized as FinchRegisterImpl. The cute trick for sharing global frame monitor locks results in the creation of FinchSmartsMonitorImpl. This will need to change before we can port to PCedar. The Finch startup and shutdown procedures have been coalesced a bit and made reasonably robust. ENTRY procedures have been fairly carefully placed around everything. Some values were moved from FinchSmarts.pd to FinchSmarts.info, and some eliminated in favor of direct access to similar values stored in the stub data structures.
ReportState and ReportProblem calls from the stuboid are used both to update state at the FinchSmarts level and to pass the information on to FinchSmarts clients, as before (via RecSS, which reports to lists of registered clients). RecSS can handle either kind of report, through clever but wasteful use of default values for unchanged items. Also, registration and enablement information obtained from Thrush via FinchSmarts.CheckIn is reported down to the stubs by the Register code.
FinchSmarts has been changed to accommodate the changes described above, and to eliminate some old obsolete stuff (Info was a MONITORED RECORD, for example!)
As of this writing, ThSmarts has not been improved, timeouts have not been tuned, and none of the other services are included. I'll do ThSmarts, then do the services beginning with the simple ones. No recent changes by Harrick for conferences have been incorporated. Polle may also have made some parallel changes since I grabbed my copies. Ugh.
AMEvents USING [ CallDebugger ],
DESFace USING [ Key, nullKey ],
GVBasics USING [ Password ],
Pup USING [ Address, nullAddress, nullSocket ],
PupName USING [ NameLookup ],
RPC USING [ Conversation, EncryptionKey, InterfaceName, unencrypted, ShortROPE,
MakeKey ]
ThSmartsRpcControl.InterfaceRecord
FinchSmartsImpl
GVBasics USING [ MakeKey, Password ], => XNSLookup?? check Peanut init code
for IdentifyVisitor/ReleaseVisitor
GVBasics.Password = RPC.EncryptionKey
RPC.MakeKey (used by VoiceUtils) = GVBasics.MakeKey
LarkFeepRpcControl USING [ Feep, ImportNewInterface ],
only for feeping
Nice,
debugging; Nice uses Pup.Address - otherwise looks ok
PupSocket USING [ GetUniqueID ],
used only in NewID proc -- private proc, never called!
RPC.EncryptionKey
CallFailed, EncryptionKey, ImportFailed, TimeoutEnable, VersionRange
Feep, InitFinchSmarts
VoiceUtils USING [ CurrentPasskey, CurrentRName, MakeRName, Problem, ProblemFR, Registrize, Report, ReportFR ]
Report, Feep, IdentifyVisitor, ReleaseVisitor, Announce, FinchOn, Problem, InitFinchSmarts, SetFiltering, InitFiltering
FinchToolImpl
Booting USING [ CheckpointProc, RollbackProc, RegisterProcs ],
ReFinchOnRollback, UnFinchOnCheckpointOrBoot, initialization
FinchSynthesizer USING [ InitializeFinchSynthesizer, StopSpeech, TextToSpeech ],
SpeakText..., etc.
Nice USING [ View ],
ViewCmd
Synthesizer USING [ SynthSpecBody, SynthSpec ],
SpeakText..., ReportRequestState
Thrush USING [ ActionReport, ConvEvent, ConvEventBody, ConversationID, NB, notReallyInConv, nullConvID, Reason, StateInConv ],
VoiceUtils USING [ CurrentRName, Report, ReportFR, RegisterWhereToReport, WhereProc ]
ParseCallee, CollectUserProfileInfo
ReportSystemState, Report, ReportRope, initialization
Thrush
DESFace USING [ Key, nullKey ],
GVBasics USING [ Password ],
Pup USING [ Address, nullAddress ],
RPC USING [ Conversation, InterfaceName, unencrypted ]
ThParty
GVBasics USING [ Password ],
RPC USING [ InterfaceName, ShortROPE ],
ThSmartsRpcControl.InterfaceRecord
VoiceUtils
GVBasics USING [ Password ],
RPC USING [ EncryptionKey ],
Pup USING [ Address, nullAddress ]
VoiceUtilsImpl
AMEvents USING [ CallDebugger ],
ProblemInt: IF pd.attended THEN AMEvents.CallDebugger[remark];
Pup USING [ nullSocket ],
PupName USING [ NameLookup ],
RPC USING [ MakeKey, EncryptionKey ],
UserCredentials USING [ Get ],
From Finch.df
Imports [CedarChest7.0]<Top>VoiceUtils.df Of ~=
Using [VoiceUtils.bcd, NameDB.bcd, NameDBBackDoor.bcd, NamesGVAuthImpl.bcd, NamesRPC.bcd, Nice.bcd, NiceImpl.bcd, VBagImpl.bcd]

Imports [Cedar7.0]<Top>AMTypes.df Of ~=
Using [AMBridge.bcd, AMTypes.bcd]

Imports [Cedar7.0]<Top>GrapevineUser.df Of ~=
Using [GVBasics.bcd]

Imports [Cedar7.0]<Top>RPCRuntime.df Of ~=
Using [RPC.bcd, DESDummy.bcd, LupineRuntime.bcd, RPCLupine.bcd]
Machine names
Can compute a Pup-like address #net#host from an Arpa address [a.b.c.d] via:
1. net ← a+b+c; -- overflows; no collision
host ← d;
2. net ← b+c; -- overflows; no collision
host ← d;
3. net ← c; -- no overflow or collision
host ← d;
% qfind NetAddressFromRope *impl.mesa
[]<>Users>PolleZ.pa>sunfinch>NameDBImpl.mesa!1
1027: VoiceUtils USING [ CurrentRName, CurrentPasskey, NetAddress, NetAddressFromRope, nullNetAddress, RnameToRspec ]
7235: RETURN[VoiceUtils.NetAddressFromRope[netAddressAsRope]];
In HostMachineFromInstance, which no Finch client calls
[]<>Users>PolleZ.pa>SunFinch>ThPartyClientImpl.mesa!2
635: VoiceUtils USING [ NetAddress, NetAddressFromRope, OwnNetAddress, Problem, Report ]
16673: hostHint ← VoiceUtils.NetAddressFromRope[
NameDB.GetAttribute[pd.interfaceName.instance, $connect]];
e.g., NameDB.GetAttribute["Strowger.Lark", $connect] = "173#270#"
[]<>Users>PolleZ.pa>sunfinch>VoiceUtilsImpl.mesa!1
10541: netAddress ← NetAddressFromRope[netAddressRope: "ME"];
10587: NetAddressFromRope: PUBLIC PROC[netAddressRope: ROPE]
17 files, 6 matches, 8.1832 seconds
% qfind HostFromInstance *impl.mesa
[]<>Users>PolleZ.pa>sunfinch>NameDBImpl.mesa!1
7016: HostFromInstance: PUBLIC PROC[instance: Rope.ROPE]
17 files, 1 matches, 5.175456 seconds
NameDB access
need to load LoganBerrySunStub, then can refer to items via "/Growler-SUN///Strowger/Whitepages.df" etc
User credentials
% ← UserCredentials.GetIdentity[]
^[next: NIL, conversations: 6771642B^, name: [organization: "Xerox", domain: "PARC", object: "PolleZ"], password: "gl25586", valid: TRUE, key: (4)[143776B (51198), 147121B (52817), 32224B (13460), 111155B (37485)]]
% ← XNSAuth.GetIdentityDetails[&]
[name: [organization: "Xerox", domain: "PARC", object: "PolleZ"], password: "gl25586", credentialsType: strong]
% ← XNSAuth.StrongKeyFromPassword["gl25586"]
(4)[143776B (51198), 147121B (52817), 32224B (13460), 111155B (37485)]
% ← XNSAuth.SimpleKeyFromPassword["gl25586"]
170564B (61812)
% ← GVBasics.MakeKey["gl25586"]
(4)[147330B (52952), 62152B (25706), 65160B (27248), 66000B (27648)]
Note: # XNSAuth.StrongKeyFromPassword["gl25586"]
Willie-Sue says that P users may not log in with XNS credentials! Also, PCedar UserCredentials.Get[] returns Unix name and password (encrypted?)
DFPorter
Warning: XNSStubsImpl.mob is defined in both [PCedar2.0]<Top>XNSStubs-PCR.df and [PCedar2.0]<Top>XNSSupport-PCR.df
Warning: XNSStubsImpl.c2c.c is defined in both [PCedar2.0]<Top>XNSStubs-PCR.df and [PCedar2.0]<Top>XNSSupport-PCR.df
Warning: XNSStubsImpl.mesa is defined in both [PCedar2.0]<Top>XNSStubs-Source.df and [PCedar2.0]<Top>XNSSupport-Source.df
Warning: sun4>XNSStubsImpl.c2c.o is defined in both [PCedar2.0]<Top>XNSStubs-Sun4.df and [PCedar2.0]<Top>XNSSupport-Sun4.df
Warning: ThPartyRpcClientImpl.c2c.o is not defined by Ported.df; assuming [PCedar2.0]<Top>InterVoice-Sun3.df
Warning: ThPartyRpcClientImpl.c2c.o is not defined by Ported.df; assuming [PCedar2.0]<Top>InterVoice-Sun4.df
Warning: AMTypes.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>AMTypes-PCR.df
Warning: RefTab.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>BootPackages-PCR.df
Warning: Booting.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>File-PCR.df
Warning: GVBasics.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>GrapevineUser-PCR.df
Warning: PrincOps.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>MesaRuntime-PCR.df
Warning: PrincOpsUtils.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>MesaRuntime-PCR.df
Warning: PupSocket.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>Pup-PCR.df
Warning: RPC.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>RPCRuntime-PCR.df
Warning: DESDummy.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>RPCRuntime-PCR.df
Warning: LupineRuntime.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>RPCRuntime-PCR.df
Warning: RPCLupine.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>RPCRuntime-PCR.df
Warning: UserProfile.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>UserProfile-PCR.df
Warning: ThParty.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>InterVoice-PCR.df
Warning: Thrush.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>InterVoice-PCR.df
Warning: ThSmarts.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>InterVoice-PCR.df
Warning: ThVersions.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>InterVoice-PCR.df
Warning: ThVersionsImpl.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>InterVoice-PCR.df
Warning: IV.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>InterVoice-PCR.df
Warning: ThSmartsSunExport.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>InterVoice-PCR.df
Warning: ThPartyToThPartySunRPC.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>InterVoice-PCR.df
Warning: Synthesizer.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>InterVoice-PCR.df
Warning: SynthesizerImpl.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>InterVoice-PCR.df
Warning: VoiceRopeServer.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>InterVoice-PCR.df
Warning: LarkFeep.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>InterVoice-PCR.df
Warning: LarkTTY.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>InterVoice-PCR.df
Warning: loganberry.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>LoganBerry-PCR.df
Warning: Tempus.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>Tempus-PCR.df
Warning: ViewRec.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>ViewRec-PCR.df
Warning: VoiceUtils.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>VoiceUtils-PCR.df
Warning: NameDB.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>VoiceUtils-PCR.df
Warning: NameDBBackDoor.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>VoiceUtils-PCR.df
Warning: NamesGVAuthImpl.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>VoiceUtils-PCR.df
Warning: NamesRPC.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>VoiceUtils-PCR.df
Warning: Nice.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>VoiceUtils-PCR.df
Warning: NiceImpl.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>VoiceUtils-PCR.df
Warning: VBagImpl.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>VoiceUtils-PCR.df
Warning: WalnutDefs.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>Walnut-PCR.df
Warning: WalnutOps.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>Walnut-PCR.df
Warning: WalnutWindow.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>Walnut-PCR.df
Warning: WalnutRegistry.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>WalnutRegistry-PCR.df
Warning: WalnutDocumentRope.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>WalnutSend-PCR.df
Warning: WalnutParseMsg.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>WalnutSend-PCR.df
Warning: WalnutSendOps.mob is not defined by Ported.df; assuming [PCedar2.0]<Top>WalnutSend-PCR.df