feat(quic): listener use common server ssl_options

This commit is contained in:
William Yang 2023-02-08 14:11:18 +01:00
parent fc3e8715a1
commit 0e40f6cf48
3 changed files with 41 additions and 21 deletions

View File

@ -1868,6 +1868,21 @@ fields_mqtt_quic_listener_keep_alive_interval {
}
}
fields_mqtt_quic_listener_ssl_options {
desc {
en: """
TLS options for QUIC transport
"""
zh: """
QUIC 传输层的 TLS 选项
"""
}
label: {
en: "TLS Options"
zh: "TLS 选项"
}
}
base_listener_bind {
desc {
en: """IP address and port for the listening socket."""

View File

@ -370,19 +370,23 @@ do_start_listener(quic, ListenerName, #{bind := Bind} = Opts) ->
case [A || {quicer, _, _} = A <- application:which_applications()] of
[_] ->
DefAcceptors = erlang:system_info(schedulers_online) * 8,
SSLOpts = maps:merge(
maps:with([certfile, keyfile], Opts),
maps:get(ssl_options, Opts, #{})
),
ListenOpts =
[
{cert, maps:get(certfile, Opts)},
{key, maps:get(keyfile, Opts)},
{certfile, str(maps:get(certfile, SSLOpts))},
{keyfile, str(maps:get(keyfile, SSLOpts))},
{alpn, ["mqtt"]},
{conn_acceptors, lists:max([DefAcceptors, maps:get(acceptors, Opts, 0)])},
{keep_alive_interval_ms, maps:get(keep_alive_interval, Opts, 0)},
{idle_timeout_ms, maps:get(idle_timeout, Opts, 0)},
{handshake_idle_timeout_ms, maps:get(handshake_idle_timeout, Opts, 10000)},
{server_resumption_level, 2},
{verify, maps:get(verify, Opts, verify_none)}
{verify, maps:get(verify, SSLOpts, verify_none)}
] ++
case maps:get(cacertfile, Opts, undefined) of
case maps:get(cacertfile, SSLOpts, undefined) of
undefined -> [];
CaCertFile -> [{cacertfile, binary_to_list(CaCertFile)}]
end,

View File

@ -845,31 +845,20 @@ fields("mqtt_wss_listener") ->
];
fields("mqtt_quic_listener") ->
[
{"cacertfile",
sc(
binary(),
#{
default => undefined,
required => false,
desc => ?DESC(common_ssl_opts_schema_cacertfile)
}
)},
{"certfile",
sc(
string(),
#{desc => ?DESC(fields_mqtt_quic_listener_certfile)}
#{
%% TODO: deprecated => {since, "5.1.0"}
desc => ?DESC(fields_mqtt_quic_listener_certfile)
}
)},
{"keyfile",
sc(
string(),
#{desc => ?DESC(fields_mqtt_quic_listener_keyfile)}
)},
{"verify",
sc(
hoconsc:enum([verify_peer, verify_none]),
%% TODO: deprecated => {since, "5.1.0"}
#{
default => verify_none,
desc => ?DESC(common_ssl_opts_schema_verify)
desc => ?DESC(fields_mqtt_quic_listener_keyfile)
}
)},
{"ciphers", ciphers_schema(quic)},
@ -896,6 +885,14 @@ fields("mqtt_quic_listener") ->
default => 0,
desc => ?DESC(fields_mqtt_quic_listener_keep_alive_interval)
}
)},
{"ssl_options",
sc(
ref("listener_quic_ssl_opts"),
#{
required => false,
desc => ?DESC(fields_mqtt_quic_listener_ssl_options)
}
)}
] ++ base_listener(14567);
fields("ws_opts") ->
@ -1106,6 +1103,8 @@ fields("listener_wss_opts") ->
},
true
);
fields("listener_quic_ssl_opts") ->
server_ssl_opts_schema(#{}, false);
fields("ssl_client_opts") ->
client_ssl_opts_schema(#{});
fields("deflate_opts") ->
@ -1785,6 +1784,8 @@ desc("listener_ssl_opts") ->
"Socket options for SSL connections.";
desc("listener_wss_opts") ->
"Socket options for WebSocket/SSL connections.";
desc("listener_quic_ssl_opts") ->
"TLS options for QUIC transport.";
desc("ssl_client_opts") ->
"Socket options for SSL clients.";
desc("deflate_opts") ->