Added ENABLE_TELNET_SERVER compile time option to the Webserver project to disable...
[pub/USBasp.git] / Projects / Webserver / Lib / DHCPClientApp.c
index 0e51d57..1af90ad 100644 (file)
   this software.\r
 */\r
 \r
+#if defined(ENABLE_DHCP_CLIENT) || defined(__DOXYGEN__)\r
+\r
 /** \file\r
  *\r
  *  DHCP Client Application. When connected to the uIP stack, this will retrieve IP configuration settings from the\r
  *  DHCP server on the network.\r
  */\r
\r
-#include "DHCPClientApp.h"\r
 \r
-#if defined(ENABLE_DHCP_CLIENT) || defined(__DOXYGEN__)\r
-/** Timer for managing the timeout period for a DHCP server to respond */\r
-struct timer DHCPTimer;\r
+#define  INCLUDE_FROM_DHCPCLIENTAPP_C\r
+#include "DHCPClientApp.h"\r
 \r
 /** Initialization function for the DHCP client. */\r
 void DHCPClientApp_Init(void)\r
 {\r
-       /* Create an IP address to the broadcast network address */\r
-       uip_ipaddr_t DHCPServerIPAddress;\r
-       uip_ipaddr(&DHCPServerIPAddress, 255, 255, 255, 255);\r
-\r
        /* Create a new UDP connection to the DHCP server port for the DHCP solicitation */\r
-       struct uip_udp_conn* Connection = uip_udp_new(&DHCPServerIPAddress, HTONS(DHCPC_SERVER_PORT));\r
+       struct uip_udp_conn* Connection = uip_udp_new(&uip_broadcast_addr, HTONS(DHCPC_SERVER_PORT));\r
        \r
        /* If the connection was successfully created, bind it to the local DHCP client port */\r
        if (Connection != NULL)\r
        {\r
                uip_udp_appstate_t* const AppState = &Connection->appstate;\r
-\r
                uip_udp_bind(Connection, HTONS(DHCPC_CLIENT_PORT));\r
+               \r
+               /* Set the initial client state */\r
                AppState->DHCPClient.CurrentState = DHCP_STATE_SendDiscover;\r
-       }\r
 \r
-       /* Set timeout period to half a second for a DHCP server to respond */\r
-       timer_set(&DHCPTimer, CLOCK_SECOND / 2);\r
+               /* Set timeout period to half a second for a DHCP server to respond */\r
+               timer_set(&AppState->DHCPClient.Timeout, CLOCK_SECOND / 2);\r
+       }\r
 }\r
  \r
 /** uIP stack application callback for the DHCP client. This function must be called each time the TCP/IP stack \r
@@ -91,7 +87,7 @@ void DHCPClientApp_Callback(void)
                        uip_udp_send(AppDataSize);\r
 \r
                        /* Reset the timeout timer, progress to next state */\r
-                       timer_reset(&DHCPTimer);\r
+                       timer_reset(&AppState->DHCPClient.Timeout);\r
                        AppState->DHCPClient.CurrentState = DHCP_STATE_WaitForOffer;                    \r
                        \r
                        break;\r
@@ -99,7 +95,7 @@ void DHCPClientApp_Callback(void)
                        if (!(uip_newdata()))\r
                        {\r
                                /* Check if the DHCP timeout period has expired while waiting for a response */\r
-                               if (timer_expired(&DHCPTimer))\r
+                               if (timer_expired(&AppState->DHCPClient.Timeout))\r
                                  AppState->DHCPClient.CurrentState = DHCP_STATE_SendDiscover;\r
                                \r
                                break;\r
@@ -116,7 +112,7 @@ void DHCPClientApp_Callback(void)
                                DHCPClientApp_GetOption(AppData->Options, DHCP_OPTION_ROUTER,      &AppState->DHCPClient.DHCPOffer_Data.GatewayIP);\r
                                DHCPClientApp_GetOption(AppData->Options, DHCP_OPTION_SERVER_ID,   &AppState->DHCPClient.DHCPOffer_Data.ServerIP);\r
                                \r
-                               timer_reset(&DHCPTimer);\r
+                               timer_reset(&AppState->DHCPClient.Timeout);\r
                                AppState->DHCPClient.CurrentState = DHCP_STATE_SendRequest;\r
                        }\r
 \r
@@ -137,7 +133,7 @@ void DHCPClientApp_Callback(void)
                        uip_udp_send(AppDataSize);\r
                        \r
                        /* Reset the timeout timer, progress to next state */\r
-                       timer_reset(&DHCPTimer);\r
+                       timer_reset(&AppState->DHCPClient.Timeout);\r
                        AppState->DHCPClient.CurrentState = DHCP_STATE_WaitForACK;\r
 \r
                        break;\r
@@ -145,7 +141,7 @@ void DHCPClientApp_Callback(void)
                        if (!(uip_newdata()))\r
                        {\r
                                /* Check if the DHCP timeout period has expired while waiting for a response */\r
-                               if (timer_expired(&DHCPTimer))\r
+                               if (timer_expired(&AppState->DHCPClient.Timeout))\r
                                  AppState->DHCPClient.CurrentState = DHCP_STATE_SendDiscover;\r
                                \r
                                break;\r
@@ -161,7 +157,10 @@ void DHCPClientApp_Callback(void)
                                uip_setnetmask((uip_ipaddr_t*)&AppState->DHCPClient.DHCPOffer_Data.Netmask);\r
                                uip_setdraddr((uip_ipaddr_t*)&AppState->DHCPClient.DHCPOffer_Data.GatewayIP);\r
                        \r
-                               AppState->DHCPClient.CurrentState = DHCP_STATE_AddressLeased;\r
+                               /* Indicate to the user that we now have a valid IP configuration */\r
+                               HaveIPConfiguration = true;\r
+\r
+                               AppState->DHCPClient.CurrentState = DHCP_STATE_AddressLeased;                           \r
                        }\r
                        \r
                        break;\r
@@ -177,7 +176,7 @@ void DHCPClientApp_Callback(void)
  *\r
  *  \return Size in bytes of the created DHCP packet\r
  */\r
-uint16_t DHCPClientApp_FillDHCPHeader(DHCP_Header_t* DHCPHeader, uint8_t DHCPMessageType, uip_udp_appstate_t* AppState)\r
+static uint16_t DHCPClientApp_FillDHCPHeader(DHCP_Header_t* DHCPHeader, uint8_t DHCPMessageType, uip_udp_appstate_t* AppState)\r
 {\r
        /* Erase existing packet data so that we start will all 0x00 DHCP header data */\r
        memset(DHCPHeader, 0, sizeof(DHCP_Header_t));\r
@@ -216,7 +215,7 @@ uint16_t DHCPClientApp_FillDHCPHeader(DHCP_Header_t* DHCPHeader, uint8_t DHCPMes
  *\r
  *  \return Number of bytes added to the DHCP packet\r
  */\r
-uint8_t DHCPClientApp_SetOption(uint8_t* DHCPOptionList, uint8_t Option, uint8_t DataLen, void* OptionData)\r
+static uint8_t DHCPClientApp_SetOption(uint8_t* DHCPOptionList, uint8_t Option, uint8_t DataLen, void* OptionData)\r
 {\r
        /* Skip through the DHCP options list until the terminator option is found */\r
        while (*DHCPOptionList != DHCP_OPTION_END)\r
@@ -240,7 +239,7 @@ uint8_t DHCPClientApp_SetOption(uint8_t* DHCPOptionList, uint8_t Option, uint8_t
  *\r
  *  \return Boolean true if the option was found in the DHCP packet's options list, false otherwise\r
  */\r
-bool DHCPClientApp_GetOption(uint8_t* DHCPOptionList, uint8_t Option, void* Destination)\r
+static bool DHCPClientApp_GetOption(uint8_t* DHCPOptionList, uint8_t Option, void* Destination)\r
 {\r
        /* Look through the incoming DHCP packet's options list for the requested option */\r
        while (*DHCPOptionList != DHCP_OPTION_END)\r