|
|
|
@ -40,8 +40,8 @@ static struct call call; |
|
|
|
static struct sdp_ng_flags flags; |
|
|
|
static struct call_media *media_A; |
|
|
|
static struct call_media *media_B; |
|
|
|
struct call_monologue ml_A; |
|
|
|
struct call_monologue ml_B; |
|
|
|
struct call_monologue *ml_A; |
|
|
|
struct call_monologue *ml_B; |
|
|
|
struct stream_params rtp_types_sp; |
|
|
|
|
|
|
|
#define start() __start(__FILE__, __LINE__) |
|
|
|
@ -59,8 +59,7 @@ static void __cleanup(void) { |
|
|
|
g_queue_clear_full(&flags.codec_accept, free); |
|
|
|
g_queue_clear_full(&flags.codec_consume, free); |
|
|
|
g_queue_clear_full(&flags.codec_mask, free); |
|
|
|
free_ssrc_hash(&ml_A.ssrc_hash); |
|
|
|
free_ssrc_hash(&ml_B.ssrc_hash); |
|
|
|
g_queue_clear(&call.monologues); |
|
|
|
|
|
|
|
codec_store_cleanup(&rtp_types_sp.codecs); |
|
|
|
memset(&flags, 0, sizeof(flags)); |
|
|
|
@ -71,8 +70,6 @@ static void __init(void) { |
|
|
|
rtp_types_sp.rtp_endpoint.port = 9; |
|
|
|
flags.codec_except = g_hash_table_new_full(str_case_hash, str_case_equal, free, NULL); |
|
|
|
flags.codec_set = g_hash_table_new_full(str_case_hash, str_case_equal, free, free); |
|
|
|
ml_A.ssrc_hash = create_ssrc_hash_call(); |
|
|
|
ml_B.ssrc_hash = create_ssrc_hash_call(); |
|
|
|
} |
|
|
|
static struct packet_stream *ps_new(struct call *c) { |
|
|
|
struct packet_stream *ps = malloc(sizeof(*ps)); |
|
|
|
@ -92,17 +89,17 @@ static void __start(const char *file, int line) { |
|
|
|
call.tags = g_hash_table_new(g_str_hash, g_str_equal); |
|
|
|
str_init(&call.callid, "test-call"); |
|
|
|
bencode_buffer_init(&call.buffer); |
|
|
|
ml_A = __monologue_create(&call); |
|
|
|
ml_B = __monologue_create(&call); |
|
|
|
media_A = call_media_new(&call); // originator |
|
|
|
media_B = call_media_new(&call); // output destination |
|
|
|
g_queue_push_tail(&media_A->streams, ps_new(&call)); |
|
|
|
g_queue_push_tail(&media_B->streams, ps_new(&call)); |
|
|
|
ZERO(ml_A); |
|
|
|
ZERO(ml_B); |
|
|
|
str_init(&ml_A.tag, "tag_A"); |
|
|
|
media_A->monologue = &ml_A; |
|
|
|
str_init(&ml_A->tag, "tag_A"); |
|
|
|
media_A->monologue = ml_A; |
|
|
|
media_A->protocol = &transport_protocols[PROTO_RTP_AVP]; |
|
|
|
str_init(&ml_B.tag, "tag_B"); |
|
|
|
media_B->monologue = &ml_B; |
|
|
|
str_init(&ml_B->tag, "tag_B"); |
|
|
|
media_B->monologue = ml_B; |
|
|
|
media_B->protocol = &transport_protocols[PROTO_RTP_AVP]; |
|
|
|
__init(); |
|
|
|
} |
|
|
|
@ -378,6 +375,10 @@ static void end(void) { |
|
|
|
bencode_buffer_free(&call.buffer); |
|
|
|
g_hash_table_destroy(call.tags); |
|
|
|
g_queue_clear(&call.medias); |
|
|
|
if (ml_A) |
|
|
|
__monologue_free(ml_A); |
|
|
|
if (ml_B) |
|
|
|
__monologue_free(ml_B); |
|
|
|
__cleanup(); |
|
|
|
printf("\n"); |
|
|
|
} |
|
|
|
@ -957,17 +958,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_A->block_media = 1; |
|
|
|
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_A->block_media = 0; |
|
|
|
packet_seq_exp(A, 8, PCMA_payload, 1001600, 216, 8, PCMA_payload, 3); // media packets appear lost |
|
|
|
call.block_media = 1; |
|
|
|
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; |
|
|
|
packet_seq_exp(A, 8, PCMA_payload, 1002080, 219, 8, PCMA_payload, 3); // media packets appear lost |
|
|
|
ml_B.block_media = 1; |
|
|
|
ml_B->block_media = 1; |
|
|
|
packet_seq(A, 8, PCMA_payload, 1002240, 220, 8, PCMA_payload); |
|
|
|
end(); |
|
|
|
|
|
|
|
@ -1022,17 +1023,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_A->block_media = 1; |
|
|
|
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_A->block_media = 0; |
|
|
|
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; |
|
|
|
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; |
|
|
|
packet_seq_exp(A, 8, PCMA_payload, 1002080, 215, 0, PCMU_payload, 1); |
|
|
|
ml_B.block_media = 1; |
|
|
|
ml_B->block_media = 1; |
|
|
|
packet_seq_exp(A, 8, PCMA_payload, 1002240, 216, 0, PCMU_payload, 1); |
|
|
|
end(); |
|
|
|
|
|
|
|
@ -1086,17 +1087,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_A->block_media = 1; |
|
|
|
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_A->block_media = 0; |
|
|
|
packet_seq_exp(A, 0, PCMU_payload, 1001600, 216, 0, PCMU_payload, 3); // media packets appear lost |
|
|
|
call.block_media = 1; |
|
|
|
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; |
|
|
|
packet_seq_exp(A, 0, PCMU_payload, 1002080, 219, 0, PCMU_payload, 3); // media packets appear lost |
|
|
|
ml_B.block_media = 1; |
|
|
|
ml_B->block_media = 1; |
|
|
|
packet_seq(A, 0, PCMU_payload, 1002240, 220, 0, PCMU_payload); |
|
|
|
end(); |
|
|
|
|
|
|
|
@ -1595,22 +1596,22 @@ int main(void) { |
|
|
|
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_A->silence_media = 1; |
|
|
|
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_A->silence_media = 0; |
|
|
|
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_B->silence_media = 1; |
|
|
|
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_B->silence_media = 0; |
|
|
|
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); |
|
|
|
@ -1641,22 +1642,22 @@ int main(void) { |
|
|
|
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_A->silence_media = 1; |
|
|
|
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_A->silence_media = 0; |
|
|
|
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_B->silence_media = 1; |
|
|
|
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_B->silence_media = 0; |
|
|
|
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); |
|
|
|
|