From 1008260985a50df686bb6c0b73c6a0b10fd24b2b Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Tue, 2 Feb 2010 05:56:47 +0000
Subject: [PATCH] Make packet processing code in the Webserver project a bit
 neater using a switch statement instead of an if-else-if chain.

---
 Projects/Webserver/Lib/uIPManagement.c | 57 ++++++++++++++------------
 1 file 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. */
-- 
GitLab