aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_sm.erl
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2004-01-02 19:36:38 +0000
committerAlexey Shchepin <alexey@process-one.net>2004-01-02 19:36:38 +0000
commit7e6d96b19232a3da350259cdbc8de356aa05a513 (patch)
tree61a6c9e55f49d0809b7c1c59f343cad3c031e213 /src/ejabberd_sm.erl
parent* src/ejabberd_app.erl: Now possible to specify path to log file (diff)
* src/ejabberd_sm.erl (do_route/3): Minor fix
* src/ejabberd_sm.erl (route_message/3): Minor changes SVN Revision: 194
Diffstat (limited to 'src/ejabberd_sm.erl')
-rw-r--r--src/ejabberd_sm.erl24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/ejabberd_sm.erl b/src/ejabberd_sm.erl
index 03d1cac96..628aa6bde 100644
--- a/src/ejabberd_sm.erl
+++ b/src/ejabberd_sm.erl
@@ -177,11 +177,11 @@ do_route(From, To, Packet) ->
end,
if Pass ->
LFrom = jlib:jid_tolower(From),
- Resources = get_user_resources(User),
+ PResources = get_user_present_resources(User),
if
- Resources /= [] ->
+ PResources /= [] ->
lists:foreach(
- fun(R) ->
+ fun({_, R}) ->
if LFrom /=
{LUser, LServer, R} ->
ejabberd_sm !
@@ -192,7 +192,7 @@ do_route(From, To, Packet) ->
true ->
ok
end
- end, Resources);
+ end, PResources);
true ->
if
Subsc ->
@@ -248,7 +248,7 @@ do_route(From, To, Packet) ->
end.
route_message(From, To, Packet) ->
- #jid{luser = LUser} = To,
+ LUser = To#jid.luser,
case catch lists:max(get_user_present_resources(LUser)) of
{'EXIT', _} ->
case xml:get_tag_attr_s("type", Packet) of
@@ -273,10 +273,16 @@ route_message(From, To, Packet) ->
end
end;
{_, R} ->
- ejabberd_sm ! {route,
- From,
- jlib:jid_replace_resource(To, R),
- Packet}
+ LResource = jlib:resourceprep(R),
+ LUR = {LUser, LResource},
+ case mnesia:dirty_read({session, LUR}) of
+ [] ->
+ ok; % Race condition
+ [Sess] ->
+ Pid = Sess#session.pid,
+ ?DEBUG("sending to process ~p~n", [Pid]),
+ Pid ! {route, From, To, Packet}
+ end
end.