<> <> <> DIRECTORY RefID USING [ ID, nullID ], Thrush USING [ ConversationID, EncryptionKey, KeyTable, NB, nullKey ], VoiceTemp USING [ IntervalSpec, IntervalSpecs, VoiceTime ] ; FinchRecording: CEDAR DEFINITIONS = { <> <<>> NB: TYPE = Thrush.NB; RConvDesc: TYPE = REF RConvDescBody; RConvDescBody: TYPE = RECORD [ <> stateChange: CONDITION, -- for waiting for state of conversation to change. pendingIntervals: VoiceTemp.IntervalSpecs _ NIL, -- requested, ~ finished or abandoned voiceTempID: RefID.ID _ RefID.nullID, -- serviceID; See FinchRecordingImpl for the RPC interface. keyTable: Thrush.KeyTable_NIL, keysMightBeDistributed: CONDITION, -- for waiting for keys to distribute, see FinchRecordingImpl keysDistributed: BOOL_FALSE ]; <<>> <> <<>> PlaybackTuneProc: TYPE = PROC [ convID: Thrush.ConversationID, intervalSpec: VoiceTemp.IntervalSpec, key: Thrush.EncryptionKey, queueIt: BOOL_TRUE, failOK: BOOL_FALSE -- playing is optional; leave connection open if tune doesn't exist. ] RETURNS [ started: BOOL_FALSE, newConvID: Thrush.ConversationID ]; <> PlaybackTune: PlaybackTuneProc; RecordTuneProc: TYPE = PROC[ convID: Thrush.ConversationID, useIntervalSpec: VoiceTemp.IntervalSpec_NIL, -- if supplied, it's a request to extend and includes key index useKey: Thrush.EncryptionKey _ Thrush.nullKey, -- useful only if useIntervalSpec#NI queueIt: BOOL_FALSE ] RETURNS[ nb: NB, intervalSpec: VoiceTemp.IntervalSpec, key: Thrush.EncryptionKey, newConvID: Thrush.ConversationID ]; <> <> << >> RecordTune: RecordTuneProc; StopTuneProc: TYPE = PROC[ convID: Thrush.ConversationID ]; <> StopTune: StopTuneProc; DescribeIntervalProc: TYPE = PROC[ intervalSpec: VoiceTemp.IntervalSpec, -- if supplied, it's a request to extend and includes key index minSilence: VoiceTemp.VoiceTime_1 ] RETURNS[ nb: NB, length: INT, intervals: VoiceTemp.IntervalSpecs ]; DescribeInterval: DescribeIntervalProc; InitializeFinchRecording: PROC; }. <<>> <> <> <<>> <<>> <<>>