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.
This commit is contained in:
Drachenfels 2014-08-21 16:08:53 +01:00
parent 89fa70706f
commit b86d1e39b9
1 changed files with 16 additions and 12 deletions

View File

@ -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;
}