diff options
author | Remko Tronçon <git@el-tramo.be> | 2012-12-13 13:35:53 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2013-04-06 20:22:02 (GMT) |
commit | 9eff25182d1bea576d1910200909384ce79d90fe (patch) | |
tree | f5dadbce5fa2c37c34fcc6bb32550e6930abce14 /Swiften/Client | |
parent | e9f2f7675b11ce36b3f66250156b78fae524a351 (diff) | |
download | swift-9eff25182d1bea576d1910200909384ce79d90fe.zip swift-9eff25182d1bea576d1910200909384ce79d90fe.tar.bz2 |
Make IDN implementation abstract.
Change-Id: I4c64f954ddeca7147d729b8be07237baa15c1795
Diffstat (limited to 'Swiften/Client')
-rw-r--r-- | Swiften/Client/ClientSession.cpp | 8 | ||||
-rw-r--r-- | Swiften/Client/ClientSession.h | 9 | ||||
-rw-r--r-- | Swiften/Client/CoreClient.cpp | 2 | ||||
-rw-r--r-- | Swiften/Client/UnitTest/ClientSessionTest.cpp | 6 |
4 files changed, 17 insertions, 8 deletions
diff --git a/Swiften/Client/ClientSession.cpp b/Swiften/Client/ClientSession.cpp index 48e38b9..c5a5c23 100644 --- a/Swiften/Client/ClientSession.cpp +++ b/Swiften/Client/ClientSession.cpp @@ -56,10 +56,12 @@ namespace Swift { ClientSession::ClientSession( const JID& jid, - boost::shared_ptr<SessionStream> stream) : + boost::shared_ptr<SessionStream> stream, + IDNConverter* idnConverter) : localJID(jid), state(Initial), stream(stream), + idnConverter(idnConverter), allowPLAINOverNonTLS(false), useStreamCompression(true), useTLS(UseTLSWhenAvailable), @@ -224,7 +226,7 @@ void ClientSession::handleElement(boost::shared_ptr<Element> element) { plus &= !finishMessage.empty(); } s << boost::uuids::random_generator()(); - SCRAMSHA1ClientAuthenticator* scramAuthenticator = new SCRAMSHA1ClientAuthenticator(s.str(), plus); + SCRAMSHA1ClientAuthenticator* scramAuthenticator = new SCRAMSHA1ClientAuthenticator(s.str(), plus, idnConverter); if (plus) { scramAuthenticator->setTLSChannelBindingData(finishMessage); } @@ -378,7 +380,7 @@ void ClientSession::handleTLSEncrypted() { checkTrustOrFinish(certificateChain, verificationError); } else { - ServerIdentityVerifier identityVerifier(localJID); + ServerIdentityVerifier identityVerifier(localJID, idnConverter); if (!certificateChain.empty() && identityVerifier.certificateVerifies(certificateChain[0])) { continueAfterTLSEncrypted(); } diff --git a/Swiften/Client/ClientSession.h b/Swiften/Client/ClientSession.h index c17ec9b..842412d 100644 --- a/Swiften/Client/ClientSession.h +++ b/Swiften/Client/ClientSession.h @@ -22,6 +22,7 @@ namespace Swift { class ClientAuthenticator; class CertificateTrustChecker; + class IDNConverter; class SWIFTEN_API ClientSession : public boost::enable_shared_from_this<ClientSession> { public: @@ -66,8 +67,8 @@ namespace Swift { ~ClientSession(); - static boost::shared_ptr<ClientSession> create(const JID& jid, boost::shared_ptr<SessionStream> stream) { - return boost::shared_ptr<ClientSession>(new ClientSession(jid, stream)); + static boost::shared_ptr<ClientSession> create(const JID& jid, boost::shared_ptr<SessionStream> stream, IDNConverter* idnConverter) { + return boost::shared_ptr<ClientSession>(new ClientSession(jid, stream, idnConverter)); } State getState() const { @@ -131,7 +132,8 @@ namespace Swift { private: ClientSession( const JID& jid, - boost::shared_ptr<SessionStream>); + boost::shared_ptr<SessionStream>, + IDNConverter* idnConverter); void finishSession(Error::Type error); void finishSession(boost::shared_ptr<Swift::Error> error); @@ -161,6 +163,7 @@ namespace Swift { JID localJID; State state; boost::shared_ptr<SessionStream> stream; + IDNConverter* idnConverter; bool allowPLAINOverNonTLS; bool useStreamCompression; UseTLS useTLS; diff --git a/Swiften/Client/CoreClient.cpp b/Swiften/Client/CoreClient.cpp index 5e19b4b..07124ed 100644 --- a/Swiften/Client/CoreClient.cpp +++ b/Swiften/Client/CoreClient.cpp @@ -142,7 +142,7 @@ void CoreClient::connect(const ClientOptions& o) { } void CoreClient::bindSessionToStream() { - session_ = ClientSession::create(jid_, sessionStream_); + session_ = ClientSession::create(jid_, sessionStream_, networkFactories->getIDNConverter()); session_->setCertificateTrustChecker(certificateTrustChecker); session_->setUseStreamCompression(options.useStreamCompression); session_->setAllowPLAINOverNonTLS(options.allowPLAINWithoutTLS); diff --git a/Swiften/Client/UnitTest/ClientSessionTest.cpp b/Swiften/Client/UnitTest/ClientSessionTest.cpp index a8cd53c..63c922c 100644 --- a/Swiften/Client/UnitTest/ClientSessionTest.cpp +++ b/Swiften/Client/UnitTest/ClientSessionTest.cpp @@ -11,6 +11,8 @@ #include <boost/optional.hpp> #include <boost/smart_ptr/make_shared.hpp> +#include <Swiften/IDN/IDNConverter.h> +#include <Swiften/IDN/PlatformIDNConverter.h> #include <Swiften/Session/SessionStream.h> #include <Swiften/Client/ClientSession.h> #include <Swiften/Elements/Message.h> @@ -69,6 +71,7 @@ class ClientSessionTest : public CppUnit::TestFixture { public: void setUp() { + idnConverter = boost::shared_ptr<IDNConverter>(PlatformIDNConverter::create()); server = boost::make_shared<MockSessionStream>(); sessionFinishedReceived = false; needCredentials = false; @@ -339,7 +342,7 @@ class ClientSessionTest : public CppUnit::TestFixture { private: boost::shared_ptr<ClientSession> createSession() { - boost::shared_ptr<ClientSession> session = ClientSession::create(JID("me@foo.com"), server); + boost::shared_ptr<ClientSession> session = ClientSession::create(JID("me@foo.com"), server, idnConverter.get()); session->onFinished.connect(boost::bind(&ClientSessionTest::handleSessionFinished, this, _1)); session->onNeedCredentials.connect(boost::bind(&ClientSessionTest::handleSessionNeedCredentials, this)); session->setAllowPLAINOverNonTLS(true); @@ -616,6 +619,7 @@ class ClientSessionTest : public CppUnit::TestFixture { std::deque<Event> receivedEvents; }; + boost::shared_ptr<IDNConverter> idnConverter; boost::shared_ptr<MockSessionStream> server; bool sessionFinishedReceived; bool needCredentials; |