Merge start_chunked_response/3 and send_response/4

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/38073bb9
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/38073bb9
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/38073bb9

Branch: refs/heads/split_out_httpd_stack
Commit: 38073bb988e47a40c50131d2fdbf597e11914db8
Parents: cf6dead
Author: ILYA Khlopotov <iil...@ca.ibm.com>
Authored: Thu Feb 25 11:52:34 2016 -0800
Committer: ILYA Khlopotov <iil...@ca.ibm.com>
Committed: Tue Mar 1 08:35:07 2016 -0800

----------------------------------------------------------------------
 src/couch_httpd.erl          | 46 ++++++++++++++++++++++-----
 src/couch_httpd_original.erl | 65 +++------------------------------------
 2 files changed, 43 insertions(+), 68 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/38073bb9/src/couch_httpd.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd.erl b/src/couch_httpd.erl
index 90016f0..aff29fe 100644
--- a/src/couch_httpd.erl
+++ b/src/couch_httpd.erl
@@ -143,11 +143,13 @@ start_response(#httpd{mochi_req=MochiReq}=Req, Code, 
Headers) ->
     {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 = Headers0 ++ server_header() ++
-        couch_httpd_auth:cookie_auth_header(Req, Headers0),
-    Headers2 = couch_httpd_cors:headers(Req, Headers1),
-    Resp = MochiReq:respond({Code, Headers2, chunked}),
+    Headers1 = http_1_0_keep_alive(MochiReq, Headers0),
+    Headers2 = Headers1 ++ server_header() ++
+        couch_httpd_auth:cookie_auth_header(Req, Headers1),
+    Headers3 = couch_httpd_cors:headers(Req, Headers2),
+    Resp = MochiReq:respond({Code, Headers3, chunked}),
     case MochiReq:get(method) of
     'HEAD' -> throw({http_head_abort, Resp});
     _ -> ok
@@ -210,11 +212,21 @@ start_delayed_json_response(Req, Code, Headers, 
FirstChunk) ->
         headers = Headers,
         first_chunk = FirstChunk}}.
 
-send_response(#httpd{mochi_req=MochiReq}=Req, Code, Headers0, Body) ->
+send_response(#httpd{mochi_req=MochiReq}=Req, Code, Headers, Body) ->
+    log_request(Req, Code),
     couch_stats:increment_counter([couchdb, httpd_status_codes, Code]),
-    Headers = Headers0 ++ server_header() ++
-       [timing(), reqid() | couch_httpd_auth:cookie_auth_header(Req, 
Headers0)],
-    {ok, MochiReq:respond({Code, Headers, Body})}.
+    Headers1 = http_1_0_keep_alive(MochiReq, Headers),
+    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,
+    Headers2 = Headers1 ++ server_header() ++
+               [timing(), reqid() | couch_httpd_auth:cookie_auth_header(Req, 
Headers1)],
+    Headers3 = couch_httpd_cors:cors_headers(Req, Headers2),
+
+    {ok, MochiReq:respond({Code, Headers3, Body})}.
 
 send_json(Req, Value) ->
     send_json(Req, 200, Value).
@@ -822,6 +834,24 @@ end_jsonp() ->
         _ -> ");"
     end.
 
+http_1_0_keep_alive(Req, Headers) ->
+    KeepOpen = Req:should_close() == false,
+    IsHttp10 = Req:get(version) == {1, 0},
+    NoRespHeader = no_resp_conn_header(Headers),
+    case KeepOpen andalso IsHttp10 andalso NoRespHeader of
+        true -> [{"Connection", "Keep-Alive"} | Headers];
+        false -> Headers
+    end.
+
+no_resp_conn_header([]) ->
+    true;
+no_resp_conn_header([{Hdr, _} | Rest]) ->
+    case string:to_lower(Hdr) of
+        "connection" -> false;
+        _ -> no_resp_conn_header(Rest)
+    end.
+
+
 negotiate_content_type(_Req) ->
     case get(jsonp) of
         no_jsonp -> "application/json";

http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/38073bb9/src/couch_httpd_original.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_original.erl b/src/couch_httpd_original.erl
index 8195e46..29f9845 100644
--- a/src/couch_httpd_original.erl
+++ b/src/couch_httpd_original.erl
@@ -20,10 +20,9 @@
 -export([make_fun_spec_strs/1]).
 
 
--export([start_chunked_response/3]).
--export([send_response/4,send_error/2,send_error/4, send_chunked_error/2]).
+-export([send_error/2,send_error/4, send_chunked_error/2]).
 -export([accepted_encodings/1,handle_request_int/5,validate_referer/1]).
--export([http_1_0_keep_alive/2]).
+
 -export([validate_host/1]).
 -export([validate_bind_address/1]).
 
@@ -69,7 +68,9 @@
     start_reponse/3,
     start_response_length/4,
     send_chunk/2,
-    etag_maybe/2
+    etag_maybe/2,
+    send_response/4,
+    start_chunked_response/3
 ]).
 
 -define(HANDLER_NAME_IN_MODULE_POS, 6).
@@ -487,62 +488,6 @@ verify_is_server_admin(#user_ctx{roles=Roles}) ->
     false -> throw({unauthorized, <<"You are not a server admin.">>})
     end.
 
-
-no_resp_conn_header([]) ->
-    true;
-no_resp_conn_header([{Hdr, _}|Rest]) ->
-    case string:to_lower(Hdr) of
-        "connection" -> false;
-        _ -> no_resp_conn_header(Rest)
-    end.
-
-http_1_0_keep_alive(Req, Headers) ->
-    KeepOpen = Req:should_close() == false,
-    IsHttp10 = Req:get(version) == {1, 0},
-    NoRespHeader = no_resp_conn_header(Headers),
-    case KeepOpen andalso IsHttp10 andalso NoRespHeader of
-        true -> [{"Connection", "Keep-Alive"} | Headers];
-        false -> Headers
-    end.
-
-start_chunked_response(#httpd{mochi_req=MochiReq}=Req, Code, Headers) ->
-    log_request(Req, Code),
-    couch_stats:increment_counter([couchdb, httpd_status_codes, Code]),
-    Headers1 = http_1_0_keep_alive(MochiReq, Headers),
-    Headers2 = Headers1 ++ server_header() ++
-               couch_httpd_auth:cookie_auth_header(Req, Headers1),
-    Headers3 = couch_httpd_cors:cors_headers(Req, Headers2),
-    Resp = MochiReq:respond({Code, Headers3, chunked}),
-    case MochiReq:get(method) of
-    'HEAD' -> throw({http_head_abort, Resp});
-    _ -> ok
-    end,
-    {ok, Resp}.
-
-
-send_response(#httpd{mochi_req=MochiReq}=Req, Code, Headers, Body) ->
-    log_request(Req, Code),
-    couch_stats:increment_counter([couchdb, httpd_status_codes, Code]),
-    Headers1 = http_1_0_keep_alive(MochiReq, Headers),
-    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,
-    Headers2 = Headers1 ++ server_header() ++
-               couch_httpd_auth:cookie_auth_header(Req, Headers1),
-    Headers3 = couch_httpd_cors:cors_headers(Req, Headers2),
-
-    {ok, MochiReq:respond({Code, Headers3, Body})}.
-
-
-
-
-
-
-
-
 error_info({Error, Reason}) when is_list(Reason) ->
     error_info({Error, ?l2b(Reason)});
 error_info(bad_request) ->

Reply via email to