summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristophe Romain <christophe.romain@process-one.net>2009-09-24 19:28:43 +0000
committerChristophe Romain <christophe.romain@process-one.net>2009-09-24 19:28:43 +0000
commit1c585e74bc3f934c00284428b8d351c379d018a6 (patch)
treef9592bee34cdbbfc8b6e96163b2ea04cc387b38e /src
parentRecompile guide and translation files. (diff)
fix EJAB-1044 and EJAB-1055
SVN Revision: 2626
Diffstat (limited to 'src')
-rw-r--r--src/mod_pubsub/mod_pubsub.erl21
-rw-r--r--src/mod_pubsub/mod_pubsub_odbc.erl21
-rw-r--r--src/mod_pubsub/node.template1
-rw-r--r--src/mod_pubsub/node_buddy.erl1
-rw-r--r--src/mod_pubsub/node_club.erl1
-rw-r--r--src/mod_pubsub/node_dispatch.erl1
-rw-r--r--src/mod_pubsub/node_flat.erl1
-rw-r--r--src/mod_pubsub/node_flat_odbc.erl1
-rw-r--r--src/mod_pubsub/node_hometree.erl1
-rw-r--r--src/mod_pubsub/node_hometree_odbc.erl1
-rw-r--r--src/mod_pubsub/node_mb.erl1
-rw-r--r--src/mod_pubsub/node_pep.erl1
-rw-r--r--src/mod_pubsub/node_pep_odbc.erl1
-rw-r--r--src/mod_pubsub/node_private.erl1
-rw-r--r--src/mod_pubsub/node_public.erl1
-rw-r--r--src/mod_pubsub/pubsub_odbc.patch22
16 files changed, 58 insertions, 19 deletions
diff --git a/src/mod_pubsub/mod_pubsub.erl b/src/mod_pubsub/mod_pubsub.erl
index 794c44e6..6b21f458 100644
--- a/src/mod_pubsub/mod_pubsub.erl
+++ b/src/mod_pubsub/mod_pubsub.erl
@@ -47,7 +47,7 @@
-module(mod_pubsub).
-author('christophe.romain@process-one.net').
--version('1.12-06').
+-version('1.13-0').
-behaviour(gen_server).
-behaviour(gen_mod).
@@ -474,7 +474,7 @@ send_loop(State) ->
#pubsub_node{nodeid = {H, N}, type = Type, id = NodeId, options = Options} = Node,
case get_option(Options, send_last_published_item) of
on_sub_and_presence ->
- send_items(H, N, NodeId, Type, SubJID, last);
+ send_items(H, N, NodeId, Type, LJID, last);
_ ->
ok
end;
@@ -3030,10 +3030,14 @@ get_options_for_subs(NodeID, Subs) ->
% {result, false}
% end
-broadcast_stanza(Host, Node, _NodeId, _Type, NodeOptions, SubsByDepth, NotifyType, Stanza) ->
- %AccessModel = get_option(NodeOptions, access_model),
+broadcast_stanza(Host, Node, _NodeId, _Type, NodeOptions, SubsByDepth, NotifyType, BaseStanza) ->
+ NotificationType = get_option(NodeOptions, notification_type),
BroadcastAll = get_option(NodeOptions, broadcast_all_resources), %% XXX this is not standard, but usefull
From = service_jid(Host),
+ Stanza = case NotificationType of
+ normal -> BaseStanza;
+ MsgType -> add_message_type(BaseStanza, atom_to_list(MsgType))
+ end,
%% Handles explicit subscriptions
NodesByJID = subscribed_nodes_by_jid(NotifyType, SubsByDepth),
lists:foreach(fun ({LJID, Nodes}) ->
@@ -3277,6 +3281,8 @@ get_configure_xfields(_Type, Options, Lang, Groups) ->
?LISTM_CONFIG_FIELD("Roster groups allowed to subscribe", roster_groups_allowed, Groups),
?ALIST_CONFIG_FIELD("Specify the publisher model", publish_model,
[publishers, subscribers, open]),
+ ?ALIST_CONFIG_FIELD("Specify the event message type", notification_type,
+ [headline, normal]),
?INTEGER_CONFIG_FIELD("Max payload size in bytes", max_payload_size),
?ALIST_CONFIG_FIELD("When to send the last published item", send_last_published_item,
[never, on_sub, on_sub_and_presence]),
@@ -3408,6 +3414,8 @@ set_xoption(Host, [{"pubsub#access_model", [Val]} | Opts], NewOpts) ->
?SET_ALIST_XOPT(access_model, Val, [open, authorize, presence, roster, whitelist]);
set_xoption(Host, [{"pubsub#publish_model", [Val]} | Opts], NewOpts) ->
?SET_ALIST_XOPT(publish_model, Val, [publishers, subscribers, open]);
+set_xoption(Host, [{"pubsub#notification_type", [Val]} | Opts], NewOpts) ->
+ ?SET_ALIST_XOPT(notification_type, Val, [headline, normal]);
set_xoption(Host, [{"pubsub#node_type", [Val]} | Opts], NewOpts) ->
?SET_ALIST_XOPT(node_type, Val, [leaf, collection]);
set_xoption(Host, [{"pubsub#max_payload_size", [Val]} | Opts], NewOpts) ->
@@ -3670,6 +3678,11 @@ itemsEls(Items) ->
{xmlelement, "item", itemAttr(ItemId), Payload}
end, Items).
+add_message_type({xmlelement, "message", Attrs, Els}, Type) ->
+ {xmlelement, "message", [{"type", Type}|Attrs], Els};
+add_message_type(XmlEl, _Type) ->
+ XmlEl.
+
add_headers({xmlelement, Name, Attrs, Els}, HeaderEls) ->
HeaderEl = {xmlelement, "headers", [{"xmlns", ?NS_SHIM}], HeaderEls},
{xmlelement, Name, Attrs, [HeaderEl | Els]}.
diff --git a/src/mod_pubsub/mod_pubsub_odbc.erl b/src/mod_pubsub/mod_pubsub_odbc.erl
index b95f6ea4..0e8c3c3f 100644
--- a/src/mod_pubsub/mod_pubsub_odbc.erl
+++ b/src/mod_pubsub/mod_pubsub_odbc.erl
@@ -47,7 +47,7 @@
-module(mod_pubsub_odbc).
-author('christophe.romain@process-one.net').
--version('1.12-06').
+-version('1.13-0').
-behaviour(gen_server).
-behaviour(gen_mod).
@@ -301,7 +301,7 @@ send_loop(State) ->
fun({Node, subscribed, _, SubJID}) ->
if (SubJID == LJID) or (SubJID == BJID) ->
#pubsub_node{nodeid = {H, N}, type = Type, id = NodeId} = Node,
- send_items(H, N, NodeId, Type, SubJID, last);
+ send_items(H, N, NodeId, Type, LJID, last);
true ->
% resource not concerned about that subscription
ok
@@ -2860,10 +2860,14 @@ get_options_for_subs(NodeID, Subs) ->
% {result, false}
% end
-broadcast_stanza(Host, Node, _NodeId, _Type, NodeOptions, SubsByDepth, NotifyType, Stanza) ->
- %AccessModel = get_option(NodeOptions, access_model),
+broadcast_stanza(Host, Node, _NodeId, _Type, NodeOptions, SubsByDepth, NotifyType, BaseStanza) ->
+ NotificationType = get_option(NodeOptions, notification_type),
BroadcastAll = get_option(NodeOptions, broadcast_all_resources), %% XXX this is not standard, but usefull
From = service_jid(Host),
+ Stanza = case NotificationType of
+ normal -> BaseStanza;
+ MsgType -> add_message_type(BaseStanza, atom_to_list(MsgType))
+ end,
%% Handles explicit subscriptions
NodesByJID = subscribed_nodes_by_jid(NotifyType, SubsByDepth),
lists:foreach(fun ({LJID, Nodes}) ->
@@ -3131,6 +3135,8 @@ get_configure_xfields(_Type, Options, Lang, Groups) ->
?LISTM_CONFIG_FIELD("Roster groups allowed to subscribe", roster_groups_allowed, Groups),
?ALIST_CONFIG_FIELD("Specify the publisher model", publish_model,
[publishers, subscribers, open]),
+ ?ALIST_CONFIG_FIELD("Specify the event message type", notification_type,
+ [headline, normal]),
?INTEGER_CONFIG_FIELD("Max payload size in bytes", max_payload_size),
?ALIST_CONFIG_FIELD("When to send the last published item", send_last_published_item,
[never, on_sub, on_sub_and_presence]),
@@ -3262,6 +3268,8 @@ set_xoption(Host, [{"pubsub#access_model", [Val]} | Opts], NewOpts) ->
?SET_ALIST_XOPT(access_model, Val, [open, authorize, presence, roster, whitelist]);
set_xoption(Host, [{"pubsub#publish_model", [Val]} | Opts], NewOpts) ->
?SET_ALIST_XOPT(publish_model, Val, [publishers, subscribers, open]);
+set_xoption(Host, [{"pubsub#notification_type", [Val]} | Opts], NewOpts) ->
+ ?SET_ALIST_XOPT(notification_type, Val, [headline, normal]);
set_xoption(Host, [{"pubsub#node_type", [Val]} | Opts], NewOpts) ->
?SET_ALIST_XOPT(node_type, Val, [leaf, collection]);
set_xoption(Host, [{"pubsub#max_payload_size", [Val]} | Opts], NewOpts) ->
@@ -3556,6 +3564,11 @@ itemsEls(Items) ->
{xmlelement, "item", itemAttr(ItemId), Payload}
end, Items).
+add_message_type({xmlelement, "message", Attrs, Els}, Type) ->
+ {xmlelement, "message", [{"type", Type}|Attrs], Els};
+add_message_type(XmlEl, _Type) ->
+ XmlEl.
+
add_headers({xmlelement, Name, Attrs, Els}, HeaderEls) ->
HeaderEl = {xmlelement, "headers", [{"xmlns", ?NS_SHIM}], HeaderEls},
{xmlelement, Name, Attrs, [HeaderEl | Els]}.
diff --git a/src/mod_pubsub/node.template b/src/mod_pubsub/node.template
index e70febb8..e0c743d3 100644
--- a/src/mod_pubsub/node.template
+++ b/src/mod_pubsub/node.template
@@ -88,6 +88,7 @@ options() ->
{access_model, open},
{roster_groups_allowed, []},
{publish_model, publishers},
+ {notification_type, headline},
{max_payload_size, ?MAX_PAYLOAD_SIZE},
{send_last_published_item, on_sub_and_presence},
{deliver_notifications, true},
diff --git a/src/mod_pubsub/node_buddy.erl b/src/mod_pubsub/node_buddy.erl
index ee804b34..20b679ca 100644
--- a/src/mod_pubsub/node_buddy.erl
+++ b/src/mod_pubsub/node_buddy.erl
@@ -89,6 +89,7 @@ options() ->
{access_model, presence},
{roster_groups_allowed, []},
{publish_model, publishers},
+ {notification_type, headline},
{max_payload_size, ?MAX_PAYLOAD_SIZE},
{send_last_published_item, never},
{deliver_notifications, true},
diff --git a/src/mod_pubsub/node_club.erl b/src/mod_pubsub/node_club.erl
index 8f14387c..3c1596cd 100644
--- a/src/mod_pubsub/node_club.erl
+++ b/src/mod_pubsub/node_club.erl
@@ -89,6 +89,7 @@ options() ->
{access_model, authorize},
{roster_groups_allowed, []},
{publish_model, publishers},
+ {notification_type, headline},
{max_payload_size, ?MAX_PAYLOAD_SIZE},
{send_last_published_item, never},
{deliver_notifications, true},
diff --git a/src/mod_pubsub/node_dispatch.erl b/src/mod_pubsub/node_dispatch.erl
index 2ce01b23..8c2c7d0f 100644
--- a/src/mod_pubsub/node_dispatch.erl
+++ b/src/mod_pubsub/node_dispatch.erl
@@ -87,6 +87,7 @@ options() ->
{access_model, open},
{roster_groups_allowed, []},
{publish_model, publishers},
+ {notification_type, headline},
{max_payload_size, ?MAX_PAYLOAD_SIZE},
{send_last_published_item, never},
{deliver_notifications, true},
diff --git a/src/mod_pubsub/node_flat.erl b/src/mod_pubsub/node_flat.erl
index 0088034d..67b95973 100644
--- a/src/mod_pubsub/node_flat.erl
+++ b/src/mod_pubsub/node_flat.erl
@@ -80,6 +80,7 @@ options() ->
{access_model, open},
{roster_groups_allowed, []},
{publish_model, publishers},
+ {notification_type, headline},
{max_payload_size, ?MAX_PAYLOAD_SIZE},
{send_last_published_item, on_sub_and_presence},
{deliver_notifications, true},
diff --git a/src/mod_pubsub/node_flat_odbc.erl b/src/mod_pubsub/node_flat_odbc.erl
index 6aed3fbc..f073c70a 100644
--- a/src/mod_pubsub/node_flat_odbc.erl
+++ b/src/mod_pubsub/node_flat_odbc.erl
@@ -85,6 +85,7 @@ options() ->
{access_model, open},
{roster_groups_allowed, []},
{publish_model, publishers},
+ {notification_type, headline},
{max_payload_size, ?MAX_PAYLOAD_SIZE},
{send_last_published_item, on_sub_and_presence},
{deliver_notifications, true},
diff --git a/src/mod_pubsub/node_hometree.erl b/src/mod_pubsub/node_hometree.erl
index 38453e4e..c1c2a55f 100644
--- a/src/mod_pubsub/node_hometree.erl
+++ b/src/mod_pubsub/node_hometree.erl
@@ -143,6 +143,7 @@ options() ->
{access_model, open},
{roster_groups_allowed, []},
{publish_model, publishers},
+ {notification_type, headline},
{max_payload_size, ?MAX_PAYLOAD_SIZE},
{send_last_published_item, on_sub_and_presence},
{deliver_notifications, true},
diff --git a/src/mod_pubsub/node_hometree_odbc.erl b/src/mod_pubsub/node_hometree_odbc.erl
index 0d6cefe2..d9e2a815 100644
--- a/src/mod_pubsub/node_hometree_odbc.erl
+++ b/src/mod_pubsub/node_hometree_odbc.erl
@@ -147,6 +147,7 @@ options() ->
{access_model, open},
{roster_groups_allowed, []},
{publish_model, publishers},
+ {notification_type, headline},
{max_payload_size, ?MAX_PAYLOAD_SIZE},
{send_last_published_item, on_sub_and_presence},
{deliver_notifications, true},
diff --git a/src/mod_pubsub/node_mb.erl b/src/mod_pubsub/node_mb.erl
index beef4499..c1accca3 100644
--- a/src/mod_pubsub/node_mb.erl
+++ b/src/mod_pubsub/node_mb.erl
@@ -92,6 +92,7 @@ options() ->
{access_model, presence},
{roster_groups_allowed, []},
{publish_model, publishers},
+ {notification_type, headline},
{max_payload_size, ?MAX_PAYLOAD_SIZE},
{send_last_published_item, on_sub_and_presence},
{deliver_notifications, true},
diff --git a/src/mod_pubsub/node_pep.erl b/src/mod_pubsub/node_pep.erl
index 7b7794a8..754312b8 100644
--- a/src/mod_pubsub/node_pep.erl
+++ b/src/mod_pubsub/node_pep.erl
@@ -87,6 +87,7 @@ options() ->
{access_model, presence},
{roster_groups_allowed, []},
{publish_model, publishers},
+ {notification_type, headline},
{max_payload_size, ?MAX_PAYLOAD_SIZE},
{send_last_published_item, on_sub_and_presence},
{deliver_notifications, true},
diff --git a/src/mod_pubsub/node_pep_odbc.erl b/src/mod_pubsub/node_pep_odbc.erl
index 819bc176..95c737a6 100644
--- a/src/mod_pubsub/node_pep_odbc.erl
+++ b/src/mod_pubsub/node_pep_odbc.erl
@@ -95,6 +95,7 @@ options() ->
{access_model, presence},
{roster_groups_allowed, []},
{publish_model, publishers},
+ {notification_type, headline},
{max_payload_size, ?MAX_PAYLOAD_SIZE},
{send_last_published_item, on_sub_and_presence},
{deliver_notifications, true},
diff --git a/src/mod_pubsub/node_private.erl b/src/mod_pubsub/node_private.erl
index 610ac777..054485ef 100644
--- a/src/mod_pubsub/node_private.erl
+++ b/src/mod_pubsub/node_private.erl
@@ -89,6 +89,7 @@ options() ->
{access_model, whitelist},
{roster_groups_allowed, []},
{publish_model, publishers},
+ {notification_type, headline},
{max_payload_size, ?MAX_PAYLOAD_SIZE},
{send_last_published_item, never},
{deliver_notifications, false},
diff --git a/src/mod_pubsub/node_public.erl b/src/mod_pubsub/node_public.erl
index 0797af77..ee440f93 100644
--- a/src/mod_pubsub/node_public.erl
+++ b/src/mod_pubsub/node_public.erl
@@ -89,6 +89,7 @@ options() ->
{access_model, open},
{roster_groups_allowed, []},
{publish_model, publishers},
+ {notification_type, headline},
{max_payload_size, ?MAX_PAYLOAD_SIZE},
{send_last_published_item, never},
{deliver_notifications, true},
diff --git a/src/mod_pubsub/pubsub_odbc.patch b/src/mod_pubsub/pubsub_odbc.patch
index c59ec725..400ec948 100644
--- a/src/mod_pubsub/pubsub_odbc.patch
+++ b/src/mod_pubsub/pubsub_odbc.patch
@@ -1,5 +1,5 @@
---- mod_pubsub.erl 2009-09-23 17:53:47.000000000 +0200
-+++ mod_pubsub_odbc.erl 2009-09-23 17:54:27.000000000 +0200
+--- mod_pubsub.erl 2009-09-24 18:34:03.471785103 +0200
++++ mod_pubsub_odbc.erl 2009-09-24 18:35:20.256479455 +0200
@@ -45,7 +45,7 @@
%%% TODO
%%% plugin: generate Reply (do not use broadcast atom anymore)
@@ -7,7 +7,7 @@
--module(mod_pubsub).
+-module(mod_pubsub_odbc).
-author('christophe.romain@process-one.net').
- -version('1.12-06').
+ -version('1.13-0').
@@ -57,9 +57,9 @@
-include("jlib.hrl").
@@ -243,12 +243,12 @@
- #pubsub_node{nodeid = {H, N}, type = Type, id = NodeId, options = Options} = Node,
- case get_option(Options, send_last_published_item) of
- on_sub_and_presence ->
-- send_items(H, N, NodeId, Type, SubJID, last);
+- send_items(H, N, NodeId, Type, LJID, last);
- _ ->
- ok
- end;
+ #pubsub_node{nodeid = {H, N}, type = Type, id = NodeId} = Node,
-+ send_items(H, N, NodeId, Type, SubJID, last);
++ send_items(H, N, NodeId, Type, LJID, last);
true ->
% resource not concerned about that subscription
ok
@@ -612,7 +612,7 @@
_ -> Acc
end;
(_, Acc) ->
-@@ -3199,6 +3029,30 @@
+@@ -3203,6 +3033,30 @@
Result
end.
@@ -643,7 +643,7 @@
%% @spec (Host, Options) -> MaxItems
%% Host = host()
%% Options = [Option]
-@@ -3581,7 +3435,13 @@
+@@ -3589,7 +3443,13 @@
tree_action(Host, Function, Args) ->
?DEBUG("tree_action ~p ~p ~p",[Host,Function,Args]),
Fun = fun() -> tree_call(Host, Function, Args) end,
@@ -658,7 +658,7 @@
%% @doc <p>node plugin call.</p>
node_call(Type, Function, Args) ->
-@@ -3601,13 +3461,13 @@
+@@ -3609,13 +3469,13 @@
node_action(Host, Type, Function, Args) ->
?DEBUG("node_action ~p ~p ~p ~p",[Host,Type,Function,Args]),
@@ -674,7 +674,7 @@
case tree_call(Host, get_node, [Host, Node]) of
N when is_record(N, pubsub_node) ->
case Action(N) of
-@@ -3620,8 +3480,14 @@
+@@ -3628,8 +3488,14 @@
end
end, Trans).
@@ -691,7 +691,7 @@
{result, Result} -> {result, Result};
{error, Error} -> {error, Error};
{atomic, {result, Result}} -> {result, Result};
-@@ -3629,6 +3495,15 @@
+@@ -3637,6 +3503,15 @@
{aborted, Reason} ->
?ERROR_MSG("transaction return internal error: ~p~n", [{aborted, Reason}]),
{error, ?ERR_INTERNAL_SERVER_ERROR};
@@ -707,7 +707,7 @@
{'EXIT', Reason} ->
?ERROR_MSG("transaction return internal error: ~p~n", [{'EXIT', Reason}]),
{error, ?ERR_INTERNAL_SERVER_ERROR};
-@@ -3637,6 +3512,17 @@
+@@ -3645,6 +3520,17 @@
{error, ?ERR_INTERNAL_SERVER_ERROR}
end.