diff options
author | Alexey Shchepin <alexey@process-one.net> | 2003-01-17 19:58:42 +0000 |
---|---|---|
committer | Alexey Shchepin <alexey@process-one.net> | 2003-01-17 19:58:42 +0000 |
commit | c060093e84505c239ef7f4a36163b8e99e6bf658 (patch) | |
tree | 87ab6081f0cf1c33991eafd78a725fb0bf597340 /src/ejabberd_c2s.erl | |
parent | *** empty log message *** (diff) |
*** empty log message ***
SVN Revision: 42
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r-- | src/ejabberd_c2s.erl | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 7f0fb5e76..0f168f323 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -186,8 +186,6 @@ session_established({xmlstreamelement, El}, StateData) -> presence_update(FromJID, El, StateData); _ -> presence_track(FromJID, ToJID, El, StateData) - %ejabberd_router:route(FrJID, ToJID, El), - %NewSt end; _ -> ejabberd_router:route(FromJID, ToJID, El), @@ -264,14 +262,8 @@ handle_info({route, From, To, Packet}, StateName, StateData) -> process_presence_probe(From, To, StateData), {false, Attrs, StateData}; "error" -> - case ?SETS:is_element(From, StateData#state.pres_a) of - true -> - A = ?SETS:del_element(From, - StateData#state.pres_a), - {true, Attrs, StateData#state{pres_a = A}}; - _ -> - {true, Attrs, StateData} - end; + NewA = remove_element(From, StateData#state.pres_a), + {true, Attrs, StateData#state{pres_a = NewA}}; "invisible" -> Attrs1 = lists:keydelete("type", 1, Attrs), {true, [{"type", "unavailable"} | Attrs1], StateData}; @@ -467,12 +459,12 @@ presence_update(From, Packet, StateData) -> S1 = StateData#state{pres_last = undefined, pres_a = ?SETS:new(), pres_i = ?SETS:new(), - pres_invis = false}, + pres_invis = true}, presence_broadcast_first(From, S1, Packet); true -> StateData end, - StateData; + NewState; "error" -> StateData; "subscribe" -> @@ -495,18 +487,20 @@ presence_update(From, Packet, StateData) -> mod_offline:resend_offline_messages( StateData#state.user), - presence_broadcast_first(From, StateData, Packet); + presence_broadcast_first( + From, StateData#state{pres_last = Packet, + pres_invis = false + }, Packet); true -> presence_broadcast_to_trusted(From, StateData#state.pres_f, StateData#state.pres_a, Packet), - StateData + StateData#state{pres_last = Packet, + pres_invis = false + } end, - - NewState#state{pres_last = Packet, - pres_invis = false - } + NewState end. presence_track(From, To, Packet, StateData) -> |