TT#136957 don't remove DTMF PT from SDP with DTMF-delay active

Change-Id: Ia5c265575464066e8fdd587079bc843e838c5c62
pull/1487/head
Richard Fuchs 3 years ago
parent d055a5da59
commit 4deff72c8e

@ -299,6 +299,7 @@ static void __handler_shutdown(struct codec_handler *handler) {
handler->transcoder = 0;
handler->output_handler = handler; // reset to default
handler->dtmf_payload_type = -1;
handler->real_dtmf_payload_type = -1;
handler->cn_payload_type = -1;
handler->pcm_dtmf_detect = 0;
handler->passthrough = 0;
@ -336,6 +337,7 @@ static struct codec_handler *__handler_new(const struct rtp_payload_type *pt, st
handler->dest_pt.payload_type = -1;
handler->output_handler = handler; // default
handler->dtmf_payload_type = -1;
handler->real_dtmf_payload_type = -1;
handler->cn_payload_type = -1;
handler->packet_encoded = packet_encoded_rtp;
handler->packet_decoded = packet_decoded_fifo;
@ -1908,6 +1910,8 @@ static int codec_add_dtmf_packet(struct codec_ssrc_handler *ch, struct codec_ssr
ch->last_dtmf_event_ts = duration;
}
payload_type = h->dtmf_payload_type;
if (payload_type == -1)
payload_type = h->real_dtmf_payload_type;
skip:
obj_put(&output_ch->h);
@ -4754,10 +4758,13 @@ void codec_store_answer(struct codec_store *dst, struct codec_store *src, struct
else
g_queue_push_tail(&supp_codecs, rtp_payload_type_dup(pt));
}
if (h->dtmf_payload_type != -1) {
pt = g_hash_table_lookup(orig_dst.codecs, GINT_TO_POINTER(h->dtmf_payload_type));
int dtmf_payload_type = h->dtmf_payload_type;
if (dtmf_payload_type == -1)
dtmf_payload_type = h->real_dtmf_payload_type;
if (dtmf_payload_type != -1) {
pt = g_hash_table_lookup(orig_dst.codecs, GINT_TO_POINTER(dtmf_payload_type));
if (!pt)
ilogs(codec, LOG_DEBUG, "DTMF payload type %i is missing", h->dtmf_payload_type);
ilogs(codec, LOG_DEBUG, "DTMF payload type %i is missing", dtmf_payload_type);
else
g_queue_push_tail(&supp_codecs, rtp_payload_type_dup(pt));
}

@ -3156,5 +3156,104 @@ Time::HiRes::usleep(18000); $seq++;
new_call;
offer('RFC PT after block', { }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio 4000 RTP/AVP 0 8 101
c=IN IP4 198.51.100.1
a=sendrecv
a=rtpmap:101 telephone-event/8000
----------------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio PORT RTP/AVP 0 8 101
c=IN IP4 203.0.113.1
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=sendrecv
a=rtcp:PORT
SDP
answer('RFC PT after block', { }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio 5000 RTP/AVP 8 101
c=IN IP4 198.51.100.1
a=sendrecv
a=rtpmap:101 telephone-event/8000
----------------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio PORT RTP/AVP 8 101
c=IN IP4 203.0.113.1
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=sendrecv
a=rtcp:PORT
SDP
answer('RFC PT after block', { }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio 5000 RTP/AVP 8 101
c=IN IP4 198.51.100.1
a=sendrecv
a=rtpmap:101 telephone-event/8000
----------------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio PORT RTP/AVP 8 101
c=IN IP4 203.0.113.1
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=sendrecv
a=rtcp:PORT
SDP
rtpe_req('block DTMF', 'DTMF block',
{ 'from-tag' => tt(), 'trigger' => '##', 'trigger-end' => '#', 'DTMF-security-trigger' => 'silence',
'delay-buffer' => 1, 'DTMF-delay' => 2000 });
answer('RFC PT after block', { }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio 5000 RTP/AVP 8 101
c=IN IP4 198.51.100.1
a=sendrecv
a=rtpmap:101 telephone-event/8000
----------------------------------
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio PORT RTP/AVP 8 101
c=IN IP4 203.0.113.1
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=sendrecv
a=rtcp:PORT
SDP
done_testing();
#done_testing;NGCP::Rtpengine::AutoTest::terminate('f00');exit;

Loading…
Cancel
Save