netutils/libcoap : patch for coap_transaction_id function
authorJin-Seong Kim <jseong82.kim@samsung.com>
Mon, 15 May 2017 07:50:04 +0000 (16:50 +0900)
committerEunBong Song <eunb.song@samsung.com>
Tue, 11 Jul 2017 01:26:55 +0000 (10:26 +0900)
This commit is patch to coap_transaction_id function
problem
 - coap_hash function uses structure addr.sa to create tid
 - when coap message is received,
   tid, which is in received coap message, is used to
   comparing sender's tid
 - unmatched case occurs, when addr.sa is used to create tid
 - in this case, sender cannot find coap response message
   which has same tid of sender so infinite retransmission
   happens on application
 solution
 - uses addr and port value to create tid similar to IPv6

Change-Id: I1665577394d772bacb0d923dfeb7094db99e4a3b
Signed-off-by: Jin-Seong Kim <jseong82.kim@samsung.com>
apps/netutils/libcoap/net.c

index f5ff6f4..5a87ecf 100644 (file)
@@ -509,7 +509,13 @@ void coap_transaction_id(const coap_address_t *peer, const coap_pdu_t *pdu, coap
 #ifdef WITH_POSIX
        switch (peer->addr.sa.sa_family) {
        case AF_INET:
+#if defined (__TINYARA__)
+               /* Local Fixes : Make hash value using IPv4 addr and port only */
+               coap_hash((const unsigned char *)&peer->addr.sin.sin_addr, sizeof(peer->addr.sin.sin_addr), h);
+               coap_hash((const unsigned char *)&peer->addr.sin.sin_port, sizeof(peer->addr.sin.sin_port), h);
+#else
                coap_hash((const unsigned char *)&peer->addr.sa, peer->size, h);
+#endif
                break;
        case AF_INET6:
                coap_hash((const unsigned char *)&peer->addr.sin6.sin6_port, sizeof(peer->addr.sin6.sin6_port), h);