From a428bcba2d314cacf6e8e19aabef604c061181d9 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Sat, 20 Jan 2024 09:03:25 -0500 Subject: [PATCH] MT#59038 refactor recording functions Distinguish between functions that enagage or disengage the recording daemon and functions acting on actual recording, which eliminates the need to deal with the flags separately. Change-Id: Ia2d718d9e6f95d7621a2ba186c60b501f7404fe7 --- daemon/call_interfaces.c | 7 ++----- daemon/recording.c | 32 +++++++++++++++++++++----------- daemon/redis.c | 2 +- include/recording.h | 2 ++ 4 files changed, 26 insertions(+), 17 deletions(-) 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);