src/server/daemon/httprequest.c

changeset 449
a28a5ccc894b
parent 448
02b003f7560c
child 460
b9a447b02046
equal deleted inserted replaced
448:02b003f7560c 449:a28a5ccc894b
418 } 418 }
419 char *transfer_encoding = pblock_findkeyval(pb_key_transfer_encoding, rq->rq.headers); 419 char *transfer_encoding = pblock_findkeyval(pb_key_transfer_encoding, rq->rq.headers);
420 if(transfer_encoding) { 420 if(transfer_encoding) {
421 if(!strcmp(transfer_encoding, "chunked")) { 421 if(!strcmp(transfer_encoding, "chunked")) {
422 netbuf *nb = sn->netbuf; 422 netbuf *nb = sn->netbuf;
423 // a separate buffer is required for reading chunked transfer enc
423 sn->buffer = pool_malloc(pool, nb->maxsize); 424 sn->buffer = pool_malloc(pool, nb->maxsize);
424 if(!sn->buffer) { 425 if(!sn->buffer) {
425 pool_destroy(pool); 426 pool_destroy(pool);
426 // TODO: error 500 427 // TODO: error 500
427 return 1; 428 return 1;
428 } 429 }
430
431 // copy remaining bytes from inbuf to the additional buffer
429 if(nb->cursize - nb->pos > 0) { 432 if(nb->cursize - nb->pos > 0) {
430 memcpy(sn->buffer, nb->inbuf, nb->cursize); 433 memcpy(sn->buffer, nb->inbuf, nb->cursize);
431 } 434 }
432 435
433 sn->pos = nb->pos; 436 sn->pos = nb->pos;
434 sn->cursize = nb->cursize; 437 sn->cursize = nb->cursize;
435 438
439 // clear inbuf
436 nb->pos = 0; 440 nb->pos = 0;
437 nb->cursize = 0; 441 nb->cursize = 0;
438 442
439 if(httpstream_enable_chunked_read(sn->sn.csd, sn->buffer, nb->maxsize, &sn->cursize, &sn->pos)) { 443 if(httpstream_enable_chunked_read(sn->sn.csd, sn->buffer, nb->maxsize, &sn->cursize, &sn->pos)) {
440 pool_destroy(pool); 444 pool_destroy(pool);

mercurial