diff options
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r-- | src/ejabberd_c2s.erl | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 93ac7d41b..b2bd9924f 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -16,7 +16,8 @@ -export([start/2, start_link/2, send_text/2, - send_element/2]). + send_element/2, + get_presence/1]). %% gen_fsm callbacks -export([init/1, @@ -90,6 +91,10 @@ start(SockData, Opts) -> start_link(SockData, Opts) -> gen_fsm:start_link(ejabberd_c2s, [SockData, Opts], ?FSMOPTS). +%% Return Username, Resource and presence information +get_presence(FsmRef) -> + gen_fsm:sync_send_all_state_event(FsmRef, {get_presence}, 1000). + %%%---------------------------------------------------------------------- %%% Callback functions from gen_fsm %%%---------------------------------------------------------------------- @@ -661,6 +666,22 @@ handle_event(_Event, StateName, StateData) -> %% {stop, Reason, NewStateData} | %% {stop, Reason, Reply, NewStateData} %%---------------------------------------------------------------------- +handle_sync_event({get_presence}, _From, StateName, StateData) -> + User = StateData#state.user, + Status = + case StateData#state.pres_last of + undefined -> + "unavailable"; + PresLast -> + case xml:get_path_s(PresLast, [{elem, "status"}, cdata]) of + "" -> + "available"; + Stat -> + Stat + end + end, + Reply = {User, Status}, + {reply, Reply, StateName, StateData}; handle_sync_event(_Event, _From, StateName, StateData) -> Reply = ok, {reply, Reply, StateName, StateData}. |