QUIC (Next-generation transport protocol) erlang library.
msquic NIF binding.
Project Status: Preview
| OS | Status | 
|---|---|
| Linux | Supported | 
| macOS | Supported | 
| Windows | Help Needed | 
{deps, [
    {quicer, {git, "https://github.com/emqx/quic.git", {tag, "0.2.4"}}},
    ...defp deps do
  [
    {:quicer, git: "https://github.com/emqx/quic.git", tag: "0.2.4"},
    ...
  ]
endapplication:ensure_all_started(quicer),
Port = 4567,
LOptions = [ {certfile, "cert.pem"}
           , {keyfile,  "key.pem"}
           , {alpn, ["sample"]}
           , {peer_bidi_stream_count, 1}
             ],
{ok, L} = quicer:listen(Port, LOptions),
{ok, Conn} = quicer:accept(L, [], 120000),
{ok, Conn} = quicer:handshake(Conn),
{ok, Stm} = quicer:accept_stream(Conn, []),
receive {quic, <<"ping">>, Stm, _Props} -> ok end,
{ok, 4} = quicer:send(Stm, <<"pong">>),
quicer:close_listener(L).application:ensure_all_started(quicer),
Port = 4567,
{ok, Conn} = quicer:connect("localhost", Port, [{alpn, ["sample"]}, {verify, none}], 5000),
{ok, Stm} = quicer:start_stream(Conn, []),
{ok, 4} = quicer:send(Stm, <<"ping">>),
receive {quic, <<"pong">>, Stm, _Props} -> ok end,
ok = quicer:close_connection(Conn).%% Connect to google and disconnect, 
%% You could also tweak the parameters to see how it goes
{ok, Conn} = quicer:connect("google.com", 443, [{alpn, ["h3"]}, 
                            {verify, verify_peer}, 
                            {peer_unidi_stream_count, 3}], 5000),
quicer:shutdown_connection(Conn).refer to test dir.
- 
Understand the
handlesand theownershipin Terminology - 
Then check how to receives the data and signals: Messages
 - 
Read more in msquic doc
 
make doc
firefox doc/index.html- OTP25+
 - rebar3
 - cmake3.16+
 
make ciDebug log could be enabled to print to stdout with the envvar QUIC_LOGGING_TYPE=stdout
QUIC_LOGGING_TYPE=stdout make%% Debug one testcase
QUIC_LOGGING_TYPE=stdout rebar3 ct --suite test/quicer_connection_SUITE.erl --case tc_conn_basic_verify_peerClient could specify the connect param sslkeylogfile to record tls secrets for wireshark to decrypt.
    {ok, Conn} = quicer:connect(
        "google.com",
        443,
        [
            {verify, verify_peer},
            {sslkeylogfile, "/tmp/SSLKEYLOGFILE"},
            {peer_unidi_stream_count, 3},
            {alpn, ["h3"]}
        ],
        5000
    )Apache License Version 2.0
