summaryrefslogtreecommitdiff
path: root/scene/main
diff options
context:
space:
mode:
authorFabio Alessandrelli <fabio.alessandrelli@gmail.com>2018-09-11 17:46:14 +0200
committerFabio Alessandrelli <fabio.alessandrelli@gmail.com>2018-09-12 12:42:48 +0200
commitab0e610e86d2e4b8a246ce9628749dd067fc9692 (patch)
treebe7f4f1b6c26a4a661f98e26551c730a30c9f907 /scene/main
parentc7fc3dcab3c030ba8428036f6cbb1350b5312f8e (diff)
Fix non chunked HTTP reading till eof.
Diffstat (limited to 'scene/main')
-rw-r--r--scene/main/http_request.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/scene/main/http_request.cpp b/scene/main/http_request.cpp
index 4750e05633..a9b7fba9c7 100644
--- a/scene/main/http_request.cpp
+++ b/scene/main/http_request.cpp
@@ -330,15 +330,13 @@ bool HTTPRequest::_update_connection() {
return true;
}
- if (client->is_response_chunked()) {
- body_len = -1; // No body len because chunked, change your webserver configuration if you want body len
- } else {
- body_len = client->get_response_body_length();
+ // No body len (-1) if chunked or no content-length header was provided.
+ // Change your webserver configuration if you want body len.
+ body_len = client->get_response_body_length();
- if (body_size_limit >= 0 && body_len > body_size_limit) {
- call_deferred("_request_done", RESULT_BODY_SIZE_LIMIT_EXCEEDED, response_code, response_headers, PoolByteArray());
- return true;
- }
+ if (body_size_limit >= 0 && body_len > body_size_limit) {
+ call_deferred("_request_done", RESULT_BODY_SIZE_LIMIT_EXCEEDED, response_code, response_headers, PoolByteArray());
+ return true;
}
if (download_to_file != String()) {
@@ -378,6 +376,9 @@ bool HTTPRequest::_update_connection() {
call_deferred("_request_done", RESULT_SUCCESS, response_code, response_headers, body);
return true;
}
+ } else if (client->get_status() == HTTPClient::STATUS_DISCONNECTED) {
+ // We read till EOF, with no errors. Request is done.
+ call_deferred("_request_done", RESULT_SUCCESS, response_code, response_headers, body);
}
return false;