pespin has submitted this change. ( 
https://gerrit.osmocom.org/c/libosmo-netif/+/30225 )

Change subject: osmux: Refactor osmux_xfrm_output_pull() to simplify code flow
......................................................................

osmux: Refactor osmux_xfrm_output_pull() to simplify code flow

Change-Id: I0da1d7875bd32f6c1022676b64f9f0d14bad3144
---
M src/osmux_output.c
1 file changed, 34 insertions(+), 39 deletions(-)

Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved
  msuraev: Looks good to me, but someone else must approve
  osmith: Looks good to me, but someone else must approve



diff --git a/src/osmux_output.c b/src/osmux_output.c
index 6b9f451..33d977b 100644
--- a/src/osmux_output.c
+++ b/src/osmux_output.c
@@ -57,58 +57,53 @@
 struct osmux_hdr *osmux_xfrm_output_pull(struct msgb *msg)
 {
        struct osmux_hdr *osmuxh;
+       size_t len;
+
 next:
-       osmuxh = NULL;
-       if (msg->len > sizeof(struct osmux_hdr)) {
-               size_t len;
+       if (msgb_length(msg) == 0)
+               return NULL; /* base case, we drained the msg successfully, 
tell user it is done. */

-               osmuxh = (struct osmux_hdr *)msg->data;
+       if (msgb_length(msg) < sizeof(struct osmux_hdr)) {
+               LOGP(DLMUX, LOGL_ERROR, "remaining %d bytes, broken 
osmuxhdr?\n", msgb_length(msg));
+               return NULL;
+       }

-               switch (osmuxh->ft) {
-               case OSMUX_FT_VOICE_AMR:
-                       break;
-               case OSMUX_FT_DUMMY:
-                       if (!osmo_amr_ft_valid(osmuxh->amr_ft)) {
-                               LOGP(DLMUX, LOGL_ERROR, "Discarding bad Dummy 
FT: amr_ft=%u\n",
-                                    osmuxh->amr_ft);
-                               return NULL;
-                       }
-                       len = osmux_ft_dummy_size(osmuxh->amr_ft, osmuxh->ctr + 
1);
-                       if (msgb_length(msg) < len) {
-                               LOGP(DLMUX, LOGL_ERROR, "Discarding bad Dummy 
FT: %s\n",
-                                       osmo_hexdump(msg->data, 
msgb_length(msg)));
-                               return NULL;
-                       }
-                       msgb_pull(msg, len);
-                       goto next;
-               default:
-                       LOGP(DLMUX, LOGL_ERROR, "Discarding unsupported Osmux 
FT %d\n",
-                            osmuxh->ft);
-                       return NULL;
-               }
+       osmuxh = (struct osmux_hdr *)msgb_data(msg);
+       switch (osmuxh->ft) {
+       case OSMUX_FT_VOICE_AMR:
                if (!osmo_amr_ft_valid(osmuxh->amr_ft)) {
-                       LOGP(DLMUX, LOGL_ERROR, "Discarding bad AMR FT %d\n",
-                            osmuxh->amr_ft);
+                       LOGP(DLMUX, LOGL_ERROR, "Discarding bad AMR FT %d\n", 
osmuxh->amr_ft);
                        return NULL;
                }
-
-               len = osmo_amr_bytes(osmuxh->amr_ft) * (osmuxh->ctr+1) +
-                       sizeof(struct osmux_hdr);
-
+               len = osmo_amr_bytes(osmuxh->amr_ft) * (osmuxh->ctr + 1) + 
sizeof(struct osmux_hdr);
                if (msgb_length(msg) < len) {
                        LOGP(DLMUX, LOGL_ERROR,
                                "Discarding malformed OSMUX message: %s\n",
-                               osmo_hexdump(msg->data, msgb_length(msg)));
+                               osmo_hexdump(msgb_data(msg), msgb_length(msg)));
                        return NULL;
                }
-
                msgb_pull(msg, len);
-       } else if (msg->len > 0) {
-               LOGP(DLMUX, LOGL_ERROR,
-                       "remaining %d bytes, broken osmuxhdr?\n", msg->len);
-       }
+               return osmuxh;

-       return osmuxh;
+       case OSMUX_FT_DUMMY:
+               if (!osmo_amr_ft_valid(osmuxh->amr_ft)) {
+                       LOGP(DLMUX, LOGL_ERROR, "Discarding bad Dummy FT: 
amr_ft=%u\n", osmuxh->amr_ft);
+                       return NULL;
+               }
+               len = osmux_ft_dummy_size(osmuxh->amr_ft, osmuxh->ctr + 1);
+               if (msgb_length(msg) < len) {
+                       LOGP(DLMUX, LOGL_ERROR, "Discarding bad Dummy FT: %s\n",
+                            osmo_hexdump(msgb_data(msg), msgb_length(msg)));
+                       return NULL;
+               }
+               msgb_pull(msg, len);
+               goto next;
+
+       default:
+               LOGP(DLMUX, LOGL_ERROR, "Discarding unsupported Osmux FT %d\n",
+                       osmuxh->ft);
+               return NULL;
+       }
 }

 static struct msgb *



3 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted 
one.
--
To view, visit https://gerrit.osmocom.org/c/libosmo-netif/+/30225
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmo-netif
Gerrit-Branch: master
Gerrit-Change-Id: I0da1d7875bd32f6c1022676b64f9f0d14bad3144
Gerrit-Change-Number: 30225
Gerrit-PatchSet: 4
Gerrit-Owner: pespin <pes...@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <lafo...@osmocom.org>
Gerrit-Reviewer: msuraev <msur...@sysmocom.de>
Gerrit-Reviewer: osmith <osm...@sysmocom.de>
Gerrit-Reviewer: pespin <pes...@sysmocom.de>
Gerrit-CC: fixeria <vyanits...@sysmocom.de>
Gerrit-MessageType: merged

Reply via email to