From befd3aaca496b74ea4e00a29ca9a3d6bc64f1d49 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Mon, 21 Sep 2020 10:54:42 +0200 Subject: mgw: Introduce test TC_crcx_osmo_ign Related: SYS#5063 Change-Id: I79415c385e89fe859854430bb20940f078fccea0 --- library/MGCP_Templates.ttcn | 6 ++++++ library/MGCP_Types.ttcn | 4 ++-- mgw/MGCP_Test.ttcn | 30 ++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/library/MGCP_Templates.ttcn b/library/MGCP_Templates.ttcn index 79d9670c..917ef892 100644 --- a/library/MGCP_Templates.ttcn +++ b/library/MGCP_Templates.ttcn @@ -55,6 +55,12 @@ module MGCP_Templates { val := f_mgcp_osmux_cid_encode(osmux_cid) }; + /* Osmocom extension: X-Osmux: {*,%u} */ + template MgcpParameter t_MgcpParOsmoIGN(template charstring val) := { + code := "X-OSMO-IGN", + val := val + }; + /* osmo-bsc_mgcp implements L/C/M/X only, osmo-mgw adds 'I' */ /* SDP: osmo-bsc_mgcp implements Tx of v,o,s,c,t,m,a */ diff --git a/library/MGCP_Types.ttcn b/library/MGCP_Types.ttcn index b56734cf..01d4d3af 100644 --- a/library/MGCP_Types.ttcn +++ b/library/MGCP_Types.ttcn @@ -30,8 +30,8 @@ module MGCP_Types { type charstring MgcpInfoCode ("B", "C", "I", "N", "X", "L", "M", "R", "S", "D", "O", "P", "E", "Z", "Q", "T", "RC", "LC", "A", "ES", "RM", "RD", "PL", - "MD", "X-OSMO-CP", "X-OSMUX") with { - variant "TEXT_CODING(,convert=upper_case,'([BCINXLMRSDOPEZQTA])|(RC)|(LC)|(ES)|(RM)|(RD)|(PL)|(MD)|(X-OSMO-CP)|(X-OSMUX)',case_insensitive)" + "MD", "X-OSMO-CP", "X-OSMO-IGN", "X-OSMUX") with { + variant "TEXT_CODING(,convert=upper_case,'([BCINXLMRSDOPEZQTA])|(RC)|(LC)|(ES)|(RM)|(RD)|(PL)|(MD)|(X-OSMO-CP)|(X-OSMO-IGN)|(X-OSMUX)',case_insensitive)" }; /* 3.2.2.6 */ diff --git a/mgw/MGCP_Test.ttcn b/mgw/MGCP_Test.ttcn index 4be034bf..f6dfe57e 100644 --- a/mgw/MGCP_Test.ttcn +++ b/mgw/MGCP_Test.ttcn @@ -732,6 +732,35 @@ module MGCP_Test { setverdict(pass); } + /* Test CRCX with X-Osmo-IGN, using same message as SYS#5063 to make sure it doesn't cause a crash. */ + testcase TC_crcx_osmo_ign() runs on dummy_CT { + var template MgcpCommand cmd; + var MgcpResponse resp; + var MgcpEndpoint ep := "7@" & c_mgw_domain; + var MgcpCallId call_id := '3'H; + + f_init(ep); + + /* CRCX 1 7@mgw MGCP 1.0 + C: 3 + L: p:20, a:GSM-EFR, nt:IN + M: recvonly + X-Osmo-IGN: C + */ + + cmd := ts_CRCX(get_next_trans_id(), ep, "netwtest", call_id); + cmd.params := {ts_MgcpParCallId(call_id), + t_MgcpParLocConnOpt("p:20, a:GSM-EFR, nt:IN"), + t_MgcpParConnMode("recvonly"), + t_MgcpParOsmoIGN("C")}; + resp := mgcp_transceive_mgw(cmd, tr_CRCX_ACK); + extract_conn_id(resp); + + /* clean-up */ + f_dlcx_ok(ep, call_id); + setverdict(pass); + } + /* test CRCX with early bi-directional mode, expect 527 as * bi-diretional media can only be established once both local and * remote side are specified, see MGCP RFC */ @@ -2360,6 +2389,7 @@ module MGCP_Test { execute(TC_crcx_no_lco()); execute(TC_crcx_noprefix()); execute(TC_crcx_unsupp_mode()); + execute(TC_crcx_osmo_ign()); execute(TC_crcx_early_bidir_mode()); execute(TC_crcx_unsupp_param()); execute(TC_crcx_missing_callid()); -- cgit v1.2.3