Make packet processing code in the Webserver project a bit neater using a switch statement instead of an if-else-if chain.

pull/1469/head
Dean Camera 15 years ago
parent 5687ac7316
commit 1008260985

@ -92,48 +92,51 @@ void uIPManagement_ManageNetwork(void)
/** Processes incomming packets to the server from the connected RNDIS device, creating responses as needed. */
static void uIPManagement_ProcessIncommingPacket(void)
{
if (RNDIS_Host_IsPacketReceived(&Ethernet_RNDIS_Interface))
{
/* If no packet received, exit processing routine */
if (!(RNDIS_Host_IsPacketReceived(&Ethernet_RNDIS_Interface)))
return;
LEDs_SetAllLEDs(LEDMASK_USB_BUSY);
/* Read the incomming packet straight into the UIP packet buffer */
RNDIS_Host_ReadPacket(&Ethernet_RNDIS_Interface, uip_buf, &uip_len);
/* If the packet contains an Ethernet frame, process it */
if (uip_len > 0)
{
bool PacketHandled = true;
struct uip_eth_hdr* EthernetHeader = (struct uip_eth_hdr*)uip_buf;
if (EthernetHeader->type == HTONS(UIP_ETHTYPE_IP))
switch (((struct uip_eth_hdr*)uip_buf)->type)
{
case HTONS(UIP_ETHTYPE_IP):
/* Filter packet by MAC destination */
uip_arp_ipin();
/* Process incomming packet */
uip_input();
/* Add destination MAC to outgoing packet */
/* If a response was generated, send it */
if (uip_len > 0)
{
/* Add destination MAC to outgoing packet */
uip_arp_out();
RNDIS_Host_SendPacket(&Ethernet_RNDIS_Interface, uip_buf, uip_len);
}
else if (EthernetHeader->type == HTONS(UIP_ETHTYPE_ARP))
{
break;
case HTONS(UIP_ETHTYPE_ARP):
/* Process ARP packet */
uip_arp_arpin();
}
else
{
PacketHandled = false;
}
/* If a response was generated, send it */
if ((uip_len > 0) && PacketHandled)
if (uip_len > 0)
RNDIS_Host_SendPacket(&Ethernet_RNDIS_Interface, uip_buf, uip_len);
break;
}
}
LEDs_SetAllLEDs(LEDMASK_USB_READY);
}
}
/** Manages the currently open network connections, including TCP and (if enabled) UDP. */
static void uIPManagement_ManageConnections(void)

Loading…
Cancel
Save