summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2003-09-19 18:22:44 +0000
committerAlexey Shchepin <alexey@process-one.net>2003-09-19 18:22:44 +0000
commitaa9f1549f4c68c12d4af4d84afd98fa20183f566 (patch)
treed73c2516fbf3f537a21f301e64e9c7c5ddcd65ba
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--ChangeLog9
-rw-r--r--src/ejabberd_sm.erl37
-rw-r--r--src/mod_disco.erl2
-rw-r--r--src/mod_muc/mod_muc_room.erl2
-rw-r--r--src/mod_register.erl6
5 files changed, 52 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 2f278211..9060f845 100644
--- 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,
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),