Browse Source

make METADATA section appear in the metafile at

intialization when recording using the proc method

add new METADATA sections only if they differ from
the previous ones
pull/411/head
Claudiu Boriga 8 years ago
parent
commit
2250ab11fd
4 changed files with 20 additions and 14 deletions
  1. +7
    -4
      daemon/call_interfaces.c
  2. +8
    -3
      daemon/recording.c
  3. +2
    -2
      daemon/recording.h
  4. +3
    -5
      daemon/redis.c

+ 7
- 4
daemon/call_interfaces.c View File

@ -747,9 +747,9 @@ static const char *call_offer_answer_ng(bencode_item_t *input, struct callmaster
chopper = sdp_chopper_new(&sdp); chopper = sdp_chopper_new(&sdp);
bencode_buffer_destroy_add(output->buffer, (free_func_t) sdp_chopper_destroy, chopper); bencode_buffer_destroy_add(output->buffer, (free_func_t) sdp_chopper_destroy, chopper);
detect_setup_recording(call, &flags.record_call_str);
detect_setup_recording(call, &flags.record_call_str, &flags.metadata);
if (flags.record_call) if (flags.record_call)
recording_start(call, NULL);
recording_start(call, NULL, &flags.metadata);
ret = monologue_offer_answer(monologue, &streams, &flags); ret = monologue_offer_answer(monologue, &streams, &flags);
if (!ret) if (!ret)
@ -763,7 +763,8 @@ static const char *call_offer_answer_ng(bencode_item_t *input, struct callmaster
meta_write_sdp_after(recording, sdp_iov, chopper->iov_num, chopper->str_len, meta_write_sdp_after(recording, sdp_iov, chopper->iov_num, chopper->str_len,
monologue, opmode); monologue, opmode);
if (flags.metadata.len) {
//only add METADATA chunk if value is changed
if (flags.metadata.len && str_cmp_str(&flags.metadata, &recording->metadata)) {
call_str_cpy(call, &recording->metadata, &flags.metadata); call_str_cpy(call, &recording->metadata, &flags.metadata);
recording_meta_chunk(recording, "METADATA", &flags.metadata); recording_meta_chunk(recording, "METADATA", &flags.metadata);
} }
@ -1192,14 +1193,16 @@ const char *call_list_ng(bencode_item_t *input, struct callmaster *m, bencode_it
const char *call_start_recording_ng(bencode_item_t *input, struct callmaster *m, bencode_item_t *output) { const char *call_start_recording_ng(bencode_item_t *input, struct callmaster *m, bencode_item_t *output) {
str callid; str callid;
struct call *call; struct call *call;
str metadata;
if (!bencode_dictionary_get_str(input, "call-id", &callid)) if (!bencode_dictionary_get_str(input, "call-id", &callid))
return "No call-id in message"; return "No call-id in message";
bencode_dictionary_get_str(input, "metadata", &metadata);
call = call_get_opmode(&callid, m, OP_OTHER); call = call_get_opmode(&callid, m, OP_OTHER);
if (!call) if (!call)
return "Unknown call-id"; return "Unknown call-id";
recording_start(call, NULL);
recording_start(call, NULL, &metadata);
rwlock_unlock_w(&call->master_lock); rwlock_unlock_w(&call->master_lock);
obj_put(call); obj_put(call);


+ 8
- 3
daemon/recording.c View File

@ -214,7 +214,7 @@ static int pcap_create_spool_dir(const char *spoolpath) {
} }
// lock must be held // lock must be held
void recording_start(struct call *call, const char *prefix) {
void recording_start(struct call *call, const char *prefix, str *metadata) {
if (call->recording) // already active if (call->recording) // already active
return; return;
@ -236,6 +236,9 @@ void recording_start(struct call *call, const char *prefix) {
} }
else else
recording->meta_prefix = strdup(prefix); recording->meta_prefix = strdup(prefix);
if (metadata->len) {
call_str_cpy(call, &recording->metadata, metadata);
}
_rm(init_struct, call); _rm(init_struct, call);
@ -269,12 +272,12 @@ void recording_stop(struct call *call) {
* *
* Returns a boolean for whether or not the call is being recorded. * Returns a boolean for whether or not the call is being recorded.
*/ */
void detect_setup_recording(struct call *call, const str *recordcall) {
void detect_setup_recording(struct call *call, const str *recordcall, str *metadata) {
if (!recordcall || !recordcall->s) if (!recordcall || !recordcall->s)
return; return;
if (!str_cmp(recordcall, "yes") || !str_cmp(recordcall, "on")) if (!str_cmp(recordcall, "yes") || !str_cmp(recordcall, "on"))
recording_start(call, NULL);
recording_start(call, NULL, metadata);
else if (!str_cmp(recordcall, "no") || !str_cmp(recordcall, "off")) else if (!str_cmp(recordcall, "no") || !str_cmp(recordcall, "off"))
recording_stop(call); recording_stop(call);
else else
@ -655,6 +658,8 @@ static void proc_init(struct call *call) {
append_meta_chunk_str(recording, &call->callid, "CALL-ID"); append_meta_chunk_str(recording, &call->callid, "CALL-ID");
append_meta_chunk_s(recording, recording->meta_prefix, "PARENT"); append_meta_chunk_s(recording, recording->meta_prefix, "PARENT");
if (recording->metadata.len)
recording_meta_chunk(recording, "METADATA", &recording->metadata);
} }
static void sdp_before_proc(struct recording *recording, const str *sdp, struct call_monologue *ml, static void sdp_before_proc(struct recording *recording, const str *sdp, struct call_monologue *ml,


+ 2
- 2
daemon/recording.h View File

@ -113,9 +113,9 @@ void recording_fs_init(const char *spooldir, const char *method, const char *for
* *
* Returns a boolean for whether or not the call is being recorded. * Returns a boolean for whether or not the call is being recorded.
*/ */
void detect_setup_recording(struct call *call, const str *recordcall);
void detect_setup_recording(struct call *call, const str *recordcall, str *metadata);
void recording_start(struct call *call, const char *);
void recording_start(struct call *call, const char *prefix, str *metadata);
void recording_stop(struct call *call); void recording_stop(struct call *call);


+ 3
- 5
daemon/redis.c View File

@ -1440,7 +1440,7 @@ static void json_restore_call(struct redis *r, struct callmaster *m, const str *
struct redis_hash call; struct redis_hash call;
struct redis_list tags, sfds, streams, medias, maps; struct redis_list tags, sfds, streams, medias, maps;
struct call *c = NULL; struct call *c = NULL;
str s, id;
str s, id, meta;
const char *err = 0; const char *err = 0;
int i; int i;
@ -1547,10 +1547,8 @@ static void json_restore_call(struct redis *r, struct callmaster *m, const str *
// presence of this key determines whether we were recording at all // presence of this key determines whether we were recording at all
if (!redis_hash_get_str(&s, &call, "recording_meta_prefix")) { if (!redis_hash_get_str(&s, &call, "recording_meta_prefix")) {
recording_start(c, s.s);
if ((c->recording) && (!redis_hash_get_str(&s, &call, "recording_metadata")))
call_str_cpy(c, &c->recording->metadata, &s);
redis_hash_get_str(&meta, &call, "recording_metadata");
recording_start(c, s.s, &meta);
} }
err = NULL; err = NULL;


Loading…
Cancel
Save