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
pull/1786/head
Richard Fuchs 2 years ago
parent e9c4feeb0d
commit 26352abf6b

@ -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);

@ -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) {

@ -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);
}

@ -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);

Loading…
Cancel
Save