aboutsummaryrefslogtreecommitdiff
path: root/include/pubsub.hrl
diff options
context:
space:
mode:
Diffstat (limited to 'include/pubsub.hrl')
-rw-r--r--include/pubsub.hrl257
1 files changed, 257 insertions, 0 deletions
diff --git a/include/pubsub.hrl b/include/pubsub.hrl
new file mode 100644
index 000000000..4f2cc9f38
--- /dev/null
+++ b/include/pubsub.hrl
@@ -0,0 +1,257 @@
+%%% ====================================================================
+%%% ``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
+%%%
+%%% This file contains pubsub types definition.
+%%% ====================================================================
+
+%% -------------------------------
+%% Pubsub constants
+-define(ERR_EXTENDED(E, C),
+ mod_pubsub:extended_error(E, C)).
+
+%% The actual limit can be configured with mod_pubsub's option max_items_node
+-define(MAXITEMS, 10).
+
+%% this is currently a hard limit.
+%% Would be nice to have it configurable.
+-define(MAX_PAYLOAD_SIZE, 60000).
+
+%% -------------------------------
+%% Pubsub types
+
+%% @type hostPubsub() = string().
+-type(hostPubsub() :: binary()).
+%% <p><tt>hostPubsub</tt> is the name of the PubSub service. For example, it can be
+%% <tt>"pubsub.localhost"</tt>.</p>
+
+-type(hostPEP() :: {binary(), binary(), <<>>}).
+%% @type hostPEP() = {User, Server, Resource}
+%% User = string()
+%% Server = string()
+%% Resource = [].
+%% <p>For example, it can be :
+%% ```{"bob", "example.org", []}'''.</p>
+
+-type(host() :: hostPubsub() | hostPEP()).
+%% @type host() = hostPubsub() | hostPEP().
+
+-type(nodeId() :: binary()).
+%% @type nodeId() = binary().
+%% <p>A node is defined by a list of its ancestors. The last element is the name
+%% of the current node. For example:
+%% of the current node. For example:
+%% ```<<"/home/localhost/user">>'''</p>
+
+-type(nodeIdx() :: pos_integer()).
+%% @type nodeIdx() = integer().
+
+-type(itemId() :: binary()).
+%% @type itemId() = string().
+
+-type(subId() :: binary()).
+%% @type subId() = string().
+
+
+%% @type payload() = [#xmlelement{} | #xmlcdata{}].
+
+%% @type stanzaError() = #xmlelement{}.
+%% Example:
+%% Example:
+%% ```{xmlelement, "error",
+%% [{"code", Code}, {"type", Type}],
+%% [{xmlelement, Condition, [{"xmlns", ?NS_STANZAS}], []}]}'''
+%% @type pubsubIQResponse() = #xmlelement{}.
+%% Example:
+%% ```{xmlelement, "pubsub",
+%% [{"xmlns", ?NS_PUBSUB_EVENT}],
+%% [{xmlelement, "affiliations", [],
+%% []}]}'''
+
+-type(nodeOption() ::
+ {Option::atom(),
+ Value::binary() | [binary()] | boolean() | non_neg_integer()
+}).
+
+-type(nodeOptions() :: [NodeOption::mod_pubsub:nodeOption(),...]).
+
+%% @type nodeOption() = {Option, Value}
+%% Option = atom()
+%% Value = term().
+%% Example:
+%% ```{deliver_payloads, true}'''
+
+-type(subOption() ::
+ {Option::atom(),
+ Value::binary() | [binary()] | boolean()
+}).
+
+-type(subOptions() :: [SubOption::mod_pubsub:subOption(),...]).
+
+%% @type nodeType() = string().
+%% <p>The <tt>nodeType</tt> is a string containing the name of the PubSub
+%% plugin to use to manage a given node. For example, it can be
+%% <tt>"flat"</tt>, <tt>"hometree"</tt> or <tt>"blog"</tt>.</p>
+
+%% @type jid() = {jid, User, Server, Resource, LUser, LServer, LResource}
+%% User = string()
+%% Server = string()
+%% Resource = string()
+%% LUser = string()
+%% LServer = string()
+%% LResource = string().
+
+%-type(ljid() :: {binary(), binary(), binary()}).
+%% @type ljid() = {User, Server, Resource}
+%% User = string()
+%% Server = string()
+%% Resource = string().
+
+-type(affiliation() :: 'none'
+ | 'owner'
+ | 'publisher'
+ %| 'publish-only'
+ | 'member'
+ | 'outcast'
+).
+%% @type affiliation() = 'none' | 'owner' | 'publisher' | 'publish-only' | 'member' | 'outcast'.
+
+-type(subscription() :: 'none'
+ | 'pending'
+ | 'unconfigured'
+ | 'subscribed'
+).
+%% @type subscription() = 'none' | 'pending' | 'unconfigured' | 'subscribed'.
+
+-type(accessModel() :: 'open'
+ | 'presence'
+ | 'roster'
+ | 'authorize'
+ | 'whitelist'
+).
+%% @type accessModel() = 'open' | 'presence' | 'roster' | 'authorize' | 'whitelist'.
+
+%% @type pubsubIndex() = {pubsub_index, Index, Last, Free}
+%% Index = atom()
+%% Last = integer()
+%% Free = [integer()].
+%% internal pubsub index table
+-type(publishModel() :: 'publishers'
+ | 'subscribers'
+ | 'open'
+).
+
+
+-record(pubsub_index,
+{
+ index :: atom(),
+ last :: mod_pubsub:nodeIdx(),
+ free :: [mod_pubsub:nodeIdx()]
+}).
+
+%% @type pubsubNode() = {pubsub_node, NodeId, Id, Parents, Type, Owners, Options}
+%% NodeId = {host() | ljid(), nodeId()}
+%% Id = nodeIdx()
+%% Parents = [nodeId()]
+%% Type = nodeType()
+%% Owners = [ljid()]
+%% Options = [nodeOption()].
+%% <p>This is the format of the <tt>nodes</tt> table. The type of the table
+%% is: <tt>set</tt>,<tt>ram/disc</tt>.</p>
+%% <p>The <tt>Parents</tt> and <tt>type</tt> fields are indexed.</p>
+%% <tt>id</tt> can be anything you want.
+-record(pubsub_node,
+{
+ nodeid ,%:: {Host::mod_pubsub:host(), NodeId::mod_pubsub:nodeId()},
+ id ,%:: mod_pubsub:nodeIdx(),
+ parents = [] ,%:: [Parent_NodeId::mod_pubsub:nodeId()],
+ type = <<"flat">> ,%:: binary(),
+ owners = [] ,%:: [Owner::ljid(),...],
+ options = [] %:: mod_pubsub:nodeOptions()
+}).
+
+%% @type pubsubState() = {pubsub_state, StateId, Items, Affiliation, Subscriptions}
+%% StateId = {ljid(), nodeIdx()}
+%% Items = [itemId()]
+%% Affiliation = affiliation()
+%% Subscriptions = [{subscription(), subId()}].
+%% <p>This is the format of the <tt>affiliations</tt> table. The type of the
+%% table is: <tt>set</tt>,<tt>ram/disc</tt>.</p>
+
+%-record(pubsub_state,
+% {stateid, items = [], affiliation = none,
+% subscriptions = []}).
+-record(pubsub_state,
+{
+ stateid ,%:: {Entity::ljid(), NodeIdx::mod_pubsub:nodeIdx()},
+ items = [] ,%:: [ItemId::mod_pubsub:itemId()],
+ affiliation = 'none' ,%:: mod_pubsub:affiliation(),
+ subscriptions = [] %:: [{mod_pubsub:subscription(), mod_pubsub:subId()}]
+}).
+
+%% @type pubsubItem() = {pubsub_item, ItemId, Creation, Modification, Payload}
+%% ItemId = {itemId(), nodeIdx()}
+%% Creation = {now(), ljid()}
+%% Modification = {now(), ljid()}
+%% Payload = payload().
+%% <p>This is the format of the <tt>published items</tt> table. The type of the
+%% table is: <tt>set</tt>,<tt>disc</tt>,<tt>fragmented</tt>.</p>
+%-record(pubsub_item,
+% {itemid, creation = {unknown, unknown},
+% modification = {unknown, unknown}, payload = []}).
+
+-record(pubsub_item,
+{
+ itemid ,%:: {mod_pubsub:itemId(), mod_pubsub:nodeIdx()},
+ creation = {unknown, unknown} ,%:: {erlang:timestamp(), ljid()},
+ modification = {unknown, unknown} ,%:: {erlang:timestamp(), ljid()},
+ payload = [] %:: mod_pubsub:payload()
+}).
+
+%% @type pubsubSubscription() = {pubsub_subscription, SubId, Options}
+%% SubId = subId()
+%% Options = [nodeOption()].
+%% <p>This is the format of the <tt>subscriptions</tt> table. The type of the
+%% table is: <tt>set</tt>,<tt>ram/disc</tt>.</p>
+%-record(pubsub_subscription, {subid, options}).
+-record(pubsub_subscription,
+{
+ subid ,%:: mod_pubsub:subId(),
+ options %:: [] | mod_pubsub:subOptions()
+}).
+
+%% @type pubsubLastItem() = {pubsub_last_item, NodeId, ItemId, Creation, Payload}
+%% NodeId = nodeIdx()
+%% ItemId = itemId()
+%% Creation = {now(),ljid()}
+%% Payload = payload().
+%% <p>This is the format of the <tt>last items</tt> table. it stores last item payload
+%% for every node</p>
+%-record(pubsub_last_item,
+% {nodeid, itemid, creation, payload}).
+
+-record(pubsub_last_item,
+{
+ nodeid ,%:: mod_pubsub:nodeIdx(),
+ itemid ,%:: mod_pubsub:itemId(),
+ creation ,%:: {erlang:timestamp(), ljid()},
+ payload %:: mod_pubsub:payload()
+}).