/* * Copyright (c) 2010 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #pragma once #include #include #include #include "Swiften/Elements/Stanza.h" #include "Swiften/Base/foreach.h" namespace Swift { class XMPPLayer; class LowLayer; class StreamLayer; class StreamStack { public: StreamStack(boost::shared_ptr xmppLayer, boost::shared_ptr physicalLayer); ~StreamStack(); void addLayer(boost::shared_ptr); boost::shared_ptr getXMPPLayer() const { return xmppLayer_; } template boost::shared_ptr getLayer() { foreach(const boost::shared_ptr& streamLayer, layers_) { boost::shared_ptr layer = boost::dynamic_pointer_cast(streamLayer); if (layer) { return layer; } } return boost::shared_ptr(); } private: boost::shared_ptr xmppLayer_; boost::shared_ptr physicalLayer_; std::vector< boost::shared_ptr > layers_; boost::bsignals::connection xmppReadSlotConnection_; boost::bsignals::connection xmppWriteSignalConnection_; std::vector< boost::bsignals::connection > writeSignalConnections_; }; }