Browse Source

MT#59038 add block-egress flag

Change-Id: I61d57ffd998e61d8029dfeafb467c0c74600285d
pull/1808/head
Richard Fuchs 2 years ago
parent
commit
151c45ddd7
9 changed files with 29 additions and 2 deletions
  1. +5
    -0
      daemon/call_interfaces.c
  2. +1
    -1
      daemon/codec.c
  3. +9
    -0
      daemon/media_player.c
  4. +4
    -1
      daemon/media_socket.c
  5. +6
    -0
      docs/ng_control_protocol.md
  6. +1
    -0
      include/call.h
  7. +1
    -0
      include/call_interfaces.h
  8. +1
    -0
      include/media_player.h
  9. +1
    -0
      utils/rtpengine-ng-client

+ 5
- 0
daemon/call_interfaces.c View File

@ -1019,6 +1019,9 @@ static void call_ng_flags_flags(sdp_ng_flags *out, str *s, helper_arg dummy) {
case CSH_LOOKUP("block-DTMF"): case CSH_LOOKUP("block-DTMF"):
out->block_dtmf = 1; out->block_dtmf = 1;
break; break;
case CSH_LOOKUP("block-egress"):
out->block_egress = 1;
break;
case CSH_LOOKUP("block-short"): case CSH_LOOKUP("block-short"):
case CSH_LOOKUP("block-shorts"): case CSH_LOOKUP("block-shorts"):
case CSH_LOOKUP("block-short-packets"): case CSH_LOOKUP("block-short-packets"):
@ -2412,6 +2415,7 @@ static void ng_stats_media(bencode_item_t *list, const struct call_media *m,
BF_M("legacy OSRTP", LEGACY_OSRTP); BF_M("legacy OSRTP", LEGACY_OSRTP);
BF_M("reverse legacy OSRTP", LEGACY_OSRTP_REV); BF_M("reverse legacy OSRTP", LEGACY_OSRTP_REV);
BF_M("transcoding", TRANSCODING); BF_M("transcoding", TRANSCODING);
BF_M("block egress", BLOCK_EGRESS);
stats: stats:
for (auto_iter(l, m->streams.head); l; l = l->next) { for (auto_iter(l, m->streams.head); l; l = l->next) {
@ -3380,6 +3384,7 @@ const char *call_play_media_ng(bencode_item_t *input, bencode_item_t *output) {
media_player_opts_t opts = MPO( media_player_opts_t opts = MPO(
.repeat = flags.repeat_times, .repeat = flags.repeat_times,
.start_pos = flags.start_pos, .start_pos = flags.start_pos,
.block_egress = !!flags.block_egress,
); );
if (flags.file.len) { if (flags.file.len) {


+ 1
- 1
daemon/codec.c View File

@ -1700,7 +1700,7 @@ static void codec_add_raw_packet_dup(struct media_packet *mp, unsigned int clock
} }
#endif #endif
static bool handler_silence_block(struct codec_handler *h, struct media_packet *mp) { static bool handler_silence_block(struct codec_handler *h, struct media_packet *mp) {
if (CALL_ISSET(mp->call, BLOCK_MEDIA) || ML_ISSET(mp->media->monologue, BLOCK_MEDIA) || mp->sink.attrs.block_media)
if (CALL_ISSET(mp->call, BLOCK_MEDIA) || ML_ISSET(mp->media->monologue, BLOCK_MEDIA) || mp->sink.attrs.block_media || MEDIA_ISSET(mp->media_out, BLOCK_EGRESS))
return false; return false;
if (CALL_ISSET(mp->call, SILENCE_MEDIA) || ML_ISSET(mp->media->monologue, SILENCE_MEDIA) || mp->sink.attrs.silence_media) { if (CALL_ISSET(mp->call, SILENCE_MEDIA) || ML_ISSET(mp->media->monologue, SILENCE_MEDIA) || mp->sink.attrs.silence_media) {
if (h->source_pt.codec_def && h->source_pt.codec_def->silence_pattern.len) { if (h->source_pt.codec_def && h->source_pt.codec_def->silence_pattern.len) {


+ 9
- 0
daemon/media_player.c View File

@ -122,6 +122,9 @@ static void media_player_shutdown(struct media_player *mp) {
mp->ssrc_out->parent->seq_diff -= num; mp->ssrc_out->parent->seq_diff -= num;
} }
if (mp->opts.block_egress)
MEDIA_CLEAR(mp->media, BLOCK_EGRESS);
mp->media = NULL; mp->media = NULL;
media_player_coder_shutdown(&mp->coder); media_player_coder_shutdown(&mp->coder);
@ -942,6 +945,9 @@ static void media_player_play_start(struct media_player *mp, const rtp_payload_t
if (__ensure_codec_handler(mp, dst_pt)) if (__ensure_codec_handler(mp, dst_pt))
return; return;
if (mp->opts.block_egress)
MEDIA_SET(mp->media, BLOCK_EGRESS);
if (media_player_cache_entry_init(mp, dst_pt)) if (media_player_cache_entry_init(mp, dst_pt))
return; return;
@ -1284,6 +1290,9 @@ static void media_player_run(void *ptr) {
mp->next_run.tv_sec = 0; mp->next_run.tv_sec = 0;
if (mp->opts.block_egress)
MEDIA_CLEAR(mp->media, BLOCK_EGRESS);
codec_update_all_source_handlers(mp->media->monologue, NULL); codec_update_all_source_handlers(mp->media->monologue, NULL);
update_init_subscribers(mp->media->monologue, OP_OTHER); update_init_subscribers(mp->media->monologue, OP_OTHER);


+ 4
- 1
daemon/media_socket.c View File

@ -1423,8 +1423,11 @@ static const char *kernelize_one(struct rtpengine_target_info *reti, GQueue *out
bool non_forwarding = false; bool non_forwarding = false;
bool blackhole = false; bool blackhole = false;
if (sink_handler)
if (sink_handler) {
if (MEDIA_ISSET(sink->media, BLOCK_EGRESS))
return NULL;
sink_handler->kernel_output_idx = -1; sink_handler->kernel_output_idx = -1;
}
if (MEDIA_ISSET(media, BLACKHOLE)) if (MEDIA_ISSET(media, BLACKHOLE))
blackhole = true; blackhole = true;


+ 6
- 0
docs/ng_control_protocol.md View File

@ -840,6 +840,12 @@ Spaces in each string may be replaced by hyphens.
(or other DTMF security mechanism) for the relevant call party, identical (or other DTMF security mechanism) for the relevant call party, identical
to using a `block DTMF` message for the call party immediately after. to using a `block DTMF` message for the call party immediately after.
* `block egress`
Instructs *rtpengine* to suppress and block other egress media to a remote
client while media playback towards that client is ongoing. Useful for
`play media` messages.
* `block short` or `block short packets` * `block short` or `block short packets`
Enables blocking of short RTP packets for the applicable call participant. Enables blocking of short RTP packets for the applicable call participant.


+ 1
- 0
include/call.h View File

@ -189,6 +189,7 @@ enum {
#define MEDIA_FLAG_LEGACY_OSRTP SHARED_FLAG_LEGACY_OSRTP #define MEDIA_FLAG_LEGACY_OSRTP SHARED_FLAG_LEGACY_OSRTP
#define MEDIA_FLAG_LEGACY_OSRTP_REV SHARED_FLAG_LEGACY_OSRTP_REV #define MEDIA_FLAG_LEGACY_OSRTP_REV SHARED_FLAG_LEGACY_OSRTP_REV
#define MEDIA_FLAG_TRANSCODING 0x100000000LL #define MEDIA_FLAG_TRANSCODING 0x100000000LL
#define MEDIA_FLAG_BLOCK_EGRESS 0x200000000LL
/* struct call_monologue */ /* struct call_monologue */
#define ML_FLAG_REC_FORWARDING 0x00010000 #define ML_FLAG_REC_FORWARDING 0x00010000


+ 1
- 0
include/call_interfaces.h View File

@ -184,6 +184,7 @@ struct sdp_ng_flags {
inject_dtmf:1, inject_dtmf:1,
detect_dtmf:1, detect_dtmf:1,
block_dtmf:1, block_dtmf:1,
block_egress:1,
t38_decode:1, t38_decode:1,
t38_force:1, t38_force:1,
t38_stop:1, t38_stop:1,


+ 1
- 0
include/media_player.h View File

@ -20,6 +20,7 @@ struct media_player;
typedef struct { typedef struct {
long long start_pos; long long start_pos;
int repeat; int repeat;
unsigned int block_egress:1;
} media_player_opts_t; } media_player_opts_t;


+ 1
- 0
utils/rtpengine-ng-client View File

@ -52,6 +52,7 @@ my @flags = qw(
early-media early-media
block-short block-short
recording-vsc recording-vsc
block-egress
); );
my @string_opts = qw( my @string_opts = qw(


Loading…
Cancel
Save