diff options
author | Christophe Romain <christophe.romain@process-one.net> | 2010-07-22 13:06:51 +0400 |
---|---|---|
committer | Christophe Romain <christophe.romain@process-one.net> | 2010-07-22 13:06:51 +0400 |
commit | f36da63a3afc5599bdeee1e150b7a3f0b7fafba8 (patch) | |
tree | 2277f52ae02573b3e1c9048d6ce6c6d79ea5d3b0 /src/ejabberd_c2s.erl | |
parent | 5bc9860f5db8403660e0a734508b144ba3ae0652 (diff) |
Allow roster change from external component (TECH-1001)
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r-- | src/ejabberd_c2s.erl | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index af0f34c97..3f7dde71d 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, @@ -181,6 +184,12 @@ get_presence(FsmRef) -> get_state(FsmRef) -> ?GEN_FSM:sync_send_all_state_event(FsmRef, get_state, 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). @@ -1035,6 +1044,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). |