150 lines
5.0 KiB
Erlang
150 lines
5.0 KiB
Erlang
%%-*- mode: erlang -*-
|
|
%% emqx_stomp config mapping
|
|
|
|
{mapping, "stomp.listener.port", "emqx_stomp.listener", [
|
|
{default, 61613},
|
|
{datatype, [integer, ip]}
|
|
]}.
|
|
|
|
{mapping, "stomp.listener.acceptors", "emqx_stomp.listener", [
|
|
{default, 4},
|
|
{datatype, integer}
|
|
]}.
|
|
|
|
{mapping, "stomp.listener.max_connections", "emqx_stomp.listener", [
|
|
{default, 512},
|
|
{datatype, integer}
|
|
]}.
|
|
|
|
{mapping, "stomp.listener.ssl", "emqx_stomp.listener", [
|
|
{datatype, flag},
|
|
{default, off}
|
|
]}.
|
|
|
|
{mapping, "stomp.listener.tls_versions", "emqx_stomp.listener", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{mapping, "stomp.listener.handshake_timeout", "emqx_stomp.listener", [
|
|
{default, "15s"},
|
|
{datatype, {duration, ms}}
|
|
]}.
|
|
|
|
{mapping, "stomp.listener.dhfile", "emqx_stomp.listener", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{mapping, "stomp.listener.keyfile", "emqx_stomp.listener", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{mapping, "stomp.listener.certfile", "emqx_stomp.listener", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{mapping, "stomp.listener.cacertfile", "emqx_stomp.listener", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{mapping, "stomp.listener.verify", "emqx_stomp.listener", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{mapping, "stomp.listener.fail_if_no_peer_cert", "emqx_stomp.listener", [
|
|
{datatype, {enum, [true, false]}}
|
|
]}.
|
|
|
|
{mapping, "stomp.listener.ciphers", "emqx_stomp.listener", [
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{mapping, "stomp.listener.secure_renegotiate", "emqx_stomp.listener", [
|
|
{datatype, flag}
|
|
]}.
|
|
|
|
{mapping, "stomp.listener.reuse_sessions", "emqx_stomp.listener", [
|
|
{default, on},
|
|
{datatype, flag}
|
|
]}.
|
|
|
|
{mapping, "stomp.listener.honor_cipher_order", "emqx_stomp.listener", [
|
|
{datatype, flag}
|
|
]}.
|
|
|
|
{translation, "emqx_stomp.listener", fun(Conf) ->
|
|
Port = cuttlefish:conf_get("stomp.listener.port", Conf),
|
|
Acceptors = cuttlefish:conf_get("stomp.listener.acceptors", Conf),
|
|
MaxConnections = cuttlefish:conf_get("stomp.listener.max_connections", Conf),
|
|
Filter = fun(Opts) -> [{K, V} || {K, V} <- Opts, V =/= undefined] end,
|
|
SplitFun = fun(undefined) -> undefined; (S) -> string:tokens(S, ",") end,
|
|
SslOpts = fun(Prefix) ->
|
|
Versions = case SplitFun(cuttlefish:conf_get(Prefix ++ ".tls_versions", Conf, undefined)) of
|
|
undefined -> undefined;
|
|
L -> [list_to_atom(V) || V <- L]
|
|
end,
|
|
Filter([{versions, Versions},
|
|
{ciphers, SplitFun(cuttlefish:conf_get(Prefix ++ ".ciphers", Conf, undefined))},
|
|
{handshake_timeout, cuttlefish:conf_get(Prefix ++ ".handshake_timeout", Conf, undefined)},
|
|
{dhfile, cuttlefish:conf_get(Prefix ++ ".dhfile", Conf, undefined)},
|
|
{keyfile, cuttlefish:conf_get(Prefix ++ ".keyfile", Conf, undefined)},
|
|
{certfile, cuttlefish:conf_get(Prefix ++ ".certfile", Conf, undefined)},
|
|
{cacertfile, cuttlefish:conf_get(Prefix ++ ".cacertfile", Conf, undefined)},
|
|
{verify, cuttlefish:conf_get(Prefix ++ ".verify", Conf, undefined)},
|
|
{fail_if_no_peer_cert, cuttlefish:conf_get(Prefix ++ ".fail_if_no_peer_cert", Conf, undefined)},
|
|
{secure_renegotiate, cuttlefish:conf_get(Prefix ++ ".secure_renegotiate", Conf, undefined)},
|
|
{reuse_sessions, cuttlefish:conf_get(Prefix ++ ".reuse_sessions", Conf, undefined)},
|
|
{honor_cipher_order, cuttlefish:conf_get(Prefix ++ ".honor_cipher_order", Conf, undefined)}])
|
|
end,
|
|
Opts = [{acceptors, Acceptors}, {max_connections, MaxConnections}],
|
|
{Port, case cuttlefish:conf_get("stomp.listener.ssl", Conf) of
|
|
true ->
|
|
[{sslopts, SslOpts("stomp.listener")} | Opts];
|
|
false ->
|
|
Opts
|
|
end}
|
|
end}.
|
|
|
|
{mapping, "stomp.default_user.login", "emqx_stomp.default_user", [
|
|
{default, "guest"},
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{mapping, "stomp.default_user.passcode", "emqx_stomp.default_user", [
|
|
{default, "guest"},
|
|
{datatype, string}
|
|
]}.
|
|
|
|
{translation, "emqx_stomp.default_user", fun(Conf) ->
|
|
Login = cuttlefish:conf_get("stomp.default_user.login", Conf),
|
|
Passcode = cuttlefish:conf_get("stomp.default_user.passcode", Conf),
|
|
[{login, Login}, {passcode, Passcode}]
|
|
end}.
|
|
|
|
{mapping, "stomp.allow_anonymous", "emqx_stomp.allow_anonymous", [
|
|
{default, true},
|
|
{datatype, {enum, [true, false]}}
|
|
]}.
|
|
|
|
{mapping, "stomp.frame.max_headers", "emqx_stomp.frame", [
|
|
{default, 10},
|
|
{datatype, integer}
|
|
]}.
|
|
|
|
{mapping, "stomp.frame.max_header_length", "emqx_stomp.frame", [
|
|
{default, 1024},
|
|
{datatype, integer}
|
|
]}.
|
|
|
|
{mapping, "stomp.frame.max_body_length", "emqx_stomp.frame", [
|
|
{default, 8192},
|
|
{datatype, integer}
|
|
]}.
|
|
|
|
{translation, "emqx_stomp.frame", fun(Conf) ->
|
|
MaxHeaders = cuttlefish:conf_get("stomp.frame.max_headers", Conf),
|
|
MaxHeaderLength = cuttlefish:conf_get("stomp.frame.max_header_length", Conf),
|
|
MaxBodyLength = cuttlefish:conf_get("stomp.frame.max_body_length", Conf),
|
|
[{max_headers, MaxHeaders}, {max_header_length, MaxHeaderLength}, {max_body_length, MaxBodyLength}]
|
|
end}.
|
|
|