diff options
author | Wolfgang Draxinger <Wolfgang.Draxinger@draxit.de> | 2013-06-18 22:16:22 +0200 |
---|---|---|
committer | Wolfgang Draxinger <Wolfgang.Draxinger@draxit.de> | 2013-06-18 22:16:22 +0200 |
commit | 06e7d4abafc176e6209772523640d3c5a1867fa7 (patch) | |
tree | c337e0c6cac439b90c2357c73e64d9ee6dba2901 /picohttp.c | |
parent | d8b0fcee5325f54ba48531d265f5d9823ebed9f3 (diff) | |
parent | c50c12e6206772273f62752c1c0091ac78698665 (diff) | |
download | litheweb-06e7d4abafc176e6209772523640d3c5a1867fa7.tar.gz litheweb-06e7d4abafc176e6209772523640d3c5a1867fa7.tar.bz2 |
Merge branch 'master' of github.com:datenwolf/picoweb
Diffstat (limited to 'picohttp.c')
-rw-r--r-- | picohttp.c | 34 |
1 files changed, 29 insertions, 5 deletions
@@ -21,6 +21,8 @@ static char const PICOHTTP_STR_SERVER[] = "Server"; static char const PICOHTTP_STR_PICOWEB[] = "picoweb/0.1"; static char const PICOHTTP_STR_ACCEPT[] = "Accept"; +static char const PICOHTTP_STR_TRANSFER[] = "Transfer"; + static char const PICOHTTP_STR__ENCODING[] = "-Encoding"; static char const PICOHTTP_STR_CONTENT[] = "Content"; @@ -41,11 +43,12 @@ static char const PICOHTTP_STR_CONNECTION[] = "Connection"; static char const PICOHTTP_STR_CLOSE[] = "close"; static char const PICOHTTP_STR_DATE[] = "Date"; - static char const PICOHTTP_STR_EXPECT[] = "Expect"; static char const PICOHTTP_STR_BOUNDARY[] = " boundary="; +static char const PICOHTTP_STR_CHUNKED[] = "chunked"; + #if !defined(PICOHTTP_CONFIG_HAVE_LIBDJB) /* Number formating functions modified from libdjb by * Daniel J. Bernstein, packaged at http://www.fefe.de/djb/ @@ -547,24 +550,45 @@ static void picohttpProcessContentType( static void picohttpProcessHeaderField( struct picohttpRequest * const req, - char const * const headername, - char const * const headervalue) + char const *headername, + char const *headervalue) { debug_printf("%s: %s\n", headername, headervalue); if(!strncmp(headername, PICOHTTP_STR_CONTENT, sizeof(PICOHTTP_STR_CONTENT)-1)) { + headername += sizeof(PICOHTTP_STR_CONTENT)-1; /* Content Length */ - if(!strncmp(headername + sizeof(PICOHTTP_STR_CONTENT)-1, + if(!strncmp(headername, PICOHTTP_STR__LENGTH, sizeof(PICOHTTP_STR__LENGTH)-1)) { req->query.contentlength = atol(headervalue); + return; } /* Content Type */ - if(!strncmp(headername + sizeof(PICOHTTP_STR_CONTENT)-1, + if(!strncmp(headername, PICOHTTP_STR__TYPE, sizeof(PICOHTTP_STR__TYPE)-1)) { picohttpProcessContentType(req, headervalue); + return; + } + return; + } + + if(!strncmp(headername, + PICOHTTP_STR_TRANSFER, + sizeof(PICOHTTP_STR_TRANSFER)-1)) { + headername += sizeof(PICOHTTP_STR_TRANSFER)-1; + /* Transfer Encoding */ + if(!strncmp(headername, + PICOHTTP_STR__ENCODING, sizeof(PICOHTTP_STR__ENCODING)-1)) { + if(!strncmp(headervalue, + PICOHTTP_STR_CHUNKED, + sizeof(PICOHTTP_STR_CHUNKED)-1)) { + req->query.transferencoding = PICOHTTP_CODING_CHUNKED; + } + return; } + return; } } |