summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Swiften/Session/BasicSessionStream.cpp32
-rw-r--r--Swiften/Session/BasicSessionStream.h5
-rw-r--r--Swiften/StreamStack/StreamStack.cpp16
-rw-r--r--Swiften/StreamStack/StreamStack.h12
-rw-r--r--Swiften/StreamStack/UnitTest/StreamStackTest.cpp30
5 files changed, 44 insertions, 51 deletions
diff --git a/Swiften/Session/BasicSessionStream.cpp b/Swiften/Session/BasicSessionStream.cpp
index 54cd225..183b986 100644
--- a/Swiften/Session/BasicSessionStream.cpp
+++ b/Swiften/Session/BasicSessionStream.cpp
@@ -36,5 +36,2 @@ BasicSessionStream::BasicSessionStream(
timerFactory(timerFactory),
- compressionLayer(nullptr),
- tlsLayer(nullptr),
- whitespacePingLayer(nullptr),
tlsOptions_(tlsOptions) {
@@ -57,10 +54,7 @@ BasicSessionStream::BasicSessionStream(
BasicSessionStream::~BasicSessionStream() {
- delete compressionLayer;
- if (tlsLayer) {
+ if (auto tlsLayer = streamStack->getLayer<TLSLayer>()) {
tlsLayer->onError.disconnect(boost::bind(&BasicSessionStream::handleTLSError, this, _1));
tlsLayer->onConnected.disconnect(boost::bind(&BasicSessionStream::handleTLSConnected, this));
- delete tlsLayer;
}
- delete whitespacePingLayer;
delete streamStack;
@@ -114,3 +108,3 @@ void BasicSessionStream::addTLSEncryption() {
auto tlsContext = tlsContextFactory->createTLSContext(tlsOptions_);
- tlsLayer = new TLSLayer(std::move(tlsContext));
+ auto tlsLayer = std::make_unique<TLSLayer>(std::move(tlsContext));
if (hasTLSCertificate() && !tlsLayer->setClientCertificate(getTLSCertificate())) {
@@ -119,3 +113,4 @@ void BasicSessionStream::addTLSEncryption() {
else {
- streamStack->addLayer(tlsLayer);
+ streamStack->addLayer(std::move(tlsLayer));
+ auto tlsLayer = streamStack->getLayer<TLSLayer>();
tlsLayer->onError.connect(boost::bind(&BasicSessionStream::handleTLSError, this, _1));
@@ -127,3 +122,3 @@ void BasicSessionStream::addTLSEncryption() {
bool BasicSessionStream::isTLSEncrypted() {
- return tlsLayer;
+ return streamStack->getLayer<TLSLayer>() != nullptr;
}
@@ -131,3 +126,3 @@ bool BasicSessionStream::isTLSEncrypted() {
Certificate::ref BasicSessionStream::getPeerCertificate() const {
- return tlsLayer->getPeerCertificate();
+ return streamStack->getLayer<TLSLayer>()->getPeerCertificate();
}
@@ -135,3 +130,3 @@ Certificate::ref BasicSessionStream::getPeerCertificate() const {
std::vector<Certificate::ref> BasicSessionStream::getPeerCertificateChain() const {
- return tlsLayer->getPeerCertificateChain();
+ return streamStack->getLayer<TLSLayer>()->getPeerCertificateChain();
}
@@ -139,3 +134,3 @@ std::vector<Certificate::ref> BasicSessionStream::getPeerCertificateChain() cons
std::shared_ptr<CertificateVerificationError> BasicSessionStream::getPeerCertificateVerificationError() const {
- return tlsLayer->getPeerCertificateVerificationError();
+ return streamStack->getLayer<TLSLayer>()->getPeerCertificateVerificationError();
}
@@ -143,3 +138,3 @@ std::shared_ptr<CertificateVerificationError> BasicSessionStream::getPeerCertifi
ByteArray BasicSessionStream::getTLSFinishMessage() const {
- return tlsLayer->getContext()->getFinishMessage();
+ return streamStack->getLayer<TLSLayer>()->getContext()->getFinishMessage();
}
@@ -151,4 +146,4 @@ bool BasicSessionStream::supportsZLibCompression() {
void BasicSessionStream::addZLibCompression() {
- compressionLayer = new CompressionLayer();
- streamStack->addLayer(compressionLayer);
+ auto compressionLayer = std::make_unique<CompressionLayer>();
+ streamStack->addLayer(std::move(compressionLayer));
}
@@ -156,6 +151,7 @@ void BasicSessionStream::addZLibCompression() {
void BasicSessionStream::setWhitespacePingEnabled(bool enabled) {
+ auto whitespacePingLayer = streamStack->getLayer<WhitespacePingLayer>();
if (enabled) {
if (!whitespacePingLayer) {
- whitespacePingLayer = new WhitespacePingLayer(timerFactory);
- streamStack->addLayer(whitespacePingLayer);
+ streamStack->addLayer(std::make_unique<WhitespacePingLayer>(timerFactory));
+ whitespacePingLayer = streamStack->getLayer<WhitespacePingLayer>();
}
diff --git a/Swiften/Session/BasicSessionStream.h b/Swiften/Session/BasicSessionStream.h
index 48b3d63..472b5cc 100644
--- a/Swiften/Session/BasicSessionStream.h
+++ b/Swiften/Session/BasicSessionStream.h
@@ -1,3 +1,3 @@
/*
- * Copyright (c) 2010-2016 Isode Limited.
+ * Copyright (c) 2010-2018 Isode Limited.
* All rights reserved.
@@ -87,5 +87,2 @@ namespace Swift {
ConnectionLayer* connectionLayer;
- CompressionLayer* compressionLayer;
- TLSLayer* tlsLayer;
- WhitespacePingLayer* whitespacePingLayer;
StreamStack* streamStack;
diff --git a/Swiften/StreamStack/StreamStack.cpp b/Swiften/StreamStack/StreamStack.cpp
index 44a018d..f14f95c 100644
--- a/Swiften/StreamStack/StreamStack.cpp
+++ b/Swiften/StreamStack/StreamStack.cpp
@@ -1,3 +1,3 @@
/*
- * Copyright (c) 2010-2016 Isode Limited.
+ * Copyright (c) 2010-2018 Isode Limited.
* All rights reserved.
@@ -24,12 +24,12 @@ StreamStack::~StreamStack() {
-void StreamStack::addLayer(StreamLayer* newLayer) {
- LowLayer* lowLayer = layers_.empty() ? physicalLayer_ : *layers_.rbegin();
+void StreamStack::addLayer(std::unique_ptr<StreamLayer> streamLayer) {
+ LowLayer* lowLayer = layers_.empty() ? physicalLayer_ : layers_.rbegin()->get();
- xmppLayer_->setChildLayer(newLayer);
- newLayer->setParentLayer(xmppLayer_);
+ xmppLayer_->setChildLayer(streamLayer.get());
+ streamLayer->setParentLayer(xmppLayer_);
- lowLayer->setParentLayer(newLayer);
- newLayer->setChildLayer(lowLayer);
+ lowLayer->setParentLayer(streamLayer.get());
+ streamLayer->setChildLayer(lowLayer);
- layers_.push_back(newLayer);
+ layers_.emplace_back(std::move(streamLayer));
}
diff --git a/Swiften/StreamStack/StreamStack.h b/Swiften/StreamStack/StreamStack.h
index b12a69f..5b77085 100644
--- a/Swiften/StreamStack/StreamStack.h
+++ b/Swiften/StreamStack/StreamStack.h
@@ -1,3 +1,3 @@
/*
- * Copyright (c) 2010-2016 Isode Limited.
+ * Copyright (c) 2010-2018 Isode Limited.
* All rights reserved.
@@ -26,3 +26,3 @@ namespace Swift {
- void addLayer(StreamLayer*);
+ void addLayer(std::unique_ptr<StreamLayer> /* streamLayer */);
@@ -32,5 +32,5 @@ namespace Swift {
- template<typename T> T* getLayer() {
- for (auto& i : layers_) {
- T* layer = dynamic_cast<T*>(i);
+ template<typename T> T* getLayer() const {
+ for (const auto& i : layers_) {
+ T* layer = dynamic_cast<T*>(i.get());
if (layer) {
@@ -45,3 +45,3 @@ namespace Swift {
LowLayer* physicalLayer_;
- std::vector<StreamLayer*> layers_;
+ std::vector<std::unique_ptr<StreamLayer>> layers_;
};
diff --git a/Swiften/StreamStack/UnitTest/StreamStackTest.cpp b/Swiften/StreamStack/UnitTest/StreamStackTest.cpp
index f0f82c9..0b520f1 100644
--- a/Swiften/StreamStack/UnitTest/StreamStackTest.cpp
+++ b/Swiften/StreamStack/UnitTest/StreamStackTest.cpp
@@ -1,3 +1,3 @@
/*
- * Copyright (c) 2010-2016 Isode Limited.
+ * Copyright (c) 2010-2018 Isode Limited.
* All rights reserved.
@@ -63,4 +63,4 @@ class StreamStackTest : public CppUnit::TestFixture {
StreamStack testling(xmppStream_, physicalStream_);
- std::shared_ptr<MyStreamLayer> xStream(new MyStreamLayer("X"));
- testling.addLayer(xStream.get());
+ std::unique_ptr<MyStreamLayer> xStream(new MyStreamLayer("X"));
+ testling.addLayer(std::move(xStream));
@@ -74,6 +74,6 @@ class StreamStackTest : public CppUnit::TestFixture {
StreamStack testling(xmppStream_, physicalStream_);
- std::shared_ptr<MyStreamLayer> xStream(new MyStreamLayer("X"));
- std::shared_ptr<MyStreamLayer> yStream(new MyStreamLayer("Y"));
- testling.addLayer(xStream.get());
- testling.addLayer(yStream.get());
+ std::unique_ptr<MyStreamLayer> xStream(new MyStreamLayer("X"));
+ std::unique_ptr<MyStreamLayer> yStream(new MyStreamLayer("Y"));
+ testling.addLayer(std::move(xStream));
+ testling.addLayer(std::move(yStream));
@@ -97,4 +97,4 @@ class StreamStackTest : public CppUnit::TestFixture {
xmppStream_->onElement.connect(boost::bind(&StreamStackTest::handleElement, this, _1));
- std::shared_ptr<MyStreamLayer> xStream(new MyStreamLayer("<"));
- testling.addLayer(xStream.get());
+ std::unique_ptr<MyStreamLayer> xStream(new MyStreamLayer("<"));
+ testling.addLayer(std::move(xStream));
@@ -108,6 +108,6 @@ class StreamStackTest : public CppUnit::TestFixture {
xmppStream_->onElement.connect(boost::bind(&StreamStackTest::handleElement, this, _1));
- std::shared_ptr<MyStreamLayer> xStream(new MyStreamLayer("s"));
- std::shared_ptr<MyStreamLayer> yStream(new MyStreamLayer("<"));
- testling.addLayer(xStream.get());
- testling.addLayer(yStream.get());
+ std::unique_ptr<MyStreamLayer> xStream(new MyStreamLayer("s"));
+ std::unique_ptr<MyStreamLayer> yStream(new MyStreamLayer("<"));
+ testling.addLayer(std::move(xStream));
+ testling.addLayer(std::move(yStream));
@@ -121,4 +121,4 @@ class StreamStackTest : public CppUnit::TestFixture {
xmppStream_->onWriteData.connect(boost::bind(&StreamStackTest::handleWriteData, this, _1));
- std::shared_ptr<MyStreamLayer> xStream(new MyStreamLayer("X"));
- testling.addLayer(xStream.get());
+ std::unique_ptr<MyStreamLayer> xStream(new MyStreamLayer("X"));
+ testling.addLayer(std::move(xStream));