diff --git a/src/libosmo-mgcp-client/mgcp_client_fsm.c b/src/libosmo-mgcp-client/mgcp_client_fsm.c index 7ff3a5358..ab7af10b2 100644 --- a/src/libosmo-mgcp-client/mgcp_client_fsm.c +++ b/src/libosmo-mgcp-client/mgcp_client_fsm.c @@ -173,6 +173,11 @@ static struct msgb *make_mdcx_msg(struct mgcp_ctx *mgcp_ctx) set_conn_mode(&mgcp_msg, &mgcp_ctx->conn_peer_local); + if (mgcp_ctx->conn_peer_local.x_osmo_osmux_use) { + mgcp_msg.x_osmo_osmux_cid = mgcp_ctx->conn_peer_local.x_osmo_osmux_cid; + mgcp_msg.presence |= MGCP_MSG_PRESENCE_X_OSMO_OSMUX_CID; + } + /* Note: We take the endpoint and the call_id from the remote * connection info, because we can be confident that the * information there is valid. For the local info, we explicitly diff --git a/tests/mgcp_client/mgcp_client_test.c b/tests/mgcp_client/mgcp_client_test.c index 432a09c8e..9c4392f7d 100644 --- a/tests/mgcp_client/mgcp_client_test.c +++ b/tests/mgcp_client/mgcp_client_test.c @@ -276,6 +276,17 @@ void test_mgcp_msg(void) msg = mgcp_msg_gen(mgcp, &mgcp_msg); printf("%s\n", (char *)msg->data); + printf("Generate X-Osmo-Osmux message (MDCX):\n"); + msg = mgcp_msg_gen(mgcp, &mgcp_msg); + mgcp_msg.verb = MGCP_VERB_MDCX; + mgcp_msg.x_osmo_osmux_cid = 2; + mgcp_msg.presence = + (MGCP_MSG_PRESENCE_ENDPOINT | MGCP_MSG_PRESENCE_CALL_ID | + MGCP_MSG_PRESENCE_CONN_ID | MGCP_MSG_PRESENCE_CONN_MODE + | MGCP_MSG_PRESENCE_X_OSMO_OSMUX_CID); + msg = mgcp_msg_gen(mgcp, &mgcp_msg); + printf("%s\n", (char *)msg->data); + printf("Overfolow test:\n"); mgcp_msg.verb = MGCP_VERB_MDCX; mgcp_msg.presence = diff --git a/tests/mgcp_client/mgcp_client_test.ok b/tests/mgcp_client/mgcp_client_test.ok index 8fbe3ae4f..8b3e15bb3 100644 --- a/tests/mgcp_client/mgcp_client_test.ok +++ b/tests/mgcp_client/mgcp_client_test.ok @@ -100,6 +100,14 @@ L: p:20, a:GSM, nt:IN M: sendrecv X-Osmux: 2 +Generate X-Osmo-Osmux message (MDCX): +MDCX 17 23@mgw MGCP 1.0 +C: 2f +I: 11 +L: p:20, a:GSM, nt:IN +M: sendrecv +X-Osmux: 2 + Overfolow test: