MT#57977 integrate block/silence_media into bfield

Change-Id: Ic203e74d1a5ffd10ddfc2b4a3e6b4405be01979a
pull/1729/head
Richard Fuchs 2 years ago
parent 7fe1145b83
commit 1238d2f3c2

@ -3010,7 +3010,7 @@ const char *call_unblock_dtmf_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,
const char *lcase_verb,
size_t call_offset, size_t ml_offset, size_t attr_offset)
unsigned int call_flag, unsigned int ml_flag, size_t attr_offset)
{
AUTO_CLEANUP_NULL(struct call *call, call_unlock_release);
struct call_monologue *monologue;
@ -3089,18 +3089,18 @@ static const char *call_block_silence_media(bencode_item_t *input, bool on_off,
ilog(LOG_INFO, "%s directional media (tag '" STR_FORMAT_M "')",
ucase_verb,
STR_FMT_M(&monologue->tag));
G_STRUCT_MEMBER(bool, monologue, ml_offset) = on_off;
bf_set_clear(&monologue->ml_flags, ml_flag, on_off);
}
__monologue_unkernelize(monologue, "media silencing signalling event");
}
else {
G_STRUCT_MEMBER(bool, call, call_offset) = on_off;
bf_set_clear(&call->call_flags, call_flag, on_off);
if (!on_off) {
ilog(LOG_INFO, "%s media (entire call and participants)", ucase_verb);
if (flags.all == ALL_ALL) {
for (GList *l = call->monologues.head; l; l = l->next) {
monologue = l->data;
G_STRUCT_MEMBER(bool, monologue, ml_offset) = on_off;
bf_set_clear(&monologue->ml_flags, ml_flag, on_off);
}
}
}
@ -3112,23 +3112,23 @@ static const char *call_block_silence_media(bencode_item_t *input, bool on_off,
return NULL;
}
#define CALL_BLOCK_SILENCE_MEDIA(input, on_off, ucase_verb, lcase_verb, member_name) \
#define CALL_BLOCK_SILENCE_MEDIA(input, on_off, ucase_verb, lcase_verb, member_name, flag) \
call_block_silence_media(input, on_off, ucase_verb, lcase_verb, \
G_STRUCT_OFFSET(struct call, member_name), \
G_STRUCT_OFFSET(struct call_monologue, member_name), \
CALL_FLAG_ ## flag, \
ML_FLAG_ ## flag, \
G_STRUCT_OFFSET(struct sink_attrs, member_name))
const char *call_block_media_ng(bencode_item_t *input, bencode_item_t *output) {
return CALL_BLOCK_SILENCE_MEDIA(input, true, "Blocking", "blocking", block_media);
return CALL_BLOCK_SILENCE_MEDIA(input, true, "Blocking", "blocking", block_media, BLOCK_MEDIA);
}
const char *call_unblock_media_ng(bencode_item_t *input, bencode_item_t *output) {
return CALL_BLOCK_SILENCE_MEDIA(input, false, "Unblocking", "unblocking", block_media);
return CALL_BLOCK_SILENCE_MEDIA(input, false, "Unblocking", "unblocking", block_media, BLOCK_MEDIA);
}
const char *call_silence_media_ng(bencode_item_t *input, bencode_item_t *output) {
return CALL_BLOCK_SILENCE_MEDIA(input, true, "Silencing", "silencing", silence_media);
return CALL_BLOCK_SILENCE_MEDIA(input, true, "Silencing", "silencing", silence_media, SILENCE_MEDIA);
}
const char *call_unsilence_media_ng(bencode_item_t *input, bencode_item_t *output) {
return CALL_BLOCK_SILENCE_MEDIA(input, false, "Unsilencing", "unsilencing", silence_media);
return CALL_BLOCK_SILENCE_MEDIA(input, false, "Unsilencing", "unsilencing", silence_media, SILENCE_MEDIA);
}

@ -1643,9 +1643,9 @@ static void codec_add_raw_packet_dup(struct media_packet *mp, unsigned int clock
codec_add_raw_packet_common(mp, clockrate, p);
}
static bool handler_silence_block(struct codec_handler *h, struct media_packet *mp) {
if (mp->call->block_media || 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)
return false;
if (mp->call->silence_media || 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->silence_pattern.len == 1)
memset(mp->payload.s, h->source_pt.codec_def->silence_pattern.s[0],

@ -1562,7 +1562,7 @@ output:
redi->output.tos = call->tos;
// PT manipulations
bool silenced = call->silence_media || media->monologue->silence_media
bool silenced = CALL_ISSET(call, SILENCE_MEDIA) || ML_ISSET(media->monologue, SILENCE_MEDIA)
|| sink_handler->attrs.silence_media;
bool manipulate_pt = silenced || ML_ISSET(media->monologue, BLOCK_SHORT);
if (manipulate_pt && payload_types) {
@ -1666,7 +1666,7 @@ void kernelize(struct packet_stream *stream) {
goto no_kernel;
if (!stream->selected_sfd)
goto no_kernel;
if (media->monologue->block_media || call->block_media)
if (ML_ISSET(media->monologue, BLOCK_MEDIA) || CALL_ISSET(call, BLOCK_MEDIA))
goto no_kernel;
if (!stream->endpoint.address.family)
goto no_kernel;

@ -1506,8 +1506,6 @@ static int redis_tags(struct call *c, struct redis_list *tags, JsonReader *root_
redis_hash_get_time_t(&ml->deleted, rh, "deleted");
if (!redis_hash_get_int(&ii, rh, "block_dtmf"))
ml->block_dtmf = ii;
if (!redis_hash_get_int(&ii, rh, "block_media"))
ml->block_media = ii ? true : false;
if (!redis_hash_get_int(&ii, rh, "ml_flags"))
ml->ml_flags = ii;
@ -2030,8 +2028,6 @@ static void json_restore_call(struct redis *r, const str *callid, bool foreign)
sockaddr_parse_any_str(&c->created_from_addr, &id);
if (!redis_hash_get_int(&i, &call, "block_dtmf"))
c->block_dtmf = i;
if (!redis_hash_get_int(&i, &call, "block_media"))
c->block_media = i ? true : false;
if (!redis_hash_get_int(&i, &call, "call_flags"))
c->call_flags = i;
@ -2357,7 +2353,6 @@ char* redis_encode_json(struct call *c) {
JSON_SET_SIMPLE("redis_hosted_db","%u", c->redis_hosted_db);
JSON_SET_SIMPLE_STR("recording_metadata", &c->metadata);
JSON_SET_SIMPLE("block_dtmf","%i", c->block_dtmf);
JSON_SET_SIMPLE("block_media","%i", c->block_media);
JSON_SET_SIMPLE("call_flags","%i", c->call_flags);
if ((rec = c->recording))
@ -2473,7 +2468,6 @@ char* redis_encode_json(struct call *c) {
JSON_SET_SIMPLE("created", "%llu", (long long unsigned) ml->created);
JSON_SET_SIMPLE("deleted", "%llu", (long long unsigned) ml->deleted);
JSON_SET_SIMPLE("block_dtmf", "%i", ml->block_dtmf);
JSON_SET_SIMPLE("block_media", "%i", ml->block_media);
JSON_SET_SIMPLE("ml_flags","%u", ml->ml_flags);
if (ml->logical_intf)
JSON_SET_SIMPLE_STR("logical_intf", &ml->logical_intf->name);

@ -198,6 +198,8 @@ enum {
#define ML_FLAG_NO_RECORDING 0x00100000
#define ML_FLAG_TRANSCODING 0x00200000
#define ML_FLAG_BLOCK_SHORT 0x00400000
#define ML_FLAG_BLOCK_MEDIA 0x00800000
#define ML_FLAG_SILENCE_MEDIA 0x01000000
/* struct call */
#define CALL_FLAG_IPV4_OFFER 0x00010000
@ -212,6 +214,8 @@ enum {
#define CALL_FLAG_FOREIGN_MEDIA 0x02000000 // for calls taken over, tracks whether we have media
#define CALL_FLAG_DISABLE_JB 0x04000000
#define CALL_FLAG_DEBUG 0x08000000
#define CALL_FLAG_BLOCK_MEDIA 0x10000000
#define CALL_FLAG_SILENCE_MEDIA 0x20000000
/* access macros */
#define SP_ISSET(p, f) bf_isset(&(p)->sp_flags, SP_FLAG_ ## f)
@ -576,9 +580,6 @@ struct call_monologue {
unsigned int block_dtmf_trigger_end_ms;
unsigned int dtmf_delay;
bool block_media;
bool silence_media;
volatile unsigned int ml_flags;
};
@ -708,9 +709,6 @@ struct call {
int cpu_affinity;
enum block_dtmf_mode block_dtmf;
bool block_media;
bool silence_media;
unsigned int call_flags;
};

@ -95,7 +95,6 @@ $json_exp = {
],
'json' => {
'block_dtmf' => '0',
'block_media' => '0',
'call_flags' => 65536,
'created' => qr/^\d+$/,
'created_from' => qr//,
@ -309,7 +308,6 @@ $json_exp = {
],
'tag-0' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr/^\d+$/,
'deleted' => '0',
'logical_intf' => 'foo',
@ -318,7 +316,6 @@ $json_exp = {
},
'tag-1' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr/^\d+$/,
'deleted' => '0',
'logical_intf' => 'foo',
@ -356,7 +353,6 @@ $json_exp = {
],
'json' => {
'block_dtmf' => '0',
'block_media' => '0',
'call_flags' => 1376256,
'created' => qr/^\d+$/,
'created_from' => qr//,
@ -568,7 +564,6 @@ $json_exp = {
],
'tag-0' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr/^\d+$/,
'deleted' => '0',
'logical_intf' => 'foo',
@ -577,7 +572,6 @@ $json_exp = {
},
'tag-1' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr/^\d+$/,
'deleted' => '0',
'logical_intf' => 'foo',
@ -622,7 +616,6 @@ $json_exp = {
],
'json' => {
'block_dtmf' => '0',
'block_media' => '0',
'call_flags' => 65536,
'created' => qr/^\d+$/,
'created_from' => qr//,
@ -836,7 +829,6 @@ $json_exp = {
],
'tag-0' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr/^\d+$/,
'deleted' => '0',
'logical_intf' => 'foo',
@ -845,7 +837,6 @@ $json_exp = {
},
'tag-1' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr/^\d+$/,
'deleted' => '0',
'logical_intf' => 'foo',
@ -884,7 +875,6 @@ $json_exp = {
],
'json' => {
'block_dtmf' => '0',
'block_media' => '0',
'call_flags' => 1376256,
'created' => qr/^\d+$/,
'created_from' => qr//,
@ -1098,7 +1088,6 @@ $json_exp = {
],
'tag-0' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr/^\d+$/,
'deleted' => '0',
'logical_intf' => 'foo',
@ -1107,7 +1096,6 @@ $json_exp = {
},
'tag-1' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr/^\d+$/,
'deleted' => '0',
'logical_intf' => 'foo',
@ -1148,7 +1136,6 @@ $json_exp = {
'associated_tags-2' => [],
'json' => {
'block_dtmf' => '0',
'block_media' => '0',
'call_flags' => 1376256,
'created' => qr/^\d+$/,
'created_from' => qr//,
@ -1546,7 +1533,6 @@ $json_exp = {
],
'tag-0' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr/^\d+$/,
'deleted' => '0',
'logical_intf' => 'foo',
@ -1555,7 +1541,6 @@ $json_exp = {
},
'tag-1' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr/^\d+$/,
'deleted' => '0',
'logical_intf' => 'foo',
@ -1564,7 +1549,6 @@ $json_exp = {
},
'tag-2' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr/^\d+$/,
'deleted' => '0',
'logical_intf' => 'foo',
@ -1644,7 +1628,6 @@ $json_exp = {
'associated_tags-0' => [],
'json' => {
'block_dtmf' => '0',
'block_media' => '0',
'call_flags' => 0,
'created' => qr//,
'created_from' => qr//,
@ -1754,7 +1737,6 @@ $json_exp = {
'media-subscriptions-0' => [],
'tag-0' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr//,
'deleted' => '0',
'logical_intf' => 'foo',
@ -1789,7 +1771,6 @@ $json_exp = {
'associated_tags-1' => [],
'json' => {
'block_dtmf' => '0',
'block_media' => '0',
'call_flags' => 0,
'created' => qr//,
'created_from' => qr//,
@ -1995,7 +1976,6 @@ $json_exp = {
],
'tag-0' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr//,
'deleted' => '0',
'logical_intf' => 'foo',
@ -2004,7 +1984,6 @@ $json_exp = {
},
'tag-1' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr//,
'deleted' => '0',
'logical_intf' => 'foo',
@ -2031,7 +2010,6 @@ $json_exp = {
'associated_tags-1' => [],
'json' => {
'block_dtmf' => '0',
'block_media' => '0',
'call_flags' => 0,
'created' => qr//,
'created_from' => qr//,
@ -2237,7 +2215,6 @@ $json_exp = {
],
'tag-0' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr//,
'deleted' => '0',
'logical_intf' => 'foo',
@ -2246,7 +2223,6 @@ $json_exp = {
},
'tag-1' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr//,
'deleted' => '0',
'logical_intf' => 'foo',
@ -2272,7 +2248,6 @@ $json_exp = {
'associated_tags-2' => [],
'json' => {
'block_dtmf' => '0',
'block_media' => '0',
'call_flags' => 0,
'created' => qr//,
'created_from' => qr//,
@ -2572,7 +2547,6 @@ $json_exp = {
],
'tag-0' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr//,
'deleted' => '0',
'logical_intf' => 'foo',
@ -2581,7 +2555,6 @@ $json_exp = {
},
'tag-1' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr//,
'deleted' => '0',
'logical_intf' => 'foo',
@ -2590,7 +2563,6 @@ $json_exp = {
},
'tag-2' => {
'block_dtmf' => '0',
'block_media' => '0',
'created' => qr//,
'deleted' => '0',
'logical_intf' => 'foo',

@ -957,17 +957,17 @@ int main(void) {
packet_seq_exp(A, 8, PCMA_payload, 1000960, 212, 8, PCMA_payload, 5); // DTMF packets appear lost
packet_seq(A, 8, PCMA_payload, 1001120, 213, 8, PCMA_payload);
// media blocking
ml_A->block_media = 1;
ML_SET(ml_A, BLOCK_MEDIA);
packet_seq_exp(A, 8, PCMA_payload, 1001280, 214, -1, "", 0);
packet_seq_exp(A, 8, PCMA_payload, 1001440, 215, -1, "", 0);
ml_A->block_media = 0;
ML_CLEAR(ml_A, BLOCK_MEDIA);
packet_seq_exp(A, 8, PCMA_payload, 1001600, 216, 8, PCMA_payload, 3); // media packets appear lost
call.block_media = 1;
CALL_SET(&call, BLOCK_MEDIA);
packet_seq_exp(A, 8, PCMA_payload, 1001760, 217, -1, "", 0);
packet_seq_exp(A, 8, PCMA_payload, 1001920, 218, -1, "", 0);
call.block_media = 0;
CALL_CLEAR(&call, BLOCK_MEDIA);
packet_seq_exp(A, 8, PCMA_payload, 1002080, 219, 8, PCMA_payload, 3); // media packets appear lost
ml_B->block_media = 1;
ML_SET(ml_B, BLOCK_MEDIA);
packet_seq(A, 8, PCMA_payload, 1002240, 220, 8, PCMA_payload);
end();
@ -1022,17 +1022,17 @@ int main(void) {
packet_seq_exp(A, 8, PCMA_payload, 1000960, 212, 0, PCMU_payload, 5); // DTMF packets appear lost
packet_seq(A, 8, PCMA_payload, 1001120, 213, 0, PCMU_payload);
// media blocking
ml_A->block_media = 1;
ML_SET(ml_A, BLOCK_MEDIA);
packet_seq_exp(A, 8, PCMA_payload, 1001280, 214, -1, "", 0);
packet_seq_exp(A, 8, PCMA_payload, 1001440, 215, -1, "", 0);
ml_A->block_media = 0;
ML_CLEAR(ml_A, BLOCK_MEDIA);
packet_seq_exp(A, 8, PCMA_payload, 1001600, 214, 0, PCMU_payload, 1); // cheat with the seq here - 216 would get held by the jitter buffer
call.block_media = 1;
CALL_SET(&call, BLOCK_MEDIA);
packet_seq_exp(A, 8, PCMA_payload, 1001760, 215, -1, "", 0);
packet_seq_exp(A, 8, PCMA_payload, 1001920, 216, -1, "", 0);
call.block_media = 0;
CALL_CLEAR(&call, BLOCK_MEDIA);
packet_seq_exp(A, 8, PCMA_payload, 1002080, 215, 0, PCMU_payload, 1);
ml_B->block_media = 1;
ML_SET(ml_B, BLOCK_MEDIA);
packet_seq_exp(A, 8, PCMA_payload, 1002240, 216, 0, PCMU_payload, 1);
end();
@ -1086,17 +1086,17 @@ int main(void) {
packet_seq_exp(A, 0, PCMU_payload, 1000960, 212, 0, PCMU_payload, 5); // DTMF packets appear lost
packet_seq(A, 0, PCMU_payload, 1001120, 213, 0, PCMU_payload);
// media blocking
ml_A->block_media = 1;
ML_SET(ml_A, BLOCK_MEDIA);
packet_seq_exp(A, 0, PCMU_payload, 1001280, 214, -1, "", 0);
packet_seq_exp(A, 0, PCMU_payload, 1001440, 215, -1, "", 0);
ml_A->block_media = 0;
ML_CLEAR(ml_A, BLOCK_MEDIA);
packet_seq_exp(A, 0, PCMU_payload, 1001600, 216, 0, PCMU_payload, 3); // media packets appear lost
call.block_media = 1;
CALL_SET(&call, BLOCK_MEDIA);
packet_seq_exp(A, 0, PCMU_payload, 1001760, 217, -1, "", 0);
packet_seq_exp(A, 0, PCMU_payload, 1001920, 218, -1, "", 0);
call.block_media = 0;
CALL_CLEAR(&call, BLOCK_MEDIA);
packet_seq_exp(A, 0, PCMU_payload, 1002080, 219, 0, PCMU_payload, 3); // media packets appear lost
ml_B->block_media = 1;
ML_SET(ml_B, BLOCK_MEDIA);
packet_seq(A, 0, PCMU_payload, 1002240, 220, 0, PCMU_payload);
end();
@ -1585,32 +1585,32 @@ int main(void) {
packet_seq(B, 8, PCMA_payload, 0, 0, 8, PCMA_payload);
packet_seq(A, 8, PCMA_payload, 160, 1, 8, PCMA_payload);
packet_seq(B, 8, PCMA_payload, 160, 1, 8, PCMA_payload);
call.silence_media = 1;
CALL_SET(&call, SILENCE_MEDIA);
packet_seq(A, 8, PCMA_payload, 320, 2, 8, PCMA_silence);
packet_seq(B, 8, PCMA_payload, 320, 2, 8, PCMA_silence);
packet_seq(A, 8, PCMA_payload, 480, 3, 8, PCMA_silence);
packet_seq(B, 8, PCMA_payload, 480, 3, 8, PCMA_silence);
call.silence_media = 0;
CALL_CLEAR(&call, SILENCE_MEDIA);
packet_seq(A, 8, PCMA_payload, 640, 4, 8, PCMA_payload);
packet_seq(B, 8, PCMA_payload, 640, 4, 8, PCMA_payload);
packet_seq(A, 8, PCMA_payload, 800, 5, 8, PCMA_payload);
packet_seq(B, 8, PCMA_payload, 800, 5, 8, PCMA_payload);
ml_A->silence_media = 1;
ML_SET(ml_A, SILENCE_MEDIA);
packet_seq(A, 8, PCMA_payload, 960, 6, 8, PCMA_silence);
packet_seq(B, 8, PCMA_payload, 960, 6, 8, PCMA_payload);
packet_seq(A, 8, PCMA_payload, 1120, 7, 8, PCMA_silence);
packet_seq(B, 8, PCMA_payload, 1120, 7, 8, PCMA_payload);
ml_A->silence_media = 0;
ML_CLEAR(ml_A, SILENCE_MEDIA);
packet_seq(A, 8, PCMA_payload, 1280, 8, 8, PCMA_payload);
packet_seq(B, 8, PCMA_payload, 1280, 8, 8, PCMA_payload);
packet_seq(A, 8, PCMA_payload, 1440, 9, 8, PCMA_payload);
packet_seq(B, 8, PCMA_payload, 1440, 9, 8, PCMA_payload);
ml_B->silence_media = 1;
ML_SET(ml_B, SILENCE_MEDIA);
packet_seq(A, 8, PCMA_payload, 1600, 10, 8, PCMA_payload);
packet_seq(B, 8, PCMA_payload, 1600, 10, 8, PCMA_silence);
packet_seq(A, 8, PCMA_payload, 1760, 11, 8, PCMA_payload);
packet_seq(B, 8, PCMA_payload, 1760, 11, 8, PCMA_silence);
ml_B->silence_media = 0;
ML_CLEAR(ml_B, SILENCE_MEDIA);
packet_seq(A, 8, PCMA_payload, 1920, 12, 8, PCMA_payload);
packet_seq(B, 8, PCMA_payload, 1920, 12, 8, PCMA_payload);
packet_seq(A, 8, PCMA_payload, 2080, 13, 8, PCMA_payload);
@ -1631,32 +1631,32 @@ int main(void) {
packet_seq(B, 0, PCMU_payload, 0, 0, 0, PCMU_payload);
packet_seq(A, 0, PCMU_payload, 160, 1, 0, PCMU_payload);
packet_seq(B, 0, PCMU_payload, 160, 1, 0, PCMU_payload);
call.silence_media = 1;
CALL_SET(&call, SILENCE_MEDIA);
packet_seq(A, 0, PCMU_payload, 320, 2, 0, PCMU_silence);
packet_seq(B, 0, PCMU_payload, 320, 2, 0, PCMU_silence);
packet_seq(A, 0, PCMU_payload, 480, 3, 0, PCMU_silence);
packet_seq(B, 0, PCMU_payload, 480, 3, 0, PCMU_silence);
call.silence_media = 0;
CALL_CLEAR(&call, SILENCE_MEDIA);
packet_seq(A, 0, PCMU_payload, 640, 4, 0, PCMU_payload);
packet_seq(B, 0, PCMU_payload, 640, 4, 0, PCMU_payload);
packet_seq(A, 0, PCMU_payload, 800, 5, 0, PCMU_payload);
packet_seq(B, 0, PCMU_payload, 800, 5, 0, PCMU_payload);
ml_A->silence_media = 1;
ML_SET(ml_A, SILENCE_MEDIA);
packet_seq(A, 0, PCMU_payload, 960, 6, 0, PCMU_silence);
packet_seq(B, 0, PCMU_payload, 960, 6, 0, PCMU_payload);
packet_seq(A, 0, PCMU_payload, 1120, 7, 0, PCMU_silence);
packet_seq(B, 0, PCMU_payload, 1120, 7, 0, PCMU_payload);
ml_A->silence_media = 0;
ML_CLEAR(ml_A, SILENCE_MEDIA);
packet_seq(A, 0, PCMU_payload, 1280, 8, 0, PCMU_payload);
packet_seq(B, 0, PCMU_payload, 1280, 8, 0, PCMU_payload);
packet_seq(A, 0, PCMU_payload, 1440, 9, 0, PCMU_payload);
packet_seq(B, 0, PCMU_payload, 1440, 9, 0, PCMU_payload);
ml_B->silence_media = 1;
ML_SET(ml_B, SILENCE_MEDIA);
packet_seq(A, 0, PCMU_payload, 1600, 10, 0, PCMU_payload);
packet_seq(B, 0, PCMU_payload, 1600, 10, 0, PCMU_silence);
packet_seq(A, 0, PCMU_payload, 1760, 11, 0, PCMU_payload);
packet_seq(B, 0, PCMU_payload, 1760, 11, 0, PCMU_silence);
ml_B->silence_media = 0;
ML_CLEAR(ml_B, SILENCE_MEDIA);
packet_seq(A, 0, PCMU_payload, 1920, 12, 0, PCMU_payload);
packet_seq(B, 0, PCMU_payload, 1920, 12, 0, PCMU_payload);
packet_seq(A, 0, PCMU_payload, 2080, 13, 0, PCMU_payload);

Loading…
Cancel
Save