From 5bd9493257ee3a43d36c0be5f23ac05a2459694b Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Thu, 22 Apr 2010 20:12:13 +0800 Subject: nat: Only send DLCX when we have send a CRCX to the BSC on this endpoint --- openbsc/include/openbsc/bsc_nat.h | 1 + openbsc/src/nat/bsc_mgcp_utils.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'openbsc') diff --git a/openbsc/include/openbsc/bsc_nat.h b/openbsc/include/openbsc/bsc_nat.h index 6ef1f5971..4d90ed744 100644 --- a/openbsc/include/openbsc/bsc_nat.h +++ b/openbsc/include/openbsc/bsc_nat.h @@ -112,6 +112,7 @@ struct sccp_connections { struct sccp_source_reference remote_ref; /* GSM audio handling. That is 32 * multiplex + ts */ + int crcx; int msc_timeslot; int bsc_timeslot; }; diff --git a/openbsc/src/nat/bsc_mgcp_utils.c b/openbsc/src/nat/bsc_mgcp_utils.c index 79bd2a5d6..6cb626453 100644 --- a/openbsc/src/nat/bsc_mgcp_utils.c +++ b/openbsc/src/nat/bsc_mgcp_utils.c @@ -147,12 +147,13 @@ void bsc_mgcp_init(struct sccp_connections *con) { con->msc_timeslot = -1; con->bsc_timeslot = -1; + con->crcx = 0; } void bsc_mgcp_dlcx(struct sccp_connections *con) { /* send a DLCX down the stream */ - if (con->bsc_timeslot != -1) { + if (con->bsc_timeslot != -1 && con->crcx) { int endp = mgcp_timeslot_to_endpoint(0, con->msc_timeslot); bsc_mgcp_send_dlcx(con->bsc, endp); bsc_mgcp_free_endpoint(con->bsc->nat, endp); @@ -247,6 +248,7 @@ int bsc_mgcp_policy_cb(struct mgcp_config *cfg, int endpoint, int state, const c } /* send the message and a fake MDCX for force sending of a dummy packet */ + sccp->crcx = 1; bsc_write(sccp->bsc, bsc_msg, NAT_IPAC_PROTO_MGCP); bsc_mgcp_send_mdcx(sccp->bsc, mgcp_endp); return MGCP_POLICY_DEFER; -- cgit v1.2.3