summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp Maier <pmaier@sysmocom.de>2017-06-28 18:22:46 +0200
committerPhilipp Maier <pmaier@sysmocom.de>2017-06-28 18:22:46 +0200
commit8761c965ff0b3d5f225a55411914313173758db9 (patch)
treeada1ff51e0c9c7eba8a068ba3babcc63917e3964
parent40703dd1f441ee754a3b9b8b838feb66bc8e032d (diff)
mgcp: Fix missing call id in DLCXpmaier/aoip
The call id field in the DLCX message is missing. Use the endpoint id as call id in all CRCX and DLCX messages.
-rw-r--r--openbsc/include/openbsc/mgcpgw_client.h3
-rw-r--r--openbsc/src/libmgcp/mgcpgw_client.c9
-rw-r--r--openbsc/src/libmsc/msc_ifaces.c11
3 files changed, 13 insertions, 10 deletions
diff --git a/openbsc/include/openbsc/mgcpgw_client.h b/openbsc/include/openbsc/mgcpgw_client.h
index 24b1fd6e7..b1b5fd42b 100644
--- a/openbsc/include/openbsc/mgcpgw_client.h
+++ b/openbsc/include/openbsc/mgcpgw_client.h
@@ -97,7 +97,8 @@ struct msgb *mgcp_msg_mdcx(struct mgcpgw_client *mgcp,
uint16_t rtp_endpoint, const char *rtp_conn_addr,
uint16_t rtp_port, enum mgcp_connection_mode mode);
-struct msgb *mgcp_msg_dlcx(struct mgcpgw_client *mgcp, uint16_t rtp_endpoint);
+struct msgb *mgcp_msg_dlcx(struct mgcpgw_client *mgcp, uint16_t rtp_endpoint,
+ unsigned int call_id);
void mgcpgw_client_vty_init(int node, struct mgcpgw_client_conf *conf);
int mgcpgw_client_config_write(struct vty *vty, const char *indent);
diff --git a/openbsc/src/libmgcp/mgcpgw_client.c b/openbsc/src/libmgcp/mgcpgw_client.c
index f21983ed6..1910a9f35 100644
--- a/openbsc/src/libmgcp/mgcpgw_client.c
+++ b/openbsc/src/libmgcp/mgcpgw_client.c
@@ -606,12 +606,11 @@ struct msgb *mgcp_msg_mdcx(struct mgcpgw_client *mgcp,
rtp_port);
}
-struct msgb *mgcp_msg_dlcx(struct mgcpgw_client *mgcp, uint16_t rtp_endpoint)
+struct msgb *mgcp_msg_dlcx(struct mgcpgw_client *mgcp, uint16_t rtp_endpoint,
+ unsigned int call_id)
{
mgcp_trans_id_t trans_id = mgcpgw_client_next_trans_id(mgcp);
return mgcp_msg_from_str(trans_id,
- "DLCX %u %x@mgw MGCP 1.0\r\n"
- ,
- trans_id,
- rtp_endpoint);
+ "DLCX %u %x@mgw MGCP 1.0\r\n"
+ "C: %x\r\n", trans_id, rtp_endpoint, call_id);
}
diff --git a/openbsc/src/libmsc/msc_ifaces.c b/openbsc/src/libmsc/msc_ifaces.c
index 8d5364767..68a7498ec 100644
--- a/openbsc/src/libmsc/msc_ifaces.c
+++ b/openbsc/src/libmsc/msc_ifaces.c
@@ -219,7 +219,9 @@ static int conn_iu_rab_act_cs(struct gsm_trans *trans)
* endpoint in order to ensure that this endpoint is not occupied
* with some old connection that was not properly cleared during
* some crash or restart event */
- msg_dlcx = mgcp_msg_dlcx(mgcp, conn->iu.mgcp_rtp_endpoint);
+ msg_dlcx =
+ mgcp_msg_dlcx(mgcp, conn->iu.mgcp_rtp_endpoint,
+ conn->iu.mgcp_rtp_endpoint);
if (mgcpgw_client_tx(mgcp, msg_dlcx, NULL, NULL))
LOGP(DMGCP, LOGL_ERROR,
"Failed to send DLCX message for %s\n",
@@ -228,8 +230,8 @@ static int conn_iu_rab_act_cs(struct gsm_trans *trans)
/* Establish the RTP stream first as looping back to the originator.
* The MDCX will patch through to the counterpart. TODO: play a ring
* tone instead. */
- msg = mgcp_msg_crcx(mgcp, conn->iu.mgcp_rtp_endpoint, trans->callref,
- MGCP_CONN_LOOPBACK);
+ msg = mgcp_msg_crcx(mgcp, conn->iu.mgcp_rtp_endpoint,
+ conn->iu.mgcp_rtp_endpoint, MGCP_CONN_LOOPBACK);
return mgcpgw_client_tx(mgcp, msg, mgcp_response_rab_act_cs_crcx, trans);
}
#endif
@@ -355,7 +357,8 @@ void msc_call_release(struct gsm_trans *trans)
struct mgcpgw_client *mgcp = conn->network->mgcpgw.client;
/* Send DLCX */
- msg = mgcp_msg_dlcx(mgcp, conn->iu.mgcp_rtp_endpoint);
+ msg = mgcp_msg_dlcx(mgcp, conn->iu.mgcp_rtp_endpoint,
+ conn->iu.mgcp_rtp_endpoint);
if (mgcpgw_client_tx(mgcp, msg, NULL, NULL))
LOGP(DMGCP, LOGL_ERROR,
"Failed to send DLCX message for %s\n",