X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/b9b03aadb219d06fbad9d110e508db93e45461af..abc7dce10c03bcbc9659e1a9643cec30c465867d:/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.c diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.c index c07f2c8bd..573ff336f 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.c +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.c @@ -39,10 +39,14 @@ /** HTTP server response header, for transmission before the page contents. This indicates to the host that a page exists at the * given location, and gives extra connection information. */ -char PROGMEM HTTPHeader[] = "HTTP/1.1 200 OK\r\n" - "Server: LUFA RNDIS\r\n" - "Content-type: text/html\r\n" - "Connection: close\r\n\r\n"; +char PROGMEM HTTP200Header[] = "HTTP/1.1 200 OK\r\n" + "Server: LUFA RNDIS\r\n" + "Content-type: text/html\r\n" + "Connection: close\r\n\r\n"; + +char PROGMEM HTTP404Header[] = "HTTP/1.1 404 Not Found\r\n" + "Server: LUFA RNDIS\r\n" + "Connection: close\r\n\r\n"; /** HTTP page to serve to the host when a HTTP request is made. This page is too long for a single response, thus it is automatically * broken up into smaller blocks and sent as a series of packets each time the webserver application callback is run. @@ -78,8 +82,8 @@ void Webserver_Init(void) /** Indicates if a given request equals the given HTTP command. * - * \param RequestHeader HTTP request made by the host - * \param Command HTTP command to compare the request to + * \param[in] RequestHeader HTTP request made by the host + * \param[in] Command HTTP command to compare the request to * * \return Boolean true if the command matches the request, false otherwise */ @@ -92,8 +96,8 @@ static bool IsHTTPCommand(uint8_t* RequestHeader, char* Command) /** Application callback routine, executed each time the TCP processing task runs. This callback determines what request * has been made (if any), and serves up appropriate responses. * - * \param ConnectionState Pointer to a TCP Connection State structure giving connection information - * \param Buffer Pointer to the application's send/receive packet buffer + * \param[in] ConnectionState Pointer to a TCP Connection State structure giving connection information + * \param[in,out] Buffer Pointer to the application's send/receive packet buffer */ void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_ConnectionBuffer_t* Buffer) { @@ -105,29 +109,60 @@ void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_C { if (IsHTTPCommand(Buffer->Data, "GET")) { - PageBlock = 0; - - /* Copy the HTTP response header into the packet buffer */ - strcpy_P(BufferDataStr, HTTPHeader); - - /* Send the buffer contents to the host */ - TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr)); - - /* Lock the buffer to Device->Host transmissions only while we send the page contents */ - TCP_APP_CAPTURE_BUFFER(Buffer); + if (IsHTTPCommand(Buffer->Data, "GET / ")) + { + PageBlock = 0; + + /* Copy the HTTP 200 response header into the packet buffer */ + strcpy_P(BufferDataStr, HTTP200Header); + + /* Send the buffer contents to the host */ + TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr)); + + /* Lock the buffer to Device->Host transmissions only while we send the page contents */ + TCP_APP_CAPTURE_BUFFER(Buffer); + } + else + { + /* Copy the HTTP 404 response header into the packet buffer */ + strcpy_P(BufferDataStr, HTTP404Header); + + /* Send the buffer contents to the host */ + TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr)); + + /* All data sent, close the connection */ + TCP_APP_CLOSECONNECTION(ConnectionState); + } } else if (IsHTTPCommand(Buffer->Data, "HEAD")) { - /* Copy the HTTP response header into the packet buffer */ - strcpy_P(BufferDataStr, HTTPHeader); - - /* Send the buffer contents to the host */ - TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr)); + if (IsHTTPCommand(Buffer->Data, "HEAD / ")) + { + /* Copy the HTTP response header into the packet buffer */ + strcpy_P(BufferDataStr, HTTP200Header); + + /* Send the buffer contents to the host */ + TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr)); + } + else + { + /* Copy the HTTP response header into the packet buffer */ + strcpy_P(BufferDataStr, HTTP404Header); + + /* Send the buffer contents to the host */ + TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr)); + } + + /* All data sent, close the connection */ + TCP_APP_CLOSECONNECTION(ConnectionState); } else if (IsHTTPCommand(Buffer->Data, "TRACE")) { /* Echo the host's query back to the host */ TCP_APP_SEND_BUFFER(Buffer, Buffer->Length); + + /* All data sent, close the connection */ + TCP_APP_CLOSECONNECTION(ConnectionState); } else {