summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Client')
-rw-r--r--Swiften/Client/ClientSession.cpp12
-rw-r--r--Swiften/Client/ClientSession.h4
-rw-r--r--Swiften/Client/UnitTest/ClientSessionTest.cpp8
3 files changed, 20 insertions, 4 deletions
diff --git a/Swiften/Client/ClientSession.cpp b/Swiften/Client/ClientSession.cpp
index daffbc6..17b3931 100644
--- a/Swiften/Client/ClientSession.cpp
+++ b/Swiften/Client/ClientSession.cpp
@@ -56,10 +56,10 @@ ClientSession::~ClientSession() {
}
void ClientSession::start() {
- stream->onStreamStartReceived.connect(boost::bind(&ClientSession::handleStreamStart, shared_from_this(), _1));
- stream->onElementReceived.connect(boost::bind(&ClientSession::handleElement, shared_from_this(), _1));
- stream->onError.connect(boost::bind(&ClientSession::handleStreamError, shared_from_this(), _1));
- stream->onTLSEncrypted.connect(boost::bind(&ClientSession::handleTLSEncrypted, shared_from_this()));
+ streamOnStreamStartReceivedConnection = stream->onStreamStartReceived.connect(boost::bind(&ClientSession::handleStreamStart, shared_from_this(), _1));
+ streamOnElementReceivedConnection = stream->onElementReceived.connect(boost::bind(&ClientSession::handleElement, shared_from_this(), _1));
+ streamOnErrorConnection = stream->onError.connect(boost::bind(&ClientSession::handleStreamError, shared_from_this(), _1));
+ streamOnTLSEncryptedConnection = stream->onTLSEncrypted.connect(boost::bind(&ClientSession::handleTLSEncrypted, shared_from_this()));
assert(state == Initial);
state = WaitingForStreamStart;
@@ -347,6 +347,10 @@ void ClientSession::finishSession(Error::Type error) {
void ClientSession::finishSession(boost::shared_ptr<Swift::Error> error) {
state = Finished;
stream->setWhitespacePingEnabled(false);
+ streamOnStreamStartReceivedConnection.disconnect();
+ streamOnElementReceivedConnection.disconnect();
+ streamOnErrorConnection.disconnect();
+ streamOnTLSEncryptedConnection.disconnect();
onFinished(error);
}
diff --git a/Swiften/Client/ClientSession.h b/Swiften/Client/ClientSession.h
index 359d7c8..cd364fe 100644
--- a/Swiften/Client/ClientSession.h
+++ b/Swiften/Client/ClientSession.h
@@ -123,5 +123,9 @@ namespace Swift {
ClientAuthenticator* authenticator;
boost::shared_ptr<StanzaAckRequester> stanzaAckRequester_;
boost::shared_ptr<StanzaAckResponder> stanzaAckResponder_;
+ boost::bsignals::connection streamOnStreamStartReceivedConnection;
+ boost::bsignals::connection streamOnElementReceivedConnection;
+ boost::bsignals::connection streamOnErrorConnection;
+ boost::bsignals::connection streamOnTLSEncryptedConnection;
};
}
diff --git a/Swiften/Client/UnitTest/ClientSessionTest.cpp b/Swiften/Client/UnitTest/ClientSessionTest.cpp
index 2762188..2cd9fd2 100644
--- a/Swiften/Client/UnitTest/ClientSessionTest.cpp
+++ b/Swiften/Client/UnitTest/ClientSessionTest.cpp
@@ -82,6 +82,8 @@ class ClientSessionTest : public CppUnit::TestFixture {
server->onTLSEncrypted();
server->receiveStreamStart();
server->sendStreamStart();
+
+ session->finish();
}
void testStartTLS_ServerError() {
@@ -126,6 +128,8 @@ class ClientSessionTest : public CppUnit::TestFixture {
server->receiveAuthRequest("PLAIN");
server->sendAuthSuccess();
server->receiveStreamStart();
+
+ session->finish();
}
void testAuthenticate_Unauthorized() {
@@ -190,6 +194,8 @@ class ClientSessionTest : public CppUnit::TestFixture {
CPPUNIT_ASSERT(session->getStreamManagementEnabled());
// TODO: Test if the requesters & responders do their work
CPPUNIT_ASSERT_EQUAL(ClientSession::Initialized, session->getState());
+
+ session->finish();
}
void testStreamManagement_Failed() {
@@ -211,6 +217,8 @@ class ClientSessionTest : public CppUnit::TestFixture {
CPPUNIT_ASSERT(!session->getStreamManagementEnabled());
CPPUNIT_ASSERT_EQUAL(ClientSession::Initialized, session->getState());
+
+ session->finish();
}