Reduce stack usage
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@2028 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
0810fcb7cb
commit
2205249a76
@ -283,6 +283,8 @@ static const char html_endbody[] = "</BODY>\r\n";
|
|||||||
static const char html_hdr2[] = "<H2>";
|
static const char html_hdr2[] = "<H2>";
|
||||||
static const char html_endhdr2[] = "</H2>";
|
static const char html_endhdr2[] = "</H2>";
|
||||||
|
|
||||||
|
static const char *index_names[] = { CONFIG_THTTPD_INDEX_NAMES };
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Functions
|
* Private Functions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -398,14 +400,13 @@ static void send_mime(httpd_conn *hc, int status, const char *title, const char
|
|||||||
{
|
{
|
||||||
struct timeval now;
|
struct timeval now;
|
||||||
const char *rfc1123fmt = "%a, %d %b %Y %H:%M:%S GMT";
|
const char *rfc1123fmt = "%a, %d %b %Y %H:%M:%S GMT";
|
||||||
char nowbuf[100];
|
char tmbuf[72];
|
||||||
char modbuf[100];
|
|
||||||
#ifdef CONFIG_THTTPD_MAXAGE
|
#ifdef CONFIG_THTTPD_MAXAGE
|
||||||
time_t expires;
|
time_t expires;
|
||||||
char expbuf[100];
|
char expbuf[72];
|
||||||
#endif
|
#endif
|
||||||
char fixed_type[500];
|
char fixed_type[72];
|
||||||
char buf[1000];
|
char buf[128];
|
||||||
int partial_content;
|
int partial_content;
|
||||||
int s100;
|
int s100;
|
||||||
|
|
||||||
@ -435,51 +436,52 @@ static void send_mime(httpd_conn *hc, int status, const char *title, const char
|
|||||||
mod = now.tv_sec;
|
mod = now.tv_sec;
|
||||||
}
|
}
|
||||||
|
|
||||||
(void)strftime(nowbuf, sizeof(nowbuf), rfc1123fmt, gmtime(&now.tv_sec));
|
|
||||||
(void)strftime(modbuf, sizeof(modbuf), rfc1123fmt, gmtime(&mod));
|
|
||||||
(void)snprintf(fixed_type, sizeof(fixed_type), type, CONFIG_THTTPD_CHARSET);
|
(void)snprintf(fixed_type, sizeof(fixed_type), type, CONFIG_THTTPD_CHARSET);
|
||||||
(void)snprintf(buf, sizeof(buf),
|
(void)snprintf(buf, sizeof(buf), "%.20s %d %s\r\n", hc->protocol, status, title);
|
||||||
"%.20s %d %s\015\012"
|
|
||||||
"Server: %s\015\012"
|
|
||||||
"Content-Type: %s\015\012"
|
|
||||||
"Date: %s\015\012"
|
|
||||||
"Last-Modified: %s\015\012"
|
|
||||||
"Accept-Ranges: bytes\015\012"
|
|
||||||
"Connection: close\015\012",
|
|
||||||
hc->protocol, status, title, "thttpd", fixed_type, nowbuf, modbuf);
|
|
||||||
add_response(hc, buf);
|
add_response(hc, buf);
|
||||||
|
(void)snprintf(buf, sizeof(buf), "Server: %s\r\n", "thttpd");
|
||||||
|
add_response(hc, buf);
|
||||||
|
(void)snprintf(buf, sizeof(buf), "Content-Type: %s\r\n", fixed_type);
|
||||||
|
add_response(hc, buf);
|
||||||
|
(void)strftime(tmbuf, sizeof(tmbuf), rfc1123fmt, gmtime(&now.tv_sec));
|
||||||
|
(void)snprintf(buf, sizeof(buf), "Date: %s\r\n", tmbuf);
|
||||||
|
add_response(hc, buf);
|
||||||
|
(void)strftime(tmbuf, sizeof(tmbuf), rfc1123fmt, gmtime(&mod));
|
||||||
|
(void)snprintf(buf, sizeof(buf), "Last-Modified: %s\r\n", tmbuf);
|
||||||
|
add_response(hc, buf);
|
||||||
|
add_response(hc, "Accept-Ranges: bytes\r\n");
|
||||||
|
add_response(hc, "Connection: close\r\n");
|
||||||
|
|
||||||
s100 = status / 100;
|
s100 = status / 100;
|
||||||
if (s100 != 2 && s100 != 3)
|
if (s100 != 2 && s100 != 3)
|
||||||
{
|
{
|
||||||
(void)snprintf(buf, sizeof(buf), "Cache-Control: no-cache,no-store\015\012");
|
(void)snprintf(buf, sizeof(buf), "Cache-Control: no-cache,no-store\r\n");
|
||||||
add_response(hc, buf);
|
add_response(hc, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (encodings[0] != '\0')
|
if (encodings[0] != '\0')
|
||||||
{
|
{
|
||||||
(void)snprintf(buf, sizeof(buf), "Content-Encoding: %s\015\012", encodings);
|
(void)snprintf(buf, sizeof(buf), "Content-Encoding: %s\r\n", encodings);
|
||||||
add_response(hc, buf);
|
add_response(hc, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (partial_content)
|
if (partial_content)
|
||||||
{
|
{
|
||||||
(void)snprintf(buf, sizeof(buf),
|
(void)snprintf(buf, sizeof(buf),"Content-Range: bytes %ld-%ld/%ld\r\n",
|
||||||
"Content-Range: bytes %lld-%lld/%lld\015\012"
|
(long)hc->range_start, (long)hc->range_end, (long)length);
|
||||||
"Content-Length: %lld\015\012",
|
add_response(hc, buf);
|
||||||
(sint16) hc->range_start,
|
(void)snprintf(buf, sizeof(buf),"Content-Length: %ld\r\n",
|
||||||
(sint16) hc->range_end, (sint16) length,
|
(long)(hc->range_end - hc->range_start + 1));
|
||||||
(sint16) (hc->range_end - hc->range_start + 1));
|
|
||||||
add_response(hc, buf);
|
add_response(hc, buf);
|
||||||
}
|
}
|
||||||
else if (length >= 0)
|
else if (length >= 0)
|
||||||
{
|
{
|
||||||
(void)snprintf(buf, sizeof(buf), "Content-Length: %lld\015\012", (sint16) length);
|
(void)snprintf(buf, sizeof(buf), "Content-Length: %ld\r\n", (long)length);
|
||||||
add_response(hc, buf);
|
add_response(hc, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_THTTPD_P3P
|
#ifdef CONFIG_THTTPD_P3P
|
||||||
(void)snprintf(buf, sizeof(buf), "P3P: %s\015\012", CONFIG_THTTPD_P3P);
|
(void)snprintf(buf, sizeof(buf), "P3P: %s\r\n", CONFIG_THTTPD_P3P);
|
||||||
add_response(hc, buf);
|
add_response(hc, buf);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -487,7 +489,7 @@ static void send_mime(httpd_conn *hc, int status, const char *title, const char
|
|||||||
expires = now + CONFIG_THTTPD_MAXAGE;
|
expires = now + CONFIG_THTTPD_MAXAGE;
|
||||||
(void)strftime(expbuf, sizeof(expbuf), rfc1123fmt, gmtime(&expires));
|
(void)strftime(expbuf, sizeof(expbuf), rfc1123fmt, gmtime(&expires));
|
||||||
(void)snprintf(buf, sizeof(buf),
|
(void)snprintf(buf, sizeof(buf),
|
||||||
"Cache-Control: max-age=%d\015\012Expires: %s\015\012",
|
"Cache-Control: max-age=%d\r\nExpires: %s\r\n",
|
||||||
CONFIG_THTTPD_MAXAGE, expbuf);
|
CONFIG_THTTPD_MAXAGE, expbuf);
|
||||||
add_response(hc, buf);
|
add_response(hc, buf);
|
||||||
#endif
|
#endif
|
||||||
@ -496,7 +498,7 @@ static void send_mime(httpd_conn *hc, int status, const char *title, const char
|
|||||||
{
|
{
|
||||||
add_response(hc, extraheads);
|
add_response(hc, extraheads);
|
||||||
}
|
}
|
||||||
add_response(hc, "\015\012");
|
add_response(hc, "\r\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -619,7 +621,7 @@ static void send_authenticate(httpd_conn *hc, char *realm)
|
|||||||
static char headstr[] = "WWW-Authenticate: Basic realm=\"";
|
static char headstr[] = "WWW-Authenticate: Basic realm=\"";
|
||||||
|
|
||||||
httpd_realloc_str(&header, &maxheader, sizeof(headstr) + strlen(realm) + 3);
|
httpd_realloc_str(&header, &maxheader, sizeof(headstr) + strlen(realm) + 3);
|
||||||
(void)snprintf(header, maxheader, "%s%s\"\015\012", headstr, realm);
|
(void)snprintf(header, maxheader, "%s%s\"\r\n", headstr, realm);
|
||||||
httpd_send_err(hc, 401, err401title, header, err401form, hc->encodedurl);
|
httpd_send_err(hc, 401, err401title, header, err401form, hc->encodedurl);
|
||||||
|
|
||||||
/* If the request was a POST then there might still be data to be read, so
|
/* If the request was a POST then there might still be data to be read, so
|
||||||
@ -967,7 +969,7 @@ static void send_dirredirect(httpd_conn *hc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
httpd_realloc_str(&header, &maxheader, sizeof(headstr) + strlen(location));
|
httpd_realloc_str(&header, &maxheader, sizeof(headstr) + strlen(location));
|
||||||
(void)snprintf(header, maxheader, "%s%s\015\012", headstr, location);
|
(void)snprintf(header, maxheader, "%s%s\r\n", headstr, location);
|
||||||
send_response(hc, 302, err302title, header, err302form, location);
|
send_response(hc, 302, err302title, header, err302form, location);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2425,7 +2427,7 @@ static inline int cgi_interpose_output(httpd_conn *hc, int rfd, char *inbuffer,
|
|||||||
|
|
||||||
/* Check for end of header */
|
/* Check for end of header */
|
||||||
|
|
||||||
if ((br = strstr(hdr->buffer, "\015\012\015\012")) != NULL ||
|
if ((br = strstr(hdr->buffer, "\r\n\r\n")) != NULL ||
|
||||||
(br = strstr(hdr->buffer, "\012\012")) != NULL)
|
(br = strstr(hdr->buffer, "\012\012")) != NULL)
|
||||||
{
|
{
|
||||||
nvdbg("End-of-header\n");
|
nvdbg("End-of-header\n");
|
||||||
@ -2538,7 +2540,7 @@ static inline int cgi_interpose_output(httpd_conn *hc, int rfd, char *inbuffer,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
(void)snprintf(inbuffer, sizeof(inbuffer), "HTTP/1.0 %d %s\015\012", status, title);
|
(void)snprintf(inbuffer, sizeof(inbuffer), "HTTP/1.0 %d %s\r\n", status, title);
|
||||||
(void)httpd_write(hc->conn_fd, inbuffer, strlen(inbuffer));
|
(void)httpd_write(hc->conn_fd, inbuffer, strlen(inbuffer));
|
||||||
|
|
||||||
/* Write the saved hdr->buffer to the client. */
|
/* Write the saved hdr->buffer to the client. */
|
||||||
@ -4167,8 +4169,6 @@ int httpd_start_request(httpd_conn *hc, struct timeval *nowP)
|
|||||||
{
|
{
|
||||||
static char *indexname;
|
static char *indexname;
|
||||||
static size_t maxindexname = 0;
|
static size_t maxindexname = 0;
|
||||||
static const char *index_names[] = { CONFIG_THTTPD_INDEX_NAMES };
|
|
||||||
int i;
|
|
||||||
#ifdef CONFIG_THTTPD_AUTH_FILE
|
#ifdef CONFIG_THTTPD_AUTH_FILE
|
||||||
static char *dirname;
|
static char *dirname;
|
||||||
static size_t maxdirname = 0;
|
static size_t maxdirname = 0;
|
||||||
@ -4176,6 +4176,7 @@ int httpd_start_request(httpd_conn *hc, struct timeval *nowP)
|
|||||||
size_t expnlen, indxlen;
|
size_t expnlen, indxlen;
|
||||||
char *cp;
|
char *cp;
|
||||||
char *pi;
|
char *pi;
|
||||||
|
int i;
|
||||||
|
|
||||||
nvdbg("File: \"%s\"\n", hc->expnfilename);
|
nvdbg("File: \"%s\"\n", hc->expnfilename);
|
||||||
expnlen = strlen(hc->expnfilename);
|
expnlen = strlen(hc->expnfilename);
|
||||||
|
@ -524,14 +524,14 @@ errout_clear_connection:
|
|||||||
|
|
||||||
static void handle_linger(struct connect_s *conn, struct timeval *tv)
|
static void handle_linger(struct connect_s *conn, struct timeval *tv)
|
||||||
{
|
{
|
||||||
char buf[4096];
|
httpd_conn *hc = conn->hc;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* In lingering-close mode we just read and ignore bytes. An error or EOF
|
/* In lingering-close mode we just read and ignore bytes. An error or EOF
|
||||||
* ends things, otherwise we go until a timeout
|
* ends things, otherwise we go until a timeout
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ret = read(conn->hc->conn_fd, buf, sizeof(buf));
|
ret = read(conn->hc->conn_fd, hc->buffer, CONFIG_THTTPD_IOBUFFERSIZE);
|
||||||
if (ret < 0 && (errno == EINTR || errno == EAGAIN))
|
if (ret < 0 && (errno == EINTR || errno == EAGAIN))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user