]> granicus.if.org Git - ejabberd/commitdiff
Use p1_http from p1_utils 1.0.6
authorChristophe Romain <christophe.romain@process-one.net>
Mon, 14 Nov 2016 15:52:03 +0000 (16:52 +0100)
committerChristophe Romain <christophe.romain@process-one.net>
Mon, 14 Nov 2016 15:52:03 +0000 (16:52 +0100)
rebar.config
src/ejabberd_app.erl
src/ext_mod.erl
src/http_p1.erl [deleted file]
src/mod_ip_blacklist.erl
src/rest.erl

index 3ad5cf6e76e1eabb51a6569654ca83bee4bad90f..06ca9ab10fbd2836e983608a2ee3b705c59eba87 100644 (file)
@@ -8,7 +8,7 @@
 %%%-------------------------------------------------------------------
 
 {deps, [{lager, ".*", {git, "https://github.com/basho/lager", {tag, "3.2.1"}}},
-        {p1_utils, ".*", {git, "https://github.com/processone/p1_utils", {tag, "1.0.5"}}},
+        {p1_utils, ".*", {git, "https://github.com/processone/p1_utils", {tag, "1.0.6"}}},
         {cache_tab, ".*", {git, "https://github.com/processone/cache_tab", {tag, "1.0.4"}}},
         {fast_tls, ".*", {git, "https://github.com/processone/fast_tls", {tag, "1.0.7"}}},
         {stringprep, ".*", {git, "https://github.com/processone/stringprep", {tag, "1.0.6"}}},
index e88f24e1e1a7689229b6b0ea4f661a2a90caa83c..1791aa790043f0694bce6d6243f0243f22ece806 100644 (file)
@@ -225,7 +225,6 @@ start_apps() ->
     ejabberd:start_app(fast_tls),
     ejabberd:start_app(fast_xml),
     ejabberd:start_app(stringprep),
-    http_p1:start(),
     ejabberd:start_app(cache_tab).
 
 opt_type(net_ticktime) ->
index 842bb09fcfae83e3a5c996b4129b250b806610b4..2f71343a242c05b8b6d99d537961522ed8102673 100644 (file)
@@ -45,7 +45,7 @@
 start() ->
     [code:add_patha(module_ebin_dir(Module))
      || {Module, _} <- installed()],
-    application:start(inets),
+    p1_http:start(),
     ejabberd_commands:register_commands(get_commands_spec()).
 
 stop() ->
@@ -271,7 +271,7 @@ geturl(Url, Hdrs, UsrOpts) ->
         [U, Pass] -> [{proxy_user, U}, {proxy_password, Pass}];
         _ -> []
     end,
-    case httpc:request(get, {Url, Hdrs}, Host++User++UsrOpts++[{version, "HTTP/1.0"}], []) of
+    case p1_http:request(get, Url, Hdrs, [], Host++User++UsrOpts++[{version, "HTTP/1.0"}]) of
         {ok, {{_, 200, _}, Headers, Response}} ->
             {ok, Headers, Response};
         {ok, {{_, Code, _}, _Headers, Response}} ->
diff --git a/src/http_p1.erl b/src/http_p1.erl
deleted file mode 100644 (file)
index f430bbe..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-%%%----------------------------------------------------------------------
-%%% File    : http_p1.erl
-%%% Author  : Emilio Bustos <ebustos@process-one.net>
-%%% Purpose : Provide a common API for inets / lhttpc / ibrowse
-%%% Created : 29 Jul 2010 by Emilio Bustos <ebustos@process-one.net>
-%%%
-%%%
-%%% ejabberd, Copyright (C) 2002-2016   ProcessOne
-%%%
-%%% This program is free software; you can redistribute it and/or
-%%% modify it under the terms of the GNU General Public License as
-%%% published by the Free Software Foundation; either version 2 of the
-%%% License, or (at your option) any later version.
-%%%
-%%% This program is distributed in the hope that it will be useful,
-%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
-%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-%%% General Public License for more details.
-%%%
-%%% You should have received a copy of the GNU General Public License along
-%%% with this program; if not, write to the Free Software Foundation, Inc.,
-%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-%%%
-%%%----------------------------------------------------------------------
-
--module(http_p1).
-
--author('ebustos@process-one.net').
-
--export([start/0, stop/0, get/1, get/2, post/2, post/3,
-        request/3, request/4, request/5,
-        get_pool_size/0, set_pool_size/1]).
-
--include("logger.hrl").
-
--define(USE_INETS, 1).
-% -define(USE_LHTTPC, 1).
-% -define(USE_IBROWSE, 1).
-% inets used as default if none specified
-
--ifdef(USE_IBROWSE).
-
-start() ->
-    ejabberd:start_app(ibrowse).
-
-stop() ->
-    application:stop(ibrowse).
-
-request(Method, URL, Hdrs, Body, Opts) ->
-    TimeOut = proplists:get_value(timeout, Opts, infinity),
-    Options = [{inactivity_timeout, TimeOut}
-              | proplists:delete(timeout, Opts)],
-    case ibrowse:send_req(URL, Hdrs, Method, Body, Options)
-       of
-      {ok, Status, Headers, Response} ->
-         {ok, jlib:binary_to_integer(Status), Headers,
-          Response};
-      {error, Reason} -> {error, Reason}
-    end.
-
-get_pool_size() ->
-    application:get_env(ibrowse, default_max_sessions, 10).
-
-set_pool_size(Size) ->
-    application:set_env(ibrowse, default_max_sessions, Size).
-
--else.
-
--ifdef(USE_LHTTPC).
-
-start() ->
-    ejabberd:start_app(lhttpc).
-
-stop() ->
-    application:stop(lhttpc).
-
-request(Method, URL, Hdrs, Body, Opts) ->
-    {[TO, SO], Rest} = proplists:split(Opts, [timeout, socket_options]),
-    TimeOut = proplists:get_value(timeout, TO, infinity),
-    SockOpt = proplists:get_value(socket_options, SO, []),
-    Options = [{connect_options, SockOpt} | Rest],
-    Result = lhttpc:request(URL, Method, Hdrs, Body, TimeOut, Options),
-    ?DEBUG("HTTP request -> response:~n"
-          "** Method = ~p~n"
-          "** URI = ~s~n"
-          "** Body = ~s~n"
-          "** Hdrs = ~p~n"
-          "** Timeout = ~p~n"
-          "** Options = ~p~n"
-          "** Response = ~p",
-          [Method, URL, Body, Hdrs, TimeOut, Options, Result]),
-    case Result of
-      {ok, {{Status, _Reason}, Headers, Response}} ->
-         {ok, Status, Headers, (Response)};
-      {error, Reason} -> {error, Reason}
-    end.
-
-get_pool_size() ->
-    Opts = proplists:get_value(lhttpc_manager, lhttpc_manager:list_pools()),
-    proplists:get_value(max_pool_size,Opts).
-
-set_pool_size(Size) ->
-    lhttpc_manager:set_max_pool_size(lhttpc_manager, Size).
-
--else.
-
-start() ->
-    ejabberd:start_app(inets).
-
-stop() ->
-    application:stop(inets).
-
-to_list(Str) when is_binary(Str) ->
-    binary_to_list(Str);
-to_list(Str) ->
-    Str.
-
-request(Method, URLRaw, HdrsRaw, Body, Opts) ->
-    Hdrs = lists:map(fun({N, V}) ->
-                             {to_list(N), to_list(V)}
-                     end, HdrsRaw),
-    URL = to_list(URLRaw),
-
-    Request = case Method of
-               get -> {URL, Hdrs};
-               head -> {URL, Hdrs};
-               delete -> {URL, Hdrs};
-               _ -> % post, etc.
-                   {URL, Hdrs,
-                    to_list(proplists:get_value(<<"content-type">>, HdrsRaw, [])),
-                     Body}
-             end,
-    Options = case proplists:get_value(timeout, Opts,
-                                      infinity)
-                 of
-               infinity -> proplists:delete(timeout, Opts);
-               _ -> Opts
-             end,
-    case httpc:request(Method, Request, Options, []) of
-      {ok, {{_, Status, _}, Headers, Response}} ->
-         {ok, Status, Headers, Response};
-      {error, Reason} -> {error, Reason}
-    end.
-
-get_pool_size() ->
-    {ok, Size} = httpc:get_option(max_sessions),
-    Size.
-
-set_pool_size(Size) ->
-    httpc:set_option(max_sessions, Size).
-
--endif.
-
--endif.
-
--type({header,
-       {type, 63, tuple,
-       [{type, 63, union,
-         [{type, 63, string, []}, {type, 63, atom, []}]},
-        {type, 63, string, []}]},
-       []}).
-
--type({headers,
-       {type, 64, list, [{type, 64, header, []}]}, []}).
-
--type({option,
-       {type, 67, union,
-       [{type, 67, tuple,
-         [{atom, 67, connect_timeout}, {type, 67, timeout, []}]},
-        {type, 68, tuple,
-         [{atom, 68, timeout}, {type, 68, timeout, []}]},
-        {type, 70, tuple,
-         [{atom, 70, send_retry},
-          {type, 70, non_neg_integer, []}]},
-        {type, 71, tuple,
-         [{atom, 71, partial_upload},
-          {type, 71, union,
-           [{type, 71, non_neg_integer, []},
-            {atom, 71, infinity}]}]},
-        {type, 72, tuple,
-         [{atom, 72, partial_download}, {type, 72, pid, []},
-          {type, 72, union,
-           [{type, 72, non_neg_integer, []},
-            {atom, 72, infinity}]}]}]},
-       []}).
-
--type({options,
-       {type, 74, list, [{type, 74, option, []}]}, []}).
-
--type({result,
-       {type, 76, union,
-       [{type, 76, tuple,
-         [{atom, 76, ok},
-          {type, 76, tuple,
-           [{type, 76, tuple,
-             [{type, 76, pos_integer, []}, {type, 76, string, []}]},
-            {type, 76, headers, []}, {type, 76, string, []}]}]},
-        {type, 77, tuple,
-         [{atom, 77, error}, {type, 77, atom, []}]}]},
-       []}).
-
-%% @spec (URL) -> Result
-%%   URL = string()
-%%   Result = {ok, StatusCode, Hdrs, ResponseBody}
-%%            | {error, Reason}
-%%   StatusCode = integer()
-%%   ResponseBody = string()
-%%   Reason = connection_closed | connect_timeout | timeout
-%% @doc Sends a GET request.
-%% Would be the same as calling `request(get, URL, [])',
-%% that is {@link request/3} with an empty header list.
-%% @end
-%% @see request/3
--spec get(string()) -> result().
-get(URL) -> request(get, URL, []).
-
-%% @spec (URL, Hdrs) -> Result
-%%   URL = string()
-%%   Hdrs = [{Header, Value}]
-%%   Header = string()
-%%   Value = string()
-%%   Result = {ok, StatusCode, Hdrs, ResponseBody}
-%%            | {error, Reason}
-%%   StatusCode = integer()
-%%   ResponseBody = string()
-%%   Reason = connection_closed | connect_timeout | timeout
-%% @doc Sends a GET request.
-%% Would be the same as calling `request(get, URL, Hdrs)'.
-%% @end
-%% @see request/3
--spec get(string(), headers()) -> result().
-get(URL, Hdrs) -> request(get, URL, Hdrs).
-
-%% @spec (URL, RequestBody) -> Result
-%%   URL = string()
-%%   RequestBody = string()
-%%   Result = {ok, StatusCode, Hdrs, ResponseBody}
-%%            | {error, Reason}
-%%   StatusCode = integer()
-%%   ResponseBody = string()
-%%   Reason = connection_closed | connect_timeout | timeout
-%% @doc Sends a POST request with form data.
-%% Would be the same as calling
-%% `request(post, URL, [{"content-type", "x-www-form-urlencoded"}], Body)'.
-%% @end
-%% @see request/4
--spec post(string(), string()) -> result().
-post(URL, Body) ->
-    request(post, URL,
-           [{<<"content-type">>, <<"x-www-form-urlencoded">>}],
-           Body).
-
-%% @spec (URL, Hdrs, RequestBody) -> Result
-%%   URL = string()
-%%   Hdrs = [{Header, Value}]
-%%   Header = string()
-%%   Value = string()
-%%   RequestBody = string()
-%%   Result = {ok, StatusCode, Hdrs, ResponseBody}
-%%            | {error, Reason}
-%%   StatusCode = integer()
-%%   ResponseBody = string()
-%%   Reason = connection_closed | connect_timeout | timeout
-%% @doc Sends a POST request.
-%% Would be the same as calling
-%% `request(post, URL, Hdrs, Body)'.
-%% @end
-%% @see request/4
--spec post(string(), headers(), string()) -> result().
-post(URL, Hdrs, Body) ->
-    NewHdrs = case [X
-                   || {X, _} <- Hdrs,
-                      str:to_lower(X) == <<"content-type">>]
-                 of
-               [] ->
-                   [{<<"content-type">>, <<"x-www-form-urlencoded">>}
-                    | Hdrs];
-               _ -> Hdrs
-             end,
-    request(post, URL, NewHdrs, Body).
-
-%% @spec (Method, URL, Hdrs) -> Result
-%%   Method = atom()
-%%   URL = string()
-%%   Hdrs = [{Header, Value}]
-%%   Header = string()
-%%   Value = string()
-%%   Result = {ok, StatusCode, Hdrs, ResponseBody}
-%%            | {error, Reason}
-%%   StatusCode = integer()
-%%   ResponseBody = string()
-%%   Reason = connection_closed | connect_timeout | timeout
-%% @doc Sends a request without a body.
-%% Would be the same as calling `request(Method, URL, Hdrs, [], [])',
-%% that is {@link request/5} with an empty body.
-%% @end
-%% @see request/5
--spec request(atom(), string(), headers()) -> result().
-request(Method, URL, Hdrs) ->
-    request(Method, URL, Hdrs, [], []).
-
-%% @spec (Method, URL, Hdrs, RequestBody) -> Result
-%%   Method = atom()
-%%   URL = string()
-%%   Hdrs = [{Header, Value}]
-%%   Header = string()
-%%   Value = string()
-%%   RequestBody = string()
-%%   Result = {ok, StatusCode, Hdrs, ResponseBody}
-%%            | {error, Reason}
-%%   StatusCode = integer()
-%%   ResponseBody = string()
-%%   Reason = connection_closed | connect_timeout | timeout
-%% @doc Sends a request with a body.
-%% Would be the same as calling
-%% `request(Method, URL, Hdrs, Body, [])', that is {@link request/5}
-%% with no options.
-%% @end
-%% @see request/5
--spec request(atom(), string(), headers(), string()) -> result().
-request(Method, URL, Hdrs, Body) ->
-    request(Method, URL, Hdrs, Body, []).
-
-%% @spec (Method, URL, Hdrs, RequestBody, Options) -> Result
-%%   Method = atom()
-%%   URL = string()
-%%   Hdrs = [{Header, Value}]
-%%   Header = string()
-%%   Value = string()
-%%   RequestBody = string()
-%%   Options = [Option]
-%%   Option = {timeout, Milliseconds | infinity} |
-%%            {connect_timeout, Milliseconds | infinity} |
-%%            {socket_options, [term()]} |
-
-%%   Milliseconds = integer()
-%%   Result = {ok, StatusCode, Hdrs, ResponseBody}
-%%            | {error, Reason}
-%%   StatusCode = integer()
-%%   ResponseBody = string()
-%%   Reason = connection_closed | connect_timeout | timeout
-%% @doc Sends a request with a body.
-%% Would be the same as calling
-%% `request(Method, URL, Hdrs, Body, [])', that is {@link request/5}
-%% with no options.
-%% @end
-%% @see request/5
--spec request(atom(), string(), headers(), string(), options()) -> result().
-
-% ibrowse {response_format, response_format()} |
-% Options - [option()]
-%                     Option - {sync, boolean()} | {stream, StreamTo} | {body_format, body_format()} | {full_result,
-%                     boolean()} | {headers_as_is, boolean()}
-%body_format() = string() | binary()
-%                       The body_format option is only valid for the synchronous request and the default is  string.
-%                     When making an asynchronous request the body will always be received as a binary.
-% lhttpc: always binary
-
index 8978109279c1fe36348d49d6b6b5a60af2555151..ab17a889179e3bf8ebe04f47341f1cc3bac043de 100644 (file)
@@ -89,9 +89,9 @@ loop(_State) -> receive stop -> ok end.
 %% TODO: Support comment lines starting by %
 update_bl_c2s() ->
     ?INFO_MSG("Updating C2S Blacklist", []),
-    case httpc:request(?BLC2S) of
+    case p1_http:get(?BLC2S) of
       {ok, 200, _Headers, Body} ->
-         IPs = str:tokens(Body, <<"\n">>),
+         IPs = str:tokens(iolist_to_binary(Body), <<"\n">>),
          ets:delete_all_objects(bl_c2s),
          lists:foreach(fun (IP) ->
                                ets:insert(bl_c2s,
index 01b04f66ac7ae4ab0e4938059d27b67201de9ed2..e5c6fd963ed94d2657ef12cbdd6bea1aae2f733f 100644 (file)
 -define(CONNECT_TIMEOUT, 8000).
 
 start(Host) ->
-    http_p1:start(),
+    p1_http:start(),
     Pool_size =
        ejabberd_config:get_option({ext_api_http_pool_size, Host},
                                   fun(X) when is_integer(X), X > 0->
                                           X
                                   end,
                                   100),
-    http_p1:set_pool_size(Pool_size).
+    p1_http:set_pool_size(Pool_size).
 
 stop(_Host) ->
     ok.
@@ -91,7 +91,7 @@ request(Server, Method, Path, Params, Mime, Data) ->
             {"content-type", Mime},
             {"User-Agent", "ejabberd"}],
     Begin = os:timestamp(),
-    Result = case catch http_p1:request(Method, URI, Hdrs, Data, Opts) of
+    Result = case catch p1_http:request(Method, URI, Hdrs, Data, Opts) of
         {ok, Code, _, <<>>} ->
             {ok, Code, []};
         {ok, Code, _, <<" ">>} ->