summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/StreamStack/StreamStack.h')
-rw-r--r--Swiften/StreamStack/StreamStack.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/Swiften/StreamStack/StreamStack.h b/Swiften/StreamStack/StreamStack.h
new file mode 100644
index 0000000..bc2e89b
--- /dev/null
+++ b/Swiften/StreamStack/StreamStack.h
@@ -0,0 +1,45 @@
+#ifndef SWIFTEN_STREAMSTACK_H
+#define SWIFTEN_STREAMSTACK_H
+
+#include <boost/shared_ptr.hpp>
+#include <boost/signal.hpp>
+#include <vector>
+
+#include "Swiften/Elements/Stanza.h"
+#include "Swiften/Base/foreach.h"
+
+namespace Swift {
+ class XMPPLayer;
+ class LowLayer;
+ class StreamLayer;
+
+ class StreamStack {
+ public:
+ StreamStack(XMPPLayer* xmppLayer, LowLayer* physicalLayer);
+
+ void addLayer(StreamLayer*);
+
+ XMPPLayer* getXMPPLayer() const {
+ return xmppLayer_;
+ }
+
+ template<typename T> T* getLayer() {
+ foreach(StreamLayer* streamLayer, layers_) {
+ T* layer = dynamic_cast<T*>(streamLayer);
+ if (layer) {
+ return layer;
+ }
+ }
+ return 0;
+ }
+
+ private:
+ XMPPLayer* xmppLayer_;
+ LowLayer* physicalLayer_;
+ std::vector<StreamLayer*> layers_;
+ boost::bsignals::connection xmppReadSlotConnection_;
+ boost::bsignals::connection xmppWriteSignalConnection_;
+ };
+}
+
+#endif