summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Session/Session.cpp')
-rw-r--r--Swiften/Session/Session.cpp28
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);
}