mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2025-08-07 15:04:39 +08:00
httpd: reverted accidentally committed change (came in with de9054cb7a7022f430c898bef29ec454b364b332 when fixing memp things)
This commit is contained in:
parent
00598b0b46
commit
ca71eea56f
@ -107,8 +107,6 @@
|
|||||||
#if LWIP_HTTPD_SUPPORT_11_KEEPALIVE
|
#if LWIP_HTTPD_SUPPORT_11_KEEPALIVE
|
||||||
#define HTTP11_CONNECTIONKEEPALIVE "Connection: keep-alive"
|
#define HTTP11_CONNECTIONKEEPALIVE "Connection: keep-alive"
|
||||||
#define HTTP11_CONNECTIONKEEPALIVE2 "Connection: Keep-Alive"
|
#define HTTP11_CONNECTIONKEEPALIVE2 "Connection: Keep-Alive"
|
||||||
#define HTTP11_CONNECTIONCLOSE "Connection: close"
|
|
||||||
#define HTTP11_CONNECTIONCLOSE2 "Connection: Close"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** These defines check whether tcp_write has to copy data or not */
|
/** These defines check whether tcp_write has to copy data or not */
|
||||||
@ -294,8 +292,8 @@ LWIP_MEMPOOL_DECLARE(HTTPD_SSI_STATE, MEMP_NUM_PARALLEL_HTTPD_SSI_CONNS, sizeof(
|
|||||||
|
|
||||||
static err_t http_close_conn(struct tcp_pcb *pcb, struct http_state *hs);
|
static err_t http_close_conn(struct tcp_pcb *pcb, struct http_state *hs);
|
||||||
static err_t http_close_or_abort_conn(struct tcp_pcb *pcb, struct http_state *hs, u8_t abort_conn);
|
static err_t http_close_or_abort_conn(struct tcp_pcb *pcb, struct http_state *hs, u8_t abort_conn);
|
||||||
static err_t http_find_file(struct http_state *hs, const char *uri, u8_t http_ver);
|
static err_t http_find_file(struct http_state *hs, const char *uri, int is_09);
|
||||||
static err_t http_init_file(struct http_state *hs, struct fs_file *file, u8_t http_ver, const char *uri, u8_t tag_check, char* params);
|
static err_t http_init_file(struct http_state *hs, struct fs_file *file, int is_09, const char *uri, u8_t tag_check, char* params);
|
||||||
static err_t http_poll(void *arg, struct tcp_pcb *pcb);
|
static err_t http_poll(void *arg, struct tcp_pcb *pcb);
|
||||||
static u8_t http_check_eof(struct tcp_pcb *pcb, struct http_state *hs);
|
static u8_t http_check_eof(struct tcp_pcb *pcb, struct http_state *hs);
|
||||||
#if LWIP_HTTPD_FS_ASYNC_READ
|
#if LWIP_HTTPD_FS_ASYNC_READ
|
||||||
@ -897,14 +895,13 @@ get_tag_insert(struct http_state *hs)
|
|||||||
* them into the supplied buffer.
|
* them into the supplied buffer.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
get_http_headers(struct http_state *hs, const char *uri, u8_t http_ver)
|
get_http_headers(struct http_state *hs, const char *uri)
|
||||||
{
|
{
|
||||||
size_t content_type;
|
size_t content_type;
|
||||||
char *tmp;
|
char *tmp;
|
||||||
char *ext;
|
char *ext;
|
||||||
char *vars;
|
char *vars;
|
||||||
u8_t add_content_len;
|
u8_t add_content_len;
|
||||||
int hdroffset11 = (http_ver >= 11) ? HTTP_HDR_OK_11 : 0;
|
|
||||||
|
|
||||||
/* In all cases, the second header we send is the server identification
|
/* In all cases, the second header we send is the server identification
|
||||||
so set it here. */
|
so set it here. */
|
||||||
@ -915,7 +912,7 @@ get_http_headers(struct http_state *hs, const char *uri, u8_t http_ver)
|
|||||||
/* Is this a normal file or the special case we use to send back the
|
/* Is this a normal file or the special case we use to send back the
|
||||||
default "404: Page not found" response? */
|
default "404: Page not found" response? */
|
||||||
if (uri == NULL) {
|
if (uri == NULL) {
|
||||||
hs->hdrs[HDR_STRINGS_IDX_HTTP_STATUS] = g_psHTTPHeaderStrings[HTTP_HDR_NOT_FOUND + hdroffset11];
|
hs->hdrs[HDR_STRINGS_IDX_HTTP_STATUS] = g_psHTTPHeaderStrings[HTTP_HDR_NOT_FOUND];
|
||||||
#if LWIP_HTTPD_SUPPORT_11_KEEPALIVE
|
#if LWIP_HTTPD_SUPPORT_11_KEEPALIVE
|
||||||
if (hs->keepalive) {
|
if (hs->keepalive) {
|
||||||
hs->hdrs[HDR_STRINGS_IDX_CONTENT_TYPE] = g_psHTTPHeaderStrings[DEFAULT_404_HTML_PERSISTENT];
|
hs->hdrs[HDR_STRINGS_IDX_CONTENT_TYPE] = g_psHTTPHeaderStrings[DEFAULT_404_HTML_PERSISTENT];
|
||||||
@ -935,13 +932,13 @@ get_http_headers(struct http_state *hs, const char *uri, u8_t http_ver)
|
|||||||
indicative of a 404 server error whereas all other files require
|
indicative of a 404 server error whereas all other files require
|
||||||
the 200 OK header. */
|
the 200 OK header. */
|
||||||
if (strstr(uri, "404")) {
|
if (strstr(uri, "404")) {
|
||||||
hs->hdrs[HDR_STRINGS_IDX_HTTP_STATUS] = g_psHTTPHeaderStrings[HTTP_HDR_NOT_FOUND + hdroffset11];
|
hs->hdrs[HDR_STRINGS_IDX_HTTP_STATUS] = g_psHTTPHeaderStrings[HTTP_HDR_NOT_FOUND];
|
||||||
} else if (strstr(uri, "400")) {
|
} else if (strstr(uri, "400")) {
|
||||||
hs->hdrs[HDR_STRINGS_IDX_HTTP_STATUS] = g_psHTTPHeaderStrings[HTTP_HDR_BAD_REQUEST + hdroffset11];
|
hs->hdrs[HDR_STRINGS_IDX_HTTP_STATUS] = g_psHTTPHeaderStrings[HTTP_HDR_BAD_REQUEST];
|
||||||
} else if (strstr(uri, "501")) {
|
} else if (strstr(uri, "501")) {
|
||||||
hs->hdrs[HDR_STRINGS_IDX_HTTP_STATUS] = g_psHTTPHeaderStrings[HTTP_HDR_NOT_IMPL + hdroffset11];
|
hs->hdrs[HDR_STRINGS_IDX_HTTP_STATUS] = g_psHTTPHeaderStrings[HTTP_HDR_NOT_IMPL];
|
||||||
} else {
|
} else {
|
||||||
hs->hdrs[HDR_STRINGS_IDX_HTTP_STATUS] = g_psHTTPHeaderStrings[HTTP_HDR_OK + hdroffset11];
|
hs->hdrs[HDR_STRINGS_IDX_HTTP_STATUS] = g_psHTTPHeaderStrings[HTTP_HDR_OK];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Determine if the URI has any variables and, if so, temporarily remove
|
/* Determine if the URI has any variables and, if so, temporarily remove
|
||||||
@ -2024,7 +2021,7 @@ http_parse_request(struct pbuf *inp, struct http_state *hs, struct tcp_pcb *pcb)
|
|||||||
#if LWIP_HTTPD_SUPPORT_POST
|
#if LWIP_HTTPD_SUPPORT_POST
|
||||||
int is_post = 0;
|
int is_post = 0;
|
||||||
#endif /* LWIP_HTTPD_SUPPORT_POST */
|
#endif /* LWIP_HTTPD_SUPPORT_POST */
|
||||||
u8_t http_ver = 0;
|
int is_09 = 0;
|
||||||
char *sp1, *sp2;
|
char *sp1, *sp2;
|
||||||
u16_t left_len, uri_len;
|
u16_t left_len, uri_len;
|
||||||
LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("CRLF received, parsing request\n"));
|
LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("CRLF received, parsing request\n"));
|
||||||
@ -2052,52 +2049,32 @@ http_parse_request(struct pbuf *inp, struct http_state *hs, struct tcp_pcb *pcb)
|
|||||||
/* if we come here, method is OK, parse URI */
|
/* if we come here, method is OK, parse URI */
|
||||||
left_len = (u16_t)(data_len - ((sp1 +1) - data));
|
left_len = (u16_t)(data_len - ((sp1 +1) - data));
|
||||||
sp2 = strnstr(sp1 + 1, " ", left_len);
|
sp2 = strnstr(sp1 + 1, " ", left_len);
|
||||||
if (sp2 == NULL) {
|
|
||||||
#if LWIP_HTTPD_SUPPORT_V09
|
#if LWIP_HTTPD_SUPPORT_V09
|
||||||
|
if (sp2 == NULL) {
|
||||||
/* HTTP 0.9: respond with correct protocol version */
|
/* HTTP 0.9: respond with correct protocol version */
|
||||||
sp2 = strnstr(sp1 + 1, CRLF, left_len);
|
sp2 = strnstr(sp1 + 1, CRLF, left_len);
|
||||||
http_ver = 9;
|
is_09 = 1;
|
||||||
#if LWIP_HTTPD_SUPPORT_POST
|
#if LWIP_HTTPD_SUPPORT_POST
|
||||||
if (is_post) {
|
if (is_post) {
|
||||||
/* HTTP/0.9 does not support POST */
|
/* HTTP/0.9 does not support POST */
|
||||||
goto badrequest;
|
goto badrequest;
|
||||||
}
|
}
|
||||||
#endif /* LWIP_HTTPD_SUPPORT_POST */
|
#endif /* LWIP_HTTPD_SUPPORT_POST */
|
||||||
#endif /* LWIP_HTTPD_SUPPORT_V09 */
|
|
||||||
} else {
|
|
||||||
if (strstr(sp2, " HTTP/1.") == sp2) {
|
|
||||||
char ver = sp2[8];
|
|
||||||
if ((ver >= '0') && (ver <= '9')) {
|
|
||||||
http_ver = 10 + (ver - '0');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
#endif /* LWIP_HTTPD_SUPPORT_V09 */
|
||||||
uri_len = (u16_t)(sp2 - (sp1 + 1));
|
uri_len = (u16_t)(sp2 - (sp1 + 1));
|
||||||
if ((sp2 != 0) && (sp2 > sp1)) {
|
if ((sp2 != 0) && (sp2 > sp1)) {
|
||||||
/* wait for CRLFCRLF (indicating end of HTTP headers) before parsing anything */
|
/* wait for CRLFCRLF (indicating end of HTTP headers) before parsing anything */
|
||||||
if (strnstr(data, CRLF CRLF, data_len) != NULL) {
|
if (strnstr(data, CRLF CRLF, data_len) != NULL) {
|
||||||
char *uri = sp1 + 1;
|
char *uri = sp1 + 1;
|
||||||
#if LWIP_HTTPD_SUPPORT_11_KEEPALIVE
|
#if LWIP_HTTPD_SUPPORT_11_KEEPALIVE
|
||||||
#if LWIP_HTTPD_SUPPORT_V09
|
/* This is HTTP/1.0 compatible: for strict 1.1, a connection
|
||||||
if (http_ver == 9) {
|
would always be persistent unless "close" was specified. */
|
||||||
hs->keepalive = 0;
|
if (!is_09 && (strnstr(data, HTTP11_CONNECTIONKEEPALIVE, data_len) ||
|
||||||
} else
|
strnstr(data, HTTP11_CONNECTIONKEEPALIVE2, data_len))) {
|
||||||
#endif /* LWIP_HTTPD_SUPPORT_V09 */
|
|
||||||
/* If the "close" connection option is present, the connection will not persist after the current response */
|
|
||||||
if (strnstr(data, HTTP11_CONNECTIONCLOSE, data_len) ||
|
|
||||||
strnstr(data, HTTP11_CONNECTIONCLOSE2, data_len)) {
|
|
||||||
hs->keepalive = 0;
|
|
||||||
} else if (http_ver >= 11) {
|
|
||||||
/* If the received protocol is HTTP/1.1 (or later), the connection will persist after the current response */
|
|
||||||
hs->keepalive = 1;
|
hs->keepalive = 1;
|
||||||
} else if (http_ver == 10) {
|
} else {
|
||||||
/* HTTP/1.1: keepalive supported when explicitly requested */
|
hs->keepalive = 0;
|
||||||
if (strnstr(data, HTTP11_CONNECTIONKEEPALIVE, data_len) ||
|
|
||||||
strnstr(data, HTTP11_CONNECTIONKEEPALIVE2, data_len)) {
|
|
||||||
hs->keepalive = 1;
|
|
||||||
} else {
|
|
||||||
hs->keepalive = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif /* LWIP_HTTPD_SUPPORT_11_KEEPALIVE */
|
#endif /* LWIP_HTTPD_SUPPORT_11_KEEPALIVE */
|
||||||
/* null-terminate the METHOD (pbuf is freed anyway wen returning) */
|
/* null-terminate the METHOD (pbuf is freed anyway wen returning) */
|
||||||
@ -2126,7 +2103,7 @@ http_parse_request(struct pbuf *inp, struct http_state *hs, struct tcp_pcb *pcb)
|
|||||||
} else
|
} else
|
||||||
#endif /* LWIP_HTTPD_SUPPORT_POST */
|
#endif /* LWIP_HTTPD_SUPPORT_POST */
|
||||||
{
|
{
|
||||||
return http_find_file(hs, uri, http_ver);
|
return http_find_file(hs, uri, is_09);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -2158,12 +2135,12 @@ badrequest:
|
|||||||
*
|
*
|
||||||
* @param hs the connection state
|
* @param hs the connection state
|
||||||
* @param uri the HTTP header URI
|
* @param uri the HTTP header URI
|
||||||
* @param http_ver major/minor version of the HTTP request ((major*10)+minor)
|
* @param is_09 1 if the request is HTTP/0.9 (no HTTP headers in response)
|
||||||
* @return ERR_OK if file was found and hs has been initialized correctly
|
* @return ERR_OK if file was found and hs has been initialized correctly
|
||||||
* another err_t otherwise
|
* another err_t otherwise
|
||||||
*/
|
*/
|
||||||
static err_t
|
static err_t
|
||||||
http_find_file(struct http_state *hs, const char *uri, u8_t http_ver)
|
http_find_file(struct http_state *hs, const char *uri, int is_09)
|
||||||
{
|
{
|
||||||
size_t loop;
|
size_t loop;
|
||||||
struct fs_file *file = NULL;
|
struct fs_file *file = NULL;
|
||||||
@ -2293,7 +2270,7 @@ http_find_file(struct http_state *hs, const char *uri, u8_t http_ver)
|
|||||||
/* None of the default filenames exist so send back a 404 page */
|
/* None of the default filenames exist so send back a 404 page */
|
||||||
file = http_get_404_file(hs, &uri);
|
file = http_get_404_file(hs, &uri);
|
||||||
}
|
}
|
||||||
return http_init_file(hs, file, http_ver, uri, tag_check, params);
|
return http_init_file(hs, file, is_09, uri, tag_check, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Initialize a http connection with a file to send (if found).
|
/** Initialize a http connection with a file to send (if found).
|
||||||
@ -2301,7 +2278,7 @@ http_find_file(struct http_state *hs, const char *uri, u8_t http_ver)
|
|||||||
*
|
*
|
||||||
* @param hs http connection state
|
* @param hs http connection state
|
||||||
* @param file file structure to send (or NULL if not found)
|
* @param file file structure to send (or NULL if not found)
|
||||||
* @param http_ver major/minor version of the HTTP request ((major*10)+minor)
|
* @param is_09 1 if the request is HTTP/0.9 (no HTTP headers in response)
|
||||||
* @param uri the HTTP header URI
|
* @param uri the HTTP header URI
|
||||||
* @param tag_check enable SSI tag checking
|
* @param tag_check enable SSI tag checking
|
||||||
* @param uri_has_params != NULL if URI has parameters (separated by '?')
|
* @param uri_has_params != NULL if URI has parameters (separated by '?')
|
||||||
@ -2309,7 +2286,7 @@ http_find_file(struct http_state *hs, const char *uri, u8_t http_ver)
|
|||||||
* another err_t otherwise
|
* another err_t otherwise
|
||||||
*/
|
*/
|
||||||
static err_t
|
static err_t
|
||||||
http_init_file(struct http_state *hs, struct fs_file *file, u8_t http_ver, const char *uri,
|
http_init_file(struct http_state *hs, struct fs_file *file, int is_09, const char *uri,
|
||||||
u8_t tag_check, char* params)
|
u8_t tag_check, char* params)
|
||||||
{
|
{
|
||||||
if (file != NULL) {
|
if (file != NULL) {
|
||||||
@ -2350,7 +2327,7 @@ http_init_file(struct http_state *hs, struct fs_file *file, u8_t http_ver, const
|
|||||||
(hs->handle->flags & FS_FILE_FLAGS_HEADER_INCLUDED) != 0);
|
(hs->handle->flags & FS_FILE_FLAGS_HEADER_INCLUDED) != 0);
|
||||||
#endif /* !LWIP_HTTPD_DYNAMIC_HEADERS */
|
#endif /* !LWIP_HTTPD_DYNAMIC_HEADERS */
|
||||||
#if LWIP_HTTPD_SUPPORT_V09
|
#if LWIP_HTTPD_SUPPORT_V09
|
||||||
if ((http_ver == 9) && ((hs->handle->flags & FS_FILE_FLAGS_HEADER_INCLUDED) != 0)) {
|
if (is_09 && ((hs->handle->flags & FS_FILE_FLAGS_HEADER_INCLUDED) != 0)) {
|
||||||
/* HTTP/0.9 responses are sent without HTTP header,
|
/* HTTP/0.9 responses are sent without HTTP header,
|
||||||
search for the end of the header. */
|
search for the end of the header. */
|
||||||
char *file_start = strnstr(hs->file, CRLF CRLF, hs->left);
|
char *file_start = strnstr(hs->file, CRLF CRLF, hs->left);
|
||||||
@ -2392,7 +2369,7 @@ http_init_file(struct http_state *hs, struct fs_file *file, u8_t http_ver, const
|
|||||||
/* Determine the HTTP headers to send based on the file extension of
|
/* Determine the HTTP headers to send based on the file extension of
|
||||||
* the requested URI. */
|
* the requested URI. */
|
||||||
if ((hs->handle == NULL) || ((hs->handle->flags & FS_FILE_FLAGS_HEADER_INCLUDED) == 0)) {
|
if ((hs->handle == NULL) || ((hs->handle->flags & FS_FILE_FLAGS_HEADER_INCLUDED) == 0)) {
|
||||||
get_http_headers(hs, uri, http_ver);
|
get_http_headers(hs, uri);
|
||||||
}
|
}
|
||||||
#else /* LWIP_HTTPD_DYNAMIC_HEADERS */
|
#else /* LWIP_HTTPD_DYNAMIC_HEADERS */
|
||||||
LWIP_UNUSED_ARG(uri);
|
LWIP_UNUSED_ARG(uri);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user