diff options
author | Alexey Shchepin <alexey@process-one.net> | 2004-01-02 19:36:38 +0000 |
---|---|---|
committer | Alexey Shchepin <alexey@process-one.net> | 2004-01-02 19:36:38 +0000 |
commit | 7e6d96b19232a3da350259cdbc8de356aa05a513 (patch) | |
tree | 61a6c9e55f49d0809b7c1c59f343cad3c031e213 /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.erl | 24 |
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. |