diff options
author | Alexey Shchepin <alexey@process-one.net> | 2003-09-19 18:22:44 +0000 |
---|---|---|
committer | Alexey Shchepin <alexey@process-one.net> | 2003-09-19 18:22:44 +0000 |
commit | aa9f1549f4c68c12d4af4d84afd98fa20183f566 (patch) | |
tree | d73c2516fbf3f537a21f301e64e9c7c5ddcd65ba | |
parent | * src/mod_disco.erl: Now only admin can discovery some nodes, (diff) |
* src/mod_muc/mod_muc_room.erl: Debug output switched off
* src/mod_disco.erl: Server identity changed to "service/im"
* src/mod_register.erl: Fixed jabber:iq:register handler
registration, fixed registration removal processing
SVN Revision: 140
Diffstat (limited to '')
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | src/ejabberd_sm.erl | 37 | ||||
-rw-r--r-- | src/mod_disco.erl | 2 | ||||
-rw-r--r-- | src/mod_muc/mod_muc_room.erl | 2 | ||||
-rw-r--r-- | src/mod_register.erl | 6 |
5 files changed, 52 insertions, 4 deletions
@@ -1,3 +1,12 @@ +2003-09-19 Alexey Shchepin <alexey@sevcom.net> + + * src/mod_muc/mod_muc_room.erl: Debug output switched off + + * src/mod_disco.erl: Server identity changed to "service/im" + + * src/mod_register.erl: Fixed jabber:iq:register handler + registration, fixed registration removal processing + 2003-09-16 Alexey Shchepin <alexey@sevcom.net> * src/mod_disco.erl: Now only admin can discovery some nodes, diff --git a/src/ejabberd_sm.erl b/src/ejabberd_sm.erl index a16f4b4f..977f6979 100644 --- a/src/ejabberd_sm.erl +++ b/src/ejabberd_sm.erl @@ -62,8 +62,9 @@ loop() -> end, loop(); {open_session, User, Resource, From} -> - replace_and_register_my_connection(User, Resource, From), - replace_alien_connection(User, Resource), + register_connection(User, Resource, From), + %replace_and_register_my_connection(User, Resource, From), + %replace_alien_connection(User, Resource), loop(); {close_session, User, Resource} -> remove_connection(User, Resource), @@ -101,6 +102,38 @@ open_session(User, Resource) -> close_session(User, Resource) -> ejabberd_sm ! {close_session, User, Resource}. + +register_connection(User, Resource, Pid) -> + LUser = jlib:tolower(User), + UR = {LUser, Resource}, + F = fun() -> + Ss = mnesia:wread({session, UR}), + Ls = mnesia:wread({local_session, UR}), + mnesia:write(#session{ur = UR, user = LUser, node = node()}), + mnesia:write(#local_session{ur = UR, pid = Pid}), + {Ss, Ls} + end, + case mnesia:transaction(F) of + {atomic, {Ss, Ls}} -> + lists:foreach( + fun(R) -> + if R#session.node /= node() -> + {ejabberd_sm, R#session.node} ! + {replace, User, Resource}; + true -> + ok + end + end, Ss), + lists:foreach( + fun(R) -> + R#local_session.pid ! replaced + end, Ls); + _ -> + false + end. + + + replace_alien_connection(User, Resource) -> LUser = jlib:tolower(User), F = fun() -> diff --git a/src/mod_disco.erl b/src/mod_disco.erl index b7642b09..81a7cb91 100644 --- a/src/mod_disco.erl +++ b/src/mod_disco.erl @@ -109,7 +109,7 @@ process_local_iq_info(From, To, {iq, ID, Type, XMLNS, SubEl}) -> [{"xmlns", ?NS_DISCO_INFO}], [{xmlelement, "identity", [{"category", "service"}, - {"type", "jabber"}, + {"type", "im"}, {"name", "ejabberd"}], []}] ++ Features }]}; diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl index a2cb562f..f605e0a6 100644 --- a/src/mod_muc/mod_muc_room.erl +++ b/src/mod_muc/mod_muc_room.erl @@ -84,7 +84,7 @@ ?OLD_ERROR("401", "Bad password.")). --define(DBGFSM, true). +%-define(DBGFSM, true). -ifdef(DBGFSM). -define(FSMOPTS, [{debug, [trace]}]). diff --git a/src/mod_register.erl b/src/mod_register.erl index b833cc6b..2c96a6f9 100644 --- a/src/mod_register.erl +++ b/src/mod_register.erl @@ -21,6 +21,8 @@ start(Opts) -> IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue), gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_REGISTER, ?MODULE, process_iq, IQDisc), + gen_iq_handler:add_iq_handler(ejabberd_sm, ?NS_REGISTER, + ?MODULE, process_iq, IQDisc), ok. init() -> @@ -68,6 +70,10 @@ process_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) -> [SubEl, ?ERR_BAD_REQUEST]} end end; + (UTag == false) and (RTag /= false) -> + {User, Server, _} = From, + ejabberd_auth:remove_user(User), + {iq, ID, result, XMLNS, [SubEl]}; (UTag /= false) and (PTag /= false) -> User = xml:get_tag_cdata(UTag), Password = xml:get_tag_cdata(PTag), |