From fe74083e2e3ca3d91c6efab093f16540a2ca86b8 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Sat, 10 Dec 2011 15:44:43 +0100 Subject: [PATCH] Do not try to serialize something what is not Storage element --- include/transport/pqxxbackend.h | 4 +++- src/storageresponder.cpp | 18 +++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/include/transport/pqxxbackend.h b/include/transport/pqxxbackend.h index 77df7843..00581a2c 100644 --- a/include/transport/pqxxbackend.h +++ b/include/transport/pqxxbackend.h @@ -27,7 +27,7 @@ #include "Swiften/Swiften.h" #include "transport/storagebackend.h" #include "transport/config.h" -#include "mysql.h" +#include namespace Transport { @@ -99,6 +99,8 @@ class PQXXBackend : public StorageBackend bool exec(const std::string &query); Config *m_config; std::string m_prefix; + + pqxx::connection *m_conn; }; } diff --git a/src/storageresponder.cpp b/src/storageresponder.cpp index 84423593..b5f4e5aa 100644 --- a/src/storageresponder.cpp +++ b/src/storageresponder.cpp @@ -71,11 +71,19 @@ bool StorageResponder::handleSetRequest(const Swift::JID& from, const Swift::JID return true; } - StorageSerializer serializer; - std::string value = serializer.serializePayload(boost::dynamic_pointer_cast(payload->getPayload())); - m_storageBackend->updateUserSetting(user->getUserInfo().id, "storage", value); - LOG4CXX_INFO(logger, from.toBare().toString() << ": Storing jabber:iq:storage"); - sendResponse(from, id, boost::shared_ptr()); + boost::shared_ptr storage = boost::dynamic_pointer_cast(payload->getPayload()); + + if (storage) { + StorageSerializer serializer; + std::string value = serializer.serializePayload(boost::dynamic_pointer_cast(payload->getPayload())); + m_storageBackend->updateUserSetting(user->getUserInfo().id, "storage", value); + LOG4CXX_INFO(logger, from.toBare().toString() << ": Storing jabber:iq:storage"); + sendResponse(from, id, boost::shared_ptr()); + } + else { + LOG4CXX_INFO(logger, from.toBare().toString() << ": Unknown element. Libtransport does not support serialization of this."); + sendError(from, id, ErrorPayload::NotAcceptable, ErrorPayload::Cancel); + } return true; }