pespin has submitted this change. (
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(-)
Approvals:
Jenkins Builder: Verified
fixeria: Looks good to me, but someone else must approve
laforge: Looks good to me, approved
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 <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged