summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Ahltorp <map@kth.se>2017-03-06 01:38:33 +0100
committerMagnus Ahltorp <map@kth.se>2017-03-06 01:40:49 +0100
commitac37fedbe4249f5795795d722c8e72a0b8cc2e2f (patch)
treea9053d188ee5c3417c956cc7dd222fc5fa95e4e2
parent476b85d6cbe34b99c0ae6b126b1b6214bcd4b368 (diff)
Limit HTTP chunk size
-rw-r--r--src/plop_httputil.erl12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/plop_httputil.erl b/src/plop_httputil.erl
index 67e48ba..81a99b1 100644
--- a/src/plop_httputil.erl
+++ b/src/plop_httputil.erl
@@ -73,6 +73,16 @@ request(DebugTag, URL, Headers, <<>>) ->
request(DebugTag, URL, Headers, RequestBody) ->
request(DebugTag, URL, Headers, RequestBody, post).
+-define(MAX_CHUNK_SIZE, 512*1024).
+
+chunk_data(<<>>) ->
+ eof;
+chunk_data(Data) when is_binary(Data) ->
+ ChunkSize = min(size(Data), ?MAX_CHUNK_SIZE),
+ lager:debug("~p data left, sending ~p bytes", [size(Data), ChunkSize]),
+ {Chunk, Rest} = split_binary(Data, ChunkSize),
+ {ok, Chunk, Rest}.
+
request(DebugTag, URL, Headers, RequestBody, Method) ->
Starttime = os:timestamp(),
ParsedURL = hackney_url:parse_url(URL),
@@ -99,7 +109,7 @@ request(DebugTag, URL, Headers, RequestBody, Method) ->
{Method, Path,
add_auth(MethodString, Path, Headers,
RequestBody),
- RequestBody}),
+ {fun chunk_data/1, RequestBody}}),
lager:debug("~s: received headers for ~p: ~p",
[DebugTag, URL, RespHeaders]),
{ok, Body} = hackney:body(ClientRef),