summaryrefslogtreecommitdiffstats
path: root/src/core/ephraim_roster_handler.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/ephraim_roster_handler.erl')
-rw-r--r--src/core/ephraim_roster_handler.erl45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/core/ephraim_roster_handler.erl b/src/core/ephraim_roster_handler.erl
new file mode 100644
index 0000000..fa7c1c7
--- /dev/null
+++ b/src/core/ephraim_roster_handler.erl
@@ -0,0 +1,45 @@
+-module(ephraim_roster_handler).
+-include_lib("exmpp/include/exmpp_client.hrl").
+-behaviour(gen_event).
+
+-export([start/2, stop/1]).
+-export([init/1, handle_event/2, handle_call/2, handle_info/2, terminate/2, code_change/3]).
+
+start(EventManager, Roster) ->
+ gen_event:add_handler(EventManager, ?MODULE, Roster).
+stop(EventManager) ->
+ gen_event:delete_handler(EventManager, ?MODULE, []).
+
+init(Roster) ->
+ {ok, Roster}.
+
+handle_event({received_packet, #received_packet{packet_type=presence, raw_packet=Packet}}, Roster) ->
+ %io:format("Received packet ~p~n", [Packet]),
+ ephraim_roster:presence(Roster, Packet),
+ {ok, Roster};
+
+handle_event({received_packet, #received_packet{packet_type=iq, raw_packet=Packet}}, Roster) ->
+ %io:format("Received packet ~p~n", [Packet]),
+ From = exmpp_stanza:get_sender(Packet),
+ IQ = exmpp_iq:xmlel_to_iq(Packet),
+ case IQ of
+ {iq, response, result, _, 'jabber:iq:roster', Payload, _, _, 'jabber:client'} ->
+ ephraim_roster:roster_iq(Roster, Payload);
+ {iq, response, result, _, 'vcard-temp', Payload, _, _, 'jabber:client'} ->
+ ephraim_roster:vcard_iq(Roster, From, Payload);
+ _ ->
+ ok %io:format("ephraim: IQ from ~p: ~p~n", [From, IQ])
+ end,
+ {ok, Roster};
+
+handle_event(_Event, Roster) ->
+ {ok, Roster}.
+
+handle_call(_Msg, Roster) ->
+ {noreply, Roster}.
+handle_info(_Msg, Roster) ->
+ {ok, Roster}.
+terminate(_Reason, _Roster) ->
+ ok.
+code_change(_OldVersion, Roster, _Extra) ->
+ {ok, Roster}.