DIRECTORY BasicTime USING [ GMT ], Lark USING [ KeyTable], LarkPlay USING [ ToneSpec], MBQueue USING [ Queue ], PupTypes USING [ PupSocketID ], RefID USING [ ID ], Thrush USING [ AlertKind, CallUrgency, ConversationID, Credentials, Machine, NB, none, nullID, PartyID, PartyType, ROPE, SHHH, SmartsID, StateID, StateInConv ], ThParty USING [ NameReq, SmartsInterfaceRecord, SmartsProperties ] ; ThPartyPrivate: CEDAR DEFINITIONS = { PartyData: TYPE = REF PartyBody; PartyBody: TYPE = RECORD [ type: Thrush.PartyType_, -- Must be specified. numConvs: NAT _ 0, enabled: BOOL_FALSE, -- must be TRUE for party to be visible to anybody. partyActive: BOOL _ FALSE, -- if TRUE, party is active in exactly one conversation name: Thrush.ROPE, outgoing: Thrush.ROPE _ NIL, -- * reservedBy: Thrush.PartyID _ NULL -- ** ]; SmartsData: TYPE=REF SmartsBody; SmartsBody: TYPE = RECORD [ properties: ThParty.SmartsProperties, type: Thrush.PartyType_$telephone, interface: ThParty.SmartsInterfaceRecord, -- an RPC or direct interface shh: Thrush.SHHH, -- outgoing encryption handle; should be one for each Party-Smarts pair? For now, callee in shh is RName associated of Party that creates smarts. notifications: MBQueue.Queue, -- pending party->smarts notifications failed: BOOL_ FALSE, -- when TRUE, smarts has already been deregistered and will vanish when last report has been made. enablesParty: BOOL _ FALSE -- when TRUE, we're contributing to party.numEnabled ]; ConversationData: TYPE = REF ConversationBody; ConversationBody: TYPE = RECORD [ convID: Thrush.ConversationID_NULL, subject: Thrush.ROPE _ NIL, urgency: Thrush.CallUrgency_NIL, alertKind: Thrush.AlertKind_NIL, timeOfID: BasicTime.GMT, -- time of last report to anyone startTime: BasicTime.GMT, conferenceHost: Thrush.Machine_[[0],[0]], keyTable: Lark.KeyTable _ NIL, -- current key table for this conversation numParties: NAT_0, numActive: NAT_0, numIdle: NAT_0, numReportsOut: NAT_0 -- reports scheduled but not completed ]; ConvState: TYPE = REF ConvStateBody; ConvStateBody: TYPE = RECORD [ state: Thrush.StateInConv _ $neverWas, stateID: Thrush.StateID _ 0, sockID: PupTypes.PupSocketID, time: BasicTime.GMT_NULL ]; outsideRingTune: LarkPlay.ToneSpec; MakeServiceRname: PROC[serviceName: Thrush.ROPE] RETURNS [serviceRname: Thrush.ROPE, serviceRnameAtom: ATOM]; GetCurrentParty: PROC[shh: Thrush.SHHH_Thrush.none, smartsID: Thrush.SmartsID] RETURNS [nb: Thrush.NB_$success, partyID: Thrush.PartyID_Thrush.nullID]; Verify: PROC[ credentials: Thrush.Credentials, newInConv: BOOL_FALSE ] RETURNS [ conv: ConversationData, party: PartyData, convState: ConvState, nb: Thrush.NB ]; RegisterLocal: PROC[ shh: Thrush.SHHH_Thrush.none, rName: Thrush.ROPE_NIL, type: Thrush.PartyType_ $individual, clonePartyID: Thrush.PartyID_Thrush.nullID, interfaceRecord: ThParty.SmartsInterfaceRecord _ NIL, properties: ThParty.SmartsProperties ] RETURNS [ nb: Thrush.NB, credentials: Thrush.Credentials ]; DoDescribeParty: PROC[party: ThPartyPrivate.PartyData, nameReq: ThParty.NameReq] RETURNS[ description: Thrush.ROPE ]; UnsealConv: PROC[convID: Thrush.ConversationID] RETURNS [ conv: ConversationData ]; UnsealParty: PROC[partyID: Thrush.PartyID] RETURNS[party: PartyData]; UnsealSmarts: PROC[smartsID: Thrush.SmartsID] RETURNS[party: SmartsData]; UnsealConversation: PROC[ conv: ConversationData ]; }. ϊThPartyPrivate.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. last modified by Swinehart, December 18, 1985 4:04:45 pm PST Definitions PartyData: data representing an individual, trunk, or voice recording within Thrush For services, this remains the "idle service" rName for use when party goes idle. For trunks, this is the rName of the owner of the trunk; for other parties, this is the rName of the individual the party represents. Fields used by trunk parties * Set at GetParty time to called party number. This number is just what's needed to complete the call, with all alternatives removed. *x* in the number indicates the need for a pause of x 100 ms ticks. ** Since GetParty custom-tailors a trunk party for the specific outgoing call before initiating a conversation, need a way to make sure that the same smarts does start the conversation. Implementors say SmartsBody: PUBLIC TYPE=ThPartyPrivate.SmartsBody; The state of a party in a conversation Procedures Service Name is the formal descriptor of one of the voice services, such as "Recording", "Text-to-Speech", and so on. The result is "idle..Lark", as a ROPE and as a corresponding ATOM. This is a procedure because the service name is stored, but several clients need the atom or rope values. GetStdRingInfo: PROC [partyID: Thrush.PartyID]; SetStdRingInfo: PROC [partyID: Thrush.PartyID, update: BOOL_FALSE]; Can't combine with ThParty.Register, because RPC complains about interfaceRecord param. Description of party Or ID of party to replicate (used to provide multiple instances of services) Identification of smarts implementation -- requires either: RPC Interface allowing an instance to be imported See ThParty.Register Or Local Interface record matching that produced by RPC Kind of Smarts being registered, and from what host nb will indicate something about what went wrong if anything did; if nb=$success, credentials contains the resulting PartyID and SmartsID. FindOtherParty: PROC[myPartyID: Thrush.PartyID, conv: ConversationData] RETURNS[partyID: Thrush.PartyID, conference: BOOL]; DoAdvance: PROC [ smartsID: Thrush.SmartsID, party: PartyData, conv: ConversationData, cfRef: CFRef, state: Thrush.StateInConv, reason: Thrush.Reason_NIL, comment: Thrush.ROPE_NIL, reportToAll: BOOL ] RETURNS [nb: Thrush.NB]; Utilities Special ID-management operations Swinehart, May 15, 1985 6:01:06 pm PDT Cedar 6.0 changes to: PartyBody (incoming phone number removed), DIRECTORY Swinehart, May 20, 1985 1:16:41 pm PDT PartyBody is not a variant record any more. changes to: PartyBody Swinehart, May 22, 1985 10:32:47 am PDT serviceNameAtom => serviceName changes to: PartyBody Swinehart, May 22, 1985 10:41:26 am PDT changes to: MakeServiceRname, GetStdRingInfo, SetStdRingInfo, MakeServiceRname Swinehart, October 25, 1985 5:52:58 pm PDT Handle => ID (RefID's) changes to: DIRECTORY, nullID, PartyBody, ConversationBody, CFRec, GetCurrentParty, GetPartySmarts, GetStdRingInfo, SetStdRingInfo, FindOtherParty, DoDescribeParty, DoAdvance, RegisterLocal, DehandleConv, DehandleParty, DehandleSmarts Swinehart, November 7, 1985 11:57:15 am PST Remove several fields from these data structures, move socket ID to ConversationBody, modify CFRef. changes to: SmartsBody, ConversationBody, CFRec, outsideRingTune Κ―˜šœ™Icodešœ Οmœ1™