oic; reverse the order in which fragments are created from original packet. This allows os_mbuf_adj() of original packet to free unused mbufs, when possible.
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/c8c06dd1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/c8c06dd1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/c8c06dd1 Branch: refs/heads/develop Commit: c8c06dd14d0adff1f6dc9f61186030d52edc0323 Parents: 7dca12c Author: Marko Kiiskila <[email protected]> Authored: Fri Dec 16 11:08:00 2016 -0800 Committer: Sterling Hughes <[email protected]> Committed: Sun Dec 18 13:56:17 2016 -0800 ---------------------------------------------------------------------- net/oic/src/port/mynewt/ble_adaptor.c | 16 +++++++--------- net/oic/src/port/oc_connectivity.h | 3 +-- 2 files changed, 8 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/c8c06dd1/net/oic/src/port/mynewt/ble_adaptor.c ---------------------------------------------------------------------- diff --git a/net/oic/src/port/mynewt/ble_adaptor.c b/net/oic/src/port/mynewt/ble_adaptor.c index 23742b9..39ceac9 100644 --- a/net/oic/src/port/mynewt/ble_adaptor.c +++ b/net/oic/src/port/mynewt/ble_adaptor.c @@ -278,25 +278,22 @@ oc_ble_frag(struct os_mbuf *m, uint16_t mtu) STAILQ_NEXT(pkt, omp_next) = NULL; return 0; } - off = mtu; + off = pkt->omp_len % mtu; - while (off < OS_MBUF_PKTLEN(m)) { + while (off > mtu) { n = os_msys_get_pkthdr(mtu, 0); if (!n) { goto err; } - + STAILQ_NEXT(OS_MBUF_PKTHDR(n), omp_next) = STAILQ_NEXT(pkt, omp_next); STAILQ_NEXT(pkt, omp_next) = OS_MBUF_PKTHDR(n); - pkt = STAILQ_NEXT(pkt, omp_next); - blk = OS_MBUF_PKTLEN(m) - off; - if (blk > mtu) { - blk = mtu; - } + blk = pkt->omp_len - off; if (os_mbuf_appendfrom(n, m, off, blk)) { goto err; } - off += blk; + off -= blk; + os_mbuf_adj(m, -blk); } os_mbuf_adj(m, mtu - OS_MBUF_PKTLEN(m)); return 0; @@ -334,6 +331,7 @@ oc_send_buffer_gatt(struct os_mbuf *m) STATS_INCN(oc_ble_stats, obytes, OS_MBUF_PKTLEN(m)); mtu = ble_att_mtu(oe->bt_addr.conn_handle); + assert(mtu > 4); mtu -= 3; /* # of bytes for ATT notification base */ if (oc_ble_frag(m, mtu)) { http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/c8c06dd1/net/oic/src/port/oc_connectivity.h ---------------------------------------------------------------------- diff --git a/net/oic/src/port/oc_connectivity.h b/net/oic/src/port/oc_connectivity.h index ea44e3e..7f50a6b 100644 --- a/net/oic/src/port/oc_connectivity.h +++ b/net/oic/src/port/oc_connectivity.h @@ -41,9 +41,8 @@ typedef struct oc_endpoint { IPSP = 1 << 2, MULTICAST = 1 << 3, SECURED = 1 << 4, - SERIAL = 1 <<5, + SERIAL = 1 << 5, } flags; - union { oc_ipv6_addr_t ipv6_addr; oc_le_addr_t bt_addr;
