%%% ==================================================================== %%% ``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-2009, ProcessOne %%% All Rights Reserved.'' %%% This software is copyright 2006-2009, ProcessOne. %%% %%% %%% copyright 2006-2009 ProcessOne %%% %%% This file contains pubsub types definition. %%% ==================================================================== %% ------------------------------- %% Pubsub constants -define(ERR_EXTENDED(E,C), mod_pubsub:extended_error(E,C)). %% this is currently a hard limit. %% Would be nice to have it configurable. -define(MAXITEMS, 20). -define(MAX_PAYLOAD_SIZE, 60000). %% ------------------------------- %% Pubsub types %%% @type host() = string(). %%%

host is the name of the PubSub service. For example, it can be %%% "pubsub.localhost".

%%% @type pubsubNode() = [string()]. %%%

A node is defined by a list of its ancestors. The last element is the name %%% of the current node. For example: %%% ```["home", "localhost", "cromain", "node1"]'''

%%% @type stanzaError() = #xmlelement{}. %%% 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::term()}. %%% Example: %%% ```{deliver_payloads, true}''' %%% @type nodeType() = string(). %%%

The nodeType is a string containing the name of the PubSub %%% plugin to use to manage a given node. For example, it can be %%% "flat", "hometree" or "blog".

%%% @type jid() = #jid{ %%% user = string(), %%% server = string(), %%% resource = string(), %%% luser = string(), %%% lserver = string(), %%% lresource = string()}. %%% @type ljid() = {User::string(), Server::string(), Resource::string()}. %%% @type affiliation() = none | owner | publisher | outcast. %%% @type subscription() = none | pending | unconfigured | subscribed. %%% internal pubsub index table -record(pubsub_index, {index, last, free}). %%% @type pubsubNode() = #pubsub_node{ %%% nodeid = {Host::host(), Node::pubsubNode()}, %%% parentid = Node::pubsubNode(), %%% nodeidx = int(), %%% type = nodeType(), %%% options = [nodeOption()]}. %%%

This is the format of the nodes table. The type of the table %%% is: set,ram/disc.

%%%

The parentid and type fields are indexed.

%%% nodeidx can be anything you want. -record(pubsub_node, {nodeid, id, parents = [], type = "flat", owners = [], options = [] }). %%% @type pubsubState() = #pubsub_state{ %%% stateid = {ljid(), nodeidx()}, %%% items = [ItemId::string()], %%% affiliation = affiliation(), %%% subscriptions = [subscription()]}. %%%

This is the format of the affiliations table. The type of the %%% table is: set,ram/disc.

-record(pubsub_state, {stateid, items = [], affiliation = none, subscriptions = [] }). %%% @type pubsubItem() = #pubsub_item{ %%% itemid = {ItemId::string(), nodeidx()}, %%% creation = {now(), ljid()}, %%% modification = {now(), ljid()}, %%% payload = XMLContent::string()}. %%%

This is the format of the published items table. The type of the %%% table is: set,disc,fragmented.

-record(pubsub_item, {itemid, creation = {unknown,unknown}, modification = {unknown,unknown}, payload = [] }). %% @type pubsubSubscription() = #pubsub_subscription{ %% subid = string(), %% state_key = {ljid(), pubsubNodeId()}, %% options = [{atom(), term()}] %% }. %%

This is the format of the subscriptions table. The type of the %% table is: set,ram/disc.

-record(pubsub_subscription, {subid, options}).