diff options
| author | Christophe Romain <christophe.romain@process-one.net> | 2009-09-24 19:28:43 +0000 | 
|---|---|---|
| committer | Christophe Romain <christophe.romain@process-one.net> | 2009-09-24 19:28:43 +0000 | 
| commit | 1c585e74bc3f934c00284428b8d351c379d018a6 (patch) | |
| tree | f9592bee34cdbbfc8b6e96163b2ea04cc387b38e /src | |
| parent | Recompile 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.erl | 21 | ||||
| -rw-r--r-- | src/mod_pubsub/mod_pubsub_odbc.erl | 21 | ||||
| -rw-r--r-- | src/mod_pubsub/node.template | 1 | ||||
| -rw-r--r-- | src/mod_pubsub/node_buddy.erl | 1 | ||||
| -rw-r--r-- | src/mod_pubsub/node_club.erl | 1 | ||||
| -rw-r--r-- | src/mod_pubsub/node_dispatch.erl | 1 | ||||
| -rw-r--r-- | src/mod_pubsub/node_flat.erl | 1 | ||||
| -rw-r--r-- | src/mod_pubsub/node_flat_odbc.erl | 1 | ||||
| -rw-r--r-- | src/mod_pubsub/node_hometree.erl | 1 | ||||
| -rw-r--r-- | src/mod_pubsub/node_hometree_odbc.erl | 1 | ||||
| -rw-r--r-- | src/mod_pubsub/node_mb.erl | 1 | ||||
| -rw-r--r-- | src/mod_pubsub/node_pep.erl | 1 | ||||
| -rw-r--r-- | src/mod_pubsub/node_pep_odbc.erl | 1 | ||||
| -rw-r--r-- | src/mod_pubsub/node_private.erl | 1 | ||||
| -rw-r--r-- | src/mod_pubsub/node_public.erl | 1 | ||||
| -rw-r--r-- | src/mod_pubsub/pubsub_odbc.patch | 22 | 
16 files changed, 58 insertions, 19 deletions
| diff --git a/src/mod_pubsub/mod_pubsub.erl b/src/mod_pubsub/mod_pubsub.erl index 794c44e6e..6b21f4585 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 b95f6ea4b..0e8c3c3fe 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 e70febb8c..e0c743d38 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 ee804b34c..20b679ca7 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 8f14387c0..3c1596cd6 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 2ce01b238..8c2c7d0f4 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 0088034d1..67b95973a 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 6aed3fbc2..f073c70a8 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 38453e4ee..c1c2a55f6 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 0d6cefe22..d9e2a815a 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 beef44996..c1accca3c 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 7b7794a8a..754312b83 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 819bc1766..95c737a6a 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 610ac7773..054485ef5 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 0797af778..ee440f933 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 c59ec725d..400ec948b 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. | 
