diff --git a/src/lime/_internal/backend/native/NativeHTTPRequest.hx b/src/lime/_internal/backend/native/NativeHTTPRequest.hx index 8ea631f5e..92e4d737e 100644 --- a/src/lime/_internal/backend/native/NativeHTTPRequest.hx +++ b/src/lime/_internal/backend/native/NativeHTTPRequest.hx @@ -1,6 +1,7 @@ package lime._internal.backend.native; import haxe.io.Bytes; +import haxe.io.BytesBuffer; import haxe.Timer; import lime.app.Future; import lime.app.Promise; @@ -41,7 +42,8 @@ class NativeHTTPRequest private static var multiAddHandle:Deque; #end private static var cookieList:Array; - + + private var buffer:BytesBuffer = new BytesBuffer(); private var bytes:Bytes; private var bytesLoaded:Int; private var bytesTotal:Int; @@ -51,7 +53,6 @@ class NativeHTTPRequest private var promise:Promise; private var writeBytesLoaded:Int; private var writeBytesTotal:Int; - private var writePosition:Int; private var timeout:Timer; public function new() @@ -94,7 +95,6 @@ class NativeHTTPRequest bytesTotal = 0; writeBytesLoaded = 0; writeBytesTotal = 0; - writePosition = 0; if (curl == null) { @@ -349,6 +349,7 @@ class NativeHTTPRequest future.onComplete(function(bytes) { + bytes = buildBuffer(); if (bytes == null) { promise.complete(null); @@ -361,17 +362,12 @@ class NativeHTTPRequest return promise.future; } - - private function growBuffer(length:Int) - { - if (length > bytes.length) - { - var cacheBytes = bytes; - bytes = Bytes.alloc(length); - bytes.blit(0, cacheBytes, 0, cacheBytes.length); - } + + private function buildBuffer() { + bytes = buffer.getBytes(); + return bytes; } - + // Event Handlers private function curl_onHeader(curl:CURL, header:String):Void { @@ -399,11 +395,7 @@ class NativeHTTPRequest private function curl_onWrite(curl:CURL, output:Bytes):Int { - growBuffer(writePosition + output.length); - bytes.blit(writePosition, output, 0, output.length); - - writePosition += output.length; - + buffer.add(output); return output.length; } diff --git a/src/lime/net/HTTPRequest.hx b/src/lime/net/HTTPRequest.hx index ce5a0eaa7..f86e02aca 100644 --- a/src/lime/net/HTTPRequest.hx +++ b/src/lime/net/HTTPRequest.hx @@ -110,6 +110,10 @@ public function load(uri:String = null):Future future.onComplete(function(bytes) { + #if sys + bytes = @:privateAccess __backend.buildBuffer(); + #end + responseData = fromBytes(bytes); promise.complete(responseData); });