src/server/proxy/httpclient.c

changeset 715
30732c5b292c
parent 708
027b16665f13
equal deleted inserted replaced
714:fe4d14625245 715:30732c5b292c
611 return 1; 611 return 1;
612 } 612 }
613 client->transfer2_buffer_alloc = HTTP_CLIENT_BUFFER_SIZE; 613 client->transfer2_buffer_alloc = HTTP_CLIENT_BUFFER_SIZE;
614 client->transfer2_buffer_len = 0; 614 client->transfer2_buffer_len = 0;
615 client->transfer2_buffer_pos = 0; 615 client->transfer2_buffer_pos = 0;
616
617 IOStream *fd = Sysstream_new(NULL, client->socketfd);
618 if(!fd) {
619 client->error = 1;
620 return 1;
621 }
622 HttpStream *http = (HttpStream*)httpstream_new(NULL, fd);
623 if(!http) {
624 fd->free(fd);
625 }
626 if(client->buffer.pos < client->buffer.cursize) {
627 // bytes remaining in the buffer -> enable buffered reading
628 httpstream_enable_buffered_read(
629 &http->st,
630 (char*)client->buffer.inbuf,
631 client->buffer.maxsize,
632 &client->buffer.cursize,
633 &client->buffer.pos);
634 }
635 client->stream = http;
616 } else { 636 } else {
617 // error: unknown protocol 637 // error: unknown protocol
618 log_ereport(LOG_FAILURE, "http-client: unknown protocol upgrade: %.*s", (int)hdr_upgrade.length, hdr_upgrade.ptr); 638 log_ereport(LOG_FAILURE, "http-client: unknown protocol upgrade: %.*s", (int)hdr_upgrade.length, hdr_upgrade.ptr);
619 client->error = 1; 639 client->error = 1;
620 return 1; 640 return 1;
628 HttpStream *http = (HttpStream*)httpstream_new(NULL, fd); 648 HttpStream *http = (HttpStream*)httpstream_new(NULL, fd);
629 if(!http) { 649 if(!http) {
630 fd->free(fd); 650 fd->free(fd);
631 } 651 }
632 652
633 // we can reuse the already allocated transfer_bufer for transfer2 653 // we can reuse the already allocated transfer_buffer for transfer2
634 client->transfer2_buffer = client->transfer_buffer; 654 client->transfer2_buffer = client->transfer_buffer;
635 client->transfer2_buffer_alloc = client->transfer_buffer_alloc; 655 client->transfer2_buffer_alloc = client->transfer_buffer_alloc;
636 client->transfer2_buffer_len = 0; 656 client->transfer2_buffer_len = 0;
637 client->transfer_buffer_pos = 0; 657 client->transfer_buffer_pos = 0;
638 client->transfer_buffer = NULL; 658 client->transfer_buffer = NULL;
639 client->transfer_buffer_alloc = 0; 659 client->transfer_buffer_alloc = 0;
640 660
641 if(contentlength > 0) { 661 if(contentlength > 0) {
642 http->max_read = contentlength; 662 http->max_read = contentlength;
643 httpstream_enable_buffered_read(&http->st, (char*)client->buffer.inbuf, client->buffer.maxsize, &client->buffer.cursize, &client->buffer.pos); 663 httpstream_enable_buffered_read(
664 &http->st,
665 (char*)client->buffer.inbuf,
666 client->buffer.maxsize,
667 &client->buffer.cursize,
668 &client->buffer.pos);
644 } else if(chunkedtransferenc) { 669 } else if(chunkedtransferenc) {
645 httpstream_enable_chunked_read(&http->st, (char*)client->buffer.inbuf, client->buffer.maxsize, &client->buffer.cursize, &client->buffer.pos); 670 httpstream_enable_chunked_read(
671 &http->st,
672 (char*)client->buffer.inbuf,
673 client->buffer.maxsize,
674 &client->buffer.cursize,
675 &client->buffer.pos);
646 } 676 }
647 client->stream = http; 677 client->stream = http;
648 } 678 }
649 679
650 return 0; 680 return 0;

mercurial