From 26352abf6bee64b5190453702a845bb7770bbac5 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 2 Jan 2024 12:28:39 -0500 Subject: [PATCH] MT#59069 unify recording metadata update Switch the start/stop/etc recording methods to parse out the full message dictionary into a sdp_ng_flags like all other methods, and then pass the sdp_ng_flags object to update_metadata_*() for a unified recording setup function. Functional no-op. Change-Id: Iad1004981808c45973bfd9bc2dc6c461acc602cc --- daemon/call_interfaces.c | 38 ++++++++++++++++++-------------------- daemon/recording.c | 22 +++++++++++----------- daemon/redis.c | 4 ++-- include/recording.h | 4 ++-- 4 files changed, 33 insertions(+), 35 deletions(-) diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index e740727b4..5483a93ce 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -2065,7 +2065,7 @@ static const char *call_offer_answer_ng(ng_buffer *ngbuf, bencode_item_t *input, chopper = sdp_chopper_new(&sdp); bencode_buffer_destroy_add(output->buffer, (free_func_t) sdp_chopper_destroy, chopper); - update_metadata_monologue(from_ml, &flags.metadata); + update_metadata_monologue(from_ml, &flags); detect_setup_recording(call, &flags); if (flags.drop_traffic_start) { @@ -2587,37 +2587,35 @@ const char *call_list_ng(bencode_item_t *input, bencode_item_t *output) { static const char *call_recording_common_ng(bencode_item_t *input, bencode_item_t *output, void (*fn)(bencode_item_t *input, call_t *call)) { - str callid, fromtag; - call_t *call; - str metadata; + g_auto(sdp_ng_flags) flags; + g_autoptr(call_t) call = NULL; - if (!bencode_dictionary_get_str(input, "call-id", &callid)) + call_ng_process_flags(&flags, input, OP_OTHER); + + if (!bencode_dictionary_get_str(input, "call-id", &flags.call_id)) return "No call-id in message"; - bencode_dictionary_get_str(input, "metadata", &metadata); - call = call_get_opmode(&callid, OP_OTHER); + call = call_get_opmode(&flags.call_id, OP_OTHER); if (!call) return "Unknown call-id"; struct call_monologue *ml = NULL; - if (bencode_dictionary_get_str(input, "from-tag", &fromtag)) { - if (fromtag.s) { - ml = call_get_monologue(call, &fromtag); + if (bencode_dictionary_get_str(input, "from-tag", &flags.from_tag)) { + if (flags.from_tag.s) { + ml = call_get_monologue(call, &flags.from_tag); if (!ml) - ilog(LOG_WARN, "Given from-tag " STR_FORMAT_M " not found", STR_FMT_M(&fromtag)); + ilog(LOG_WARN, "Given from-tag " STR_FORMAT_M " not found", + STR_FMT_M(&flags.from_tag)); } } if (ml) - update_metadata_monologue(ml, &metadata); + update_metadata_monologue(ml, &flags); else - update_metadata_call(call, &metadata); + update_metadata_call(call, &flags); fn(input, call); - rwlock_unlock_w(&call->master_lock); - obj_put(call); - return NULL; } @@ -2838,9 +2836,9 @@ const char *call_start_forwarding_ng(bencode_item_t *input, bencode_item_t *outp } if (monologue) - update_metadata_monologue(monologue, &flags.metadata); + update_metadata_monologue(monologue, &flags); else - update_metadata_call(call, &flags.metadata); + update_metadata_call(call, &flags); recording_start(call, NULL, NULL); return NULL; @@ -2873,9 +2871,9 @@ const char *call_stop_forwarding_ng(bencode_item_t *input, bencode_item_t *outpu } if (monologue) - update_metadata_monologue(monologue, &flags.metadata); + update_metadata_monologue(monologue, &flags); else - update_metadata_call(call, &flags.metadata); + update_metadata_call(call, &flags); recording_stop(call); diff --git a/daemon/recording.c b/daemon/recording.c index f9498e830..f0edad5a5 100644 --- a/daemon/recording.c +++ b/daemon/recording.c @@ -267,31 +267,31 @@ static int rec_pcap_create_spool_dir(const char *spoolpath) { } // lock must be held -void update_metadata_call(call_t *call, str *metadata) { - if (!metadata || !metadata->s || !call) +void update_metadata_call(call_t *call, const sdp_ng_flags *flags) { + if (!call) return; - if (str_cmp_str(metadata, &call->metadata)) { - call_str_cpy(call, &call->metadata, metadata); + if (flags->metadata.len && str_cmp_str(&flags->metadata, &call->metadata)) { + call_str_cpy(call, &call->metadata, &flags->metadata); if (call->recording) - recording_meta_chunk(call->recording, "METADATA", metadata); + recording_meta_chunk(call->recording, "METADATA", &flags->metadata); } } // lock must be held -void update_metadata_monologue(struct call_monologue *ml, str *metadata) { - if (!metadata || !metadata->s || !ml) +void update_metadata_monologue(struct call_monologue *ml, const sdp_ng_flags *flags) { + if (!ml) return; call_t *call = ml->call; - if (str_cmp_str(metadata, &ml->metadata)) { - call_str_cpy(call, &ml->metadata, metadata); + if (flags->metadata.len && str_cmp_str(&flags->metadata, &ml->metadata)) { + call_str_cpy(call, &ml->metadata, &flags->metadata); if (call->recording) - append_meta_chunk_str(call->recording, metadata, "METADATA-TAG %u", ml->unique_id); + append_meta_chunk_str(call->recording, &flags->metadata, "METADATA-TAG %u", ml->unique_id); } - update_metadata_call(call, metadata); + update_metadata_call(call, flags); } static void update_output_dest(call_t *call, const str *output_dest) { diff --git a/daemon/redis.c b/daemon/redis.c index 0e5a990aa..d5c7ed4b0 100644 --- a/daemon/redis.c +++ b/daemon/redis.c @@ -1503,7 +1503,7 @@ static int redis_tags(call_t *c, struct redis_list *tags, JsonReader *root_reade if (!redis_hash_get_str(&s, rh, "label")) call_str_cpy(c, &ml->label, &s); if (!redis_hash_get_str(&s, rh, "metadata")) - update_metadata_monologue(ml, &s); + call_str_cpy(c, &c->metadata, &s); redis_hash_get_time_t(&ml->deleted, rh, "deleted"); if (!redis_hash_get_int(&ii, rh, "block_dtmf")) ml->block_dtmf = ii; @@ -2077,7 +2077,7 @@ static void json_restore_call(struct redis *r, const str *callid, bool foreign) if (!redis_hash_get_str(&s, &call, "recording_meta_prefix")) { // coverity[check_return : FALSE] redis_hash_get_str(&meta, &call, "recording_metadata"); - update_metadata_call(c, &meta); + call_str_cpy(c, &c->metadata, &meta); recording_start(c, s.s, NULL); } diff --git a/include/recording.h b/include/recording.h index a7d7177cc..c8a9b4084 100644 --- a/include/recording.h +++ b/include/recording.h @@ -113,8 +113,8 @@ void recording_fs_free(void); * Returns a boolean for whether or not the call is being recorded. */ void detect_setup_recording(call_t *call, const sdp_ng_flags *flags); -void update_metadata_call(call_t *call, str *metadata); -void update_metadata_monologue(struct call_monologue *ml, str *metadata); +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, const char *prefix, const str *output_dest); void recording_pause(call_t *call);