diff --git a/daemon/call.h b/daemon/call.h index dd81303c1..aafbf649d 100644 --- a/daemon/call.h +++ b/daemon/call.h @@ -432,6 +432,7 @@ struct call { unsigned int redis_hosted_db; unsigned int foreign_call; // created_via_redis_notify call + int record_call; struct recording *recording; }; diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index 35402ffef..7c4ba5fc4 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -689,29 +689,28 @@ static const char *call_offer_answer_ng(bencode_item_t *input, struct callmaster if (!call) goto out; - if (recordcall.s && !str_cmp(&recordcall, "yes")) { - if (call->recording == NULL) { - call->recording = g_slice_alloc0(sizeof(struct recording)); - call->recording->recording_pd = NULL; - call->recording->recording_pdumper = NULL; - meta_setup_file(call->recording, call->callid); - } - bencode_dictionary_get_str(input, "metadata", &metadata); - if (metadata.len > 0) { - if (call->recording->metadata != NULL) { - free(call->recording->metadata); + if (recordcall.s) { + if (!str_cmp(&recordcall, "yes")) { + call->record_call = TRUE; + if (call->recording == NULL) { + call->recording = g_slice_alloc0(sizeof(struct recording)); + call->recording->recording_pd = NULL; + call->recording->recording_pdumper = NULL; + meta_setup_file(call->recording, call->callid); } - call->recording->metadata = str_dup(&metadata); + } else if (!str_cmp(&recordcall, "no")) { + call->record_call = FALSE; + } else { + ilog(LOG_INFO, "\"record-call\" flag %s is invalid flag.", recordcall.s); } - } else { - if (call->recording != NULL) { - g_slice_free1(sizeof(*(call->recording)), call->recording); - str *rec_metadata = call->recording->metadata; - if (rec_metadata != NULL) { - free(rec_metadata); - } + } + + bencode_dictionary_get_str(input, "metadata", &metadata); + if (metadata.len > 0 && call->recording != NULL) { + if (call->recording->metadata != NULL) { + free(call->recording->metadata); } - call->recording = NULL; + call->recording->metadata = str_dup(&metadata); } if (!call->created_from && addr) { diff --git a/daemon/media_socket.c b/daemon/media_socket.c index 710a929c0..baab02145 100644 --- a/daemon/media_socket.c +++ b/daemon/media_socket.c @@ -1180,7 +1180,7 @@ loop_ok: } // If recording pcap dumper is set, then we record the call. - if (recording_pdumper != NULL) { + if (recording_pdumper != NULL && call->record_call) { stream_pcap_dump(recording_pdumper, stream, s); } diff --git a/daemon/recording.c b/daemon/recording.c index 954975b60..2e797887b 100644 --- a/daemon/recording.c +++ b/daemon/recording.c @@ -186,6 +186,8 @@ int meta_finish_file(struct call *call) { ilog(LOG_INFO, "Moved metadata file \"%s\" to \"%s/metadata\"", recording->meta_filepath->s, spooldir); } + } else { + ilog(LOG_INFO, "Trying to clean up recording meta file without a file pointer opened."); } if (recording != NULL && recording->meta_filepath != NULL) { free(recording->meta_filepath->s);