From 81c461f5debeed7c4b5a10298942f85156b5c4e0 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Sat, 20 Feb 2016 08:02:49 +0800 Subject: [PATCH] lws_return_http_status send content length If we're sending content, we must do so with a content-length on http/1.1 Signed-off-by: Andy Green --- lib/header.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/header.c b/lib/header.c index 8c6b96e..55265fc 100644 --- a/lib/header.c +++ b/lib/header.c @@ -173,18 +173,23 @@ lws_add_http_header_status(struct lws *wsi, unsigned int code, * consistently */ LWS_VISIBLE int -lws_return_http_status(struct lws *wsi, unsigned int code, const char *html_body) +lws_return_http_status(struct lws *wsi, unsigned int code, + const char *html_body) { - int n, m; struct lws_context *context = lws_get_context(wsi); struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi]; unsigned char *p = pt->serv_buf + LWS_PRE; - unsigned char *start = p; + unsigned char *start = p, *body = p + 512; unsigned char *end = p + LWS_MAX_SOCKET_IO_BUF - LWS_PRE; + int n, m, len; + char slen[20]; if (!html_body) html_body = ""; + len = sprintf((char *)body, "

%u

%s", + code, html_body); + if (lws_add_http_header_status(wsi, code, &p, end)) return 1; if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_SERVER, @@ -195,6 +200,12 @@ lws_return_http_status(struct lws *wsi, unsigned int code, const char *html_body (unsigned char *)"text/html", 9, &p, end)) return 1; + n = sprintf(slen, "%d", len); + if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH, + (unsigned char *)slen, n, + &p, end)) + return 1; + if (lws_finalize_http_header(wsi, &p, end)) return 1; @@ -202,9 +213,7 @@ lws_return_http_status(struct lws *wsi, unsigned int code, const char *html_body if (m != (int)(p - start)) return 1; - n = sprintf((char *)start, "

%u

%s", - code, html_body); - m = lws_write(wsi, start, n, LWS_WRITE_HTTP); + m = lws_write(wsi, body, len, LWS_WRITE_HTTP); return m != n; } -- 2.7.4