More AVR32 achitecture ports.
[pub/USBasp.git] / Projects / Webserver / Lib / uIPManagement.c
index c08b273..bd7804e 100644 (file)
@@ -30,7 +30,7 @@
 \r
 /** \file\r
  *\r
- *  uIP Managament functions. This file contains the functions and globals needed to maintain the uIP\r
+ *  uIP Management functions. This file contains the functions and globals needed to maintain the uIP\r
  *  stack once an RNDIS device has been attached to the system.\r
  */\r
 \r
@@ -52,16 +52,17 @@ void uIPManagement_Init(void)
 {\r
        /* uIP Timing Initialization */\r
        clock_init();\r
-       timer_set(&ConnectionTimer, CLOCK_SECOND / 8);\r
+       timer_set(&ConnectionTimer, CLOCK_SECOND / 2);\r
        timer_set(&ARPTimer, CLOCK_SECOND * 10);        \r
 \r
        /* uIP Stack Initialization */\r
        uip_init();\r
        uip_arp_init();\r
+       uip_setethaddr(MACAddress);\r
 \r
        /* DHCP/Server IP Settings Initialization */\r
-       #if defined(ENABLE_DHCP)\r
-       DHCPApp_Init();\r
+       #if defined(ENABLE_DHCP_CLIENT)\r
+       DHCPClientApp_Init();\r
        #else\r
        uip_ipaddr_t IPAddress, Netmask, GatewayIPAddress;\r
        uip_ipaddr(&IPAddress,        DEVICE_IP_ADDRESS[0], DEVICE_IP_ADDRESS[1], DEVICE_IP_ADDRESS[2], DEVICE_IP_ADDRESS[3]);\r
@@ -71,11 +72,12 @@ void uIPManagement_Init(void)
        uip_setnetmask(&Netmask);\r
        uip_setdraddr(&GatewayIPAddress);\r
        #endif\r
-\r
-       uip_setethaddr(MACAddress);\r
        \r
        /* HTTP Webserver Initialization */\r
-       WebserverApp_Init();\r
+       HTTPServerApp_Init();\r
+       \r
+       /* TELNET Server Initialization */\r
+       TELNETServerApp_Init();\r
 }\r
 \r
 /** uIP Management function. This function manages the uIP stack when called while an RNDIS device has been\r
@@ -85,13 +87,44 @@ void uIPManagement_ManageNetwork(void)
 {\r
        if ((USB_CurrentMode == USB_MODE_HOST) && (USB_HostState == HOST_STATE_Configured))\r
        {\r
-               uIPManagement_ProcessIncommingPacket();\r
+               uIPManagement_ProcessIncomingPacket();\r
                uIPManagement_ManageConnections();\r
        }\r
 }\r
 \r
-/** Processes incomming packets to the server from the connected RNDIS device, creating responses as needed. */\r
-static void uIPManagement_ProcessIncommingPacket(void)\r
+/** uIP TCP/IP network stack callback function for the processing of a given TCP connection. This routine dispatches\r
+ *  to the appropriate TCP protocol application based on the connection's listen port number.\r
+ */\r
+void uIPManagement_TCPCallback(void)\r
+{\r
+       /* Call the correct TCP application based on the port number the connection is listening on */\r
+       switch (uip_conn->lport)\r
+       {\r
+               case HTONS(HTTP_SERVER_PORT):\r
+                       HTTPServerApp_Callback();\r
+                       break;\r
+               case HTONS(TELNET_SERVER_PORT):\r
+                       TELNETServerApp_Callback();\r
+                       break;\r
+       }\r
+}\r
+\r
+/** uIP TCP/IP network stack callback function for the processing of a given UDP connection. This routine dispatches\r
+ *  to the appropriate UDP protocol application based on the connection's listen port number.\r
+ */\r
+void uIPManagement_UDPCallback(void)\r
+{\r
+       /* Call the correct UDP application based on the port number the connection is listening on */\r
+       switch (uip_udp_conn->lport)\r
+       {\r
+               case HTONS(DHCPC_CLIENT_PORT):\r
+                       DHCPClientApp_Callback();\r
+                       break;\r
+       }\r
+}\r
+\r
+/** Processes Incoming packets to the server from the connected RNDIS device, creating responses as needed. */\r
+static void uIPManagement_ProcessIncomingPacket(void)\r
 {\r
        /* If no packet received, exit processing routine */\r
        if (!(RNDIS_Host_IsPacketReceived(&Ethernet_RNDIS_Interface)))\r
@@ -99,7 +132,7 @@ static void uIPManagement_ProcessIncommingPacket(void)
          \r
        LEDs_SetAllLEDs(LEDMASK_USB_BUSY);\r
 \r
-       /* Read the incomming packet straight into the UIP packet buffer */\r
+       /* Read the Incoming packet straight into the UIP packet buffer */\r
        RNDIS_Host_ReadPacket(&Ethernet_RNDIS_Interface, uip_buf, &uip_len);\r
 \r
        /* If the packet contains an Ethernet frame, process it */\r
@@ -111,7 +144,7 @@ static void uIPManagement_ProcessIncommingPacket(void)
                                /* Filter packet by MAC destination */\r
                                uip_arp_ipin();\r
 \r
-                               /* Process incomming packet */\r
+                               /* Process Incoming packet */\r
                                uip_input();\r
 \r
                                /* If a response was generated, send it */\r
@@ -120,7 +153,7 @@ static void uIPManagement_ProcessIncommingPacket(void)
                                        /* Add destination MAC to outgoing packet */\r
                                        uip_arp_out();\r
 \r
-                                       RNDIS_Host_SendPacket(&Ethernet_RNDIS_Interface, uip_buf, uip_len);\r
+                                       uip_split_output();\r
                                }\r
                                \r
                                break;\r
@@ -130,7 +163,7 @@ static void uIPManagement_ProcessIncommingPacket(void)
                                \r
                                /* If a response was generated, send it */\r
                                if (uip_len > 0)\r
-                                 RNDIS_Host_SendPacket(&Ethernet_RNDIS_Interface, uip_buf, uip_len);\r
+                                 uip_split_output();\r
                                \r
                                break;\r
                }\r
@@ -153,7 +186,8 @@ static void uIPManagement_ManageConnections(void)
                        /* Add destination MAC to outgoing packet */\r
                        uip_arp_out();\r
 \r
-                       RNDIS_Host_SendPacket(&Ethernet_RNDIS_Interface, uip_buf, uip_len);\r
+                       /* Split and send the outgoing packet */\r
+                       uip_split_output();\r
                }\r
        }\r
 \r
@@ -175,11 +209,12 @@ static void uIPManagement_ManageConnections(void)
                                /* Add destination MAC to outgoing packet */\r
                                uip_arp_out();\r
 \r
-                               RNDIS_Host_SendPacket(&Ethernet_RNDIS_Interface, uip_buf, uip_len);\r
+                               /* Split and send the outgoing packet */\r
+                               uip_split_output();\r
                        }\r
                }\r
                \r
-               #if defined(ENABLE_DHCP)\r
+               #if defined(ENABLE_DHCP_CLIENT)\r
                for (uint8_t i = 0; i < UIP_UDP_CONNS; i++)\r
                {\r
                        /* Run periodic connection management for each UDP connection */\r
@@ -191,7 +226,8 @@ static void uIPManagement_ManageConnections(void)
                                /* Add destination MAC to outgoing packet */\r
                                uip_arp_out();\r
 \r
-                               RNDIS_Host_SendPacket(&Ethernet_RNDIS_Interface, uip_buf, uip_len);\r
+                               /* Split and send the outgoing packet */\r
+                               uip_split_output();\r
                        }\r
                }\r
                #endif\r