aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2006-05-26 00:00:32 +0000
committerAlexey Shchepin <alexey@process-one.net>2006-05-26 00:00:32 +0000
commitc737ce1b8cdcf70a4b6d9afda9e019564e332ed3 (patch)
treebaac0e6161da26f185cd2614c5c59aba47ab753b
parent* src/mod_roster.erl: The subscribe request are now resend at (diff)
* src/odbc/pg.sql: Updated
* src/mod_shared_roster.erl: Updated * src/ejabberd_sm.erl: Bugfix * src/mod_roster.erl: Bugfix * src/mod_roster_odbc.erl: Likewise SVN Revision: 570
-rw-r--r--ChangeLog11
-rw-r--r--src/ejabberd_sm.erl6
-rw-r--r--src/mod_roster.erl56
-rw-r--r--src/mod_roster_odbc.erl92
-rw-r--r--src/mod_shared_roster.erl5
-rw-r--r--src/odbc/pg.sql6
6 files changed, 102 insertions, 74 deletions
diff --git a/ChangeLog b/ChangeLog
index 16cb561a6..9f16383ef 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2006-05-26 Alexey Shchepin <alexey@sevcom.net>
+
+ * src/odbc/pg.sql: Updated
+
+ * src/mod_shared_roster.erl: Updated
+
+ * src/ejabberd_sm.erl: Bugfix
+
+ * src/mod_roster.erl: Bugfix
+ * src/mod_roster_odbc.erl: Likewise
+
2006-05-23 Mickael Remond <mickael.remond@process-one.net>
* src/mod_roster.erl: The subscribe request are now resend at login as
diff --git a/src/ejabberd_sm.erl b/src/ejabberd_sm.erl
index 2ad148ac5..f140951da 100644
--- a/src/ejabberd_sm.erl
+++ b/src/ejabberd_sm.erl
@@ -8,7 +8,6 @@
-module(ejabberd_sm).
-author('alexey@sevcom.net').
--vsn('$Revision$ ').
-behaviour(gen_server).
@@ -306,8 +305,9 @@ do_route(From, To, Packet) ->
{Pass, Subsc} =
case xml:get_attr_s("type", Attrs) of
"subscribe" ->
- Reason = xml:get_tag_cdata(
- xml:get_subtag(Packet, "status")),
+ Reason = xml:get_path_s(
+ Packet,
+ [{elem, "status"}, cdata]),
{ejabberd_hooks:run_fold(
roster_in_subscription,
LServer,
diff --git a/src/mod_roster.erl b/src/mod_roster.erl
index 4ddd30c60..ce5cb4e87 100644
--- a/src/mod_roster.erl
+++ b/src/mod_roster.erl
@@ -417,7 +417,7 @@ process_subscription(Direction, User, Server, JID1, Type, Reason) ->
AskMessage = case NewState of
{_, both} -> Reason;
{_, in} -> Reason;
- {_, _} -> []
+ _ -> ""
end,
case NewState of
none ->
@@ -641,35 +641,37 @@ process_item_attrs_ws(Item, []) ->
Item.
get_in_pending_subscriptions(Ls, User, Server) ->
- JID = jlib:make_jid(User, Server,""),
- case mnesia:dirty_index_read(roster, {User,Server}, #roster.us) of
+ JID = jlib:make_jid(User, Server, ""),
+ US = {JID#jid.luser, JID#jid.lserver},
+ case mnesia:dirty_index_read(roster, US, #roster.us) of
Result when list(Result) ->
Ls ++ lists:map(
- fun(R) ->
- Message = R#roster.askmessage,
- Status = if is_binary(Message) ->
- binary_to_list(Message);
- true ->
- []
- end,
- {xmlelement, "presence", [{"from", jlib:jid_to_string(R#roster.jid)},
- {"to", jlib:jid_to_string(JID)},
- {"type", "subscribe"}],
- [{xmlelement, "status", [],
- [{xmlcdata, Status}]}]}
- end,
- lists:filter(
- fun(R) ->
- case R#roster.ask of
- in -> true;
- both -> true;
- _ -> false
- end
- end,
- Result));
- _ -> []
+ fun(R) ->
+ Message = R#roster.askmessage,
+ Status = if is_binary(Message) ->
+ binary_to_list(Message);
+ true ->
+ ""
+ end,
+ {xmlelement, "presence",
+ [{"from", jlib:jid_to_string(R#roster.jid)},
+ {"to", jlib:jid_to_string(JID)},
+ {"type", "subscribe"}],
+ [{xmlelement, "status", [],
+ [{xmlcdata, Status}]}]}
+ end,
+ lists:filter(
+ fun(R) ->
+ case R#roster.ask of
+ in -> true;
+ both -> true;
+ _ -> false
+ end
+ end,
+ Result));
+ _ ->
+ Ls
end.
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/mod_roster_odbc.erl b/src/mod_roster_odbc.erl
index 440898d2d..a9f596c87 100644
--- a/src/mod_roster_odbc.erl
+++ b/src/mod_roster_odbc.erl
@@ -8,7 +8,6 @@
-module(mod_roster_odbc).
-author('alexey@sevcom.net').
--vsn('$Revision$ ').
-behaviour(gen_mod).
@@ -126,10 +125,10 @@ get_user_roster(Acc, {LUser, LServer}) ->
case catch ejabberd_odbc:sql_query(
LServer,
["select username, jid, nick, subscription, ask, "
- "server, subscribe, type from rosterusers "
+ "askmessage, server, subscribe, type from rosterusers "
"where username='", Username, "'"]) of
{selected, ["username", "jid", "nick", "subscription", "ask",
- "server", "subscribe", "type"],
+ "askmessage", "server", "subscribe", "type"],
Items} when is_list(Items) ->
JIDGroups = case catch ejabberd_odbc:sql_query(
LServer,
@@ -216,11 +215,12 @@ process_item_set(From, To, {xmlelement, _Name, Attrs, Els}) ->
F = fun() ->
{selected,
["username", "jid", "nick", "subscription",
- "ask", "server", "subscribe", "type"],
+ "ask", "askmessage", "server", "subscribe", "type"],
Res} =
ejabberd_odbc:sql_query_t(
["select username, jid, nick, subscription, "
- "ask, server, subscribe, type from rosterusers "
+ "ask, askmessage, server, subscribe, type "
+ "from rosterusers "
"where username='", Username, "' "
"and jid='", SJID, "'"]),
Item = case Res of
@@ -410,10 +410,10 @@ get_subscription_lists(_, User, Server) ->
case catch ejabberd_odbc:sql_query(
LServer,
["select username, jid, nick, subscription, ask, "
- "server, subscribe, type from rosterusers "
+ "askmessage, server, subscribe, type from rosterusers "
"where username='", Username, "'"]) of
{selected, ["username", "jid", "nick", "subscription", "ask",
- "server", "subscribe", "type"],
+ "askmessage", "server", "subscribe", "type"],
Items} when is_list(Items) ->
fill_subscription_lists(LServer, Items, [], []);
_ ->
@@ -458,12 +458,13 @@ process_subscription(Direction, User, Server, JID1, Type, Reason) ->
Item =
case ejabberd_odbc:sql_query_t(
["select username, jid, nick, subscription, ask, "
- "server, subscribe, type from rosterusers "
+ "askmessage, server, subscribe, type "
+ "from rosterusers "
"where username='", Username, "' "
"and jid='", SJID, "';"]) of
{selected,
["username", "jid", "nick", "subscription", "ask",
- "server", "subscribe", "type"],
+ "askmessage", "server", "subscribe", "type"],
[I]} ->
R = raw_to_record(LServer, I),
Groups =
@@ -506,7 +507,7 @@ process_subscription(Direction, User, Server, JID1, Type, Reason) ->
AskMessage = case NewState of
{_, both} -> Reason;
{_, in} -> Reason;
- {_, _} -> []
+ _ -> ""
end,
case NewState of
none ->
@@ -770,35 +771,47 @@ process_item_attrs_ws(Item, []) ->
get_in_pending_subscriptions(Ls, User, Server) ->
- JID = jlib:make_jid(User, Server,""),
- case mnesia:dirty_index_read(roster, {User,Server}, #roster.us) of
- Result when list(Result) ->
+ JID = jlib:make_jid(User, Server, ""),
+ LUser = JID#jid.luser,
+ LServer = JID#jid.lserver,
+ Username = ejabberd_odbc:escape(LUser),
+ case catch ejabberd_odbc:sql_query(
+ LServer,
+ ["select username, jid, nick, subscription, ask, "
+ "askmessage, server, subscribe, type from rosterusers "
+ "where username='", Username, "'"]) of
+ {selected, ["username", "jid", "nick", "subscription", "ask",
+ "askmessage", "server", "subscribe", "type"],
+ Items} when is_list(Items) ->
Ls ++ lists:map(
- fun(R) ->
- Message = R#roster.askmessage,
- Status = if is_binary(Message) ->
- binary_to_list(Message);
- true ->
- []
- end,
- {xmlelement, "presence", [{"from", jlib:jid_to_string(R#roster.jid)},
- {"to", jlib:jid_to_string(JID)},
- {"type", "subscribe"}],
- [{xmlelement, "status", [],
- [{xmlcdata, Status}]}]}
- end,
- lists:filter(
- fun(R) ->
- case R#roster.ask of
- in -> true;
- both -> true;
- _ -> false
- end
- end,
- Result));
- _ -> []
+ fun(R) ->
+ Message = R#roster.askmessage,
+ Status = if is_binary(Message) ->
+ binary_to_list(Message);
+ true ->
+ ""
+ end,
+ {xmlelement, "presence",
+ [{"from", jlib:jid_to_string(R#roster.jid)},
+ {"to", jlib:jid_to_string(JID)},
+ {"type", "subscribe"}],
+ [{xmlelement, "status", [],
+ [{xmlcdata, Status}]}]}
+ end,
+ lists:flatmap(
+ fun(I) ->
+ R = raw_to_record(LServer, I),
+ case R#roster.ask of
+ in -> [R];
+ both -> [R];
+ _ -> []
+ end
+ end,
+ Items));
+ _ ->
+ Ls
end.
-
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -869,7 +882,7 @@ get_jid_info(_, User, Server, JID) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-raw_to_record(LServer, {User, SJID, Nick, SSubscription, SAsk,
+raw_to_record(LServer, {User, SJID, Nick, SSubscription, SAsk, SAskMessage,
_SServer, _SSubscribe, _SType}) ->
case jlib:string_to_jid(SJID) of
error ->
@@ -895,7 +908,8 @@ raw_to_record(LServer, {User, SJID, Nick, SSubscription, SAsk,
jid = LJID,
name = Nick,
subscription = Subscription,
- ask = Ask}
+ ask = Ask,
+ askmessage = SAskMessage}
end.
record_to_string(#roster{us = {User, _Server},
diff --git a/src/mod_shared_roster.erl b/src/mod_shared_roster.erl
index 90bb3c007..e6b18c5a4 100644
--- a/src/mod_shared_roster.erl
+++ b/src/mod_shared_roster.erl
@@ -8,7 +8,6 @@
-module(mod_shared_roster).
-author('alexey@sevcom.net').
--vsn('$Revision: 24 $ ').
-behaviour(gen_mod).
@@ -16,7 +15,7 @@
get_user_roster/2,
get_subscription_lists/3,
get_jid_info/4,
- in_subscription/5,
+ in_subscription/6,
out_subscription/4,
list_groups/1,
create_group/2,
@@ -148,7 +147,7 @@ get_jid_info({Subscription, Groups}, User, Server, JID) ->
{Subscription, Groups}
end.
-in_subscription(Acc, User, Server, JID, Type) ->
+in_subscription(Acc, User, Server, JID, Type, _Reason) ->
process_subscription(in, User, Server, JID, Type, Acc).
out_subscription(User, Server, JID, Type) ->
diff --git a/src/odbc/pg.sql b/src/odbc/pg.sql
index d115e1e5a..a7059d503 100644
--- a/src/odbc/pg.sql
+++ b/src/odbc/pg.sql
@@ -18,7 +18,7 @@ CREATE TABLE rosterusers (
nick text,
subscription character(1) NOT NULL,
ask character(1) NOT NULL,
- askmessage text,
+ askmessage text NOT NULL,
server character(1) NOT NULL,
subscribe text,
"type" text
@@ -99,4 +99,6 @@ CREATE INDEX i_vcard_search_lorgunit ON vcard_search(lorgunit);
-- ALTER TABLE spool ALTER COLUMN seq SET NOT NULL;
--- To update from 1.x:
--- ALTER TABLE rosterusers ADD COLUMN askmessage text AFTER ask;
+-- ALTER TABLE rosterusers ADD COLUMN askmessage text;
+-- UPDATE rosterusers SET askmessage = '';
+-- ALTER TABLE rosterusers ALTER COLUMN askmessage SET NOT NULL;