Hi,
I just wondering what is exactly the arg on the LocatorReceive function which is being called back by udp_recv?
The complete code is as follow (as can be found on locator.c ) :
//*****************************************************************************
//
// This function is called by the lwIP TCP/IP stack when it receives a UDP
// packet from the discovery port. It produces the response packet, which is
// sent back to the querying client.
//
//*****************************************************************************
static void
LocatorReceive(void *arg, struct udp_pcb *pcb, struct pbuf *p,
struct ip_addr *addr, u16_t port)
{
uint8_t *pui8Data;
uint32_t ui32Idx;
//
// Validate the contents of the datagram.
//
pui8Data = p->payload;
if((p->len != 4) || (pui8Data[0] != TAG_CMD) || (pui8Data[1] != 4) ||
(pui8Data[2] != CMD_DISCOVER_TARGET) ||
(pui8Data[3] != ((0 - TAG_CMD - 4 - CMD_DISCOVER_TARGET) & 0xff)))
{
pbuf_free(p);
return;
}
//
// The incoming pbuf is no longer needed, so free it.
//
pbuf_free(p);
//
// Allocate a new pbuf for sending the response.
//
p = pbuf_alloc(PBUF_TRANSPORT, sizeof(g_pui8LocatorData), PBUF_RAM);
if(p == NULL)
{
return;
}
//
// Calculate and fill in the checksum on the response packet.
//
for(ui32Idx = 0, g_pui8LocatorData[sizeof(g_pui8LocatorData) - 1] = 0;
ui32Idx < (sizeof(g_pui8LocatorData) - 1); ui32Idx++)
{
g_pui8LocatorData[sizeof(g_pui8LocatorData) - 1] -=
g_pui8LocatorData[ui32Idx];
}
//
// Copy the response packet data into the pbuf.
//
pui8Data = p->payload;
for(ui32Idx = 0; ui32Idx < sizeof(g_pui8LocatorData); ui32Idx++)
{
pui8Data[ui32Idx] = g_pui8LocatorData[ui32Idx];
}
//
// Send the response.
//
udp_sendto(pcb, p, addr, port);
//
// Free the pbuf.
//
pbuf_free(p);
}
Thank you