<> <> <> 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 -- ** ]; <<* 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.>> 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]; <.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.>> 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 ]; <> <> <> <> <> <> <> <> <> <<] RETURNS [nb: Thrush.NB];>> <> <> 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 ]; <<>> }. <> <> <> <<>> <> <> <> <> < serviceName>> <> <> <> <<>> <> < ID (RefID's)>> <> <> <> <> <<>> <<>>