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
pull/1802/head
Richard Fuchs 2 years ago
parent 8db00bb652
commit a428bcba2d

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

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

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

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

Loading…
Cancel
Save