|
|
|
@ -372,6 +372,7 @@ static void dtmf(const char *s) {
|
|
|
|
|
#define PCMU_payload "\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00"
|
|
|
|
|
#define PCMA_payload "\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a\x2b\x2a"
|
|
|
|
|
#define PCMA_silence "\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5"
|
|
|
|
|
#define PCMU_silence "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
|
|
|
|
|
#define G722_payload "\x23\x84\x20\x84\x20\x84\x04\x84\x04\x04\x84\x04\x84\x04\x84\x05\x85\x46\x87\x48\xc8\x48\x88\x48\xc8\x49\x8a\x4b\xcc\x4c\x8c\x4c\xcc\x4c\x8c\x4d\xce\x50\xcf\x51\x90\x50\xcf\x12\xd1\x52\xd2\x54\x91\x52\xd2\x54\x92\x54\xd3\x56\x93\xd6\x94\xd4\x93\xd7\xd5\x55\x94\x55\xd5\x55\xd4\x56\xd5\x17\xd7\x5a\x95\xd7\x97\xd9\xd4\x16\x58\x57\x98\xd5\xd7\x5b\x96\xda\xd6\x1b\x57\x5a\xd6\x1a\x57\x5b\x98\xd6\xd8\x56\x98\xd7\xd9\x5a\x95\xdb\xd6\x1c\x52\x5e\xd7\x5c\x93\xdf\x99\xd5\xd7\x5f\xd9\x14\x56\x7f\x92\xda\xd9\x5c\x92\xdd\xd7\x5d\x92\xff\xd6\x5a\x96\xdc\xd5\x18\x56\x7e\xd2\x5e\x96\xde\x94\xd8\xd8\x58\xd3\x79\x93\xfb\x90\xdc\xd6\x5b\xdd\x58\x96\xff"
|
|
|
|
|
#define AMR_WB_payload "\xf0\x1c\xf3\x06\x08\x10\x77\x32\x23\x20\xd3\x50\x62\x12\xc7\x7c\xe2\xea\x84\x0e\x6e\xf4\x4d\xe4\x7f\xc9\x4c\xcc\x58\x5d\xed\xcc\x5d\x7c\x6c\x14\x7d\xc0" // octet aligned
|
|
|
|
|
#define AMR_WB_payload_noe "\xf1\xfc\xc1\x82\x04\x1d\xcc\x88\xc8\x34\xd4\x18\x84\xb1\xdf\x38\xba\xa1\x03\x9b\xbd\x13\x79\x1f\xf2\x53\x33\x16\x17\x7b\x73\x17\x5f\x1b\x05\x1f\x70" // bandwidth efficient
|
|
|
|
@ -1575,6 +1576,98 @@ int main(void) {
|
|
|
|
|
expect(B, "0/PCMU/8000 8/PCMA/8000 9/G722/8000");
|
|
|
|
|
end();
|
|
|
|
|
|
|
|
|
|
// media silencing PCMA
|
|
|
|
|
start();
|
|
|
|
|
sdp_pt(8, PCMA, 8000);
|
|
|
|
|
offer();
|
|
|
|
|
expect(A, "8/PCMA/8000");
|
|
|
|
|
expect(B, "8/PCMA/8000");
|
|
|
|
|
sdp_pt(8, PCMA, 8000);
|
|
|
|
|
answer();
|
|
|
|
|
expect(A, "8/PCMA/8000");
|
|
|
|
|
expect(B, "8/PCMA/8000");
|
|
|
|
|
packet_seq(A, 8, PCMA_payload, 0, 0, 8, PCMA_payload);
|
|
|
|
|
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;
|
|
|
|
|
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;
|
|
|
|
|
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;
|
|
|
|
|
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;
|
|
|
|
|
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;
|
|
|
|
|
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;
|
|
|
|
|
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);
|
|
|
|
|
packet_seq(B, 8, PCMA_payload, 2080, 13, 8, PCMA_payload);
|
|
|
|
|
end();
|
|
|
|
|
|
|
|
|
|
// media silencing PCMU
|
|
|
|
|
start();
|
|
|
|
|
sdp_pt(0, PCMU, 8000);
|
|
|
|
|
offer();
|
|
|
|
|
expect(A, "0/PCMU/8000");
|
|
|
|
|
expect(B, "0/PCMU/8000");
|
|
|
|
|
sdp_pt(0, PCMU, 8000);
|
|
|
|
|
answer();
|
|
|
|
|
expect(A, "0/PCMU/8000");
|
|
|
|
|
expect(B, "0/PCMU/8000");
|
|
|
|
|
packet_seq(A, 0, PCMU_payload, 0, 0, 0, PCMU_payload);
|
|
|
|
|
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;
|
|
|
|
|
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;
|
|
|
|
|
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;
|
|
|
|
|
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;
|
|
|
|
|
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;
|
|
|
|
|
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;
|
|
|
|
|
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);
|
|
|
|
|
packet_seq(B, 0, PCMU_payload, 2080, 13, 0, PCMU_payload);
|
|
|
|
|
end();
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|