From d27e3cbf2c9c99cb989d641466f252c6277c78fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Remko=20Tron=C3=A7on?= Date: Tue, 9 Nov 2010 21:57:36 +0100 Subject: Created CertificateFactory. diff --git a/Swiften/Client/CoreClient.cpp b/Swiften/Client/CoreClient.cpp index 7bde017..2c3ab35 100644 --- a/Swiften/Client/CoreClient.cpp +++ b/Swiften/Client/CoreClient.cpp @@ -11,7 +11,7 @@ #include "Swiften/Network/MainBoostIOServiceThread.h" #include "Swiften/Network/BoostIOServiceThread.h" #include "Swiften/Client/ClientSession.h" -#include "Swiften/TLS/PlatformTLSContextFactory.h" +#include "Swiften/TLS/PlatformTLSFactories.h" #include "Swiften/TLS/CertificateVerificationError.h" #include "Swiften/Network/Connector.h" #include "Swiften/Network/BoostConnectionFactory.h" @@ -34,14 +34,14 @@ CoreClient::CoreClient(EventLoop* eventLoop, const JID& jid, const String& passw iqRouter_ = new IQRouter(stanzaChannel_); connectionFactory_ = new BoostConnectionFactory(&MainBoostIOServiceThread::getInstance().getIOService(), eventLoop); timerFactory_ = new BoostTimerFactory(&MainBoostIOServiceThread::getInstance().getIOService(), eventLoop); - tlsContextFactory_ = new PlatformTLSContextFactory(); + tlsFactories = new PlatformTLSFactories(); } CoreClient::~CoreClient() { if (session_ || connection_) { std::cerr << "Warning: Client not disconnected properly" << std::endl; } - delete tlsContextFactory_; + delete tlsFactories; delete timerFactory_; delete connectionFactory_; delete iqRouter_; @@ -82,7 +82,7 @@ void CoreClient::handleConnectorFinished(boost::shared_ptr connectio connection_ = connection; assert(!sessionStream_); - sessionStream_ = boost::shared_ptr(new BasicSessionStream(ClientStreamType, connection_, &payloadParserFactories_, &payloadSerializers_, tlsContextFactory_, timerFactory_)); + sessionStream_ = boost::shared_ptr(new BasicSessionStream(ClientStreamType, connection_, &payloadParserFactories_, &payloadSerializers_, tlsFactories->getTLSContextFactory(), timerFactory_)); if (!certificate_.isEmpty()) { sessionStream_->setTLSCertificate(PKCS12Certificate(certificate_, password_)); } diff --git a/Swiften/Client/CoreClient.h b/Swiften/Client/CoreClient.h index 780201d..211f84f 100644 --- a/Swiften/Client/CoreClient.h +++ b/Swiften/Client/CoreClient.h @@ -32,6 +32,7 @@ namespace Swift { class ClientSession; class BasicSessionStream; class EventLoop; + class PlatformTLSFactories; class CertificateTrustChecker; /** @@ -201,7 +202,7 @@ namespace Swift { Connector::ref connector_; ConnectionFactory* connectionFactory_; TimerFactory* timerFactory_; - TLSContextFactory* tlsContextFactory_; + PlatformTLSFactories* tlsFactories; FullPayloadParserFactoryCollection payloadParserFactories_; FullPayloadSerializerCollection payloadSerializers_; boost::shared_ptr connection_; diff --git a/Swiften/TLS/CertificateFactory.cpp b/Swiften/TLS/CertificateFactory.cpp new file mode 100644 index 0000000..b2edaf4 --- /dev/null +++ b/Swiften/TLS/CertificateFactory.cpp @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include "Swiften/TLS/CertificateFactory.h" + +namespace Swift { + +CertificateFactory::~CertificateFactory() { +} + +} diff --git a/Swiften/TLS/CertificateFactory.h b/Swiften/TLS/CertificateFactory.h new file mode 100644 index 0000000..90eca58 --- /dev/null +++ b/Swiften/TLS/CertificateFactory.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include "Swiften/TLS/Certificate.h" + +namespace Swift { + class CertificateFactory { + public: + virtual ~CertificateFactory(); + + virtual Certificate::ref createCertificateFromDER(const ByteArray& der) = 0; + }; +} diff --git a/Swiften/TLS/OpenSSL/OpenSSLCertificateFactory.h b/Swiften/TLS/OpenSSL/OpenSSLCertificateFactory.h new file mode 100644 index 0000000..cd4982e --- /dev/null +++ b/Swiften/TLS/OpenSSL/OpenSSLCertificateFactory.h @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include "Swiften/TLS/CertificateFactory.h" +#include "Swiften/TLS/OpenSSL/OpenSSLCertificate.h" + +namespace Swift { + class OpenSSLCertificateFactory : public CertificateFactory { + public: + virtual Certificate::ref createCertificateFromDER(const ByteArray& der) { + return Certificate::ref(new OpenSSLCertificate(der)); + } + }; +} diff --git a/Swiften/TLS/PlatformTLSContextFactory.cpp b/Swiften/TLS/PlatformTLSContextFactory.cpp deleted file mode 100644 index d9fc0fb..0000000 --- a/Swiften/TLS/PlatformTLSContextFactory.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2010 Remko Tronçon - * Licensed under the GNU General Public License v3. - * See Documentation/Licenses/GPLv3.txt for more information. - */ - -#include "Swiften/TLS/PlatformTLSContextFactory.h" - -#include -#include - -#ifdef HAVE_OPENSSL -#include "Swiften/TLS/OpenSSL/OpenSSLContextFactory.h" -#endif - -namespace Swift { - -PlatformTLSContextFactory::PlatformTLSContextFactory() : factory(NULL) { -#ifdef HAVE_OPENSSL - factory = new OpenSSLContextFactory(); -#endif -} - -PlatformTLSContextFactory::~PlatformTLSContextFactory() { - delete factory; -} - -bool PlatformTLSContextFactory::canCreate() const { - return factory; -} - -TLSContext* PlatformTLSContextFactory::createTLSContext() { - assert(canCreate()); - return factory->createTLSContext(); -} - -} diff --git a/Swiften/TLS/PlatformTLSContextFactory.h b/Swiften/TLS/PlatformTLSContextFactory.h deleted file mode 100644 index 4464e8b..0000000 --- a/Swiften/TLS/PlatformTLSContextFactory.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2010 Remko Tronçon - * Licensed under the GNU General Public License v3. - * See Documentation/Licenses/GPLv3.txt for more information. - */ - -#pragma once - -#include "Swiften/TLS/TLSContextFactory.h" - -namespace Swift { - class PlatformTLSContextFactory : public TLSContextFactory { - public: - PlatformTLSContextFactory(); - ~PlatformTLSContextFactory(); - - bool canCreate() const; - virtual TLSContext* createTLSContext(); - - private: - TLSContextFactory* factory; - }; -} diff --git a/Swiften/TLS/PlatformTLSFactories.cpp b/Swiften/TLS/PlatformTLSFactories.cpp new file mode 100644 index 0000000..e642758 --- /dev/null +++ b/Swiften/TLS/PlatformTLSFactories.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include "Swiften/TLS/PlatformTLSFactories.h" + +#include +#include + +#ifdef HAVE_OPENSSL +#include "Swiften/TLS/OpenSSL/OpenSSLContextFactory.h" +#include "Swiften/TLS/OpenSSL/OpenSSLCertificateFactory.h" +#endif + +namespace Swift { + +PlatformTLSFactories::PlatformTLSFactories() : contextFactory(NULL), certificateFactory(NULL) { +#ifdef HAVE_OPENSSL + contextFactory = new OpenSSLContextFactory(); + certificateFactory = new OpenSSLCertificateFactory(); +#endif +} + +PlatformTLSFactories::~PlatformTLSFactories() { + delete contextFactory; + delete certificateFactory; +} + +TLSContextFactory* PlatformTLSFactories::getTLSContextFactory() const { + return contextFactory; +} + +CertificateFactory* PlatformTLSFactories::getCertificateFactory() const { + return certificateFactory; +} + +} diff --git a/Swiften/TLS/PlatformTLSFactories.h b/Swiften/TLS/PlatformTLSFactories.h new file mode 100644 index 0000000..605db31 --- /dev/null +++ b/Swiften/TLS/PlatformTLSFactories.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +namespace Swift { + class TLSContextFactory; + class CertificateFactory; + + class PlatformTLSFactories { + public: + PlatformTLSFactories(); + ~PlatformTLSFactories(); + + TLSContextFactory* getTLSContextFactory() const; + CertificateFactory* getCertificateFactory() const; + + private: + TLSContextFactory* contextFactory; + CertificateFactory* certificateFactory; + }; +} diff --git a/Swiften/TLS/SConscript b/Swiften/TLS/SConscript index 7408e72..f83e383 100644 --- a/Swiften/TLS/SConscript +++ b/Swiften/TLS/SConscript @@ -2,6 +2,7 @@ Import("swiften_env") objects = swiften_env.StaticObject([ "Certificate.cpp", + "CertificateFactory.cpp", "CertificateTrustChecker.cpp", "TLSContext.cpp", "TLSContextFactory.cpp", @@ -17,7 +18,7 @@ if myenv.get("HAVE_OPENSSL", 0) : ]) myenv.Append(CPPDEFINES = "HAVE_OPENSSL") -objects += myenv.StaticObject(["PlatformTLSContextFactory.cpp"]) +objects += myenv.StaticObject(["PlatformTLSFactories.cpp"]) -- cgit v0.10.2-6-g49f6