Pass Stack tuple module to handle_request_int

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

Branch: refs/heads/split_out_httpd_stack
Commit: 52c75f93ec70cc5b9f2ca1f3ff9efad0252f251c
Parents: 557ceb3
Author: ILYA Khlopotov <iil...@ca.ibm.com>
Authored: Fri Feb 26 13:18:56 2016 -0800
Committer: ILYA Khlopotov <iil...@ca.ibm.com>
Committed: Tue Mar 1 08:35:09 2016 -0800

----------------------------------------------------------------------
 src/couch_httpd.erl         | 12 +++++++++++-
 src/couch_httpd_handler.erl | 29 +++++++++++++++--------------
 src/couch_httpd_rewrite.erl | 10 ++++++----
 3 files changed, 32 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/52c75f93/src/couch_httpd.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd.erl b/src/couch_httpd.erl
index c0e2338..929a9b7 100644
--- a/src/couch_httpd.erl
+++ b/src/couch_httpd.erl
@@ -83,7 +83,8 @@
     accepted_encodings/1,
     verify_is_server_admin/1,
     get_delayed_req/1,
-    chunked_response_buffer_size/0
+    chunked_response_buffer_size/0,
+    port/1
 ]).
 
 -export([
@@ -528,6 +529,15 @@ get_delayed_req(Resp) ->
 chunked_response_buffer_size() ->
     config:get_integer("httpd", "chunked_response_buffer", 1490).
 
+port(StackId) when is_atom(StackId) ->
+    integer_to_list(mochiweb_socket_server:get(StackId, port));
+port(#httpd{stack = Stack}) ->
+    Stack:port();
+port(#httpd_resp{stack = Stack}) ->
+    Stack:port();
+port(StackName) when is_list(StackName) ->
+    port(list_to_existing_atom(StackName)).
+
 %% ================
 %% Helper functions
 

http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/52c75f93/src/couch_httpd_handler.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_handler.erl b/src/couch_httpd_handler.erl
index a1f6eb2..69c47ee 100644
--- a/src/couch_httpd_handler.erl
+++ b/src/couch_httpd_handler.erl
@@ -22,8 +22,8 @@
 ]).
 
 -export([
-    handle_request/1,
-    handle_request_int/1
+    handle_request/2,
+    handle_request_int/2
 ]).
 
 -export([
@@ -82,20 +82,20 @@ stop() ->
     catch mochiweb_http:stop(https),
     mochiweb_http:stop(?MODULE).
 
-handle_request(MochiReq0) ->
+handle_request(Stack, MochiReq0) ->
     erlang:put(?REWRITE_COUNT, 0),
     MochiReq = couch_httpd_vhost:dispatch_host(MochiReq0),
-    handle_request_int(MochiReq).
+    handle_request_int(Stack, MochiReq).
 
-handle_request_int(MochiReq) ->
+handle_request_int(Stack, MochiReq) ->
     Begin = os:timestamp(),
-    case config:get("chttpd", "socket_options") of
-    undefined ->
-        ok;
-    SocketOptsCfg ->
-        {ok, SocketOpts} = couch_util:parse_term(SocketOptsCfg),
-        ok = mochiweb_socket:setopts(MochiReq:get(socket), SocketOpts)
-    end,
+
+    case Stack:socket_options() of
+        undefined ->
+            ok;
+        SocketOpts ->
+            ok = mochiweb_socket:setopts(MochiReq:get(socket), SocketOpts)
+    end.
 
     % for the path, use the raw path with the query string and fragment
     % removed, but URL quoting left intact
@@ -161,7 +161,8 @@ handle_request_int(MochiReq) ->
         requested_path_parts = [?l2b(couch_httpd:unquote(Part))
                 || Part <- string:tokens(RequestedPath, "/")],
         user_ctx = erlang:erase(pre_rewrite_user_ctx),
-        auth = erlang:erase(pre_rewrite_auth)
+        auth = erlang:erase(pre_rewrite_auth),
+        stack = Stack
     },
 
     % put small token on heap to keep requests synced to backend calls
@@ -393,7 +394,7 @@ is_http(_) ->
     false.
 
 make_uri(Req, Raw) ->
-    Port = integer_to_list(mochiweb_socket_server:get(chttpd, port)),
+    Port = couch_httpd:port(Req),
     Url = list_to_binary(["http://";, config:get("httpd", "bind_address"),
                           ":", Port, "/", Raw]),
     Headers = [

http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/52c75f93/src/couch_httpd_rewrite.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_rewrite.erl b/src/couch_httpd_rewrite.erl
index 1caaeb7..b42e05f 100644
--- a/src/couch_httpd_rewrite.erl
+++ b/src/couch_httpd_rewrite.erl
@@ -53,7 +53,8 @@ get_rules(#doc{body={Props}}) ->
     couch_util:get_value(<<"rewrites">>, Props).
 
 
-do_rewrite(#httpd{mochi_req=MochiReq}=Req, {Props}=Rewrite) when 
is_list(Props) ->
+do_rewrite(#httpd{mochi_req=MochiReq, stack=Stack}=Req, {Props}=Rewrite)
+        when is_list(Props) ->
     case couch_util:get_value(<<"code">>, Props) of
         undefined ->
             Method = rewrite_method(Req, Rewrite),
@@ -66,7 +67,7 @@ do_rewrite(#httpd{mochi_req=MochiReq}=Req, {Props}=Rewrite) 
when is_list(Props)
                                                Headers),
             NewMochiReq:cleanup(),
             couch_log:debug("rewrite to ~p", [Path]),
-            couch_httpd:handle_request_int(NewMochiReq);
+            couch_httpd_handler:handle_request_int(Stack, NewMochiReq);
         Code ->
             couch_httpd:send_response(
                 Req,
@@ -79,7 +80,8 @@ do_rewrite(#httpd{mochi_req=MochiReq}=Req, {Props}=Rewrite) 
when is_list(Props)
     end;
 do_rewrite(#httpd{method=Method,
                   path_parts=[_DbName, <<"_design">>, _DesignName, 
_Rewrite|PathParts],
-                  mochi_req=MochiReq}=Req,
+                  mochi_req=MochiReq,
+                  stack=Stack}=Req,
            Rules) when is_list(Rules) ->
     % create dispatch list from rules
     Prefix = path_prefix(Req),
@@ -123,7 +125,7 @@ do_rewrite(#httpd{method=Method,
     % cleanup, It force mochiweb to reparse raw uri.
     MochiReq1:cleanup(),
 
-    couch_httpd:handle_request_int(MochiReq1).
+    couch_httpd_handler:handle_request_int(Stack, MochiReq1).
 
 
 rewrite_method(#httpd{method=Method}, {Props}) ->

Reply via email to