[PATCH] libosmo-netif[master]: osmux_snprintf: Support different types of Osmux frames

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/.

Pau Espin Pedrol gerrit-no-reply at lists.osmocom.org
Mon Oct 23 15:43:23 UTC 2017


Review at  https://gerrit.osmocom.org/4386

osmux_snprintf: Support different types of Osmux frames

Previous implementation could handle data unexpectedly if an Osmux frame
other than AMR was used as input.

Change-Id: I48565472b47c2a0e5db50881fbb005537af8c70d
---
M src/osmux.c
1 file changed, 36 insertions(+), 21 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/libosmo-netif refs/changes/86/4386/1

diff --git a/src/osmux.c b/src/osmux.c
index cad4c5d..47fb927 100644
--- a/src/osmux.c
+++ b/src/osmux.c
@@ -921,30 +921,45 @@
 		msg_off += sizeof(struct osmux_hdr);
 		msg_len -= sizeof(struct osmux_hdr);
 
-		if (!osmo_amr_ft_valid(osmuxh->amr_ft)) {
-			LOGP(DLMIB, LOGL_ERROR, "Bad AMR FT %d, skipping\n",
-			     osmuxh->amr_ft);
+		switch (osmuxh->ft) {
+		case OSMUX_FT_SIGNAL:
+			ret = snprintf(buf + offset, remain, "[signal]");
+			SNPRINTF_BUFFER_SIZE(ret, remain, offset);
+			break;
+		case OSMUX_FT_VOICE_AMR:
+			if (!osmo_amr_ft_valid(osmuxh->amr_ft)) {
+				LOGP(DLMIB, LOGL_ERROR, "Bad AMR FT %d, skipping\n",
+				     osmuxh->amr_ft);
+				return -1;
+			}
+
+			payload_len = osmux_get_payload_len(osmuxh);
+
+			if (msg_len < payload_len) {
+				LOGP(DLMIB, LOGL_ERROR,
+				     "No room for OSMUX payload: only %d bytes\n",
+				     msg_len);
+				return -1;
+			}
+
+			ret = osmux_snprintf_payload(buf + offset, remain,
+						     osmux_get_payload(osmuxh),
+						     payload_len);
+			SNPRINTF_BUFFER_SIZE(ret, remain, offset);
+
+			msg_off += payload_len;
+			msg_len -= payload_len;
+			break;
+		case OSMUX_FT_DUMMY:
+			ret = snprintf(buf + offset, remain, "[dummy]");
+			SNPRINTF_BUFFER_SIZE(ret, remain, offset);
+			break;
+		default:
+			LOGP(DLMIB, LOGL_ERROR, "Unknown OSMUX ft value %d\n",
+			     osmuxh->ft);
 			return -1;
 		}
-
-		payload_len = osmux_get_payload_len(osmuxh);
-
-		if (msg_len < payload_len) {
-			LOGP(DLMIB, LOGL_ERROR,
-			     "No room for OSMUX payload: only %d bytes\n",
-			     msg_len);
-			return -1;
-		}
-
-		ret = osmux_snprintf_payload(buf + offset, remain,
-					     osmux_get_payload(osmuxh),
-					     payload_len);
-		SNPRINTF_BUFFER_SIZE(ret, remain, offset);
-
-		msg_off += payload_len;
-		msg_len -= payload_len;
 	}
-
 	return offset;
 }
 

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I48565472b47c2a0e5db50881fbb005537af8c70d
Gerrit-PatchSet: 1
Gerrit-Project: libosmo-netif
Gerrit-Branch: master
Gerrit-Owner: Pau Espin Pedrol <pespin at sysmocom.de>



More information about the gerrit-log mailing list