mirror of
https://github.com/processone/ejabberd.git
synced 2024-06-02 21:17:12 +02:00
Compare commits
2 Commits
8f20dd8425
...
c5437235f3
Author | SHA1 | Date | |
---|---|---|---|
|
c5437235f3 | ||
|
537aac24f7 |
17
mix.exs
17
mix.exs
|
@ -80,6 +80,20 @@ defmodule Ejabberd.MixProject do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp if_type_exported(module, typeDef, okResult) do
|
||||||
|
try do
|
||||||
|
{:ok, concrete} = :dialyzer_utils.get_core_from_beam(:code.which(module))
|
||||||
|
{:ok, types} = :dialyzer_utils.get_record_and_type_info(concrete)
|
||||||
|
if Maps.has_key(types, typeDef) do
|
||||||
|
okResult
|
||||||
|
else
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
rescue
|
||||||
|
_ -> []
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
defp erlc_options do
|
defp erlc_options do
|
||||||
# Use our own includes + includes from all dependencies
|
# Use our own includes + includes from all dependencies
|
||||||
includes = ["include", deps_include()]
|
includes = ["include", deps_include()]
|
||||||
|
@ -97,7 +111,8 @@ defmodule Ejabberd.MixProject do
|
||||||
if_version_below(~c"24", [{:d, :COMPILER_REPORTS_ONLY_LINES}]) ++
|
if_version_below(~c"24", [{:d, :COMPILER_REPORTS_ONLY_LINES}]) ++
|
||||||
if_version_below(~c"24", [{:d, :SYSTOOLS_APP_DEF_WITHOUT_OPTIONAL}]) ++
|
if_version_below(~c"24", [{:d, :SYSTOOLS_APP_DEF_WITHOUT_OPTIONAL}]) ++
|
||||||
if_version_below(~c"24", [{:d, :OTP_BELOW_24}]) ++
|
if_version_below(~c"24", [{:d, :OTP_BELOW_24}]) ++
|
||||||
if_version_below(~c"25", [{:d, :OTP_BELOW_25}])
|
if_version_below(~c"25", [{:d, :OTP_BELOW_25}]) ++
|
||||||
|
if_type_exported(:odbc, {:opaque, :connection_reference, 0}, [{:d, :ODBC_HAS_TYPES}])
|
||||||
defines = for {:d, value} <- result, do: {:d, value}
|
defines = for {:d, value} <- result, do: {:d, value}
|
||||||
result ++ [{:d, :ALL_DEFS, defines}]
|
result ++ [{:d, :ALL_DEFS, defines}]
|
||||||
end
|
end
|
||||||
|
|
|
@ -152,6 +152,7 @@
|
||||||
{if_var_true, roster_gateway_workaround, {d, 'ROSTER_GATEWAY_WORKAROUND'}},
|
{if_var_true, roster_gateway_workaround, {d, 'ROSTER_GATEWAY_WORKAROUND'}},
|
||||||
{if_var_true, sip, {d, 'SIP'}},
|
{if_var_true, sip, {d, 'SIP'}},
|
||||||
{if_var_true, stun, {d, 'STUN'}},
|
{if_var_true, stun, {d, 'STUN'}},
|
||||||
|
{if_type_exported, {odbc, {opaque, connection_reference, 0}}, {d, 'ODBC_HAS_TYPES'}},
|
||||||
{src_dirs, [src,
|
{src_dirs, [src,
|
||||||
{if_rebar3, sql},
|
{if_rebar3, sql},
|
||||||
{if_var_true, tools, tools}]}]}.
|
{if_var_true, tools, tools}]}]}.
|
||||||
|
|
|
@ -151,6 +151,30 @@ ProcessVars = fun F([], Acc) ->
|
||||||
false ->
|
false ->
|
||||||
F(Tail, Acc)
|
F(Tail, Acc)
|
||||||
end;
|
end;
|
||||||
|
F([{Type, {Mod, TypeDef}, Value} | Tail], Acc) when
|
||||||
|
Type == if_type_exported orelse
|
||||||
|
Type == if_type_not_exported ->
|
||||||
|
try
|
||||||
|
{ok, Concrete} = dialyzer_utils:get_core_from_beam(code:which(Mod)),
|
||||||
|
{ok, Types} = dialyzer_utils:get_record_and_type_info(Concrete),
|
||||||
|
maps:get(TypeDef, Types, undefined)
|
||||||
|
of
|
||||||
|
undefined when Type == if_type_not_exported ->
|
||||||
|
F(Tail, ProcessSingleVar(F, Value, Acc));
|
||||||
|
undefined ->
|
||||||
|
F(Tail, Acc);
|
||||||
|
_ when Type == if_type_exported ->
|
||||||
|
F(Tail, ProcessSingleVar(F, Value, Acc));
|
||||||
|
_ ->
|
||||||
|
F(Tail, Acc)
|
||||||
|
catch _:_ ->
|
||||||
|
if
|
||||||
|
Type == if_type_not_exported ->
|
||||||
|
F(Tail, ProcessSingleVar(F, Value, Acc));
|
||||||
|
true ->
|
||||||
|
F(Tail, Acc)
|
||||||
|
end
|
||||||
|
end;
|
||||||
F([Other1 | Tail1], Acc) ->
|
F([Other1 | Tail1], Acc) ->
|
||||||
F(Tail1, [F(Other1, []) | Acc]);
|
F(Tail1, [F(Other1, []) | Acc]);
|
||||||
F(Val, Acc) when is_tuple(Val) ->
|
F(Val, Acc) when is_tuple(Val) ->
|
||||||
|
|
|
@ -52,7 +52,8 @@
|
||||||
-export([get_presence/1, set_presence/2, resend_presence/1, resend_presence/2,
|
-export([get_presence/1, set_presence/2, resend_presence/1, resend_presence/2,
|
||||||
open_session/1, call/3, cast/2, send/2, close/1, close/2, stop_async/1,
|
open_session/1, call/3, cast/2, send/2, close/1, close/2, stop_async/1,
|
||||||
reply/2, copy_state/2, set_timeout/2, route/2, format_reason/2,
|
reply/2, copy_state/2, set_timeout/2, route/2, format_reason/2,
|
||||||
host_up/1, host_down/1, send_ws_ping/1, bounce_message_queue/2]).
|
host_up/1, host_down/1, send_ws_ping/1, bounce_message_queue/2,
|
||||||
|
reset_vcard_xupdate_resend_presence/1]).
|
||||||
|
|
||||||
-include_lib("xmpp/include/xmpp.hrl").
|
-include_lib("xmpp/include/xmpp.hrl").
|
||||||
-include("logger.hrl").
|
-include("logger.hrl").
|
||||||
|
@ -108,6 +109,10 @@ resend_presence(Pid) ->
|
||||||
resend_presence(Pid, To) ->
|
resend_presence(Pid, To) ->
|
||||||
route(Pid, {resend_presence, To}).
|
route(Pid, {resend_presence, To}).
|
||||||
|
|
||||||
|
-spec reset_vcard_xupdate_resend_presence(pid()) -> boolean().
|
||||||
|
reset_vcard_xupdate_resend_presence(Pid) ->
|
||||||
|
route(Pid, reset_vcard_xupdate_resend_presence).
|
||||||
|
|
||||||
-spec close(pid()) -> ok;
|
-spec close(pid()) -> ok;
|
||||||
(state()) -> state().
|
(state()) -> state().
|
||||||
close(Ref) ->
|
close(Ref) ->
|
||||||
|
@ -246,6 +251,13 @@ process_info(#{lserver := LServer} = State, {route, Packet}) ->
|
||||||
true ->
|
true ->
|
||||||
State1
|
State1
|
||||||
end;
|
end;
|
||||||
|
process_info(State, reset_vcard_xupdate_resend_presence) ->
|
||||||
|
case maps:get(pres_last, State, error) of
|
||||||
|
error -> State;
|
||||||
|
Pres ->
|
||||||
|
Pres2 = xmpp:remove_subtag(Pres, #vcard_xupdate{}),
|
||||||
|
process_self_presence(State#{pres_last => Pres2}, Pres2)
|
||||||
|
end;
|
||||||
process_info(#{jid := JID} = State, {resend_presence, To}) ->
|
process_info(#{jid := JID} = State, {resend_presence, To}) ->
|
||||||
case maps:get(pres_last, State, error) of
|
case maps:get(pres_last, State, error) of
|
||||||
error -> State;
|
error -> State;
|
||||||
|
|
|
@ -56,6 +56,7 @@
|
||||||
get_vh_session_number/1,
|
get_vh_session_number/1,
|
||||||
get_vh_by_backend/1,
|
get_vh_by_backend/1,
|
||||||
force_update_presence/1,
|
force_update_presence/1,
|
||||||
|
reset_vcard_xupdate_resend_presence/1,
|
||||||
connected_users/0,
|
connected_users/0,
|
||||||
connected_users_number/0,
|
connected_users_number/0,
|
||||||
user_resources/2,
|
user_resources/2,
|
||||||
|
@ -926,6 +927,15 @@ force_update_presence({LUser, LServer}) ->
|
||||||
end,
|
end,
|
||||||
Ss).
|
Ss).
|
||||||
|
|
||||||
|
-spec reset_vcard_xupdate_resend_presence({binary(), binary()}) -> ok.
|
||||||
|
reset_vcard_xupdate_resend_presence({LUser, LServer}) ->
|
||||||
|
Mod = get_sm_backend(LServer),
|
||||||
|
Ss = get_sessions(Mod, LUser, LServer),
|
||||||
|
lists:foreach(
|
||||||
|
fun(#session{sid = {_, Pid}}) ->
|
||||||
|
ejabberd_c2s:reset_vcard_xupdate_resend_presence(Pid)
|
||||||
|
end, Ss).
|
||||||
|
|
||||||
-spec get_sm_backend(binary()) -> module().
|
-spec get_sm_backend(binary()) -> module().
|
||||||
|
|
||||||
get_sm_backend(Host) ->
|
get_sm_backend(Host) ->
|
||||||
|
|
|
@ -67,12 +67,8 @@
|
||||||
-export([connecting/2, connecting/3,
|
-export([connecting/2, connecting/3,
|
||||||
session_established/2, session_established/3]).
|
session_established/2, session_established/3]).
|
||||||
|
|
||||||
-ifdef(OTP_RELEASE).
|
-ifdef(ODBC_HAS_TYPES).
|
||||||
-if(?OTP_RELEASE >= 27).
|
-type(odbc_connection_reference() :: odbc:connection_reference()).
|
||||||
-type(odbc_connection_reference() :: odbc:connection_reference()).
|
|
||||||
-else.
|
|
||||||
-type(odbc_connection_reference() :: pid()).
|
|
||||||
-endif.
|
|
||||||
-else.
|
-else.
|
||||||
-type(odbc_connection_reference() :: pid()).
|
-type(odbc_connection_reference() :: pid()).
|
||||||
-endif.
|
-endif.
|
||||||
|
|
|
@ -97,7 +97,7 @@ user_send_packet(Acc) ->
|
||||||
-spec vcard_set(iq()) -> iq().
|
-spec vcard_set(iq()) -> iq().
|
||||||
vcard_set(#iq{from = #jid{luser = LUser, lserver = LServer}} = IQ) ->
|
vcard_set(#iq{from = #jid{luser = LUser, lserver = LServer}} = IQ) ->
|
||||||
ets_cache:delete(?VCARD_XUPDATE_CACHE, {LUser, LServer}, ejabberd_cluster:get_nodes()),
|
ets_cache:delete(?VCARD_XUPDATE_CACHE, {LUser, LServer}, ejabberd_cluster:get_nodes()),
|
||||||
ejabberd_sm:force_update_presence({LUser, LServer}),
|
ejabberd_sm:reset_vcard_xupdate_resend_presence({LUser, LServer}),
|
||||||
IQ;
|
IQ;
|
||||||
vcard_set(Acc) ->
|
vcard_set(Acc) ->
|
||||||
Acc.
|
Acc.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user