From 0e4265698022428205aeb0d790ce5f6861b528a7 Mon Sep 17 00:00:00 2001 From: Alexey Romanov Date: Tue, 19 Apr 2011 14:06:10 +0400 Subject: [PATCH 1/2] save_response_to_file option extended to support appending to an existing file --- src/ibrowse.erl | 2 +- src/ibrowse_http_client.erl | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ibrowse.erl b/src/ibrowse.erl index d219212..5ee5056 100644 --- a/src/ibrowse.erl +++ b/src/ibrowse.erl @@ -286,7 +286,7 @@ send_req(Url, Headers, Method, Body) -> %% Sock_opts = [Sock_opt] %% Sock_opt = term() %% ChunkSize = integer() -%% srtf() = boolean() | filename() +%% srtf() = boolean() | filename() | {append, filename()} %% filename() = string() %% response_format() = list | binary send_req(Url, Headers, Method, Body, Options) -> diff --git a/src/ibrowse_http_client.erl b/src/ibrowse_http_client.erl index eb2bf31..65f3bbc 100644 --- a/src/ibrowse_http_client.erl +++ b/src/ibrowse_http_client.erl @@ -357,7 +357,8 @@ accumulate_response(Data, tmp_file_fd = undefined} = CurReq, http_status_code=[$2 | _]}=State) when Srtf /= false -> TmpFilename = make_tmp_filename(Srtf), - case file:open(TmpFilename, [write, delayed_write, raw]) of + Mode = file_mode(Srtf), + case file:open(TmpFilename, [Mode, delayed_write, raw]) of {ok, Fd} -> accumulate_response(Data, State#state{ cur_req = CurReq#request{ @@ -434,8 +435,13 @@ make_tmp_filename(true) -> integer_to_list(B) ++ integer_to_list(C)]); make_tmp_filename(File) when is_list(File) -> + File; +make_tmp_filename({append, File}) when is_list(File) -> File. +file_mode({append, _File}) -> append; +file_mode(_Srtf) -> write. + %%-------------------------------------------------------------------- %% Handles the case when the server closes the socket From ee06a43ddb3a32443910f89227adced433c71c5d Mon Sep 17 00:00:00 2001 From: Filipe David Manana Date: Sun, 15 May 2011 04:58:02 +0100 Subject: [PATCH 2/2] Use queue:peek/1 - more efficient than hd(queue:to_list(Queue)) --- src/ibrowse_http_client.erl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ibrowse_http_client.erl b/src/ibrowse_http_client.erl index 65f3bbc..321753d 100644 --- a/src/ibrowse_http_client.erl +++ b/src/ibrowse_http_client.erl @@ -1366,10 +1366,10 @@ reset_state(State) -> }. set_cur_request(#state{reqs = Reqs, socket = Socket} = State) -> - case queue:to_list(Reqs) of - [] -> + case queue:peek(Reqs) of + empty -> State#state{cur_req = undefined}; - [#request{caller_controls_socket = Ccs} = NextReq | _] -> + {value, #request{caller_controls_socket = Ccs} = NextReq} -> case Ccs of true -> do_setopts(Socket, [{active, once}], State);