From 2ef2acc8506f517ca7d1062f432078601fd80c13 Mon Sep 17 00:00:00 2001 From: William Yang Date: Wed, 25 Aug 2021 09:27:19 +0200 Subject: [PATCH] feat(quic): adapt to quicer 0.0.8 --- apps/emqx/src/emqx_quic_connection.erl | 14 ++++++++++---- apps/emqx/src/emqx_quic_stream.erl | 13 +++++++++++-- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/apps/emqx/src/emqx_quic_connection.erl b/apps/emqx/src/emqx_quic_connection.erl index 7ac130278..2fe911001 100644 --- a/apps/emqx/src/emqx_quic_connection.erl +++ b/apps/emqx/src/emqx_quic_connection.erl @@ -34,10 +34,16 @@ init(ConnOpts) when is_map(ConnOpts) -> -spec new_conn(quicer:connection_handler(), cb_state()) -> {ok, cb_state()} | {error, any()}. new_conn(Conn, S) -> - case emqx_connection:start_link(emqx_quic_stream, Conn, S) of - {ok, _Pid} -> - ok = quicer:async_handshake(Conn), - {ok, S}; + process_flag(trap_exit, true), + case emqx_connection:start_link(emqx_quic_stream, {self(), Conn}, S) of + {ok, Pid} -> + receive + {Pid, stream_acceptor_ready} -> + ok = quicer:async_handshake(Conn), + {ok, S}; + {'EXIT', Pid, _Reason} -> + {error, stream_accept_error} + end; Other -> {error, Other} end. diff --git a/apps/emqx/src/emqx_quic_stream.erl b/apps/emqx/src/emqx_quic_stream.erl index 76a365340..bba1876c4 100644 --- a/apps/emqx/src/emqx_quic_stream.erl +++ b/apps/emqx/src/emqx_quic_stream.erl @@ -31,8 +31,16 @@ , peercert/1 ]). -wait(Conn) -> - quicer:accept_stream(Conn, []). +wait({ConnOwner, Conn}) -> + {ok, Conn} = quicer:async_accept_stream(Conn, []), + ConnOwner ! {self(), stream_acceptor_ready}, + receive + %% from msquic + {quic, new_stream, Stream} -> + {ok, Stream}; + {'EXIT', ConnOwner, _Reason} -> + {error, enotconn} + end. type(_) -> quic. @@ -44,6 +52,7 @@ sockname(S) -> quicer:sockname(S). peercert(_S) -> + %% @todo but unsupported by msquic nossl. getstat(Socket, Stats) ->