Exatract handle_response function
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/repo Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/commit/e7647e38 Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/e7647e38 Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/e7647e38 Branch: refs/heads/split_out_httpd_stack Commit: e7647e3809c804389bf5c6883425676e9658a343 Parents: 79084ea Author: ILYA Khlopotov <iil...@ca.ibm.com> Authored: Fri Feb 26 10:33:22 2016 -0800 Committer: ILYA Khlopotov <iil...@ca.ibm.com> Committed: Tue Mar 1 08:35:08 2016 -0800 ---------------------------------------------------------------------- src/couch_httpd.erl | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/e7647e38/src/couch_httpd.erl ---------------------------------------------------------------------- diff --git a/src/couch_httpd.erl b/src/couch_httpd.erl index f863359..d43fe87 100644 --- a/src/couch_httpd.erl +++ b/src/couch_httpd.erl @@ -120,33 +120,24 @@ resp=nil }). -start_response_length(#httpd{mochi_req=MochiReq}=Req, Code, Headers0, Length) -> - log_request(Req, Code), - couch_stats:increment_counter([couchdb, httpd_status_codes, Code]), - Headers1 = add_headers(Req, Headers0), - Resp = MochiReq:start_response_length({Code, Headers1, Length}), +start_response_length(#httpd{mochi_req=MochiReq}=Req, Code, Headers, Length) -> + Resp = handle_response(Req, Code, Headers, Length, start_response_length), case MochiReq:get(method) of 'HEAD' -> throw({http_head_abort, Resp}); _ -> ok end, {ok, Resp}. -start_response(#httpd{mochi_req=MochiReq}=Req, Code, Headers0) -> - log_request(Req, Code), - couch_stats:increment_counter([couchdb, httpd_status_codes, Code]), - Headers1 = add_headers(Req, Headers0), - Resp = MochiReq:start_response({Code, Headers1}), +start_response(#httpd{mochi_req=MochiReq}=Req, Code, Headers) -> + Resp = handle_response(Req, Code, Headers, undefined, start_response), case MochiReq:get(method) of 'HEAD' -> throw({http_head_abort, Resp}); _ -> ok end, {ok, Resp}. -start_chunked_response(#httpd{mochi_req=MochiReq}=Req, Code, Headers0) -> - log_request(Req, Code), - couch_stats:increment_counter([couchdb, httpd_status_codes, Code]), - Headers1 = add_headers(Req, Headers0), - Resp = MochiReq:respond({Code, Headers1, chunked}), +start_chunked_response(#httpd{mochi_req=MochiReq}=Req, Code, Headers) -> + Resp = handle_response(Req, Code, Headers, chunked, respond), case MochiReq:get(method) of 'HEAD' -> throw({http_head_abort, Resp}); _ -> ok @@ -208,17 +199,15 @@ start_delayed_json_response(Req, Code, Headers, FirstChunk) -> headers = Headers, first_chunk = FirstChunk}}. -send_response(#httpd{mochi_req=MochiReq}=Req, Code, Headers0, Body) -> - log_request(Req, Code), - couch_stats:increment_counter([couchdb, httpd_status_codes, Code]), +send_response(#httpd{}=Req, Code, Headers, Body) -> + Resp = handle_response(Req, Code, Headers, Body, respond), if Code >= 500 -> couch_log:error("httpd ~p error response:~n ~s", [Code, Body]); Code >= 400 -> couch_log:debug("httpd ~p error response:~n ~s", [Code, Body]); true -> ok end, - Headers1 = add_headers(Req, Headers0), - {ok, MochiReq:respond({Code, Headers1, Body})}. + {ok, Resp}. send_json(Req, Value) -> send_json(Req, 200, Value). @@ -952,6 +941,17 @@ validate_callback([Char | Rest]) -> end, validate_callback(Rest). +handle_response(Req, Code, Headers0, Args, Type) -> + log_request(Req, Code), + couch_stats:increment_counter([couchdb, httpd_status_codes, Code]), + Headers1 = add_headers(Req, Headers0), + respond_(Req, Code, Headers1, Args, Type). + +respond_(#httpd{mochi_req = MochiReq}, Code, Headers, _Args, start_response) -> + MochiReq:start_response({Code, Headers}); +respond_(#httpd{mochi_req = MochiReq}, Code, Headers, Args, Type) -> + MochiReq:Type({Code, Headers, Args}). + %%%%%%%% module tests below %%%%%%%% -ifdef(TEST).