protocol: prohibit wildcarded requests for MDCX and DLCX
When a wildcarded request is made with a DLCX or MDCX command
the MGW will search for a free endpoint and continues the command
execution with that endpoint.
- Catch the wildcarded request early on DLCX and MDCX and return
with an error code.
See also TTCN3 testcases:
MGCP_Test.TC_mdcx_wildcarded
MGCP_Test.TC_dlcx_wildcarded
Change-Id: Ia77d44a6a86083e62338e5845b553e5cf13ebd10
diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c
index 62487d1..ea86672 100644
--- a/src/libosmo-mgcp/mgcp_protocol.c
+++ b/src/libosmo-mgcp/mgcp_protocol.c
@@ -739,6 +739,14 @@
LOGP(DLMGCP, LOGL_NOTICE, "MDCX: modifying existing connection ...\n");
+ /* Prohibit wildcarded requests */
+ if (endp->wildcarded_req) {
+ LOGP(DLMGCP, LOGL_ERROR,
+ "MDCX: endpoint:0x%x wildcarded endpoint names not supported.\n",
+ ENDPOINT_NUMBER(endp));
+ return create_err_response(endp, 507, "MDCX", p->trans);
+ }
+
if (llist_count(&endp->conns) <= 0) {
LOGP(DLMGCP, LOGL_ERROR,
"MDCX: endpoint:0x%x endpoint is not holding a connection.\n",
@@ -912,6 +920,14 @@
"DLCX: endpoint:0x%x deleting connection ...\n",
ENDPOINT_NUMBER(endp));
+ /* Prohibit wildcarded requests */
+ if (endp->wildcarded_req) {
+ LOGP(DLMGCP, LOGL_ERROR,
+ "DLCX: endpoint:0x%x wildcarded endpoint names not supported.\n",
+ ENDPOINT_NUMBER(endp));
+ return create_err_response(endp, 507, "DLCX", p->trans);
+ }
+
if (llist_count(&endp->conns) <= 0) {
LOGP(DLMGCP, LOGL_ERROR,
"DLCX: endpoint:0x%x endpoint is not holding a connection.\n",