diff options
author | Badlop <badlop@process-one.net> | 2009-03-03 22:32:48 +0300 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2009-03-03 22:32:48 +0300 |
commit | 5bfdb71b4c850abafa8bececefc4d8987827373c (patch) | |
tree | cc20801a7c96db6dcf8a3a3edd19af7d74d99ea1 /src/ejabberd_c2s.erl | |
parent | 890b1c4f600515cb9f78aa818dad815e9fd8c5e3 (diff) |
Merge 1881 from trunk.
* src/mod_privacy.erl: Privacy List: deny presence-out all + send
presence to: presence is sent (EJAB-255)
* src/ejabberd_c2s.erl: Likewise
SVN Revision: 1948
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r-- | src/ejabberd_c2s.erl | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 614a4e4e4..6fd3254a4 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -877,8 +877,8 @@ session_established2(El, StateData) -> user_send_packet, Server, [FromJID, ToJID, NewEl]), - ejabberd_router:route( - FromJID, ToJID, NewEl), + check_privacy_route(FromJID, StateData, FromJID, + ToJID, NewEl), StateData end; #xmlel{ns = ?NS_JABBER_CLIENT, name = 'message'} -> @@ -1500,16 +1500,16 @@ presence_update(From, Packet, StateData) -> %% User sends a directed presence packet presence_track(From, To, Packet, StateData) -> LTo = jlib:short_prepd_jid(To), - BFrom = exmpp_jid:jid_to_bare_jid(From), case exmpp_presence:get_type(Packet) of 'unavailable' -> - ejabberd_router:route(From, To, Packet), + check_privacy_route(From, StateData, From, To, Packet), I = remove_element(LTo, StateData#state.pres_i), A = remove_element(LTo, StateData#state.pres_a), StateData#state{pres_i = I, pres_a = A}; 'invisible' -> ejabberd_router:route(From, To, Packet), + check_privacy_route(From, StateData, From, To, Packet), I = ?SETS:add_element(LTo, StateData#state.pres_i), A = remove_element(LTo, StateData#state.pres_a), StateData#state{pres_i = I, @@ -1518,52 +1518,59 @@ presence_track(From, To, Packet, StateData) -> ejabberd_hooks:run(roster_out_subscription, StateData#state.server, [StateData#state.user, StateData#state.server, To, subscribe]), - ejabberd_router:route(BFrom, To, Packet), + check_privacy_route(From, StateData, exmpp_jid:jid_to_bare_jid(From), + To, Packet), StateData; 'subscribed' -> ejabberd_hooks:run(roster_out_subscription, StateData#state.server, [StateData#state.user, StateData#state.server, To, subscribed]), - ejabberd_router:route(BFrom, To, Packet), + check_privacy_route(From, StateData, exmpp_jid:jid_to_bare_jid(From), + To, Packet), StateData; 'unsubscribe' -> ejabberd_hooks:run(roster_out_subscription, StateData#state.server, [StateData#state.user, StateData#state.server, To, unsubscribe]), - ejabberd_router:route(BFrom, To, Packet), + check_privacy_route(From, StateData, exmpp_jid:jid_to_bare_jid(From), + To, Packet), StateData; 'unsubscribed' -> ejabberd_hooks:run(roster_out_subscription, StateData#state.server, [StateData#state.user, StateData#state.server, To, unsubscribed]), - ejabberd_router:route(BFrom, To, Packet), + check_privacy_route(From, StateData, exmpp_jid:jid_to_bare_jid(From), + To, Packet), StateData; 'error' -> - ejabberd_router:route(From, To, Packet), + check_privacy_route(From, StateData, From, To, Packet), StateData; 'probe' -> - ejabberd_router:route(From, To, Packet), + check_privacy_route(From, StateData, From, To, Packet), StateData; _ -> - case ejabberd_hooks:run_fold( - privacy_check_packet, StateData#state.server, - allow, - [StateData#state.user, - StateData#state.server, - StateData#state.privacy_list, - {From, To, Packet}, - out]) of - deny -> - ok; - allow -> - ejabberd_router:route(From, To, Packet) - end, + check_privacy_route(From, StateData, From, To, Packet), I = remove_element(LTo, StateData#state.pres_i), A = ?SETS:add_element(LTo, StateData#state.pres_a), StateData#state{pres_i = I, pres_a = A} end. +check_privacy_route(From, StateData, FromRoute, To, Packet) -> + case ejabberd_hooks:run_fold( + privacy_check_packet, StateData#state.server, + allow, + [StateData#state.user, + StateData#state.server, + StateData#state.privacy_list, + {From, To, Packet}, + out]) of + deny -> + ok; + allow -> + ejabberd_router:route(FromRoute, To, Packet) + end. + presence_broadcast(StateData, From, JIDSet, Packet) -> lists:foreach(fun({U, S, R}) -> FJID = exmpp_jid:make_jid(U, S, R), |