Added 404 errors to the RNDIS Webserver example.

pull/1469/head
Dean Camera 15 years ago
parent 6928f17b64
commit bb05712efe

@ -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 /** 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. * given location, and gives extra connection information.
*/ */
char PROGMEM HTTPHeader[] = "HTTP/1.1 200 OK\r\n" char PROGMEM HTTP200Header[] = "HTTP/1.1 200 OK\r\n"
"Server: LUFA RNDIS\r\n" "Server: LUFA RNDIS\r\n"
"Content-type: text/html\r\n" "Content-type: text/html\r\n"
"Connection: close\r\n\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 /** 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. * broken up into smaller blocks and sent as a series of packets each time the webserver application callback is run.
@ -105,29 +109,60 @@ void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_C
{ {
if (IsHTTPCommand(Buffer->Data, "GET")) if (IsHTTPCommand(Buffer->Data, "GET"))
{ {
PageBlock = 0; if (IsHTTPCommand(Buffer->Data, "GET / "))
{
/* Copy the HTTP response header into the packet buffer */ PageBlock = 0;
strcpy_P(BufferDataStr, HTTPHeader);
/* Copy the HTTP 200 response header into the packet buffer */
/* Send the buffer contents to the host */ strcpy_P(BufferDataStr, HTTP200Header);
TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));
/* Send the buffer contents to the host */
/* Lock the buffer to Device->Host transmissions only while we send the page contents */ TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));
TCP_APP_CAPTURE_BUFFER(Buffer);
/* 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")) else if (IsHTTPCommand(Buffer->Data, "HEAD"))
{ {
/* Copy the HTTP response header into the packet buffer */ if (IsHTTPCommand(Buffer->Data, "HEAD / "))
strcpy_P(BufferDataStr, HTTPHeader); {
/* Copy the HTTP response header into the packet buffer */
/* Send the buffer contents to the host */ strcpy_P(BufferDataStr, HTTP200Header);
TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));
/* 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")) else if (IsHTTPCommand(Buffer->Data, "TRACE"))
{ {
/* Echo the host's query back to the host */ /* Echo the host's query back to the host */
TCP_APP_SEND_BUFFER(Buffer, Buffer->Length); TCP_APP_SEND_BUFFER(Buffer, Buffer->Length);
/* All data sent, close the connection */
TCP_APP_CLOSECONNECTION(ConnectionState);
} }
else else
{ {

@ -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 /** 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. * given location, and gives extra connection information.
*/ */
char PROGMEM HTTPHeader[] = "HTTP/1.1 200 OK\r\n" char PROGMEM HTTP200Header[] = "HTTP/1.1 200 OK\r\n"
"Server: LUFA RNDIS\r\n" "Server: LUFA RNDIS\r\n"
"Content-type: text/html\r\n" "Content-type: text/html\r\n"
"Connection: close\r\n\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 /** 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. * broken up into smaller blocks and sent as a series of packets each time the webserver application callback is run.
@ -105,29 +109,60 @@ void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_C
{ {
if (IsHTTPCommand(Buffer->Data, "GET")) if (IsHTTPCommand(Buffer->Data, "GET"))
{ {
PageBlock = 0; if (IsHTTPCommand(Buffer->Data, "GET / "))
{
/* Copy the HTTP response header into the packet buffer */ PageBlock = 0;
strcpy_P(BufferDataStr, HTTPHeader);
/* Copy the HTTP 200 response header into the packet buffer */
/* Send the buffer contents to the host */ strcpy_P(BufferDataStr, HTTP200Header);
TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));
/* Send the buffer contents to the host */
/* Lock the buffer to Device->Host transmissions only while we send the page contents */ TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));
TCP_APP_CAPTURE_BUFFER(Buffer);
/* 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")) else if (IsHTTPCommand(Buffer->Data, "HEAD"))
{ {
/* Copy the HTTP response header into the packet buffer */ if (IsHTTPCommand(Buffer->Data, "HEAD / "))
strcpy_P(BufferDataStr, HTTPHeader); {
/* Copy the HTTP response header into the packet buffer */
/* Send the buffer contents to the host */ strcpy_P(BufferDataStr, HTTP200Header);
TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));
/* 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")) else if (IsHTTPCommand(Buffer->Data, "TRACE"))
{ {
/* Echo the host's query back to the host */ /* Echo the host's query back to the host */
TCP_APP_SEND_BUFFER(Buffer, Buffer->Length); TCP_APP_SEND_BUFFER(Buffer, Buffer->Length);
/* All data sent, close the connection */
TCP_APP_CLOSECONNECTION(ConnectionState);
} }
else else
{ {

@ -35,6 +35,7 @@
* - Added new LEDs_ToggleLEDs() function to the LEDs driver * - Added new LEDs_ToggleLEDs() function to the LEDs driver
* - Added new Pipe_BoundEndpointNumber() and Pipe_IsEndpointBound() functions * - Added new Pipe_BoundEndpointNumber() and Pipe_IsEndpointBound() functions
* - Added new DEVICE_STATE_AS_GPIOR and HOST_STATE_AS_GPIOR compile time options * - Added new DEVICE_STATE_AS_GPIOR and HOST_STATE_AS_GPIOR compile time options
* - Added 404 errors to the Webserver in the RNDIS demos to indicate invalid URLs
* *
* <b>Changed:</b> * <b>Changed:</b>
* - Deprecated psuedo-scheduler and removed dynamic memory allocator from the library (first no longer needed and second unused) * - Deprecated psuedo-scheduler and removed dynamic memory allocator from the library (first no longer needed and second unused)

Loading…
Cancel
Save