diff options
author | Tobias Markmann <tm@ayena.de> | 2018-08-02 09:00:25 (GMT) |
---|---|---|
committer | Tobias Markmann <tm@ayena.de> | 2018-08-02 09:00:25 (GMT) |
commit | 091f6e520694360a0407ab0cf3bb036fb461e6e3 (patch) | |
tree | 717ff863e8cd799842e5c82fc2d833ae026c9b20 /Swiften/Session/Session.cpp | |
parent | 80f74201f0a35718642e434c58b631b238fd85df (diff) | |
download | swift-091f6e520694360a0407ab0cf3bb036fb461e6e3.zip swift-091f6e520694360a0407ab0cf3bb036fb461e6e3.tar.bz2 |
Have StreamStack own the top and bottom layer
Test-Information:
Builds, unit tests and integration tests pass on macOS with
clang 7.0 master.
Change-Id: I0db411e49339ccb2301edd1a16612cb1ad2c927c
Diffstat (limited to 'Swiften/Session/Session.cpp')
-rw-r--r-- | Swiften/Session/Session.cpp | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/Swiften/Session/Session.cpp b/Swiften/Session/Session.cpp index ebdb5d1..b1525b8 100644 --- a/Swiften/Session/Session.cpp +++ b/Swiften/Session/Session.cpp @@ -1,3 +1,3 @@ /* - * Copyright (c) 2010-2016 Isode Limited. + * Copyright (c) 2010-2018 Isode Limited. * All rights reserved. @@ -24,5 +24,2 @@ Session::Session( xmlParserFactory(xmlParserFactory), - xmppLayer(nullptr), - connectionLayer(nullptr), - streamStack(nullptr), finishing(false) { @@ -31,5 +28,2 @@ Session::Session( Session::~Session() { - delete streamStack; - delete connectionLayer; - delete xmppLayer; } @@ -46,3 +40,3 @@ void Session::finishSession() { finishing = true; - if (xmppLayer) { + if (auto xmppLayer = getXMPPLayer()) { xmppLayer->writeFooter(); @@ -57,3 +51,3 @@ void Session::finishSession(const SessionError& /*error*/) { finishing = true; - if (xmppLayer) { + if (auto xmppLayer = getXMPPLayer()) { xmppLayer->writeFooter(); @@ -64,3 +58,3 @@ void Session::finishSession(const SessionError& /*error*/) { void Session::initializeStreamStack() { - xmppLayer = new XMPPLayer(payloadParserFactories, payloadSerializers, xmlParserFactory, ClientStreamType); + auto xmppLayer = std::unique_ptr<XMPPLayer>(new XMPPLayer(payloadParserFactories, payloadSerializers, xmlParserFactory, ClientStreamType)); xmppLayer->onStreamStart.connect( @@ -74,8 +68,16 @@ void Session::initializeStreamStack() { boost::bind(&Session::handleDisconnected, this, _1)); - connectionLayer = new ConnectionLayer(connection); - streamStack = new StreamStack(xmppLayer, connectionLayer); + streamStack = std::unique_ptr<StreamStack>(new StreamStack(std::move(xmppLayer), std::unique_ptr<ConnectionLayer>(new ConnectionLayer(connection)))); } +XMPPLayer* Session::getXMPPLayer() const { + return dynamic_cast<XMPPLayer*>(streamStack->getTopLayer()); +} + +StreamStack* Session::getStreamStack() const { + return streamStack.get(); +} + + void Session::sendElement(std::shared_ptr<ToplevelElement> stanza) { - xmppLayer->writeElement(stanza); + getXMPPLayer()->writeElement(stanza); } |