DIRECTORY Lark USING [ KeyTable], Thrush USING [ AlertKind, CallUrgency, ConversationHandle, ConvEvent, Credentials, Disposition, EventSequence, NB, PartyHandle, PartyType, nullHandle, PhoneNumber, Reason, ROPE, SHHH, SmartsHandle, StateID, StateInConv, ThHandle, Time, unencrypted ], ThSmarts USING [ SmartsProperties ], ThSmartsRpcControl USING [ InterfaceRecord, InterfaceRecordObject ] ; ThPartyPrivate: CEDAR DEFINITIONS = { LocalSmartsInterface: TYPE = ThSmartsRpcControl.InterfaceRecord; LocalSmartsBody: TYPE = ThSmartsRpcControl.InterfaceRecordObject; none: Thrush.SHHH = Thrush.unencrypted; StateInConv: TYPE = Thrush.StateInConv; nullHandle: Thrush.ThHandle = Thrush.nullHandle; PartyData: TYPE = REF PartyBody; PartyBody: TYPE = RECORD [ numConvs: NAT _ 0, numSmarts: NAT _ 0, numEnabled: NAT _ 0, -- must be >0 for party to be visible to GetParty[]. actionNeeded: CONDITION, supervisor: PROCESS, supervisorGone: CONDITION, partyActive: BOOL _ FALSE, partyFailed: BOOL_FALSE, v: SELECT type: Thrush.PartyType FROM individual=> [], trunk => [ incoming: Thrush.PhoneNumber _, -- << Use? >> outgoing: Thrush.ROPE _ NIL], -- set at GetParty time to called party number. recording => [ ], ENDCASE]; SmartsData: TYPE=REF SmartsBody; SmartsBody: TYPE = RECORD [ interface: ThSmartsRpcControl.InterfaceRecord, -- an RPC or direct interface properties: ThSmarts.SmartsProperties, type: Thrush.PartyType_individual, shh: Thrush.SHHH, -- outgoing encryption handle; should be one for each Party-Smarts pair? canProgress: BOOLEAN_TRUE, -- when FALSE, don't call Progress any more. enablesParty: BOOLEAN _ FALSE, -- when TRUE, we're contributing to party.numEnabled authenticated: BOOLEAN ]; ConversationData: TYPE = REF ConversationBody; ConversationBody: TYPE = RECORD [ subject: Thrush.ROPE _ NIL, numParties: NAT_0, numActive: NAT_0, creatorPartyID: Thrush.PartyHandle _ Thrush.nullHandle, urgency: Thrush.CallUrgency, alertKind: Thrush.AlertKind, currentStateID: Thrush.StateID_0, timeOfID: Thrush.Time, convID: Thrush.ConversationHandle_NULL, keyTable: Lark.KeyTable _ NIL, -- current key table for this conversation newKeyTable: BOOL_FALSE, -- IF key table has changed but not yet been posted log: Thrush.EventSequence ]; CFRef: TYPE = REF CFRec; -- Ref to party/conversation record CFRec: TYPE = RECORD [ -- One such CFRec for each Party-Conversation pair event: Thrush.ConvEvent, -- describes a state and the event that put it there. voiceSmartsID: Thrush.SmartsHandle_Thrush.nullHandle, -- the one that will carry the conversation load for this Party in this conversation sockID: LONG CARDINAL_NULL, -- local socket ID for this participant. lastPostedID: Thrush.StateID_0, -- last time event referring to this party was posted lastNotedID: Thrush.StateID_0 -- last time this party's smarts were informed. ]; logSizeIncrement: NAT = 16; recordingRAtom: ATOM; GetCurrentParty: PROC[ shh: Thrush.SHHH_Thrush.unencrypted, smartsID: Thrush.SmartsHandle] RETURNS [partyID: Thrush.PartyHandle]; GetPartySmarts: PROC[partyID: Thrush.PartyHandle, kind: ATOM] RETURNS [smartsID: Thrush.SmartsHandle]; DistributionProc: TYPE = PROC[ smarts: SmartsData ] RETURNS [ d: Thrush.Disposition ]; -- controls whether distribution will progress. Distribute: PROC[ party: PartyData, proc: DistributionProc] RETURNS [ d: Thrush.Disposition ]; -- accept/reject/pass, depending on whether anybody did. GetEvent: PROC[conv: ConversationData, stateID: Thrush.StateID] RETURNS [ event: Thrush.ConvEvent ]; Supervisor: PROC[party: PartyData]; -- supervision process root. Supervise: PROC[party: PartyData]; -- Creates or joggles a Supervisor. Use where one would normally do a NOTIFY party.actionNeeded Verify: PROC[ credentials: Thrush.Credentials ] RETURNS [ conv: ConversationData, party: PartyData, cfRef: CFRef, nb: Thrush.NB ]; DoDescribeParty: PROC[partyID: Thrush.PartyHandle] RETURNS[ description: Thrush.ROPE]; DoAdvance: PROC [ smartsID: Thrush.SmartsHandle, party: PartyData, conv: ConversationData, cfRef: CFRef, state: StateInConv, reason: Thrush.Reason, comment: Thrush.ROPE_NIL ] RETURNS [nb: Thrush.NB]; RegisterLocal: PROC[partyID: Thrush.PartyHandle, interface: LocalSmartsInterface, properties: ThSmarts.SmartsProperties, oldSmartsID: Thrush.SmartsHandle_nullHandle] RETURNS [smartsID: Thrush.SmartsHandle]; DehandleConv: PROC[convID: Thrush.ConversationHandle] RETURNS [ conv: ConversationData ]; DehandleParty: PROC[partyID: Thrush.PartyHandle, insist: BOOLEAN_FALSE] RETURNS[party: PartyData]; DehandleSmarts: PROC[smartsID: Thrush.SmartsHandle, insist: BOOLEAN_FALSE] RETURNS[party: SmartsData]; DestroyConversation: PROC[ conv: ConversationData ]; }. JThPartyPrivate.mesa last modified by Swinehart, November 4, 1983 9:25 am Record Types PartyData: data representing an individual, trunk, or voice recording within Thrush 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. Names of recording smarts interface . . . use to get mgmt interfaces Implementors say SmartsBody: PUBLIC TYPE=ThPartyPrivate.SmartsBody; for now, callee in shh is RName associated of Party that creates smarts. Procedures Get Party that this Smarts considers that it is currently associated with. << This might not be an adequate facility; may need an enumerator to get all connections, as well; quite likely, actually. >> There should be a function like this for each sort of smarts. This one works OK for both Lark Smarts and Lark Trunk Smarts. << Very likely this now belongs in ThParty with the other Triples-mungers>> Inherited from ThPartyIn Party Initialization This is the local analog of ThParty.Register. Conversations Special dehandling operations ÊE˜Jšœ™šœ4™4J˜—šÏk ˜ J˜Jšœœ œœD˜úJšœ œ˜$Jšœœ+˜CJ˜J˜—Jšœœ œ˜%J˜Jšœœ&˜@Jšœœ,˜AJšœ œ˜'Jšœ œ˜'J˜J˜0J˜™ JšœS™SJ˜Jšœ œœ ˜ šœ œœ˜Jšœ œ˜Jšœ œ˜Jšœ œÏc4˜IJšœ œ˜Jšœ œ˜Jšœ œ˜Jšœ œœ˜Jšœ œœ˜šœœ˜%Jšœ˜˜ Jšœ ž ˜-šœœœž/˜MJšœ7™7Jšœ1™1Jšœ1™1——šœ˜JšœE™E—Jšœ˜ J˜——Jšœ œœ ˜ JšœC™Cšœ œœ˜Jšœ/ž˜LJ˜&J˜"šœ œžH˜ZJšœH™H—Jšœ œœž,˜GJšœœœž4˜SJšœ˜Jšœ˜J˜—Jšœœœ˜.šœœœ˜!Jšœœœ˜Jšœ œ˜Jšœ œ˜J˜7J˜J˜J˜!J˜Jšœ"œ˜'Jšœœ,˜IJšœ œœž3˜MJ˜J˜J˜—Jšœœœž#˜<šœœœž2˜JJ˜Nšœ5˜5JšžT˜T—Jšœœœœž(˜EJšœ ž5˜UJšœž/˜NJ˜—J˜Jšœœ˜J˜Jšœœ˜J˜—™ JšœÇ™ÇšÏnœœ˜Jšœ œ˜$˜Jšœ˜&J˜——JšœK™KšŸœœ$œ˜=Jšœ!˜(—J˜šŸœœœ˜3Jšœž/˜RJ˜—šŸ œœ+˜;Jšœž8˜[—J™šŸœœ1˜?Jšœ˜$J˜—JšŸ œœž˜@JšŸ œœž`˜ƒJ˜šŸœœ"˜.šœœ˜ J˜J˜J˜ Jšœ œ˜J˜——šŸœœ˜2Jšœœ˜#J˜—šŸ œœ˜J˜Jšœ˜Jšœ˜J˜ J˜J˜Jšœœ˜Jšœœ œ˜—˜J˜——™J˜šœ™J˜šŸ œœ>˜Q˜SJšœ!˜(——šœ.™.J˜——šœ ™ J˜J™šŸ œœ#˜5Jšœ˜#—šŸ œœ&œœ˜GJšœ˜—šŸœœ(œœ˜JJšœ˜—J˜JšŸœœ˜4J™——J˜J˜—…—Tã