Skip to content

Commit

Permalink
api: rename listener start/stop to spawn/terminate
Browse files Browse the repository at this point in the history
  • Loading branch information
qzhuyan committed Aug 22, 2023
1 parent d9a32da commit 1976e82
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 79 deletions.
51 changes: 28 additions & 23 deletions src/quicer.erl
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@

%% Traffic APIs
-export([ listen/2
, stop_listen/1
, start_listen/3
, stop_listener/1
, start_listener/3
, close_listener/1
, close_listener/2
, connect/4
Expand Down Expand Up @@ -110,8 +110,8 @@
, open_connection/0
]).

-export([ start_listener/3 %% start application over quic
, stop_listener/1
-export([ spawn_listener/3 %% start application over quic
, terminate_listener/1
]).

-type connection_opts() :: proplists:proplist() | quicer_connection:opts().
Expand Down Expand Up @@ -171,28 +171,17 @@ reg_open(Profile) ->
reg_close() ->
quicer_nif:reg_close().

-spec start_listener(Appname :: atom() | listener_handle(), listen_on(),
{listener_opts(),
connection_opts(),
stream_opts() | user_opts()}
) ->
%% @doc Start a stopped listener with listener handle.
-spec start_listener(listener_handle(), listen_on(), listen_opts()) ->
{ok, pid()} | {error, any()}.
start_listener(AppName, Port, Options) when is_atom(AppName) ->
quicer_listener:start_listener(AppName, Port, Options).

-spec start_listen(listener_handle(), listen_on(), listen_opts()) ->
{ok, pid()} | {error, any()}.
start_listen(Listener, Port, Options) when is_list(Options)->
start_listen(Listener, Port, maps:from_list(Options));
start_listen(Listener, Port, Options) ->
start_listener(Listener, Port, Options) when is_list(Options)->
start_listener(Listener, Port, maps:from_list(Options));
start_listener(Listener, Port, Options) ->
quicer_nif:start_listener(Listener, Port, Options).

-spec stop_listener(atom() | listener_handle()) -> ok.
stop_listener(AppName) when is_atom(AppName)->
quicer_listener:stop_listener(AppName).

-spec stop_listen(listener_handle()) -> ok.
stop_listen(Handle) ->
%% @doc Stop a started listener which could be closed or restarted later.
-spec stop_listener(listener_handle()) -> ok.
stop_listener(Handle) ->
case quicer_nif:stop_listener(Handle) of
ok ->
receive
Expand All @@ -204,6 +193,22 @@ stop_listen(Handle) ->
{error, Reason}
end.


%% @doc start a listener process under supervisor tree
-spec spawn_listener(Appname :: atom() | listener_handle(), listen_on(),
{listener_opts(),
connection_opts(),
stream_opts() | user_opts()}
) ->
{ok, pid()} | {error, any()}.
spawn_listener(AppName, Port, Options) when is_atom(AppName) ->
quicer_listener:start_listener(AppName, Port, Options).

%% @doc terminate a listener process under supervisor tree
-spec terminate_listener(atom() | listener_handle()) -> ok.
terminate_listener(AppName) when is_atom(AppName)->
quicer_listener:stop_listener(AppName).

%% @doc Start listen on Port or "HOST:PORT".
%%
%% listener_handle() is used for accepting new connection.
Expand Down
60 changes: 30 additions & 30 deletions test/quicer_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ end_per_testcase(tc_open_listener_neg_1, _Config) ->
quicer:open_lib(),
quicer:reg_open();
end_per_testcase(_TestCase, _Config) ->
quicer:stop_listener(mqtt),
quicer:terminate_listener(mqtt),
Unhandled = quicer_test_lib:receive_all(),
Unhandled =/= [] andalso ct:comment("What left in the message queue: ~p", [Unhandled]),
ok.
Expand Down Expand Up @@ -499,14 +499,14 @@ tc_stop_start_listener(Config) ->
Port = select_port(),
LConf = default_listen_opts(Config),
{ok, L} = quicer:listen(Port, LConf),
ok = quicer:stop_listen(L),
ok = quicer:start_listen(L, Port, LConf),
ok = quicer:stop_listener(L),
ok = quicer:start_listener(L, Port, LConf),
ok = quicer:close_listener(L).

tc_stop_close_listener(Config) ->
Port = select_port(),
{ok, L} = quicer:listen(Port, default_listen_opts(Config)),
ok = quicer:stop_listen(L),
ok = quicer:stop_listener(L),
ok = quicer:close_listener(L, 0).

tc_start_listener_alpn_too_long(Config) ->
Expand Down Expand Up @@ -542,14 +542,14 @@ tc_get_listeners(Config) ->
],
Res = lists:map(
fun({Alpn, ListenOn}) ->
{ok, L} = quicer:start_listener(
{ok, L} = quicer:spawn_listener(
Alpn, ListenOn,
{ListenerOpts, ConnectionOpts, StreamOpts}),
L
end, Listeners),
?assertEqual(lists:reverse(lists:zip(Listeners, Res)),
quicer:listeners()),
lists:foreach(fun({L, _}) -> ok = quicer:stop_listener(L) end, Listeners).
lists:foreach(fun({L, _}) -> ok = quicer:terminate_listener(L) end, Listeners).

tc_get_listener(Config) ->
ListenerOpts = [{conn_acceptors, 32} | default_listen_opts(Config)],
Expand All @@ -564,7 +564,7 @@ tc_get_listener(Config) ->
, {alpn4, "[::1]:24570"}
],
lists:map(fun({Alpn, ListenOn}) ->
{ok, L} = quicer:start_listener(Alpn, ListenOn,
{ok, L} = quicer:spawn_listener(Alpn, ListenOn,
{ListenerOpts, ConnectionOpts, StreamOpts}),
L
end, Listeners),
Expand All @@ -575,7 +575,7 @@ tc_get_listener(Config) ->
true = is_process_alive(LPid)
end, Listeners),

lists:foreach(fun({L, _}) -> ok = quicer:stop_listener(L) end, Listeners),
lists:foreach(fun({L, _}) -> ok = quicer:terminate_listener(L) end, Listeners),

lists:foreach(fun({Name, _} = NameListenON) ->
?assertEqual({error, not_found}, quicer:listener(Name)),
Expand Down Expand Up @@ -2276,7 +2276,7 @@ tc_app_echo_server(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port, default_conn_opts(), 5000),
{ok, Stm} = quicer:start_stream(Conn, [{active, false}]),
{ok, 4} = quicer:async_send(Stm, <<"ping">>),
Expand All @@ -2285,10 +2285,10 @@ tc_app_echo_server(Config) ->
{ok, <<"pingpingping">>} = quicer:recv(Stm, 12),
ok = quicer:close_stream(Stm),
ok = quicer:close_connection(Conn),
ok = quicer:stop_listener(mqtt),
ok = quicer:terminate_listener(mqtt),
%% test that listener could be reopened
{ok, _} = quicer:start_listener(mqtt, Port, Options),
ok = quicer:stop_listener(mqtt),
{ok, _} = quicer:spawn_listener(mqtt, Port, Options),
ok = quicer:terminate_listener(mqtt),
ok.

tc_strm_opt_active_1(Config) ->
Expand All @@ -2302,7 +2302,7 @@ tc_strm_opt_active_1(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port, default_conn_opts(), 5000),
{ok, Stm} = quicer:start_stream(Conn, [{active, 1}]),
{ok, 5} = quicer:send(Stm, <<"ping1">>),
Expand All @@ -2328,7 +2328,7 @@ tc_strm_opt_active_n(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port, default_conn_opts(), 5000),
{ok, Stm} = quicer:start_stream(Conn, [{active, 3}]),
{ok, 5} = quicer:async_send(Stm, <<"ping1">>),
Expand Down Expand Up @@ -2361,7 +2361,7 @@ tc_strm_opt_active_once(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port, default_conn_opts(), 5000),
{ok, Stm} = quicer:start_stream(Conn, [{active, once}]),
{ok, 5} = quicer:async_send(Stm, <<"ping1">>),
Expand Down Expand Up @@ -2389,7 +2389,7 @@ tc_strm_opt_active_badarg(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port, default_conn_opts(), 5000),
{error, badarg} = quicer:start_stream(Conn, [{active, twice}]).

Expand All @@ -2404,7 +2404,7 @@ tc_get_conn_rid(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port, default_conn_opts(), 5000),
{ok, Rid} = quicer:get_conn_rid(Conn),
?assert(is_integer(Rid) andalso Rid =/=0).
Expand All @@ -2420,7 +2420,7 @@ tc_get_stream_rid(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port, default_conn_opts(), 5000),
{ok, Stm} = quicer:start_stream(Conn, [{active, 3}]),
{ok, Rid} = quicer:get_stream_rid(Stm),
Expand All @@ -2442,7 +2442,7 @@ tc_stream_open_flag_unidirectional(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port, default_conn_opts(), 5000),
{ok, Stm} = quicer:start_stream(Conn, [ {active, 3}
, {open_flag, ?QUIC_STREAM_OPEN_FLAG_UNIDIRECTIONAL}
Expand All @@ -2469,7 +2469,7 @@ tc_stream_start_flag_fail_blocked(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port, default_conn_opts(), 5000),
{ok, Stm} = quicer:start_stream(Conn, [ {active, 3}, {start_flag, ?QUIC_STREAM_START_FLAG_FAIL_BLOCKED}
, {quic_event_mask, ?QUICER_STREAM_EVENT_MASK_START_COMPLETE}
Expand Down Expand Up @@ -2513,7 +2513,7 @@ tc_stream_start_flag_immediate(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port, default_conn_opts(), 5000),
{ok, Stm} = quicer:start_stream(Conn, [ {active, 3}, {start_flag, ?QUIC_STREAM_START_FLAG_IMMEDIATE}
, {quic_event_mask, ?QUICER_STREAM_EVENT_MASK_START_COMPLETE}
Expand Down Expand Up @@ -2543,7 +2543,7 @@ tc_stream_start_flag_shutdown_on_fail(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port, default_conn_opts(), 5000),
{ok, Stm} = quicer:start_stream(Conn, [ {active, 3}, {start_flag, ?QUIC_STREAM_START_FLAG_SHUTDOWN_ON_FAIL
bor ?QUIC_STREAM_START_FLAG_FAIL_BLOCKED
Expand Down Expand Up @@ -2592,7 +2592,7 @@ tc_stream_start_flag_indicate_peer_accept_1(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port, default_conn_opts(), 5000),
{ok, Stm} = quicer:start_stream(Conn, [ {active, 3}, {start_flag, ?QUIC_STREAM_START_FLAG_INDICATE_PEER_ACCEPT}
, {quic_event_mask, ?QUICER_STREAM_EVENT_MASK_START_COMPLETE}
Expand Down Expand Up @@ -2807,7 +2807,7 @@ tc_conn_opt_sslkeylogfile(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port,
[ {sslkeylogfile, TargetFName} |
default_conn_opts() ],
Expand All @@ -2828,7 +2828,7 @@ tc_insecure_traffic(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port,
[{param_conn_disable_1rtt_encryption, true} |
default_conn_opts()], 5000),
Expand Down Expand Up @@ -2857,7 +2857,7 @@ tc_event_start_compl_client(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port,
[{param_conn_disable_1rtt_encryption, true} |
default_conn_opts()], 5000),
Expand Down Expand Up @@ -2899,7 +2899,7 @@ tc_event_start_compl_server(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:connect("localhost", Port,
[ {param_conn_disable_1rtt_encryption, true}
| default_conn_opts()], 5000),
Expand Down Expand Up @@ -2948,7 +2948,7 @@ tc_direct_send_over_conn(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:async_connect("localhost", Port,
[{param_conn_disable_1rtt_encryption, true} |
default_conn_opts()]),
Expand Down Expand Up @@ -3014,7 +3014,7 @@ tc_direct_send_over_conn_block(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:async_connect("localhost", Port,
[{param_conn_disable_1rtt_encryption, true} |
default_conn_opts()]),
Expand Down Expand Up @@ -3071,7 +3071,7 @@ tc_direct_send_over_conn_fail(Config) ->
| default_stream_opts() ],
Options = {ListenerOpts, ConnectionOpts, StreamOpts},
ct:pal("Listener Options: ~p", [Options]),
{ok, _QuicApp} = quicer:start_listener(mqtt, Port, Options),
{ok, _QuicApp} = quicer:spawn_listener(mqtt, Port, Options),
{ok, Conn} = quicer:async_connect("localhost", Port,
[{param_conn_disable_1rtt_encryption, true} |
default_conn_opts()]),
Expand Down
Loading

0 comments on commit 1976e82

Please sign in to comment.