From e38bfe0683668392379fa84abed0ec02a033a7da Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Fri, 17 May 2019 18:40:43 +0200 Subject: RTP_Emulation: Avoid failure if T_transmit triggers between bind and connect During MGCP_Test's f_flow_modify, an RTP socket may be Tx-enabled, and f_flow_modify first calls bind, then connect, with MDCX transaction in the middle (which can take some time). If T_transmit from RTP_Emulation triggers (RTP packet to be send), during that time, TTCN3 will fail to send the packet: RTP_Emulation.ttcn:312 Message enqueued on RTP from system @Socket_API_Definitions.PortEvent : { result := { errorCode := ERROR_SOCKET (4), connId := 2, os_error_code := 89, os_error_text := "Destination address required" } } id 1 Change-Id: I20e7aed35bb28200e30ee5efc718f77e036d8262 --- library/RTP_Emulation.ttcn | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/library/RTP_Emulation.ttcn b/library/RTP_Emulation.ttcn index 2494d74f..7b9be681 100644 --- a/library/RTP_Emulation.ttcn +++ b/library/RTP_Emulation.ttcn @@ -85,6 +85,7 @@ type component RTP_Emulation_CT { /* state variables, change over time */ var boolean g_rx_enabled := false; + var boolean g_tx_connected := false; /* Set to true after connect() */ var LIN2_BO_LAST g_tx_next_seq := 0; var uint32_t g_tx_next_ts := 0; @@ -347,6 +348,8 @@ function f_main() runs on RTP_Emulation_CT log("Local Port is not an even port number!"); continue; } + + g_tx_connected := false; /* will set it back to true upon next connect() call */ res := RTP_CodecPort_CtrlFunct.f_IPL4_listen(RTP, g_local_host, g_local_port, {udp:={}}); if (not ispresent(res.connId)) { @@ -387,6 +390,7 @@ function f_main() runs on RTP_Emulation_CT setverdict(fail, "Could not connect to RTCP socket, check your configuration"); mtc.stop; } + g_tx_connected := true; CTRL.reply(RTPEM_connect:{g_remote_host, g_remote_port}); } [] CTRL.getcall(RTPEM_mode:{RTPEM_MODE_NONE}) { @@ -466,7 +470,7 @@ function f_main() runs on RTP_Emulation_CT } /* transmit if timer has expired */ - [] T_transmit.timeout { + [g_tx_connected] T_transmit.timeout { /* send one RTP frame, re-start timer */ f_tx_rtp(g_cfg.tx_fixed_payload); T_transmit.start; -- cgit v1.2.3