summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrachenfels <drachu@gmail.com>2014-08-21 16:08:53 +0100
committerDrachenfels <drachu@gmail.com>2014-08-21 16:13:57 +0100
commitb86d1e39b9a201c0c6b97c29217ef112c850a6aa (patch)
treef42397415905d53b0b6ccecfcd6640e6abc4f4bc
parent89fa70706f9166765c3ac3f799225a467800f065 (diff)
Fixed copy process of stream of bytes for HttpClient.
===================================================== Previously if request was not chunked and longer than arbitrary chunk of 4096 bytes, rest was truncated. With this commit, we will copy everything we have in the memmory.
-rw-r--r--core/io/http_client.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/core/io/http_client.cpp b/core/io/http_client.cpp
index 27e202f47f..60a200af12 100644
--- a/core/io/http_client.cpp
+++ b/core/io/http_client.cpp
@@ -500,20 +500,24 @@ ByteArray HTTPClient::read_response_body_chunk() {
}
} else {
- ByteArray::Write r = tmp_read.write();
- int rec=0;
- err = connection->get_partial_data(r.ptr(),MIN(body_left,tmp_read.size()),rec);
- if (rec>0) {
- ByteArray ret;
- ret.resize(rec);
- ByteArray::Write w = ret.write();
- copymem(w.ptr(),r.ptr(),rec);
- body_left-=rec;
- if (body_left==0) {
- status=STATUS_CONNECTED;
+ ByteArray ret;
+ ret.resize(MAX(body_left,tmp_read.size()));
+ ByteArray::Write w = ret.write();
+ int _offset = 0;
+ while (body_left > 0) {
+ ByteArray::Write r = tmp_read.write();
+ int rec=0;
+ err = connection->get_partial_data(r.ptr(),MIN(body_left,tmp_read.size()),rec);
+ if (rec>0) {
+ copymem(w.ptr()+_offset,r.ptr(),rec);
+ body_left-=rec;
+ _offset += rec;
}
- return ret;
}
+ if (body_left==0) {
+ status=STATUS_CONNECTED;
+ }
+ return ret;
}