pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/libosmo-netif/+/30755 )


Change subject: amr: use struct bwe_hdr in osmo_amr_bwe_to_oa()
......................................................................

amr: use struct bwe_hdr in osmo_amr_bwe_to_oa()

The header conversion is now much clearer. Take the chance to delay the
memset(buf) after the checks.

Change-Id: I5042dc628ac70eca62b4980f4acae991dd976528
---
M src/amr.c
1 file changed, 15 insertions(+), 8 deletions(-)



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

diff --git a/src/amr.c b/src/amr.c
index b648d54..e4f0dd8 100644
--- a/src/amr.c
+++ b/src/amr.c
@@ -203,11 +203,14 @@
 {
        uint8_t buf[256];
        /* The header is only valid after shifting first two bytes to OA mode */
+       struct amr_hdr_bwe *bwe_hdr = (struct amr_hdr_bwe *)payload;
        struct amr_hdr *oa_hdr;
        unsigned int i;
        unsigned int oa_payload_len;
+       uint8_t ft;

-       memset(buf, 0, sizeof(buf));
+       if (payload_len < sizeof(struct amr_hdr_bwe))
+               return -1;

        if (payload_len + 1 > payload_maxlen)
                return -1;
@@ -215,15 +218,19 @@
        if (payload_len + 1 > sizeof(buf))
                return -1;

-       buf[0] = payload[0] & 0xf0;
-       buf[1] = payload[0] << 4;
-       buf[1] |= (payload[1] >> 4) & 0x0c;
+       ft = (bwe_hdr->ft_hi << 1) | bwe_hdr->ft_lo;
+       if (!osmo_amr_ft_valid(ft))
+               return -1;
+
+       memset(buf, 0, sizeof(buf));
+       oa_hdr = (struct amr_hdr *)buf;
+       oa_hdr->cmr = bwe_hdr->cmr;
+       oa_hdr->f = bwe_hdr->f;
+       oa_hdr->ft = ft;
+       oa_hdr->q = bwe_hdr->q;

        /* Calculate new payload length */
-       oa_hdr = (struct amr_hdr *)buf;
-       if (!osmo_amr_ft_valid(oa_hdr->ft))
-               return -1;
-       oa_payload_len = 2 + osmo_amr_bytes(oa_hdr->ft);
+       oa_payload_len = 2 + osmo_amr_bytes(ft);

        for (i = 2; i < oa_payload_len - 1; i++) {
                buf[i] = payload[i - 1] << 2;

--
To view, visit https://gerrit.osmocom.org/c/libosmo-netif/+/30755
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmo-netif
Gerrit-Branch: master
Gerrit-Change-Id: I5042dc628ac70eca62b4980f4acae991dd976528
Gerrit-Change-Number: 30755
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>
Gerrit-MessageType: newchange

Reply via email to