This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Harald Welte gerrit-no-reply at lists.osmocom.orgReview at https://gerrit.osmocom.org/4906 WIP: MGCP: Connection Identifiers are hex strings The MGCP spec in RFC3435 is quite clear: Connection Identifiers are hexadecimal strings of up to 32 characters. We should not print and parse them as integers on either client or server. As we use an uint32_t to represent connection identifiers, we should use %08x format strings in all places. As the MGW allocates them, it doesn't need to support any larger-than-32bit numbers. However, libosmo-mgcp-client cannot make any assumptions about the connection ID being an uint32_t or even an uint64_t. It should simply treat it as an opaque string. Closes: OS#2649 Change-Id: I0531a1b670d00cec50078423a2868207135b2436 --- M include/osmocom/mgcp_client/mgcp_client.h M src/libosmo-mgcp-client/mgcp_client.c M src/libosmo-mgcp/mgcp_msg.c M src/libosmo-mgcp/mgcp_protocol.c M tests/mgcp_client/mgcp_client_test.c 5 files changed, 9 insertions(+), 8 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/06/4906/1 diff --git a/include/osmocom/mgcp_client/mgcp_client.h b/include/osmocom/mgcp_client/mgcp_client.h index 1a6cbce..168f412 100644 --- a/include/osmocom/mgcp_client/mgcp_client.h +++ b/include/osmocom/mgcp_client/mgcp_client.h @@ -63,7 +63,7 @@ uint32_t presence; char endpoint[MGCP_ENDPOINT_MAXLEN]; unsigned int call_id; - uint32_t conn_id; + char *conn_id; uint16_t audio_port; char *audio_ip; enum mgcp_connection_mode conn_mode; diff --git a/src/libosmo-mgcp-client/mgcp_client.c b/src/libosmo-mgcp-client/mgcp_client.c index 726ac63..3b0cba7 100644 --- a/src/libosmo-mgcp-client/mgcp_client.c +++ b/src/libosmo-mgcp-client/mgcp_client.c @@ -292,6 +292,7 @@ LOGP(DLMGCP, LOGL_ERROR, "Cannot parse MGCP response\n"); return -1; } + /* FIXME: parse response parameters such as connection ID in case of CRCX! */ pending = mgcp_client_response_pending_get(mgcp, &r); if (!pending) { @@ -686,7 +687,7 @@ /* Add connection id */ if (mgcp_msg->presence & MGCP_MSG_PRESENCE_CONN_ID) - rc += msgb_printf(msg, "I: %u\r\n", mgcp_msg->conn_id); + rc += msgb_printf(msg, "I: %s\r\n", mgcp_msg->conn_id); /* Add local connection options */ if (mgcp_msg->presence & MGCP_MSG_PRESENCE_CONN_ID diff --git a/src/libosmo-mgcp/mgcp_msg.c b/src/libosmo-mgcp/mgcp_msg.c index 763a5a1..0ec4180 100644 --- a/src/libosmo-mgcp/mgcp_msg.c +++ b/src/libosmo-mgcp/mgcp_msg.c @@ -337,13 +337,13 @@ if (!endp) return -1; - id = strtoul(ci, NULL, 10); + id = strtoul(ci, NULL, 16); if (mgcp_conn_get(endp, id)) return 0; LOGP(DLMGCP, LOGL_ERROR, - "endpoint:%x No connection found under ConnectionIdentifier %u\n", + "endpoint:%x No connection found under ConnectionIdentifier %08x\n", ENDPOINT_NUMBER(endp), id); return -1; @@ -399,7 +399,7 @@ if (!ci) return -1; - *conn_id = strtoul(ci, NULL, 10); + *conn_id = strtoul(ci, NULL, 16); return 0; } diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c index 2bf8847..80ef3eb 100644 --- a/src/libosmo-mgcp/mgcp_protocol.c +++ b/src/libosmo-mgcp/mgcp_protocol.c @@ -222,7 +222,7 @@ osmux_extension[0] = '\0'; } - rc = msgb_printf(sdp, "I: %u%s\n\n", conn->conn->id, osmux_extension); + rc = msgb_printf(sdp, "I: %08x%s\n\n", conn->conn->id, osmux_extension); if (rc < 0) goto error; @@ -585,7 +585,7 @@ return create_err_response(endp, 400, "CRCX", p->trans); } - snprintf(conn_name, sizeof(conn_name), "%s-%u", callid, conn_id); + snprintf(conn_name, sizeof(conn_name), "%s-%08x", callid, conn_id); mgcp_conn_alloc(NULL, endp, conn_id, MGCP_CONN_TYPE_RTP, conn_name); conn = mgcp_conn_get_rtp(endp, conn_id); diff --git a/tests/mgcp_client/mgcp_client_test.c b/tests/mgcp_client/mgcp_client_test.c index 513f345..5fd59e9 100644 --- a/tests/mgcp_client/mgcp_client_test.c +++ b/tests/mgcp_client/mgcp_client_test.c @@ -162,7 +162,7 @@ .endpoint = "23 at mgw", .audio_port = 1234, .call_id = 47, - .conn_id = 11, + .conn_id = "11", .conn_mode = MGCP_CONN_RECV_SEND }; -- To view, visit https://gerrit.osmocom.org/4906 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0531a1b670d00cec50078423a2868207135b2436 Gerrit-PatchSet: 1 Gerrit-Project: osmo-mgw Gerrit-Branch: master Gerrit-Owner: Harald Welte <laforge at gnumonks.org>