To avoid ambiguity, address should be explicitly set by caller, not automatically by the module.

This commit is contained in:
Adam Dunkels 2011-08-29 21:56:49 +02:00
parent 823f28e87c
commit 6699f6a6f6
2 changed files with 31 additions and 32 deletions

View file

@ -86,6 +86,8 @@ PROCESS(servreg_hack_process, "Service regstry hack");
static struct etimer sendtimer;
static uint8_t started = 0;
/*---------------------------------------------------------------------------*/
/* Go through the list of registrations and remove those that are too
old. */
@ -117,15 +119,18 @@ purge_registrations(void)
void
servreg_hack_init(void)
{
list_init(others_services);
list_init(own_services);
memb_init(&registrations);
if(started == 0) {
list_init(others_services);
list_init(own_services);
memb_init(&registrations);
process_start(&servreg_hack_process, NULL);
process_start(&servreg_hack_process, NULL);
started = 1;
}
}
/*---------------------------------------------------------------------------*/
void
servreg_hack_register(servreg_hack_id_t id)
servreg_hack_register(servreg_hack_id_t id, const uip_ipaddr_t *addr)
{
servreg_hack_item_t *t;
struct servreg_hack_registration *r;
@ -149,6 +154,7 @@ servreg_hack_register(servreg_hack_id_t id)
}
r->id = id;
r->seqno = 1;
uip_ipaddr_copy(&r->addr, addr);
timer_set(&r->timer, LIFETIME / 2);
list_push(own_services, r);
@ -212,8 +218,6 @@ handle_incoming_reg(const uip_ipaddr_t *owner, servreg_hack_id_t id, uint8_t seq
now - we might later choose to discard the oldest registration
that we have). */
/* printf("Handle incoming reg id %d seqno %d\n", id, seqno);*/
for(t = servreg_hack_list_head();
t != NULL;
t = list_item_next(t)) {
@ -276,34 +280,28 @@ send_udp_packet(struct uip_udp_conn *conn)
uint8_t buf[MAX_BUFSIZE];
int bufptr;
servreg_hack_item_t *t;
uip_ds6_addr_t *addr;
addr = uip_ds6_get_global(-1);
buf[MSG_FLAGS_OFFSET] = 0;
numregs = 0;
bufptr = MSG_ADDRS_OFFSET;
if(addr != NULL) {
for(t = list_head(own_services);
(bufptr + MSG_ADDRS_LEN <= MAX_BUFSIZE) && t != NULL;
t = list_item_next(t)) {
uip_ipaddr_copy((uip_ipaddr_t *)&buf[bufptr + MSG_IPADDR_SUBOFFSET],
&addr->ipaddr);
buf[bufptr + MSG_REGS_SUBOFFSET] =
servreg_hack_item_id(t);
buf[bufptr + MSG_REGS_SUBOFFSET + 1] =
buf[bufptr + MSG_REGS_SUBOFFSET + 2] = 0;
buf[bufptr + MSG_SEQNO_SUBOFFSET] = ((struct servreg_hack_registration *)t)->seqno;
bufptr += MSG_ADDRS_LEN;
++numregs;
}
}
for(t = list_head(own_services);
(bufptr + MSG_ADDRS_LEN <= MAX_BUFSIZE) && t != NULL;
t = list_item_next(t)) {
uip_ipaddr_copy((uip_ipaddr_t *)&buf[bufptr + MSG_IPADDR_SUBOFFSET],
servreg_hack_item_address(t));
buf[bufptr + MSG_REGS_SUBOFFSET] =
servreg_hack_item_id(t);
buf[bufptr + MSG_REGS_SUBOFFSET + 1] =
buf[bufptr + MSG_REGS_SUBOFFSET + 2] = 0;
buf[bufptr + MSG_SEQNO_SUBOFFSET] = ((struct servreg_hack_registration *)t)->seqno;
bufptr += MSG_ADDRS_LEN;
++numregs;
}
for(t = servreg_hack_list_head();
(bufptr + MSG_ADDRS_LEN <= MAX_BUFSIZE) && t != NULL;
t = list_item_next(t)) {
@ -338,7 +336,7 @@ parse_incoming_packet(const u8_t *buf, int len)
numregs = buf[MSG_NUMREGS_OFFSET];
flags = buf[MSG_FLAGS_OFFSET];
/* printf("Numregs %d flags %d\n", numregs, flags);*/
/* printf("parse_incoming_packet Numregs %d flags %d\n", numregs, flags);*/
bufptr = MSG_ADDRS_OFFSET;
for(i = 0; i < numregs; ++i) {

View file

@ -81,6 +81,7 @@ void servreg_hack_init(void);
/**
* \brief Register that this node provides a service
* \param service_id The 8-bit ID for the service
* \param addr The address associated with the service
*
* This function is used to register a
* service. Registering a service means that other nodes
@ -91,7 +92,7 @@ void servreg_hack_init(void);
* reached: this is up to the application that uses the
* servreg-hack application.
*/
void servreg_hack_register(servreg_hack_id_t service_id);
void servreg_hack_register(servreg_hack_id_t service_id, const uip_ipaddr_t *addr);
/**