Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Romain <christophe.romain@process-one.net>2010-07-22 13:06:51 +0400
committerChristophe Romain <christophe.romain@process-one.net>2010-07-22 13:06:51 +0400
commitf36da63a3afc5599bdeee1e150b7a3f0b7fafba8 (patch)
tree2277f52ae02573b3e1c9048d6ce6c6d79ea5d3b0 /src/ejabberd_c2s.erl
parent5bc9860f5db8403660e0a734508b144ba3ae0652 (diff)
Allow roster change from external component (TECH-1001)
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r--src/ejabberd_c2s.erl18
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).