aboutsummaryrefslogtreecommitdiff
path: root/src/gen_pubsub_node.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2013-04-08 11:12:54 +0200
committerChristophe Romain <christophe.romain@process-one.net>2013-06-13 11:11:02 +0200
commit4d8f7706240a1603468968f47fc7b150b788d62f (patch)
tree92d55d789cc7ac979b3c9e161ffb7f908eba043a /src/gen_pubsub_node.erl
parentFix Guide: ejabberd_service expects a shaper_rule, not a shaper (diff)
Switch to rebar build tool
Use dynamic Rebar configuration Make iconv dependency optional Disable transient_supervisors compile option Add hipe compilation support Only compile ibrowse and lhttpc when needed Make it possible to generate an OTP application release Add --enable-debug compile option Add --enable-all compiler option Add --enable-tools configure option Add --with-erlang configure option. Add --enable-erlang-version-check configure option. Add lager support Improve the test suite
Diffstat (limited to 'src/gen_pubsub_node.erl')
-rw-r--r--src/gen_pubsub_node.erl267
1 files changed, 267 insertions, 0 deletions
diff --git a/src/gen_pubsub_node.erl b/src/gen_pubsub_node.erl
new file mode 100644
index 000000000..0cf1fd2ff
--- /dev/null
+++ b/src/gen_pubsub_node.erl
@@ -0,0 +1,267 @@
+%%% ====================================================================
+%%% ``The contents of this file are subject to the Erlang Public License,
+%%% Version 1.1, (the "License"); you may not use this file except in
+%%% compliance with the License. You should have received a copy of the
+%%% Erlang Public License along with this software. If not, it can be
+%%% retrieved via the world wide web at http://www.erlang.org/.
+%%%
+%%% Software distributed under the License is distributed on an "AS IS"
+%%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%%% the License for the specific language governing rights and limitations
+%%% under the License.
+%%%
+%%% The Initial Developer of the Original Code is ProcessOne.
+%%% Portions created by ProcessOne are Copyright 2006-2013, ProcessOne
+%%% All Rights Reserved.''
+%%% This software is copyright 2006-2013, ProcessOne.
+%%%
+%%%
+%%% @copyright 2006-2013 ProcessOne
+%%% @author Christophe Romain <christophe.romain@process-one.net>
+%%% [http://www.process-one.net/]
+%%% @version {@vsn}, {@date} {@time}
+%%% @end
+%%% ====================================================================
+
+%%% @private
+%%% @doc <p>The module <strong>{@module}</strong> defines the PubSub node
+%%% plugin behaviour. This behaviour is used to check that a PubSub plugin
+%%% respects the current ejabberd PubSub plugin API.</p>
+
+-module(gen_pubsub_node).
+
+-include("jlib.hrl").
+
+-type(host() :: mod_pubsub:host()
+ | mod_pubsub_odbc:host()
+).
+
+-type(nodeId() :: mod_pubsub:nodeId()
+ | mod_pubsub_odbc:nodeId()
+).
+
+-type(nodeIdx() :: mod_pubsub:nodeIdx()
+ | mod_pubsub_odbc:nodeIdx()
+).
+
+-type(itemId() :: mod_pubsub:itemId()
+ | mod_pubsub_odbc:itemId()
+).
+
+-type(pubsubNode() :: mod_pubsub:pubsubNode()
+ | mod_pubsub_odbc:pubsubNode()
+).
+
+-type(pubsubState() :: mod_pubsub:pubsubState()
+ | mod_pubsub_odbc:pubsubState()
+).
+
+-type(pubsubItem() :: mod_pubsub:pubsubItem()
+ | mod_pubsub_odbc:pubsubItem()
+).
+
+-type(nodeOptions() :: mod_pubsub:nodeOptions()
+ | mod_pubsub_odbc:nodeOptions()
+).
+
+-type(subOptions() :: mod_pubsub:subOptions()
+ | mod_pubsub_odbc:subOptions()
+).
+
+-type(affiliation() :: mod_pubsub:affiliation()
+ | mod_pubsub_odbc:affiliation()
+).
+
+-type(subscription() :: mod_pubsub:subscription()
+ | mod_pubsub_odbc:subscription()
+).
+
+-type(subId() :: mod_pubsub:subId()
+ | mod_pubsub_odbc:subId()
+).
+
+-type(accessModel() :: mod_pubsub:accessModel()
+ | mod_pubsub_odbc:accessModel()
+).
+
+-type(publishModel() :: mod_pubsub:publishModel()
+ | mod_pubsub_odbc:publishModel()
+).
+
+-type(payload() :: mod_pubsub:payload()
+ | mod_pubsub_odbc:payload()
+).
+
+-callback init(Host :: binary(),
+ ServerHost :: binary(),
+ Opts :: [any()]) -> atom().
+
+-callback terminate(Host :: host(),
+ ServerHost :: binary()) -> atom().
+
+-callback options() -> [{atom(), any()}].
+
+-callback features() -> [binary()].
+
+-callback create_node_permission(Host :: host(),
+ ServerHost :: binary(),
+ Node :: nodeId(),
+ ParentNode :: nodeId(),
+ Owner :: jid(), Access :: atom()) ->
+ {result, boolean()}.
+
+-callback create_node(NodeIdx :: nodeIdx(),
+ Owner :: jid()) ->
+ {result, {default, broadcast}}.
+
+-callback delete_node(Nodes :: [pubsubNode(),...]) ->
+ {result,
+ {default, broadcast,
+ [{pubsubNode(),
+ [{ljid(), [{subscription(), subId()}]},...]},...]
+ }
+ }
+ |
+ {result,
+ {[],
+ [{pubsubNode(),
+ [{ljid(), [{subscription(), subId()}]},...]},...]
+ }
+ }.
+
+-callback purge_node(NodeIdx :: nodeIdx(),
+ Owner :: jid()) ->
+ {result, {default, broadcast}} |
+ {error, xmlel()}.
+
+-callback subscribe_node(NodeIdx :: nodeIdx(),
+ Sender :: jid(),
+ Subscriber :: ljid(),
+ AccessModel :: accessModel(),
+ SendLast :: 'never' | 'on_sub' | 'on_sub_and_presence',
+ PresenceSubscription :: boolean(),
+ RosterGroup :: boolean(),
+ Options :: subOptions()) ->
+ {result, {default, subscribed, subId()}} |
+ {result, {default, subscribed, subId(), send_last}} |
+ {result, {default, pending, subId()}} |
+ {error, xmlel()}.
+
+-callback unsubscribe_node(NodeIdx :: nodeIdx(),
+ Sender :: jid(),
+ Subscriber :: ljid(),
+ SubId :: subId()) ->
+ {result, default} |
+ {error, xmlel()}.
+
+-callback publish_item(NodeId :: nodeIdx(),
+ Publisher :: jid(),
+ PublishModel :: publishModel(),
+ Max_Items :: non_neg_integer(),
+ ItemId :: <<>> | itemId(),
+ Payload :: payload()) ->
+ {result, {default, broadcast, [itemId()]}} |
+ {error, xmlel()}.
+
+-callback delete_item(NodeIdx :: nodeIdx(),
+ Publisher :: jid(),
+ PublishModel :: publishModel(),
+ ItemId :: <<>> | itemId()) ->
+ {result, {default, broadcast}} |
+ {error, xmlel()}.
+
+-callback remove_extra_items(NodeIdx :: nodeIdx(),
+ Max_Items :: unlimited | non_neg_integer(),
+ ItemIds :: [itemId()]) ->
+ {result, {[itemId()], [itemId()]}
+ }.
+
+-callback get_node_affiliations(NodeIdx :: nodeIdx()) ->
+ {result, [{ljid(), affiliation()}]}.
+
+-callback get_entity_affiliations(Host :: host(),
+ Owner :: jid()) ->
+ {result, [{pubsubNode(), affiliation()}]}.
+
+-callback get_affiliation(NodeIdx :: nodeIdx(),
+ Owner :: jid()) ->
+ {result, affiliation()}.
+
+-callback set_affiliation(NodeIdx :: nodeIdx(),
+ Owner :: ljid(),
+ Affiliation :: affiliation()) ->
+ ok |
+ {error, xmlel()}.
+
+-callback get_node_subscriptions(NodeIdx :: nodeIdx()) ->
+ {result,
+ [{ljid(), subscription(), subId()}] |
+ [{ljid(), none},...]
+ }.
+
+-callback get_entity_subscriptions(Host :: host(),
+ Owner :: jid()) ->
+ {result, [{pubsubNode(), subscription(), subId(), ljid()}]
+ }.
+
+-callback get_subscriptions(NodeIdx :: nodeIdx(),
+ Owner :: ljid()) ->
+ {result, [{subscription(), subId()}]}.
+
+-callback get_pending_nodes(Host :: host(),
+ Owner :: jid()) ->
+ {result, [nodeId()]}.
+
+-callback get_states(NodeIdx::nodeIdx()) ->
+ {result, [pubsubState()]}.
+
+-callback get_state(NodeIdx :: nodeIdx(),
+ JID :: ljid()) ->
+ pubsubState().
+
+-callback set_state(State::pubsubState()) ->
+ ok |
+ {error, xmlel()}.
+
+-callback get_items(NodeIdx :: nodeIdx(),
+ JID :: jid(),
+ AccessModel :: accessModel(),
+ Presence_Subscription :: boolean(),
+ RosterGroup :: boolean(),
+ SubId :: subId()) ->
+ {result, [pubsubItem()]} |
+ {error, xmlel()}.
+
+-callback get_items(NodeIdx :: nodeIdx(),
+ From :: jid()) ->
+ {result, [pubsubItem()]}.
+
+-callback get_item(NodeIdx :: nodeIdx(),
+ ItemId :: itemId(),
+ JID :: jid(),
+ AccessModel :: accessModel(),
+ PresenceSubscription :: boolean(),
+ RosterGroup :: boolean(),
+ SubId :: subId()) ->
+ {result, pubsubItem()} |
+ {error, xmlel()}.
+
+-callback get_item(NodeIdx :: nodeIdx(),
+ ItemId :: itemId()) ->
+ {result, pubsubItem()} |
+ {error, xmlel()}.
+
+-callback set_item(Item :: pubsubItem()) ->
+ ok.
+% | {error, _}.
+
+-callback get_item_name(Host :: host(),
+ ServerHost :: binary(),
+ Node :: nodeId()) ->
+ itemId().
+
+-callback node_to_path(Node :: nodeId()) ->
+ [nodeId()].
+
+-callback path_to_node(Node :: [nodeId()]) ->
+ nodeId().