diff options
| author | Christophe Romain <christophe.romain@process-one.net> | 2016-11-14 16:52:03 +0100 | 
|---|---|---|
| committer | Christophe Romain <christophe.romain@process-one.net> | 2016-11-14 16:52:03 +0100 | 
| commit | 309962fb8b70dc42dbfcc98b4e64bd251aad84b9 (patch) | |
| tree | d23b6257efd2450a6d69b411d24f18e3f82c3348 | |
| parent | Fix IQ result processing (diff) | |
Use p1_http from p1_utils 1.0.6
| -rw-r--r-- | rebar.config | 2 | ||||
| -rw-r--r-- | src/ejabberd_app.erl | 1 | ||||
| -rw-r--r-- | src/ext_mod.erl | 4 | ||||
| -rw-r--r-- | src/http_p1.erl | 358 | ||||
| -rw-r--r-- | src/mod_ip_blacklist.erl | 4 | ||||
| -rw-r--r-- | src/rest.erl | 6 | 
6 files changed, 8 insertions, 367 deletions
| diff --git a/rebar.config b/rebar.config index 3ad5cf6e7..06ca9ab10 100644 --- a/rebar.config +++ b/rebar.config @@ -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"}}}, diff --git a/src/ejabberd_app.erl b/src/ejabberd_app.erl index e88f24e1e..1791aa790 100644 --- a/src/ejabberd_app.erl +++ b/src/ejabberd_app.erl @@ -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) -> diff --git a/src/ext_mod.erl b/src/ext_mod.erl index 842bb09fc..2f71343a2 100644 --- a/src/ext_mod.erl +++ b/src/ext_mod.erl @@ -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 index f430bbe11..000000000 --- a/src/http_p1.erl +++ /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 - diff --git a/src/mod_ip_blacklist.erl b/src/mod_ip_blacklist.erl index 897810927..ab17a8891 100644 --- a/src/mod_ip_blacklist.erl +++ b/src/mod_ip_blacklist.erl @@ -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, diff --git a/src/rest.erl b/src/rest.erl index 01b04f66a..e5c6fd963 100644 --- a/src/rest.erl +++ b/src/rest.erl @@ -36,14 +36,14 @@  -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, _, <<" ">>} -> | 
