419 } |
418 } |
420 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); |
421 if(transfer_encoding) { |
420 if(transfer_encoding) { |
422 if(!strcmp(transfer_encoding, "chunked")) { |
421 if(!strcmp(transfer_encoding, "chunked")) { |
423 netbuf *nb = sn->netbuf; |
422 netbuf *nb = sn->netbuf; |
424 sn->buffer = (char*)nb->inbuf; |
423 sn->buffer = pool_malloc(pool, nb->maxsize); |
|
424 if(!sn->buffer) { |
|
425 pool_destroy(pool); |
|
426 // TODO: error 500 |
|
427 return 1; |
|
428 } |
|
429 if(nb->cursize - nb->pos > 0) { |
|
430 memcpy(sn->buffer, nb->inbuf, nb->cursize); |
|
431 } |
|
432 |
425 sn->pos = nb->pos; |
433 sn->pos = nb->pos; |
426 sn->cursize = nb->cursize; |
434 sn->cursize = nb->cursize; |
|
435 |
|
436 nb->pos = 0; |
|
437 nb->cursize = 0; |
427 |
438 |
428 if(httpstream_enable_chunked_read(sn->sn.csd, sn->buffer, nb->maxsize, &sn->cursize, &sn->pos)) { |
439 if(httpstream_enable_chunked_read(sn->sn.csd, sn->buffer, nb->maxsize, &sn->cursize, &sn->pos)) { |
429 pool_destroy(pool); |
440 pool_destroy(pool); |
430 // TODO: error 500 |
441 // TODO: error 500 |
431 return 1; |
442 return 1; |
432 } |
443 } |
433 } |
444 } // else: TODO: unknown transfer encoding error |
434 } |
445 } |
435 |
446 |
436 // |
447 // |
437 // Send the request to the NSAPI system |
448 // Send the request to the NSAPI system |
438 // |
449 // |