diff options
Diffstat (limited to 'Swiften/Client/ClientBlockListManager.cpp')
| -rw-r--r-- | Swiften/Client/ClientBlockListManager.cpp | 187 | 
1 files changed, 98 insertions, 89 deletions
| diff --git a/Swiften/Client/ClientBlockListManager.cpp b/Swiften/Client/ClientBlockListManager.cpp index 6646a5c..bfdec30 100644 --- a/Swiften/Client/ClientBlockListManager.cpp +++ b/Swiften/Client/ClientBlockListManager.cpp @@ -1,68 +1,69 @@  /* - * Copyright (c) 2011 Remko Tronçon - * Licensed under the GNU General Public License v3. - * See Documentation/Licenses/GPLv3.txt for more information. + * Copyright (c) 2011-2016 Isode Limited. + * All rights reserved. + * See the COPYING file for more information.   */  #include <Swiften/Client/ClientBlockListManager.h> -#include <boost/bind.hpp> -#include <boost/smart_ptr/make_shared.hpp>  #include <cassert> +#include <memory> + +#include <boost/bind.hpp>  #include <Swiften/Client/BlockListImpl.h>  using namespace Swift;  namespace { -	class BlockResponder : public SetResponder<BlockPayload> { -		public: -			BlockResponder(boost::shared_ptr<BlockListImpl> blockList, IQRouter* iqRouter) : SetResponder<BlockPayload>(iqRouter), blockList(blockList) { -			} - -			virtual bool handleSetRequest(const JID& from, const JID&, const std::string& id, boost::shared_ptr<BlockPayload> payload) { -				if (getIQRouter()->isAccountJID(from)) { -						if (payload) { -							blockList->addItems(payload->getItems()); -						} -						sendResponse(from, id, boost::shared_ptr<BlockPayload>()); -				} -				else { -					sendError(from, id, ErrorPayload::NotAuthorized, ErrorPayload::Cancel); -				} -				return true; -			} - -		private: -			boost::shared_ptr<BlockListImpl> blockList; -	}; - -	class UnblockResponder : public SetResponder<UnblockPayload> { -		public: -			UnblockResponder(boost::shared_ptr<BlockListImpl> blockList, IQRouter* iqRouter) : SetResponder<UnblockPayload>(iqRouter), blockList(blockList) { -			} - -			virtual bool handleSetRequest(const JID& from, const JID&, const std::string& id, boost::shared_ptr<UnblockPayload> payload) { -				if (getIQRouter()->isAccountJID(from)) { -					if (payload) { -						if (payload->getItems().empty()) { -							blockList->removeAllItems(); -						} -						else { -							blockList->removeItems(payload->getItems()); -						} -					} -					sendResponse(from, id, boost::shared_ptr<UnblockPayload>()); -				} -				else { -					sendError(from, id, ErrorPayload::NotAuthorized, ErrorPayload::Cancel); -				} -				return true; -			} - -		private: -			boost::shared_ptr<BlockListImpl> blockList; -	}; +    class BlockResponder : public SetResponder<BlockPayload> { +        public: +            BlockResponder(std::shared_ptr<BlockListImpl> blockList, IQRouter* iqRouter) : SetResponder<BlockPayload>(iqRouter), blockList(blockList) { +            } + +            virtual bool handleSetRequest(const JID& from, const JID&, const std::string& id, std::shared_ptr<BlockPayload> payload) { +                if (getIQRouter()->isAccountJID(from)) { +                        if (payload) { +                            blockList->addItems(payload->getItems()); +                        } +                        sendResponse(from, id, std::shared_ptr<BlockPayload>()); +                } +                else { +                    sendError(from, id, ErrorPayload::NotAuthorized, ErrorPayload::Cancel); +                } +                return true; +            } + +        private: +            std::shared_ptr<BlockListImpl> blockList; +    }; + +    class UnblockResponder : public SetResponder<UnblockPayload> { +        public: +            UnblockResponder(std::shared_ptr<BlockListImpl> blockList, IQRouter* iqRouter) : SetResponder<UnblockPayload>(iqRouter), blockList(blockList) { +            } + +            virtual bool handleSetRequest(const JID& from, const JID&, const std::string& id, std::shared_ptr<UnblockPayload> payload) { +                if (getIQRouter()->isAccountJID(from)) { +                    if (payload) { +                        if (payload->getItems().empty()) { +                            blockList->removeAllItems(); +                        } +                        else { +                            blockList->removeItems(payload->getItems()); +                        } +                    } +                    sendResponse(from, id, std::shared_ptr<UnblockPayload>()); +                } +                else { +                    sendError(from, id, ErrorPayload::NotAuthorized, ErrorPayload::Cancel); +                } +                return true; +            } + +        private: +            std::shared_ptr<BlockListImpl> blockList; +    };  }  ClientBlockListManager::ClientBlockListManager(IQRouter* iqRouter) : iqRouter(iqRouter) { @@ -70,61 +71,69 @@ ClientBlockListManager::ClientBlockListManager(IQRouter* iqRouter) : iqRouter(iq  }  ClientBlockListManager::~ClientBlockListManager() { -	if (blockList && blockList->getState() == BlockList::Available) { -		unblockResponder->stop(); -		blockResponder->stop(); -	} -	if (getRequest) { -		getRequest->onResponse.disconnect(boost::bind(&ClientBlockListManager::handleBlockListReceived, this, _1, _2)); -	} +    if (blockList && blockList->getState() == BlockList::Available) { +        unblockResponder->stop(); +        blockResponder->stop(); +    } +} + +std::shared_ptr<BlockList> ClientBlockListManager::getBlockList() { +    if (!blockList) { +        blockList = std::make_shared<BlockListImpl>(); +        blockList->setState(BlockList::Init); +    } +    return blockList;  } -boost::shared_ptr<BlockList> ClientBlockListManager::getBlockList() { -	if (!blockList) { -		blockList = boost::make_shared<BlockListImpl>(); -		blockList->setState(BlockList::Requesting); -		assert(!getRequest); -		getRequest = boost::make_shared< GenericRequest<BlockListPayload> >(IQ::Get, JID(), boost::make_shared<BlockListPayload>(), iqRouter); -		getRequest->onResponse.connect(boost::bind(&ClientBlockListManager::handleBlockListReceived, this, _1, _2)); -		getRequest->send(); -	} -	return blockList; +std::shared_ptr<BlockList> ClientBlockListManager::requestBlockList() { +    if (!blockList) { +        blockList = std::make_shared<BlockListImpl>(); +    } +    blockList->setState(BlockList::Requesting); +    std::shared_ptr<GenericRequest<BlockListPayload> > getRequest = std::make_shared< GenericRequest<BlockListPayload> >(IQ::Get, JID(), std::make_shared<BlockListPayload>(), iqRouter); +    getRequest->onResponse.connect(boost::bind(&ClientBlockListManager::handleBlockListReceived, this, _1, _2)); +    getRequest->send(); +    return blockList;  }  GenericRequest<BlockPayload>::ref ClientBlockListManager::createBlockJIDRequest(const JID& jid) { -	return createBlockJIDsRequest(std::vector<JID>(1, jid)); +    return createBlockJIDsRequest(std::vector<JID>(1, jid));  }  GenericRequest<BlockPayload>::ref ClientBlockListManager::createBlockJIDsRequest(const std::vector<JID>& jids) { -	boost::shared_ptr<BlockPayload> payload = boost::make_shared<BlockPayload>(jids); -	return boost::make_shared< GenericRequest<BlockPayload> >(IQ::Set, JID(), payload, iqRouter); +    std::shared_ptr<BlockPayload> payload = std::make_shared<BlockPayload>(jids); +    return std::make_shared< GenericRequest<BlockPayload> >(IQ::Set, JID(), payload, iqRouter);  }  GenericRequest<UnblockPayload>::ref ClientBlockListManager::createUnblockJIDRequest(const JID& jid) { -	return createUnblockJIDsRequest(std::vector<JID>(1, jid)); +    return createUnblockJIDsRequest(std::vector<JID>(1, jid));  }  GenericRequest<UnblockPayload>::ref ClientBlockListManager::createUnblockJIDsRequest(const std::vector<JID>& jids) { -	boost::shared_ptr<UnblockPayload> payload = boost::make_shared<UnblockPayload>(jids); -	return boost::make_shared< GenericRequest<UnblockPayload> >(IQ::Set, JID(), payload, iqRouter); +    std::shared_ptr<UnblockPayload> payload = std::make_shared<UnblockPayload>(jids); +    return std::make_shared< GenericRequest<UnblockPayload> >(IQ::Set, JID(), payload, iqRouter);  }  GenericRequest<UnblockPayload>::ref ClientBlockListManager::createUnblockAllRequest() { -	return createUnblockJIDsRequest(std::vector<JID>()); +    return createUnblockJIDsRequest(std::vector<JID>());  } -void ClientBlockListManager::handleBlockListReceived(boost::shared_ptr<BlockListPayload> payload, ErrorPayload::ref error) { -	if (error || !payload) { -		blockList->setState(BlockList::Error); -	} -	else { -		blockList->setItems(payload->getItems()); -		blockList->setState(BlockList::Available); -		blockResponder = boost::make_shared<BlockResponder>(blockList, iqRouter); -		blockResponder->start(); -		unblockResponder = boost::make_shared<UnblockResponder>(blockList, iqRouter); -		unblockResponder->start(); -	} +void ClientBlockListManager::handleBlockListReceived(std::shared_ptr<BlockListPayload> payload, ErrorPayload::ref error) { +    if (error || !payload) { +        blockList->setState(BlockList::Error); +    } +    else { +        blockList->setItems(payload->getItems()); +        blockList->setState(BlockList::Available); +        if (!blockResponder) { +            blockResponder = std::make_shared<BlockResponder>(blockList, iqRouter); +            blockResponder->start(); +        } +        if (!unblockResponder) { +            unblockResponder = std::make_shared<UnblockResponder>(blockList, iqRouter); +            unblockResponder->start(); +        } +    }  } | 
 Swift
 Swift