diff options
Diffstat (limited to 'Swiften/Session')
-rw-r--r-- | Swiften/Session/Session.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/Swiften/Session/Session.cpp b/Swiften/Session/Session.cpp index 39fab14..cdb83d4 100644 --- a/Swiften/Session/Session.cpp +++ b/Swiften/Session/Session.cpp @@ -32,30 +32,38 @@ Session::~Session() { delete xmppLayer; } void Session::startSession() { initializeStreamStack(); handleSessionStarted(); } void Session::finishSession() { + if (finishing) + return; finishing = true; + if (xmppLayer) { + xmppLayer->writeFooter(); + } connection->disconnect(); handleSessionFinished(boost::optional<SessionError>()); - finishing = false; onSessionFinished(boost::optional<SessionError>()); } void Session::finishSession(const SessionError& error) { + if (finishing) + return; finishing = true; + if (xmppLayer) { + xmppLayer->writeFooter(); + } connection->disconnect(); handleSessionFinished(boost::optional<SessionError>(error)); - finishing = false; onSessionFinished(boost::optional<SessionError>(error)); } void Session::initializeStreamStack() { xmppLayer = new XMPPLayer(payloadParserFactories, payloadSerializers, ClientStreamType); xmppLayer->onStreamStart.connect( boost::bind(&Session::handleStreamStart, shared_from_this(), _1)); xmppLayer->onElement.connect(boost::bind(&Session::handleElement, shared_from_this(), _1)); xmppLayer->onError.connect( |