From 2d1c416dafc5fe18b725eaaabb1241d89324311f Mon Sep 17 00:00:00 2001 From: Christophe Romain Date: Thu, 22 Jul 2010 11:03:07 +0200 Subject: [PATCH] Allow roster change from external component (TECH-1001) --- src/ejabberd_c2s.erl | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 3bb12dc4b..f48f897e9 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -42,6 +42,9 @@ get_presence/1, get_subscribed/1]). +%% API: +-export([add_rosteritem/3, del_rosteritem/2]). + %% gen_fsm callbacks -export([init/1, wait_for_stream/2, @@ -127,6 +130,12 @@ socket_type() -> get_presence(FsmRef) -> ?GEN_FSM:sync_send_all_state_event(FsmRef, {get_presence}, 1000). +add_rosteritem(FsmRef, IJID, ISubscription) -> + ?GEN_FSM:send_all_state_event(FsmRef, {add_rosteritem, IJID, ISubscription}). + +del_rosteritem(FsmRef, IJID) -> + ?GEN_FSM:send_all_state_event(FsmRef, {del_rosteritem, IJID}). + stop(FsmRef) -> ?GEN_FSM:send_event(FsmRef, closed). @@ -1066,6 +1075,15 @@ session_established2(El, StateData) -> %%---------------------------------------------------------------------- handle_event({migrate, Node, After}, StateName, StateData) when Node /= node() -> fsm_migrate(StateName, StateData, Node, After * 2); + +handle_event({add_rosteritem, IJID, ISubscription}, StateName, StateData) -> + NewStateData = roster_change(IJID, ISubscription, StateData), + fsm_next_state(StateName, NewStateData); + +handle_event({del_rosteritem, IJID}, StateName, StateData) -> + NewStateData = roster_change(IJID, none, StateData), + fsm_next_state(StateName, NewStateData); + handle_event(_Event, StateName, StateData) -> fsm_next_state(StateName, StateData). @@ -1978,7 +1996,8 @@ roster_change(IJID, ISubscription, StateData) -> P -> ?DEBUG("roster changed for ~p~n", [StateData#state.user]), From = StateData#state.jid, - To = jlib:make_jid(IJID), +% To = jlib:make_jid(IJID) + To = IJID, Cond1 = (not StateData#state.pres_invis) and IsFrom and (not OldIsFrom), Cond2 = (not IsFrom) and OldIsFrom