Browse Source

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
commit
a428bcba2d
4 changed files with 26 additions and 17 deletions
  1. +2
    -5
      daemon/call_interfaces.c
  2. +21
    -11
      daemon/recording.c
  3. +1
    -1
      daemon/redis.c
  4. +2
    -0
      include/recording.h

+ 2
- 5
daemon/call_interfaces.c View File

@ -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) { static void start_recording_fn(bencode_item_t *input, call_t *call) {
CALL_SET(call, RECORDING_ON);
recording_start(call); recording_start(call);
} }
const char *call_start_recording_ng(bencode_item_t *input, bencode_item_t *output) { 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) { static void pause_recording_fn(bencode_item_t *input, call_t *call) {
CALL_CLEAR(call, RECORDING_ON);
recording_pause(call); recording_pause(call);
} }
const char *call_pause_recording_ng(bencode_item_t *input, bencode_item_t *output) { 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); recording_stop(call);
} }
const char *call_stop_recording_ng(bencode_item_t *input, bencode_item_t *output) { 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 else
update_metadata_call(call, &flags); update_metadata_call(call, &flags);
recording_start(call);
recording_start_daemon(call);
return NULL; return NULL;
} }
@ -2920,7 +2917,7 @@ const char *call_stop_forwarding_ng(bencode_item_t *input, bencode_item_t *outpu
else else
update_metadata_call(call, &flags); update_metadata_call(call, &flags);
recording_stop(call);
recording_stop_daemon(call);
return NULL; return NULL;
} }


+ 21
- 11
daemon/recording.c View File

@ -339,7 +339,7 @@ static void recording_update_flags(call_t *call, bool streams) {
} }
// lock must be held // lock must be held
void recording_start(call_t *call) {
void recording_start_daemon(call_t *call) {
if (call->recording) { if (call->recording) {
// already active // already active
recording_update_flags(call, true); recording_update_flags(call, true);
@ -391,7 +391,13 @@ void recording_start(call_t *call) {
recording_update_flags(call, true); 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) if (!call->recording)
return; return;
@ -412,10 +418,20 @@ void recording_stop(call_t *call) {
ilog(LOG_NOTICE, "Turning off call recording."); ilog(LOG_NOTICE, "Turning off call recording.");
recording_finish(call, false); 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) { void recording_pause(call_t *call) {
CALL_CLEAR(call, RECORDING_ON);
if (!call->recording)
return;
ilog(LOG_NOTICE, "Pausing call recording."); ilog(LOG_NOTICE, "Pausing call recording.");
recording_update_flags(call, true); recording_update_flags(call, true);
} }
// lock must be held
void recording_discard(call_t *call) { void recording_discard(call_t *call) {
CALL_CLEAR(call, RECORDING_ON); CALL_CLEAR(call, RECORDING_ON);
if (!call->recording) 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; 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); 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); 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); recording_discard(call);
}
else if (recordcall->len != 0) else if (recordcall->len != 0)
ilog(LOG_INFO, "\"record-call\" flag "STR_FORMAT" is invalid flag.", STR_FMT(recordcall)); ilog(LOG_INFO, "\"record-call\" flag "STR_FORMAT" is invalid flag.", STR_FMT(recordcall));
} }


+ 1
- 1
daemon/redis.c View File

@ -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); call_str_cpy(c, &c->recording_pattern, &s);
redis_hash_get_str(&s, &call, "recording_random_tag"); redis_hash_get_str(&s, &call, "recording_random_tag");
call_str_cpy(c, &c->recording_random_tag, &s); 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 // force-clear foreign flag (could have been set through call_flags), then


+ 2
- 0
include/recording.h View File

@ -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 update_metadata_monologue(struct call_monologue *ml, const sdp_ng_flags *flags);
void recording_start(call_t *call); void recording_start(call_t *call);
void recording_start_daemon(call_t *call);
void recording_pause(call_t *call); void recording_pause(call_t *call);
void recording_stop(call_t *call); void recording_stop(call_t *call);
void recording_stop_daemon(call_t *call);
void recording_discard(call_t *call); void recording_discard(call_t *call);


Loading…
Cancel
Save