[MERGED] osmo-mgw[master]: client: add missing mandatory SDP fields

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.org
Fri Jan 26 00:29:23 UTC 2018


Harald Welte has submitted this change and it was merged.

Change subject: client: add missing mandatory SDP fields
......................................................................


client: add missing mandatory SDP fields

The mcgp message generator function mgcp_msg_gen() lacks support
for the mandatory SDP fields (v)ersion, (o)rigin, (s)ession and
(t)ime.

- Automatically generate the missing fields when SDP is
  generated.

Change-Id: I5fbc31a17e8ac10c7cc5dbc31357b61e8920aaa5
Related: OS#2837
---
M src/libosmo-mgcp-client/mgcp_client.c
M tests/mgcp_client/mgcp_client_test.ok
2 files changed, 32 insertions(+), 2 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/libosmo-mgcp-client/mgcp_client.c b/src/libosmo-mgcp-client/mgcp_client.c
index 135aed0..116baf3 100644
--- a/src/libosmo-mgcp-client/mgcp_client.c
+++ b/src/libosmo-mgcp-client/mgcp_client.c
@@ -740,6 +740,7 @@
 	uint32_t mandatory_mask;
 	struct msgb *msg = msgb_alloc_headroom(4096, 128, "MGCP tx");
 	int rc = 0;
+	char local_ip[INET_ADDRSTRLEN];
 
 	msg->l2h = msg->data;
 	msg->cb[MSGB_CB_MGCP_TRANS_ID] = trans_id;
@@ -820,9 +821,32 @@
 		    msgb_printf(msg, "M: %s\r\n",
 				mgcp_client_cmode_name(mgcp_msg->conn_mode));
 
-	/* Add RTP address and port (SDP) */
+	/* Add SDP body */
 	if (mgcp_msg->presence & MGCP_MSG_PRESENCE_AUDIO_IP
 	    && mgcp_msg->presence & MGCP_MSG_PRESENCE_AUDIO_PORT) {
+
+		/* Add separator to mark the beginning of the SDP block */
+		rc += msgb_printf(msg, "\r\n");
+
+		/* Add SDP protocol version */
+		rc += msgb_printf(msg, "v=0\r\n");
+
+		/* Add session name (none) */
+		rc += msgb_printf(msg, "s=-\r\n");
+
+		/* Determine local IP-Address */
+		if (osmo_sock_local_ip(local_ip, mgcp->actual.remote_addr) < 0) {
+			LOGP(DLMGCP, LOGL_ERROR,
+			     "Could not determine local IP-Address!\n");
+			msgb_free(msg);
+			return NULL;
+		}
+
+		/* Add owner/creator (SDP) */
+		rc += msgb_printf(msg, "o=- %x 23 IN IP4 %s\r\n",
+				  mgcp_msg->call_id, local_ip);
+
+		/* Add RTP address and port */
 		if (mgcp_msg->audio_port == 0) {
 			LOGP(DLMGCP, LOGL_ERROR,
 			     "Invalid port number, can not generate MGCP message\n");
@@ -835,11 +859,13 @@
 			msgb_free(msg);
 			return NULL;
 		}
-		rc += msgb_printf(msg, "\r\n");
 		rc += msgb_printf(msg, "c=IN IP4 %s\r\n", mgcp_msg->audio_ip);
 		rc +=
 		    msgb_printf(msg, "m=audio %u RTP/AVP 255\r\n",
 				mgcp_msg->audio_port);
+
+		/* Add time description, active time (SDP) */
+		rc += msgb_printf(msg, "t=0 0\r\n");
 	}
 
 	if (rc != 0) {
diff --git a/tests/mgcp_client/mgcp_client_test.ok b/tests/mgcp_client/mgcp_client_test.ok
index 4039bb0..00c7f7c 100644
--- a/tests/mgcp_client/mgcp_client_test.ok
+++ b/tests/mgcp_client/mgcp_client_test.ok
@@ -43,8 +43,12 @@
 I: 11
 M: sendrecv
 
+v=0
+s=-
+o=- 2f 23 IN IP4 127.0.0.1
 c=IN IP4 192.168.100.23
 m=audio 1234 RTP/AVP 255
+t=0 0
 
 Generated DLCX message:
 DLCX 3 23 at mgw MGCP 1.0

-- 
To view, visit https://gerrit.osmocom.org/5994
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I5fbc31a17e8ac10c7cc5dbc31357b61e8920aaa5
Gerrit-PatchSet: 2
Gerrit-Project: osmo-mgw
Gerrit-Branch: master
Gerrit-Owner: dexter <pmaier at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list