diff options
-rw-r--r-- | Projects/Webserver/Lib/uIPManagement.c | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/Projects/Webserver/Lib/uIPManagement.c b/Projects/Webserver/Lib/uIPManagement.c index 44da609dd..2e8fa4f31 100644 --- a/Projects/Webserver/Lib/uIPManagement.c +++ b/Projects/Webserver/Lib/uIPManagement.c @@ -92,47 +92,50 @@ 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))
- {
- LEDs_SetAllLEDs(LEDMASK_USB_BUSY);
+ /* 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);
+ /* Read the incomming packet straight into the UIP packet buffer */
+ RNDIS_Host_ReadPacket(&Ethernet_RNDIS_Interface, uip_buf, &uip_len);
- if (uip_len > 0)
+ /* If the packet contains an Ethernet frame, process it */
+ if (uip_len > 0)
+ {
+ switch (((struct uip_eth_hdr*)uip_buf)->type)
{
- bool PacketHandled = true;
-
- struct uip_eth_hdr* EthernetHeader = (struct uip_eth_hdr*)uip_buf;
- if (EthernetHeader->type == HTONS(UIP_ETHTYPE_IP))
- {
+ 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)
- uip_arp_out();
- }
- else if (EthernetHeader->type == HTONS(UIP_ETHTYPE_ARP))
- {
+ {
+ /* Add destination MAC to outgoing packet */
+ uip_arp_out();
+
+ RNDIS_Host_SendPacket(&Ethernet_RNDIS_Interface, uip_buf, uip_len);
+ }
+
+ 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)
- RNDIS_Host_SendPacket(&Ethernet_RNDIS_Interface, uip_buf, uip_len);
+
+ /* If a response was generated, send it */
+ if (uip_len > 0)
+ RNDIS_Host_SendPacket(&Ethernet_RNDIS_Interface, uip_buf, uip_len);
+
+ break;
}
-
- LEDs_SetAllLEDs(LEDMASK_USB_READY);
}
+
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);
}
/** Manages the currently open network connections, including TCP and (if enabled) UDP. */
|