Bugfix: must copy the sender and receiver addresses from the packetbuf buffer, otherwise an application program may overwrite them
This commit is contained in:
parent
fe5a1f1068
commit
02734c9806
1 changed files with 10 additions and 5 deletions
|
@ -33,7 +33,7 @@
|
|||
*
|
||||
* This file is part of the Contiki operating system.
|
||||
*
|
||||
* $Id: multihop.c,v 1.5 2009/04/28 14:01:46 adamdunkels Exp $
|
||||
* $Id: multihop.c,v 1.6 2009/05/10 21:10:02 adamdunkels Exp $
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@ -70,6 +70,13 @@ data_packet_received(struct unicast_conn *uc, rimeaddr_t *from)
|
|||
{
|
||||
struct multihop_conn *c = (struct multihop_conn *)uc;
|
||||
rimeaddr_t *nexthop;
|
||||
rimeaddr_t sender, receiver;
|
||||
|
||||
/* Copy the packet attributes to avoid them being overwritten or
|
||||
cleared by an application program that uses the packet buffer for
|
||||
its own needs. */
|
||||
rimeaddr_copy(&sender, packetbuf_addr(PACKETBUF_ADDR_ESENDER));
|
||||
rimeaddr_copy(&receiver, packetbuf_addr(PACKETBUF_ADDR_ERECEIVER));
|
||||
|
||||
PRINTF("data_packet_received from %d.%d towards %d.%d len %d\n",
|
||||
from->u8[0], from->u8[1],
|
||||
|
@ -81,15 +88,13 @@ data_packet_received(struct unicast_conn *uc, rimeaddr_t *from)
|
|||
&rimeaddr_node_addr)) {
|
||||
PRINTF("for us!\n");
|
||||
if(c->cb->recv) {
|
||||
c->cb->recv(c, packetbuf_addr(PACKETBUF_ADDR_ESENDER), from,
|
||||
c->cb->recv(c, &sender, from,
|
||||
packetbuf_attr(PACKETBUF_ATTR_HOPS));
|
||||
}
|
||||
} else {
|
||||
nexthop = NULL;
|
||||
if(c->cb->forward) {
|
||||
nexthop = c->cb->forward(c,
|
||||
packetbuf_addr(PACKETBUF_ADDR_ESENDER),
|
||||
packetbuf_addr(PACKETBUF_ADDR_ERECEIVER),
|
||||
nexthop = c->cb->forward(c, &sender, &receiver,
|
||||
from, packetbuf_attr(PACKETBUF_ATTR_HOPS));
|
||||
|
||||
packetbuf_set_attr(PACKETBUF_ATTR_HOPS,
|
||||
|
|
Loading…
Reference in a new issue