diff -r 3c2ed7a7a5fd -r f4d56bf9de40 src/server/httprequest.c --- a/src/server/httprequest.c Wed Dec 28 10:57:36 2011 +0100 +++ b/src/server/httprequest.c Wed Dec 28 22:02:08 2011 +0100 @@ -147,9 +147,56 @@ hlen = ha->len; } + if(ha->headers[i].name[0] < 90) { + ha->headers[i].name[0] += 32; + } pblock_nvinsert(ha->headers[i].name, ha->headers[i].value, rq->rq.headers); } + /* check for request body and prepare input buffer */ + char *ctlen_str = pblock_findkeyval(pb_key_content_length, rq->rq.headers); + if(ctlen_str) { + int ctlen = atoi(ctlen_str); + + printf("request body length: %d\n", ctlen); + + netbuf *nb = request->netbuf; + + /* create new netbuf */ + NetIOStream *net_io = (NetIOStream*)net_stream_from_fd( + request->connection->fd); + net_io->max_read = ctlen; + + sn->sn.inbuf = malloc(sizeof(netbuf)); + sn->sn.inbuf->sd = net_io; + sn->sn.inbuf->pos = 0; + + /* prepare buffer */ + int cur_input_len = nb->cursize - nb->pos; + if(cur_input_len >= ctlen) { + + /* + * all data is already in the primary input buffer + * just link the new netbuf to the primary buffer + */ + sn->sn.inbuf->maxsize = ctlen; + sn->sn.inbuf->cursize = ctlen; + sn->sn.inbuf->inbuf = nb->inbuf + nb->pos; + } else { + sn->sn.inbuf->maxsize = (ctlen > 2048) ? (2048) : (ctlen); + sn->sn.inbuf->inbuf = malloc(sizeof(sn->sn.inbuf->maxsize)); + + if(cur_input_len > 0) { + /* we have read a part of the request body -> copy to netbuf */ + memcpy(sn->sn.inbuf->inbuf, nb->inbuf+nb->pos, cur_input_len); + } + + sn->sn.inbuf->cursize = cur_input_len; + } + } else { + sn->sn.inbuf = NULL; + } + // Send the request to the NSAPI system nsapi_handle_request(sn, rq);