From 5ba2fd6675e9b720b7aa6bb4f18c368e5c944a08 Mon Sep 17 00:00:00 2001 From: Nelson Vides Date: Tue, 7 Jan 2025 20:24:27 +0100 Subject: [PATCH] Introduce hibernate_after flag --- src/escalus_connection.erl | 4 +++- src/escalus_tcp.erl | 26 +++++++++++++++----------- src/escalus_ws.erl | 2 +- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/escalus_connection.erl b/src/escalus_connection.erl index fe450e5..1a69cbf 100644 --- a/src/escalus_connection.erl +++ b/src/escalus_connection.erl @@ -425,7 +425,9 @@ use_zlib(#client{module = Mod, rcv_pid = Pid}) -> -spec upgrade_to_tls(client()) -> ok. upgrade_to_tls(#client{module = Mod, rcv_pid = Pid, props = Props}) -> - SSLOpts = proplists:get_value(ssl_opts, Props, [[{verify, verify_none}]]), + HibernateAfter = proplists:get_value(hibernate_after, Props, 500), + DefSslOpts = [[{hibernate_after, HibernateAfter}, {verify, verify_none}]], + SSLOpts = proplists:get_value(ssl_opts, Props, DefSslOpts), Mod:upgrade_to_tls(Pid, SSLOpts). wait_for_close(Client) -> diff --git a/src/escalus_tcp.erl b/src/escalus_tcp.erl index c1ffd4f..6021a5c 100755 --- a/src/escalus_tcp.erl +++ b/src/escalus_tcp.erl @@ -74,8 +74,9 @@ on_connect => fun(), event_client => undefined | escalus_event:event_client(), socket_opts => [gen_tcp:connect_option()], - ssl_opts => [ssl:ssl_option()], - parser_opts => [exml_stream:parser_opt()] + ssl_opts => [ssl:tls_option()], + parser_opts => [exml_stream:parser_opt()], + hibernate_after => timeout() }. %%%=================================================================== @@ -85,7 +86,8 @@ -spec connect([proplists:property()] | opts()) -> pid(). connect(Opts0) -> Opts1 = opts_to_map(Opts0), - {ok, Pid} = gen_server:start_link(?MODULE, [Opts1, self()], []), + GenOpts = maps:to_list(maps:with([hibernate_after], Opts1)), + {ok, Pid} = gen_server:start_link(?MODULE, [Opts1, self()], GenOpts), Pid. -spec send(pid(), exml_stream:element() | [exml_stream:element()] | binary()) -> ok. @@ -147,7 +149,7 @@ kill(Pid) -> already_stopped end. --spec upgrade_to_tls(pid(), [ssl:ssl_option()]) -> ok. +-spec upgrade_to_tls(pid(), [ssl:tls_option()]) -> ok. upgrade_to_tls(Pid, SSLOpts) -> case gen_server:call(Pid, {upgrade_to_tls, SSLOpts}) of {error, Error} -> @@ -338,7 +340,8 @@ default_options() -> event_client => undefined, socket_opts => default_socket_options(), ssl_opts => [{verify, verify_none}], - parser_opts => []}. + parser_opts => [], + hibernate_after => 500}. -spec default_socket_options() -> [gen_tcp:connect_option()]. default_socket_options() -> @@ -481,11 +484,12 @@ do_connect(#{ssl := IsSSLConn, on_connect := OnConnectFun, host := Host, port := Port, - ssl_opts := SSLOpts} = Opts) -> + ssl_opts := SSLOpts, + hibernate_after := HibernateAfter} = Opts) -> Address = host_to_inet(Host), SocketOpts = get_socket_opts(Opts), TimeB = erlang:system_time(microsecond), - Reply = maybe_ssl_connection(IsSSLConn, TLSMod, Address, Port, SocketOpts, SSLOpts), + Reply = maybe_ssl_connection(IsSSLConn, TLSMod, Address, Port, SocketOpts, SSLOpts, HibernateAfter), TimeA = erlang:system_time(microsecond), ConnectionTime = TimeA - TimeB, case Reply of @@ -496,12 +500,12 @@ do_connect(#{ssl := IsSSLConn, end, Reply. -maybe_ssl_connection(true, fast_tls, Address, Port, SocketOpts, SSLOpts) -> +maybe_ssl_connection(true, fast_tls, Address, Port, SocketOpts, SSLOpts, _) -> {ok, GenTcpSocket} = gen_tcp:connect(Address, Port, SocketOpts), tcp_to_tls(fast_tls, GenTcpSocket, SSLOpts); -maybe_ssl_connection(true, ssl, Address, Port, SocketOpts, SSLOpts) -> - ssl:connect(Address, Port, SocketOpts ++ SSLOpts); -maybe_ssl_connection(_, _, Address, Port, SocketOpts, _) -> +maybe_ssl_connection(true, ssl, Address, Port, SocketOpts, SSLOpts, HibernateAfter) -> + ssl:connect(Address, Port, SocketOpts ++ SSLOpts ++ [{hibernate_after, HibernateAfter}]); +maybe_ssl_connection(_, _, Address, Port, SocketOpts, _, _) -> gen_tcp:connect(Address, Port, SocketOpts). tcp_to_tls(fast_tls, GenTcpSocket, SSLOpts) -> diff --git a/src/escalus_ws.erl b/src/escalus_ws.erl index dbd32a4..2d2f2b0 100755 --- a/src/escalus_ws.erl +++ b/src/escalus_ws.erl @@ -54,7 +54,7 @@ wslegacy => boolean(), event_client => undefined | escalus_event:event_client(), ssl => boolean(), - ssl_opts => [ssl:ssl_option()], + ssl_opts => [ssl:tls_option()], ws_upgrade_timeout => pos_integer(), stream_management => boolean(), manual_ack => boolean()