diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index 7f81e358e..79da935eb 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -2668,7 +2668,6 @@ static const char *call_recording_common_ng(bencode_item_t *input, bencode_item_ static void start_recording_fn(bencode_item_t *input, call_t *call) { - CALL_SET(call, RECORDING_ON); recording_start(call); } const char *call_start_recording_ng(bencode_item_t *input, bencode_item_t *output) { @@ -2677,7 +2676,6 @@ const char *call_start_recording_ng(bencode_item_t *input, bencode_item_t *outpu static void pause_recording_fn(bencode_item_t *input, call_t *call) { - CALL_CLEAR(call, RECORDING_ON); recording_pause(call); } const char *call_pause_recording_ng(bencode_item_t *input, bencode_item_t *output) { @@ -2709,7 +2707,6 @@ static void stop_recording_fn(bencode_item_t *input, call_t *call) { } } - CALL_CLEAR(call, RECORDING_ON); recording_stop(call); } const char *call_stop_recording_ng(bencode_item_t *input, bencode_item_t *output) { @@ -2885,7 +2882,7 @@ const char *call_start_forwarding_ng(bencode_item_t *input, bencode_item_t *outp else update_metadata_call(call, &flags); - recording_start(call); + recording_start_daemon(call); return NULL; } @@ -2920,7 +2917,7 @@ const char *call_stop_forwarding_ng(bencode_item_t *input, bencode_item_t *outpu else update_metadata_call(call, &flags); - recording_stop(call); + recording_stop_daemon(call); return NULL; } diff --git a/daemon/recording.c b/daemon/recording.c index 3eae08069..2209305a1 100644 --- a/daemon/recording.c +++ b/daemon/recording.c @@ -339,7 +339,7 @@ static void recording_update_flags(call_t *call, bool streams) { } // lock must be held -void recording_start(call_t *call) { +void recording_start_daemon(call_t *call) { if (call->recording) { // already active recording_update_flags(call, true); @@ -391,7 +391,13 @@ void recording_start(call_t *call) { recording_update_flags(call, true); } -void recording_stop(call_t *call) { +// lock must be held +void recording_start(call_t *call) { + CALL_SET(call, RECORDING_ON); + recording_start_daemon(call); +} +// lock must be held +void recording_stop_daemon(call_t *call) { if (!call->recording) return; @@ -412,10 +418,20 @@ void recording_stop(call_t *call) { ilog(LOG_NOTICE, "Turning off call recording."); recording_finish(call, false); } +// lock must be held +void recording_stop(call_t *call) { + CALL_CLEAR(call, RECORDING_ON); + recording_stop_daemon(call); +} +// lock must be held void recording_pause(call_t *call) { + CALL_CLEAR(call, RECORDING_ON); + if (!call->recording) + return; ilog(LOG_NOTICE, "Pausing call recording."); recording_update_flags(call, true); } +// lock must be held void recording_discard(call_t *call) { CALL_CLEAR(call, RECORDING_ON); if (!call->recording) @@ -441,18 +457,12 @@ void detect_setup_recording(call_t *call, const sdp_ng_flags *flags) { const str *recordcall = &flags->record_call_str; - if (!str_cmp(recordcall, "yes") || !str_cmp(recordcall, "on") || flags->record_call) { - CALL_SET(call, RECORDING_ON); + if (!str_cmp(recordcall, "yes") || !str_cmp(recordcall, "on") || flags->record_call) recording_start(call); - } - else if (!str_cmp(recordcall, "no") || !str_cmp(recordcall, "off")) { - CALL_CLEAR(call, RECORDING_ON); + else if (!str_cmp(recordcall, "no") || !str_cmp(recordcall, "off")) recording_stop(call); - } - else if (!str_cmp(recordcall, "discard") || flags->discard_recording) { - CALL_CLEAR(call, RECORDING_ON); + else if (!str_cmp(recordcall, "discard") || flags->discard_recording) recording_discard(call); - } else if (recordcall->len != 0) ilog(LOG_INFO, "\"record-call\" flag "STR_FORMAT" is invalid flag.", STR_FMT(recordcall)); } diff --git a/daemon/redis.c b/daemon/redis.c index cf130d4ee..999da5b0e 100644 --- a/daemon/redis.c +++ b/daemon/redis.c @@ -2087,7 +2087,7 @@ static void json_restore_call(struct redis *r, const str *callid, bool foreign) call_str_cpy(c, &c->recording_pattern, &s); redis_hash_get_str(&s, &call, "recording_random_tag"); call_str_cpy(c, &c->recording_random_tag, &s); - recording_start(c); + recording_start_daemon(c); } // force-clear foreign flag (could have been set through call_flags), then diff --git a/include/recording.h b/include/recording.h index f50f78d28..38da4925f 100644 --- a/include/recording.h +++ b/include/recording.h @@ -114,8 +114,10 @@ void update_metadata_call(call_t *call, const sdp_ng_flags *flags); void update_metadata_monologue(struct call_monologue *ml, const sdp_ng_flags *flags); void recording_start(call_t *call); +void recording_start_daemon(call_t *call); void recording_pause(call_t *call); void recording_stop(call_t *call); +void recording_stop_daemon(call_t *call); void recording_discard(call_t *call);