aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
authorPhilipp Maier <pmaier@sysmocom.de>2017-06-28 18:22:46 +0200
committerPhilipp Maier <pmaier@sysmocom.de>2017-06-30 11:16:48 +0200
commit9e1e0f46fb82fabb3be11006effa964ed4163ed8 (patch)
tree7032c3c19c9bd05c6582015cf13b37aa8198fc37 /openbsc
parente2b37af93a084abf57c496938746cc66e65c120f (diff)
mgcp: Fix missing call id in DLCX
The call id field in the DLCX message is missing. Use the endpoint id as call id in all CRCX and DLCX messages.
Diffstat (limited to 'openbsc')
-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 cdc724b5b..8eb688224 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",