From 4d8f7706240a1603468968f47fc7b150b788d62f Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Mon, 8 Apr 2013 11:12:54 +0200 Subject: 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 --- src/gen_pubsub_node.erl | 267 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100644 src/gen_pubsub_node.erl (limited to 'src/gen_pubsub_node.erl') 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 +%%% [http://www.process-one.net/] +%%% @version {@vsn}, {@date} {@time} +%%% @end +%%% ==================================================================== + +%%% @private +%%% @doc

The module {@module} defines the PubSub node +%%% plugin behaviour. This behaviour is used to check that a PubSub plugin +%%% respects the current ejabberd PubSub plugin API.

+ +-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(). -- cgit v1.2.3