diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index dfb56e434..7d1488cf7 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -2973,7 +2973,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; @@ -3052,18 +3052,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); } } } @@ -3075,23 +3075,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); } diff --git a/daemon/codec.c b/daemon/codec.c index 7ffe2f52c..f2c0f1744 100644 --- a/daemon/codec.c +++ b/daemon/codec.c @@ -1630,9 +1630,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], diff --git a/daemon/media_socket.c b/daemon/media_socket.c index ecd27dfaa..8f187229e 100644 --- a/daemon/media_socket.c +++ b/daemon/media_socket.c @@ -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; diff --git a/daemon/redis.c b/daemon/redis.c index e0e68bd9a..d95423ada 100644 --- a/daemon/redis.c +++ b/daemon/redis.c @@ -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; @@ -2041,8 +2039,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; @@ -2368,7 +2364,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)) @@ -2484,7 +2479,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); diff --git a/include/call.h b/include/call.h index 6803edeb7..315975f07 100644 --- a/include/call.h +++ b/include/call.h @@ -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) @@ -563,9 +567,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; }; @@ -695,9 +696,6 @@ struct call { int cpu_affinity; enum block_dtmf_mode block_dtmf; - bool block_media; - bool silence_media; - unsigned int call_flags; }; diff --git a/t/auto-daemon-tests-redis.pl b/t/auto-daemon-tests-redis.pl index 95ec6724a..b4344fa53 100755 --- a/t/auto-daemon-tests-redis.pl +++ b/t/auto-daemon-tests-redis.pl @@ -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//, @@ -1547,7 +1534,6 @@ $json_exp = { ], 'tag-0' => { 'block_dtmf' => '0', - 'block_media' => '0', 'created' => qr/^\d+$/, 'deleted' => '0', 'logical_intf' => 'foo', @@ -1556,7 +1542,6 @@ $json_exp = { }, 'tag-1' => { 'block_dtmf' => '0', - 'block_media' => '0', 'created' => qr/^\d+$/, 'deleted' => '0', 'logical_intf' => 'foo', @@ -1565,7 +1550,6 @@ $json_exp = { }, 'tag-2' => { 'block_dtmf' => '0', - 'block_media' => '0', 'created' => qr/^\d+$/, 'deleted' => '0', 'logical_intf' => 'foo', @@ -1645,7 +1629,6 @@ $json_exp = { 'associated_tags-0' => [], 'json' => { 'block_dtmf' => '0', - 'block_media' => '0', 'call_flags' => 0, 'created' => qr//, 'created_from' => qr//, @@ -1755,7 +1738,6 @@ $json_exp = { 'subscriptions-0' => [], 'tag-0' => { 'block_dtmf' => '0', - 'block_media' => '0', 'created' => qr//, 'deleted' => '0', 'logical_intf' => 'foo', @@ -1790,7 +1772,6 @@ $json_exp = { 'associated_tags-1' => [], 'json' => { 'block_dtmf' => '0', - 'block_media' => '0', 'call_flags' => 0, 'created' => qr//, 'created_from' => qr//, @@ -1996,7 +1977,6 @@ $json_exp = { ], 'tag-0' => { 'block_dtmf' => '0', - 'block_media' => '0', 'created' => qr//, 'deleted' => '0', 'logical_intf' => 'foo', @@ -2005,7 +1985,6 @@ $json_exp = { }, 'tag-1' => { 'block_dtmf' => '0', - 'block_media' => '0', 'created' => qr//, 'deleted' => '0', 'logical_intf' => 'foo', @@ -2032,7 +2011,6 @@ $json_exp = { 'associated_tags-1' => [], 'json' => { 'block_dtmf' => '0', - 'block_media' => '0', 'call_flags' => 0, 'created' => qr//, 'created_from' => qr//, @@ -2238,7 +2216,6 @@ $json_exp = { ], 'tag-0' => { 'block_dtmf' => '0', - 'block_media' => '0', 'created' => qr//, 'deleted' => '0', 'logical_intf' => 'foo', @@ -2247,7 +2224,6 @@ $json_exp = { }, 'tag-1' => { 'block_dtmf' => '0', - 'block_media' => '0', 'created' => qr//, 'deleted' => '0', 'logical_intf' => 'foo', @@ -2273,7 +2249,6 @@ $json_exp = { 'associated_tags-2' => [], 'json' => { 'block_dtmf' => '0', - 'block_media' => '0', 'call_flags' => 0, 'created' => qr//, 'created_from' => qr//, @@ -2573,7 +2548,6 @@ $json_exp = { ], 'tag-0' => { 'block_dtmf' => '0', - 'block_media' => '0', 'created' => qr//, 'deleted' => '0', 'logical_intf' => 'foo', @@ -2582,7 +2556,6 @@ $json_exp = { }, 'tag-1' => { 'block_dtmf' => '0', - 'block_media' => '0', 'created' => qr//, 'deleted' => '0', 'logical_intf' => 'foo', @@ -2591,7 +2564,6 @@ $json_exp = { }, 'tag-2' => { 'block_dtmf' => '0', - 'block_media' => '0', 'created' => qr//, 'deleted' => '0', 'logical_intf' => 'foo', diff --git a/t/test-transcode.c b/t/test-transcode.c index e70bc37ae..2a534a76a 100644 --- a/t/test-transcode.c +++ b/t/test-transcode.c @@ -959,17 +959,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(); @@ -1024,17 +1024,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(); @@ -1088,17 +1088,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(); @@ -1587,32 +1587,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); @@ -1633,32 +1633,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);