TT#189201 unify media blocking/silencing interface functions

Change-Id: I40518fbc09b8c1a0dfe5d6ae3e533ce9a61bea7f
pull/1546/head
Richard Fuchs 3 years ago
parent c109644fea
commit ba56e37bc0

@ -2645,32 +2645,9 @@ const char *call_unblock_dtmf_ng(bencode_item_t *input, bencode_item_t *output)
return NULL;
}
const char *call_block_media_ng(bencode_item_t *input, bencode_item_t *output) {
AUTO_CLEANUP_NULL(struct call *call, call_unlock_release);
struct call_monologue *monologue;
const char *errstr = NULL;
struct sdp_ng_flags flags;
errstr = media_block_match(&call, &monologue, &flags, input, OP_OTHER);
if (errstr)
return errstr;
if (monologue) {
ilog(LOG_INFO, "Blocking directional media (tag '" STR_FORMAT_M "')",
STR_FMT_M(&monologue->tag));
monologue->block_media = true;
__monologue_unkernelize(monologue);
}
else {
ilog(LOG_INFO, "Blocking media (entire call)");
call->block_media = true;
__call_unkernelize(call);
}
return NULL;
}
const char *call_unblock_media_ng(bencode_item_t *input, bencode_item_t *output) {
static const char *call_block_silence_media(bencode_item_t *input, bool on_off, const char *ucase_verb,
size_t call_offset, size_t ml_offset)
{
AUTO_CLEANUP_NULL(struct call *call, call_unlock_release);
struct call_monologue *monologue;
const char *errstr = NULL;
@ -2681,81 +2658,46 @@ const char *call_unblock_media_ng(bencode_item_t *input, bencode_item_t *output)
return errstr;
if (monologue) {
ilog(LOG_INFO, "Unblocking directional media (tag '" STR_FORMAT_M "')",
ilog(LOG_INFO, "%s directional media (tag '" STR_FORMAT_M "')",
ucase_verb,
STR_FMT_M(&monologue->tag));
monologue->block_media = false;
G_STRUCT_MEMBER(bool, monologue, ml_offset) = on_off;
__monologue_unkernelize(monologue);
}
else {
ilog(LOG_INFO, "Unblocking media (entire call)");
call->block_media = false;
if (flags.all) {
for (GList *l = call->monologues.head; l; l = l->next) {
monologue = l->data;
monologue->block_media = false;
G_STRUCT_MEMBER(bool, call, call_offset) = on_off;
if (!on_off) {
ilog(LOG_INFO, "%s media (entire call and participants)", ucase_verb);
if (flags.all) {
for (GList *l = call->monologues.head; l; l = l->next) {
monologue = l->data;
G_STRUCT_MEMBER(bool, monologue, ml_offset) = on_off;
}
}
}
else
ilog(LOG_INFO, "%s media (entire call)", ucase_verb);
__call_unkernelize(call);
}
return NULL;
}
#define CALL_BLOCK_SILENCE_MEDIA(input, on_off, ucase_verb, member_name) \
call_block_silence_media(input, on_off, ucase_verb, G_STRUCT_OFFSET(struct call, member_name), \
G_STRUCT_OFFSET(struct call_monologue, member_name))
const char *call_block_media_ng(bencode_item_t *input, bencode_item_t *output) {
return CALL_BLOCK_SILENCE_MEDIA(input, true, "Blocking", block_media);
}
const char *call_unblock_media_ng(bencode_item_t *input, bencode_item_t *output) {
return CALL_BLOCK_SILENCE_MEDIA(input, false, "Unblocking", block_media);
}
const char *call_silence_media_ng(bencode_item_t *input, bencode_item_t *output) {
AUTO_CLEANUP_NULL(struct call *call, call_unlock_release);
struct call_monologue *monologue;
const char *errstr = NULL;
struct sdp_ng_flags flags;
errstr = media_block_match(&call, &monologue, &flags, input, OP_OTHER);
if (errstr)
return errstr;
if (monologue) {
ilog(LOG_INFO, "Silencing directional media (tag '" STR_FORMAT_M "')",
STR_FMT_M(&monologue->tag));
monologue->silence_media = true;
__monologue_unkernelize(monologue);
}
else {
ilog(LOG_INFO, "Blocking media (entire call)");
call->silence_media = true;
__call_unkernelize(call);
}
return NULL;
return CALL_BLOCK_SILENCE_MEDIA(input, true, "Silencing", silence_media);
}
const char *call_unsilence_media_ng(bencode_item_t *input, bencode_item_t *output) {
AUTO_CLEANUP_NULL(struct call *call, call_unlock_release);
struct call_monologue *monologue;
const char *errstr = NULL;
struct sdp_ng_flags flags;
errstr = media_block_match(&call, &monologue, &flags, input, OP_OTHER);
if (errstr)
return errstr;
if (monologue) {
ilog(LOG_INFO, "Unsilencing directional media (tag '" STR_FORMAT_M "')",
STR_FMT_M(&monologue->tag));
monologue->silence_media = false;
__monologue_unkernelize(monologue);
}
else {
ilog(LOG_INFO, "Unsilencing media (entire call)");
call->silence_media = false;
if (flags.all) {
for (GList *l = call->monologues.head; l; l = l->next) {
monologue = l->data;
monologue->silence_media = false;
}
}
__call_unkernelize(call);
}
return NULL;
return CALL_BLOCK_SILENCE_MEDIA(input, false, "Unsilencing", silence_media);
}

Loading…
Cancel
Save