You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by fd...@apache.org on 2010/09/29 15:45:36 UTC

svn commit: r1002626 - in /couchdb/branches/new_replicator/src/couchdb: couch_api_wrap.hrl couch_api_wrap_httpc.erl couch_replicator_utils.erl

Author: fdmanana
Date: Wed Sep 29 13:45:36 2010
New Revision: 1002626

URL: http://svn.apache.org/viewvc?rev=1002626&view=rev
Log:
New replicator: add support for proxy option.

Modified:
    couchdb/branches/new_replicator/src/couchdb/couch_api_wrap.hrl
    couchdb/branches/new_replicator/src/couchdb/couch_api_wrap_httpc.erl
    couchdb/branches/new_replicator/src/couchdb/couch_replicator_utils.erl

Modified: couchdb/branches/new_replicator/src/couchdb/couch_api_wrap.hrl
URL: http://svn.apache.org/viewvc/couchdb/branches/new_replicator/src/couchdb/couch_api_wrap.hrl?rev=1002626&r1=1002625&r2=1002626&view=diff
==============================================================================
--- couchdb/branches/new_replicator/src/couchdb/couch_api_wrap.hrl (original)
+++ couchdb/branches/new_replicator/src/couchdb/couch_api_wrap.hrl Wed Sep 29 13:45:36 2010
@@ -16,7 +16,8 @@
     url,
     oauth = nil,
     headers = [],
-    timeout = 30000  % milliseconds
+    timeout = 30000,  % milliseconds
+    proxy_options = []
 }).
 
 -record(oauth, {

Modified: couchdb/branches/new_replicator/src/couchdb/couch_api_wrap_httpc.erl
URL: http://svn.apache.org/viewvc/couchdb/branches/new_replicator/src/couchdb/couch_api_wrap_httpc.erl?rev=1002626&r1=1002625&r2=1002626&view=diff
==============================================================================
--- couchdb/branches/new_replicator/src/couchdb/couch_api_wrap_httpc.erl (original)
+++ couchdb/branches/new_replicator/src/couchdb/couch_api_wrap_httpc.erl Wed Sep 29 13:45:36 2010
@@ -31,7 +31,7 @@ send_req(#httpdb{headers = BaseHeaders} 
     Body = ?getv(body, Params, []),
     IbrowseOptions = [
         {response_format, binary}, {inactivity_timeout, HttpDb#httpdb.timeout}
-        | ?getv(ibrowse_options, Params, [])
+        | ?getv(ibrowse_options, Params, []) ++ HttpDb#httpdb.proxy_options
     ],
     Headers2 = oauth_header(HttpDb, Params) ++ BaseHeaders ++ Headers,
     Url = full_url(HttpDb, Params),

Modified: couchdb/branches/new_replicator/src/couchdb/couch_replicator_utils.erl
URL: http://svn.apache.org/viewvc/couchdb/branches/new_replicator/src/couchdb/couch_replicator_utils.erl?rev=1002626&r1=1002625&r2=1002626&view=diff
==============================================================================
--- couchdb/branches/new_replicator/src/couchdb/couch_replicator_utils.erl (original)
+++ couchdb/branches/new_replicator/src/couchdb/couch_replicator_utils.erl Wed Sep 29 13:45:36 2010
@@ -20,8 +20,9 @@
 
 
 parse_rep_doc({Props} = RepObj, UserCtx) ->
-    Source = parse_rep_db(?getv(<<"source">>, Props)),
-    Target = parse_rep_db(?getv(<<"target">>, Props)),
+    ProxyParams = parse_proxy_params(?getv(<<"proxy">>, Props, <<>>)),
+    Source = parse_rep_db(?getv(<<"source">>, Props), ProxyParams),
+    Target = parse_rep_db(?getv(<<"target">>, Props), ProxyParams),
     Options = convert_options(Props),
     Rep = #rep{
         id = make_replication_id(Source, Target, UserCtx, Options),
@@ -90,7 +91,7 @@ get_rep_endpoint(UserCtx, <<DbName/binar
     {local, DbName, UserCtx}.
 
 
-parse_rep_db({Props}) ->
+parse_rep_db({Props}, ProxyParams) ->
     Url = maybe_add_trailing_slash(?getv(<<"url">>, Props)),
     {AuthProps} = ?getv(<<"auth">>, Props, {[]}),
     {BinHeaders} = ?getv(<<"headers">>, Props, {[]}),
@@ -116,13 +117,14 @@ parse_rep_db({Props}) ->
     #httpdb{
         url = Url,
         oauth = OAuth,
-        headers = Headers
+        headers = Headers,
+        proxy_options = ProxyParams
     };
-parse_rep_db(<<"http://", _/binary>> = Url) ->
-    parse_rep_db({[{<<"url">>, Url}]});
-parse_rep_db(<<"https://", _/binary>> = Url) ->
-    parse_rep_db({[{<<"url">>, Url}]});
-parse_rep_db(<<DbName/binary>>) ->
+parse_rep_db(<<"http://", _/binary>> = Url, ProxyParams) ->
+    parse_rep_db({[{<<"url">>, Url}]}, ProxyParams);
+parse_rep_db(<<"https://", _/binary>> = Url, ProxyParams) ->
+    parse_rep_db({[{<<"url">>, Url}]}, ProxyParams);
+parse_rep_db(<<DbName/binary>>, _ProxyParams) ->
     DbName.
 
 
@@ -154,3 +156,23 @@ convert_options([{<<"doc_ids">>, V} | R]
 convert_options([_ | R]) -> % skip unknown option
     convert_options(R).
 
+
+parse_proxy_params(ProxyUrl) when is_binary(ProxyUrl) ->
+    parse_proxy_params(?b2l(ProxyUrl));
+parse_proxy_params([]) ->
+    [];
+parse_proxy_params(ProxyUrl) ->
+    #url{
+        host = Host,
+        port = Port,
+        username = User,
+        password = Passwd
+    } = ibrowse_lib:parse_url(ProxyUrl),
+    [{proxy_host, Host}, {proxy_port, Port}] ++
+        case is_list(User) andalso is_list(Passwd) of
+        false ->
+            [];
+        true ->
+            [{proxy_user, User}, {proxy_password, Passwd}]
+        end.
+