]> granicus.if.org Git - ejabberd/commitdiff
* src/mod_muc/mod_muc_room.erl: Debug output switched off
authorAlexey Shchepin <alexey@process-one.net>
Fri, 19 Sep 2003 18:22:44 +0000 (18:22 +0000)
committerAlexey Shchepin <alexey@process-one.net>
Fri, 19 Sep 2003 18:22:44 +0000 (18:22 +0000)
* 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

ChangeLog
src/ejabberd_sm.erl
src/mod_disco.erl
src/mod_muc/mod_muc_room.erl
src/mod_register.erl

index 2f278211334dedba0daf20d154b7a49a1ade9abb..9060f845acb4ca717e993e86826d55ad1047ecfd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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,
index a16f4b4f35498c697f764e7411b38daec28ccab8..977f6979d6df49d25031832f9a781a92064872a1 100644 (file)
@@ -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() ->
index b7642b09cd299eaaa7a7ec37fa70a433c76b96f0..81a7cb91c22b6ab4da1b3415431d1102f8368d0b 100644 (file)
@@ -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
                                             }]};
index a2cb562f3428e3b7229e3fd7c54d8ef723dff12a..f605e0a64e6057cb96b362ece5dddc2966cdea68 100644 (file)
@@ -84,7 +84,7 @@
        ?OLD_ERROR("401", "Bad password.")).
 
 
--define(DBGFSM, true).
+%-define(DBGFSM, true).
 
 -ifdef(DBGFSM).
 -define(FSMOPTS, [{debug, [trace]}]).
index b833cc6b18bf9a51b141cf58d683843bf7dcba2b..2c96a6f9fb086d8d6d1d861eedd2c8bfd4bc76cb 100644 (file)
@@ -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),