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