From c8c0b40e1bb0452340654a6042a1bfd3f506fa06 Mon Sep 17 00:00:00 2001 From: Philipp Maier Date: Thu, 7 Mar 2019 10:48:45 +0100 Subject: MGCP_Test: allow setting of fmtp parameters When creating an RTP flow, there is currently no way to set SDP fmtp parameters. Lets add a template and a parameter in order to be able to set those parameters. Change-Id: Ic1840d5023cb3888a17980f4ed08c19175864896 Related: SYS#4470 --- library/MGCP_Templates.ttcn | 5 +++++ mgw/MGCP_Test.ttcn | 24 +++++++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/library/MGCP_Templates.ttcn b/library/MGCP_Templates.ttcn index afdc33d6..f7205538 100644 --- a/library/MGCP_Templates.ttcn +++ b/library/MGCP_Templates.ttcn @@ -280,6 +280,11 @@ module MGCP_Templates { attr_value := int2str(p) } } + template SDP_attribute ts_SDP_fmtp(integer fmt, charstring val) := { + fmtp := { + attr_value := int2str(fmt) & " " & val + } + } function f_mgcp_extract_par(MgcpMessage msg, MgcpInfoCode code) return charstring { var MgcpParameterList pars; diff --git a/mgw/MGCP_Test.ttcn b/mgw/MGCP_Test.ttcn index 4969a3f6..a0a836b5 100644 --- a/mgw/MGCP_Test.ttcn +++ b/mgw/MGCP_Test.ttcn @@ -268,7 +268,8 @@ module MGCP_Test { uint7_t pt, charstring codec, MgcpConnectionId mgcp_conn_id optional, - RtpemConfig rtp_cfg optional + RtpemConfig rtp_cfg optional, + charstring fmtp optional } /* Create an RTP flow (bidirectional, or receive-only) */ @@ -277,6 +278,12 @@ module MGCP_Test { runs on dummy_CT { var template MgcpCommand cmd; var MgcpResponse resp; + var SDP_attribute_list attributes; + + attributes := { valueof(ts_SDP_rtpmap(flow.pt, flow.codec)), valueof(ts_SDP_ptime(20)) }; + if (isvalue(flow.fmtp)) { + attributes := attributes & { valueof(ts_SDP_fmtp(flow.pt, flow.fmtp)) }; + } /* bind local RTP emulation socket */ f_rtpem_bind(pt, flow.em.hostname, flow.em.portnr); @@ -298,9 +305,8 @@ module MGCP_Test { cmd := ts_CRCX(get_next_trans_id(), ep, mode, call_id); cmd.sdp := ts_SDP(flow.em.hostname, flow.em.hostname, "23", "42", - flow.em.portnr, { int2str(flow.pt) }, - { valueof(ts_SDP_rtpmap(flow.pt, flow.codec)), - valueof(ts_SDP_ptime(20)) }); + flow.em.portnr, { int2str(flow.pt) }, attributes); + resp := mgcp_transceive_mgw(cmd, tr_CRCX_ACK); flow.mgcp_conn_id := extract_conn_id(resp); /* extract port number from response */ @@ -329,6 +335,12 @@ module MGCP_Test { runs on dummy_CT { var template MgcpCommand cmd; var MgcpResponse resp; + var SDP_attribute_list attributes; + + attributes := { valueof(ts_SDP_rtpmap(flow.pt, flow.codec)), valueof(ts_SDP_ptime(20)) }; + if (isvalue(flow.fmtp)) { + attributes := attributes & { valueof(ts_SDP_fmtp(flow.pt, flow.fmtp)) }; + } /* rebind local RTP emulation socket to the new address */ f_rtpem_bind(pt, flow.em.hostname, flow.em.portnr); @@ -345,9 +357,7 @@ module MGCP_Test { /* connect MGW side RTP socket to the emulation-side RTP socket using SDP */ cmd := ts_MDCX(get_next_trans_id(), ep, mode, call_id, flow.mgcp_conn_id); cmd.sdp := ts_SDP(flow.em.hostname, flow.em.hostname, "23", "42", - flow.em.portnr, { int2str(flow.pt) }, - { valueof(ts_SDP_rtpmap(flow.pt, flow.codec)), - valueof(ts_SDP_ptime(20)) }); + flow.em.portnr, { int2str(flow.pt) }, attributes); resp := mgcp_transceive_mgw(cmd, tr_MDCX_ACK); /* extract MGW-side port number from response. (usually this -- cgit v1.2.3