diff --git a/mix.exs b/mix.exs index 21743b611..1f280fe1b 100644 --- a/mix.exs +++ b/mix.exs @@ -90,7 +90,7 @@ defmodule Ejabberd.Mixfile do {:stringprep, "~> 1.0"}, {:fast_yaml, "~> 1.0"}, {:fast_tls, "~> 1.1"}, - {:stun, git: "https://github.com/processone/stun", ref: "35cdef8b0ae35daa797a292c57dbd5ee62b45876", override: true}, + {:stun, git: "https://github.com/processone/stun", ref: "1599d55aee3a520893aff27746281c70cda65822", override: true}, {:esip, "~> 1.0.32"}, {:p1_mysql, "~> 1.0"}, {:mqtree, "~> 1.0"}, diff --git a/rebar.config b/rebar.config index 0a1e8f546..05bed0064 100644 --- a/rebar.config +++ b/rebar.config @@ -36,7 +36,7 @@ {mqtree, ".*", {git, "https://github.com/processone/mqtree", {tag, "1.0.8"}}}, {p1_acme, ".*", {git, "https://github.com/processone/p1_acme.git", {tag, "1.0.6"}}}, {base64url, ".*", {git, "https://github.com/dvv/base64url.git", {tag, "v1.0"}}}, - {if_var_true, stun, {stun, ".*", {git, "https://github.com/processone/stun", {tag, "1.0.33"}}}}, + {if_var_true, stun, {stun, ".*", {git, "https://github.com/processone/stun", "1599d55aee3a520893aff27746281c70cda65822"}}}, {if_var_true, sip, {esip, ".*", {git, "https://github.com/processone/esip", {tag, "1.0.34"}}}}, {if_var_true, mysql, {p1_mysql, ".*", {git, "https://github.com/processone/p1_mysql", {tag, "1.0.15"}}}}, diff --git a/src/ejabberd_stun.erl b/src/ejabberd_stun.erl index a9250a4a1..bda3e581e 100644 --- a/src/ejabberd_stun.erl +++ b/src/ejabberd_stun.erl @@ -50,16 +50,22 @@ start_link(_, _, _) -> get_password/2]). -include("logger.hrl"). +-ifndef(LAGER). +-export([stun_filter/2]). +-define(STUN_MAX_LOG_LEVEL, notice). % Drop STUN/TURN info/debug messages. +-endif. %%%=================================================================== %%% API %%%=================================================================== tcp_init(Socket, Opts) -> + init_logger(), ejabberd:start_app(stun), stun:tcp_init(Socket, prepare_turn_opts(Opts)). -dialyzer({nowarn_function, udp_init/2}). udp_init(Socket, Opts) -> + init_logger(), ejabberd:start_app(stun), stun:udp_init(Socket, prepare_turn_opts(Opts)). @@ -199,4 +205,32 @@ listen_options() -> {turn_max_permissions, 10}, {turn_blacklist, [<<"2001::/32">>, <<"2002::/16">>]}, % Teredo, 6to4. {server_name, <<"ejabberd">>}]. + +-spec init_logger() -> ok. +-ifdef(LAGER). +init_logger() -> + ok. +-else. +init_logger() -> + case logger:add_primary_filter(stun, {fun ?MODULE:stun_filter/2, + ?STUN_MAX_LOG_LEVEL}) of + ok -> + ok; + {error, {already_exist, _}} -> + ok + end. + +-spec stun_filter(logger:log_event(), logger:level() | term()) + -> logger:filter_return(). +stun_filter(#{meta := #{domain := [stun | _]}, level := Level}, MaxLevel) -> + case logger:compare_levels(Level, MaxLevel) of + lt -> + stop; + _ -> + ignore + end; +stun_filter(Event, _Extra) -> + Event. +-endif. + -endif.