summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ejabberd_c2s.erl13
-rw-r--r--src/jlib.erl4
2 files changed, 14 insertions, 3 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index 5ac2eb86..3fb5e2c0 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -181,10 +181,9 @@ session_established({xmlstreamelement, El}, StateData) ->
[FromJID, El, StateData]),
presence_update(FromJID, El, StateData);
_ ->
- ejabberd_router:route({StateData#state.user,
- Server, ""},
- ToJID, El),
presence_track(FromJID, ToJID, El, StateData)
+ %ejabberd_router:route(FrJID, ToJID, El),
+ %NewSt
end;
_ ->
ejabberd_router:route(FromJID, ToJID, El),
@@ -490,30 +489,38 @@ presence_track(From, To, Packet, StateData) ->
User = StateData#state.user,
case xml:get_attr_s("type", Attrs) of
"unavailable" ->
+ ejabberd_router:route(From, To, Packet),
I = remove_element(LTo, StateData#state.pres_i),
A = remove_element(LTo, StateData#state.pres_a),
StateData#state{pres_i = I,
pres_a = A};
"invisible" ->
+ ejabberd_router:route(From, To, Packet),
I = ?SETS:add_element(LTo, StateData#state.pres_i),
A = remove_element(LTo, StateData#state.pres_a),
StateData#state{pres_i = I,
pres_a = A};
"subscribe" ->
+ ejabberd_router:route(jlib:jid_remove_resource(From), To, Packet),
mod_roster:out_subscription(User, To, subscribe),
StateData;
"subscribed" ->
+ ejabberd_router:route(jlib:jid_remove_resource(From), To, Packet),
mod_roster:out_subscription(User, To, subscribed),
StateData;
"unsubscribe" ->
+ ejabberd_router:route(jlib:jid_remove_resource(From), To, Packet),
mod_roster:out_subscription(User, To, unsubscribe),
StateData;
"unsubscribed" ->
+ ejabberd_router:route(jlib:jid_remove_resource(From), To, Packet),
mod_roster:out_subscription(User, To, unsubscribed),
StateData;
"error" ->
+ ejabberd_router:route(From, To, Packet),
StateData;
_ ->
+ ejabberd_router:route(From, To, Packet),
I = remove_element(LTo, StateData#state.pres_i),
A = ?SETS:add_element(LTo, StateData#state.pres_a),
StateData#state{pres_i = I,
diff --git a/src/jlib.erl b/src/jlib.erl
index e450b80b..974117fd 100644
--- a/src/jlib.erl
+++ b/src/jlib.erl
@@ -21,6 +21,7 @@
jid_to_string/1,
tolower/1,
jid_tolower/1,
+ jid_remove_resource/1,
get_iq_namespace/1,
iq_query_info/1,
is_iq_request_type/1,
@@ -183,6 +184,9 @@ tolower(S) ->
jid_tolower({U, S, R}) ->
{tolower(U), tolower(S), R}.
+jid_remove_resource({U, S, R}) ->
+ {U, S, ""}.
+
get_iq_namespace({xmlelement, Name, Attrs, Els}) when Name == "iq" ->
case xml:remove_cdata(Els) of
[{xmlelement, Name2, Attrs2, Els2}] ->