25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-11-24 16:23:40 +01:00

- pass jid into feature_check_packet hook;

- bounce messages when closing c2s session;
- implemented treap:to_list/1 and treap:from_list/1
This commit is contained in:
Evgeniy Khramtsov 2010-03-17 23:40:48 +09:00
parent 214c62bf9c
commit 584fa98564
2 changed files with 32 additions and 3 deletions

View File

@ -1276,7 +1276,7 @@ handle_info({route, From, To, Packet}, StateName, StateData) ->
case ejabberd_hooks:run_fold(
feature_check_packet, StateData#state.server,
allow,
[StateData#state.user,
[StateData#state.jid,
StateData#state.server,
StateData#state.pres_last,
{From, To, Packet},
@ -1392,7 +1392,8 @@ terminate(_Reason, StateName, StateData) ->
presence_broadcast(
StateData, From, StateData#state.pres_i, Packet)
end
end;
end,
bounce_messages();
_ ->
ok
end,
@ -2185,6 +2186,15 @@ fsm_limit_opts(Opts) ->
end
end.
bounce_messages() ->
receive
{route, From, To, El} ->
ejabberd_router:route(From, To, El),
bounce_messages()
after 0 ->
ok
end.
%%%----------------------------------------------------------------------
%%% JID Set memory footprint reduction code
%%%----------------------------------------------------------------------

View File

@ -33,7 +33,9 @@
get_root/1,
lookup/2,
is_empty/1,
fold/3]).
fold/3,
from_list/1,
to_list/1]).
empty() ->
nil.
@ -173,3 +175,20 @@ fold(F, Acc, {{_Hash, Key}, Priority, Value, Left, Right}) ->
Acc1 = F({Key, Priority, Value}, Acc),
Acc2 = fold(F, Acc1, Left),
fold(F, Acc2, Right).
to_list(Tree) ->
to_list(Tree, []).
to_list(nil, Acc) ->
Acc;
to_list(Tree, Acc) ->
Root = get_root(Tree),
to_list(delete_root(Tree), [Root|Acc]).
from_list(List) ->
from_list(List, nil).
from_list([{Key, Priority, Value}|Tail], Tree) ->
from_list(Tail, insert(Key, Priority, Value, Tree));
from_list([], Tree) ->
Tree.