diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index cdffd3c47b11507ff396617cb265b4b06e6807f7..e32cdab7d3df41ed5d7f2b1eebffcf42648f9677 100644 --- a/LUFA/ManPages/ChangeLog.txt +++ b/LUFA/ManPages/ChangeLog.txt @@ -17,6 +17,7 @@ * - Increased the speed of both software and hardware TPI/PDI programming modes of the AVRISP project * - Added a timeout value to the TWI_StartTransmission() function, within which the addressed device must respond * - Webserver project now uses the board LEDs to indicate the current IP configuration state + * - Added ENABLE_TELNET_SERVER compile time option to the Webserver project to disable the TELNET server if desired * * <b>Fixed:</b> * - Fixed software PDI/TPI programming mode in the AVRISP project not correctly toggling just the clock pin diff --git a/Projects/Webserver/Lib/DHCPClientApp.c b/Projects/Webserver/Lib/DHCPClientApp.c index 01cbb7e264867b845f75280ac2cce1afce329a4a..1af90ad19972791bb0f52dbcbb9265660968393c 100644 --- a/Projects/Webserver/Lib/DHCPClientApp.c +++ b/Projects/Webserver/Lib/DHCPClientApp.c @@ -28,16 +28,17 @@ this software. */ +#if defined(ENABLE_DHCP_CLIENT) || defined(__DOXYGEN__) + /** \file * * DHCP Client Application. When connected to the uIP stack, this will retrieve IP configuration settings from the * DHCP server on the network. */ +#define INCLUDE_FROM_DHCPCLIENTAPP_C #include "DHCPClientApp.h" -#if defined(ENABLE_DHCP_CLIENT) || defined(__DOXYGEN__) - /** Initialization function for the DHCP client. */ void DHCPClientApp_Init(void) { @@ -175,7 +176,7 @@ void DHCPClientApp_Callback(void) * * \return Size in bytes of the created DHCP packet */ -uint16_t DHCPClientApp_FillDHCPHeader(DHCP_Header_t* DHCPHeader, uint8_t DHCPMessageType, uip_udp_appstate_t* AppState) +static uint16_t DHCPClientApp_FillDHCPHeader(DHCP_Header_t* DHCPHeader, uint8_t DHCPMessageType, uip_udp_appstate_t* AppState) { /* Erase existing packet data so that we start will all 0x00 DHCP header data */ memset(DHCPHeader, 0, sizeof(DHCP_Header_t)); @@ -214,7 +215,7 @@ uint16_t DHCPClientApp_FillDHCPHeader(DHCP_Header_t* DHCPHeader, uint8_t DHCPMes * * \return Number of bytes added to the DHCP packet */ -uint8_t DHCPClientApp_SetOption(uint8_t* DHCPOptionList, uint8_t Option, uint8_t DataLen, void* OptionData) +static uint8_t DHCPClientApp_SetOption(uint8_t* DHCPOptionList, uint8_t Option, uint8_t DataLen, void* OptionData) { /* Skip through the DHCP options list until the terminator option is found */ while (*DHCPOptionList != DHCP_OPTION_END) @@ -238,7 +239,7 @@ uint8_t DHCPClientApp_SetOption(uint8_t* DHCPOptionList, uint8_t Option, uint8_t * * \return Boolean true if the option was found in the DHCP packet's options list, false otherwise */ -bool DHCPClientApp_GetOption(uint8_t* DHCPOptionList, uint8_t Option, void* Destination) +static bool DHCPClientApp_GetOption(uint8_t* DHCPOptionList, uint8_t Option, void* Destination) { /* Look through the incoming DHCP packet's options list for the requested option */ while (*DHCPOptionList != DHCP_OPTION_END) diff --git a/Projects/Webserver/Lib/DHCPClientApp.h b/Projects/Webserver/Lib/DHCPClientApp.h index 947151d0b16c5ee08557b926938f79d43fb9b374..702f79704cd398436d67d18a37615394678bf4cd 100644 --- a/Projects/Webserver/Lib/DHCPClientApp.h +++ b/Projects/Webserver/Lib/DHCPClientApp.h @@ -159,8 +159,11 @@ void DHCPClientApp_Init(void); void DHCPClientApp_Callback(void); - uint16_t DHCPClientApp_FillDHCPHeader(DHCP_Header_t* DHCPHeader, uint8_t DHCPMessageType, uip_udp_appstate_t* AppState); - uint8_t DHCPClientApp_SetOption(uint8_t* DHCPOptionList, uint8_t Option, uint8_t DataLen, void* OptionData); - bool DHCPClientApp_GetOption(uint8_t* DHCPOptionList, uint8_t Option, void* Destination); - + #if defined(INCLUDE_FROM_DHCPCLIENTAPP_C) + static uint16_t DHCPClientApp_FillDHCPHeader(DHCP_Header_t* DHCPHeader, uint8_t DHCPMessageType, + uip_udp_appstate_t* AppState); + static uint8_t DHCPClientApp_SetOption(uint8_t* DHCPOptionList, uint8_t Option, uint8_t DataLen, + void* OptionData); + static bool DHCPClientApp_GetOption(uint8_t* DHCPOptionList, uint8_t Option, void* Destination); + #endif #endif diff --git a/Projects/Webserver/Lib/HTTPServerApp.c b/Projects/Webserver/Lib/HTTPServerApp.c index 1a1d2c4bf6fb29e43e0403de078697c7e41d6c04..08d84943371b8005a3ed73c8d2a99a99648dc05f 100644 --- a/Projects/Webserver/Lib/HTTPServerApp.c +++ b/Projects/Webserver/Lib/HTTPServerApp.c @@ -56,12 +56,12 @@ const char PROGMEM HTTP404Header[] = "HTTP/1.1 404 Not Found\r\n" "Content-Type: text/plain\r\n\r\n" "Error 404: File Not Found: /"; -/** Default MIME type sent if no other MIME type can be determined. */ -const char PROGMEM DefaultMIMEType[] = "text/plain"; - /** Default filename to fetch when a directory is requested */ const char PROGMEM DefaultDirFileName[] = "index.htm"; +/** Default MIME type sent if no other MIME type can be determined. */ +const char PROGMEM DefaultMIMEType[] = "text/plain"; + /** List of MIME types for each supported file extension. */ const MIME_Type_t MIMETypes[] = { @@ -174,7 +174,7 @@ static void HTTPServerApp_OpenRequestedFile(void) char* RequestedFileName = strtok(NULL, " "); /* Must be a GET request, abort otherwise */ - if (strcmp(RequestToken, "GET") != 0) + if (strcmp_P(RequestToken, PSTR("GET")) != 0) { uip_abort(); return; @@ -257,7 +257,7 @@ static void HTTPServerApp_SendResponseHeader(void) } /* Add the end-of-line terminator and end-of-headers terminator after the MIME type */ - strcpy(&AppData[strlen(AppData)], "\r\n\r\n"); + strcpy_P(&AppData[strlen(AppData)], PSTR("\r\n\r\n")); /* Send the MIME header to the receiving client */ uip_send(AppData, strlen(AppData)); diff --git a/Projects/Webserver/Lib/TELNETServerApp.c b/Projects/Webserver/Lib/TELNETServerApp.c index d1f1d7f97132eeeb45c50436a99207a955f6cab2..2855f8d76317b63ec0e2bca0959f59794ef184f1 100644 --- a/Projects/Webserver/Lib/TELNETServerApp.c +++ b/Projects/Webserver/Lib/TELNETServerApp.c @@ -28,6 +28,8 @@ this software. */ +#if defined(ENABLE_TELNET_SERVER) || defined(__DOXYGEN__) + /** \file * * TELNET Webserver Application. When connected to the uIP stack, @@ -114,7 +116,7 @@ void TELNETServerApp_Callback(void) TELNETServerApp_DisplayTCPConnections(); break; default: - strcpy(AppData, "Invalid Command.\r\n"); + strcpy_P(AppData, PSTR("Invalid Command.\r\n")); uip_send(AppData, strlen(AppData)); break; } @@ -144,14 +146,17 @@ static void TELNETServerApp_DisplayTCPConnections(void) if (CurrConnection->tcpstateflags != UIP_CLOSED) { /* Add the current connection's details to the out buffer */ - ResponseLen += sprintf(&AppData[ResponseLen], "%u) %02d.%02d.%02d.%02d (Local %u, Remote %u)\r\n", - ++ActiveConnCount, CurrConnection->ripaddr.u8[0], - CurrConnection->ripaddr.u8[1], - CurrConnection->ripaddr.u8[2], - CurrConnection->ripaddr.u8[3], - HTONS(CurrConnection->lport), HTONS(CurrConnection->rport)); + ResponseLen += sprintf_P(&AppData[ResponseLen], PSTR("%u) %02d.%02d.%02d.%02d (Local %u, Remote %u)\r\n"), + ++ActiveConnCount, + CurrConnection->ripaddr.u8[0], + CurrConnection->ripaddr.u8[1], + CurrConnection->ripaddr.u8[2], + CurrConnection->ripaddr.u8[3], + HTONS(CurrConnection->lport), HTONS(CurrConnection->rport)); } } uip_send(AppData, ResponseLen); -} \ No newline at end of file +} + +#endif diff --git a/Projects/Webserver/Lib/uIPManagement.c b/Projects/Webserver/Lib/uIPManagement.c index d5ad515c24ebe135ea8732d6c49d64ca895bb064..45f8a6ae5bf1ce27f48d0272960de1f920da3c52 100644 --- a/Projects/Webserver/Lib/uIPManagement.c +++ b/Projects/Webserver/Lib/uIPManagement.c @@ -80,7 +80,9 @@ void uIPManagement_Init(void) HTTPServerApp_Init(); /* TELNET Server Initialization */ + #if defined(ENABLE_TELNET_SERVER) TELNETServerApp_Init(); + #endif } /** uIP Management function. This function manages the uIP stack when called while an RNDIS device has been @@ -106,9 +108,11 @@ void uIPManagement_TCPCallback(void) case HTONS(HTTP_SERVER_PORT): HTTPServerApp_Callback(); break; + #if defined(ENABLE_TELNET_SERVER) case HTONS(TELNET_SERVER_PORT): TELNETServerApp_Callback(); break; + #endif } } diff --git a/Projects/Webserver/Webserver.txt b/Projects/Webserver/Webserver.txt index 05d0b1ffde758455b4e3ede5101c39aa2f33c0ca..3c0c48e35bd22e45595dcfa824511934f0022cd6 100644 --- a/Projects/Webserver/Webserver.txt +++ b/Projects/Webserver/Webserver.txt @@ -78,6 +78,12 @@ * <td><b>Description:</b></td> * </tr> * <tr> + * <td>ENABLE_TELNET_SERVER</td> + * <td>Makefile CDEFS</td> + * <td>When defined, this enables the TELNET server in addition to the HTTP webserver, which listens for incomming connections + * and processes user commands.</td> + * </tr> + * <tr> * <td>ENABLE_DHCP_CLIENT</td> * <td>Makefile CDEFS</td> * <td>When defined, this enables the DHCP client for dynamic IP allocation of the network settings from a DHCP server.</td> diff --git a/Projects/Webserver/makefile b/Projects/Webserver/makefile index edd2824017be55e8fb2c38daa53348af57324630..36adb1d51cb26d22fddc5d8c484953d60bb637f3 100644 --- a/Projects/Webserver/makefile +++ b/Projects/Webserver/makefile @@ -201,6 +201,7 @@ CSTANDARD = -std=gnu99 # Place -D or -U options here for C sources CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD) $(LUFA_OPTS) CDEFS += -DENABLE_DHCP_CLIENT +CDEFS += -DENABLE_TELNET_SERVER CDEFS += -DMAX_URI_LENGTH=50 CDEFS += -DUIP_CONF_UDP="defined(ENABLE_DHCP_CLIENT)" -DUIP_CONF_TCP=1 -DUIP_CONF_UDP_CONNS=1 -DUIP_CONF_MAX_CONNECTIONS=3