Changeset - 6ca2c3a931e0
[Not reviewed]
0 1 20
HanzZ - 13 years ago 2012-02-22 08:38:45
hanzz.k@gmail.com
pubsub payloads/serializers
21 files changed with 608 insertions and 8 deletions:
0 comments (0 inline, 0 general)
include/Swiften/Elements/PubSubItem.cpp
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#include <Swiften/Elements/PubSubItem.h>
 

	
 
namespace Swift {
 

	
 
PubSubItem::PubSubItem(const std::string &body) : body_(body) {
 
}
 

	
 
}
include/Swiften/Elements/PubSubItem.h
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#pragma once
 

	
 
#include <vector>
 

	
 
#include <string>
 
#include <Swiften/Elements/Payload.h>
 

	
 
namespace Swift {
 
	class PubSubItem : public Payload {
 
		public:
 
			PubSubItem(const std::string &body = "");
 

	
 
			const std::string& getData() const { return body_; }
 

	
 
			void setData(const std::string& body) { 
 
				body_ = body;
 
			}
 

	
 
			const std::string& getId() const { return id; }
 

	
 
			void setId(const std::string& id) { 
 
				this->id = id;
 
			}
 

	
 
		private:
 
			std::string body_;
 
			std::string id;
 
	};
 
}
include/Swiften/Elements/PubSubPayload.cpp
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#include <Swiften/Elements/PubSubPayload.h>
 

	
 
namespace Swift {
 

	
 
PubSubPayload::PubSubPayload() {
 
}
 

	
 
}
include/Swiften/Elements/PubSubPayload.h
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2012 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#pragma once
 

	
 
#include <vector>
 

	
 
#include <string>
 
#include <Swiften/Elements/Payload.h>
 

	
 
namespace Swift {
 
	class PubSubPayload : public Payload {
 
		public:
 
			PubSubPayload();
 

	
 
			const std::vector<boost::shared_ptr<Payload> > getPayloads() const {
 
				return payloads;
 
			}
 
			
 
			template<typename T>
 
			const std::vector<boost::shared_ptr<T> > getPayloads() const {
 
				std::vector<boost::shared_ptr<T> > matched_payloads;
 
				for (std::vector<boost::shared_ptr<Payload> >::const_iterator i = payloads.begin(); i != payloads.end(); ++i) {
 
					boost::shared_ptr<T> result = boost::dynamic_pointer_cast<T>(*i);
 
					if (result) {
 
						matched_payloads.push_back(result);
 
					}
 
				}
 
				
 
				return matched_payloads;
 
				
 
			}
 

	
 
			template<typename T>
 
			const boost::shared_ptr<T> getPayload() const {
 
				boost::shared_ptr<T> result;
 
				for (std::vector<boost::shared_ptr<Payload> >::const_iterator i = payloads.begin(); i != payloads.end(); ++i) {
 
					result = boost::dynamic_pointer_cast<T>(*i);
 
					if (result) {
 
						return result;
 
					}
 
				}
 
				
 
				return result;
 
			}
 

	
 
		private:
 
			std::vector<boost::shared_ptr<Payload> > payloads;
 
	};
 
}
include/Swiften/Elements/PubSubPublishPayload.cpp
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#include <Swiften/Elements/PubSubPublishPayload.h>
 

	
 
namespace Swift {
 

	
 
PubSubPublishPayload::PubSubPublishPayload(const std::string &node) :
 
	node(node) {
 
		
 
	}
 

	
 
}
include/Swiften/Elements/PubSubPublishPayload.h
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#pragma once
 

	
 
#include <vector>
 

	
 
#include <string>
 
#include <Swiften/Elements/Payload.h>
 
#include <Swiften/Elements/PubSubItem.h>
 
#include <Swiften/JID/JID.h>
 

	
 
namespace Swift {
 
	class PubSubPublishPayload : public Payload {
 
		public:
 
			enum Type { None, Pending, Subscribed, Unconfigured };
 

	
 
			PubSubPublishPayload(const std::string &node = "");
 

	
 
			void setNode(const std::string &node) {
 
				this->node = node;
 
			}
 

	
 
			const std::string &getNode() const {
 
				return node;
 
			}
 

	
 
			void addItem(const boost::shared_ptr<PubSubItem> &item) {
 
				items.push_back(item);
 
			}
 

	
 
			const std::vector<boost::shared_ptr<PubSubItem> > &getItems() const {
 
				return items;
 
			}
 

	
 
		private:
 
			std::string node;
 
			std::vector<boost::shared_ptr<PubSubItem> > items;
 
	};
 
}
include/Swiften/Elements/PubSubSubscribePayload.cpp
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#include <Swiften/Elements/PubSubSubscribePayload.h>
 

	
 
namespace Swift {
 

	
 
PubSubSubscribePayload::PubSubSubscribePayload(const JID &jid, const std::string &node) :
 
	jid(jid), node(node) {
 
		
 
	}
 

	
 
}
include/Swiften/Elements/PubSubSubscribePayload.h
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#pragma once
 

	
 
#include <vector>
 

	
 
#include <string>
 
#include <Swiften/Elements/Payload.h>
 
#include <Swiften/JID/JID.h>
 

	
 
namespace Swift {
 
	class PubSubSubscribePayload : public Payload {
 
		public:
 
			PubSubSubscribePayload(const JID &jid, const std::string &node = "");
 

	
 
			void setJID(const JID &jid) {
 
				this->jid = jid;
 
			}
 

	
 
			const JID &getJID() const {
 
				return jid;
 
			}
 

	
 
			void setNode(const std::string &node) {
 
				this->node = node;
 
			}
 

	
 
			const std::string &getNode() const {
 
				return node;
 
			}
 

	
 
		private:
 
			JID jid;
 
			std::string node;
 
	};
 
}
include/Swiften/Elements/PubSubSubscriptionPayload.cpp
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#include <Swiften/Elements/PubSubSubscriptionPayload.h>
 

	
 
namespace Swift {
 

	
 
PubSubSubscriptionPayload::PubSubSubscriptionPayload(const JID &jid, const std::string &node) :
 
	jid(jid), node(node), type(None) {
 
		
 
	}
 

	
 
}
include/Swiften/Elements/PubSubSubscriptionPayload.h
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#pragma once
 

	
 
#include <vector>
 

	
 
#include <string>
 
#include <Swiften/Elements/Payload.h>
 
#include <Swiften/JID/JID.h>
 

	
 
namespace Swift {
 
	class PubSubSubscriptionPayload : public Payload {
 
		public:
 
			enum Type { None, Pending, Subscribed, Unconfigured };
 

	
 
			PubSubSubscriptionPayload(const JID &jid, const std::string &node = "");
 

	
 
			void setJID(const JID &jid) {
 
				this->jid = jid;
 
			}
 

	
 
			const JID &getJID() const {
 
				return jid;
 
			}
 

	
 
			void setNode(const std::string &node) {
 
				this->node = node;
 
			}
 

	
 
			const std::string &getNode() const {
 
				return node;
 
			}
 

	
 
			void setId(const std::string &id) {
 
				this->id = id;
 
			}
 

	
 
			const std::string &getId() const {
 
				return id;
 
			}
 

	
 
			void setType(const Type &type) {
 
				this->type = type;
 
			}
 

	
 
			const Type &getType() const {
 
				return type;
 
			}
 

	
 
		private:
 
			JID jid;
 
			std::string node;
 
			std::string id;
 
			Type type;
 
	};
 
}
include/Swiften/Serializer/PayloadSerializers/PubSubItemSerializer.cpp
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#include <Swiften/Serializer/PayloadSerializers/PubSubItemSerializer.h>
 
#include <Swiften/Base/foreach.h>
 
#include <Swiften/Serializer/XML/XMLRawTextNode.h>
 
#include <Swiften/Serializer/XML/XMLTextNode.h>
 
#include <Swiften/Serializer/XML/XMLElement.h>
 

	
 
namespace Swift {
 

	
 
PubSubItemSerializer::PubSubItemSerializer() : GenericPayloadSerializer<PubSubItem>() {
 
}
 

	
 
std::string PubSubItemSerializer::serializePayload(boost::shared_ptr<PubSubItem> payload)  const {
 
	XMLElement item("item");
 
	if (!payload->getId().empty()) {
 
		item.setAttribute("id", payload->getId());
 
	}
 

	
 
	boost::shared_ptr<XMLElement> body(new XMLElement("body", "http://www.w3.org/1999/xhtml"));
 
	body->addNode(boost::shared_ptr<XMLRawTextNode>(new XMLRawTextNode(payload->getData())));
 
	item.addNode(body);
 

	
 
	return item.serialize();
 
}
 

	
 
}
include/Swiften/Serializer/PayloadSerializers/PubSubItemSerializer.h
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#pragma once
 

	
 
#include <Swiften/Serializer/GenericPayloadSerializer.h>
 
#include <Swiften/Elements/PubSubItem.h>
 

	
 
namespace Swift {
 
	class PubSubItemSerializer : public GenericPayloadSerializer<PubSubItem> {
 
		public:
 
			PubSubItemSerializer();
 

	
 
			virtual std::string serializePayload(boost::shared_ptr<PubSubItem> item)  const;
 
	};
 
}
include/Swiften/Serializer/PayloadSerializers/PubSubPayloadSerializer.cpp
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#include <Swiften/Serializer/PayloadSerializers/PubSubPayloadSerializer.h>
 
#include <Swiften/Base/foreach.h>
 
#include <Swiften/Serializer/XML/XMLRawTextNode.h>
 
#include <Swiften/Serializer/XML/XMLTextNode.h>
 
#include <Swiften/Serializer/XML/XMLElement.h>
 
#include <Swiften/Serializer/PayloadSerializerCollection.h>
 

	
 
namespace Swift {
 

	
 
PubSubPayloadSerializer::PubSubPayloadSerializer(PayloadSerializerCollection *serializers)
 
	: GenericPayloadSerializer<PubSubPayload>(),
 
	serializers(serializers) {
 
}
 

	
 
std::string PubSubPayloadSerializer::serializePayload(boost::shared_ptr<PubSubPayload> payload)  const {
 
	XMLElement pubsub("pubsub", "http://jabber.org/protocol/pubsub");
 

	
 
	if (!payload->getPayloads().empty()) {		
 
		foreach(boost::shared_ptr<Payload> subPayload, payload->getPayloads()) {
 
			PayloadSerializer* serializer = serializers->getPayloadSerializer(subPayload);
 
			if (serializer) {
 
				pubsub.addNode(boost::shared_ptr<XMLRawTextNode>(new XMLRawTextNode(serializer->serialize(subPayload))));
 
			}
 
		}
 
	}
 

	
 
	return pubsub.serialize();
 
}
 

	
 
}
include/Swiften/Serializer/PayloadSerializers/PubSubPayloadSerializer.h
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#pragma once
 

	
 
#include <Swiften/Serializer/GenericPayloadSerializer.h>
 
#include <Swiften/Elements/PubSubPayload.h>
 

	
 
namespace Swift {
 
	class PayloadSerializerCollection;
 

	
 
	class PubSubPayloadSerializer : public GenericPayloadSerializer<PubSubPayload> {
 
		public:
 
			PubSubPayloadSerializer(PayloadSerializerCollection *serializers);
 

	
 
			virtual std::string serializePayload(boost::shared_ptr<PubSubPayload> item)  const;
 
		private:
 
			PayloadSerializerCollection *serializers;
 
	};
 
}
include/Swiften/Serializer/PayloadSerializers/PubSubPublishPayloadSerializer.cpp
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#include <Swiften/Serializer/PayloadSerializers/PubSubPublishPayloadSerializer.h>
 
#include <Swiften/Base/foreach.h>
 
#include <Swiften/Serializer/XML/XMLRawTextNode.h>
 
#include <Swiften/Serializer/XML/XMLTextNode.h>
 
#include <Swiften/Serializer/XML/XMLElement.h>
 
#include <Swiften/Serializer/PayloadSerializerCollection.h>
 

	
 
namespace Swift {
 

	
 
PubSubPublishPayloadSerializer::PubSubPublishPayloadSerializer(PayloadSerializerCollection *serializers)
 
	: GenericPayloadSerializer<PubSubPublishPayload>(),
 
	serializers(serializers) {
 
}
 

	
 
std::string PubSubPublishPayloadSerializer::serializePayload(boost::shared_ptr<PubSubPublishPayload> payload)  const {
 
	XMLElement publish("publish");
 

	
 
	if (!payload->getNode().empty()) {
 
		publish.setAttribute("node", payload->getNode());
 
	}
 

	
 
	if (!payload->getItems().empty()) {		
 
		foreach(boost::shared_ptr<PubSubItem> subPayload, payload->getItems()) {
 
			PayloadSerializer* serializer = serializers->getPayloadSerializer(subPayload);
 
			if (serializer) {
 
				publish.addNode(boost::shared_ptr<XMLRawTextNode>(new XMLRawTextNode(serializer->serialize(subPayload))));
 
			}
 
		}
 
	}
 

	
 
	return publish.serialize();
 
}
 

	
 
}
include/Swiften/Serializer/PayloadSerializers/PubSubPublishPayloadSerializer.h
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#pragma once
 

	
 
#include <Swiften/Serializer/GenericPayloadSerializer.h>
 
#include <Swiften/Elements/PubSubPublishPayload.h>
 

	
 
namespace Swift {
 
	class PayloadSerializerCollection;
 

	
 
	class PubSubPublishPayloadSerializer : public GenericPayloadSerializer<PubSubPublishPayload> {
 
		public:
 
			PubSubPublishPayloadSerializer(PayloadSerializerCollection *serializers);
 

	
 
			virtual std::string serializePayload(boost::shared_ptr<PubSubPublishPayload> item)  const;
 
		private:
 
			PayloadSerializerCollection *serializers;
 
	};
 
}
include/Swiften/Serializer/PayloadSerializers/PubSubSubscribePayloadSerializer.cpp
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#include <Swiften/Serializer/PayloadSerializers/PubSubSubscribePayloadSerializer.h>
 
#include <Swiften/Base/foreach.h>
 
#include <Swiften/Serializer/XML/XMLRawTextNode.h>
 
#include <Swiften/Serializer/XML/XMLTextNode.h>
 
#include <Swiften/Serializer/XML/XMLElement.h>
 
#include <Swiften/Serializer/PayloadSerializerCollection.h>
 

	
 
namespace Swift {
 

	
 
PubSubSubscribePayloadSerializer::PubSubSubscribePayloadSerializer()
 
	: GenericPayloadSerializer<PubSubSubscribePayload>() {
 
}
 

	
 
std::string PubSubSubscribePayloadSerializer::serializePayload(boost::shared_ptr<PubSubSubscribePayload> payload)  const {
 
	XMLElement subscribe("subscribe");
 

	
 
	if (!payload->getJID().isValid()) {
 
		subscribe.setAttribute("jid", payload->getJID().toBare().toString());
 
	}
 

	
 
	if (!payload->getNode().empty()) {
 
		subscribe.setAttribute("node", payload->getNode());
 
	}
 

	
 
	return subscribe.serialize();
 
}
 

	
 
}
include/Swiften/Serializer/PayloadSerializers/PubSubSubscribePayloadSerializer.h
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#pragma once
 

	
 
#include <Swiften/Serializer/GenericPayloadSerializer.h>
 
#include <Swiften/Elements/PubSubSubscribePayload.h>
 

	
 
namespace Swift {
 
	class PubSubSubscribePayloadSerializer : public GenericPayloadSerializer<PubSubSubscribePayload> {
 
		public:
 
			PubSubSubscribePayloadSerializer();
 

	
 
			virtual std::string serializePayload(boost::shared_ptr<PubSubSubscribePayload> item)  const;
 
	};
 
}
include/Swiften/Serializer/PayloadSerializers/PubSubSubscriptionPayloadSerializer.cpp
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#include <Swiften/Serializer/PayloadSerializers/PubSubSubscriptionPayloadSerializer.h>
 
#include <Swiften/Base/foreach.h>
 
#include <Swiften/Serializer/XML/XMLRawTextNode.h>
 
#include <Swiften/Serializer/XML/XMLTextNode.h>
 
#include <Swiften/Serializer/XML/XMLElement.h>
 
#include <Swiften/Serializer/PayloadSerializerCollection.h>
 

	
 
namespace Swift {
 

	
 
PubSubSubscriptionPayloadSerializer::PubSubSubscriptionPayloadSerializer()
 
	: GenericPayloadSerializer<PubSubSubscriptionPayload>() {
 
}
 

	
 
std::string PubSubSubscriptionPayloadSerializer::serializePayload(boost::shared_ptr<PubSubSubscriptionPayload> payload)  const {
 
	XMLElement subscription("subscription");
 

	
 
	if (!payload->getJID().isValid()) {
 
		subscription.setAttribute("jid", payload->getJID().toBare().toString());
 
	}
 

	
 
	if (!payload->getNode().empty()) {
 
		subscription.setAttribute("node", payload->getNode());
 
	}
 

	
 
	switch (payload->getType()) {
 
		case PubSubSubscriptionPayload::None:
 
			subscription.setAttribute("subscription", "none");
 
			break;
 
		case PubSubSubscriptionPayload::Subscribed:
 
			subscription.setAttribute("subscription", "subscribed");
 
			break;
 
		case PubSubSubscriptionPayload::Unconfigured:
 
			subscription.setAttribute("subscription", "unconfigured");
 
			break;
 
		case PubSubSubscriptionPayload::Pending:
 
			subscription.setAttribute("subscription", "pending");
 
			break;
 
	}
 

	
 
	return subscription.serialize();
 
}
 

	
 
}
include/Swiften/Serializer/PayloadSerializers/PubSubSubscriptionPayloadSerializer.h
Show inline comments
 
new file 100644
 
/*
 
 * Copyright (c) 2011 Jan Kaluza
 
 * Licensed under the Simplified BSD license.
 
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 
 */
 

	
 
#pragma once
 

	
 
#include <Swiften/Serializer/GenericPayloadSerializer.h>
 
#include <Swiften/Elements/PubSubSubscriptionPayload.h>
 

	
 
namespace Swift {
 
	class PubSubSubscriptionPayloadSerializer : public GenericPayloadSerializer<PubSubSubscriptionPayload> {
 
		public:
 
			PubSubSubscriptionPayloadSerializer();
 

	
 
			virtual std::string serializePayload(boost::shared_ptr<PubSubSubscriptionPayload> item)  const;
 
	};
 
}
spectrum/src/sample.cfg
Show inline comments
 
@@ -33,12 +33,12 @@ incoming_dir=/var/spool/sms/incoming
 
#backend_config=/home/hanzz/code/libtransport/spectrum/src/backend-logging.cfg # log4cxx/log4j logging configuration file for backends
 

	
 
[database]
 
#type = sqlite3 # or "none" without database backend
 
#database = test.sql
 
#prefix=icq
 
type = mysql # or "none" without database backend.......................................................................................................................
 
database = test
 
prefix=
 
user=root
 
password=yourrootsqlpassword
 
type = sqlite3 # or "none" without database backend
 
database = test.sql
 
prefix=icq
 
#type = mysql # or "none" without database backend.......................................................................................................................
 
#database = test
 
#prefix=
 
#user=root
 
#password=yourrootsqlpassword
 
#encryption_key=hanzzik
0 comments (0 inline, 0 general)