Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:25
erlang
3212-inets-Remove-legacy-code-and-correct-reque...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 3212-inets-Remove-legacy-code-and-correct-request-queue-h.patch of Package erlang
From 2711ae29ec6f969a39880ef80804377662648b01 Mon Sep 17 00:00:00 2001 From: Ingela Anderton Andin <ingela@erlang.org> Date: Tue, 31 Jan 2023 17:29:31 +0100 Subject: [PATCH] inets: Remove legacy code and correct request queue handling Legacy essl option and even older ssl option handling (that no longer worked or made sense) has been removed. This uncovered a bug in pipeline and keepalive queue handling that could result in incorrect response of {error, socket_remotly_closed}, this has now been fixed. The bug was that retry code missed retring the first pipelined or keeplive request that was currently being processed. Also cuddle httpd max_clients test case to that have timeouts that makes sense. It is surprising that this test case was just a little unstable before! Closes #6380 --- lib/inets/src/http_client/httpc.erl | 13 +- lib/inets/src/http_client/httpc_handler.erl | 55 ++--- lib/inets/src/http_lib/http_internal.hrl | 5 - lib/inets/src/http_lib/http_transport.erl | 207 ++---------------- lib/inets/src/http_server/httpd.erl | 2 - lib/inets/src/http_server/httpd_conf.erl | 162 +------------- lib/inets/src/http_server/httpd_example.erl | 2 +- .../src/http_server/httpd_request_handler.erl | 14 +- .../src/http_server/httpd_script_env.erl | 5 +- lib/inets/src/http_server/httpd_sup.erl | 91 +------- lib/inets/src/http_server/mod_alias.erl | 5 +- lib/inets/test/httpc_SUITE.erl | 2 + lib/inets/test/httpd_SUITE.erl | 2 +- lib/inets/test/httpd_bench_SUITE.erl | 2 +- lib/inets/test/httpd_time_test.erl | 2 +- lib/inets/test/inets_test_lib.erl | 26 +-- 16 files changed, 92 insertions(+), 503 deletions(-) diff --git a/lib/inets/src/http_client/httpc.erl b/lib/inets/src/http_client/httpc.erl index 48d8a3c6ac..b4315f4ba3 100644 --- a/lib/inets/src/http_client/httpc.erl +++ b/lib/inets/src/http_client/httpc.erl @@ -983,11 +983,12 @@ http_options_default() -> AutoRedirectPost = boolfun(), SslPost = fun(Value) when is_list(Value) -> - {ok, {?HTTP_DEFAULT_SSL_KIND, Value}}; - ({ssl, SslOptions}) when is_list(SslOptions) -> - {ok, {?HTTP_DEFAULT_SSL_KIND, SslOptions}}; + {ok, {ssl, Value}}; + ({ssl, SslOptions}) when is_list(SslOptions) -> + {ok, {ssl, SslOptions}}; + %% backwards compat ({essl, SslOptions}) when is_list(SslOptions) -> - {ok, {essl, SslOptions}}; + {ok, {ssl, SslOptions}}; (_) -> error end, @@ -1008,14 +1009,12 @@ http_options_default() -> error end, - Ssl = ssl_verify_host_options(true), - UrlDecodePost = boolfun(), [ {version, {value, "HTTP/1.1"}, #http_options.version, VersionPost}, {timeout, {value, ?HTTP_REQUEST_TIMEOUT}, #http_options.timeout, TimeoutPost}, {autoredirect, {value, true}, #http_options.autoredirect, AutoRedirectPost}, - {ssl, {value, {?HTTP_DEFAULT_SSL_KIND, Ssl}}, #http_options.ssl, SslPost}, + {ssl, {value, {ssl, []}}, #http_options.ssl, SslPost}, {proxy_auth, {value, undefined}, #http_options.proxy_auth, ProxyAuthPost}, {relaxed, {value, false}, #http_options.relaxed, RelaxedPost}, {url_encode, {value, false}, #http_options.url_encode, UrlDecodePost}, diff --git a/lib/inets/src/http_client/httpc_handler.erl b/lib/inets/src/http_client/httpc_handler.erl index 6012c747c4..143df29bff 100644 --- a/lib/inets/src/http_client/httpc_handler.erl +++ b/lib/inets/src/http_client/httpc_handler.erl @@ -50,23 +50,23 @@ -record(state, { - request :: request() | undefined, - session :: session() | undefined, - status_line :: tuple() | undefined, % {Version, StatusCode, ReasonPharse} - headers :: http_response_h() | undefined, - body :: binary() | undefined, - mfa :: {atom(), atom(), term()} | undefined, % {Module, Function, Args} - pipeline = queue:new() :: queue:queue(), - keep_alive = queue:new() :: queue:queue(), - status :: undefined | new | pipeline | keep_alive | close | {ssl_tunnel, request()}, - canceled = [], % [RequestId] - max_header_size = nolimit :: nolimit | integer(), - max_body_size = nolimit :: nolimit | integer(), - options :: options(), - timers = #timers{} :: #timers{}, - profile_name :: atom(), % id of httpc_manager process. - once = inactive :: inactive | once - }). + request :: request() | undefined, + session :: session() | undefined, + status_line :: tuple() | undefined, % {Version, StatusCode, ReasonPharse} + headers :: http_response_h() | undefined, + body :: binary() | undefined, + mfa :: {atom(), atom(), term()} | undefined, % {Module, Function, Args} + pipeline = queue:new() :: queue:queue(), + keep_alive = queue:new() :: queue:queue(), + status :: undefined | new | pipeline | keep_alive | close | {ssl_tunnel, request()}, + canceled = [] :: [RequestId::reference()], + max_header_size = nolimit :: nolimit | integer(), + max_body_size = nolimit :: nolimit | integer(), + options :: options(), + timers = #timers{} :: #timers{}, + profile_name :: atom(), % id of httpc_manager process. + once = inactive :: inactive | once + }). %%==================================================================== @@ -321,8 +321,7 @@ terminate(normal, %% Cancel timers cancel_timers(Timers), - %% Maybe deliver answers to requests - deliver_answer(Request), + maybe_deliver_answer(Request, State), %% And, just in case, close our side (**really** overkill) http_transport:close(SocketType, Socket); @@ -711,24 +710,26 @@ call(Msg, Pid) -> cast(Msg, Pid) -> gen_server:cast(Pid, Msg). -maybe_retry_queue(Q, State) -> - case queue:is_empty(Q) of - false -> +maybe_retry_queue(Q, #state{status = new} = State) -> + retry_pipeline(queue:to_list(Q), State); +maybe_retry_queue(Q, #state{request = Request} = State) -> + case Request of + undefined -> retry_pipeline(queue:to_list(Q), State); - true -> - ok + _ -> + retry_pipeline(queue:to_list(queue:cons(Request, Q)), State) end. - + maybe_send_answer(#request{from = answer_sent}, _Reason, State) -> State; maybe_send_answer(Request, Answer, State) -> answer_request(Request, Answer, State). -deliver_answer(#request{from = From} = Request) +maybe_deliver_answer(#request{from = From} = Request, #state{status = new}) when From =/= answer_sent -> Response = httpc_response:error(Request, socket_closed_remotely), httpc_response:send(From, Response); -deliver_answer(_Request) -> +maybe_deliver_answer(_,_) -> ok. %%%-------------------------------------------------------------------- diff --git a/lib/inets/src/http_lib/http_internal.hrl b/lib/inets/src/http_lib/http_internal.hrl index ca1dad07cd..77e6e58521 100644 --- a/lib/inets/src/http_lib/http_internal.hrl +++ b/lib/inets/src/http_lib/http_internal.hrl @@ -31,11 +31,6 @@ -define(HTTP_MAX_METHOD_STRING, 20). -define(HTTP_MAX_CONTENT_LENGTH, 100000000). --ifndef(HTTP_DEFAULT_SSL_KIND). --define(HTTP_DEFAULT_SSL_KIND, essl). --endif. % -ifdef(HTTP_DEFAULT_SSL_KIND). - - %%% Response headers -record(http_response_h,{ %%% --- Standard "General" headers diff --git a/lib/inets/src/http_lib/http_transport.erl b/lib/inets/src/http_lib/http_transport.erl index 0eb0cc2684..9b76acfc12 100644 --- a/lib/inets/src/http_lib/http_transport.erl +++ b/lib/inets/src/http_lib/http_transport.erl @@ -46,19 +46,11 @@ %%% Internal application API %%%========================================================================= -%%------------------------------------------------------------------------- -%% start(SocketType) -> ok | {error, Reason} -%% SocketType = ip_comm | {ssl, _} -%% -%% Description: Makes sure ssl is started. -%%------------------------------------------------------------------------- start(ip_comm) -> ok; start({ip_comm, _}) -> ok; start({ssl, _}) -> - do_start_ssl(); -start({essl, _}) -> do_start_ssl(). do_start_ssl() -> @@ -70,25 +62,11 @@ do_start_ssl() -> _:Reason -> {error, Reason} end. - - -%%------------------------------------------------------------------------- -%% connect(SocketType, Address, Options, Timeout) -> -%% {ok, Socket} | {error, Reason} -%% SocketType = ip_comm | {ssl, SslConfig} -%% Address = {Host, Port} -%% Options = [option()] -%% Socket = socket() -%% option() = ipfamily() | {ip, ip_address()} | {port, integer()} -%% ipfamily() = inet | inet6 -%% -%% Description: Connects to the Host and Port specified in HTTPRequest. -%%------------------------------------------------------------------------- connect(SocketType, Address, Opts) -> connect(SocketType, Address, Opts, infinity). connect(ip_comm, {Host, Port}, Opts0, Timeout) -> - Opts = [binary, {packet, 0}, {active, false}, {reuseaddr, true} | Opts0 ], + Opts = [binary, {packet, 0}, {active, false} | Opts0], try gen_tcp:connect(Host, Port, Opts, Timeout) of {ok, _} = OK -> OK; @@ -101,12 +79,8 @@ connect(ip_comm, {Host, Port}, Opts0, Timeout) -> {error, {eoptions, Opts}} end; -%% Wrapper for backaward compatibillity -connect({ssl, SslConfig}, Address, Opts, Timeout) -> - connect({?HTTP_DEFAULT_SSL_KIND, SslConfig}, Address, Opts, Timeout); - -connect({essl, SslConfig}, {Host, Port}, Opts0, Timeout) -> - Opts = [binary, {active, false}, {ssl_imp, new} | Opts0] ++ SslConfig, +connect({ssl, SslConfig}, {Host, Port}, Opts0, Timeout) -> + Opts = [binary, {packet, 0}, {active, false} | Opts0] ++ SslConfig, case (catch ssl:connect(Host, Port, Opts, Timeout)) of {'EXIT', Reason} -> {error, {eoptions, Reason}}; @@ -116,38 +90,19 @@ connect({essl, SslConfig}, {Host, Port}, Opts0, Timeout) -> ERROR end. - -%%------------------------------------------------------------------------- -%% listen(SocketType, Addr, Port, Fd) -> {ok, Socket} | {error, Reason} -%% SocketType = ip_comm | {ssl, SSLConfig} -%% Port = integer() -%% Socket = socket() -%% Fd = undefined | fd() -%% -%% Description: Sets up socket to listen on the port Port on the local -%% host using either gen_tcp or ssl. In the gen_tcp case the port -%% might already have been initiated by a wrapper-program and is -%% given as an Fd that can be retrieved by init:get_argument. The -%% reason for this to enable a HTTP-server not running as root to use -%% port 80. -%%------------------------------------------------------------------------- listen(ip_comm, Addr, Port, Fd, IpFamily) -> listen_ip_comm(Addr, Port, [], Fd, IpFamily); listen({ip_comm, SockOpts}, Addr, Port, Fd, IpFamily) -> listen_ip_comm(Addr, Port, SockOpts, Fd, IpFamily); -listen({essl, SSLConfig}, Addr, Port, Fd, IpFamily) -> +listen({ssl, SSLConfig}, Addr, Port, Fd, IpFamily) -> listen_ssl(Addr, Port, Fd, SSLConfig, IpFamily, []). listen(ip_comm, Addr, Port, IpFamily) -> listen_ip_comm(Addr, Port, [], undefined, IpFamily); -%% Wrapper for backaward compatibillity listen({ssl, SSLConfig}, Addr, Port, IpFamily) -> - listen({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Addr, Port, IpFamily); - -listen({essl, SSLConfig}, Addr, Port, IpFamily) -> {SSLConfig2, ExtraOpts} = case proplists:get_value(log_alert, SSLConfig, undefined) of undefined -> {SSLConfig, []}; @@ -187,18 +142,7 @@ get_socket_info(Addr, Port, Fd, BaseOpts) -> Fd -> {0, sock_opts([{fd, Fd} | BaseOpts])} end. - -%%------------------------------------------------------------------------- -%% accept(SocketType, ListenSocket) -> {ok, Socket} | {error, Reason} -%% accept(SocketType, ListenSocket, Timeout) -> ok | {error, Reason} -%% SocketType = ip_comm | {ssl, SSLConfig} -%% ListenSocket = socket() -%% Timeout = infinity | integer() >= 0 -%% Socket = socket() -%% -%% Description: Accepts an incoming connection request on a listen socket, -%% using either gen_tcp or ssl. -%%------------------------------------------------------------------------- + -spec accept(SocketType, ListenSocket) -> {ok, Socket} | {error, Reason} when SocketType :: ip_comm | {ssl, SSLConfig}, SSLConfig :: term(), @@ -209,7 +153,7 @@ accept(SocketType, ListenSocket) -> accept(SocketType, ListenSocket, infinity). -spec accept(SocketType, ListenSocket, Timeout) -> {ok, Socket} | {error, Reason} when - SocketType :: ip_comm | {ssl | essl, SSLConfig}, + SocketType :: ip_comm | {ssl, SSLConfig}, SSLConfig :: term(), Timeout :: timeout(), ListenSocket :: gen_tcp:socket(), @@ -220,19 +164,14 @@ accept(ip_comm, ListenSocket, Timeout) -> accept({ip_comm, _}, ListenSocket, Timeout) -> gen_tcp:accept(ListenSocket, Timeout); -%% Wrapper for backaward compatibillity -accept({ssl, SSLConfig}, ListenSocket, Timeout) -> - accept({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, ListenSocket, Timeout); - -accept({essl, _SSLConfig}, ListenSocket, Timeout) -> +accept({ssl, _SSLConfig}, ListenSocket, Timeout) -> ssl:transport_accept(ListenSocket, Timeout). - %%------------------------------------------------------------------------- %% Description: Assigns a new controlling process to Socket. %%------------------------------------------------------------------------- -spec controlling_process(SocketType, Socket, NewOwner) -> Object when - SocketType :: ip_comm | {ip_comm | ssl | essl, _SSLConfig}, + SocketType :: ip_comm | {ip_comm | ssl, _Config}, Socket :: gen_tcp:socket(), NewOwner :: pid(), Object :: ok | {error, Reason}, @@ -242,11 +181,7 @@ controlling_process(ip_comm, Socket, NewOwner) -> controlling_process({ip_comm, _}, Socket, NewOwner) -> gen_tcp:controlling_process(Socket, NewOwner); -%% Wrapper for backaward compatibillity -controlling_process({ssl, SSLConfig}, Socket, NewOwner) -> - controlling_process({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket, NewOwner); - -controlling_process({essl, _}, Socket, NewOwner) -> +controlling_process({ssl, _}, Socket, NewOwner) -> ssl:controlling_process(Socket, NewOwner). @@ -255,7 +190,7 @@ controlling_process({essl, _}, Socket, NewOwner) -> %% gen_tcp or ssl. %%------------------------------------------------------------------------- -spec setopts(SocketType, Socket, Options) -> ok | {error, inet:posix()} when - SocketType :: ip_comm | {ip_comm | ssl | essl, _SSLConfig}, + SocketType :: ip_comm | {ip_comm | ssl, _Config}, Socket :: inet:socket() | ssl:sslsocket(), Options :: [inet:socket_setopt()] | [gen_tcp:option()]. setopts(ip_comm, Socket, Options) -> @@ -263,11 +198,7 @@ setopts(ip_comm, Socket, Options) -> setopts({ip_comm, _}, Socket, Options) -> inet:setopts(Socket, Options); -%% Wrapper for backaward compatibillity -setopts({ssl, SSLConfig}, Socket, Options) -> - setopts({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket, Options); - -setopts({essl, _}, Socket, Options) -> +setopts({ssl, _}, Socket, Options) -> (catch ssl:setopts(Socket, Options)). @@ -275,7 +206,7 @@ setopts({essl, _}, Socket, Options) -> %% Description: Gets the values for some options. %%------------------------------------------------------------------------- -spec getopts(SocketType, Socket) -> Object when - SocketType :: ip_comm | {ip_comm | ssl | essl, _SSLConfig}, + SocketType :: ip_comm | {ip_comm | ssl, _Conf}, Socket :: ssl:sslsocket() | inet:socket(), Object :: [gen_tcp:option()] | [inet:socket_setopt() | gen_tcp:pktoptions_value()] | []. getopts(SocketType, Socket) -> @@ -283,13 +214,10 @@ getopts(SocketType, Socket) -> getopts(SocketType, Socket, Opts). -spec getopts(SocketType, Socket, Options) -> Object when - SocketType :: ip_comm | {ip_comm | ssl | essl, _SSLConfig}, + SocketType :: ip_comm | {ip_comm | ssl, _Conf}, Socket :: ssl:sslsocket() | inet:socket(), Options :: [gen_tcp:option_name()], Object :: [gen_tcp:option()] | [inet:socket_setopt() | gen_tcp:pktoptions_value()] | []. -getopts({ip_comm, _}, Socket, Options) -> - getopts(ip_comm, Socket, Options); - getopts(ip_comm, Socket, Options) -> case inet:getopts(Socket, Options) of {ok, SocketOpts} -> @@ -297,12 +225,9 @@ getopts(ip_comm, Socket, Options) -> {error, _} -> [] end; - -%% Wrapper for backaward compatibillity -getopts({ssl, SSLConfig}, Socket, Options) -> - getopts({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket, Options); - -getopts({essl, _}, Socket, Options) -> +getopts({ip_comm, _}, Socket, Options) -> + getopts(ip_comm, Socket, Options); +getopts({ssl, _}, Socket, Options) -> getopts_ssl(Socket, Options). -spec getopts_ssl(SslSocket, Options) -> @@ -316,15 +241,7 @@ getopts_ssl(Socket, Options) -> {error, _} -> [] end. - -%%------------------------------------------------------------------------- -%% getstat(SocketType, Socket) -> socket_stats() -%% SocketType = ip_comm | {ssl, _} -%% Socket = socket() -%% socket_stats() = list() -%% Description: Gets the socket stats values for the socket -%%------------------------------------------------------------------------- getstat(ip_comm = _SocketType, Socket) -> case inet:getstat(Socket) of {ok, Stats} -> @@ -333,73 +250,30 @@ getstat(ip_comm = _SocketType, Socket) -> [] end; -%% Wrapper for backaward compatibillity -getstat({ssl, SSLConfig}, Socket) -> - getstat({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket); - -getstat({essl, _} = _SocketType, _Socket) -> +getstat({ssl, _} = _SocketType, _Socket) -> []. -%%------------------------------------------------------------------------- -%% send(RequestOrSocketType, Socket, Message) -> ok | {error, Reason} -%% SocketType = ip_comm | {ssl, _} -%% Socket = socket() -%% Message = list() | binary() -%% Description: Sends a packet on a socket, using either gen_tcp or ssl. -%%------------------------------------------------------------------------- send(ip_comm, Socket, Message) -> gen_tcp:send(Socket, Message); send({ip_comm, _}, Socket, Message) -> gen_tcp:send(Socket, Message); -%% Wrapper for backaward compatibillity -send({ssl, SSLConfig}, Socket, Message) -> - send({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket, Message); - -send({essl, _}, Socket, Message) -> +send({ssl, _}, Socket, Message) -> ssl:send(Socket, Message). -%%------------------------------------------------------------------------- -%% close(SocketType, Socket) -> ok | {error, Reason} -%% SocketType = ip_comm | {ssl, _} -%% Socket = socket() -%% -%% Description: Closes a socket, using either gen_tcp or ssl. -%%------------------------------------------------------------------------- close(ip_comm, Socket) -> gen_tcp:close(Socket); close({ip_comm, []}, Socket) -> gen_tcp:close(Socket); - -%% Wrapper for backaward compatibillity -close({ssl, SSLConfig}, Socket) -> - close({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket); - -close({essl, _}, Socket) -> +close({ssl, _}, Socket) -> ssl:close(Socket). - -%%------------------------------------------------------------------------- -%% peername(SocketType, Socket) -> {Port, SockName} -%% SocketType = ip_comm | {ssl, _} -%% Socket = socket() -%% Port = integer() (-1 if error occurred) -%% PeerName = string() -%% -%% Description: Returns the address and port for the other end of a -%% connection, usning either gen_tcp or ssl. -%%------------------------------------------------------------------------- peername(ip_comm, Socket) -> do_peername(inet:peername(Socket)); -peername({ip_comm, _}, Socket) -> +peername({ip_comm,_}, Socket) -> do_peername(inet:peername(Socket)); - -%% Wrapper for backaward compatibillity -peername({ssl, SSLConfig}, Socket) -> - peername({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket); - -peername({essl, _}, Socket) -> +peername({ssl, _}, Socket) -> do_peername(ssl:peername(Socket)). do_peername({ok, {Addr, Port}}) @@ -413,26 +287,11 @@ do_peername({ok, {Addr, Port}}) do_peername({error, _}) -> {-1, "unknown"}. - -%%------------------------------------------------------------------------- -%% sockname(SocketType, Socket) -> {Port, SockName} -%% SocketType = ip_comm | {ssl, _} -%% Socket = socket() -%% Port = integer() (-1 if error occurred) -%% SockName = string() -%% -%% Description: Returns the address and port for the local (our) end -%% other end of connection, using either gen_tcp or ssl. -%%------------------------------------------------------------------------- sockname(ip_comm, Socket) -> do_sockname(inet:sockname(Socket)); -sockname({ip_comm, _}, Socket) -> +sockname({ip_comm,_}, Socket) -> do_sockname(inet:sockname(Socket)); -%% Wrapper for backaward compatibillity -sockname({ssl, SSLConfig}, Socket) -> - sockname({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket); - -sockname({essl, _}, Socket) -> +sockname({ssl, _}, Socket) -> do_sockname(ssl:sockname(Socket)). do_sockname({ok, {Addr, Port}}) @@ -446,26 +305,10 @@ do_sockname({ok, {Addr, Port}}) do_sockname({error, _}) -> {-1, "unknown"}. - -%%------------------------------------------------------------------------- -%% resolve() -> HostName -%% HostName = string() -%% -%% Description: Returns the local hostname. -%%------------------------------------------------------------------------- resolve() -> {ok, Name} = inet:gethostname(), Name. - -%%------------------------------------------------------------------------- -%% ipv4_name(Ipv4Addr) -> string() -%% ipv6_name(Ipv6Addr) -> string() -%% Ipv4Addr = ip4_address() -%% Ipv6Addr = ip6_address() -%% -%% Description: Returns the local hostname. -%%------------------------------------------------------------------------- ipv4_name({A, B, C, D}) -> integer_to_list(A) ++ "." ++ integer_to_list(B) ++ "." ++ @@ -510,9 +353,7 @@ negotiate(ip_comm,_,_) -> ok; negotiate({ip_comm, _},_,_) -> ok; -negotiate({ssl, SSLConfig}, Socket, Timeout) -> - negotiate({?HTTP_DEFAULT_SSL_KIND, SSLConfig}, Socket, Timeout); -negotiate({essl, _}, Socket, Timeout) -> +negotiate({ssl, _}, Socket, Timeout) -> negotiate_ssl(Socket, Timeout). negotiate_ssl(Socket, Timeout) -> diff --git a/lib/inets/src/http_server/httpd.erl b/lib/inets/src/http_server/httpd.erl index 54d699f500..375d12a768 100644 --- a/lib/inets/src/http_server/httpd.erl +++ b/lib/inets/src/http_server/httpd.erl @@ -351,8 +351,6 @@ httpd_ssl_wrapper(Config0) -> case proplists:get_value(socket_type, Config0) of {essl, Value} -> lists:keyreplace(socket_type, 1, Config0, {socket_type, {ssl, Value}}); - {ssl, Value} -> - lists:keyreplace(socket_type, 1, Config0, {socket_type, {essl, Value}}); _ -> Config0 end. diff --git a/lib/inets/src/http_server/httpd_conf.erl b/lib/inets/src/http_server/httpd_conf.erl index 91f2020f77..2454398074 100644 --- a/lib/inets/src/http_server/httpd_conf.erl +++ b/lib/inets/src/http_server/httpd_conf.erl @@ -206,8 +206,7 @@ validate_config_params([{socket_type, ip_comm} | Rest]) -> validate_config_params(Rest); validate_config_params([{socket_type, {Value, Opts}} | Rest]) when Value == ip_comm; - Value == ssl; - Value == essl -> + Value == ssl -> %% Make sure not to set socket values used internally validate_config_params(Opts), validate_config_params(Rest); @@ -293,51 +292,6 @@ validate_config_params([{logger, Value} | Rest]) when is_list(Value) -> validate_config_params([{logger, Value} | _]) -> throw({logger, Value}); -validate_config_params([{ssl_certificate_file = Key, Value} | Rest]) -> - ok = httpd_util:file_validate(Key, Value), - validate_config_params(Rest); - -validate_config_params([{ssl_certificate_key_file = Key, Value} | Rest]) -> - ok = httpd_util:file_validate(Key, Value), - validate_config_params(Rest); - -validate_config_params([{ssl_verify_client, Value} | Rest]) - when (Value =:= 0) orelse (Value =:= 1) orelse (Value =:= 2) -> - validate_config_params(Rest); - -validate_config_params([{ssl_verify_client_depth, Value} | Rest]) - when is_integer(Value) andalso (Value >= 0) -> - validate_config_params(Rest); -validate_config_params([{ssl_verify_client_depth, Value} | _]) -> - throw({ssl_verify_client_depth, Value}); - -validate_config_params([{ssl_ciphers, Value} | Rest]) when is_list(Value) -> - validate_config_params(Rest); -validate_config_params([{ssl_ciphers, Value} | _]) -> - throw({ssl_ciphers, Value}); - -validate_config_params([{ssl_ca_certificate_file = Key, Value} | Rest]) -> - ok = httpd_util:file_validate(Key, Value), - validate_config_params(Rest); - -validate_config_params([{ssl_password_callback_module, Value} | Rest]) - when is_atom(Value) -> - validate_config_params(Rest); -validate_config_params([{ssl_password_callback_module, Value} | _]) -> - throw({ssl_password_callback_module, Value}); - -validate_config_params([{ssl_password_callback_function, Value} | Rest]) - when is_atom(Value) -> - validate_config_params(Rest); -validate_config_params([{ssl_password_callback_function, Value} | _]) -> - throw({ssl_password_callback_function, Value}); - -validate_config_params([{ssl_password_callback_arguments, Value} | Rest]) - when is_list(Value) -> - validate_config_params(Rest); -validate_config_params([{ssl_password_callback_arguments, Value} | _]) -> - throw({ssl_password_callback_arguments, Value}); - validate_config_params([{disable_chunked_transfer_encoding_send, Value} | Rest]) when (Value =:= true) orelse (Value =:= false) -> @@ -574,34 +528,9 @@ lookup_socket_type(ConfigDB) -> {ip_comm, _} = Type -> Type; {Tag, Conf} -> - {Tag, Conf}; - SSL when (SSL =:= ssl) orelse (SSL =:= essl) -> - SSLTag = - if - (SSL =:= ssl) -> - ?HTTP_DEFAULT_SSL_KIND; - true -> - SSL - end, - case ssl_certificate_file(ConfigDB) of - undefined -> - Reason = "Directive SSLCertificateFile " - "not found in the config file", - throw({error, Reason}); - SSLCertificateFile -> - {SSLTag, SSLCertificateFile ++ ssl_config(ConfigDB)} - end + {Tag, Conf} end. -ssl_config(ConfigDB) -> - ssl_certificate_key_file(ConfigDB) ++ - ssl_verify_client(ConfigDB) ++ - ssl_ciphers(ConfigDB) ++ - ssl_password(ConfigDB) ++ - ssl_verify_depth(ConfigDB) ++ - ssl_ca_certificate_file(ConfigDB) ++ - ssl_log_level(ConfigDB). - %%%======================================================================== %%% Internal functions %%%======================================================================== @@ -703,96 +632,9 @@ remove_traverse(ConfigDB,[Module|Rest]) -> remove_traverse(ConfigDB,Rest) end. -ssl_certificate_file(ConfigDB) -> - case httpd_util:lookup(ConfigDB,ssl_certificate_file) of - undefined -> - undefined; - SSLCertificateFile -> - [{certfile,SSLCertificateFile}] - end. - -ssl_certificate_key_file(ConfigDB) -> - case httpd_util:lookup(ConfigDB,ssl_certificate_key_file) of - undefined -> - []; - SSLCertificateKeyFile -> - [{keyfile,SSLCertificateKeyFile}] - end. - -ssl_log_level(ConfigDB) -> - case httpd_util:lookup(ConfigDB,ssl_log_alert) of - undefined -> - []; - SSLLogLevel -> - [{log_alert,SSLLogLevel}] - end. - -ssl_verify_client(ConfigDB) -> - case httpd_util:lookup(ConfigDB,ssl_verify_client) of - undefined -> - []; - SSLVerifyClient -> - [{verify,SSLVerifyClient}] - end. - -ssl_ciphers(ConfigDB) -> - case httpd_util:lookup(ConfigDB,ssl_ciphers) of - undefined -> - []; - Ciphers -> - [{ciphers, Ciphers}] - end. - -ssl_password(ConfigDB) -> - case httpd_util:lookup(ConfigDB,ssl_password_callback_module) of - undefined -> - []; - Module -> - case httpd_util:lookup(ConfigDB, - ssl_password_callback_function) of - undefined -> - []; - Function -> - Args = case httpd_util:lookup(ConfigDB, - ssl_password_callback_arguments) of - undefined -> - []; - Arguments -> - [Arguments] - end, - - case catch apply(Module, Function, Args) of - Password when is_list(Password) -> - [{password, Password}]; - Error -> - error_report(ssl_password,Module,Function,Error), - [] - end - end - end. - -ssl_verify_depth(ConfigDB) -> - case httpd_util:lookup(ConfigDB, ssl_verify_client_depth) of - undefined -> - []; - Depth -> - [{depth, Depth}] - end. - -ssl_ca_certificate_file(ConfigDB) -> - case httpd_util:lookup(ConfigDB, ssl_ca_certificate_file) of - undefined -> - []; - File -> - [{cacertfile, File}] - end. - plain_server_tokens() -> [none, prod, major, minor, minimum, os, full]. -error_report(Where,M,F,Error) -> - error_logger:error_report([{?MODULE, Where}, - {apply, {M, F, []}}, Error]). white_space_clean(String) -> re:replace(String, "^[ \t\n\r\f]*|[ \t\n\r\f]*\$","", [{return,list}, global]). diff --git a/lib/inets/src/http_server/httpd_example.erl b/lib/inets/src/http_server/httpd_example.erl index 8097918e36..5474b0b7fd 100644 --- a/lib/inets/src/http_server/httpd_example.erl +++ b/lib/inets/src/http_server/httpd_example.erl @@ -225,7 +225,7 @@ newformat(SessionID,_,_) -> %% ------------------------------------------------------ delay(SessionID,_, _) -> - sleep(10000), + sleep(2000), Reply = delay_reply("delay ok"), mod_esi:deliver(SessionID, Reply). diff --git a/lib/inets/src/http_server/httpd_request_handler.erl b/lib/inets/src/http_server/httpd_request_handler.erl index 26327a2567..3d3191fc7b 100644 --- a/lib/inets/src/http_server/httpd_request_handler.erl +++ b/lib/inets/src/http_server/httpd_request_handler.erl @@ -327,16 +327,16 @@ do_terminate(#state{mod = ModData} = State) -> httpd_socket:close(ModData#mod.socket_type, ModData#mod.socket). format_status(normal, [_, State]) -> - [{data, [{"StateData", State}]}]; + [{data, [{"StateData", State}]}]; format_status(terminate, [_, State]) -> Mod = (State#state.mod), case Mod#mod.socket_type of - ip_comm -> - [{data, [{"StateData", State}]}]; - {essl, _} -> - %% Do not print ssl options in superviosr reports - [{data, [{"StateData", - State#state{mod = Mod#mod{socket_type = 'TLS'}}}]}] + {ssl, _} -> + %% Do not print ssl options in supervisor reports + [{data, [{"StateData", + State#state{mod = Mod#mod{socket_type = 'TLS'}}}]}]; + _ -> + [{data, [{"StateData", State}]}] end. %%-------------------------------------------------------------------- diff --git a/lib/inets/src/http_server/httpd_script_env.erl b/lib/inets/src/http_server/httpd_script_env.erl index d3c7b5e1c6..11e074af00 100644 --- a/lib/inets/src/http_server/httpd_script_env.erl +++ b/lib/inets/src/http_server/httpd_script_env.erl @@ -61,12 +61,11 @@ which_port(#mod{config_db = ConfigDb}) -> which_peername(#mod{init_data = #init_data{peername = {_, RemoteAddr}}}) -> RemoteAddr. -which_peercert(#mod{socket_type = {Type, _}, socket = Socket}) when Type == essl; - Type == ssl -> +which_peercert(#mod{socket_type = {ssl, _}, socket = Socket}) -> case ssl:peercert(Socket) of {ok, Cert} -> Cert; - {error, no_peercert} -> + {error, no_peercert} -> no_peercert; _ -> undefined diff --git a/lib/inets/src/http_server/httpd_sup.erl b/lib/inets/src/http_server/httpd_sup.erl index 0d4ad772d4..34ffb0bbf4 100644 --- a/lib/inets/src/http_server/httpd_sup.erl +++ b/lib/inets/src/http_server/httpd_sup.erl @@ -63,7 +63,6 @@ start_child(Config) -> Error end. - restart_child(Address, Port, Profile) -> Name = id(Address, Port, Profile), case supervisor:terminate_child(?MODULE, Name) of @@ -254,90 +253,12 @@ listen_loop() -> end. socket_type(Config) -> - SocketType = proplists:get_value(socket_type, Config, ip_comm), - socket_type(SocketType, Config). - --spec socket_type(SocketType | Term) -> SocketType when - Term :: term(), - SocketType :: ip_comm | {ip_comm, _Value} | {ssl, _Value}. -socket_type(ip_comm = SocketType, _) -> - SocketType; -socket_type({ip_comm, _} = SocketType, _) -> - SocketType; -socket_type({essl, _} = SocketType, _) -> - SocketType; -socket_type(_, Config) -> - {essl, ssl_config(Config)}. - -%%% Backwards compatibility -ssl_config(Config) -> - ssl_certificate_key_file(Config) ++ - ssl_verify_client(Config) ++ - ssl_ciphers(Config) ++ - ssl_password(Config) ++ - ssl_verify_depth(Config) ++ - ssl_ca_certificate_file(Config). - -ssl_certificate_key_file(Config) -> - case proplists:get_value(ssl_certificate_key_file, Config) of - undefined -> - []; - SSLCertificateKeyFile -> - [{keyfile,SSLCertificateKeyFile}] - end. - -ssl_verify_client(Config) -> - case proplists:get_value(ssl_verify_client, Config) of - undefined -> - []; - SSLVerifyClient -> - [{verify,SSLVerifyClient}] - end. - -ssl_ciphers(Config) -> - case proplists:get_value(ssl_ciphers, Config) of - undefined -> - []; - Ciphers -> - [{ciphers, Ciphers}] - end. - -ssl_password(Config) -> - case proplists:get_value(ssl_password_callback_module, Config) of - undefined -> - []; - Module -> - case proplists:get_value(ssl_password_callback_function, Config) of - undefined -> - []; - Function -> - Args = case proplists:get_value(ssl_password_callback_arguments, Config) of - undefined -> - []; - Arguments -> - [Arguments] - end, - Password = apply(Module, Function, Args), - [{password, Password}] - end - end. - -ssl_verify_depth(Config) -> - case proplists:get_value(ssl_verify_client_depth, Config) of - undefined -> - []; - Depth -> - [{depth, Depth}] - end. - -ssl_ca_certificate_file(Config) -> - case proplists:get_value(ssl_ca_certificate_file, Config) of - undefined -> - []; - File -> - [{cacertfile, File}] - end. - + case proplists:get_value(socket_type, Config, ip_comm) of + {essl, Value} -> + {ssl, Value}; + Other -> + Other + end. -spec get_fd(Port) -> Object when Port :: integer(), Object :: {ok, integer() | undefined} | {error, {bad_descriptor, term()}}. diff --git a/lib/inets/src/http_server/mod_alias.erl b/lib/inets/src/http_server/mod_alias.erl index 94607e705a..b5c4087ab4 100644 --- a/lib/inets/src/http_server/mod_alias.erl +++ b/lib/inets/src/http_server/mod_alias.erl @@ -91,8 +91,9 @@ port_string(Port) -> get_protocol(ip_comm) -> "http://"; -get_protocol(_) -> - %% Should clean up to have only one ssl type essl vs ssl is not relevant any more +get_protocol({ip_comm, _}) -> + "http://"; +get_protocol({ssl, _}) -> "https://". %% real_name diff --git a/lib/inets/test/httpc_SUITE.erl b/lib/inets/test/httpc_SUITE.erl index 1375f083fe..9e43deb598 100644 --- a/lib/inets/test/httpc_SUITE.erl +++ b/lib/inets/test/httpc_SUITE.erl @@ -249,6 +249,8 @@ init_per_group(Group, Config0) when Group =:= sim_https; Group =:= https; try crypto:start() of ok -> start_apps(Group), + httpc:set_options([{keep_alive_timeout, 50000}, + {max_keep_alive_length, 5}]), do_init_per_group(Group, Config0) catch _:_ -> diff --git a/lib/inets/test/httpd_SUITE.erl b/lib/inets/test/httpd_SUITE.erl index a811d49c02..dc93812d00 100644 --- a/lib/inets/test/httpd_SUITE.erl +++ b/lib/inets/test/httpd_SUITE.erl @@ -1924,7 +1924,7 @@ do_max_clients(Config) -> ok end, inets_test_lib:close(Type, Socket), - ct:sleep(100), %% Avoid possible timing issues + ct:sleep(5000), %% Avoid possible timing issues ok = httpd_test_lib:verify_request(Type, Host, Port, transport_opts(Type, Config), diff --git a/lib/inets/test/httpd_bench_SUITE.erl b/lib/inets/test/httpd_bench_SUITE.erl index 65897176a4..85cd67f18e 100644 --- a/lib/inets/test/httpd_bench_SUITE.erl +++ b/lib/inets/test/httpd_bench_SUITE.erl @@ -449,7 +449,7 @@ start_web_server(Group, Config) when Group == https_inets; Group == https_inets_keep_alive -> Opts = proplists:get_value(server_verification_opts, cert_opts(Config)), ReuseSessions = ?config(reuse_sessions, Config), - SSLConfHttpd = [{socket_type, {essl, + SSLConfHttpd = [{socket_type, {ssl, [{nodelay, true}, {reuse_sessions, ReuseSessions} | Opts]}}], start_inets("https", SSLConfHttpd, Config); diff --git a/lib/inets/test/httpd_time_test.erl b/lib/inets/test/httpd_time_test.erl index a31f40ce63..c03ef6c588 100644 --- a/lib/inets/test/httpd_time_test.erl +++ b/lib/inets/test/httpd_time_test.erl @@ -47,7 +47,7 @@ t2(Host, Port) -> t4(Host, Port) -> - t(essl, Host, Port). + t(ssl, Host, Port). t(SocketType, Host, Port) -> diff --git a/lib/inets/test/inets_test_lib.erl b/lib/inets/test/inets_test_lib.erl index 1cc4e11e45..01793714fd 100644 --- a/lib/inets/test/inets_test_lib.erl +++ b/lib/inets/test/inets_test_lib.erl @@ -207,12 +207,12 @@ ensure_loaded(App) -> %% start_http_server(Conf) -> - start_http_server(Conf, ?HTTP_DEFAULT_SSL_KIND). + start_http_server(Conf, ssl). -start_http_server(Conf, essl = _SslTag) -> - tsp("start_http_server(essl) -> try start crypto"), +start_http_server(Conf, ssl = _SslTag) -> + tsp("start_http_server(ssl) -> try start crypto"), application:start(crypto), - tsp("start_http_server(essl) -> try start public_key"), + tsp("start_http_server(ssl) -> try start public_key"), application:start(public_key), do_start_http_server(Conf); start_http_server(Conf, SslTag) -> @@ -252,9 +252,9 @@ do_start_http_server(Conf) -> end. start_http_server_ssl(FileName) -> - start_http_server_ssl(FileName, ?HTTP_DEFAULT_SSL_KIND). + start_http_server_ssl(FileName, ssl). -start_http_server_ssl(FileName, essl = _SslTag) -> +start_http_server_ssl(FileName, ssl = _SslTag) -> application:start(crypto), do_start_http_server_ssl(FileName); start_http_server_ssl(FileName, _SslTag) -> @@ -459,9 +459,6 @@ connect_bin(SockType, Host, Port) -> connect_bin(ssl, Host, Port, Opts0) -> Opts = [binary, {packet,0} | Opts0], connect(ssl, Host, Port, Opts); -connect_bin(essl, Host, Port, Opts0) -> - Opts = [{ssl_imp, new}, binary, {packet,0}| Opts0], - connect(ssl, Host, Port, Opts); connect_bin(ip_comm, Host, Port, Opts0) -> Opts = [binary, {packet, 0} | Opts0], connect(ip_comm, Host, Port, Opts); @@ -472,13 +469,10 @@ connect_byte(SockType, Host, Port) -> connect_byte(SockType, Host, Port, []). connect_byte(ssl, Host, Port, Opts0) -> - Opts = [{packet,0} | Opts0], - connect(ssl, Host, Port, Opts); -connect_byte(essl, Host, Port, Opts0) -> - Opts = [{ssl_imp, new}, {packet,0} | Opts0], + Opts = [list, {packet,0} | Opts0], connect(ssl, Host, Port, Opts); connect_byte(ip_comm, Host, Port, Opts0) -> - Opts = [{packet,0} | Opts0], + Opts = [list, {packet,0} | Opts0], connect(ip_comm, Host, Port, Opts); connect_byte(Type, Host, Port, Opts) -> connect(Type, Host, Port, Opts). @@ -498,8 +492,6 @@ connect(openssl_port, Host, Port, Opts) -> send(ssl, Socket, Data) -> ssl:send(Socket, Data); -send(essl, Socket, Data) -> - ssl:send(Socket, Data); send(ip_comm,Socket,Data) -> gen_tcp:send(Socket,Data); send(openssl_port, Port, Data) -> @@ -507,8 +499,6 @@ send(openssl_port, Port, Data) -> ok. close(ssl,Socket) -> catch ssl:close(Socket); -close(essl,Socket) -> - catch ssl:close(Socket); close(ip_comm,Socket) -> catch gen_tcp:close(Socket); close(openssl_port, Port) -> -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor