aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/NetSSL_OpenSSL
diff options
context:
space:
mode:
authororivej <orivej@yandex-team.ru>2022-02-10 16:44:49 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:44:49 +0300
commit718c552901d703c502ccbefdfc3c9028d608b947 (patch)
tree46534a98bbefcd7b1f3faa5b52c138ab27db75b7 /contrib/libs/poco/NetSSL_OpenSSL
parente9656aae26e0358d5378e5b63dcac5c8dbe0e4d0 (diff)
downloadydb-718c552901d703c502ccbefdfc3c9028d608b947.tar.gz
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/poco/NetSSL_OpenSSL')
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/AcceptCertificateHandler.h104
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactory.h186
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactoryMgr.h128
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/ConsoleCertificateHandler.h100
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/Context.h810
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSClientSession.h330
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSSessionInstantiator.h130
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSStreamFactory.h166
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/InvalidCertificateHandler.h160
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/KeyConsoleHandler.h94
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/KeyFileHandler.h102
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/NetSSL.h188
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactory.h190
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactoryMgr.h128
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyPassphraseHandler.h168
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/RejectCertificateHandler.h96
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SSLException.h78
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h780
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureSMTPClientSession.h192
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocket.h272
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocketImpl.h292
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureSocketImpl.h524
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocket.h544
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocketImpl.h598
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/Session.h156
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/Utility.h104
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/VerificationErrorArgs.h216
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/X509Certificate.h202
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/AcceptCertificateHandler.cpp76
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/CertificateHandlerFactory.cpp88
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/CertificateHandlerFactoryMgr.cpp138
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/ConsoleCertificateHandler.cpp106
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/Context.cpp1156
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/HTTPSClientSession.cpp376
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/HTTPSSessionInstantiator.cpp142
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/HTTPSStreamFactory.cpp388
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/InvalidCertificateHandler.cpp104
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/KeyConsoleHandler.cpp80
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/KeyFileHandler.cpp122
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/PrivateKeyFactory.cpp88
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/PrivateKeyFactoryMgr.cpp134
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/PrivateKeyPassphraseHandler.cpp92
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/RejectCertificateHandler.cpp76
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/SSLException.cpp60
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/SSLManager.cpp920
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/SecureSMTPClientSession.cpp128
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/SecureServerSocket.cpp242
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/SecureServerSocketImpl.cpp244
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/SecureSocketImpl.cpp1094
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/SecureStreamSocket.cpp574
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/SecureStreamSocketImpl.cpp452
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/Session.cpp80
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/Utility.cpp142
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/VerificationErrorArgs.cpp74
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/src/X509Certificate.cpp350
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/ya.make116
56 files changed, 7340 insertions, 7340 deletions
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/AcceptCertificateHandler.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/AcceptCertificateHandler.h
index 2d92c629aa..dc1f9d7b78 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/AcceptCertificateHandler.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/AcceptCertificateHandler.h
@@ -1,52 +1,52 @@
-//
-// AcceptCertificateHandler.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: AcceptCertificateHandler
-//
-// Definition of the AcceptCertificateHandler class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_AcceptCertificateHandler_INCLUDED
-#define NetSSL_AcceptCertificateHandler_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/InvalidCertificateHandler.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API AcceptCertificateHandler: public InvalidCertificateHandler
- /// A AcceptCertificateHandler is invoked whenever an error
- /// occurs verifying the certificate. It always accepts
- /// the certificate.
- ///
- /// Should be using for testing purposes only.
-{
-public:
- AcceptCertificateHandler(bool handleErrorsOnServerSide);
- /// Creates the AcceptCertificateHandler
-
- virtual ~AcceptCertificateHandler();
- /// Destroys the AcceptCertificateHandler.
-
- void onInvalidCertificate(const void* pSender, VerificationErrorArgs& errorCert);
- /// Receives the questionable certificate in parameter errorCert. If one wants to accept the
- /// certificate, call errorCert.setIgnoreError(true).
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_AcceptCertificateHandler_INCLUDED
+//
+// AcceptCertificateHandler.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: AcceptCertificateHandler
+//
+// Definition of the AcceptCertificateHandler class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_AcceptCertificateHandler_INCLUDED
+#define NetSSL_AcceptCertificateHandler_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/InvalidCertificateHandler.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API AcceptCertificateHandler: public InvalidCertificateHandler
+ /// A AcceptCertificateHandler is invoked whenever an error
+ /// occurs verifying the certificate. It always accepts
+ /// the certificate.
+ ///
+ /// Should be using for testing purposes only.
+{
+public:
+ AcceptCertificateHandler(bool handleErrorsOnServerSide);
+ /// Creates the AcceptCertificateHandler
+
+ virtual ~AcceptCertificateHandler();
+ /// Destroys the AcceptCertificateHandler.
+
+ void onInvalidCertificate(const void* pSender, VerificationErrorArgs& errorCert);
+ /// Receives the questionable certificate in parameter errorCert. If one wants to accept the
+ /// certificate, call errorCert.setIgnoreError(true).
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_AcceptCertificateHandler_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactory.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactory.h
index 5e3699c3ca..c5e52dec16 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactory.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactory.h
@@ -1,93 +1,93 @@
-//
-// CertificateHandlerFactory.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: CertificateHandlerFactory
-//
-// Definition of the CertificateHandlerFactory class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_CertificateHandlerFactory_INCLUDED
-#define NetSSL_CertificateHandlerFactory_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class InvalidCertificateHandler;
-
-
-class NetSSL_API CertificateHandlerFactory
- /// A CertificateHandlerFactory is responsible for creating InvalidCertificateHandlers.
- ///
- /// You don't need to access this class directly. Use the macro
- /// POCO_REGISTER_CHFACTORY(namespace, InvalidCertificateHandlerName)
- /// instead (see the documentation of InvalidCertificateHandler for an example).
-{
-public:
- CertificateHandlerFactory();
- /// Creates the CertificateHandlerFactory.
-
- virtual ~CertificateHandlerFactory();
- /// Destroys the CertificateHandlerFactory.
-
- virtual InvalidCertificateHandler* create(bool server) const = 0;
- /// Creates a new InvalidCertificateHandler. Set server to true if the certificate handler is used on the server side.
-};
-
-
-class NetSSL_API CertificateHandlerFactoryRegistrar
- /// Registrar class which automatically registers CertificateHandlerFactory at the CertificateHandlerFactoryMgr.
- /// You don't need to access this class directly. Use the macro
- /// POCO_REGISTER_CHFACTORY(namespace, InvalidCertificateHandlerName)
- /// instead (see the documentation of InvalidCertificateHandler for an example).
-{
-public:
- CertificateHandlerFactoryRegistrar(const std::string& name, CertificateHandlerFactory* pFactory);
- /// Registers the CertificateHandlerFactory with the given name at the factory manager.
-
- virtual ~CertificateHandlerFactoryRegistrar();
- /// Destroys the CertificateHandlerFactoryRegistrar.
-};
-
-
-template <typename T>
-class CertificateHandlerFactoryImpl: public Poco::Net::CertificateHandlerFactory
-{
-public:
- CertificateHandlerFactoryImpl()
- {
- }
-
- ~CertificateHandlerFactoryImpl()
- {
- }
-
- InvalidCertificateHandler* create(bool server) const
- {
- return new T(server);
- }
-};
-
-
-} } // namespace Poco::Net
-
-
-// DEPRECATED: register the factory directly at the FactoryMgr:
-// Poco::Net::SSLManager::instance().certificateHandlerFactoryMgr().setFactory(name, new Poco::Net::CertificateHandlerFactoryImpl<MyConsoleHandler>());
-#define POCO_REGISTER_CHFACTORY(API, PKCLS) \
- static Poco::Net::CertificateHandlerFactoryRegistrar aRegistrar(std::string(#PKCLS), new Poco::Net::CertificateHandlerFactoryImpl<PKCLS>());
-
-
-#endif // NetSSL_CertificateHandlerFactory_INCLUDED
+//
+// CertificateHandlerFactory.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: CertificateHandlerFactory
+//
+// Definition of the CertificateHandlerFactory class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_CertificateHandlerFactory_INCLUDED
+#define NetSSL_CertificateHandlerFactory_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class InvalidCertificateHandler;
+
+
+class NetSSL_API CertificateHandlerFactory
+ /// A CertificateHandlerFactory is responsible for creating InvalidCertificateHandlers.
+ ///
+ /// You don't need to access this class directly. Use the macro
+ /// POCO_REGISTER_CHFACTORY(namespace, InvalidCertificateHandlerName)
+ /// instead (see the documentation of InvalidCertificateHandler for an example).
+{
+public:
+ CertificateHandlerFactory();
+ /// Creates the CertificateHandlerFactory.
+
+ virtual ~CertificateHandlerFactory();
+ /// Destroys the CertificateHandlerFactory.
+
+ virtual InvalidCertificateHandler* create(bool server) const = 0;
+ /// Creates a new InvalidCertificateHandler. Set server to true if the certificate handler is used on the server side.
+};
+
+
+class NetSSL_API CertificateHandlerFactoryRegistrar
+ /// Registrar class which automatically registers CertificateHandlerFactory at the CertificateHandlerFactoryMgr.
+ /// You don't need to access this class directly. Use the macro
+ /// POCO_REGISTER_CHFACTORY(namespace, InvalidCertificateHandlerName)
+ /// instead (see the documentation of InvalidCertificateHandler for an example).
+{
+public:
+ CertificateHandlerFactoryRegistrar(const std::string& name, CertificateHandlerFactory* pFactory);
+ /// Registers the CertificateHandlerFactory with the given name at the factory manager.
+
+ virtual ~CertificateHandlerFactoryRegistrar();
+ /// Destroys the CertificateHandlerFactoryRegistrar.
+};
+
+
+template <typename T>
+class CertificateHandlerFactoryImpl: public Poco::Net::CertificateHandlerFactory
+{
+public:
+ CertificateHandlerFactoryImpl()
+ {
+ }
+
+ ~CertificateHandlerFactoryImpl()
+ {
+ }
+
+ InvalidCertificateHandler* create(bool server) const
+ {
+ return new T(server);
+ }
+};
+
+
+} } // namespace Poco::Net
+
+
+// DEPRECATED: register the factory directly at the FactoryMgr:
+// Poco::Net::SSLManager::instance().certificateHandlerFactoryMgr().setFactory(name, new Poco::Net::CertificateHandlerFactoryImpl<MyConsoleHandler>());
+#define POCO_REGISTER_CHFACTORY(API, PKCLS) \
+ static Poco::Net::CertificateHandlerFactoryRegistrar aRegistrar(std::string(#PKCLS), new Poco::Net::CertificateHandlerFactoryImpl<PKCLS>());
+
+
+#endif // NetSSL_CertificateHandlerFactory_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactoryMgr.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactoryMgr.h
index e70c9060b6..213d480f2f 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactoryMgr.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactoryMgr.h
@@ -1,64 +1,64 @@
-//
-// CertificateHandlerFactoryMgr.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: CertificateHandlerFactoryMgr
-//
-// Definition of the CertificateHandlerFactoryMgr class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_CertificateHandlerFactoryMgr_INCLUDED
-#define NetSSL_CertificateHandlerFactoryMgr_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/CertificateHandlerFactory.h"
-#include "Poco/SharedPtr.h"
-#include <map>
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API CertificateHandlerFactoryMgr
- /// A CertificateHandlerFactoryMgr manages all existing CertificateHandlerFactories.
-{
-public:
- typedef std::map<std::string, Poco::SharedPtr<CertificateHandlerFactory> > FactoriesMap;
-
- CertificateHandlerFactoryMgr();
- /// Creates the CertificateHandlerFactoryMgr.
-
- ~CertificateHandlerFactoryMgr();
- /// Destroys the CertificateHandlerFactoryMgr.
-
- void setFactory(const std::string& name, CertificateHandlerFactory* pFactory);
- /// Registers the factory. Class takes ownership of the pointer.
- /// If a factory with the same name already exists, an exception is thrown.
-
- bool hasFactory(const std::string& name) const;
- /// Returns true if for the given name a factory is already registered
-
- const CertificateHandlerFactory* getFactory(const std::string& name) const;
- /// Returns NULL if for the given name a factory does not exist, otherwise the factory is returned
-
- void removeFactory(const std::string& name);
- /// Removes the factory from the manager.
-
-private:
- FactoriesMap _factories;
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_CertificateHandlerFactoryMgr_INCLUDED
+//
+// CertificateHandlerFactoryMgr.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: CertificateHandlerFactoryMgr
+//
+// Definition of the CertificateHandlerFactoryMgr class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_CertificateHandlerFactoryMgr_INCLUDED
+#define NetSSL_CertificateHandlerFactoryMgr_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/CertificateHandlerFactory.h"
+#include "Poco/SharedPtr.h"
+#include <map>
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API CertificateHandlerFactoryMgr
+ /// A CertificateHandlerFactoryMgr manages all existing CertificateHandlerFactories.
+{
+public:
+ typedef std::map<std::string, Poco::SharedPtr<CertificateHandlerFactory> > FactoriesMap;
+
+ CertificateHandlerFactoryMgr();
+ /// Creates the CertificateHandlerFactoryMgr.
+
+ ~CertificateHandlerFactoryMgr();
+ /// Destroys the CertificateHandlerFactoryMgr.
+
+ void setFactory(const std::string& name, CertificateHandlerFactory* pFactory);
+ /// Registers the factory. Class takes ownership of the pointer.
+ /// If a factory with the same name already exists, an exception is thrown.
+
+ bool hasFactory(const std::string& name) const;
+ /// Returns true if for the given name a factory is already registered
+
+ const CertificateHandlerFactory* getFactory(const std::string& name) const;
+ /// Returns NULL if for the given name a factory does not exist, otherwise the factory is returned
+
+ void removeFactory(const std::string& name);
+ /// Removes the factory from the manager.
+
+private:
+ FactoriesMap _factories;
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_CertificateHandlerFactoryMgr_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/ConsoleCertificateHandler.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/ConsoleCertificateHandler.h
index c58962c476..958906aede 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/ConsoleCertificateHandler.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/ConsoleCertificateHandler.h
@@ -1,50 +1,50 @@
-//
-// ConsoleCertificateHandler.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: ConsoleCertificateHandler
-//
-// Definition of the ConsoleCertificateHandler class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_ConsoleCertificateHandler_INCLUDED
-#define NetSSL_ConsoleCertificateHandler_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/InvalidCertificateHandler.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API ConsoleCertificateHandler: public InvalidCertificateHandler
- /// A ConsoleCertificateHandler is invoked whenever an error occurs verifying the certificate.
- ///
- /// The certificate is printed to stdout and the user is asked via console if he wants to accept it.
-{
-public:
- ConsoleCertificateHandler(bool handleErrorsOnServerSide);
- /// Creates the ConsoleCertificateHandler.
-
- virtual ~ConsoleCertificateHandler();
- /// Destroys the ConsoleCertificateHandler.
-
- void onInvalidCertificate(const void* pSender, VerificationErrorArgs& errorCert);
- /// Prints the certificate to stdout and waits for user input on the console
- /// to decide if a certificate should be accepted/rejected.
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_ConsoleCertificateHandler_INCLUDED
+//
+// ConsoleCertificateHandler.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: ConsoleCertificateHandler
+//
+// Definition of the ConsoleCertificateHandler class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_ConsoleCertificateHandler_INCLUDED
+#define NetSSL_ConsoleCertificateHandler_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/InvalidCertificateHandler.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API ConsoleCertificateHandler: public InvalidCertificateHandler
+ /// A ConsoleCertificateHandler is invoked whenever an error occurs verifying the certificate.
+ ///
+ /// The certificate is printed to stdout and the user is asked via console if he wants to accept it.
+{
+public:
+ ConsoleCertificateHandler(bool handleErrorsOnServerSide);
+ /// Creates the ConsoleCertificateHandler.
+
+ virtual ~ConsoleCertificateHandler();
+ /// Destroys the ConsoleCertificateHandler.
+
+ void onInvalidCertificate(const void* pSender, VerificationErrorArgs& errorCert);
+ /// Prints the certificate to stdout and waits for user input on the console
+ /// to decide if a certificate should be accepted/rejected.
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_ConsoleCertificateHandler_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/Context.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/Context.h
index d66328380d..a6fff8c9e3 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/Context.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/Context.h
@@ -1,405 +1,405 @@
-//
-// Context.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: Context
-//
-// Definition of the Context class.
-//
-// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_Context_INCLUDED
-#define NetSSL_Context_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/SocketDefs.h"
-#include "Poco/Crypto/X509Certificate.h"
-#include "Poco/Crypto/RSAKey.h"
-#include "Poco/RefCountedObject.h"
-#include "Poco/AutoPtr.h"
-#include <openssl/ssl.h>
-#include <cstdlib>
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API Context: public Poco::RefCountedObject
- /// This class encapsulates context information for
- /// an SSL server or client, such as the certificate
- /// verification mode and the location of certificates
- /// and private key files, as well as the list of
- /// supported ciphers.
- ///
- /// The Context class is also used to control
- /// SSL session caching on the server and client side.
-{
-public:
- typedef Poco::AutoPtr<Context> Ptr;
-
- enum Usage
- {
- CLIENT_USE, /// Context is used by a client.
- SERVER_USE, /// Context is used by a server.
- TLSV1_CLIENT_USE, /// Context is used by a client requiring TLSv1.
- TLSV1_SERVER_USE, /// Context is used by a server requiring TLSv1.
- TLSV1_1_CLIENT_USE, /// Context is used by a client requiring TLSv1.1 (OpenSSL 1.0.0 or newer).
- TLSV1_1_SERVER_USE, /// Context is used by a server requiring TLSv1.1 (OpenSSL 1.0.0 or newer).
- TLSV1_2_CLIENT_USE, /// Context is used by a client requiring TLSv1.2 (OpenSSL 1.0.1 or newer).
- TLSV1_2_SERVER_USE /// Context is used by a server requiring TLSv1.2 (OpenSSL 1.0.1 or newer).
- };
-
- enum VerificationMode
- {
- VERIFY_NONE = SSL_VERIFY_NONE,
- /// Server: The server will not send a client certificate
- /// request to the client, so the client will not send a certificate.
- ///
- /// Client: If not using an anonymous cipher (by default disabled),
- /// the server will send a certificate which will be checked, but
- /// the result of the check will be ignored.
-
- VERIFY_RELAXED = SSL_VERIFY_PEER,
- /// Server: The server sends a client certificate request to the
- /// client. The certificate returned (if any) is checked.
- /// If the verification process fails, the TLS/SSL handshake is
- /// immediately terminated with an alert message containing the
- /// reason for the verification failure.
- ///
- /// Client: The server certificate is verified, if one is provided.
- /// If the verification process fails, the TLS/SSL handshake is
- /// immediately terminated with an alert message containing the
- /// reason for the verification failure.
-
- VERIFY_STRICT = SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT,
- /// Server: If the client did not return a certificate, the TLS/SSL
- /// handshake is immediately terminated with a handshake failure
- /// alert.
- ///
- /// Client: Same as VERIFY_RELAXED.
-
- VERIFY_ONCE = SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE
- /// Server: Only request a client certificate on the initial
- /// TLS/SSL handshake. Do not ask for a client certificate
- /// again in case of a renegotiation.
- ///
- /// Client: Same as VERIFY_RELAXED.
- };
-
- enum Protocols
- {
- PROTO_SSLV2 = 0x01,
- PROTO_SSLV3 = 0x02,
- PROTO_TLSV1 = 0x04,
- PROTO_TLSV1_1 = 0x08,
- PROTO_TLSV1_2 = 0x10
- };
-
- struct NetSSL_API Params
- {
- Params();
- /// Initializes the struct with default values.
-
- std::string privateKeyFile;
- /// Path to the private key file used for encryption.
- /// Can be empty if no private key file is used.
-
- std::string certificateFile;
- /// Path to the certificate file (in PEM format).
- /// If the private key and the certificate are stored in the same file, this
- /// can be empty if privateKeyFile is given.
-
- std::string caLocation;
- /// Path to the file or directory containing the CA/root certificates.
- /// Can be empty if the OpenSSL builtin CA certificates
- /// are used (see loadDefaultCAs).
-
- VerificationMode verificationMode;
- /// Specifies whether and how peer certificates are validated.
- /// Defaults to VERIFY_RELAXED.
-
- int verificationDepth;
- /// Sets the upper limit for verification chain sizes. Verification
- /// will fail if a certificate chain larger than this is encountered.
- /// Defaults to 9.
-
- bool loadDefaultCAs;
- /// Specifies whether the builtin CA certificates from OpenSSL are used.
- /// Defaults to false.
-
- std::string cipherList;
- /// Specifies the supported ciphers in OpenSSL notation.
- /// Defaults to "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH".
-
- std::string dhParamsFile;
- /// Specifies a file containing Diffie-Hellman parameters.
- /// If empty, the default parameters are used.
-
- std::string ecdhCurve;
- /// Specifies the name of the curve to use for ECDH, based
- /// on the curve names specified in RFC 4492.
- /// Defaults to "prime256v1".
- };
-
- Context(Usage usage, const Params& params);
- /// Creates a Context using the given parameters.
- ///
- /// * usage specifies whether the context is used by a client or server.
- /// * params specifies the context parameters.
-
- Context(
- Usage usage,
- const std::string& privateKeyFile,
- const std::string& certificateFile,
- const std::string& caLocation,
- VerificationMode verificationMode = VERIFY_RELAXED,
- int verificationDepth = 9,
- bool loadDefaultCAs = false,
- const std::string& cipherList = "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
- /// Creates a Context.
- ///
- /// * usage specifies whether the context is used by a client or server.
- /// * privateKeyFile contains the path to the private key file used for encryption.
- /// Can be empty if no private key file is used.
- /// * certificateFile contains the path to the certificate file (in PEM format).
- /// If the private key and the certificate are stored in the same file, this
- /// can be empty if privateKeyFile is given.
- /// * caLocation contains the path to the file or directory containing the
- /// CA/root certificates. Can be empty if the OpenSSL builtin CA certificates
- /// are used (see loadDefaultCAs).
- /// * verificationMode specifies whether and how peer certificates are validated.
- /// * verificationDepth sets the upper limit for verification chain sizes. Verification
- /// will fail if a certificate chain larger than this is encountered.
- /// * loadDefaultCAs specifies whether the builtin CA certificates from OpenSSL are used.
- /// * cipherList specifies the supported ciphers in OpenSSL notation.
- ///
- /// Note: If the private key is protected by a passphrase, a PrivateKeyPassphraseHandler
- /// must have been setup with the SSLManager, or the SSLManager's PrivateKeyPassphraseRequired
- /// event must be handled.
-
- Context(
- Usage usage,
- const std::string& caLocation,
- VerificationMode verificationMode = VERIFY_RELAXED,
- int verificationDepth = 9,
- bool loadDefaultCAs = false,
- const std::string& cipherList = "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
- /// Creates a Context.
- ///
- /// * usage specifies whether the context is used by a client or server.
- /// * caLocation contains the path to the file or directory containing the
- /// CA/root certificates. Can be empty if the OpenSSL builtin CA certificates
- /// are used (see loadDefaultCAs).
- /// * verificationMode specifies whether and how peer certificates are validated.
- /// * verificationDepth sets the upper limit for verification chain sizes. Verification
- /// will fail if a certificate chain larger than this is encountered.
- /// * loadDefaultCAs specifies whether the builtin CA certificates from OpenSSL are used.
- /// * cipherList specifies the supported ciphers in OpenSSL notation.
- ///
- /// Note that a private key and/or certificate must be specified with
- /// usePrivateKey()/useCertificate() before the Context can be used.
-
- ~Context();
- /// Destroys the Context.
-
- void useCertificate(const Poco::Crypto::X509Certificate& certificate);
- /// Sets the certificate to be used by the Context.
- ///
- /// To set-up a complete certificate chain, it might be
- /// necessary to call addChainCertificate() to specify
- /// additional certificates.
- ///
- /// Note that useCertificate() must always be called before
- /// usePrivateKey().
-
- void addChainCertificate(const Poco::Crypto::X509Certificate& certificate);
- /// Adds a certificate for certificate chain validation.
-
- void addCertificateAuthority(const Poco::Crypto::X509Certificate& certificate);
- /// Add one trusted certification authority to be used by the Context.
-
- void usePrivateKey(const Poco::Crypto::RSAKey& key);
- /// Sets the private key to be used by the Context.
- ///
- /// Note that useCertificate() must always be called before
- /// usePrivateKey().
- ///
- /// Note: If the private key is protected by a passphrase, a PrivateKeyPassphraseHandler
- /// must have been setup with the SSLManager, or the SSLManager's PrivateKeyPassphraseRequired
- /// event must be handled.
-
- SSL_CTX* sslContext() const;
- /// Returns the underlying OpenSSL SSL Context object.
-
- Usage usage() const;
- /// Returns whether the context is for use by a client or by a server
- /// and whether TLSv1 is required.
-
- bool isForServerUse() const;
- /// Returns true iff the context is for use by a server.
-
- Context::VerificationMode verificationMode() const;
- /// Returns the verification mode.
-
- void enableSessionCache(bool flag = true);
- /// Enable or disable SSL/TLS session caching.
- /// For session caching to work, it must be enabled
- /// on the server, as well as on the client side.
- ///
- /// The default is disabled session caching.
- ///
- /// To enable session caching on the server side, use the
- /// two-argument version of this method to specify
- /// a session ID context.
-
- void enableSessionCache(bool flag, const std::string& sessionIdContext);
- /// Enables or disables SSL/TLS session caching on the server.
- /// For session caching to work, it must be enabled
- /// on the server, as well as on the client side.
- ///
- /// SessionIdContext contains the application's unique
- /// session ID context, which becomes part of each
- /// session identifier generated by the server within this
- /// context. SessionIdContext can be an arbitrary sequence
- /// of bytes with a maximum length of SSL_MAX_SSL_SESSION_ID_LENGTH.
- ///
- /// A non-empty sessionIdContext should be specified even if
- /// session caching is disabled to avoid problems with clients
- /// requesting to reuse a session (e.g. Firefox 3.6).
- ///
- /// This method may only be called on SERVER_USE Context objects.
-
- bool sessionCacheEnabled() const;
- /// Returns true iff the session cache is enabled.
-
- void setSessionCacheSize(std::size_t size);
- /// Sets the maximum size of the server session cache, in number of
- /// sessions. The default size (according to OpenSSL documentation)
- /// is 1024*20, which may be too large for many applications,
- /// especially on embedded platforms with limited memory.
- ///
- /// Specifying a size of 0 will set an unlimited cache size.
- ///
- /// This method may only be called on SERVER_USE Context objects.
-
- std::size_t getSessionCacheSize() const;
- /// Returns the current maximum size of the server session cache.
- ///
- /// This method may only be called on SERVER_USE Context objects.
-
- void setSessionTimeout(long seconds);
- /// Sets the timeout (in seconds) of cached sessions on the server.
- /// A cached session will be removed from the cache if it has
- /// not been used for the given number of seconds.
- ///
- /// This method may only be called on SERVER_USE Context objects.
-
- long getSessionTimeout() const;
- /// Returns the timeout (in seconds) of cached sessions on the server.
- ///
- /// This method may only be called on SERVER_USE Context objects.
-
- void flushSessionCache();
- /// Flushes the SSL session cache on the server.
- ///
- /// This method may only be called on SERVER_USE Context objects.
-
- void enableExtendedCertificateVerification(bool flag = true);
- /// Enable or disable the automatic post-connection
- /// extended certificate verification.
- ///
- /// See X509Certificate::verify() for more information.
-
- bool extendedCertificateVerificationEnabled() const;
- /// Returns true iff automatic extended certificate
- /// verification is enabled.
-
- void disableStatelessSessionResumption();
- /// Newer versions of OpenSSL support RFC 4507 tickets for stateless
- /// session resumption.
- ///
- /// The feature can be disabled by calling this method.
-
- void disableProtocols(int protocols);
- /// Disables the given protocols.
- ///
- /// The protocols to be disabled are specified by OR-ing
- /// values from the Protocols enumeration, e.g.:
- ///
- /// context.disableProtocols(PROTO_SSLV2 | PROTO_SSLV3);
-
- void preferServerCiphers();
- /// When choosing a cipher, use the server's preferences instead of the client
- /// preferences. When not called, the SSL server will always follow the clients
- /// preferences. When called, the SSL/TLS server will choose following its own
- /// preferences.
-
-private:
- void init(const Params& params);
- /// Initializes the Context with the given parameters.
-
- void initDH(const std::string& dhFile);
- /// Initializes the Context with Diffie-Hellman parameters.
-
- void initECDH(const std::string& curve);
- /// Initializes the Context with Elliptic-Curve Diffie-Hellman key
- /// exchange curve parameters.
-
- void createSSLContext();
- /// Create a SSL_CTX object according to Context configuration.
-
- Usage _usage;
- VerificationMode _mode;
- SSL_CTX* _pSSLContext;
- bool _extendedCertificateVerification;
-};
-
-
-//
-// inlines
-//
-inline Context::Usage Context::usage() const
-{
- return _usage;
-}
-
-
-inline bool Context::isForServerUse() const
-{
- return _usage == SERVER_USE
- || _usage == TLSV1_SERVER_USE
- || _usage == TLSV1_1_SERVER_USE
- || _usage == TLSV1_2_SERVER_USE;
-}
-
-
-inline Context::VerificationMode Context::verificationMode() const
-{
- return _mode;
-}
-
-
-inline SSL_CTX* Context::sslContext() const
-{
- return _pSSLContext;
-}
-
-
-inline bool Context::extendedCertificateVerificationEnabled() const
-{
- return _extendedCertificateVerification;
-}
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_Context_INCLUDED
+//
+// Context.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: Context
+//
+// Definition of the Context class.
+//
+// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_Context_INCLUDED
+#define NetSSL_Context_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/SocketDefs.h"
+#include "Poco/Crypto/X509Certificate.h"
+#include "Poco/Crypto/RSAKey.h"
+#include "Poco/RefCountedObject.h"
+#include "Poco/AutoPtr.h"
+#include <openssl/ssl.h>
+#include <cstdlib>
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API Context: public Poco::RefCountedObject
+ /// This class encapsulates context information for
+ /// an SSL server or client, such as the certificate
+ /// verification mode and the location of certificates
+ /// and private key files, as well as the list of
+ /// supported ciphers.
+ ///
+ /// The Context class is also used to control
+ /// SSL session caching on the server and client side.
+{
+public:
+ typedef Poco::AutoPtr<Context> Ptr;
+
+ enum Usage
+ {
+ CLIENT_USE, /// Context is used by a client.
+ SERVER_USE, /// Context is used by a server.
+ TLSV1_CLIENT_USE, /// Context is used by a client requiring TLSv1.
+ TLSV1_SERVER_USE, /// Context is used by a server requiring TLSv1.
+ TLSV1_1_CLIENT_USE, /// Context is used by a client requiring TLSv1.1 (OpenSSL 1.0.0 or newer).
+ TLSV1_1_SERVER_USE, /// Context is used by a server requiring TLSv1.1 (OpenSSL 1.0.0 or newer).
+ TLSV1_2_CLIENT_USE, /// Context is used by a client requiring TLSv1.2 (OpenSSL 1.0.1 or newer).
+ TLSV1_2_SERVER_USE /// Context is used by a server requiring TLSv1.2 (OpenSSL 1.0.1 or newer).
+ };
+
+ enum VerificationMode
+ {
+ VERIFY_NONE = SSL_VERIFY_NONE,
+ /// Server: The server will not send a client certificate
+ /// request to the client, so the client will not send a certificate.
+ ///
+ /// Client: If not using an anonymous cipher (by default disabled),
+ /// the server will send a certificate which will be checked, but
+ /// the result of the check will be ignored.
+
+ VERIFY_RELAXED = SSL_VERIFY_PEER,
+ /// Server: The server sends a client certificate request to the
+ /// client. The certificate returned (if any) is checked.
+ /// If the verification process fails, the TLS/SSL handshake is
+ /// immediately terminated with an alert message containing the
+ /// reason for the verification failure.
+ ///
+ /// Client: The server certificate is verified, if one is provided.
+ /// If the verification process fails, the TLS/SSL handshake is
+ /// immediately terminated with an alert message containing the
+ /// reason for the verification failure.
+
+ VERIFY_STRICT = SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT,
+ /// Server: If the client did not return a certificate, the TLS/SSL
+ /// handshake is immediately terminated with a handshake failure
+ /// alert.
+ ///
+ /// Client: Same as VERIFY_RELAXED.
+
+ VERIFY_ONCE = SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE
+ /// Server: Only request a client certificate on the initial
+ /// TLS/SSL handshake. Do not ask for a client certificate
+ /// again in case of a renegotiation.
+ ///
+ /// Client: Same as VERIFY_RELAXED.
+ };
+
+ enum Protocols
+ {
+ PROTO_SSLV2 = 0x01,
+ PROTO_SSLV3 = 0x02,
+ PROTO_TLSV1 = 0x04,
+ PROTO_TLSV1_1 = 0x08,
+ PROTO_TLSV1_2 = 0x10
+ };
+
+ struct NetSSL_API Params
+ {
+ Params();
+ /// Initializes the struct with default values.
+
+ std::string privateKeyFile;
+ /// Path to the private key file used for encryption.
+ /// Can be empty if no private key file is used.
+
+ std::string certificateFile;
+ /// Path to the certificate file (in PEM format).
+ /// If the private key and the certificate are stored in the same file, this
+ /// can be empty if privateKeyFile is given.
+
+ std::string caLocation;
+ /// Path to the file or directory containing the CA/root certificates.
+ /// Can be empty if the OpenSSL builtin CA certificates
+ /// are used (see loadDefaultCAs).
+
+ VerificationMode verificationMode;
+ /// Specifies whether and how peer certificates are validated.
+ /// Defaults to VERIFY_RELAXED.
+
+ int verificationDepth;
+ /// Sets the upper limit for verification chain sizes. Verification
+ /// will fail if a certificate chain larger than this is encountered.
+ /// Defaults to 9.
+
+ bool loadDefaultCAs;
+ /// Specifies whether the builtin CA certificates from OpenSSL are used.
+ /// Defaults to false.
+
+ std::string cipherList;
+ /// Specifies the supported ciphers in OpenSSL notation.
+ /// Defaults to "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH".
+
+ std::string dhParamsFile;
+ /// Specifies a file containing Diffie-Hellman parameters.
+ /// If empty, the default parameters are used.
+
+ std::string ecdhCurve;
+ /// Specifies the name of the curve to use for ECDH, based
+ /// on the curve names specified in RFC 4492.
+ /// Defaults to "prime256v1".
+ };
+
+ Context(Usage usage, const Params& params);
+ /// Creates a Context using the given parameters.
+ ///
+ /// * usage specifies whether the context is used by a client or server.
+ /// * params specifies the context parameters.
+
+ Context(
+ Usage usage,
+ const std::string& privateKeyFile,
+ const std::string& certificateFile,
+ const std::string& caLocation,
+ VerificationMode verificationMode = VERIFY_RELAXED,
+ int verificationDepth = 9,
+ bool loadDefaultCAs = false,
+ const std::string& cipherList = "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
+ /// Creates a Context.
+ ///
+ /// * usage specifies whether the context is used by a client or server.
+ /// * privateKeyFile contains the path to the private key file used for encryption.
+ /// Can be empty if no private key file is used.
+ /// * certificateFile contains the path to the certificate file (in PEM format).
+ /// If the private key and the certificate are stored in the same file, this
+ /// can be empty if privateKeyFile is given.
+ /// * caLocation contains the path to the file or directory containing the
+ /// CA/root certificates. Can be empty if the OpenSSL builtin CA certificates
+ /// are used (see loadDefaultCAs).
+ /// * verificationMode specifies whether and how peer certificates are validated.
+ /// * verificationDepth sets the upper limit for verification chain sizes. Verification
+ /// will fail if a certificate chain larger than this is encountered.
+ /// * loadDefaultCAs specifies whether the builtin CA certificates from OpenSSL are used.
+ /// * cipherList specifies the supported ciphers in OpenSSL notation.
+ ///
+ /// Note: If the private key is protected by a passphrase, a PrivateKeyPassphraseHandler
+ /// must have been setup with the SSLManager, or the SSLManager's PrivateKeyPassphraseRequired
+ /// event must be handled.
+
+ Context(
+ Usage usage,
+ const std::string& caLocation,
+ VerificationMode verificationMode = VERIFY_RELAXED,
+ int verificationDepth = 9,
+ bool loadDefaultCAs = false,
+ const std::string& cipherList = "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
+ /// Creates a Context.
+ ///
+ /// * usage specifies whether the context is used by a client or server.
+ /// * caLocation contains the path to the file or directory containing the
+ /// CA/root certificates. Can be empty if the OpenSSL builtin CA certificates
+ /// are used (see loadDefaultCAs).
+ /// * verificationMode specifies whether and how peer certificates are validated.
+ /// * verificationDepth sets the upper limit for verification chain sizes. Verification
+ /// will fail if a certificate chain larger than this is encountered.
+ /// * loadDefaultCAs specifies whether the builtin CA certificates from OpenSSL are used.
+ /// * cipherList specifies the supported ciphers in OpenSSL notation.
+ ///
+ /// Note that a private key and/or certificate must be specified with
+ /// usePrivateKey()/useCertificate() before the Context can be used.
+
+ ~Context();
+ /// Destroys the Context.
+
+ void useCertificate(const Poco::Crypto::X509Certificate& certificate);
+ /// Sets the certificate to be used by the Context.
+ ///
+ /// To set-up a complete certificate chain, it might be
+ /// necessary to call addChainCertificate() to specify
+ /// additional certificates.
+ ///
+ /// Note that useCertificate() must always be called before
+ /// usePrivateKey().
+
+ void addChainCertificate(const Poco::Crypto::X509Certificate& certificate);
+ /// Adds a certificate for certificate chain validation.
+
+ void addCertificateAuthority(const Poco::Crypto::X509Certificate& certificate);
+ /// Add one trusted certification authority to be used by the Context.
+
+ void usePrivateKey(const Poco::Crypto::RSAKey& key);
+ /// Sets the private key to be used by the Context.
+ ///
+ /// Note that useCertificate() must always be called before
+ /// usePrivateKey().
+ ///
+ /// Note: If the private key is protected by a passphrase, a PrivateKeyPassphraseHandler
+ /// must have been setup with the SSLManager, or the SSLManager's PrivateKeyPassphraseRequired
+ /// event must be handled.
+
+ SSL_CTX* sslContext() const;
+ /// Returns the underlying OpenSSL SSL Context object.
+
+ Usage usage() const;
+ /// Returns whether the context is for use by a client or by a server
+ /// and whether TLSv1 is required.
+
+ bool isForServerUse() const;
+ /// Returns true iff the context is for use by a server.
+
+ Context::VerificationMode verificationMode() const;
+ /// Returns the verification mode.
+
+ void enableSessionCache(bool flag = true);
+ /// Enable or disable SSL/TLS session caching.
+ /// For session caching to work, it must be enabled
+ /// on the server, as well as on the client side.
+ ///
+ /// The default is disabled session caching.
+ ///
+ /// To enable session caching on the server side, use the
+ /// two-argument version of this method to specify
+ /// a session ID context.
+
+ void enableSessionCache(bool flag, const std::string& sessionIdContext);
+ /// Enables or disables SSL/TLS session caching on the server.
+ /// For session caching to work, it must be enabled
+ /// on the server, as well as on the client side.
+ ///
+ /// SessionIdContext contains the application's unique
+ /// session ID context, which becomes part of each
+ /// session identifier generated by the server within this
+ /// context. SessionIdContext can be an arbitrary sequence
+ /// of bytes with a maximum length of SSL_MAX_SSL_SESSION_ID_LENGTH.
+ ///
+ /// A non-empty sessionIdContext should be specified even if
+ /// session caching is disabled to avoid problems with clients
+ /// requesting to reuse a session (e.g. Firefox 3.6).
+ ///
+ /// This method may only be called on SERVER_USE Context objects.
+
+ bool sessionCacheEnabled() const;
+ /// Returns true iff the session cache is enabled.
+
+ void setSessionCacheSize(std::size_t size);
+ /// Sets the maximum size of the server session cache, in number of
+ /// sessions. The default size (according to OpenSSL documentation)
+ /// is 1024*20, which may be too large for many applications,
+ /// especially on embedded platforms with limited memory.
+ ///
+ /// Specifying a size of 0 will set an unlimited cache size.
+ ///
+ /// This method may only be called on SERVER_USE Context objects.
+
+ std::size_t getSessionCacheSize() const;
+ /// Returns the current maximum size of the server session cache.
+ ///
+ /// This method may only be called on SERVER_USE Context objects.
+
+ void setSessionTimeout(long seconds);
+ /// Sets the timeout (in seconds) of cached sessions on the server.
+ /// A cached session will be removed from the cache if it has
+ /// not been used for the given number of seconds.
+ ///
+ /// This method may only be called on SERVER_USE Context objects.
+
+ long getSessionTimeout() const;
+ /// Returns the timeout (in seconds) of cached sessions on the server.
+ ///
+ /// This method may only be called on SERVER_USE Context objects.
+
+ void flushSessionCache();
+ /// Flushes the SSL session cache on the server.
+ ///
+ /// This method may only be called on SERVER_USE Context objects.
+
+ void enableExtendedCertificateVerification(bool flag = true);
+ /// Enable or disable the automatic post-connection
+ /// extended certificate verification.
+ ///
+ /// See X509Certificate::verify() for more information.
+
+ bool extendedCertificateVerificationEnabled() const;
+ /// Returns true iff automatic extended certificate
+ /// verification is enabled.
+
+ void disableStatelessSessionResumption();
+ /// Newer versions of OpenSSL support RFC 4507 tickets for stateless
+ /// session resumption.
+ ///
+ /// The feature can be disabled by calling this method.
+
+ void disableProtocols(int protocols);
+ /// Disables the given protocols.
+ ///
+ /// The protocols to be disabled are specified by OR-ing
+ /// values from the Protocols enumeration, e.g.:
+ ///
+ /// context.disableProtocols(PROTO_SSLV2 | PROTO_SSLV3);
+
+ void preferServerCiphers();
+ /// When choosing a cipher, use the server's preferences instead of the client
+ /// preferences. When not called, the SSL server will always follow the clients
+ /// preferences. When called, the SSL/TLS server will choose following its own
+ /// preferences.
+
+private:
+ void init(const Params& params);
+ /// Initializes the Context with the given parameters.
+
+ void initDH(const std::string& dhFile);
+ /// Initializes the Context with Diffie-Hellman parameters.
+
+ void initECDH(const std::string& curve);
+ /// Initializes the Context with Elliptic-Curve Diffie-Hellman key
+ /// exchange curve parameters.
+
+ void createSSLContext();
+ /// Create a SSL_CTX object according to Context configuration.
+
+ Usage _usage;
+ VerificationMode _mode;
+ SSL_CTX* _pSSLContext;
+ bool _extendedCertificateVerification;
+};
+
+
+//
+// inlines
+//
+inline Context::Usage Context::usage() const
+{
+ return _usage;
+}
+
+
+inline bool Context::isForServerUse() const
+{
+ return _usage == SERVER_USE
+ || _usage == TLSV1_SERVER_USE
+ || _usage == TLSV1_1_SERVER_USE
+ || _usage == TLSV1_2_SERVER_USE;
+}
+
+
+inline Context::VerificationMode Context::verificationMode() const
+{
+ return _mode;
+}
+
+
+inline SSL_CTX* Context::sslContext() const
+{
+ return _pSSLContext;
+}
+
+
+inline bool Context::extendedCertificateVerificationEnabled() const
+{
+ return _extendedCertificateVerification;
+}
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_Context_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSClientSession.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSClientSession.h
index ff0d89994c..ef77d8a922 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSClientSession.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSClientSession.h
@@ -1,165 +1,165 @@
-//
-// HTTPSClientSession.h
-//
-// Library: NetSSL_OpenSSL
-// Package: HTTPSClient
-// Module: HTTPSClientSession
-//
-// Definition of the HTTPSClientSession class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_HTTPSClientSession_INCLUDED
-#define NetSSL_HTTPSClientSession_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/Utility.h"
-#include "Poco/Net/HTTPClientSession.h"
-#include "Poco/Net/Context.h"
-#include "Poco/Net/Session.h"
-#include "Poco/Net/X509Certificate.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class SecureStreamSocket;
-class HTTPRequest;
-class HTTPResponse;
-
-
-class NetSSL_API HTTPSClientSession: public HTTPClientSession
- /// This class implements the client-side of
- /// a HTTPS session.
- ///
- /// To send a HTTPS request to a HTTPS server, first
- /// instantiate a HTTPSClientSession object and
- /// specify the server's host name and port number.
- ///
- /// Then create a HTTPRequest object, fill it accordingly,
- /// and pass it as argument to the sendRequest() method.
- ///
- /// sendRequest() will return an output stream that can
- /// be used to send the request body, if there is any.
- ///
- /// After you are done sending the request body, create
- /// a HTTPResponse object and pass it to receiveResponse().
- ///
- /// This will return an input stream that can be used to
- /// read the response body.
- ///
- /// See RFC 2616 <http://www.faqs.org/rfcs/rfc2616.html> for more
- /// information about the HTTP protocol.
- ///
- /// Note that sending requests that neither contain a content length
- /// field in the header nor are using chunked transfer encoding will
- /// result in a SSL protocol violation, as the framework shuts down
- /// the socket after sending the message body. No orderly SSL shutdown
- /// will be performed in this case.
- ///
- /// If session caching has been enabled for the Context object passed
- /// to the HTTPSClientSession, the HTTPSClientSession class will
- /// attempt to reuse a previously obtained Session object in
- /// case of a reconnect.
-{
-public:
- enum
- {
- HTTPS_PORT = 443
- };
-
- HTTPSClientSession();
- /// Creates an unconnected HTTPSClientSession.
-
- explicit HTTPSClientSession(const SecureStreamSocket& socket);
- /// Creates a HTTPSClientSession using the given socket.
- /// The socket must not be connected. The session
- /// takes ownership of the socket.
-
- HTTPSClientSession(const SecureStreamSocket& socket, Session::Ptr pSession);
- /// Creates a HTTPSClientSession using the given socket.
- /// The socket must not be connected. The session
- /// takes ownership of the socket.
- ///
- /// The given Session is reused, if possible (client session
- /// caching is enabled for the given Context, and the server
- /// agrees to reuse the session).
-
- HTTPSClientSession(const std::string& host, Poco::UInt16 port = HTTPS_PORT);
- /// Creates a HTTPSClientSession using the given host and port.
-
- explicit HTTPSClientSession(Context::Ptr pContext);
- /// Creates an unconnected HTTPSClientSession, using the
- /// give SSL context.
-
- HTTPSClientSession(Context::Ptr pContext, Session::Ptr pSession);
- /// Creates an unconnected HTTPSClientSession, using the
- /// give SSL context.
- ///
- /// The given Session is reused, if possible (client session
- /// caching is enabled for the given Context, and the server
- /// agrees to reuse the session).
-
- HTTPSClientSession(const std::string& host, Poco::UInt16 port, Context::Ptr pContext);
- /// Creates a HTTPSClientSession using the given host and port,
- /// using the given SSL context.
-
- HTTPSClientSession(const std::string& host, Poco::UInt16 port, Context::Ptr pContext, Session::Ptr pSession);
- /// Creates a HTTPSClientSession using the given host and port,
- /// using the given SSL context.
- ///
- /// The given Session is reused, if possible (client session
- /// caching is enabled for the given Context, and the server
- /// agrees to reuse the session).
-
- ~HTTPSClientSession();
- /// Destroys the HTTPSClientSession and closes
- /// the underlying socket.
-
- bool secure() const;
- /// Return true iff the session uses SSL or TLS,
- /// or false otherwise.
-
- X509Certificate serverCertificate();
- /// Returns the server's certificate.
- ///
- /// The certificate is available after the first request has been sent.
-
- Session::Ptr sslSession();
- /// Returns the SSL Session object for the current
- /// connection, if session caching has been enabled for
- /// the HTTPSClientSession's Context. A null pointer is
- /// returned otherwise.
- ///
- /// The Session object can be obtained after the first request has
- /// been sent.
-
- // HTTPSession
- void abort();
-
-protected:
- void connect(const SocketAddress& address);
- std::string proxyRequestPrefix() const;
- void proxyAuthenticate(HTTPRequest& request);
- int read(char* buffer, std::streamsize length);
-
-private:
- HTTPSClientSession(const HTTPSClientSession&);
- HTTPSClientSession& operator = (const HTTPSClientSession&);
-
- Context::Ptr _pContext;
- Session::Ptr _pSession;
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // Net_HTTPSClientSession_INCLUDED
+//
+// HTTPSClientSession.h
+//
+// Library: NetSSL_OpenSSL
+// Package: HTTPSClient
+// Module: HTTPSClientSession
+//
+// Definition of the HTTPSClientSession class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_HTTPSClientSession_INCLUDED
+#define NetSSL_HTTPSClientSession_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/Utility.h"
+#include "Poco/Net/HTTPClientSession.h"
+#include "Poco/Net/Context.h"
+#include "Poco/Net/Session.h"
+#include "Poco/Net/X509Certificate.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class SecureStreamSocket;
+class HTTPRequest;
+class HTTPResponse;
+
+
+class NetSSL_API HTTPSClientSession: public HTTPClientSession
+ /// This class implements the client-side of
+ /// a HTTPS session.
+ ///
+ /// To send a HTTPS request to a HTTPS server, first
+ /// instantiate a HTTPSClientSession object and
+ /// specify the server's host name and port number.
+ ///
+ /// Then create a HTTPRequest object, fill it accordingly,
+ /// and pass it as argument to the sendRequest() method.
+ ///
+ /// sendRequest() will return an output stream that can
+ /// be used to send the request body, if there is any.
+ ///
+ /// After you are done sending the request body, create
+ /// a HTTPResponse object and pass it to receiveResponse().
+ ///
+ /// This will return an input stream that can be used to
+ /// read the response body.
+ ///
+ /// See RFC 2616 <http://www.faqs.org/rfcs/rfc2616.html> for more
+ /// information about the HTTP protocol.
+ ///
+ /// Note that sending requests that neither contain a content length
+ /// field in the header nor are using chunked transfer encoding will
+ /// result in a SSL protocol violation, as the framework shuts down
+ /// the socket after sending the message body. No orderly SSL shutdown
+ /// will be performed in this case.
+ ///
+ /// If session caching has been enabled for the Context object passed
+ /// to the HTTPSClientSession, the HTTPSClientSession class will
+ /// attempt to reuse a previously obtained Session object in
+ /// case of a reconnect.
+{
+public:
+ enum
+ {
+ HTTPS_PORT = 443
+ };
+
+ HTTPSClientSession();
+ /// Creates an unconnected HTTPSClientSession.
+
+ explicit HTTPSClientSession(const SecureStreamSocket& socket);
+ /// Creates a HTTPSClientSession using the given socket.
+ /// The socket must not be connected. The session
+ /// takes ownership of the socket.
+
+ HTTPSClientSession(const SecureStreamSocket& socket, Session::Ptr pSession);
+ /// Creates a HTTPSClientSession using the given socket.
+ /// The socket must not be connected. The session
+ /// takes ownership of the socket.
+ ///
+ /// The given Session is reused, if possible (client session
+ /// caching is enabled for the given Context, and the server
+ /// agrees to reuse the session).
+
+ HTTPSClientSession(const std::string& host, Poco::UInt16 port = HTTPS_PORT);
+ /// Creates a HTTPSClientSession using the given host and port.
+
+ explicit HTTPSClientSession(Context::Ptr pContext);
+ /// Creates an unconnected HTTPSClientSession, using the
+ /// give SSL context.
+
+ HTTPSClientSession(Context::Ptr pContext, Session::Ptr pSession);
+ /// Creates an unconnected HTTPSClientSession, using the
+ /// give SSL context.
+ ///
+ /// The given Session is reused, if possible (client session
+ /// caching is enabled for the given Context, and the server
+ /// agrees to reuse the session).
+
+ HTTPSClientSession(const std::string& host, Poco::UInt16 port, Context::Ptr pContext);
+ /// Creates a HTTPSClientSession using the given host and port,
+ /// using the given SSL context.
+
+ HTTPSClientSession(const std::string& host, Poco::UInt16 port, Context::Ptr pContext, Session::Ptr pSession);
+ /// Creates a HTTPSClientSession using the given host and port,
+ /// using the given SSL context.
+ ///
+ /// The given Session is reused, if possible (client session
+ /// caching is enabled for the given Context, and the server
+ /// agrees to reuse the session).
+
+ ~HTTPSClientSession();
+ /// Destroys the HTTPSClientSession and closes
+ /// the underlying socket.
+
+ bool secure() const;
+ /// Return true iff the session uses SSL or TLS,
+ /// or false otherwise.
+
+ X509Certificate serverCertificate();
+ /// Returns the server's certificate.
+ ///
+ /// The certificate is available after the first request has been sent.
+
+ Session::Ptr sslSession();
+ /// Returns the SSL Session object for the current
+ /// connection, if session caching has been enabled for
+ /// the HTTPSClientSession's Context. A null pointer is
+ /// returned otherwise.
+ ///
+ /// The Session object can be obtained after the first request has
+ /// been sent.
+
+ // HTTPSession
+ void abort();
+
+protected:
+ void connect(const SocketAddress& address);
+ std::string proxyRequestPrefix() const;
+ void proxyAuthenticate(HTTPRequest& request);
+ int read(char* buffer, std::streamsize length);
+
+private:
+ HTTPSClientSession(const HTTPSClientSession&);
+ HTTPSClientSession& operator = (const HTTPSClientSession&);
+
+ Context::Ptr _pContext;
+ Session::Ptr _pSession;
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // Net_HTTPSClientSession_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSSessionInstantiator.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSSessionInstantiator.h
index 214e2819b6..6fd4a3179b 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSSessionInstantiator.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSSessionInstantiator.h
@@ -1,65 +1,65 @@
-//
-// HTTPSSessionInstantiator.h
-//
-// Library: NetSSL_OpenSSL
-// Package: HTTPSClient
-// Module: HTTPSSessionInstantiator
-//
-// Definition of the HTTPSSessionInstantiator class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef Net_HTTPSSessionInstantiator_INCLUDED
-#define Net_HTTPSSessionInstantiator_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/Context.h"
-#include "Poco/Net/Utility.h"
-#include "Poco/Net/HTTPSessionInstantiator.h"
-#include "Poco/URI.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API HTTPSSessionInstantiator: public HTTPSessionInstantiator
- /// The HTTPSessionInstantiator for HTTPSClientSession.
-{
-public:
- HTTPSSessionInstantiator();
- /// Creates the HTTPSSessionInstantiator.
-
- HTTPSSessionInstantiator(Context::Ptr pContext);
- /// Creates the HTTPSSessionInstantiator using the given SSL context.
-
- ~HTTPSSessionInstantiator();
- /// Destroys the HTTPSSessionInstantiator.
-
- HTTPClientSession* createClientSession(const Poco::URI& uri);
- /// Creates a HTTPSClientSession for the given URI.
-
- static void registerInstantiator();
- /// Registers the instantiator with the global HTTPSessionFactory.
-
- static void registerInstantiator(Context::Ptr pContext);
- /// Registers the instantiator with the global HTTPSessionFactory using the given SSL context.
-
- static void unregisterInstantiator();
- /// Unregisters the factory with the global HTTPSessionFactory.
-
-private:
- Context::Ptr _pContext;
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // Net_HTTPSSessionInstantiator_INCLUDED
+//
+// HTTPSSessionInstantiator.h
+//
+// Library: NetSSL_OpenSSL
+// Package: HTTPSClient
+// Module: HTTPSSessionInstantiator
+//
+// Definition of the HTTPSSessionInstantiator class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef Net_HTTPSSessionInstantiator_INCLUDED
+#define Net_HTTPSSessionInstantiator_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/Context.h"
+#include "Poco/Net/Utility.h"
+#include "Poco/Net/HTTPSessionInstantiator.h"
+#include "Poco/URI.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API HTTPSSessionInstantiator: public HTTPSessionInstantiator
+ /// The HTTPSessionInstantiator for HTTPSClientSession.
+{
+public:
+ HTTPSSessionInstantiator();
+ /// Creates the HTTPSSessionInstantiator.
+
+ HTTPSSessionInstantiator(Context::Ptr pContext);
+ /// Creates the HTTPSSessionInstantiator using the given SSL context.
+
+ ~HTTPSSessionInstantiator();
+ /// Destroys the HTTPSSessionInstantiator.
+
+ HTTPClientSession* createClientSession(const Poco::URI& uri);
+ /// Creates a HTTPSClientSession for the given URI.
+
+ static void registerInstantiator();
+ /// Registers the instantiator with the global HTTPSessionFactory.
+
+ static void registerInstantiator(Context::Ptr pContext);
+ /// Registers the instantiator with the global HTTPSessionFactory using the given SSL context.
+
+ static void unregisterInstantiator();
+ /// Unregisters the factory with the global HTTPSessionFactory.
+
+private:
+ Context::Ptr _pContext;
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // Net_HTTPSSessionInstantiator_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSStreamFactory.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSStreamFactory.h
index 2fd3515c88..fe8983d03d 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSStreamFactory.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/HTTPSStreamFactory.h
@@ -1,83 +1,83 @@
-//
-// HTTPSStreamFactory.h
-//
-// Library: NetSSL_OpenSSL
-// Package: HTTPSClient
-// Module: HTTPSStreamFactory
-//
-// Definition of the HTTPSStreamFactory class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_HTTPSStreamFactory_INCLUDED
-#define NetSSL_HTTPSStreamFactory_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/HTTPSession.h"
-#include "Poco/URIStreamFactory.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API HTTPSStreamFactory: public Poco::URIStreamFactory
- /// An implementation of the URIStreamFactory interface
- /// that handles secure Hyper-Text Transfer Protocol (https) URIs.
-{
-public:
- HTTPSStreamFactory();
- /// Creates the HTTPSStreamFactory.
-
- HTTPSStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort = HTTPSession::HTTP_PORT);
- /// Creates the HTTPSStreamFactory.
- ///
- /// HTTPS connections will use the given proxy.
-
- HTTPSStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort, const std::string& proxyUsername, const std::string& proxyPassword);
- /// Creates the HTTPSStreamFactory.
- ///
- /// HTTPS connections will use the given proxy and
- /// will be authorized against the proxy using Basic authentication
- /// with the given proxyUsername and proxyPassword.
-
- ~HTTPSStreamFactory();
- /// Destroys the HTTPSStreamFactory.
-
- std::istream* open(const Poco::URI& uri);
- /// Creates and opens a HTTPS stream for the given URI.
- /// The URI must be a https://... URI.
- ///
- /// Throws a NetException if anything goes wrong.
-
- static void registerFactory();
- /// Registers the HTTPSStreamFactory with the
- /// default URIStreamOpener instance.
-
- static void unregisterFactory();
- /// Unregisters the HTTPSStreamFactory with the
- /// default URIStreamOpener instance.
-
-private:
- enum
- {
- MAX_REDIRECTS = 10
- };
-
- std::string _proxyHost;
- Poco::UInt16 _proxyPort;
- std::string _proxyUsername;
- std::string _proxyPassword;
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // Net_HTTPSStreamFactory_INCLUDED
+//
+// HTTPSStreamFactory.h
+//
+// Library: NetSSL_OpenSSL
+// Package: HTTPSClient
+// Module: HTTPSStreamFactory
+//
+// Definition of the HTTPSStreamFactory class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_HTTPSStreamFactory_INCLUDED
+#define NetSSL_HTTPSStreamFactory_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/HTTPSession.h"
+#include "Poco/URIStreamFactory.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API HTTPSStreamFactory: public Poco::URIStreamFactory
+ /// An implementation of the URIStreamFactory interface
+ /// that handles secure Hyper-Text Transfer Protocol (https) URIs.
+{
+public:
+ HTTPSStreamFactory();
+ /// Creates the HTTPSStreamFactory.
+
+ HTTPSStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort = HTTPSession::HTTP_PORT);
+ /// Creates the HTTPSStreamFactory.
+ ///
+ /// HTTPS connections will use the given proxy.
+
+ HTTPSStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort, const std::string& proxyUsername, const std::string& proxyPassword);
+ /// Creates the HTTPSStreamFactory.
+ ///
+ /// HTTPS connections will use the given proxy and
+ /// will be authorized against the proxy using Basic authentication
+ /// with the given proxyUsername and proxyPassword.
+
+ ~HTTPSStreamFactory();
+ /// Destroys the HTTPSStreamFactory.
+
+ std::istream* open(const Poco::URI& uri);
+ /// Creates and opens a HTTPS stream for the given URI.
+ /// The URI must be a https://... URI.
+ ///
+ /// Throws a NetException if anything goes wrong.
+
+ static void registerFactory();
+ /// Registers the HTTPSStreamFactory with the
+ /// default URIStreamOpener instance.
+
+ static void unregisterFactory();
+ /// Unregisters the HTTPSStreamFactory with the
+ /// default URIStreamOpener instance.
+
+private:
+ enum
+ {
+ MAX_REDIRECTS = 10
+ };
+
+ std::string _proxyHost;
+ Poco::UInt16 _proxyPort;
+ std::string _proxyUsername;
+ std::string _proxyPassword;
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // Net_HTTPSStreamFactory_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/InvalidCertificateHandler.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/InvalidCertificateHandler.h
index e10faf3cdb..58194d9bec 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/InvalidCertificateHandler.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/InvalidCertificateHandler.h
@@ -1,80 +1,80 @@
-//
-// InvalidCertificateHandler.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: InvalidCertificateHandler
-//
-// Definition of the InvalidCertificateHandler class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_InvalidCertificateHandler_INCLUDED
-#define NetSSL_InvalidCertificateHandler_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/VerificationErrorArgs.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API InvalidCertificateHandler
- /// A InvalidCertificateHandler is invoked whenever an error occurs verifying the certificate. It allows the user
- /// to inspect and accept/reject the certificate.
- /// One can install one's own InvalidCertificateHandler by implementing this interface. Note that
- /// in the implementation file of the subclass the following code must be present (assuming you use the namespace My_API
- /// and the name of your handler class is MyGuiHandler):
- ///
- /// #include "Poco/Net/CertificateHandlerFactory.h"
- /// ...
- /// POCO_REGISTER_CHFACTORY(My_API, MyGuiHandler)
- ///
- /// One can either set the handler directly in the startup code of the main method of ones application by calling
- ///
- /// SSLManager::instance().initialize(mypassphraseHandler, myguiHandler, mySSLContext)
- ///
- /// or in case one uses Poco::Util::Application one can rely on an XML configuration and put the following entry
- /// under the path openSSL.invalidCertificateHandler:
- ///
- /// <invalidCertificateHandler>
- /// <name>MyGuiHandler<name>
- /// <options>
- /// [...] // Put optional config params for the handler here
- /// </options>
- /// </invalidCertificateHandler>
- ///
- /// Note that the name of the InvalidCertificateHandler must be same as the one provided to the POCO_REGISTER_CHFACTORY macro.
-{
-public:
- InvalidCertificateHandler(bool handleErrorsOnServerSide);
- /// Creates the InvalidCertificateHandler.
- ///
- /// Set handleErrorsOnServerSide to true if the certificate handler is used on the server side.
- /// Automatically registers at one of the SSLManager::VerificationError events.
-
- virtual ~InvalidCertificateHandler();
- /// Destroys the InvalidCertificateHandler.
-
- virtual void onInvalidCertificate(const void* pSender, VerificationErrorArgs& errorCert) = 0;
- /// Receives the questionable certificate in parameter errorCert. If one wants to accept the
- /// certificate, call errorCert.setIgnoreError(true).
-
-protected:
- bool _handleErrorsOnServerSide;
- /// Stores if the certificate handler gets invoked by the server (i.e. a client certificate is wrong)
- /// or the client (a server certificate is wrong)
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_InvalidCertificateHandler_INCLUDED
+//
+// InvalidCertificateHandler.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: InvalidCertificateHandler
+//
+// Definition of the InvalidCertificateHandler class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_InvalidCertificateHandler_INCLUDED
+#define NetSSL_InvalidCertificateHandler_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/VerificationErrorArgs.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API InvalidCertificateHandler
+ /// A InvalidCertificateHandler is invoked whenever an error occurs verifying the certificate. It allows the user
+ /// to inspect and accept/reject the certificate.
+ /// One can install one's own InvalidCertificateHandler by implementing this interface. Note that
+ /// in the implementation file of the subclass the following code must be present (assuming you use the namespace My_API
+ /// and the name of your handler class is MyGuiHandler):
+ ///
+ /// #include "Poco/Net/CertificateHandlerFactory.h"
+ /// ...
+ /// POCO_REGISTER_CHFACTORY(My_API, MyGuiHandler)
+ ///
+ /// One can either set the handler directly in the startup code of the main method of ones application by calling
+ ///
+ /// SSLManager::instance().initialize(mypassphraseHandler, myguiHandler, mySSLContext)
+ ///
+ /// or in case one uses Poco::Util::Application one can rely on an XML configuration and put the following entry
+ /// under the path openSSL.invalidCertificateHandler:
+ ///
+ /// <invalidCertificateHandler>
+ /// <name>MyGuiHandler<name>
+ /// <options>
+ /// [...] // Put optional config params for the handler here
+ /// </options>
+ /// </invalidCertificateHandler>
+ ///
+ /// Note that the name of the InvalidCertificateHandler must be same as the one provided to the POCO_REGISTER_CHFACTORY macro.
+{
+public:
+ InvalidCertificateHandler(bool handleErrorsOnServerSide);
+ /// Creates the InvalidCertificateHandler.
+ ///
+ /// Set handleErrorsOnServerSide to true if the certificate handler is used on the server side.
+ /// Automatically registers at one of the SSLManager::VerificationError events.
+
+ virtual ~InvalidCertificateHandler();
+ /// Destroys the InvalidCertificateHandler.
+
+ virtual void onInvalidCertificate(const void* pSender, VerificationErrorArgs& errorCert) = 0;
+ /// Receives the questionable certificate in parameter errorCert. If one wants to accept the
+ /// certificate, call errorCert.setIgnoreError(true).
+
+protected:
+ bool _handleErrorsOnServerSide;
+ /// Stores if the certificate handler gets invoked by the server (i.e. a client certificate is wrong)
+ /// or the client (a server certificate is wrong)
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_InvalidCertificateHandler_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/KeyConsoleHandler.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/KeyConsoleHandler.h
index d9483d78e0..dc14502a87 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/KeyConsoleHandler.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/KeyConsoleHandler.h
@@ -1,47 +1,47 @@
-//
-// KeyConsoleHandler.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: KeyConsoleHandler
-//
-// Definition of the KeyConsoleHandler class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_KeyConsoleHandler_INCLUDED
-#define NetSSL_KeyConsoleHandler_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/PrivateKeyPassphraseHandler.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API KeyConsoleHandler: public PrivateKeyPassphraseHandler
- /// An implementation of PrivateKeyPassphraseHandler that
- /// reads the key for a certificate from the console.
-{
-public:
- KeyConsoleHandler(bool server);
- /// Creates the KeyConsoleHandler.
-
- ~KeyConsoleHandler();
- /// Destroys the KeyConsoleHandler.
-
- void onPrivateKeyRequested(const void* pSender, std::string& privateKey);
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_KeyConsoleHandler_INCLUDED
+//
+// KeyConsoleHandler.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: KeyConsoleHandler
+//
+// Definition of the KeyConsoleHandler class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_KeyConsoleHandler_INCLUDED
+#define NetSSL_KeyConsoleHandler_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/PrivateKeyPassphraseHandler.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API KeyConsoleHandler: public PrivateKeyPassphraseHandler
+ /// An implementation of PrivateKeyPassphraseHandler that
+ /// reads the key for a certificate from the console.
+{
+public:
+ KeyConsoleHandler(bool server);
+ /// Creates the KeyConsoleHandler.
+
+ ~KeyConsoleHandler();
+ /// Destroys the KeyConsoleHandler.
+
+ void onPrivateKeyRequested(const void* pSender, std::string& privateKey);
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_KeyConsoleHandler_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/KeyFileHandler.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/KeyFileHandler.h
index 274cdbff59..452205ac59 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/KeyFileHandler.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/KeyFileHandler.h
@@ -1,51 +1,51 @@
-//
-// KeyFileHandler.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: KeyFileHandler
-//
-// Definition of the KeyFileHandler class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_KeyFileHandler_INCLUDED
-#define NetSSL_KeyFileHandler_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/PrivateKeyPassphraseHandler.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API KeyFileHandler: public PrivateKeyPassphraseHandler
- /// An implementation of PrivateKeyPassphraseHandler that
- /// reads the key for a certificate from a configuration file
- /// under the path "openSSL.privateKeyPassphraseHandler.options.password".
-{
-public:
- KeyFileHandler(bool server);
- /// Creates the KeyFileHandler.
-
- virtual ~KeyFileHandler();
- /// Destroys the KeyFileHandler.
-
- void onPrivateKeyRequested(const void* pSender, std::string& privateKey);
-
-private:
- static const std::string CFG_PRIV_KEY_FILE;
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_KeyFileHandler_INCLUDED
+//
+// KeyFileHandler.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: KeyFileHandler
+//
+// Definition of the KeyFileHandler class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_KeyFileHandler_INCLUDED
+#define NetSSL_KeyFileHandler_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/PrivateKeyPassphraseHandler.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API KeyFileHandler: public PrivateKeyPassphraseHandler
+ /// An implementation of PrivateKeyPassphraseHandler that
+ /// reads the key for a certificate from a configuration file
+ /// under the path "openSSL.privateKeyPassphraseHandler.options.password".
+{
+public:
+ KeyFileHandler(bool server);
+ /// Creates the KeyFileHandler.
+
+ virtual ~KeyFileHandler();
+ /// Destroys the KeyFileHandler.
+
+ void onPrivateKeyRequested(const void* pSender, std::string& privateKey);
+
+private:
+ static const std::string CFG_PRIV_KEY_FILE;
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_KeyFileHandler_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/NetSSL.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/NetSSL.h
index ae793fde93..3c2afd745a 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/NetSSL.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/NetSSL.h
@@ -1,94 +1,94 @@
-//
-// NetSSL.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: OpenSSL
-//
-// Basic definitions for the Poco OpenSSL library.
-// This file must be the first file included by every other OpenSSL
-// header file.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_NetSSL_INCLUDED
-#define NetSSL_NetSSL_INCLUDED
-
-
-#include "Poco/Net/Net.h"
-#include "Poco/Crypto/Crypto.h"
-
-
-//
-// The following block is the standard way of creating macros which make exporting
-// from a DLL simpler. All files within this DLL are compiled with the NetSSL_EXPORTS
-// symbol defined on the command line. this symbol should not be defined on any project
-// that uses this DLL. This way any other project whose source files include this file see
-// NetSSL_API functions as being imported from a DLL, wheras this DLL sees symbols
-// defined with this macro as being exported.
-//
-#if (defined(_WIN32) || defined(__CYGWIN__)) && defined(POCO_DLL)
- #if defined(NetSSL_EXPORTS)
- #define NetSSL_API __declspec(dllexport)
- #else
- #define NetSSL_API __declspec(dllimport)
- #endif
-#endif
-
-
-#if !defined(NetSSL_API)
- #if !defined(POCO_NO_GCC_API_ATTRIBUTE) && defined (__GNUC__) && (__GNUC__ >= 4)
- #define NetSSL_API __attribute__ ((visibility ("default")))
- #else
- #define NetSSL_API
- #endif
-#endif
-
-
-//
-// Automatically link NetSSL and OpenSSL libraries.
-//
-#if defined(_MSC_VER)
- #if !defined(POCO_NO_AUTOMATIC_LIBS)
- #if !defined(NetSSL_EXPORTS)
- #pragma comment(lib, "PocoNetSSL" POCO_LIB_SUFFIX)
- #endif
- #endif // POCO_NO_AUTOMATIC_LIBS
-#endif
-
-
-namespace Poco {
-namespace Net {
-
-
-void NetSSL_API initializeSSL();
- /// Initialize the NetSSL library, as well as the underlying OpenSSL
- /// libraries, by calling Poco::Crypto::OpenSSLInitializer::initialize().
- ///
- /// Should be called before using any class from the NetSSL library.
- /// The NetSSL will be initialized automatically, through
- /// Poco::Crypto::OpenSSLInitializer instances or similar mechanisms
- /// when creating Context or SSLManager instances.
- /// However, it is recommended to call initializeSSL()
- /// in any case at application startup.
- ///
- /// Can be called multiple times; however, for every call to
- /// initializeSSL(), a matching call to uninitializeSSL()
- /// must be performed.
-
-
-void NetSSL_API uninitializeSSL();
- /// Uninitializes the NetSSL library by calling
- /// Poco::Crypto::OpenSSLInitializer::uninitialize() and
- /// shutting down the SSLManager.
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_NetSSL_INCLUDED
+//
+// NetSSL.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: OpenSSL
+//
+// Basic definitions for the Poco OpenSSL library.
+// This file must be the first file included by every other OpenSSL
+// header file.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_NetSSL_INCLUDED
+#define NetSSL_NetSSL_INCLUDED
+
+
+#include "Poco/Net/Net.h"
+#include "Poco/Crypto/Crypto.h"
+
+
+//
+// The following block is the standard way of creating macros which make exporting
+// from a DLL simpler. All files within this DLL are compiled with the NetSSL_EXPORTS
+// symbol defined on the command line. this symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see
+// NetSSL_API functions as being imported from a DLL, wheras this DLL sees symbols
+// defined with this macro as being exported.
+//
+#if (defined(_WIN32) || defined(__CYGWIN__)) && defined(POCO_DLL)
+ #if defined(NetSSL_EXPORTS)
+ #define NetSSL_API __declspec(dllexport)
+ #else
+ #define NetSSL_API __declspec(dllimport)
+ #endif
+#endif
+
+
+#if !defined(NetSSL_API)
+ #if !defined(POCO_NO_GCC_API_ATTRIBUTE) && defined (__GNUC__) && (__GNUC__ >= 4)
+ #define NetSSL_API __attribute__ ((visibility ("default")))
+ #else
+ #define NetSSL_API
+ #endif
+#endif
+
+
+//
+// Automatically link NetSSL and OpenSSL libraries.
+//
+#if defined(_MSC_VER)
+ #if !defined(POCO_NO_AUTOMATIC_LIBS)
+ #if !defined(NetSSL_EXPORTS)
+ #pragma comment(lib, "PocoNetSSL" POCO_LIB_SUFFIX)
+ #endif
+ #endif // POCO_NO_AUTOMATIC_LIBS
+#endif
+
+
+namespace Poco {
+namespace Net {
+
+
+void NetSSL_API initializeSSL();
+ /// Initialize the NetSSL library, as well as the underlying OpenSSL
+ /// libraries, by calling Poco::Crypto::OpenSSLInitializer::initialize().
+ ///
+ /// Should be called before using any class from the NetSSL library.
+ /// The NetSSL will be initialized automatically, through
+ /// Poco::Crypto::OpenSSLInitializer instances or similar mechanisms
+ /// when creating Context or SSLManager instances.
+ /// However, it is recommended to call initializeSSL()
+ /// in any case at application startup.
+ ///
+ /// Can be called multiple times; however, for every call to
+ /// initializeSSL(), a matching call to uninitializeSSL()
+ /// must be performed.
+
+
+void NetSSL_API uninitializeSSL();
+ /// Uninitializes the NetSSL library by calling
+ /// Poco::Crypto::OpenSSLInitializer::uninitialize() and
+ /// shutting down the SSLManager.
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_NetSSL_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactory.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactory.h
index 9c0fa37faa..e2a5f0b54c 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactory.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactory.h
@@ -1,95 +1,95 @@
-//
-// PrivateKeyFactory.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: PrivateKeyFactory
-//
-// Definition of the PrivateKeyFactory class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_PrivateKeyFactory_INCLUDED
-#define NetSSL_PrivateKeyFactory_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class PrivateKeyPassphraseHandler;
-
-
-class NetSSL_API PrivateKeyFactory
- /// A PrivateKeyFactory is responsible for creating PrivateKeyPassphraseHandlers.
- ///
- /// You don't need to access this class directly. Use the macro
- /// POCO_REGISTER_KEYFACTORY(namespace, PrivateKeyPassphraseHandlerName)
- /// instead (see the documentation of PrivateKeyPassphraseHandler for an example).
-{
-public:
- PrivateKeyFactory();
- /// Creates the PrivateKeyFactory.
-
- virtual ~PrivateKeyFactory();
- /// Destroys the PrivateKeyFactory.
-
- virtual PrivateKeyPassphraseHandler* create(bool onServer) const = 0;
- /// Creates a new PrivateKeyPassphraseHandler
-};
-
-
-class NetSSL_API PrivateKeyFactoryRegistrar
- /// Registrar class which automatically registers PrivateKeyFactories at the PrivateKeyFactoryMgr.
- ///
- /// You don't need to access this class directly. Use the macro
- /// POCO_REGISTER_KEYFACTORY(namespace, PrivateKeyPassphraseHandlerName)
- /// instead (see the documentation of PrivateKeyPassphraseHandler for an example).
-
-{
-public:
- PrivateKeyFactoryRegistrar(const std::string& name, PrivateKeyFactory* pFactory);
- /// Registers the PrivateKeyFactory with the given name at the factory manager.
-
- virtual ~PrivateKeyFactoryRegistrar();
- /// Destroys the PrivateKeyFactoryRegistrar.
-};
-
-
-template<typename T>
-class PrivateKeyFactoryImpl: public Poco::Net::PrivateKeyFactory
-{
-public:
- PrivateKeyFactoryImpl()
- {
- }
-
- ~PrivateKeyFactoryImpl()
- {
- }
-
- PrivateKeyPassphraseHandler* create(bool server) const
- {
- return new T(server);
- }
-};
-
-
-} } // namespace Poco::Net
-
-
-// DEPRECATED: register the factory directly at the FactoryMgr:
-// Poco::Net::SSLManager::instance().privateKeyFactoryMgr().setFactory(name, new Poco::Net::PrivateKeyFactoryImpl<MyKeyHandler>());
-#define POCO_REGISTER_KEYFACTORY(API, PKCLS) \
- static Poco::Net::PrivateKeyFactoryRegistrar aRegistrar(std::string(#PKCLS), new Poco::Net::PrivateKeyFactoryImpl<PKCLS>());
-
-
-#endif // NetSSL_PrivateKeyFactory_INCLUDED
+//
+// PrivateKeyFactory.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: PrivateKeyFactory
+//
+// Definition of the PrivateKeyFactory class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_PrivateKeyFactory_INCLUDED
+#define NetSSL_PrivateKeyFactory_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class PrivateKeyPassphraseHandler;
+
+
+class NetSSL_API PrivateKeyFactory
+ /// A PrivateKeyFactory is responsible for creating PrivateKeyPassphraseHandlers.
+ ///
+ /// You don't need to access this class directly. Use the macro
+ /// POCO_REGISTER_KEYFACTORY(namespace, PrivateKeyPassphraseHandlerName)
+ /// instead (see the documentation of PrivateKeyPassphraseHandler for an example).
+{
+public:
+ PrivateKeyFactory();
+ /// Creates the PrivateKeyFactory.
+
+ virtual ~PrivateKeyFactory();
+ /// Destroys the PrivateKeyFactory.
+
+ virtual PrivateKeyPassphraseHandler* create(bool onServer) const = 0;
+ /// Creates a new PrivateKeyPassphraseHandler
+};
+
+
+class NetSSL_API PrivateKeyFactoryRegistrar
+ /// Registrar class which automatically registers PrivateKeyFactories at the PrivateKeyFactoryMgr.
+ ///
+ /// You don't need to access this class directly. Use the macro
+ /// POCO_REGISTER_KEYFACTORY(namespace, PrivateKeyPassphraseHandlerName)
+ /// instead (see the documentation of PrivateKeyPassphraseHandler for an example).
+
+{
+public:
+ PrivateKeyFactoryRegistrar(const std::string& name, PrivateKeyFactory* pFactory);
+ /// Registers the PrivateKeyFactory with the given name at the factory manager.
+
+ virtual ~PrivateKeyFactoryRegistrar();
+ /// Destroys the PrivateKeyFactoryRegistrar.
+};
+
+
+template<typename T>
+class PrivateKeyFactoryImpl: public Poco::Net::PrivateKeyFactory
+{
+public:
+ PrivateKeyFactoryImpl()
+ {
+ }
+
+ ~PrivateKeyFactoryImpl()
+ {
+ }
+
+ PrivateKeyPassphraseHandler* create(bool server) const
+ {
+ return new T(server);
+ }
+};
+
+
+} } // namespace Poco::Net
+
+
+// DEPRECATED: register the factory directly at the FactoryMgr:
+// Poco::Net::SSLManager::instance().privateKeyFactoryMgr().setFactory(name, new Poco::Net::PrivateKeyFactoryImpl<MyKeyHandler>());
+#define POCO_REGISTER_KEYFACTORY(API, PKCLS) \
+ static Poco::Net::PrivateKeyFactoryRegistrar aRegistrar(std::string(#PKCLS), new Poco::Net::PrivateKeyFactoryImpl<PKCLS>());
+
+
+#endif // NetSSL_PrivateKeyFactory_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactoryMgr.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactoryMgr.h
index b29b37f46a..b4e8305e45 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactoryMgr.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactoryMgr.h
@@ -1,64 +1,64 @@
-//
-// PrivateKeyFactoryMgr.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: PrivateKeyFactoryMgr
-//
-// Definition of the PrivateKeyFactoryMgr class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_PrivateKeyFactoryMgr_INCLUDED
-#define NetSSL_PrivateKeyFactoryMgr_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/PrivateKeyFactory.h"
-#include "Poco/SharedPtr.h"
-#include <map>
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API PrivateKeyFactoryMgr
- /// A PrivateKeyFactoryMgr manages all existing PrivateKeyFactories.
-{
-public:
- typedef std::map<std::string, Poco::SharedPtr<PrivateKeyFactory> > FactoriesMap;
-
- PrivateKeyFactoryMgr();
- /// Creates the PrivateKeyFactoryMgr.
-
- ~PrivateKeyFactoryMgr();
- /// Destroys the PrivateKeyFactoryMgr.
-
- void setFactory(const std::string& name, PrivateKeyFactory* pFactory);
- /// Registers the factory. Class takes ownership of the pointer.
- /// If a factory with the same name already exists, an exception is thrown.
-
- bool hasFactory(const std::string& name) const;
- /// Returns true if for the given name a factory is already registered
-
- const PrivateKeyFactory* getFactory(const std::string& name) const;
- /// Returns NULL if for the given name a factory does not exist, otherwise the factory is returned
-
- void removeFactory(const std::string& name);
- /// Removes the factory from the manager.
-
-private:
- FactoriesMap _factories;
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_PrivateKeyFactoryMgr_INCLUDED
+//
+// PrivateKeyFactoryMgr.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: PrivateKeyFactoryMgr
+//
+// Definition of the PrivateKeyFactoryMgr class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_PrivateKeyFactoryMgr_INCLUDED
+#define NetSSL_PrivateKeyFactoryMgr_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/PrivateKeyFactory.h"
+#include "Poco/SharedPtr.h"
+#include <map>
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API PrivateKeyFactoryMgr
+ /// A PrivateKeyFactoryMgr manages all existing PrivateKeyFactories.
+{
+public:
+ typedef std::map<std::string, Poco::SharedPtr<PrivateKeyFactory> > FactoriesMap;
+
+ PrivateKeyFactoryMgr();
+ /// Creates the PrivateKeyFactoryMgr.
+
+ ~PrivateKeyFactoryMgr();
+ /// Destroys the PrivateKeyFactoryMgr.
+
+ void setFactory(const std::string& name, PrivateKeyFactory* pFactory);
+ /// Registers the factory. Class takes ownership of the pointer.
+ /// If a factory with the same name already exists, an exception is thrown.
+
+ bool hasFactory(const std::string& name) const;
+ /// Returns true if for the given name a factory is already registered
+
+ const PrivateKeyFactory* getFactory(const std::string& name) const;
+ /// Returns NULL if for the given name a factory does not exist, otherwise the factory is returned
+
+ void removeFactory(const std::string& name);
+ /// Removes the factory from the manager.
+
+private:
+ FactoriesMap _factories;
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_PrivateKeyFactoryMgr_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyPassphraseHandler.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyPassphraseHandler.h
index 726703f78f..1e1cf411f0 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyPassphraseHandler.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyPassphraseHandler.h
@@ -1,84 +1,84 @@
-//
-// PrivateKeyPassphraseHandler.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: PrivateKeyPassphraseHandler
-//
-// Definition of the PrivateKeyPassphraseHandler class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_PrivateKeyPassphraseHandler_INCLUDED
-#define NetSSL_PrivateKeyPassphraseHandler_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API PrivateKeyPassphraseHandler
- /// A passphrase handler is needed whenever the private key of a certificate is loaded and the certificate is protected
- /// by a passphrase. The PrivateKeyPassphraseHandler's task is to provide that passphrase.
- /// One can install one's own PrivateKeyPassphraseHandler by implementing this interface. Note that
- /// in the implementation file of the subclass the following code must be present (assuming you use the namespace My_API
- /// and the name of your handler class is MyGuiHandler):
- ///
- /// #include "Poco/Net/PrivateKeyFactory.h"
- /// ...
- /// POCO_REGISTER_KEYFACTORY(My_API, MyGuiHandler)
- ///
- /// One can either set the handler directly in the startup code of the main method of ones application by calling
- ///
- /// SSLManager::instance().initialize(myguiHandler, myInvalidCertificateHandler, mySSLContext)
- ///
- /// or in case one's application extends Poco::Util::Application one can use an XML configuration and put the following entry
- /// under the path openSSL.privateKeyPassphraseHandler:
- ///
- /// <privateKeyPassphraseHandler>
- /// <name>MyGuiHandler</name>
- /// <options>
- /// [...] // Put optional config params for the handler here
- /// </options>
- /// </privateKeyPassphraseHandler>
- ///
- /// Note that the name of the passphrase handler must be same as the one provided to the POCO_REGISTER_KEYFACTORY macro.
-{
-public:
- PrivateKeyPassphraseHandler(bool onServerSide);
- /// Creates the PrivateKeyPassphraseHandler. Automatically registers at the SSLManager::PrivateKeyPassword event.
-
- virtual ~PrivateKeyPassphraseHandler();
- /// Destroys the PrivateKeyPassphraseHandler.
-
- virtual void onPrivateKeyRequested(const void* pSender, std::string& privateKey) = 0;
- /// Returns the requested private key in the parameter privateKey.
-
- bool serverSide() const;
-
-private:
- bool _serverSide;
-};
-
-
-//
-// inlines
-//
-inline bool PrivateKeyPassphraseHandler::serverSide() const
-{
- return _serverSide;
-}
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_PrivateKeyPassphraseHandler_INCLUDED
+//
+// PrivateKeyPassphraseHandler.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: PrivateKeyPassphraseHandler
+//
+// Definition of the PrivateKeyPassphraseHandler class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_PrivateKeyPassphraseHandler_INCLUDED
+#define NetSSL_PrivateKeyPassphraseHandler_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API PrivateKeyPassphraseHandler
+ /// A passphrase handler is needed whenever the private key of a certificate is loaded and the certificate is protected
+ /// by a passphrase. The PrivateKeyPassphraseHandler's task is to provide that passphrase.
+ /// One can install one's own PrivateKeyPassphraseHandler by implementing this interface. Note that
+ /// in the implementation file of the subclass the following code must be present (assuming you use the namespace My_API
+ /// and the name of your handler class is MyGuiHandler):
+ ///
+ /// #include "Poco/Net/PrivateKeyFactory.h"
+ /// ...
+ /// POCO_REGISTER_KEYFACTORY(My_API, MyGuiHandler)
+ ///
+ /// One can either set the handler directly in the startup code of the main method of ones application by calling
+ ///
+ /// SSLManager::instance().initialize(myguiHandler, myInvalidCertificateHandler, mySSLContext)
+ ///
+ /// or in case one's application extends Poco::Util::Application one can use an XML configuration and put the following entry
+ /// under the path openSSL.privateKeyPassphraseHandler:
+ ///
+ /// <privateKeyPassphraseHandler>
+ /// <name>MyGuiHandler</name>
+ /// <options>
+ /// [...] // Put optional config params for the handler here
+ /// </options>
+ /// </privateKeyPassphraseHandler>
+ ///
+ /// Note that the name of the passphrase handler must be same as the one provided to the POCO_REGISTER_KEYFACTORY macro.
+{
+public:
+ PrivateKeyPassphraseHandler(bool onServerSide);
+ /// Creates the PrivateKeyPassphraseHandler. Automatically registers at the SSLManager::PrivateKeyPassword event.
+
+ virtual ~PrivateKeyPassphraseHandler();
+ /// Destroys the PrivateKeyPassphraseHandler.
+
+ virtual void onPrivateKeyRequested(const void* pSender, std::string& privateKey) = 0;
+ /// Returns the requested private key in the parameter privateKey.
+
+ bool serverSide() const;
+
+private:
+ bool _serverSide;
+};
+
+
+//
+// inlines
+//
+inline bool PrivateKeyPassphraseHandler::serverSide() const
+{
+ return _serverSide;
+}
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_PrivateKeyPassphraseHandler_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/RejectCertificateHandler.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/RejectCertificateHandler.h
index b170ad50b5..9b18ab4f8f 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/RejectCertificateHandler.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/RejectCertificateHandler.h
@@ -1,48 +1,48 @@
-//
-// RejectCertificateHandler.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: RejectCertificateHandler
-//
-// Definition of the RejectCertificateHandler class.
-//
-// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_RejectCertificateHandler_INCLUDED
-#define NetSSL_RejectCertificateHandler_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/InvalidCertificateHandler.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API RejectCertificateHandler: public InvalidCertificateHandler
- /// A RejectCertificateHandler is invoked whenever an error
- /// occurs verifying the certificate. It always rejects
- /// the certificate.
-{
-public:
- RejectCertificateHandler(bool handleErrorsOnServerSide);
- /// Creates the RejectCertificateHandler
-
- virtual ~RejectCertificateHandler();
- /// Destroys the RejectCertificateHandler.
-
- void onInvalidCertificate(const void* pSender, VerificationErrorArgs& errorCert);
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_RejectCertificateHandler_INCLUDED
+//
+// RejectCertificateHandler.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: RejectCertificateHandler
+//
+// Definition of the RejectCertificateHandler class.
+//
+// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_RejectCertificateHandler_INCLUDED
+#define NetSSL_RejectCertificateHandler_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/InvalidCertificateHandler.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API RejectCertificateHandler: public InvalidCertificateHandler
+ /// A RejectCertificateHandler is invoked whenever an error
+ /// occurs verifying the certificate. It always rejects
+ /// the certificate.
+{
+public:
+ RejectCertificateHandler(bool handleErrorsOnServerSide);
+ /// Creates the RejectCertificateHandler
+
+ virtual ~RejectCertificateHandler();
+ /// Destroys the RejectCertificateHandler.
+
+ void onInvalidCertificate(const void* pSender, VerificationErrorArgs& errorCert);
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_RejectCertificateHandler_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SSLException.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SSLException.h
index 7b8dfe79d3..aa9bd9dd0c 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SSLException.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SSLException.h
@@ -1,39 +1,39 @@
-//
-// SSLException.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: SSLException
-//
-// Definition of the SSLException class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_SSLException_INCLUDED
-#define NetSSL_SSLException_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/NetException.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-POCO_DECLARE_EXCEPTION(NetSSL_API, SSLException, NetException)
-POCO_DECLARE_EXCEPTION(NetSSL_API, SSLContextException, SSLException)
-POCO_DECLARE_EXCEPTION(NetSSL_API, InvalidCertificateException, SSLException)
-POCO_DECLARE_EXCEPTION(NetSSL_API, CertificateValidationException, SSLException)
-POCO_DECLARE_EXCEPTION(NetSSL_API, SSLConnectionUnexpectedlyClosedException, SSLException)
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_SSLException_INCLUDED
+//
+// SSLException.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: SSLException
+//
+// Definition of the SSLException class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_SSLException_INCLUDED
+#define NetSSL_SSLException_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/NetException.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+POCO_DECLARE_EXCEPTION(NetSSL_API, SSLException, NetException)
+POCO_DECLARE_EXCEPTION(NetSSL_API, SSLContextException, SSLException)
+POCO_DECLARE_EXCEPTION(NetSSL_API, InvalidCertificateException, SSLException)
+POCO_DECLARE_EXCEPTION(NetSSL_API, CertificateValidationException, SSLException)
+POCO_DECLARE_EXCEPTION(NetSSL_API, SSLConnectionUnexpectedlyClosedException, SSLException)
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_SSLException_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h
index 6d0f469295..cf5a61b321 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h
@@ -1,390 +1,390 @@
-//
-// SSLManager.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: SSLManager
-//
-// Definition of the SSLManager class.
-//
-// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_SSLManager_INCLUDED
-#define NetSSL_SSLManager_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/VerificationErrorArgs.h"
-#include "Poco/Net/Context.h"
-#include "Poco/Net/PrivateKeyFactoryMgr.h"
-#include "Poco/Net/CertificateHandlerFactoryMgr.h"
-#include "Poco/Net/InvalidCertificateHandler.h"
-#include "Poco/Util/AbstractConfiguration.h"
-#include "Poco/BasicEvent.h"
-#include "Poco/SharedPtr.h"
-#include "Poco/Mutex.h"
-#include <openssl/ssl.h>
-#if defined(OPENSSL_FIPS) && OPENSSL_VERSION_NUMBER < 0x010001000L
-#include <openssl/fips.h>
-#endif
-
-
-namespace Poco {
-namespace Net {
-
-
-class Context;
-
-
-class NetSSL_API SSLManager
- /// SSLManager is a singleton for holding the default server/client
- /// Context and handling callbacks for certificate verification errors
- /// and private key passphrases.
- ///
- /// Proper initialization of SSLManager is critical.
- ///
- /// SSLManager can be initialized manually, by calling initializeServer()
- /// and/or initializeClient(), or initialization can be automatic. In the latter
- /// case, a Poco::Util::Application instance must be available and the required
- /// configuration properties must be set (see below).
- ///
- /// Note that manual initialization must happen very early in the application,
- /// before defaultClientContext() or defaultServerContext() are called.
- ///
- /// If defaultClientContext() and defaultServerContext() are never called
- /// in an application, initialization of SSLManager can be omitted.
- /// However, in this case, delegates for the ServerVerificationError,
- /// ClientVerificationError and PrivateKeyPassphraseRequired events
- /// must be registered.
- ///
- /// An exemplary documentation which sets either the server or client default context and creates
- /// a PrivateKeyPassphraseHandler that reads the password from the XML file looks like this:
- ///
- /// <AppConfig>
- /// <openSSL>
- /// <server|client>
- /// <privateKeyFile>mycert.key</privateKeyFile>
- /// <certificateFile>mycert.crt</certificateFile>
- /// <caConfig>rootcert.pem</caConfig>
- /// <verificationMode>none|relaxed|strict|once</verificationMode>
- /// <verificationDepth>1..9</verificationDepth>
- /// <loadDefaultCAFile>true|false</loadDefaultCAFile>
- /// <cipherList>ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH</cipherList>
- /// <preferServerCiphers>true|false</preferServerCiphers>
- /// <privateKeyPassphraseHandler>
- /// <name>KeyFileHandler</name>
- /// <options>
- /// <password>test</password>
- /// </options>
- /// </privateKeyPassphraseHandler>
- /// <invalidCertificateHandler>
- /// <name>ConsoleCertificateHandler</name>
- /// </invalidCertificateHandler>
- /// <cacheSessions>true|false</cacheSessions>
- /// <sessionIdContext>someString</sessionIdContext> <!-- server only -->
- /// <sessionCacheSize>0..n</sessionCacheSize> <!-- server only -->
- /// <sessionTimeout>0..n</sessionTimeout> <!-- server only -->
- /// <extendedVerification>true|false</extendedVerification>
- /// <requireTLSv1>true|false</requireTLSv1>
- /// <requireTLSv1_1>true|false</requireTLSv1_1>
- /// <requireTLSv1_2>true|false</requireTLSv1_2>
- /// <disableProtocols>sslv2,sslv3,tlsv1,tlsv1_1,tlsv1_2</disableProtocols>
- /// <dhParamsFile>dh.pem</dhParamsFile>
- /// <ecdhCurve>prime256v1</ecdhCurve>
- /// </server|client>
- /// <fips>false</fips>
- /// </openSSL>
- /// </AppConfig>
- ///
- /// Following is a list of supported configuration properties. Property names must always
- /// be prefixed with openSSL.server or openSSL.client. Some properties are only supported
- /// for servers.
- ///
- /// - privateKeyFile (string): The path to the file containing the private key for the certificate
- /// in PEM format (or containing both the private key and the certificate).
- /// - certificateFile (string): The Path to the file containing the server's or client's certificate
- /// in PEM format. Can be omitted if the the file given in privateKeyFile contains the certificate as well.
- /// - caConfig (string): The path to the file or directory containing the trusted root certificates.
- /// - verificationMode (string): Specifies whether and how peer certificates are validated (see
- /// the Context class for details). Valid values are none, relaxed, strict, once.
- /// - verificationDepth (integer, 1-9): Sets the upper limit for verification chain sizes. Verification
- /// will fail if a certificate chain larger than this is encountered.
- /// - loadDefaultCAFile (boolean): Specifies whether the builtin CA certificates from OpenSSL are used.
- /// - cipherList (string): Specifies the supported ciphers in OpenSSL notation
- /// (e.g. "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH").
- /// - preferServerCiphers (bool): When choosing a cipher, use the server's preferences instead of the
- /// client preferences. When not called, the SSL server will always follow the clients
- /// preferences. When called, the SSL/TLS server will choose following its own
- /// preferences.
- /// - privateKeyPassphraseHandler.name (string): The name of the class (subclass of PrivateKeyPassphraseHandler)
- /// used for obtaining the passphrase for accessing the private key.
- /// - privateKeyPassphraseHandler.options.password (string): The password to be used by KeyFileHandler.
- /// - invalidCertificateHandler.name: The name of the class (subclass of CertificateHandler)
- /// used for confirming invalid certificates.
- /// - cacheSessions (boolean): Enables or disables session caching.
- /// - sessionIdContext (string): contains the application's unique session ID context, which becomes
- /// part of each session identifier generated by the server. Can be an arbitrary sequence
- /// of bytes with a maximum length of SSL_MAX_SSL_SESSION_ID_LENGTH. Should be specified
- /// for a server to enable session caching. Should be specified even if session caching
- /// is disabled to avoid problems with clients that request session caching (e.g. Firefox 3.6).
- /// If not specified, defaults to ${application.name}.
- /// - sessionCacheSize (integer): Sets the maximum size of the server session cache, in number of
- /// sessions. The default size (according to OpenSSL documentation) is 1024*20, which may be too
- /// large for many applications, especially on embedded platforms with limited memory.
- /// Specifying a size of 0 will set an unlimited cache size.
- /// - sessionTimeout (integer): Sets the timeout (in seconds) of cached sessions on the server.
- /// - extendedVerification (boolean): Enable or disable the automatic post-connection
- /// extended certificate verification.
- /// - requireTLSv1 (boolean): Require a TLSv1 connection.
- /// - requireTLSv1_1 (boolean): Require a TLSv1.1 connection.
- /// - requireTLSv1_2 (boolean): Require a TLSv1.2 connection.
- /// - disableProtocols (string): A comma-separated list of protocols that should be
- /// disabled. Valid protocol names are sslv2, sslv3, tlsv1, tlsv1_1, tlsv1_2.
- /// - dhParamsFile (string): Specifies a file containing Diffie-Hellman parameters.
- /// If not specified or empty, the default parameters are used.
- /// - ecdhCurve (string): Specifies the name of the curve to use for ECDH, based
- /// on the curve names specified in RFC 4492. Defaults to "prime256v1".
- /// - fips: Enable or disable OpenSSL FIPS mode. Only supported if the OpenSSL version
- /// that this library is built against supports FIPS mode.
-{
-public:
- typedef Poco::SharedPtr<PrivateKeyPassphraseHandler> PrivateKeyPassphraseHandlerPtr;
- typedef Poco::SharedPtr<InvalidCertificateHandler> InvalidCertificateHandlerPtr;
-
- Poco::BasicEvent<VerificationErrorArgs> ServerVerificationError;
- /// Fired whenever a certificate verification error is detected by the server during a handshake.
-
- Poco::BasicEvent<VerificationErrorArgs> ClientVerificationError;
- /// Fired whenever a certificate verification error is detected by the client during a handshake.
-
- Poco::BasicEvent<std::string> PrivateKeyPassphraseRequired;
- /// Fired when a encrypted certificate is loaded. Not setting the password
- /// in the event parameter will result in a failure to load the certificate.
-
- static SSLManager& instance();
- /// Returns the instance of the SSLManager singleton.
-
- void initializeServer(PrivateKeyPassphraseHandlerPtr ptrPassphraseHandler, InvalidCertificateHandlerPtr ptrCertificateHandler, Context::Ptr ptrContext);
- /// Initializes the server side of the SSLManager with a default passphrase handler, a default invalid certificate handler and a default context. If this method
- /// is never called the SSLmanager will try to initialize its members from an application configuration.
- ///
- /// PtrPassphraseHandler and ptrCertificateHandler can be 0. However, in this case, event delegates
- /// must be registered with the ServerVerificationError and PrivateKeyPassphraseRequired events.
- ///
- /// Note: Always create the handlers (or register the corresponding event delegates) before creating
- /// the Context, as during creation of the Context the passphrase for the private key might be needed.
- ///
- /// Valid initialization code would be:
- /// SharedPtr<PrivateKeyPassphraseHandler> pConsoleHandler = new KeyConsoleHandler;
- /// SharedPtr<InvalidCertificateHandler> pInvalidCertHandler = new ConsoleCertificateHandler;
- /// Context::Ptr pContext = new Context(Context::SERVER_USE, "any.pem", "any.pem", "rootcert.pem", Context::VERIFY_RELAXED, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
- /// SSLManager::instance().initializeServer(pConsoleHandler, pInvalidCertHandler, pContext);
-
- void initializeClient(PrivateKeyPassphraseHandlerPtr ptrPassphraseHandler, InvalidCertificateHandlerPtr ptrHandler, Context::Ptr ptrContext);
- /// Initializes the client side of the SSLManager with a default passphrase handler, a default invalid certificate handler and a default context. If this method
- /// is never called the SSLmanager will try to initialize its members from an application configuration.
- ///
- /// PtrPassphraseHandler and ptrCertificateHandler can be 0. However, in this case, event delegates
- /// must be registered with the ClientVerificationError and PrivateKeyPassphraseRequired events.
- ///
- /// Note: Always create the handlers (or register the corresponding event delegates) before creating
- /// the Context, as during creation of the Context the passphrase for the private key might be needed.
- ///
- /// Valid initialization code would be:
- /// SharedPtr<PrivateKeyPassphraseHandler> pConsoleHandler = new KeyConsoleHandler;
- /// SharedPtr<InvalidCertificateHandler> pInvalidCertHandler = new ConsoleCertificateHandler;
- /// Context::Ptr pContext = new Context(Context::CLIENT_USE, "", "", "rootcert.pem", Context::VERIFY_RELAXED, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
- /// SSLManager::instance().initializeClient(pConsoleHandler, pInvalidCertHandler, pContext);
-
- Context::Ptr defaultServerContext();
- /// Returns the default Context used by the server.
- ///
- /// Unless initializeServer() has been called, the first call to this method initializes the default Context
- /// from the application configuration.
-
- Context::Ptr defaultClientContext();
- /// Returns the default Context used by the client.
- ///
- /// Unless initializeClient() has been called, the first call to this method initializes the default Context
- /// from the application configuration.
-
- PrivateKeyPassphraseHandlerPtr serverPassphraseHandler();
- /// Returns the configured passphrase handler of the server. If none is set, the method will create a default one
- /// from an application configuration.
-
- InvalidCertificateHandlerPtr serverCertificateHandler();
- /// Returns an initialized certificate handler (used by the server to verify client cert) which determines how invalid certificates are treated.
- /// If none is set, it will try to auto-initialize one from an application configuration.
-
- PrivateKeyPassphraseHandlerPtr clientPassphraseHandler();
- /// Returns the configured passphrase handler of the client. If none is set, the method will create a default one
- /// from an application configuration.
-
- InvalidCertificateHandlerPtr clientCertificateHandler();
- /// Returns an initialized certificate handler (used by the client to verify server cert) which determines how invalid certificates are treated.
- /// If none is set, it will try to auto-initialize one from an application configuration.
-
- PrivateKeyFactoryMgr& privateKeyFactoryMgr();
- /// Returns the private key factory manager which stores the
- /// factories for the different registered passphrase handlers for private keys.
-
- CertificateHandlerFactoryMgr& certificateHandlerFactoryMgr();
- /// Returns the CertificateHandlerFactoryMgr which stores the
- /// factories for the different registered certificate handlers.
-
- static bool isFIPSEnabled();
- // Returns true if FIPS mode is enabled, false otherwise.
-
- void shutdown();
- /// Shuts down the SSLManager and releases the default Context
- /// objects. After a call to shutdown(), the SSLManager can no
- /// longer be used.
- ///
- /// Normally, it's not necessary to call this method directly, as this
- /// will be called either by uninitializeSSL(), or when
- /// the SSLManager instance is destroyed.
-
- static const std::string CFG_SERVER_PREFIX;
- static const std::string CFG_CLIENT_PREFIX;
-
-protected:
- static int verifyClientCallback(int ok, X509_STORE_CTX* pStore);
- /// The return value of this method defines how errors in
- /// verification are handled. Return 0 to terminate the handshake,
- /// or 1 to continue despite the error.
-
- static int verifyServerCallback(int ok, X509_STORE_CTX* pStore);
- /// The return value of this method defines how errors in
- /// verification are handled. Return 0 to terminate the handshake,
- /// or 1 to continue despite the error.
-
- static int privateKeyPassphraseCallback(char* pBuf, int size, int flag, void* userData);
- /// Method is invoked by OpenSSL to retrieve a passwd for an encrypted certificate.
- /// The request is delegated to the PrivatekeyPassword event. This method returns the
- /// length of the password.
-
- static Poco::Util::AbstractConfiguration& appConfig();
- /// Returns the application configuration.
- ///
- /// Throws a InvalidStateException if not application instance
- /// is available.
-
-private:
- SSLManager();
- /// Creates the SSLManager.
-
- ~SSLManager();
- /// Destroys the SSLManager.
-
- void initDefaultContext(bool server);
- /// Inits the default context, the first time it is accessed.
-
- void initEvents(bool server);
- /// Registers delegates at the events according to the configuration.
-
- void initPassphraseHandler(bool server);
- /// Inits the passphrase handler.
-
- void initCertificateHandler(bool server);
- /// Inits the certificate handler.
-
- static int verifyCallback(bool server, int ok, X509_STORE_CTX* pStore);
- /// The return value of this method defines how errors in
- /// verification are handled. Return 0 to terminate the handshake,
- /// or 1 to continue despite the error.
-
- PrivateKeyFactoryMgr _factoryMgr;
- CertificateHandlerFactoryMgr _certHandlerFactoryMgr;
- Context::Ptr _ptrDefaultServerContext;
- PrivateKeyPassphraseHandlerPtr _ptrServerPassphraseHandler;
- InvalidCertificateHandlerPtr _ptrServerCertificateHandler;
- Context::Ptr _ptrDefaultClientContext;
- PrivateKeyPassphraseHandlerPtr _ptrClientPassphraseHandler;
- InvalidCertificateHandlerPtr _ptrClientCertificateHandler;
- Poco::FastMutex _mutex;
-
- static const std::string CFG_PRIV_KEY_FILE;
- static const std::string CFG_CERTIFICATE_FILE;
- static const std::string CFG_CA_LOCATION;
- static const std::string CFG_VER_MODE;
- static const Context::VerificationMode VAL_VER_MODE;
- static const std::string CFG_VER_DEPTH;
- static const int VAL_VER_DEPTH;
- static const std::string CFG_ENABLE_DEFAULT_CA;
- static const bool VAL_ENABLE_DEFAULT_CA;
- static const std::string CFG_CIPHER_LIST;
- static const std::string CFG_CYPHER_LIST; // for backwards compatibility
- static const std::string VAL_CIPHER_LIST;
- static const std::string CFG_PREFER_SERVER_CIPHERS;
- static const std::string CFG_DELEGATE_HANDLER;
- static const std::string VAL_DELEGATE_HANDLER;
- static const std::string CFG_CERTIFICATE_HANDLER;
- static const std::string VAL_CERTIFICATE_HANDLER;
- static const std::string CFG_CACHE_SESSIONS;
- static const std::string CFG_SESSION_ID_CONTEXT;
- static const std::string CFG_SESSION_CACHE_SIZE;
- static const std::string CFG_SESSION_TIMEOUT;
- static const std::string CFG_EXTENDED_VERIFICATION;
- static const std::string CFG_REQUIRE_TLSV1;
- static const std::string CFG_REQUIRE_TLSV1_1;
- static const std::string CFG_REQUIRE_TLSV1_2;
- static const std::string CFG_DISABLE_PROTOCOLS;
- static const std::string CFG_DH_PARAMS_FILE;
- static const std::string CFG_ECDH_CURVE;
-
-#ifdef OPENSSL_FIPS
- static const std::string CFG_FIPS_MODE;
- static const bool VAL_FIPS_MODE;
-#endif
-
- friend class Poco::SingletonHolder<SSLManager>;
- friend class Context;
-};
-
-
-//
-// inlines
-//
-inline PrivateKeyFactoryMgr& SSLManager::privateKeyFactoryMgr()
-{
- return _factoryMgr;
-}
-
-
-inline CertificateHandlerFactoryMgr& SSLManager::certificateHandlerFactoryMgr()
-{
- return _certHandlerFactoryMgr;
-}
-
-
-inline bool SSLManager::isFIPSEnabled()
-{
-#ifdef OPENSSL_FIPS
- return FIPS_mode() ? true : false;
-#else
- return false;
-#endif
-}
-
-
-inline int SSLManager::verifyServerCallback(int ok, X509_STORE_CTX* pStore)
-{
- return SSLManager::verifyCallback(true, ok, pStore);
-}
-
-
-inline int SSLManager::verifyClientCallback(int ok, X509_STORE_CTX* pStore)
-{
- return SSLManager::verifyCallback(false, ok, pStore);
-}
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_SSLManager_INCLUDED
+//
+// SSLManager.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: SSLManager
+//
+// Definition of the SSLManager class.
+//
+// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_SSLManager_INCLUDED
+#define NetSSL_SSLManager_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/VerificationErrorArgs.h"
+#include "Poco/Net/Context.h"
+#include "Poco/Net/PrivateKeyFactoryMgr.h"
+#include "Poco/Net/CertificateHandlerFactoryMgr.h"
+#include "Poco/Net/InvalidCertificateHandler.h"
+#include "Poco/Util/AbstractConfiguration.h"
+#include "Poco/BasicEvent.h"
+#include "Poco/SharedPtr.h"
+#include "Poco/Mutex.h"
+#include <openssl/ssl.h>
+#if defined(OPENSSL_FIPS) && OPENSSL_VERSION_NUMBER < 0x010001000L
+#include <openssl/fips.h>
+#endif
+
+
+namespace Poco {
+namespace Net {
+
+
+class Context;
+
+
+class NetSSL_API SSLManager
+ /// SSLManager is a singleton for holding the default server/client
+ /// Context and handling callbacks for certificate verification errors
+ /// and private key passphrases.
+ ///
+ /// Proper initialization of SSLManager is critical.
+ ///
+ /// SSLManager can be initialized manually, by calling initializeServer()
+ /// and/or initializeClient(), or initialization can be automatic. In the latter
+ /// case, a Poco::Util::Application instance must be available and the required
+ /// configuration properties must be set (see below).
+ ///
+ /// Note that manual initialization must happen very early in the application,
+ /// before defaultClientContext() or defaultServerContext() are called.
+ ///
+ /// If defaultClientContext() and defaultServerContext() are never called
+ /// in an application, initialization of SSLManager can be omitted.
+ /// However, in this case, delegates for the ServerVerificationError,
+ /// ClientVerificationError and PrivateKeyPassphraseRequired events
+ /// must be registered.
+ ///
+ /// An exemplary documentation which sets either the server or client default context and creates
+ /// a PrivateKeyPassphraseHandler that reads the password from the XML file looks like this:
+ ///
+ /// <AppConfig>
+ /// <openSSL>
+ /// <server|client>
+ /// <privateKeyFile>mycert.key</privateKeyFile>
+ /// <certificateFile>mycert.crt</certificateFile>
+ /// <caConfig>rootcert.pem</caConfig>
+ /// <verificationMode>none|relaxed|strict|once</verificationMode>
+ /// <verificationDepth>1..9</verificationDepth>
+ /// <loadDefaultCAFile>true|false</loadDefaultCAFile>
+ /// <cipherList>ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH</cipherList>
+ /// <preferServerCiphers>true|false</preferServerCiphers>
+ /// <privateKeyPassphraseHandler>
+ /// <name>KeyFileHandler</name>
+ /// <options>
+ /// <password>test</password>
+ /// </options>
+ /// </privateKeyPassphraseHandler>
+ /// <invalidCertificateHandler>
+ /// <name>ConsoleCertificateHandler</name>
+ /// </invalidCertificateHandler>
+ /// <cacheSessions>true|false</cacheSessions>
+ /// <sessionIdContext>someString</sessionIdContext> <!-- server only -->
+ /// <sessionCacheSize>0..n</sessionCacheSize> <!-- server only -->
+ /// <sessionTimeout>0..n</sessionTimeout> <!-- server only -->
+ /// <extendedVerification>true|false</extendedVerification>
+ /// <requireTLSv1>true|false</requireTLSv1>
+ /// <requireTLSv1_1>true|false</requireTLSv1_1>
+ /// <requireTLSv1_2>true|false</requireTLSv1_2>
+ /// <disableProtocols>sslv2,sslv3,tlsv1,tlsv1_1,tlsv1_2</disableProtocols>
+ /// <dhParamsFile>dh.pem</dhParamsFile>
+ /// <ecdhCurve>prime256v1</ecdhCurve>
+ /// </server|client>
+ /// <fips>false</fips>
+ /// </openSSL>
+ /// </AppConfig>
+ ///
+ /// Following is a list of supported configuration properties. Property names must always
+ /// be prefixed with openSSL.server or openSSL.client. Some properties are only supported
+ /// for servers.
+ ///
+ /// - privateKeyFile (string): The path to the file containing the private key for the certificate
+ /// in PEM format (or containing both the private key and the certificate).
+ /// - certificateFile (string): The Path to the file containing the server's or client's certificate
+ /// in PEM format. Can be omitted if the the file given in privateKeyFile contains the certificate as well.
+ /// - caConfig (string): The path to the file or directory containing the trusted root certificates.
+ /// - verificationMode (string): Specifies whether and how peer certificates are validated (see
+ /// the Context class for details). Valid values are none, relaxed, strict, once.
+ /// - verificationDepth (integer, 1-9): Sets the upper limit for verification chain sizes. Verification
+ /// will fail if a certificate chain larger than this is encountered.
+ /// - loadDefaultCAFile (boolean): Specifies whether the builtin CA certificates from OpenSSL are used.
+ /// - cipherList (string): Specifies the supported ciphers in OpenSSL notation
+ /// (e.g. "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH").
+ /// - preferServerCiphers (bool): When choosing a cipher, use the server's preferences instead of the
+ /// client preferences. When not called, the SSL server will always follow the clients
+ /// preferences. When called, the SSL/TLS server will choose following its own
+ /// preferences.
+ /// - privateKeyPassphraseHandler.name (string): The name of the class (subclass of PrivateKeyPassphraseHandler)
+ /// used for obtaining the passphrase for accessing the private key.
+ /// - privateKeyPassphraseHandler.options.password (string): The password to be used by KeyFileHandler.
+ /// - invalidCertificateHandler.name: The name of the class (subclass of CertificateHandler)
+ /// used for confirming invalid certificates.
+ /// - cacheSessions (boolean): Enables or disables session caching.
+ /// - sessionIdContext (string): contains the application's unique session ID context, which becomes
+ /// part of each session identifier generated by the server. Can be an arbitrary sequence
+ /// of bytes with a maximum length of SSL_MAX_SSL_SESSION_ID_LENGTH. Should be specified
+ /// for a server to enable session caching. Should be specified even if session caching
+ /// is disabled to avoid problems with clients that request session caching (e.g. Firefox 3.6).
+ /// If not specified, defaults to ${application.name}.
+ /// - sessionCacheSize (integer): Sets the maximum size of the server session cache, in number of
+ /// sessions. The default size (according to OpenSSL documentation) is 1024*20, which may be too
+ /// large for many applications, especially on embedded platforms with limited memory.
+ /// Specifying a size of 0 will set an unlimited cache size.
+ /// - sessionTimeout (integer): Sets the timeout (in seconds) of cached sessions on the server.
+ /// - extendedVerification (boolean): Enable or disable the automatic post-connection
+ /// extended certificate verification.
+ /// - requireTLSv1 (boolean): Require a TLSv1 connection.
+ /// - requireTLSv1_1 (boolean): Require a TLSv1.1 connection.
+ /// - requireTLSv1_2 (boolean): Require a TLSv1.2 connection.
+ /// - disableProtocols (string): A comma-separated list of protocols that should be
+ /// disabled. Valid protocol names are sslv2, sslv3, tlsv1, tlsv1_1, tlsv1_2.
+ /// - dhParamsFile (string): Specifies a file containing Diffie-Hellman parameters.
+ /// If not specified or empty, the default parameters are used.
+ /// - ecdhCurve (string): Specifies the name of the curve to use for ECDH, based
+ /// on the curve names specified in RFC 4492. Defaults to "prime256v1".
+ /// - fips: Enable or disable OpenSSL FIPS mode. Only supported if the OpenSSL version
+ /// that this library is built against supports FIPS mode.
+{
+public:
+ typedef Poco::SharedPtr<PrivateKeyPassphraseHandler> PrivateKeyPassphraseHandlerPtr;
+ typedef Poco::SharedPtr<InvalidCertificateHandler> InvalidCertificateHandlerPtr;
+
+ Poco::BasicEvent<VerificationErrorArgs> ServerVerificationError;
+ /// Fired whenever a certificate verification error is detected by the server during a handshake.
+
+ Poco::BasicEvent<VerificationErrorArgs> ClientVerificationError;
+ /// Fired whenever a certificate verification error is detected by the client during a handshake.
+
+ Poco::BasicEvent<std::string> PrivateKeyPassphraseRequired;
+ /// Fired when a encrypted certificate is loaded. Not setting the password
+ /// in the event parameter will result in a failure to load the certificate.
+
+ static SSLManager& instance();
+ /// Returns the instance of the SSLManager singleton.
+
+ void initializeServer(PrivateKeyPassphraseHandlerPtr ptrPassphraseHandler, InvalidCertificateHandlerPtr ptrCertificateHandler, Context::Ptr ptrContext);
+ /// Initializes the server side of the SSLManager with a default passphrase handler, a default invalid certificate handler and a default context. If this method
+ /// is never called the SSLmanager will try to initialize its members from an application configuration.
+ ///
+ /// PtrPassphraseHandler and ptrCertificateHandler can be 0. However, in this case, event delegates
+ /// must be registered with the ServerVerificationError and PrivateKeyPassphraseRequired events.
+ ///
+ /// Note: Always create the handlers (or register the corresponding event delegates) before creating
+ /// the Context, as during creation of the Context the passphrase for the private key might be needed.
+ ///
+ /// Valid initialization code would be:
+ /// SharedPtr<PrivateKeyPassphraseHandler> pConsoleHandler = new KeyConsoleHandler;
+ /// SharedPtr<InvalidCertificateHandler> pInvalidCertHandler = new ConsoleCertificateHandler;
+ /// Context::Ptr pContext = new Context(Context::SERVER_USE, "any.pem", "any.pem", "rootcert.pem", Context::VERIFY_RELAXED, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
+ /// SSLManager::instance().initializeServer(pConsoleHandler, pInvalidCertHandler, pContext);
+
+ void initializeClient(PrivateKeyPassphraseHandlerPtr ptrPassphraseHandler, InvalidCertificateHandlerPtr ptrHandler, Context::Ptr ptrContext);
+ /// Initializes the client side of the SSLManager with a default passphrase handler, a default invalid certificate handler and a default context. If this method
+ /// is never called the SSLmanager will try to initialize its members from an application configuration.
+ ///
+ /// PtrPassphraseHandler and ptrCertificateHandler can be 0. However, in this case, event delegates
+ /// must be registered with the ClientVerificationError and PrivateKeyPassphraseRequired events.
+ ///
+ /// Note: Always create the handlers (or register the corresponding event delegates) before creating
+ /// the Context, as during creation of the Context the passphrase for the private key might be needed.
+ ///
+ /// Valid initialization code would be:
+ /// SharedPtr<PrivateKeyPassphraseHandler> pConsoleHandler = new KeyConsoleHandler;
+ /// SharedPtr<InvalidCertificateHandler> pInvalidCertHandler = new ConsoleCertificateHandler;
+ /// Context::Ptr pContext = new Context(Context::CLIENT_USE, "", "", "rootcert.pem", Context::VERIFY_RELAXED, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
+ /// SSLManager::instance().initializeClient(pConsoleHandler, pInvalidCertHandler, pContext);
+
+ Context::Ptr defaultServerContext();
+ /// Returns the default Context used by the server.
+ ///
+ /// Unless initializeServer() has been called, the first call to this method initializes the default Context
+ /// from the application configuration.
+
+ Context::Ptr defaultClientContext();
+ /// Returns the default Context used by the client.
+ ///
+ /// Unless initializeClient() has been called, the first call to this method initializes the default Context
+ /// from the application configuration.
+
+ PrivateKeyPassphraseHandlerPtr serverPassphraseHandler();
+ /// Returns the configured passphrase handler of the server. If none is set, the method will create a default one
+ /// from an application configuration.
+
+ InvalidCertificateHandlerPtr serverCertificateHandler();
+ /// Returns an initialized certificate handler (used by the server to verify client cert) which determines how invalid certificates are treated.
+ /// If none is set, it will try to auto-initialize one from an application configuration.
+
+ PrivateKeyPassphraseHandlerPtr clientPassphraseHandler();
+ /// Returns the configured passphrase handler of the client. If none is set, the method will create a default one
+ /// from an application configuration.
+
+ InvalidCertificateHandlerPtr clientCertificateHandler();
+ /// Returns an initialized certificate handler (used by the client to verify server cert) which determines how invalid certificates are treated.
+ /// If none is set, it will try to auto-initialize one from an application configuration.
+
+ PrivateKeyFactoryMgr& privateKeyFactoryMgr();
+ /// Returns the private key factory manager which stores the
+ /// factories for the different registered passphrase handlers for private keys.
+
+ CertificateHandlerFactoryMgr& certificateHandlerFactoryMgr();
+ /// Returns the CertificateHandlerFactoryMgr which stores the
+ /// factories for the different registered certificate handlers.
+
+ static bool isFIPSEnabled();
+ // Returns true if FIPS mode is enabled, false otherwise.
+
+ void shutdown();
+ /// Shuts down the SSLManager and releases the default Context
+ /// objects. After a call to shutdown(), the SSLManager can no
+ /// longer be used.
+ ///
+ /// Normally, it's not necessary to call this method directly, as this
+ /// will be called either by uninitializeSSL(), or when
+ /// the SSLManager instance is destroyed.
+
+ static const std::string CFG_SERVER_PREFIX;
+ static const std::string CFG_CLIENT_PREFIX;
+
+protected:
+ static int verifyClientCallback(int ok, X509_STORE_CTX* pStore);
+ /// The return value of this method defines how errors in
+ /// verification are handled. Return 0 to terminate the handshake,
+ /// or 1 to continue despite the error.
+
+ static int verifyServerCallback(int ok, X509_STORE_CTX* pStore);
+ /// The return value of this method defines how errors in
+ /// verification are handled. Return 0 to terminate the handshake,
+ /// or 1 to continue despite the error.
+
+ static int privateKeyPassphraseCallback(char* pBuf, int size, int flag, void* userData);
+ /// Method is invoked by OpenSSL to retrieve a passwd for an encrypted certificate.
+ /// The request is delegated to the PrivatekeyPassword event. This method returns the
+ /// length of the password.
+
+ static Poco::Util::AbstractConfiguration& appConfig();
+ /// Returns the application configuration.
+ ///
+ /// Throws a InvalidStateException if not application instance
+ /// is available.
+
+private:
+ SSLManager();
+ /// Creates the SSLManager.
+
+ ~SSLManager();
+ /// Destroys the SSLManager.
+
+ void initDefaultContext(bool server);
+ /// Inits the default context, the first time it is accessed.
+
+ void initEvents(bool server);
+ /// Registers delegates at the events according to the configuration.
+
+ void initPassphraseHandler(bool server);
+ /// Inits the passphrase handler.
+
+ void initCertificateHandler(bool server);
+ /// Inits the certificate handler.
+
+ static int verifyCallback(bool server, int ok, X509_STORE_CTX* pStore);
+ /// The return value of this method defines how errors in
+ /// verification are handled. Return 0 to terminate the handshake,
+ /// or 1 to continue despite the error.
+
+ PrivateKeyFactoryMgr _factoryMgr;
+ CertificateHandlerFactoryMgr _certHandlerFactoryMgr;
+ Context::Ptr _ptrDefaultServerContext;
+ PrivateKeyPassphraseHandlerPtr _ptrServerPassphraseHandler;
+ InvalidCertificateHandlerPtr _ptrServerCertificateHandler;
+ Context::Ptr _ptrDefaultClientContext;
+ PrivateKeyPassphraseHandlerPtr _ptrClientPassphraseHandler;
+ InvalidCertificateHandlerPtr _ptrClientCertificateHandler;
+ Poco::FastMutex _mutex;
+
+ static const std::string CFG_PRIV_KEY_FILE;
+ static const std::string CFG_CERTIFICATE_FILE;
+ static const std::string CFG_CA_LOCATION;
+ static const std::string CFG_VER_MODE;
+ static const Context::VerificationMode VAL_VER_MODE;
+ static const std::string CFG_VER_DEPTH;
+ static const int VAL_VER_DEPTH;
+ static const std::string CFG_ENABLE_DEFAULT_CA;
+ static const bool VAL_ENABLE_DEFAULT_CA;
+ static const std::string CFG_CIPHER_LIST;
+ static const std::string CFG_CYPHER_LIST; // for backwards compatibility
+ static const std::string VAL_CIPHER_LIST;
+ static const std::string CFG_PREFER_SERVER_CIPHERS;
+ static const std::string CFG_DELEGATE_HANDLER;
+ static const std::string VAL_DELEGATE_HANDLER;
+ static const std::string CFG_CERTIFICATE_HANDLER;
+ static const std::string VAL_CERTIFICATE_HANDLER;
+ static const std::string CFG_CACHE_SESSIONS;
+ static const std::string CFG_SESSION_ID_CONTEXT;
+ static const std::string CFG_SESSION_CACHE_SIZE;
+ static const std::string CFG_SESSION_TIMEOUT;
+ static const std::string CFG_EXTENDED_VERIFICATION;
+ static const std::string CFG_REQUIRE_TLSV1;
+ static const std::string CFG_REQUIRE_TLSV1_1;
+ static const std::string CFG_REQUIRE_TLSV1_2;
+ static const std::string CFG_DISABLE_PROTOCOLS;
+ static const std::string CFG_DH_PARAMS_FILE;
+ static const std::string CFG_ECDH_CURVE;
+
+#ifdef OPENSSL_FIPS
+ static const std::string CFG_FIPS_MODE;
+ static const bool VAL_FIPS_MODE;
+#endif
+
+ friend class Poco::SingletonHolder<SSLManager>;
+ friend class Context;
+};
+
+
+//
+// inlines
+//
+inline PrivateKeyFactoryMgr& SSLManager::privateKeyFactoryMgr()
+{
+ return _factoryMgr;
+}
+
+
+inline CertificateHandlerFactoryMgr& SSLManager::certificateHandlerFactoryMgr()
+{
+ return _certHandlerFactoryMgr;
+}
+
+
+inline bool SSLManager::isFIPSEnabled()
+{
+#ifdef OPENSSL_FIPS
+ return FIPS_mode() ? true : false;
+#else
+ return false;
+#endif
+}
+
+
+inline int SSLManager::verifyServerCallback(int ok, X509_STORE_CTX* pStore)
+{
+ return SSLManager::verifyCallback(true, ok, pStore);
+}
+
+
+inline int SSLManager::verifyClientCallback(int ok, X509_STORE_CTX* pStore)
+{
+ return SSLManager::verifyCallback(false, ok, pStore);
+}
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_SSLManager_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureSMTPClientSession.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureSMTPClientSession.h
index 146be2aeb5..71518046f2 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureSMTPClientSession.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureSMTPClientSession.h
@@ -1,96 +1,96 @@
-//
-// SecureSMTPClientSession.h
-//
-// Library: NetSSL_OpenSSL
-// Package: Mail
-// Module: SecureSMTPClientSession
-//
-// Definition of the SecureSMTPClientSession class.
-//
-// Copyright (c) 2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef Net_SecureSMTPClientSession_INCLUDED
-#define Net_SecureSMTPClientSession_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/SMTPClientSession.h"
-#include "Poco/Net/Context.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API SecureSMTPClientSession: public SMTPClientSession
- /// This class implements an Simple Mail
- /// Transfer Protocol (SMTP, RFC 2821)
- /// client for sending e-mail messages that
- /// supports the STARTTLS command for secure
- /// connections.
- ///
- /// Usage is as follows:
- /// 1. Create a SecureSMTPClientSession object.
- /// 2. Call login() or login(hostname).
- /// 3. Call startTLS() to switch to a secure connection.
- /// Check the return value to see if a secure connection
- /// has actually been established (not all servers may
- /// support STARTTLS).
- /// 4. Call any of the login() methods to securely authenticate
- /// with a username and password.
- /// 5. Send the message(s).
-{
-public:
- explicit SecureSMTPClientSession(const StreamSocket& socket);
- /// Creates the SecureSMTPClientSession using
- /// the given socket, which must be connected
- /// to a SMTP server.
-
- SecureSMTPClientSession(const std::string& host, Poco::UInt16 port = SMTP_PORT);
- /// Creates the SecureSMTPClientSession using a socket connected
- /// to the given host and port.
-
- virtual ~SecureSMTPClientSession();
- /// Destroys the SMTPClientSession.
-
- bool startTLS();
- /// Sends a STARTTLS command and, if successful,
- /// creates a secure SSL/TLS connection over the
- /// existing socket connection.
- ///
- /// Must be called after login() or login(hostname).
- /// If successful, login() can be called again
- /// to authenticate the user.
- ///
- /// Returns true if the STARTTLS command was successful,
- /// false otherwise.
-
- bool startTLS(Context::Ptr pContext);
- /// Sends a STARTTLS command and, if successful,
- /// creates a secure SSL/TLS connection over the
- /// existing socket connection.
- ///
- /// Uses the given Context object for creating
- /// the SSL/TLS connection.
- ///
- /// Must be called after login() or login(hostname).
- /// If successful, login() can be called again
- /// to authenticate the user.
- ///
- /// Returns true if the STARTTLS command was successful,
- /// false otherwise.
-
-private:
- std::string _host;
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // Net_SecureSMTPClientSession_INCLUDED
+//
+// SecureSMTPClientSession.h
+//
+// Library: NetSSL_OpenSSL
+// Package: Mail
+// Module: SecureSMTPClientSession
+//
+// Definition of the SecureSMTPClientSession class.
+//
+// Copyright (c) 2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef Net_SecureSMTPClientSession_INCLUDED
+#define Net_SecureSMTPClientSession_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/SMTPClientSession.h"
+#include "Poco/Net/Context.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API SecureSMTPClientSession: public SMTPClientSession
+ /// This class implements an Simple Mail
+ /// Transfer Protocol (SMTP, RFC 2821)
+ /// client for sending e-mail messages that
+ /// supports the STARTTLS command for secure
+ /// connections.
+ ///
+ /// Usage is as follows:
+ /// 1. Create a SecureSMTPClientSession object.
+ /// 2. Call login() or login(hostname).
+ /// 3. Call startTLS() to switch to a secure connection.
+ /// Check the return value to see if a secure connection
+ /// has actually been established (not all servers may
+ /// support STARTTLS).
+ /// 4. Call any of the login() methods to securely authenticate
+ /// with a username and password.
+ /// 5. Send the message(s).
+{
+public:
+ explicit SecureSMTPClientSession(const StreamSocket& socket);
+ /// Creates the SecureSMTPClientSession using
+ /// the given socket, which must be connected
+ /// to a SMTP server.
+
+ SecureSMTPClientSession(const std::string& host, Poco::UInt16 port = SMTP_PORT);
+ /// Creates the SecureSMTPClientSession using a socket connected
+ /// to the given host and port.
+
+ virtual ~SecureSMTPClientSession();
+ /// Destroys the SMTPClientSession.
+
+ bool startTLS();
+ /// Sends a STARTTLS command and, if successful,
+ /// creates a secure SSL/TLS connection over the
+ /// existing socket connection.
+ ///
+ /// Must be called after login() or login(hostname).
+ /// If successful, login() can be called again
+ /// to authenticate the user.
+ ///
+ /// Returns true if the STARTTLS command was successful,
+ /// false otherwise.
+
+ bool startTLS(Context::Ptr pContext);
+ /// Sends a STARTTLS command and, if successful,
+ /// creates a secure SSL/TLS connection over the
+ /// existing socket connection.
+ ///
+ /// Uses the given Context object for creating
+ /// the SSL/TLS connection.
+ ///
+ /// Must be called after login() or login(hostname).
+ /// If successful, login() can be called again
+ /// to authenticate the user.
+ ///
+ /// Returns true if the STARTTLS command was successful,
+ /// false otherwise.
+
+private:
+ std::string _host;
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // Net_SecureSMTPClientSession_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocket.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocket.h
index 2b89c45cb9..d6bc23e496 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocket.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocket.h
@@ -1,136 +1,136 @@
-//
-// SecureServerSocket.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLSockets
-// Module: SecureServerSocket
-//
-// Definition of the SecureServerSocket class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_SecureServerSocket_INCLUDED
-#define NetSSL_SecureServerSocket_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/ServerSocket.h"
-#include "Poco/Net/Context.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API SecureServerSocket: public ServerSocket
- /// A server socket for secure SSL connections.
-{
-public:
- SecureServerSocket();
- /// Creates a SSL server socket using the
- /// default SSL server context.
- ///
- /// The server socket must be bound to
- /// an address and put into listening state.
-
- explicit SecureServerSocket(Context::Ptr pContext);
- /// Creates a SSL server socket, using the
- /// given SSL context object.
- ///
- /// The server socket must be bound to
- /// an address and put into listening state.
-
- SecureServerSocket(const Socket& socket);
- /// Creates the SecureServerSocket with the SocketImpl
- /// from another socket. The SocketImpl must be
- /// a SecureServerSocketImpl, otherwise an InvalidArgumentException
- /// will be thrown.
-
- SecureServerSocket(const SocketAddress& address, int backlog = 64);
- /// Creates a server socket using the default server SSL context,
- /// binds it to the given address and puts it in listening
- /// state.
- ///
- /// After successful construction, the server socket
- /// is ready to accept connections.
-
- SecureServerSocket(const SocketAddress& address, int backlog, Context::Ptr pContext);
- /// Creates a server socket using the given SSL context, binds it
- /// to the given address and puts it in listening
- /// state.
- ///
- /// After successful construction, the server socket
- /// is ready to accept connections.
-
- SecureServerSocket(Poco::UInt16 port, int backlog = 64);
- /// Creates a server socket using the default server SSL context,
- /// binds it to the given port and puts it in listening
- /// state.
- ///
- /// After successful construction, the server socket
- /// is ready to accept connections.
-
- SecureServerSocket(Poco::UInt16 port, int backlog, Context::Ptr pContext);
- /// Creates a server socket using the given SSL context, binds it
- /// to the given port and puts it in listening
- /// state.
- ///
- /// After successful construction, the server socket
- /// is ready to accept connections.
-
- virtual ~SecureServerSocket();
- /// Destroys the StreamSocket.
-
- SecureServerSocket& operator = (const Socket& socket);
- /// Assignment operator.
- ///
- /// Releases the socket's SocketImpl and
- /// attaches the SocketImpl from the other socket and
- /// increments the reference count of the SocketImpl.
-
- StreamSocket acceptConnection(SocketAddress& clientAddr);
- /// Get the next completed connection from the
- /// socket's completed connection queue.
- ///
- /// If the queue is empty, waits until a connection
- /// request completes.
- ///
- /// Returns a new SSL socket for the connection
- /// with the client.
- ///
- /// The client socket's address is returned in clientAddr.
- ///
- /// No SSL handshake is performed on the new connection.
- /// The SSL handshake will be performed the first time
- /// sendBytes(), receiveBytes() or completeHandshake()
- /// is called on the returned SecureStreamSocket.
-
- StreamSocket acceptConnection();
- /// Get the next completed connection from the
- /// socket's completed connection queue.
- ///
- /// If the queue is empty, waits until a connection
- /// request completes.
- ///
- /// Returns a new SSL socket for the connection
- /// with the client.
- ///
- /// No SSL handshake is performed on the new connection.
- /// The SSL handshake will be performed the first time
- /// sendBytes(), receiveBytes() or completeHandshake()
- /// is called on the returned SecureStreamSocket.
-
- Context::Ptr context() const;
- /// Returns the SSL context used by this socket.
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_SecureServerSocket_INCLUDED
+//
+// SecureServerSocket.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLSockets
+// Module: SecureServerSocket
+//
+// Definition of the SecureServerSocket class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_SecureServerSocket_INCLUDED
+#define NetSSL_SecureServerSocket_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/ServerSocket.h"
+#include "Poco/Net/Context.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API SecureServerSocket: public ServerSocket
+ /// A server socket for secure SSL connections.
+{
+public:
+ SecureServerSocket();
+ /// Creates a SSL server socket using the
+ /// default SSL server context.
+ ///
+ /// The server socket must be bound to
+ /// an address and put into listening state.
+
+ explicit SecureServerSocket(Context::Ptr pContext);
+ /// Creates a SSL server socket, using the
+ /// given SSL context object.
+ ///
+ /// The server socket must be bound to
+ /// an address and put into listening state.
+
+ SecureServerSocket(const Socket& socket);
+ /// Creates the SecureServerSocket with the SocketImpl
+ /// from another socket. The SocketImpl must be
+ /// a SecureServerSocketImpl, otherwise an InvalidArgumentException
+ /// will be thrown.
+
+ SecureServerSocket(const SocketAddress& address, int backlog = 64);
+ /// Creates a server socket using the default server SSL context,
+ /// binds it to the given address and puts it in listening
+ /// state.
+ ///
+ /// After successful construction, the server socket
+ /// is ready to accept connections.
+
+ SecureServerSocket(const SocketAddress& address, int backlog, Context::Ptr pContext);
+ /// Creates a server socket using the given SSL context, binds it
+ /// to the given address and puts it in listening
+ /// state.
+ ///
+ /// After successful construction, the server socket
+ /// is ready to accept connections.
+
+ SecureServerSocket(Poco::UInt16 port, int backlog = 64);
+ /// Creates a server socket using the default server SSL context,
+ /// binds it to the given port and puts it in listening
+ /// state.
+ ///
+ /// After successful construction, the server socket
+ /// is ready to accept connections.
+
+ SecureServerSocket(Poco::UInt16 port, int backlog, Context::Ptr pContext);
+ /// Creates a server socket using the given SSL context, binds it
+ /// to the given port and puts it in listening
+ /// state.
+ ///
+ /// After successful construction, the server socket
+ /// is ready to accept connections.
+
+ virtual ~SecureServerSocket();
+ /// Destroys the StreamSocket.
+
+ SecureServerSocket& operator = (const Socket& socket);
+ /// Assignment operator.
+ ///
+ /// Releases the socket's SocketImpl and
+ /// attaches the SocketImpl from the other socket and
+ /// increments the reference count of the SocketImpl.
+
+ StreamSocket acceptConnection(SocketAddress& clientAddr);
+ /// Get the next completed connection from the
+ /// socket's completed connection queue.
+ ///
+ /// If the queue is empty, waits until a connection
+ /// request completes.
+ ///
+ /// Returns a new SSL socket for the connection
+ /// with the client.
+ ///
+ /// The client socket's address is returned in clientAddr.
+ ///
+ /// No SSL handshake is performed on the new connection.
+ /// The SSL handshake will be performed the first time
+ /// sendBytes(), receiveBytes() or completeHandshake()
+ /// is called on the returned SecureStreamSocket.
+
+ StreamSocket acceptConnection();
+ /// Get the next completed connection from the
+ /// socket's completed connection queue.
+ ///
+ /// If the queue is empty, waits until a connection
+ /// request completes.
+ ///
+ /// Returns a new SSL socket for the connection
+ /// with the client.
+ ///
+ /// No SSL handshake is performed on the new connection.
+ /// The SSL handshake will be performed the first time
+ /// sendBytes(), receiveBytes() or completeHandshake()
+ /// is called on the returned SecureStreamSocket.
+
+ Context::Ptr context() const;
+ /// Returns the SSL context used by this socket.
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_SecureServerSocket_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocketImpl.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocketImpl.h
index 2cf969d099..8889ed5028 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocketImpl.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocketImpl.h
@@ -1,146 +1,146 @@
-//
-// SecureServerSocketImpl.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLSockets
-// Module: SecureServerSocketImpl
-//
-// Definition of the SecureServerSocketImpl class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_SecureServerSocketImpl_INCLUDED
-#define NetSSL_SecureServerSocketImpl_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/SecureSocketImpl.h"
-#include "Poco/Net/ServerSocketImpl.h"
-#include "Poco/Net/Context.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API SecureServerSocketImpl: public ServerSocketImpl
- /// The SocketImpl class for SecureServerSocket.
-{
-public:
- SecureServerSocketImpl(Context::Ptr pContext);
- /// Creates the SecureServerSocketImpl using the
- /// given SSL context object.
-
- SocketImpl* acceptConnection(SocketAddress& clientAddr);
- /// Get the next completed connection from the
- /// socket's completed connection queue.
- ///
- /// If the queue is empty, waits until a connection
- /// request completes.
- ///
- /// Returns a new TCP socket for the connection
- /// with the client.
- ///
- /// The client socket's address is returned in clientAddr.
-
- void connect(const SocketAddress& address);
- /// Not supported by this kind of socket.
- ///
- /// Throws a Poco::InvalidAccessException.
-
- void connect(const SocketAddress& address, const Poco::Timespan& timeout);
- /// Not supported by this kind of socket.
- ///
- /// Throws a Poco::InvalidAccessException.
-
- void connectNB(const SocketAddress& address);
- /// Not supported by this kind of socket.
- ///
- /// Throws a Poco::InvalidAccessException.
-
- void bind(const SocketAddress& address, bool reuseAddress = false, bool reusePort = false);
- /// Bind a local address to the socket.
- ///
- /// This is usually only done when establishing a server
- /// socket. TCP clients should not bind a socket to a
- /// specific address.
- ///
- /// If reuseAddress is true, sets the SO_REUSEADDR
- /// socket option.
-
- void listen(int backlog = 64);
- /// Puts the socket into listening state.
- ///
- /// The socket becomes a passive socket that
- /// can accept incoming connection requests.
- ///
- /// The backlog argument specifies the maximum
- /// number of connections that can be queued
- /// for this socket.
-
- void close();
- /// Close the socket.
-
- int sendBytes(const void* buffer, int length, int flags = 0);
- /// Not supported by this kind of socket.
- ///
- /// Throws a Poco::InvalidAccessException.
-
- int receiveBytes(void* buffer, int length, int flags = 0);
- /// Not supported by this kind of socket.
- ///
- /// Throws a Poco::InvalidAccessException.
-
- int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0);
- /// Not supported by this kind of socket.
- ///
- /// Throws a Poco::InvalidAccessException.
-
- int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0);
- /// Not supported by this kind of socket.
- ///
- /// Throws a Poco::InvalidAccessException.
-
- void sendUrgent(unsigned char data);
- /// Not supported by this kind of socket.
- ///
- /// Throws a Poco::InvalidAccessException.
-
- bool secure() const;
- /// Returns true iff the socket's connection is secure
- /// (using SSL or TLS).
-
- Context::Ptr context() const;
- /// Returns the SSL context used by this socket.
-
-protected:
- ~SecureServerSocketImpl();
- /// Destroys the SecureServerSocketImpl.
-
-private:
- SecureServerSocketImpl(const SecureServerSocketImpl&);
- SecureServerSocketImpl& operator = (const SecureServerSocketImpl&);
-
-private:
- SecureSocketImpl _impl;
-};
-
-
-//
-// inlines
-//
-inline Context::Ptr SecureServerSocketImpl::context() const
-{
- return _impl.context();
-}
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_SecureServerSocketImpl_INCLUDED
+//
+// SecureServerSocketImpl.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLSockets
+// Module: SecureServerSocketImpl
+//
+// Definition of the SecureServerSocketImpl class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_SecureServerSocketImpl_INCLUDED
+#define NetSSL_SecureServerSocketImpl_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/SecureSocketImpl.h"
+#include "Poco/Net/ServerSocketImpl.h"
+#include "Poco/Net/Context.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API SecureServerSocketImpl: public ServerSocketImpl
+ /// The SocketImpl class for SecureServerSocket.
+{
+public:
+ SecureServerSocketImpl(Context::Ptr pContext);
+ /// Creates the SecureServerSocketImpl using the
+ /// given SSL context object.
+
+ SocketImpl* acceptConnection(SocketAddress& clientAddr);
+ /// Get the next completed connection from the
+ /// socket's completed connection queue.
+ ///
+ /// If the queue is empty, waits until a connection
+ /// request completes.
+ ///
+ /// Returns a new TCP socket for the connection
+ /// with the client.
+ ///
+ /// The client socket's address is returned in clientAddr.
+
+ void connect(const SocketAddress& address);
+ /// Not supported by this kind of socket.
+ ///
+ /// Throws a Poco::InvalidAccessException.
+
+ void connect(const SocketAddress& address, const Poco::Timespan& timeout);
+ /// Not supported by this kind of socket.
+ ///
+ /// Throws a Poco::InvalidAccessException.
+
+ void connectNB(const SocketAddress& address);
+ /// Not supported by this kind of socket.
+ ///
+ /// Throws a Poco::InvalidAccessException.
+
+ void bind(const SocketAddress& address, bool reuseAddress = false, bool reusePort = false);
+ /// Bind a local address to the socket.
+ ///
+ /// This is usually only done when establishing a server
+ /// socket. TCP clients should not bind a socket to a
+ /// specific address.
+ ///
+ /// If reuseAddress is true, sets the SO_REUSEADDR
+ /// socket option.
+
+ void listen(int backlog = 64);
+ /// Puts the socket into listening state.
+ ///
+ /// The socket becomes a passive socket that
+ /// can accept incoming connection requests.
+ ///
+ /// The backlog argument specifies the maximum
+ /// number of connections that can be queued
+ /// for this socket.
+
+ void close();
+ /// Close the socket.
+
+ int sendBytes(const void* buffer, int length, int flags = 0);
+ /// Not supported by this kind of socket.
+ ///
+ /// Throws a Poco::InvalidAccessException.
+
+ int receiveBytes(void* buffer, int length, int flags = 0);
+ /// Not supported by this kind of socket.
+ ///
+ /// Throws a Poco::InvalidAccessException.
+
+ int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0);
+ /// Not supported by this kind of socket.
+ ///
+ /// Throws a Poco::InvalidAccessException.
+
+ int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0);
+ /// Not supported by this kind of socket.
+ ///
+ /// Throws a Poco::InvalidAccessException.
+
+ void sendUrgent(unsigned char data);
+ /// Not supported by this kind of socket.
+ ///
+ /// Throws a Poco::InvalidAccessException.
+
+ bool secure() const;
+ /// Returns true iff the socket's connection is secure
+ /// (using SSL or TLS).
+
+ Context::Ptr context() const;
+ /// Returns the SSL context used by this socket.
+
+protected:
+ ~SecureServerSocketImpl();
+ /// Destroys the SecureServerSocketImpl.
+
+private:
+ SecureServerSocketImpl(const SecureServerSocketImpl&);
+ SecureServerSocketImpl& operator = (const SecureServerSocketImpl&);
+
+private:
+ SecureSocketImpl _impl;
+};
+
+
+//
+// inlines
+//
+inline Context::Ptr SecureServerSocketImpl::context() const
+{
+ return _impl.context();
+}
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_SecureServerSocketImpl_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureSocketImpl.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureSocketImpl.h
index 8d331a3a6d..5ff589d336 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureSocketImpl.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureSocketImpl.h
@@ -1,265 +1,265 @@
-//
-// SecureSocketImpl.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLSockets
-// Module: SecureSocketImpl
-//
-// Definition of the SecureSocketImpl class.
-//
-// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_SecureSocketImpl_INCLUDED
-#define NetSSL_SecureSocketImpl_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/SocketImpl.h"
-#include "Poco/Net/Context.h"
-#include "Poco/Net/X509Certificate.h"
-#include "Poco/Net/Session.h"
-#include <openssl/bio.h>
-#include <openssl/ssl.h>
-
-
-namespace Poco {
-namespace Net {
-
-
-class HostEntry;
-
-
-class NetSSL_API SecureSocketImpl
- /// The SocketImpl for SecureStreamSocket.
-{
-public:
- SecureSocketImpl(Poco::AutoPtr<SocketImpl> pSocketImpl, Context::Ptr pContext);
- /// Creates the SecureSocketImpl using an already
- /// connected stream socket.
-
- virtual ~SecureSocketImpl();
- /// Destroys the SecureSocketImpl.
-
- SocketImpl* acceptConnection(SocketAddress& clientAddr);
- /// Get the next completed connection from the
- /// socket's completed connection queue.
- ///
- /// If the queue is empty, waits until a connection
- /// request completes.
- ///
- /// Returns a new SSL socket for the connection
- /// with the client.
- ///
- /// The client socket's address is returned in clientAddr.
-
- void connect(const SocketAddress& address, bool performHandshake);
- /// Initializes the socket and establishes a secure connection to
- /// the TCP server at the given address.
- ///
- /// If performHandshake is true, the SSL handshake is performed immediately
- /// after establishing the connection. Otherwise, the handshake is performed
- /// the first time sendBytes(), receiveBytes() or completeHandshake() is called.
-
- void connect(const SocketAddress& address, const Poco::Timespan& timeout, bool performHandshake);
- /// Initializes the socket, sets the socket timeout and
- /// establishes a secure connection to the TCP server at the given address.
- ///
- /// If performHandshake is true, the SSL handshake is performed immediately
- /// after establishing the connection. Otherwise, the handshake is performed
- /// the first time sendBytes(), receiveBytes() or completeHandshake() is called.
-
- void connectNB(const SocketAddress& address);
- /// Initializes the socket and establishes a secure connection to
- /// the TCP server at the given address. Prior to opening the
- /// connection the socket is set to nonblocking mode.
-
- void bind(const SocketAddress& address, bool reuseAddress = false, bool reusePort = false);
- /// Bind a local address to the socket.
- ///
- /// This is usually only done when establishing a server
- /// socket. SSL clients should not bind a socket to a
- /// specific address.
- ///
- /// If reuseAddress is true, sets the SO_REUSEADDR
- /// socket option.
-
- void listen(int backlog = 64);
- /// Puts the socket into listening state.
- ///
- /// The socket becomes a passive socket that
- /// can accept incoming connection requests.
- ///
- /// The backlog argument specifies the maximum
- /// number of connections that can be queued
- /// for this socket.
-
- void shutdown();
- /// Shuts down the connection by attempting
- /// an orderly SSL shutdown, then actually
- /// shutting down the TCP connection.
-
- void close();
- /// Close the socket.
-
- void abort();
- /// Aborts the connection by closing the
- /// underlying TCP connection. No orderly SSL shutdown
- /// is performed.
-
- int sendBytes(const void* buffer, int length, int flags = 0);
- /// Sends the contents of the given buffer through
- /// the socket. Any specified flags are ignored.
- ///
- /// Returns the number of bytes sent, which may be
- /// less than the number of bytes specified.
-
- int receiveBytes(void* buffer, int length, int flags = 0);
- /// Receives data from the socket and stores it
- /// in buffer. Up to length bytes are received.
- ///
- /// Returns the number of bytes received.
-
- int available() const;
- /// Returns the number of bytes available from the
- /// SSL buffer for immediate reading.
-
- int completeHandshake();
- /// Completes the SSL handshake.
- ///
- /// If the SSL connection was the result of an accept(),
- /// the server-side handshake is completed, otherwise
- /// a client-side handshake is performed.
-
- poco_socket_t sockfd();
- /// Returns the underlying socket descriptor.
-
- X509* peerCertificate() const;
- /// Returns the peer's certificate.
-
- Context::Ptr context() const;
- /// Returns the SSL context used for this socket.
-
- void verifyPeerCertificate();
- /// Performs post-connect (or post-accept) peer certificate validation,
- /// using the peer host name set with setPeerHostName(), or the peer's
- /// IP address string if no peer host name has been set.
-
- void verifyPeerCertificate(const std::string& hostName);
- /// Performs post-connect (or post-accept) peer certificate validation
- /// using the given peer host name.
-
- void setPeerHostName(const std::string& hostName);
- /// Sets the peer host name for certificate validation purposes.
-
- const std::string& getPeerHostName() const;
- /// Returns the peer host name.
-
- Session::Ptr currentSession();
- /// Returns the SSL session of the current connection,
- /// for reuse in a future connection (if session caching
- /// is enabled).
- ///
- /// If no connection is established, returns null.
-
- void useSession(Session::Ptr pSession);
- /// Sets the SSL session to use for the next
- /// connection. Setting a previously saved Session
- /// object is necessary to enable session caching.
- ///
- /// To remove the currently set session, a null pointer
- /// can be given.
- ///
- /// Must be called before connect() to be effective.
-
- bool sessionWasReused();
- /// Returns true iff a reused session was negotiated during
- /// the handshake.
-
-protected:
- void acceptSSL();
- /// Performs a server-side SSL handshake and certificate verification.
-
- void connectSSL(bool performHandshake);
- /// Performs a client-side SSL handshake and establishes a secure
- /// connection over an already existing TCP connection.
-
- long verifyPeerCertificateImpl(const std::string& hostName);
- /// Performs post-connect (or post-accept) peer certificate validation.
-
- static bool isLocalHost(const std::string& hostName);
- /// Returns true iff the given host name is the local host
- /// (either "localhost" or "127.0.0.1").
-
+//
+// SecureSocketImpl.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLSockets
+// Module: SecureSocketImpl
+//
+// Definition of the SecureSocketImpl class.
+//
+// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_SecureSocketImpl_INCLUDED
+#define NetSSL_SecureSocketImpl_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/SocketImpl.h"
+#include "Poco/Net/Context.h"
+#include "Poco/Net/X509Certificate.h"
+#include "Poco/Net/Session.h"
+#include <openssl/bio.h>
+#include <openssl/ssl.h>
+
+
+namespace Poco {
+namespace Net {
+
+
+class HostEntry;
+
+
+class NetSSL_API SecureSocketImpl
+ /// The SocketImpl for SecureStreamSocket.
+{
+public:
+ SecureSocketImpl(Poco::AutoPtr<SocketImpl> pSocketImpl, Context::Ptr pContext);
+ /// Creates the SecureSocketImpl using an already
+ /// connected stream socket.
+
+ virtual ~SecureSocketImpl();
+ /// Destroys the SecureSocketImpl.
+
+ SocketImpl* acceptConnection(SocketAddress& clientAddr);
+ /// Get the next completed connection from the
+ /// socket's completed connection queue.
+ ///
+ /// If the queue is empty, waits until a connection
+ /// request completes.
+ ///
+ /// Returns a new SSL socket for the connection
+ /// with the client.
+ ///
+ /// The client socket's address is returned in clientAddr.
+
+ void connect(const SocketAddress& address, bool performHandshake);
+ /// Initializes the socket and establishes a secure connection to
+ /// the TCP server at the given address.
+ ///
+ /// If performHandshake is true, the SSL handshake is performed immediately
+ /// after establishing the connection. Otherwise, the handshake is performed
+ /// the first time sendBytes(), receiveBytes() or completeHandshake() is called.
+
+ void connect(const SocketAddress& address, const Poco::Timespan& timeout, bool performHandshake);
+ /// Initializes the socket, sets the socket timeout and
+ /// establishes a secure connection to the TCP server at the given address.
+ ///
+ /// If performHandshake is true, the SSL handshake is performed immediately
+ /// after establishing the connection. Otherwise, the handshake is performed
+ /// the first time sendBytes(), receiveBytes() or completeHandshake() is called.
+
+ void connectNB(const SocketAddress& address);
+ /// Initializes the socket and establishes a secure connection to
+ /// the TCP server at the given address. Prior to opening the
+ /// connection the socket is set to nonblocking mode.
+
+ void bind(const SocketAddress& address, bool reuseAddress = false, bool reusePort = false);
+ /// Bind a local address to the socket.
+ ///
+ /// This is usually only done when establishing a server
+ /// socket. SSL clients should not bind a socket to a
+ /// specific address.
+ ///
+ /// If reuseAddress is true, sets the SO_REUSEADDR
+ /// socket option.
+
+ void listen(int backlog = 64);
+ /// Puts the socket into listening state.
+ ///
+ /// The socket becomes a passive socket that
+ /// can accept incoming connection requests.
+ ///
+ /// The backlog argument specifies the maximum
+ /// number of connections that can be queued
+ /// for this socket.
+
+ void shutdown();
+ /// Shuts down the connection by attempting
+ /// an orderly SSL shutdown, then actually
+ /// shutting down the TCP connection.
+
+ void close();
+ /// Close the socket.
+
+ void abort();
+ /// Aborts the connection by closing the
+ /// underlying TCP connection. No orderly SSL shutdown
+ /// is performed.
+
+ int sendBytes(const void* buffer, int length, int flags = 0);
+ /// Sends the contents of the given buffer through
+ /// the socket. Any specified flags are ignored.
+ ///
+ /// Returns the number of bytes sent, which may be
+ /// less than the number of bytes specified.
+
+ int receiveBytes(void* buffer, int length, int flags = 0);
+ /// Receives data from the socket and stores it
+ /// in buffer. Up to length bytes are received.
+ ///
+ /// Returns the number of bytes received.
+
+ int available() const;
+ /// Returns the number of bytes available from the
+ /// SSL buffer for immediate reading.
+
+ int completeHandshake();
+ /// Completes the SSL handshake.
+ ///
+ /// If the SSL connection was the result of an accept(),
+ /// the server-side handshake is completed, otherwise
+ /// a client-side handshake is performed.
+
+ poco_socket_t sockfd();
+ /// Returns the underlying socket descriptor.
+
+ X509* peerCertificate() const;
+ /// Returns the peer's certificate.
+
+ Context::Ptr context() const;
+ /// Returns the SSL context used for this socket.
+
+ void verifyPeerCertificate();
+ /// Performs post-connect (or post-accept) peer certificate validation,
+ /// using the peer host name set with setPeerHostName(), or the peer's
+ /// IP address string if no peer host name has been set.
+
+ void verifyPeerCertificate(const std::string& hostName);
+ /// Performs post-connect (or post-accept) peer certificate validation
+ /// using the given peer host name.
+
+ void setPeerHostName(const std::string& hostName);
+ /// Sets the peer host name for certificate validation purposes.
+
+ const std::string& getPeerHostName() const;
+ /// Returns the peer host name.
+
+ Session::Ptr currentSession();
+ /// Returns the SSL session of the current connection,
+ /// for reuse in a future connection (if session caching
+ /// is enabled).
+ ///
+ /// If no connection is established, returns null.
+
+ void useSession(Session::Ptr pSession);
+ /// Sets the SSL session to use for the next
+ /// connection. Setting a previously saved Session
+ /// object is necessary to enable session caching.
+ ///
+ /// To remove the currently set session, a null pointer
+ /// can be given.
+ ///
+ /// Must be called before connect() to be effective.
+
+ bool sessionWasReused();
+ /// Returns true iff a reused session was negotiated during
+ /// the handshake.
+
+protected:
+ void acceptSSL();
+ /// Performs a server-side SSL handshake and certificate verification.
+
+ void connectSSL(bool performHandshake);
+ /// Performs a client-side SSL handshake and establishes a secure
+ /// connection over an already existing TCP connection.
+
+ long verifyPeerCertificateImpl(const std::string& hostName);
+ /// Performs post-connect (or post-accept) peer certificate validation.
+
+ static bool isLocalHost(const std::string& hostName);
+ /// Returns true iff the given host name is the local host
+ /// (either "localhost" or "127.0.0.1").
+
bool mustRetry(int rc, Poco::Timespan& remaining_time);
- /// Returns true if the last operation should be retried,
- /// otherwise false.
- ///
- /// In case of an SSL_ERROR_WANT_READ error, and if the socket is
- /// blocking, waits for the underlying socket to become readable.
- ///
- /// In case of an SSL_ERROR_WANT_WRITE error, and if the socket is
- /// blocking, waits for the underlying socket to become writable.
- ///
- /// Can also throw a Poco::TimeoutException if the socket does
- /// not become readable or writable within the sockets
- /// receive or send timeout.
-
- int handleError(int rc);
- /// Handles an SSL error by throwing an appropriate exception.
-
- void reset();
- /// Prepares the socket for re-use.
- ///
- /// After closing and resetting a socket, the socket can
- /// be used for a new connection.
- ///
- /// Note that simply closing a socket is not sufficient
- /// to be able to re-use it again.
-
+ /// Returns true if the last operation should be retried,
+ /// otherwise false.
+ ///
+ /// In case of an SSL_ERROR_WANT_READ error, and if the socket is
+ /// blocking, waits for the underlying socket to become readable.
+ ///
+ /// In case of an SSL_ERROR_WANT_WRITE error, and if the socket is
+ /// blocking, waits for the underlying socket to become writable.
+ ///
+ /// Can also throw a Poco::TimeoutException if the socket does
+ /// not become readable or writable within the sockets
+ /// receive or send timeout.
+
+ int handleError(int rc);
+ /// Handles an SSL error by throwing an appropriate exception.
+
+ void reset();
+ /// Prepares the socket for re-use.
+ ///
+ /// After closing and resetting a socket, the socket can
+ /// be used for a new connection.
+ ///
+ /// Note that simply closing a socket is not sufficient
+ /// to be able to re-use it again.
+
Poco::Timespan getMaxTimeout();
-private:
- SecureSocketImpl(const SecureSocketImpl&);
- SecureSocketImpl& operator = (const SecureSocketImpl&);
-
- SSL* _pSSL;
- Poco::AutoPtr<SocketImpl> _pSocket;
- Context::Ptr _pContext;
- bool _needHandshake;
- std::string _peerHostName;
- Session::Ptr _pSession;
-
- friend class SecureStreamSocketImpl;
-};
-
-
-//
-// inlines
-//
-inline poco_socket_t SecureSocketImpl::sockfd()
-{
- return _pSocket->sockfd();
-}
-
-
-inline Context::Ptr SecureSocketImpl::context() const
-{
- return _pContext;
-}
-
-
-inline const std::string& SecureSocketImpl::getPeerHostName() const
-{
- return _peerHostName;
-}
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_SecureSocketImpl_INCLUDED
+private:
+ SecureSocketImpl(const SecureSocketImpl&);
+ SecureSocketImpl& operator = (const SecureSocketImpl&);
+
+ SSL* _pSSL;
+ Poco::AutoPtr<SocketImpl> _pSocket;
+ Context::Ptr _pContext;
+ bool _needHandshake;
+ std::string _peerHostName;
+ Session::Ptr _pSession;
+
+ friend class SecureStreamSocketImpl;
+};
+
+
+//
+// inlines
+//
+inline poco_socket_t SecureSocketImpl::sockfd()
+{
+ return _pSocket->sockfd();
+}
+
+
+inline Context::Ptr SecureSocketImpl::context() const
+{
+ return _pContext;
+}
+
+
+inline const std::string& SecureSocketImpl::getPeerHostName() const
+{
+ return _peerHostName;
+}
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_SecureSocketImpl_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocket.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocket.h
index 059be1bbee..e33a59391d 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocket.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocket.h
@@ -1,272 +1,272 @@
-//
-// SecureStreamSocket.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLSockets
-// Module: SecureStreamSocket
-//
-// Definition of the SecureStreamSocket class.
-//
-// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_SecureStreamSocket_INCLUDED
-#define NetSSL_SecureStreamSocket_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/StreamSocket.h"
-#include "Poco/Net/Context.h"
-#include "Poco/Net/Session.h"
-#include "Poco/Net/X509Certificate.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API SecureStreamSocket: public StreamSocket
- /// A subclass of StreamSocket for secure SSL sockets.
- ///
- /// A few notes about nonblocking IO:
- /// sendBytes() and receiveBytes() can return a
- /// negative value when using a nonblocking socket, which means
- /// a SSL handshake is currently in progress and more data
- /// needs to be read or written for the handshake to continue.
- /// If sendBytes() or receiveBytes() return ERR_SSL_WANT_WRITE,
- /// sendBytes() must be called as soon as possible (usually, after
- /// select() indicates that data can be written). Likewise, if
- /// ERR_SSL_WANT_READ is returned, receiveBytes() must be called
- /// as soon as data is available for reading (indicated by select()).
- ///
- /// The SSL handshake is delayed until the first sendBytes() or
- /// receiveBytes() operation is performed on the socket. No automatic
- /// post connection check (checking the peer certificate for a valid
- /// hostname) is performed when using nonblocking I/O. To manually
- /// perform peer certificate validation, call verifyPeerCertificate()
- /// after the SSL handshake has been completed.
-{
-public:
- enum
- {
- ERR_SSL_WANT_READ = -1,
- ERR_SSL_WANT_WRITE = -2
- };
-
- SecureStreamSocket();
- /// Creates an unconnected secure stream socket
- /// using the default client SSL context.
- ///
- /// Before sending or receiving data, the socket
- /// must be connected with a call to connect().
-
- explicit SecureStreamSocket(Context::Ptr pContext);
- /// Creates an unconnected secure stream socket
- /// using the given SSL context.
- ///
- /// Before sending or receiving data, the socket
- /// must be connected with a call to connect().
-
- SecureStreamSocket(Context::Ptr pContext, Session::Ptr pSession);
- /// Creates an unconnected secure stream socket
- /// using the given SSL context.
- ///
- /// Before sending or receiving data, the socket
- /// must be connected with a call to connect().
- ///
- /// The given Session is reused, if possible (client session
- /// caching is enabled for the given Context, and the server
- /// agrees to reuse the session).
-
- explicit SecureStreamSocket(const SocketAddress& address);
- /// Creates a secure stream socket using the default
- /// client SSL context and connects it to
- /// the socket specified by address.
-
- SecureStreamSocket(const SocketAddress& address, Context::Ptr pContext);
- /// Creates a secure stream socket using the given
- /// client SSL context and connects it to
- /// the socket specified by address.
-
- SecureStreamSocket(const SocketAddress& address, Context::Ptr pContext, Session::Ptr pSession);
- /// Creates a secure stream socket using the given
- /// client SSL context and connects it to
- /// the socket specified by address.
- ///
- /// The given Session is reused, if possible (client session
- /// caching is enabled for the given Context, and the server
- /// agrees to reuse the session).
-
- SecureStreamSocket(const SocketAddress& address, const std::string& hostName);
- /// Creates a secure stream socket using the default
- /// client SSL context and connects it to
- /// the socket specified by address.
- ///
- /// The given host name is used for certificate verification.
-
- SecureStreamSocket(const SocketAddress& address, const std::string& hostName, Context::Ptr pContext);
- /// Creates a secure stream socket using the given
- /// client SSL context and connects it to
- /// the socket specified by address.
- ///
- /// The given host name is used for certificate verification.
-
- SecureStreamSocket(const SocketAddress& address, const std::string& hostName, Context::Ptr pContext, Session::Ptr pSession);
- /// Creates a secure stream socket using the given
- /// client SSL context and connects it to
- /// the socket specified by address.
- ///
- /// The given host name is used for certificate verification.
- ///
- /// The given Session is reused, if possible (client session
- /// caching is enabled for the given Context, and the server
- /// agrees to reuse the session).
-
- SecureStreamSocket(const Socket& socket);
- /// Creates the SecureStreamSocket with the SocketImpl
- /// from another socket. The SocketImpl must be
- /// a SecureStreamSocketImpl, otherwise an InvalidArgumentException
- /// will be thrown.
-
- virtual ~SecureStreamSocket();
- /// Destroys the StreamSocket.
-
- SecureStreamSocket& operator = (const Socket& socket);
- /// Assignment operator.
- ///
- /// Releases the socket's SocketImpl and
- /// attaches the SocketImpl from the other socket and
- /// increments the reference count of the SocketImpl.
-
- bool havePeerCertificate() const;
- /// Returns true iff the peer has presented a
- /// certificate.
-
- X509Certificate peerCertificate() const;
- /// Returns the peer's X509 certificate.
- ///
- /// Throws a SSLException if the peer did not
- /// present a certificate.
-
- void setPeerHostName(const std::string& hostName);
- /// Sets the peer's host name used for certificate validation.
-
- const std::string& getPeerHostName() const;
- /// Returns the peer's host name used for certificate validation.
-
- static SecureStreamSocket attach(const StreamSocket& streamSocket);
- /// Creates a SecureStreamSocket over an existing socket
- /// connection. The given StreamSocket must be connected.
- /// A SSL handshake will be performed.
-
- static SecureStreamSocket attach(const StreamSocket& streamSocket, Context::Ptr pContext);
- /// Creates a SecureStreamSocket over an existing socket
- /// connection. The given StreamSocket must be connected.
- /// A SSL handshake will be performed.
-
- static SecureStreamSocket attach(const StreamSocket& streamSocket, Context::Ptr pContext, Session::Ptr pSession);
- /// Creates a SecureStreamSocket over an existing socket
- /// connection. The given StreamSocket must be connected.
- /// A SSL handshake will be performed.
- ///
- /// The given Session is reused, if possible (client session
- /// caching is enabled for the given Context, and the server
- /// agrees to reuse the session).
-
- static SecureStreamSocket attach(const StreamSocket& streamSocket, const std::string& peerHostName);
- /// Creates a SecureStreamSocket over an existing socket
- /// connection. The given StreamSocket must be connected.
- /// A SSL handshake will be performed.
-
- static SecureStreamSocket attach(const StreamSocket& streamSocket, const std::string& peerHostName, Context::Ptr pContext);
- /// Creates a SecureStreamSocket over an existing socket
- /// connection. The given StreamSocket must be connected.
- /// A SSL handshake will be performed.
-
- static SecureStreamSocket attach(const StreamSocket& streamSocket, const std::string& peerHostName, Context::Ptr pContext, Session::Ptr pSession);
- /// Creates a SecureStreamSocket over an existing socket
- /// connection. The given StreamSocket must be connected.
- /// A SSL handshake will be performed.
- ///
- /// The given Session is reused, if possible (client session
- /// caching is enabled for the given Context, and the server
- /// agrees to reuse the session).
-
- Context::Ptr context() const;
- /// Returns the SSL context used by this socket.
-
- void setLazyHandshake(bool flag = true);
- /// Enable lazy SSL handshake. If enabled, the SSL handshake
- /// will be performed the first time date is sent or
- /// received over the connection.
-
- bool getLazyHandshake() const;
- /// Returns true if setLazyHandshake(true) has been called.
-
- void verifyPeerCertificate();
- /// Performs post-connect (or post-accept) peer certificate validation,
- /// using the peer host name set with setPeerHostName(), or the peer's
- /// IP address string if no peer host name has been set.
- ///
- /// Should only be used for non-blocking connections, after the
- /// initial SSL handshake has been performed (see completeHandshake()).
-
- void verifyPeerCertificate(const std::string& hostName);
- /// Performs post-connect (or post-accept) peer certificate validation
- /// using the given host name.
- ///
- /// Should only be used for non-blocking connections, after the
- /// initial SSL handshake has been performed (see completeHandshake()).
-
- int completeHandshake();
- /// Completes the SSL handshake.
- ///
- /// If the SSL connection was the result of an accept(),
- /// the server-side handshake is completed, otherwise
- /// a client-side handshake is performed.
- ///
- /// Returns 1 if the handshake was successful, ERR_SSL_WANT_READ or
- /// ERR_SSL_WANT_WRITE if more data is required to complete the
- /// handshake. In this case, completeHandshake() should be called
- /// again, after the necessary condition has been met.
-
- Session::Ptr currentSession();
- /// Returns the SSL session of the current connection,
- /// for reuse in a future connection (if session caching
- /// is enabled).
- ///
- /// If no connection is established, returns null.
-
- void useSession(Session::Ptr pSession);
- /// Sets the SSL session to use for the next
- /// connection. Setting a previously saved Session
- /// object is necessary to enable session caching.
- ///
- /// To remove the currently set session, a null pointer
- /// can be given.
- ///
- /// Must be called before connect() to be effective.
-
- bool sessionWasReused();
- /// Returns true iff a reused session was negotiated during
- /// the handshake.
-
- void abort();
- /// Aborts the SSL connection by closing the underlying
- /// TCP connection. No orderly SSL shutdown is performed.
-
-protected:
- SecureStreamSocket(SocketImpl* pImpl);
-
- friend class SecureServerSocket;
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_SecureStreamSocket_INCLUDED
+//
+// SecureStreamSocket.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLSockets
+// Module: SecureStreamSocket
+//
+// Definition of the SecureStreamSocket class.
+//
+// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_SecureStreamSocket_INCLUDED
+#define NetSSL_SecureStreamSocket_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/StreamSocket.h"
+#include "Poco/Net/Context.h"
+#include "Poco/Net/Session.h"
+#include "Poco/Net/X509Certificate.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API SecureStreamSocket: public StreamSocket
+ /// A subclass of StreamSocket for secure SSL sockets.
+ ///
+ /// A few notes about nonblocking IO:
+ /// sendBytes() and receiveBytes() can return a
+ /// negative value when using a nonblocking socket, which means
+ /// a SSL handshake is currently in progress and more data
+ /// needs to be read or written for the handshake to continue.
+ /// If sendBytes() or receiveBytes() return ERR_SSL_WANT_WRITE,
+ /// sendBytes() must be called as soon as possible (usually, after
+ /// select() indicates that data can be written). Likewise, if
+ /// ERR_SSL_WANT_READ is returned, receiveBytes() must be called
+ /// as soon as data is available for reading (indicated by select()).
+ ///
+ /// The SSL handshake is delayed until the first sendBytes() or
+ /// receiveBytes() operation is performed on the socket. No automatic
+ /// post connection check (checking the peer certificate for a valid
+ /// hostname) is performed when using nonblocking I/O. To manually
+ /// perform peer certificate validation, call verifyPeerCertificate()
+ /// after the SSL handshake has been completed.
+{
+public:
+ enum
+ {
+ ERR_SSL_WANT_READ = -1,
+ ERR_SSL_WANT_WRITE = -2
+ };
+
+ SecureStreamSocket();
+ /// Creates an unconnected secure stream socket
+ /// using the default client SSL context.
+ ///
+ /// Before sending or receiving data, the socket
+ /// must be connected with a call to connect().
+
+ explicit SecureStreamSocket(Context::Ptr pContext);
+ /// Creates an unconnected secure stream socket
+ /// using the given SSL context.
+ ///
+ /// Before sending or receiving data, the socket
+ /// must be connected with a call to connect().
+
+ SecureStreamSocket(Context::Ptr pContext, Session::Ptr pSession);
+ /// Creates an unconnected secure stream socket
+ /// using the given SSL context.
+ ///
+ /// Before sending or receiving data, the socket
+ /// must be connected with a call to connect().
+ ///
+ /// The given Session is reused, if possible (client session
+ /// caching is enabled for the given Context, and the server
+ /// agrees to reuse the session).
+
+ explicit SecureStreamSocket(const SocketAddress& address);
+ /// Creates a secure stream socket using the default
+ /// client SSL context and connects it to
+ /// the socket specified by address.
+
+ SecureStreamSocket(const SocketAddress& address, Context::Ptr pContext);
+ /// Creates a secure stream socket using the given
+ /// client SSL context and connects it to
+ /// the socket specified by address.
+
+ SecureStreamSocket(const SocketAddress& address, Context::Ptr pContext, Session::Ptr pSession);
+ /// Creates a secure stream socket using the given
+ /// client SSL context and connects it to
+ /// the socket specified by address.
+ ///
+ /// The given Session is reused, if possible (client session
+ /// caching is enabled for the given Context, and the server
+ /// agrees to reuse the session).
+
+ SecureStreamSocket(const SocketAddress& address, const std::string& hostName);
+ /// Creates a secure stream socket using the default
+ /// client SSL context and connects it to
+ /// the socket specified by address.
+ ///
+ /// The given host name is used for certificate verification.
+
+ SecureStreamSocket(const SocketAddress& address, const std::string& hostName, Context::Ptr pContext);
+ /// Creates a secure stream socket using the given
+ /// client SSL context and connects it to
+ /// the socket specified by address.
+ ///
+ /// The given host name is used for certificate verification.
+
+ SecureStreamSocket(const SocketAddress& address, const std::string& hostName, Context::Ptr pContext, Session::Ptr pSession);
+ /// Creates a secure stream socket using the given
+ /// client SSL context and connects it to
+ /// the socket specified by address.
+ ///
+ /// The given host name is used for certificate verification.
+ ///
+ /// The given Session is reused, if possible (client session
+ /// caching is enabled for the given Context, and the server
+ /// agrees to reuse the session).
+
+ SecureStreamSocket(const Socket& socket);
+ /// Creates the SecureStreamSocket with the SocketImpl
+ /// from another socket. The SocketImpl must be
+ /// a SecureStreamSocketImpl, otherwise an InvalidArgumentException
+ /// will be thrown.
+
+ virtual ~SecureStreamSocket();
+ /// Destroys the StreamSocket.
+
+ SecureStreamSocket& operator = (const Socket& socket);
+ /// Assignment operator.
+ ///
+ /// Releases the socket's SocketImpl and
+ /// attaches the SocketImpl from the other socket and
+ /// increments the reference count of the SocketImpl.
+
+ bool havePeerCertificate() const;
+ /// Returns true iff the peer has presented a
+ /// certificate.
+
+ X509Certificate peerCertificate() const;
+ /// Returns the peer's X509 certificate.
+ ///
+ /// Throws a SSLException if the peer did not
+ /// present a certificate.
+
+ void setPeerHostName(const std::string& hostName);
+ /// Sets the peer's host name used for certificate validation.
+
+ const std::string& getPeerHostName() const;
+ /// Returns the peer's host name used for certificate validation.
+
+ static SecureStreamSocket attach(const StreamSocket& streamSocket);
+ /// Creates a SecureStreamSocket over an existing socket
+ /// connection. The given StreamSocket must be connected.
+ /// A SSL handshake will be performed.
+
+ static SecureStreamSocket attach(const StreamSocket& streamSocket, Context::Ptr pContext);
+ /// Creates a SecureStreamSocket over an existing socket
+ /// connection. The given StreamSocket must be connected.
+ /// A SSL handshake will be performed.
+
+ static SecureStreamSocket attach(const StreamSocket& streamSocket, Context::Ptr pContext, Session::Ptr pSession);
+ /// Creates a SecureStreamSocket over an existing socket
+ /// connection. The given StreamSocket must be connected.
+ /// A SSL handshake will be performed.
+ ///
+ /// The given Session is reused, if possible (client session
+ /// caching is enabled for the given Context, and the server
+ /// agrees to reuse the session).
+
+ static SecureStreamSocket attach(const StreamSocket& streamSocket, const std::string& peerHostName);
+ /// Creates a SecureStreamSocket over an existing socket
+ /// connection. The given StreamSocket must be connected.
+ /// A SSL handshake will be performed.
+
+ static SecureStreamSocket attach(const StreamSocket& streamSocket, const std::string& peerHostName, Context::Ptr pContext);
+ /// Creates a SecureStreamSocket over an existing socket
+ /// connection. The given StreamSocket must be connected.
+ /// A SSL handshake will be performed.
+
+ static SecureStreamSocket attach(const StreamSocket& streamSocket, const std::string& peerHostName, Context::Ptr pContext, Session::Ptr pSession);
+ /// Creates a SecureStreamSocket over an existing socket
+ /// connection. The given StreamSocket must be connected.
+ /// A SSL handshake will be performed.
+ ///
+ /// The given Session is reused, if possible (client session
+ /// caching is enabled for the given Context, and the server
+ /// agrees to reuse the session).
+
+ Context::Ptr context() const;
+ /// Returns the SSL context used by this socket.
+
+ void setLazyHandshake(bool flag = true);
+ /// Enable lazy SSL handshake. If enabled, the SSL handshake
+ /// will be performed the first time date is sent or
+ /// received over the connection.
+
+ bool getLazyHandshake() const;
+ /// Returns true if setLazyHandshake(true) has been called.
+
+ void verifyPeerCertificate();
+ /// Performs post-connect (or post-accept) peer certificate validation,
+ /// using the peer host name set with setPeerHostName(), or the peer's
+ /// IP address string if no peer host name has been set.
+ ///
+ /// Should only be used for non-blocking connections, after the
+ /// initial SSL handshake has been performed (see completeHandshake()).
+
+ void verifyPeerCertificate(const std::string& hostName);
+ /// Performs post-connect (or post-accept) peer certificate validation
+ /// using the given host name.
+ ///
+ /// Should only be used for non-blocking connections, after the
+ /// initial SSL handshake has been performed (see completeHandshake()).
+
+ int completeHandshake();
+ /// Completes the SSL handshake.
+ ///
+ /// If the SSL connection was the result of an accept(),
+ /// the server-side handshake is completed, otherwise
+ /// a client-side handshake is performed.
+ ///
+ /// Returns 1 if the handshake was successful, ERR_SSL_WANT_READ or
+ /// ERR_SSL_WANT_WRITE if more data is required to complete the
+ /// handshake. In this case, completeHandshake() should be called
+ /// again, after the necessary condition has been met.
+
+ Session::Ptr currentSession();
+ /// Returns the SSL session of the current connection,
+ /// for reuse in a future connection (if session caching
+ /// is enabled).
+ ///
+ /// If no connection is established, returns null.
+
+ void useSession(Session::Ptr pSession);
+ /// Sets the SSL session to use for the next
+ /// connection. Setting a previously saved Session
+ /// object is necessary to enable session caching.
+ ///
+ /// To remove the currently set session, a null pointer
+ /// can be given.
+ ///
+ /// Must be called before connect() to be effective.
+
+ bool sessionWasReused();
+ /// Returns true iff a reused session was negotiated during
+ /// the handshake.
+
+ void abort();
+ /// Aborts the SSL connection by closing the underlying
+ /// TCP connection. No orderly SSL shutdown is performed.
+
+protected:
+ SecureStreamSocket(SocketImpl* pImpl);
+
+ friend class SecureServerSocket;
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_SecureStreamSocket_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocketImpl.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocketImpl.h
index 3b000b4758..64d63bc018 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocketImpl.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocketImpl.h
@@ -1,303 +1,303 @@
-//
-// SecureStreamSocketImpl.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLSockets
-// Module: SecureStreamSocketImpl
-//
-// Definition of the SecureStreamSocketImpl class.
-//
-// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_SecureStreamSocketImpl_INCLUDED
-#define NetSSL_SecureStreamSocketImpl_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/SecureSocketImpl.h"
-#include "Poco/Net/StreamSocketImpl.h"
-#include "Poco/Net/Context.h"
-#include "Poco/Net/X509Certificate.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API SecureStreamSocketImpl: public StreamSocketImpl
- /// This class implements a SSL stream socket.
-{
-public:
- SecureStreamSocketImpl(Context::Ptr pContext);
- /// Creates the SecureStreamSocketImpl.
-
- SecureStreamSocketImpl(StreamSocketImpl* pStreamSocket, Context::Ptr pContext);
- /// Creates the SecureStreamSocketImpl.
-
+//
+// SecureStreamSocketImpl.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLSockets
+// Module: SecureStreamSocketImpl
+//
+// Definition of the SecureStreamSocketImpl class.
+//
+// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_SecureStreamSocketImpl_INCLUDED
+#define NetSSL_SecureStreamSocketImpl_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/SecureSocketImpl.h"
+#include "Poco/Net/StreamSocketImpl.h"
+#include "Poco/Net/Context.h"
+#include "Poco/Net/X509Certificate.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API SecureStreamSocketImpl: public StreamSocketImpl
+ /// This class implements a SSL stream socket.
+{
+public:
+ SecureStreamSocketImpl(Context::Ptr pContext);
+ /// Creates the SecureStreamSocketImpl.
+
+ SecureStreamSocketImpl(StreamSocketImpl* pStreamSocket, Context::Ptr pContext);
+ /// Creates the SecureStreamSocketImpl.
+
void setSendTimeout(const Poco::Timespan& timeout);
void setReceiveTimeout(const Poco::Timespan& timeout);
- SocketImpl* acceptConnection(SocketAddress& clientAddr);
- /// Not supported by a SecureStreamSocket.
- ///
- /// Throws a Poco::InvalidAccessException.
-
- void connect(const SocketAddress& address);
- /// Initializes the socket and establishes a connection to
- /// the TCP server at the given address.
- ///
- /// Can also be used for UDP sockets. In this case, no
- /// connection is established. Instead, incoming and outgoing
- /// packets are restricted to the specified address.
-
- void connect(const SocketAddress& address, const Poco::Timespan& timeout);
- /// Initializes the socket, sets the socket timeout and
- /// establishes a connection to the TCP server at the given address.
-
- void connectNB(const SocketAddress& address);
- /// Initializes the socket and establishes a connection to
- /// the TCP server at the given address. Prior to opening the
- /// connection the socket is set to nonblocking mode.
-
- void bind(const SocketAddress& address, bool reuseAddress = false, bool reusePort = false);
- /// Not supported by a SecureStreamSocket.
- ///
- /// Throws a Poco::InvalidAccessException.
-
- void listen(int backlog = 64);
- /// Not supported by a SecureStreamSocket.
- ///
- /// Throws a Poco::InvalidAccessException.
-
- void close();
- /// Close the socket.
-
- int sendBytes(const void* buffer, int length, int flags = 0);
- /// Sends the contents of the given buffer through
- /// the socket. Any specified flags are ignored.
- ///
- /// Returns the number of bytes sent, which may be
- /// less than the number of bytes specified.
-
- int receiveBytes(void* buffer, int length, int flags = 0);
- /// Receives data from the socket and stores it
- /// in buffer. Up to length bytes are received.
- ///
- /// Returns the number of bytes received.
-
- int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0);
- /// Not supported by a SecureStreamSocket.
- ///
- /// Throws a Poco::InvalidAccessException.
-
- int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0);
- /// Not supported by a SecureStreamSocket.
- ///
- /// Throws a Poco::InvalidAccessException.
-
- void sendUrgent(unsigned char data);
- /// Not supported by a SecureStreamSocket.
- ///
- /// Throws a Poco::InvalidAccessException.
-
- int available();
- /// Returns the number of bytes available that can be read
- /// without causing the socket to block.
- ///
- /// For an SSL connection, returns the number of bytes that
- /// can be read from the currently buffered SSL record,
- /// before a new record is read from the underlying socket.
-
- void shutdownReceive();
- /// Shuts down the receiving part of the socket connection.
- ///
- /// Since SSL does not support a half shutdown, this does
- /// nothing.
-
- void shutdownSend();
- /// Shuts down the receiving part of the socket connection.
- ///
- /// Since SSL does not support a half shutdown, this does
- /// nothing.
-
- void shutdown();
- /// Shuts down the SSL connection.
-
- void abort();
- /// Aborts the connection by closing the underlying
- /// TCP connection. No orderly SSL shutdown is performed.
-
- bool secure() const;
- /// Returns true iff the socket's connection is secure
- /// (using SSL or TLS).
-
- void setPeerHostName(const std::string& hostName);
- /// Sets the peer host name for certificate validation purposes.
-
- const std::string& getPeerHostName() const;
- /// Returns the peer host name.
-
- bool havePeerCertificate() const;
- /// Returns true iff the peer has presented a
- /// certificate.
-
- X509Certificate peerCertificate() const;
- /// Returns the peer's X509 certificate.
- ///
- /// Throws a SSLException if the peer did not
- /// present a certificate.
-
- Context::Ptr context() const;
- /// Returns the SSL context used by this socket.
-
- void setLazyHandshake(bool flag = true);
- /// Enable lazy SSL handshake. If enabled, the SSL handshake
- /// will be performed the first time date is sent or
- /// received over the connection.
-
- bool getLazyHandshake() const;
- /// Returns true if setLazyHandshake(true) has been called.
-
- void verifyPeerCertificate();
- /// Performs post-connect (or post-accept) peer certificate validation,
- /// using the peer's IP address as host name.
-
- void verifyPeerCertificate(const std::string& hostName);
- /// Performs post-connect (or post-accept) peer certificate validation
- /// using the given host name.
-
- int completeHandshake();
- /// Completes the SSL handshake.
- ///
- /// If the SSL connection was the result of an accept(),
- /// the server-side handshake is completed, otherwise
- /// a client-side handshake is performed.
-
- Session::Ptr currentSession();
- /// Returns the SSL session of the current connection,
- /// for reuse in a future connection (if session caching
- /// is enabled).
- ///
- /// If no connection is established, returns null.
-
- void useSession(Session::Ptr pSession);
- /// Sets the SSL session to use for the next
- /// connection. Setting a previously saved Session
- /// object is necessary to enable session caching.
- ///
- /// To remove the currently set session, a null pointer
- /// can be given.
- ///
- /// Must be called before connect() to be effective.
-
- bool sessionWasReused();
- /// Returns true iff a reused session was negotiated during
- /// the handshake.
-
-protected:
- void acceptSSL();
- /// Performs a SSL server-side handshake.
-
- void connectSSL();
- /// Performs a SSL client-side handshake on an already connected TCP socket.
-
- ~SecureStreamSocketImpl();
- /// Destroys the SecureStreamSocketImpl.
-
- static int lastError();
- static void error();
- static void error(const std::string& arg);
- static void error(int code);
- static void error(int code, const std::string& arg);
-
-private:
- SecureStreamSocketImpl(const SecureStreamSocketImpl&);
- SecureStreamSocketImpl& operator = (const SecureStreamSocketImpl&);
-
+ SocketImpl* acceptConnection(SocketAddress& clientAddr);
+ /// Not supported by a SecureStreamSocket.
+ ///
+ /// Throws a Poco::InvalidAccessException.
+
+ void connect(const SocketAddress& address);
+ /// Initializes the socket and establishes a connection to
+ /// the TCP server at the given address.
+ ///
+ /// Can also be used for UDP sockets. In this case, no
+ /// connection is established. Instead, incoming and outgoing
+ /// packets are restricted to the specified address.
+
+ void connect(const SocketAddress& address, const Poco::Timespan& timeout);
+ /// Initializes the socket, sets the socket timeout and
+ /// establishes a connection to the TCP server at the given address.
+
+ void connectNB(const SocketAddress& address);
+ /// Initializes the socket and establishes a connection to
+ /// the TCP server at the given address. Prior to opening the
+ /// connection the socket is set to nonblocking mode.
+
+ void bind(const SocketAddress& address, bool reuseAddress = false, bool reusePort = false);
+ /// Not supported by a SecureStreamSocket.
+ ///
+ /// Throws a Poco::InvalidAccessException.
+
+ void listen(int backlog = 64);
+ /// Not supported by a SecureStreamSocket.
+ ///
+ /// Throws a Poco::InvalidAccessException.
+
+ void close();
+ /// Close the socket.
+
+ int sendBytes(const void* buffer, int length, int flags = 0);
+ /// Sends the contents of the given buffer through
+ /// the socket. Any specified flags are ignored.
+ ///
+ /// Returns the number of bytes sent, which may be
+ /// less than the number of bytes specified.
+
+ int receiveBytes(void* buffer, int length, int flags = 0);
+ /// Receives data from the socket and stores it
+ /// in buffer. Up to length bytes are received.
+ ///
+ /// Returns the number of bytes received.
+
+ int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0);
+ /// Not supported by a SecureStreamSocket.
+ ///
+ /// Throws a Poco::InvalidAccessException.
+
+ int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0);
+ /// Not supported by a SecureStreamSocket.
+ ///
+ /// Throws a Poco::InvalidAccessException.
+
+ void sendUrgent(unsigned char data);
+ /// Not supported by a SecureStreamSocket.
+ ///
+ /// Throws a Poco::InvalidAccessException.
+
+ int available();
+ /// Returns the number of bytes available that can be read
+ /// without causing the socket to block.
+ ///
+ /// For an SSL connection, returns the number of bytes that
+ /// can be read from the currently buffered SSL record,
+ /// before a new record is read from the underlying socket.
+
+ void shutdownReceive();
+ /// Shuts down the receiving part of the socket connection.
+ ///
+ /// Since SSL does not support a half shutdown, this does
+ /// nothing.
+
+ void shutdownSend();
+ /// Shuts down the receiving part of the socket connection.
+ ///
+ /// Since SSL does not support a half shutdown, this does
+ /// nothing.
+
+ void shutdown();
+ /// Shuts down the SSL connection.
+
+ void abort();
+ /// Aborts the connection by closing the underlying
+ /// TCP connection. No orderly SSL shutdown is performed.
+
+ bool secure() const;
+ /// Returns true iff the socket's connection is secure
+ /// (using SSL or TLS).
+
+ void setPeerHostName(const std::string& hostName);
+ /// Sets the peer host name for certificate validation purposes.
+
+ const std::string& getPeerHostName() const;
+ /// Returns the peer host name.
+
+ bool havePeerCertificate() const;
+ /// Returns true iff the peer has presented a
+ /// certificate.
+
+ X509Certificate peerCertificate() const;
+ /// Returns the peer's X509 certificate.
+ ///
+ /// Throws a SSLException if the peer did not
+ /// present a certificate.
+
+ Context::Ptr context() const;
+ /// Returns the SSL context used by this socket.
+
+ void setLazyHandshake(bool flag = true);
+ /// Enable lazy SSL handshake. If enabled, the SSL handshake
+ /// will be performed the first time date is sent or
+ /// received over the connection.
+
+ bool getLazyHandshake() const;
+ /// Returns true if setLazyHandshake(true) has been called.
+
+ void verifyPeerCertificate();
+ /// Performs post-connect (or post-accept) peer certificate validation,
+ /// using the peer's IP address as host name.
+
+ void verifyPeerCertificate(const std::string& hostName);
+ /// Performs post-connect (or post-accept) peer certificate validation
+ /// using the given host name.
+
+ int completeHandshake();
+ /// Completes the SSL handshake.
+ ///
+ /// If the SSL connection was the result of an accept(),
+ /// the server-side handshake is completed, otherwise
+ /// a client-side handshake is performed.
+
+ Session::Ptr currentSession();
+ /// Returns the SSL session of the current connection,
+ /// for reuse in a future connection (if session caching
+ /// is enabled).
+ ///
+ /// If no connection is established, returns null.
+
+ void useSession(Session::Ptr pSession);
+ /// Sets the SSL session to use for the next
+ /// connection. Setting a previously saved Session
+ /// object is necessary to enable session caching.
+ ///
+ /// To remove the currently set session, a null pointer
+ /// can be given.
+ ///
+ /// Must be called before connect() to be effective.
+
+ bool sessionWasReused();
+ /// Returns true iff a reused session was negotiated during
+ /// the handshake.
+
+protected:
+ void acceptSSL();
+ /// Performs a SSL server-side handshake.
+
+ void connectSSL();
+ /// Performs a SSL client-side handshake on an already connected TCP socket.
+
+ ~SecureStreamSocketImpl();
+ /// Destroys the SecureStreamSocketImpl.
+
+ static int lastError();
+ static void error();
+ static void error(const std::string& arg);
+ static void error(int code);
+ static void error(int code, const std::string& arg);
+
+private:
+ SecureStreamSocketImpl(const SecureStreamSocketImpl&);
+ SecureStreamSocketImpl& operator = (const SecureStreamSocketImpl&);
+
StreamSocketImpl * underlying_socket;
- SecureSocketImpl _impl;
- bool _lazyHandshake;
-
- friend class SecureSocketImpl;
- friend class SecureStreamSocket;
-};
-
-
-//
-// inlines
-//
-inline const std::string& SecureStreamSocketImpl::getPeerHostName() const
-{
- return _impl.getPeerHostName();
-}
-
-
-inline void SecureStreamSocketImpl::setPeerHostName(const std::string& peerHostName)
-{
- _impl.setPeerHostName(peerHostName);
-}
-
-
-inline Context::Ptr SecureStreamSocketImpl::context() const
-{
- return _impl.context();
-}
-
-
-inline Session::Ptr SecureStreamSocketImpl::currentSession()
-{
- return _impl.currentSession();
-}
-
-
-inline void SecureStreamSocketImpl::useSession(Session::Ptr pSession)
-{
- _impl.useSession(pSession);
-}
-
-
-inline bool SecureStreamSocketImpl::sessionWasReused()
-{
- return _impl.sessionWasReused();
-}
-
-
-inline int SecureStreamSocketImpl::lastError()
-{
- return SocketImpl::lastError();
-}
-
-
-inline void SecureStreamSocketImpl::error()
-{
- return SocketImpl::error();
-}
-
-
-inline void SecureStreamSocketImpl::error(const std::string& arg)
-{
- return SocketImpl::error(arg);
-}
-
-
-inline void SecureStreamSocketImpl::error(int code)
-{
- return SocketImpl::error(code);
-}
-
-
-inline void SecureStreamSocketImpl::error(int code, const std::string& arg)
-{
- return SocketImpl::error(code, arg);
-}
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_SecureStreamSocketImpl_INCLUDED
+ SecureSocketImpl _impl;
+ bool _lazyHandshake;
+
+ friend class SecureSocketImpl;
+ friend class SecureStreamSocket;
+};
+
+
+//
+// inlines
+//
+inline const std::string& SecureStreamSocketImpl::getPeerHostName() const
+{
+ return _impl.getPeerHostName();
+}
+
+
+inline void SecureStreamSocketImpl::setPeerHostName(const std::string& peerHostName)
+{
+ _impl.setPeerHostName(peerHostName);
+}
+
+
+inline Context::Ptr SecureStreamSocketImpl::context() const
+{
+ return _impl.context();
+}
+
+
+inline Session::Ptr SecureStreamSocketImpl::currentSession()
+{
+ return _impl.currentSession();
+}
+
+
+inline void SecureStreamSocketImpl::useSession(Session::Ptr pSession)
+{
+ _impl.useSession(pSession);
+}
+
+
+inline bool SecureStreamSocketImpl::sessionWasReused()
+{
+ return _impl.sessionWasReused();
+}
+
+
+inline int SecureStreamSocketImpl::lastError()
+{
+ return SocketImpl::lastError();
+}
+
+
+inline void SecureStreamSocketImpl::error()
+{
+ return SocketImpl::error();
+}
+
+
+inline void SecureStreamSocketImpl::error(const std::string& arg)
+{
+ return SocketImpl::error(arg);
+}
+
+
+inline void SecureStreamSocketImpl::error(int code)
+{
+ return SocketImpl::error(code);
+}
+
+
+inline void SecureStreamSocketImpl::error(int code, const std::string& arg)
+{
+ return SocketImpl::error(code, arg);
+}
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_SecureStreamSocketImpl_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/Session.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/Session.h
index cc9b2db746..a3dcf1c1bb 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/Session.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/Session.h
@@ -1,79 +1,79 @@
-//
-// Session.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: Session
-//
-// Definition of the Session class.
-//
-// Copyright (c) 2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_Session_INCLUDED
-#define NetSSL_Session_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/RefCountedObject.h"
-#include "Poco/AutoPtr.h"
-#include <openssl/ssl.h>
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API Session: public Poco::RefCountedObject
- /// This class encapsulates a SSL session object
- /// used with session caching on the client side.
- ///
- /// For session caching to work, a client must
- /// save the session object from an existing connection,
- /// if it wants to reuse it with a future connection.
-{
-public:
- typedef Poco::AutoPtr<Session> Ptr;
-
- SSL_SESSION* sslSession() const;
- /// Returns the stored OpenSSL SSL_SESSION object.
-
-protected:
- Session(SSL_SESSION* pSession);
- /// Creates a new Session object, using the given
- /// SSL_SESSION object.
+//
+// Session.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: Session
+//
+// Definition of the Session class.
+//
+// Copyright (c) 2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_Session_INCLUDED
+#define NetSSL_Session_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/RefCountedObject.h"
+#include "Poco/AutoPtr.h"
+#include <openssl/ssl.h>
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API Session: public Poco::RefCountedObject
+ /// This class encapsulates a SSL session object
+ /// used with session caching on the client side.
+ ///
+ /// For session caching to work, a client must
+ /// save the session object from an existing connection,
+ /// if it wants to reuse it with a future connection.
+{
+public:
+ typedef Poco::AutoPtr<Session> Ptr;
+
+ SSL_SESSION* sslSession() const;
+ /// Returns the stored OpenSSL SSL_SESSION object.
+
+protected:
+ Session(SSL_SESSION* pSession);
+ /// Creates a new Session object, using the given
+ /// SSL_SESSION object.
+ ///
+ /// The SSL_SESSION's reference count is not changed.
+
+ ~Session();
+ /// Destroys the Session.
///
- /// The SSL_SESSION's reference count is not changed.
-
- ~Session();
- /// Destroys the Session.
- ///
- /// Calls SSL_SESSION_free() on the stored
- /// SSL_SESSION object.
-
-private:
- Session();
-
- SSL_SESSION* _pSession;
-
- friend class SecureSocketImpl;
-};
-
-
-//
-// inlines
-//
-inline SSL_SESSION* Session::sslSession() const
-{
- return _pSession;
-}
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_Session_INCLUDED
+ /// Calls SSL_SESSION_free() on the stored
+ /// SSL_SESSION object.
+
+private:
+ Session();
+
+ SSL_SESSION* _pSession;
+
+ friend class SecureSocketImpl;
+};
+
+
+//
+// inlines
+//
+inline SSL_SESSION* Session::sslSession() const
+{
+ return _pSession;
+}
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_Session_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/Utility.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/Utility.h
index b1d0073cfa..bd58735572 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/Utility.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/Utility.h
@@ -1,52 +1,52 @@
-//
-// Utility.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: Utility
-//
-// Definition of the Utility class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_Utility_INCLUDED
-#define NetSSL_Utility_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/Context.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API Utility
- /// This class provides various helper functions for working
- /// with the OpenSSL library.
-{
-public:
- static Context::VerificationMode convertVerificationMode(const std::string& verMode);
- /// Non-case sensitive conversion of a string to a VerificationMode enum.
- /// If verMode is illegal an InvalidArgumentException is thrown.
-
- static std::string convertCertificateError(long errCode);
- /// Converts an SSL certificate handling error code into an error message.
-
- static std::string getLastError();
- /// Returns the last error from the error stack
-
- static void clearErrorStack();
- /// Clears the error stack
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_Utility_INCLUDED
+//
+// Utility.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: Utility
+//
+// Definition of the Utility class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_Utility_INCLUDED
+#define NetSSL_Utility_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/Context.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API Utility
+ /// This class provides various helper functions for working
+ /// with the OpenSSL library.
+{
+public:
+ static Context::VerificationMode convertVerificationMode(const std::string& verMode);
+ /// Non-case sensitive conversion of a string to a VerificationMode enum.
+ /// If verMode is illegal an InvalidArgumentException is thrown.
+
+ static std::string convertCertificateError(long errCode);
+ /// Converts an SSL certificate handling error code into an error message.
+
+ static std::string getLastError();
+ /// Returns the last error from the error stack
+
+ static void clearErrorStack();
+ /// Clears the error stack
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_Utility_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/VerificationErrorArgs.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/VerificationErrorArgs.h
index 55ef897bb7..5606fc4f4b 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/VerificationErrorArgs.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/VerificationErrorArgs.h
@@ -1,108 +1,108 @@
-//
-// VerificationErrorArgs.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: VerificationErrorArgs
-//
-// Definition of the VerificationErrorArgs class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_VerificationErrorArgs_INCLUDED
-#define NetSSL_VerificationErrorArgs_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/X509Certificate.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-class NetSSL_API VerificationErrorArgs
- /// A utility class for certificate error handling.
-{
-public:
- VerificationErrorArgs(const X509Certificate& cert, int errDepth, int errNum, const std::string& errMsg);
- /// Creates the VerificationErrorArgs. _ignoreError is per default set to false.
-
- ~VerificationErrorArgs();
- /// Destroys the VerificationErrorArgs.
-
- const X509Certificate& certificate() const;
- /// Returns the certificate that caused the error.
-
- int errorDepth() const;
- /// Returns the position of the certificate in the certificate chain.
-
- int errorNumber() const;
- /// Returns the id of the error
-
- const std::string& errorMessage() const;
- /// Returns the textual presentation of the errorNumber.
-
- void setIgnoreError(bool ignoreError);
- /// setIgnoreError to true, if a verification error is judged non-fatal by the user.
-
- bool getIgnoreError() const;
- /// returns the value of _ignoreError
-
-private:
- X509Certificate _cert;
- int _errorDepth;
- int _errorNumber;
- std::string _errorMessage; /// Textual representation of the _errorNumber
- bool _ignoreError;
-};
-
-
-//
-// inlines
-//
-inline const X509Certificate& VerificationErrorArgs::certificate() const
-{
- return _cert;
-}
-
-
-inline int VerificationErrorArgs::errorDepth() const
-{
- return _errorDepth;
-}
-
-
-inline int VerificationErrorArgs::errorNumber() const
-{
- return _errorNumber;
-}
-
-
-inline const std::string& VerificationErrorArgs::errorMessage() const
-{
- return _errorMessage;
-}
-
-
-inline void VerificationErrorArgs::setIgnoreError(bool ignoreError)
-{
- _ignoreError = ignoreError;
-}
-
-
-inline bool VerificationErrorArgs::getIgnoreError() const
-{
- return _ignoreError;
-}
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_VerificationErrorArgs_INCLUDED
+//
+// VerificationErrorArgs.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: VerificationErrorArgs
+//
+// Definition of the VerificationErrorArgs class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_VerificationErrorArgs_INCLUDED
+#define NetSSL_VerificationErrorArgs_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/X509Certificate.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+class NetSSL_API VerificationErrorArgs
+ /// A utility class for certificate error handling.
+{
+public:
+ VerificationErrorArgs(const X509Certificate& cert, int errDepth, int errNum, const std::string& errMsg);
+ /// Creates the VerificationErrorArgs. _ignoreError is per default set to false.
+
+ ~VerificationErrorArgs();
+ /// Destroys the VerificationErrorArgs.
+
+ const X509Certificate& certificate() const;
+ /// Returns the certificate that caused the error.
+
+ int errorDepth() const;
+ /// Returns the position of the certificate in the certificate chain.
+
+ int errorNumber() const;
+ /// Returns the id of the error
+
+ const std::string& errorMessage() const;
+ /// Returns the textual presentation of the errorNumber.
+
+ void setIgnoreError(bool ignoreError);
+ /// setIgnoreError to true, if a verification error is judged non-fatal by the user.
+
+ bool getIgnoreError() const;
+ /// returns the value of _ignoreError
+
+private:
+ X509Certificate _cert;
+ int _errorDepth;
+ int _errorNumber;
+ std::string _errorMessage; /// Textual representation of the _errorNumber
+ bool _ignoreError;
+};
+
+
+//
+// inlines
+//
+inline const X509Certificate& VerificationErrorArgs::certificate() const
+{
+ return _cert;
+}
+
+
+inline int VerificationErrorArgs::errorDepth() const
+{
+ return _errorDepth;
+}
+
+
+inline int VerificationErrorArgs::errorNumber() const
+{
+ return _errorNumber;
+}
+
+
+inline const std::string& VerificationErrorArgs::errorMessage() const
+{
+ return _errorMessage;
+}
+
+
+inline void VerificationErrorArgs::setIgnoreError(bool ignoreError)
+{
+ _ignoreError = ignoreError;
+}
+
+
+inline bool VerificationErrorArgs::getIgnoreError() const
+{
+ return _ignoreError;
+}
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_VerificationErrorArgs_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/X509Certificate.h b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/X509Certificate.h
index a810b29457..7c7eedaff6 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/X509Certificate.h
+++ b/contrib/libs/poco/NetSSL_OpenSSL/include/Poco/Net/X509Certificate.h
@@ -1,102 +1,102 @@
-//
-// X509Certificate.h
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: X509Certificate
-//
-// Definition of the X509Certificate class.
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef NetSSL_X509Certificate_INCLUDED
-#define NetSSL_X509Certificate_INCLUDED
-
-
-#include "Poco/Net/NetSSL.h"
-#include "Poco/Net/SocketDefs.h"
-#include "Poco/Crypto/X509Certificate.h"
-#include "Poco/DateTime.h"
-#include "Poco/SharedPtr.h"
-#include <set>
-
-
-namespace Poco {
-namespace Net {
-
-
-class HostEntry;
-
-
-class NetSSL_API X509Certificate: public Poco::Crypto::X509Certificate
- /// This class extends Poco::Crypto::X509Certificate with the
- /// feature to validate a certificate.
-{
-public:
- explicit X509Certificate(std::istream& istr);
- /// Creates the X509Certificate object by reading
- /// a certificate in PEM format from a stream.
-
- explicit X509Certificate(const std::string& path);
- /// Creates the X509Certificate object by reading
- /// a certificate in PEM format from a file.
-
- explicit X509Certificate(X509* pCert);
- /// Creates the X509Certificate from an existing
- /// OpenSSL certificate. Ownership is taken of
- /// the certificate.
-
- X509Certificate(X509* pCert, bool shared);
- /// Creates the X509Certificate from an existing
- /// OpenSSL certificate. Ownership is taken of
- /// the certificate. If shared is true, the
- /// certificate's reference count is incremented.
-
- X509Certificate(const Poco::Crypto::X509Certificate& cert);
- /// Creates the certificate by copying another one.
-
- X509Certificate& operator = (const Poco::Crypto::X509Certificate& cert);
- /// Assigns a certificate.
-
- ~X509Certificate();
- /// Destroys the X509Certificate.
-
- bool verify(const std::string& hostName) const;
- /// Verifies the validity of the certificate against the host name.
- ///
- /// For this check to be successful, the certificate must contain
- /// a domain name that matches the domain name
- /// of the host.
+//
+// X509Certificate.h
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: X509Certificate
+//
+// Definition of the X509Certificate class.
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef NetSSL_X509Certificate_INCLUDED
+#define NetSSL_X509Certificate_INCLUDED
+
+
+#include "Poco/Net/NetSSL.h"
+#include "Poco/Net/SocketDefs.h"
+#include "Poco/Crypto/X509Certificate.h"
+#include "Poco/DateTime.h"
+#include "Poco/SharedPtr.h"
+#include <set>
+
+
+namespace Poco {
+namespace Net {
+
+
+class HostEntry;
+
+
+class NetSSL_API X509Certificate: public Poco::Crypto::X509Certificate
+ /// This class extends Poco::Crypto::X509Certificate with the
+ /// feature to validate a certificate.
+{
+public:
+ explicit X509Certificate(std::istream& istr);
+ /// Creates the X509Certificate object by reading
+ /// a certificate in PEM format from a stream.
+
+ explicit X509Certificate(const std::string& path);
+ /// Creates the X509Certificate object by reading
+ /// a certificate in PEM format from a file.
+
+ explicit X509Certificate(X509* pCert);
+ /// Creates the X509Certificate from an existing
+ /// OpenSSL certificate. Ownership is taken of
+ /// the certificate.
+
+ X509Certificate(X509* pCert, bool shared);
+ /// Creates the X509Certificate from an existing
+ /// OpenSSL certificate. Ownership is taken of
+ /// the certificate. If shared is true, the
+ /// certificate's reference count is incremented.
+
+ X509Certificate(const Poco::Crypto::X509Certificate& cert);
+ /// Creates the certificate by copying another one.
+
+ X509Certificate& operator = (const Poco::Crypto::X509Certificate& cert);
+ /// Assigns a certificate.
+
+ ~X509Certificate();
+ /// Destroys the X509Certificate.
+
+ bool verify(const std::string& hostName) const;
+ /// Verifies the validity of the certificate against the host name.
///
- /// Returns true if verification succeeded, or false otherwise.
-
- static bool verify(const Poco::Crypto::X509Certificate& cert, const std::string& hostName);
- /// Verifies the validity of the certificate against the host name.
- ///
- /// For this check to be successful, the certificate must contain
- /// a domain name that matches the domain name
- /// of the host.
- ///
- /// Returns true if verification succeeded, or false otherwise.
-
-protected:
- static bool containsWildcards(const std::string& commonName);
- static bool matchWildcard(const std::string& alias, const std::string& hostName);
-
-private:
- enum
- {
- NAME_BUFFER_SIZE = 256
- };
-};
-
-
-} } // namespace Poco::Net
-
-
-#endif // NetSSL_X509Certificate_INCLUDED
+ /// For this check to be successful, the certificate must contain
+ /// a domain name that matches the domain name
+ /// of the host.
+ ///
+ /// Returns true if verification succeeded, or false otherwise.
+
+ static bool verify(const Poco::Crypto::X509Certificate& cert, const std::string& hostName);
+ /// Verifies the validity of the certificate against the host name.
+ ///
+ /// For this check to be successful, the certificate must contain
+ /// a domain name that matches the domain name
+ /// of the host.
+ ///
+ /// Returns true if verification succeeded, or false otherwise.
+
+protected:
+ static bool containsWildcards(const std::string& commonName);
+ static bool matchWildcard(const std::string& alias, const std::string& hostName);
+
+private:
+ enum
+ {
+ NAME_BUFFER_SIZE = 256
+ };
+};
+
+
+} } // namespace Poco::Net
+
+
+#endif // NetSSL_X509Certificate_INCLUDED
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/AcceptCertificateHandler.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/AcceptCertificateHandler.cpp
index 84017f7c34..10d2c3e49f 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/AcceptCertificateHandler.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/AcceptCertificateHandler.cpp
@@ -1,38 +1,38 @@
-//
-// AcceptCertificateHandler.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: AcceptCertificateHandler
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/AcceptCertificateHandler.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-AcceptCertificateHandler::AcceptCertificateHandler(bool server): InvalidCertificateHandler(server)
-{
-}
-
-
-AcceptCertificateHandler::~AcceptCertificateHandler()
-{
-}
-
-
-void AcceptCertificateHandler::onInvalidCertificate(const void*, VerificationErrorArgs& errorCert)
-{
- errorCert.setIgnoreError(true);
-}
-
-
-} } // namespace Poco::Net
+//
+// AcceptCertificateHandler.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: AcceptCertificateHandler
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/AcceptCertificateHandler.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+AcceptCertificateHandler::AcceptCertificateHandler(bool server): InvalidCertificateHandler(server)
+{
+}
+
+
+AcceptCertificateHandler::~AcceptCertificateHandler()
+{
+}
+
+
+void AcceptCertificateHandler::onInvalidCertificate(const void*, VerificationErrorArgs& errorCert)
+{
+ errorCert.setIgnoreError(true);
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/CertificateHandlerFactory.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/CertificateHandlerFactory.cpp
index 8c517748be..320fe431e6 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/CertificateHandlerFactory.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/CertificateHandlerFactory.cpp
@@ -1,44 +1,44 @@
-//
-// CertificateHandlerFactory.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: CertificateHandlerFactory
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/CertificateHandlerFactory.h"
-#include "Poco/Net/SSLManager.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-CertificateHandlerFactory::CertificateHandlerFactory()
-{
-}
-
-
-CertificateHandlerFactory::~CertificateHandlerFactory()
-{
-}
-
-
-CertificateHandlerFactoryRegistrar::CertificateHandlerFactoryRegistrar(const std::string& name, CertificateHandlerFactory* pFactory)
-{
- SSLManager::instance().certificateHandlerFactoryMgr().setFactory(name, pFactory);
-}
-
-
-CertificateHandlerFactoryRegistrar::~CertificateHandlerFactoryRegistrar()
-{
-}
-
-
-} } // namespace Poco::Net
+//
+// CertificateHandlerFactory.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: CertificateHandlerFactory
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/CertificateHandlerFactory.h"
+#include "Poco/Net/SSLManager.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+CertificateHandlerFactory::CertificateHandlerFactory()
+{
+}
+
+
+CertificateHandlerFactory::~CertificateHandlerFactory()
+{
+}
+
+
+CertificateHandlerFactoryRegistrar::CertificateHandlerFactoryRegistrar(const std::string& name, CertificateHandlerFactory* pFactory)
+{
+ SSLManager::instance().certificateHandlerFactoryMgr().setFactory(name, pFactory);
+}
+
+
+CertificateHandlerFactoryRegistrar::~CertificateHandlerFactoryRegistrar()
+{
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/CertificateHandlerFactoryMgr.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/CertificateHandlerFactoryMgr.cpp
index a89bbea11f..5de448a076 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/CertificateHandlerFactoryMgr.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/CertificateHandlerFactoryMgr.cpp
@@ -1,69 +1,69 @@
-//
-// CertificateHandlerFactoryMgr.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: CertificateHandlerFactoryMgr
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/CertificateHandlerFactoryMgr.h"
-#include "Poco/Net/ConsoleCertificateHandler.h"
-#include "Poco/Net/AcceptCertificateHandler.h"
-#include "Poco/Net/RejectCertificateHandler.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-CertificateHandlerFactoryMgr::CertificateHandlerFactoryMgr()
-{
- setFactory("ConsoleCertificateHandler", new CertificateHandlerFactoryImpl<ConsoleCertificateHandler>());
- setFactory("AcceptCertificateHandler", new CertificateHandlerFactoryImpl<AcceptCertificateHandler>());
- setFactory("RejectCertificateHandler", new CertificateHandlerFactoryImpl<RejectCertificateHandler>());
-}
-
-
-CertificateHandlerFactoryMgr::~CertificateHandlerFactoryMgr()
-{
-}
-
-
-void CertificateHandlerFactoryMgr::setFactory(const std::string& name, CertificateHandlerFactory* pFactory)
-{
- bool success = _factories.insert(make_pair(name, Poco::SharedPtr<CertificateHandlerFactory>(pFactory))).second;
- if (!success)
- delete pFactory;
- poco_assert(success);
-}
-
-
-bool CertificateHandlerFactoryMgr::hasFactory(const std::string& name) const
-{
- return _factories.find(name) != _factories.end();
-}
-
-
-const CertificateHandlerFactory* CertificateHandlerFactoryMgr::getFactory(const std::string& name) const
-{
- FactoriesMap::const_iterator it = _factories.find(name);
- if (it != _factories.end())
- return it->second;
- else
- return 0;
-}
-
-
-void CertificateHandlerFactoryMgr::removeFactory(const std::string& name)
-{
- _factories.erase(name);
-}
-
-
-} } // namespace Poco::Net
+//
+// CertificateHandlerFactoryMgr.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: CertificateHandlerFactoryMgr
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/CertificateHandlerFactoryMgr.h"
+#include "Poco/Net/ConsoleCertificateHandler.h"
+#include "Poco/Net/AcceptCertificateHandler.h"
+#include "Poco/Net/RejectCertificateHandler.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+CertificateHandlerFactoryMgr::CertificateHandlerFactoryMgr()
+{
+ setFactory("ConsoleCertificateHandler", new CertificateHandlerFactoryImpl<ConsoleCertificateHandler>());
+ setFactory("AcceptCertificateHandler", new CertificateHandlerFactoryImpl<AcceptCertificateHandler>());
+ setFactory("RejectCertificateHandler", new CertificateHandlerFactoryImpl<RejectCertificateHandler>());
+}
+
+
+CertificateHandlerFactoryMgr::~CertificateHandlerFactoryMgr()
+{
+}
+
+
+void CertificateHandlerFactoryMgr::setFactory(const std::string& name, CertificateHandlerFactory* pFactory)
+{
+ bool success = _factories.insert(make_pair(name, Poco::SharedPtr<CertificateHandlerFactory>(pFactory))).second;
+ if (!success)
+ delete pFactory;
+ poco_assert(success);
+}
+
+
+bool CertificateHandlerFactoryMgr::hasFactory(const std::string& name) const
+{
+ return _factories.find(name) != _factories.end();
+}
+
+
+const CertificateHandlerFactory* CertificateHandlerFactoryMgr::getFactory(const std::string& name) const
+{
+ FactoriesMap::const_iterator it = _factories.find(name);
+ if (it != _factories.end())
+ return it->second;
+ else
+ return 0;
+}
+
+
+void CertificateHandlerFactoryMgr::removeFactory(const std::string& name)
+{
+ _factories.erase(name);
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/ConsoleCertificateHandler.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/ConsoleCertificateHandler.cpp
index db64752e70..126d0772fc 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/ConsoleCertificateHandler.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/ConsoleCertificateHandler.cpp
@@ -1,53 +1,53 @@
-//
-// ConsoleCertificateHandler.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: ConsoleCertificateHandler
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/ConsoleCertificateHandler.h"
-#include <iostream>
-
-
-namespace Poco {
-namespace Net {
-
-
-ConsoleCertificateHandler::ConsoleCertificateHandler(bool server): InvalidCertificateHandler(server)
-{
-}
-
-
-ConsoleCertificateHandler::~ConsoleCertificateHandler()
-{
-}
-
-
-void ConsoleCertificateHandler::onInvalidCertificate(const void*, VerificationErrorArgs& errorCert)
-{
- const X509Certificate& aCert = errorCert.certificate();
- std::cout << "\n";
- std::cout << "WARNING: Certificate verification failed\n";
- std::cout << "----------------------------------------\n";
- std::cout << "Issuer Name: " << aCert.issuerName() << "\n";
- std::cout << "Subject Name: " << aCert.subjectName() << "\n\n";
- std::cout << "The certificate yielded the error: " << errorCert.errorMessage() << "\n\n";
- std::cout << "The error occurred in the certificate chain at position " << errorCert.errorDepth() << "\n";
- std::cout << "Accept the certificate (y,n)? ";
- char c = 0;
- std::cin >> c;
- if (c == 'y' || c == 'Y')
- errorCert.setIgnoreError(true);
- else
- errorCert.setIgnoreError(false);
-}
-
-
-} } // namespace Poco::Net
+//
+// ConsoleCertificateHandler.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: ConsoleCertificateHandler
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/ConsoleCertificateHandler.h"
+#include <iostream>
+
+
+namespace Poco {
+namespace Net {
+
+
+ConsoleCertificateHandler::ConsoleCertificateHandler(bool server): InvalidCertificateHandler(server)
+{
+}
+
+
+ConsoleCertificateHandler::~ConsoleCertificateHandler()
+{
+}
+
+
+void ConsoleCertificateHandler::onInvalidCertificate(const void*, VerificationErrorArgs& errorCert)
+{
+ const X509Certificate& aCert = errorCert.certificate();
+ std::cout << "\n";
+ std::cout << "WARNING: Certificate verification failed\n";
+ std::cout << "----------------------------------------\n";
+ std::cout << "Issuer Name: " << aCert.issuerName() << "\n";
+ std::cout << "Subject Name: " << aCert.subjectName() << "\n\n";
+ std::cout << "The certificate yielded the error: " << errorCert.errorMessage() << "\n\n";
+ std::cout << "The error occurred in the certificate chain at position " << errorCert.errorDepth() << "\n";
+ std::cout << "Accept the certificate (y,n)? ";
+ char c = 0;
+ std::cin >> c;
+ if (c == 'y' || c == 'Y')
+ errorCert.setIgnoreError(true);
+ else
+ errorCert.setIgnoreError(false);
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/Context.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/Context.cpp
index 2b16790ca4..80417c1006 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/Context.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/Context.cpp
@@ -1,578 +1,578 @@
-//
-// Context.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: Context
-//
-// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/Context.h"
-#include "Poco/Net/SSLManager.h"
-#include "Poco/Net/SSLException.h"
-#include "Poco/Net/Utility.h"
-#include "Poco/Crypto/OpenSSLInitializer.h"
-#include "Poco/File.h"
-#include "Poco/Path.h"
-#include "Poco/Timestamp.h"
-#include <openssl/bio.h>
-#include <openssl/err.h>
-#include <openssl/ssl.h>
-#include <openssl/x509v3.h>
-
-
-namespace Poco {
-namespace Net {
-
-
-Context::Params::Params():
- verificationMode(VERIFY_RELAXED),
- verificationDepth(9),
- loadDefaultCAs(false),
- cipherList("ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH")
-{
-}
-
-
-Context::Context(Usage usage, const Params& params):
- _usage(usage),
- _mode(params.verificationMode),
- _pSSLContext(0),
- _extendedCertificateVerification(true)
-{
- init(params);
-}
-
-
-Context::Context(
- Usage usage,
- const std::string& privateKeyFile,
- const std::string& certificateFile,
- const std::string& caLocation,
- VerificationMode verificationMode,
- int verificationDepth,
- bool loadDefaultCAs,
- const std::string& cipherList):
- _usage(usage),
- _mode(verificationMode),
- _pSSLContext(0),
- _extendedCertificateVerification(true)
-{
- Params params;
- params.privateKeyFile = privateKeyFile;
- params.certificateFile = certificateFile;
- params.caLocation = caLocation;
- params.verificationMode = verificationMode;
- params.verificationDepth = verificationDepth;
- params.loadDefaultCAs = loadDefaultCAs;
- params.cipherList = cipherList;
- init(params);
-}
-
-
-Context::Context(
- Usage usage,
- const std::string& caLocation,
- VerificationMode verificationMode,
- int verificationDepth,
- bool loadDefaultCAs,
- const std::string& cipherList):
- _usage(usage),
- _mode(verificationMode),
- _pSSLContext(0),
- _extendedCertificateVerification(true)
-{
- Params params;
- params.caLocation = caLocation;
- params.verificationMode = verificationMode;
- params.verificationDepth = verificationDepth;
- params.loadDefaultCAs = loadDefaultCAs;
- params.cipherList = cipherList;
- init(params);
-}
-
-
-Context::~Context()
-{
- try
- {
- SSL_CTX_free(_pSSLContext);
- Poco::Crypto::OpenSSLInitializer::uninitialize();
- }
- catch (...)
- {
- poco_unexpected();
- }
-}
-
-
-void Context::init(const Params& params)
-{
- Poco::Crypto::OpenSSLInitializer::initialize();
-
- createSSLContext();
-
- try
- {
- int errCode = 0;
- if (!params.caLocation.empty())
- {
- Poco::File aFile(params.caLocation);
- if (aFile.isDirectory())
- errCode = SSL_CTX_load_verify_locations(_pSSLContext, 0, Poco::Path::transcode(params.caLocation).c_str());
- else
- errCode = SSL_CTX_load_verify_locations(_pSSLContext, Poco::Path::transcode(params.caLocation).c_str(), 0);
- if (errCode != 1)
- {
- std::string msg = Utility::getLastError();
- throw SSLContextException(std::string("Cannot load CA file/directory at ") + params.caLocation, msg);
- }
- }
-
- if (params.loadDefaultCAs)
- {
- errCode = SSL_CTX_set_default_verify_paths(_pSSLContext);
- if (errCode != 1)
- {
- std::string msg = Utility::getLastError();
- throw SSLContextException("Cannot load default CA certificates", msg);
- }
- }
-
- if (!params.privateKeyFile.empty())
- {
- errCode = SSL_CTX_use_PrivateKey_file(_pSSLContext, Poco::Path::transcode(params.privateKeyFile).c_str(), SSL_FILETYPE_PEM);
- if (errCode != 1)
- {
- std::string msg = Utility::getLastError();
- throw SSLContextException(std::string("Error loading private key from file ") + params.privateKeyFile, msg);
- }
- }
-
- if (!params.certificateFile.empty())
- {
- errCode = SSL_CTX_use_certificate_chain_file(_pSSLContext, Poco::Path::transcode(params.certificateFile).c_str());
- if (errCode != 1)
- {
- std::string errMsg = Utility::getLastError();
- throw SSLContextException(std::string("Error loading certificate from file ") + params.certificateFile, errMsg);
- }
- }
-
- if (isForServerUse())
- SSL_CTX_set_verify(_pSSLContext, params.verificationMode, &SSLManager::verifyServerCallback);
- else
- SSL_CTX_set_verify(_pSSLContext, params.verificationMode, &SSLManager::verifyClientCallback);
-
- SSL_CTX_set_cipher_list(_pSSLContext, params.cipherList.c_str());
- SSL_CTX_set_verify_depth(_pSSLContext, params.verificationDepth);
- SSL_CTX_set_mode(_pSSLContext, SSL_MODE_AUTO_RETRY);
- SSL_CTX_set_session_cache_mode(_pSSLContext, SSL_SESS_CACHE_OFF);
-
- initDH(params.dhParamsFile);
- initECDH(params.ecdhCurve);
- }
- catch (...)
- {
- SSL_CTX_free(_pSSLContext);
- throw;
- }
-}
-
-
-void Context::useCertificate(const Poco::Crypto::X509Certificate& certificate)
-{
- int errCode = SSL_CTX_use_certificate(_pSSLContext, const_cast<X509*>(certificate.certificate()));
- if (errCode != 1)
- {
- std::string msg = Utility::getLastError();
- throw SSLContextException("Cannot set certificate for Context", msg);
- }
-}
-
-
-void Context::addChainCertificate(const Poco::Crypto::X509Certificate& certificate)
-{
- X509* pCert = certificate.dup();
- int errCode = SSL_CTX_add_extra_chain_cert(_pSSLContext, pCert);
- if (errCode != 1)
- {
- X509_free(pCert);
- std::string msg = Utility::getLastError();
- throw SSLContextException("Cannot add chain certificate to Context", msg);
- }
-}
-
-
-void Context::addCertificateAuthority(const Crypto::X509Certificate &certificate)
-{
- if (X509_STORE* store = SSL_CTX_get_cert_store(_pSSLContext))
- {
- int errCode = X509_STORE_add_cert(store, const_cast<X509*>(certificate.certificate()));
- if (errCode != 1)
- {
- std::string msg = Utility::getLastError();
- throw SSLContextException("Cannot add certificate authority to Context", msg);
- }
- }
- else
- {
- std::string msg = Utility::getLastError();
- throw SSLContextException("Cannot add certificate authority to Context", msg);
- }
-}
-
-
-void Context::usePrivateKey(const Poco::Crypto::RSAKey& key)
-{
- int errCode = SSL_CTX_use_RSAPrivateKey(_pSSLContext, key.impl()->getRSA());
- if (errCode != 1)
- {
- std::string msg = Utility::getLastError();
- throw SSLContextException("Cannot set private key for Context", msg);
- }
-}
-
-
-void Context::enableSessionCache(bool flag)
-{
- if (flag)
- {
- SSL_CTX_set_session_cache_mode(_pSSLContext, isForServerUse() ? SSL_SESS_CACHE_SERVER : SSL_SESS_CACHE_CLIENT);
- }
- else
- {
- SSL_CTX_set_session_cache_mode(_pSSLContext, SSL_SESS_CACHE_OFF);
- }
-}
-
-
-void Context::enableSessionCache(bool flag, const std::string& sessionIdContext)
-{
- poco_assert (isForServerUse());
-
- if (flag)
- {
- SSL_CTX_set_session_cache_mode(_pSSLContext, SSL_SESS_CACHE_SERVER);
- }
- else
- {
- SSL_CTX_set_session_cache_mode(_pSSLContext, SSL_SESS_CACHE_OFF);
- }
-
- unsigned length = static_cast<unsigned>(sessionIdContext.length());
- if (length > SSL_MAX_SSL_SESSION_ID_LENGTH) length = SSL_MAX_SSL_SESSION_ID_LENGTH;
- int rc = SSL_CTX_set_session_id_context(_pSSLContext, reinterpret_cast<const unsigned char*>(sessionIdContext.data()), length);
- if (rc != 1) throw SSLContextException("cannot set session ID context");
-}
-
-
-bool Context::sessionCacheEnabled() const
-{
- return SSL_CTX_get_session_cache_mode(_pSSLContext) != SSL_SESS_CACHE_OFF;
-}
-
-
-void Context::setSessionCacheSize(std::size_t size)
-{
- poco_assert (isForServerUse());
-
- SSL_CTX_sess_set_cache_size(_pSSLContext, static_cast<long>(size));
-}
-
-
-std::size_t Context::getSessionCacheSize() const
-{
- poco_assert (isForServerUse());
-
- return static_cast<std::size_t>(SSL_CTX_sess_get_cache_size(_pSSLContext));
-}
-
-
-void Context::setSessionTimeout(long seconds)
-{
- poco_assert (isForServerUse());
-
- SSL_CTX_set_timeout(_pSSLContext, seconds);
-}
-
-
-long Context::getSessionTimeout() const
-{
- poco_assert (isForServerUse());
-
- return SSL_CTX_get_timeout(_pSSLContext);
-}
-
-
-void Context::flushSessionCache()
-{
- poco_assert (isForServerUse());
-
- Poco::Timestamp now;
- SSL_CTX_flush_sessions(_pSSLContext, static_cast<long>(now.epochTime()));
-}
-
-
-void Context::enableExtendedCertificateVerification(bool flag)
-{
- _extendedCertificateVerification = flag;
-}
-
-
-void Context::disableStatelessSessionResumption()
-{
-#if defined(SSL_OP_NO_TICKET)
- SSL_CTX_set_options(_pSSLContext, SSL_OP_NO_TICKET);
-#endif
-}
-
-
-void Context::disableProtocols(int protocols)
-{
- if (protocols & PROTO_SSLV2)
- {
-#if defined(SSL_OP_NO_SSLv2)
- SSL_CTX_set_options(_pSSLContext, SSL_OP_NO_SSLv2);
-#endif
- }
- if (protocols & PROTO_SSLV3)
- {
-#if defined(SSL_OP_NO_SSLv3)
- SSL_CTX_set_options(_pSSLContext, SSL_OP_NO_SSLv3);
-#endif
- }
- if (protocols & PROTO_TLSV1)
- {
-#if defined(SSL_OP_NO_TLSv1)
- SSL_CTX_set_options(_pSSLContext, SSL_OP_NO_TLSv1);
-#endif
- }
- if (protocols & PROTO_TLSV1_1)
- {
-#if defined(SSL_OP_NO_TLSv1_1)
- SSL_CTX_set_options(_pSSLContext, SSL_OP_NO_TLSv1_1);
-#endif
- }
- if (protocols & PROTO_TLSV1_2)
- {
-#if defined(SSL_OP_NO_TLSv1_2)
- SSL_CTX_set_options(_pSSLContext, SSL_OP_NO_TLSv1_2);
-#endif
- }
-}
-
-
-void Context::preferServerCiphers()
-{
-#if defined(SSL_OP_CIPHER_SERVER_PREFERENCE)
- SSL_CTX_set_options(_pSSLContext, SSL_OP_CIPHER_SERVER_PREFERENCE);
-#endif
-}
-
-
-void Context::createSSLContext()
-{
- if (SSLManager::isFIPSEnabled())
- {
- _pSSLContext = SSL_CTX_new(TLSv1_method());
- }
- else
- {
- switch (_usage)
- {
- case CLIENT_USE:
-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
- _pSSLContext = SSL_CTX_new(TLS_client_method());
-#else
- _pSSLContext = SSL_CTX_new(SSLv23_client_method());
-#endif
- break;
- case SERVER_USE:
-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
- _pSSLContext = SSL_CTX_new(TLS_server_method());
-#else
- _pSSLContext = SSL_CTX_new(SSLv23_server_method());
-#endif
- break;
-#if defined(SSL_OP_NO_TLSv1) && !defined(OPENSSL_NO_TLS1)
- case TLSV1_CLIENT_USE:
- _pSSLContext = SSL_CTX_new(TLSv1_client_method());
- break;
- case TLSV1_SERVER_USE:
- _pSSLContext = SSL_CTX_new(TLSv1_server_method());
- break;
-#endif
-#if defined(SSL_OP_NO_TLSv1_1) && !defined(OPENSSL_NO_TLS1)
-/* SSL_OP_NO_TLSv1_1 is defined in ssl.h if the library version supports TLSv1.1.
- * OPENSSL_NO_TLS1 is defined in opensslconf.h or on the compiler command line
- * if TLS1.x was removed at OpenSSL library build time via Configure options.
- */
- case TLSV1_1_CLIENT_USE:
- _pSSLContext = SSL_CTX_new(TLSv1_1_client_method());
- break;
- case TLSV1_1_SERVER_USE:
- _pSSLContext = SSL_CTX_new(TLSv1_1_server_method());
- break;
-#endif
-#if defined(SSL_OP_NO_TLSv1_2) && !defined(OPENSSL_NO_TLS1)
- case TLSV1_2_CLIENT_USE:
- _pSSLContext = SSL_CTX_new(TLSv1_2_client_method());
- break;
- case TLSV1_2_SERVER_USE:
- _pSSLContext = SSL_CTX_new(TLSv1_2_server_method());
- break;
-#endif
- default:
- throw Poco::InvalidArgumentException("Invalid or unsupported usage");
- }
- }
- if (!_pSSLContext)
- {
- unsigned long err = ERR_get_error();
- throw SSLException("Cannot create SSL_CTX object", ERR_error_string(err, 0));
- }
-
- SSL_CTX_set_default_passwd_cb(_pSSLContext, &SSLManager::privateKeyPassphraseCallback);
- Utility::clearErrorStack();
- SSL_CTX_set_options(_pSSLContext, SSL_OP_ALL);
-}
-
-
-void Context::initDH(const std::string& dhParamsFile)
-{
-#ifndef OPENSSL_NO_DH
- // 1024-bit MODP Group with 160-bit prime order subgroup (RFC5114)
- // -----BEGIN DH PARAMETERS-----
- // MIIBDAKBgQCxC4+WoIDgHd6S3l6uXVTsUsmfvPsGo8aaap3KUtI7YWBz4oZ1oj0Y
- // mDjvHi7mUsAT7LSuqQYRIySXXDzUm4O/rMvdfZDEvXCYSI6cIZpzck7/1vrlZEc4
- // +qMaT/VbzMChUa9fDci0vUW/N982XBpl5oz9p21NpwjfH7K8LkpDcQKBgQCk0cvV
- // w/00EmdlpELvuZkF+BBN0lisUH/WQGz/FCZtMSZv6h5cQVZLd35pD1UE8hMWAhe0
- // sBuIal6RVH+eJ0n01/vX07mpLuGQnQ0iY/gKdqaiTAh6CR9THb8KAWm2oorWYqTR
- // jnOvoy13nVkY0IvIhY9Nzvl8KiSFXm7rIrOy5QICAKA=
- // -----END DH PARAMETERS-----
- //
-
- static const unsigned char dh1024_p[] =
- {
- 0xB1,0x0B,0x8F,0x96,0xA0,0x80,0xE0,0x1D,0xDE,0x92,0xDE,0x5E,
- 0xAE,0x5D,0x54,0xEC,0x52,0xC9,0x9F,0xBC,0xFB,0x06,0xA3,0xC6,
- 0x9A,0x6A,0x9D,0xCA,0x52,0xD2,0x3B,0x61,0x60,0x73,0xE2,0x86,
- 0x75,0xA2,0x3D,0x18,0x98,0x38,0xEF,0x1E,0x2E,0xE6,0x52,0xC0,
- 0x13,0xEC,0xB4,0xAE,0xA9,0x06,0x11,0x23,0x24,0x97,0x5C,0x3C,
- 0xD4,0x9B,0x83,0xBF,0xAC,0xCB,0xDD,0x7D,0x90,0xC4,0xBD,0x70,
- 0x98,0x48,0x8E,0x9C,0x21,0x9A,0x73,0x72,0x4E,0xFF,0xD6,0xFA,
- 0xE5,0x64,0x47,0x38,0xFA,0xA3,0x1A,0x4F,0xF5,0x5B,0xCC,0xC0,
- 0xA1,0x51,0xAF,0x5F,0x0D,0xC8,0xB4,0xBD,0x45,0xBF,0x37,0xDF,
- 0x36,0x5C,0x1A,0x65,0xE6,0x8C,0xFD,0xA7,0x6D,0x4D,0xA7,0x08,
- 0xDF,0x1F,0xB2,0xBC,0x2E,0x4A,0x43,0x71,
- };
-
- static const unsigned char dh1024_g[] =
- {
- 0xA4,0xD1,0xCB,0xD5,0xC3,0xFD,0x34,0x12,0x67,0x65,0xA4,0x42,
- 0xEF,0xB9,0x99,0x05,0xF8,0x10,0x4D,0xD2,0x58,0xAC,0x50,0x7F,
- 0xD6,0x40,0x6C,0xFF,0x14,0x26,0x6D,0x31,0x26,0x6F,0xEA,0x1E,
- 0x5C,0x41,0x56,0x4B,0x77,0x7E,0x69,0x0F,0x55,0x04,0xF2,0x13,
- 0x16,0x02,0x17,0xB4,0xB0,0x1B,0x88,0x6A,0x5E,0x91,0x54,0x7F,
- 0x9E,0x27,0x49,0xF4,0xD7,0xFB,0xD7,0xD3,0xB9,0xA9,0x2E,0xE1,
- 0x90,0x9D,0x0D,0x22,0x63,0xF8,0x0A,0x76,0xA6,0xA2,0x4C,0x08,
- 0x7A,0x09,0x1F,0x53,0x1D,0xBF,0x0A,0x01,0x69,0xB6,0xA2,0x8A,
- 0xD6,0x62,0xA4,0xD1,0x8E,0x73,0xAF,0xA3,0x2D,0x77,0x9D,0x59,
- 0x18,0xD0,0x8B,0xC8,0x85,0x8F,0x4D,0xCE,0xF9,0x7C,0x2A,0x24,
- 0x85,0x5E,0x6E,0xEB,0x22,0xB3,0xB2,0xE5,
- };
-
- DH* dh = 0;
- if (!dhParamsFile.empty())
- {
- BIO* bio = BIO_new_file(dhParamsFile.c_str(), "r");
- if (!bio)
- {
- std::string msg = Utility::getLastError();
- throw SSLContextException(std::string("Error opening Diffie-Hellman parameters file ") + dhParamsFile, msg);
- }
- dh = PEM_read_bio_DHparams(bio, 0, 0, 0);
- BIO_free(bio);
- if (!dh)
- {
- std::string msg = Utility::getLastError();
- throw SSLContextException(std::string("Error reading Diffie-Hellman parameters from file ") + dhParamsFile, msg);
- }
- }
- else
- {
- dh = DH_new();
- if (!dh)
- {
- std::string msg = Utility::getLastError();
- throw SSLContextException("Error creating Diffie-Hellman parameters", msg);
- }
-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
- BIGNUM* p = BN_bin2bn(dh1024_p, sizeof(dh1024_p), 0);
- BIGNUM* g = BN_bin2bn(dh1024_g, sizeof(dh1024_g), 0);
- DH_set0_pqg(dh, p, 0, g);
- DH_set_length(dh, 160);
- if (!p || !g)
- {
- DH_free(dh);
- throw SSLContextException("Error creating Diffie-Hellman parameters");
- }
-#else
- dh->p = BN_bin2bn(dh1024_p, sizeof(dh1024_p), 0);
- dh->g = BN_bin2bn(dh1024_g, sizeof(dh1024_g), 0);
- dh->length = 160;
- if ((!dh->p) || (!dh->g))
- {
- DH_free(dh);
- throw SSLContextException("Error creating Diffie-Hellman parameters");
- }
-#endif
- }
- SSL_CTX_set_tmp_dh(_pSSLContext, dh);
- SSL_CTX_set_options(_pSSLContext, SSL_OP_SINGLE_DH_USE);
- DH_free(dh);
-#else
- if (!dhParamsFile.empty())
- throw SSLContextException("OpenSSL does not support DH");
-#endif
-}
-
-
-void Context::initECDH(const std::string& curve)
-{
-#if OPENSSL_VERSION_NUMBER >= 0x0090800fL
-#ifndef OPENSSL_NO_ECDH
- int nid = 0;
- if (!curve.empty())
- {
- nid = OBJ_sn2nid(curve.c_str());
- }
- else
- {
- nid = OBJ_sn2nid("prime256v1");
- }
- if (nid == 0)
- {
- throw SSLContextException("Unknown ECDH curve name", curve);
- }
-
- EC_KEY* ecdh = EC_KEY_new_by_curve_name(nid);
- if (!ecdh)
- {
- throw SSLContextException("Cannot create ECDH curve");
- }
- SSL_CTX_set_tmp_ecdh(_pSSLContext, ecdh);
- SSL_CTX_set_options(_pSSLContext, SSL_OP_SINGLE_ECDH_USE);
- EC_KEY_free(ecdh);
-#endif
-#endif
-}
-
-
-} } // namespace Poco::Net
+//
+// Context.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: Context
+//
+// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/Context.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Net/SSLException.h"
+#include "Poco/Net/Utility.h"
+#include "Poco/Crypto/OpenSSLInitializer.h"
+#include "Poco/File.h"
+#include "Poco/Path.h"
+#include "Poco/Timestamp.h"
+#include <openssl/bio.h>
+#include <openssl/err.h>
+#include <openssl/ssl.h>
+#include <openssl/x509v3.h>
+
+
+namespace Poco {
+namespace Net {
+
+
+Context::Params::Params():
+ verificationMode(VERIFY_RELAXED),
+ verificationDepth(9),
+ loadDefaultCAs(false),
+ cipherList("ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH")
+{
+}
+
+
+Context::Context(Usage usage, const Params& params):
+ _usage(usage),
+ _mode(params.verificationMode),
+ _pSSLContext(0),
+ _extendedCertificateVerification(true)
+{
+ init(params);
+}
+
+
+Context::Context(
+ Usage usage,
+ const std::string& privateKeyFile,
+ const std::string& certificateFile,
+ const std::string& caLocation,
+ VerificationMode verificationMode,
+ int verificationDepth,
+ bool loadDefaultCAs,
+ const std::string& cipherList):
+ _usage(usage),
+ _mode(verificationMode),
+ _pSSLContext(0),
+ _extendedCertificateVerification(true)
+{
+ Params params;
+ params.privateKeyFile = privateKeyFile;
+ params.certificateFile = certificateFile;
+ params.caLocation = caLocation;
+ params.verificationMode = verificationMode;
+ params.verificationDepth = verificationDepth;
+ params.loadDefaultCAs = loadDefaultCAs;
+ params.cipherList = cipherList;
+ init(params);
+}
+
+
+Context::Context(
+ Usage usage,
+ const std::string& caLocation,
+ VerificationMode verificationMode,
+ int verificationDepth,
+ bool loadDefaultCAs,
+ const std::string& cipherList):
+ _usage(usage),
+ _mode(verificationMode),
+ _pSSLContext(0),
+ _extendedCertificateVerification(true)
+{
+ Params params;
+ params.caLocation = caLocation;
+ params.verificationMode = verificationMode;
+ params.verificationDepth = verificationDepth;
+ params.loadDefaultCAs = loadDefaultCAs;
+ params.cipherList = cipherList;
+ init(params);
+}
+
+
+Context::~Context()
+{
+ try
+ {
+ SSL_CTX_free(_pSSLContext);
+ Poco::Crypto::OpenSSLInitializer::uninitialize();
+ }
+ catch (...)
+ {
+ poco_unexpected();
+ }
+}
+
+
+void Context::init(const Params& params)
+{
+ Poco::Crypto::OpenSSLInitializer::initialize();
+
+ createSSLContext();
+
+ try
+ {
+ int errCode = 0;
+ if (!params.caLocation.empty())
+ {
+ Poco::File aFile(params.caLocation);
+ if (aFile.isDirectory())
+ errCode = SSL_CTX_load_verify_locations(_pSSLContext, 0, Poco::Path::transcode(params.caLocation).c_str());
+ else
+ errCode = SSL_CTX_load_verify_locations(_pSSLContext, Poco::Path::transcode(params.caLocation).c_str(), 0);
+ if (errCode != 1)
+ {
+ std::string msg = Utility::getLastError();
+ throw SSLContextException(std::string("Cannot load CA file/directory at ") + params.caLocation, msg);
+ }
+ }
+
+ if (params.loadDefaultCAs)
+ {
+ errCode = SSL_CTX_set_default_verify_paths(_pSSLContext);
+ if (errCode != 1)
+ {
+ std::string msg = Utility::getLastError();
+ throw SSLContextException("Cannot load default CA certificates", msg);
+ }
+ }
+
+ if (!params.privateKeyFile.empty())
+ {
+ errCode = SSL_CTX_use_PrivateKey_file(_pSSLContext, Poco::Path::transcode(params.privateKeyFile).c_str(), SSL_FILETYPE_PEM);
+ if (errCode != 1)
+ {
+ std::string msg = Utility::getLastError();
+ throw SSLContextException(std::string("Error loading private key from file ") + params.privateKeyFile, msg);
+ }
+ }
+
+ if (!params.certificateFile.empty())
+ {
+ errCode = SSL_CTX_use_certificate_chain_file(_pSSLContext, Poco::Path::transcode(params.certificateFile).c_str());
+ if (errCode != 1)
+ {
+ std::string errMsg = Utility::getLastError();
+ throw SSLContextException(std::string("Error loading certificate from file ") + params.certificateFile, errMsg);
+ }
+ }
+
+ if (isForServerUse())
+ SSL_CTX_set_verify(_pSSLContext, params.verificationMode, &SSLManager::verifyServerCallback);
+ else
+ SSL_CTX_set_verify(_pSSLContext, params.verificationMode, &SSLManager::verifyClientCallback);
+
+ SSL_CTX_set_cipher_list(_pSSLContext, params.cipherList.c_str());
+ SSL_CTX_set_verify_depth(_pSSLContext, params.verificationDepth);
+ SSL_CTX_set_mode(_pSSLContext, SSL_MODE_AUTO_RETRY);
+ SSL_CTX_set_session_cache_mode(_pSSLContext, SSL_SESS_CACHE_OFF);
+
+ initDH(params.dhParamsFile);
+ initECDH(params.ecdhCurve);
+ }
+ catch (...)
+ {
+ SSL_CTX_free(_pSSLContext);
+ throw;
+ }
+}
+
+
+void Context::useCertificate(const Poco::Crypto::X509Certificate& certificate)
+{
+ int errCode = SSL_CTX_use_certificate(_pSSLContext, const_cast<X509*>(certificate.certificate()));
+ if (errCode != 1)
+ {
+ std::string msg = Utility::getLastError();
+ throw SSLContextException("Cannot set certificate for Context", msg);
+ }
+}
+
+
+void Context::addChainCertificate(const Poco::Crypto::X509Certificate& certificate)
+{
+ X509* pCert = certificate.dup();
+ int errCode = SSL_CTX_add_extra_chain_cert(_pSSLContext, pCert);
+ if (errCode != 1)
+ {
+ X509_free(pCert);
+ std::string msg = Utility::getLastError();
+ throw SSLContextException("Cannot add chain certificate to Context", msg);
+ }
+}
+
+
+void Context::addCertificateAuthority(const Crypto::X509Certificate &certificate)
+{
+ if (X509_STORE* store = SSL_CTX_get_cert_store(_pSSLContext))
+ {
+ int errCode = X509_STORE_add_cert(store, const_cast<X509*>(certificate.certificate()));
+ if (errCode != 1)
+ {
+ std::string msg = Utility::getLastError();
+ throw SSLContextException("Cannot add certificate authority to Context", msg);
+ }
+ }
+ else
+ {
+ std::string msg = Utility::getLastError();
+ throw SSLContextException("Cannot add certificate authority to Context", msg);
+ }
+}
+
+
+void Context::usePrivateKey(const Poco::Crypto::RSAKey& key)
+{
+ int errCode = SSL_CTX_use_RSAPrivateKey(_pSSLContext, key.impl()->getRSA());
+ if (errCode != 1)
+ {
+ std::string msg = Utility::getLastError();
+ throw SSLContextException("Cannot set private key for Context", msg);
+ }
+}
+
+
+void Context::enableSessionCache(bool flag)
+{
+ if (flag)
+ {
+ SSL_CTX_set_session_cache_mode(_pSSLContext, isForServerUse() ? SSL_SESS_CACHE_SERVER : SSL_SESS_CACHE_CLIENT);
+ }
+ else
+ {
+ SSL_CTX_set_session_cache_mode(_pSSLContext, SSL_SESS_CACHE_OFF);
+ }
+}
+
+
+void Context::enableSessionCache(bool flag, const std::string& sessionIdContext)
+{
+ poco_assert (isForServerUse());
+
+ if (flag)
+ {
+ SSL_CTX_set_session_cache_mode(_pSSLContext, SSL_SESS_CACHE_SERVER);
+ }
+ else
+ {
+ SSL_CTX_set_session_cache_mode(_pSSLContext, SSL_SESS_CACHE_OFF);
+ }
+
+ unsigned length = static_cast<unsigned>(sessionIdContext.length());
+ if (length > SSL_MAX_SSL_SESSION_ID_LENGTH) length = SSL_MAX_SSL_SESSION_ID_LENGTH;
+ int rc = SSL_CTX_set_session_id_context(_pSSLContext, reinterpret_cast<const unsigned char*>(sessionIdContext.data()), length);
+ if (rc != 1) throw SSLContextException("cannot set session ID context");
+}
+
+
+bool Context::sessionCacheEnabled() const
+{
+ return SSL_CTX_get_session_cache_mode(_pSSLContext) != SSL_SESS_CACHE_OFF;
+}
+
+
+void Context::setSessionCacheSize(std::size_t size)
+{
+ poco_assert (isForServerUse());
+
+ SSL_CTX_sess_set_cache_size(_pSSLContext, static_cast<long>(size));
+}
+
+
+std::size_t Context::getSessionCacheSize() const
+{
+ poco_assert (isForServerUse());
+
+ return static_cast<std::size_t>(SSL_CTX_sess_get_cache_size(_pSSLContext));
+}
+
+
+void Context::setSessionTimeout(long seconds)
+{
+ poco_assert (isForServerUse());
+
+ SSL_CTX_set_timeout(_pSSLContext, seconds);
+}
+
+
+long Context::getSessionTimeout() const
+{
+ poco_assert (isForServerUse());
+
+ return SSL_CTX_get_timeout(_pSSLContext);
+}
+
+
+void Context::flushSessionCache()
+{
+ poco_assert (isForServerUse());
+
+ Poco::Timestamp now;
+ SSL_CTX_flush_sessions(_pSSLContext, static_cast<long>(now.epochTime()));
+}
+
+
+void Context::enableExtendedCertificateVerification(bool flag)
+{
+ _extendedCertificateVerification = flag;
+}
+
+
+void Context::disableStatelessSessionResumption()
+{
+#if defined(SSL_OP_NO_TICKET)
+ SSL_CTX_set_options(_pSSLContext, SSL_OP_NO_TICKET);
+#endif
+}
+
+
+void Context::disableProtocols(int protocols)
+{
+ if (protocols & PROTO_SSLV2)
+ {
+#if defined(SSL_OP_NO_SSLv2)
+ SSL_CTX_set_options(_pSSLContext, SSL_OP_NO_SSLv2);
+#endif
+ }
+ if (protocols & PROTO_SSLV3)
+ {
+#if defined(SSL_OP_NO_SSLv3)
+ SSL_CTX_set_options(_pSSLContext, SSL_OP_NO_SSLv3);
+#endif
+ }
+ if (protocols & PROTO_TLSV1)
+ {
+#if defined(SSL_OP_NO_TLSv1)
+ SSL_CTX_set_options(_pSSLContext, SSL_OP_NO_TLSv1);
+#endif
+ }
+ if (protocols & PROTO_TLSV1_1)
+ {
+#if defined(SSL_OP_NO_TLSv1_1)
+ SSL_CTX_set_options(_pSSLContext, SSL_OP_NO_TLSv1_1);
+#endif
+ }
+ if (protocols & PROTO_TLSV1_2)
+ {
+#if defined(SSL_OP_NO_TLSv1_2)
+ SSL_CTX_set_options(_pSSLContext, SSL_OP_NO_TLSv1_2);
+#endif
+ }
+}
+
+
+void Context::preferServerCiphers()
+{
+#if defined(SSL_OP_CIPHER_SERVER_PREFERENCE)
+ SSL_CTX_set_options(_pSSLContext, SSL_OP_CIPHER_SERVER_PREFERENCE);
+#endif
+}
+
+
+void Context::createSSLContext()
+{
+ if (SSLManager::isFIPSEnabled())
+ {
+ _pSSLContext = SSL_CTX_new(TLSv1_method());
+ }
+ else
+ {
+ switch (_usage)
+ {
+ case CLIENT_USE:
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ _pSSLContext = SSL_CTX_new(TLS_client_method());
+#else
+ _pSSLContext = SSL_CTX_new(SSLv23_client_method());
+#endif
+ break;
+ case SERVER_USE:
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ _pSSLContext = SSL_CTX_new(TLS_server_method());
+#else
+ _pSSLContext = SSL_CTX_new(SSLv23_server_method());
+#endif
+ break;
+#if defined(SSL_OP_NO_TLSv1) && !defined(OPENSSL_NO_TLS1)
+ case TLSV1_CLIENT_USE:
+ _pSSLContext = SSL_CTX_new(TLSv1_client_method());
+ break;
+ case TLSV1_SERVER_USE:
+ _pSSLContext = SSL_CTX_new(TLSv1_server_method());
+ break;
+#endif
+#if defined(SSL_OP_NO_TLSv1_1) && !defined(OPENSSL_NO_TLS1)
+/* SSL_OP_NO_TLSv1_1 is defined in ssl.h if the library version supports TLSv1.1.
+ * OPENSSL_NO_TLS1 is defined in opensslconf.h or on the compiler command line
+ * if TLS1.x was removed at OpenSSL library build time via Configure options.
+ */
+ case TLSV1_1_CLIENT_USE:
+ _pSSLContext = SSL_CTX_new(TLSv1_1_client_method());
+ break;
+ case TLSV1_1_SERVER_USE:
+ _pSSLContext = SSL_CTX_new(TLSv1_1_server_method());
+ break;
+#endif
+#if defined(SSL_OP_NO_TLSv1_2) && !defined(OPENSSL_NO_TLS1)
+ case TLSV1_2_CLIENT_USE:
+ _pSSLContext = SSL_CTX_new(TLSv1_2_client_method());
+ break;
+ case TLSV1_2_SERVER_USE:
+ _pSSLContext = SSL_CTX_new(TLSv1_2_server_method());
+ break;
+#endif
+ default:
+ throw Poco::InvalidArgumentException("Invalid or unsupported usage");
+ }
+ }
+ if (!_pSSLContext)
+ {
+ unsigned long err = ERR_get_error();
+ throw SSLException("Cannot create SSL_CTX object", ERR_error_string(err, 0));
+ }
+
+ SSL_CTX_set_default_passwd_cb(_pSSLContext, &SSLManager::privateKeyPassphraseCallback);
+ Utility::clearErrorStack();
+ SSL_CTX_set_options(_pSSLContext, SSL_OP_ALL);
+}
+
+
+void Context::initDH(const std::string& dhParamsFile)
+{
+#ifndef OPENSSL_NO_DH
+ // 1024-bit MODP Group with 160-bit prime order subgroup (RFC5114)
+ // -----BEGIN DH PARAMETERS-----
+ // MIIBDAKBgQCxC4+WoIDgHd6S3l6uXVTsUsmfvPsGo8aaap3KUtI7YWBz4oZ1oj0Y
+ // mDjvHi7mUsAT7LSuqQYRIySXXDzUm4O/rMvdfZDEvXCYSI6cIZpzck7/1vrlZEc4
+ // +qMaT/VbzMChUa9fDci0vUW/N982XBpl5oz9p21NpwjfH7K8LkpDcQKBgQCk0cvV
+ // w/00EmdlpELvuZkF+BBN0lisUH/WQGz/FCZtMSZv6h5cQVZLd35pD1UE8hMWAhe0
+ // sBuIal6RVH+eJ0n01/vX07mpLuGQnQ0iY/gKdqaiTAh6CR9THb8KAWm2oorWYqTR
+ // jnOvoy13nVkY0IvIhY9Nzvl8KiSFXm7rIrOy5QICAKA=
+ // -----END DH PARAMETERS-----
+ //
+
+ static const unsigned char dh1024_p[] =
+ {
+ 0xB1,0x0B,0x8F,0x96,0xA0,0x80,0xE0,0x1D,0xDE,0x92,0xDE,0x5E,
+ 0xAE,0x5D,0x54,0xEC,0x52,0xC9,0x9F,0xBC,0xFB,0x06,0xA3,0xC6,
+ 0x9A,0x6A,0x9D,0xCA,0x52,0xD2,0x3B,0x61,0x60,0x73,0xE2,0x86,
+ 0x75,0xA2,0x3D,0x18,0x98,0x38,0xEF,0x1E,0x2E,0xE6,0x52,0xC0,
+ 0x13,0xEC,0xB4,0xAE,0xA9,0x06,0x11,0x23,0x24,0x97,0x5C,0x3C,
+ 0xD4,0x9B,0x83,0xBF,0xAC,0xCB,0xDD,0x7D,0x90,0xC4,0xBD,0x70,
+ 0x98,0x48,0x8E,0x9C,0x21,0x9A,0x73,0x72,0x4E,0xFF,0xD6,0xFA,
+ 0xE5,0x64,0x47,0x38,0xFA,0xA3,0x1A,0x4F,0xF5,0x5B,0xCC,0xC0,
+ 0xA1,0x51,0xAF,0x5F,0x0D,0xC8,0xB4,0xBD,0x45,0xBF,0x37,0xDF,
+ 0x36,0x5C,0x1A,0x65,0xE6,0x8C,0xFD,0xA7,0x6D,0x4D,0xA7,0x08,
+ 0xDF,0x1F,0xB2,0xBC,0x2E,0x4A,0x43,0x71,
+ };
+
+ static const unsigned char dh1024_g[] =
+ {
+ 0xA4,0xD1,0xCB,0xD5,0xC3,0xFD,0x34,0x12,0x67,0x65,0xA4,0x42,
+ 0xEF,0xB9,0x99,0x05,0xF8,0x10,0x4D,0xD2,0x58,0xAC,0x50,0x7F,
+ 0xD6,0x40,0x6C,0xFF,0x14,0x26,0x6D,0x31,0x26,0x6F,0xEA,0x1E,
+ 0x5C,0x41,0x56,0x4B,0x77,0x7E,0x69,0x0F,0x55,0x04,0xF2,0x13,
+ 0x16,0x02,0x17,0xB4,0xB0,0x1B,0x88,0x6A,0x5E,0x91,0x54,0x7F,
+ 0x9E,0x27,0x49,0xF4,0xD7,0xFB,0xD7,0xD3,0xB9,0xA9,0x2E,0xE1,
+ 0x90,0x9D,0x0D,0x22,0x63,0xF8,0x0A,0x76,0xA6,0xA2,0x4C,0x08,
+ 0x7A,0x09,0x1F,0x53,0x1D,0xBF,0x0A,0x01,0x69,0xB6,0xA2,0x8A,
+ 0xD6,0x62,0xA4,0xD1,0x8E,0x73,0xAF,0xA3,0x2D,0x77,0x9D,0x59,
+ 0x18,0xD0,0x8B,0xC8,0x85,0x8F,0x4D,0xCE,0xF9,0x7C,0x2A,0x24,
+ 0x85,0x5E,0x6E,0xEB,0x22,0xB3,0xB2,0xE5,
+ };
+
+ DH* dh = 0;
+ if (!dhParamsFile.empty())
+ {
+ BIO* bio = BIO_new_file(dhParamsFile.c_str(), "r");
+ if (!bio)
+ {
+ std::string msg = Utility::getLastError();
+ throw SSLContextException(std::string("Error opening Diffie-Hellman parameters file ") + dhParamsFile, msg);
+ }
+ dh = PEM_read_bio_DHparams(bio, 0, 0, 0);
+ BIO_free(bio);
+ if (!dh)
+ {
+ std::string msg = Utility::getLastError();
+ throw SSLContextException(std::string("Error reading Diffie-Hellman parameters from file ") + dhParamsFile, msg);
+ }
+ }
+ else
+ {
+ dh = DH_new();
+ if (!dh)
+ {
+ std::string msg = Utility::getLastError();
+ throw SSLContextException("Error creating Diffie-Hellman parameters", msg);
+ }
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ BIGNUM* p = BN_bin2bn(dh1024_p, sizeof(dh1024_p), 0);
+ BIGNUM* g = BN_bin2bn(dh1024_g, sizeof(dh1024_g), 0);
+ DH_set0_pqg(dh, p, 0, g);
+ DH_set_length(dh, 160);
+ if (!p || !g)
+ {
+ DH_free(dh);
+ throw SSLContextException("Error creating Diffie-Hellman parameters");
+ }
+#else
+ dh->p = BN_bin2bn(dh1024_p, sizeof(dh1024_p), 0);
+ dh->g = BN_bin2bn(dh1024_g, sizeof(dh1024_g), 0);
+ dh->length = 160;
+ if ((!dh->p) || (!dh->g))
+ {
+ DH_free(dh);
+ throw SSLContextException("Error creating Diffie-Hellman parameters");
+ }
+#endif
+ }
+ SSL_CTX_set_tmp_dh(_pSSLContext, dh);
+ SSL_CTX_set_options(_pSSLContext, SSL_OP_SINGLE_DH_USE);
+ DH_free(dh);
+#else
+ if (!dhParamsFile.empty())
+ throw SSLContextException("OpenSSL does not support DH");
+#endif
+}
+
+
+void Context::initECDH(const std::string& curve)
+{
+#if OPENSSL_VERSION_NUMBER >= 0x0090800fL
+#ifndef OPENSSL_NO_ECDH
+ int nid = 0;
+ if (!curve.empty())
+ {
+ nid = OBJ_sn2nid(curve.c_str());
+ }
+ else
+ {
+ nid = OBJ_sn2nid("prime256v1");
+ }
+ if (nid == 0)
+ {
+ throw SSLContextException("Unknown ECDH curve name", curve);
+ }
+
+ EC_KEY* ecdh = EC_KEY_new_by_curve_name(nid);
+ if (!ecdh)
+ {
+ throw SSLContextException("Cannot create ECDH curve");
+ }
+ SSL_CTX_set_tmp_ecdh(_pSSLContext, ecdh);
+ SSL_CTX_set_options(_pSSLContext, SSL_OP_SINGLE_ECDH_USE);
+ EC_KEY_free(ecdh);
+#endif
+#endif
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/HTTPSClientSession.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/HTTPSClientSession.cpp
index 325f36a60a..d8ffcc17b7 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/HTTPSClientSession.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/HTTPSClientSession.cpp
@@ -1,189 +1,189 @@
-//
-// HTTPSClientSession.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: HTTPSClient
-// Module: HTTPSClientSession
-//
-// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/HTTPSClientSession.h"
-#include "Poco/Net/SecureStreamSocket.h"
-#include "Poco/Net/SecureStreamSocketImpl.h"
-#include "Poco/Net/SSLManager.h"
-#include "Poco/Net/SSLException.h"
-#include "Poco/Net/HTTPRequest.h"
-#include "Poco/Net/HTTPResponse.h"
-#include "Poco/Net/NetException.h"
-#include "Poco/NumberFormatter.h"
-
-
-using Poco::NumberFormatter;
-using Poco::IllegalStateException;
-
-
-namespace Poco {
-namespace Net {
-
-
-HTTPSClientSession::HTTPSClientSession():
- HTTPClientSession(SecureStreamSocket()),
- _pContext(SSLManager::instance().defaultClientContext())
-{
- setPort(HTTPS_PORT);
-}
-
-
-HTTPSClientSession::HTTPSClientSession(const SecureStreamSocket& socket):
- HTTPClientSession(socket),
- _pContext(socket.context())
-{
- setPort(HTTPS_PORT);
-}
-
-
-HTTPSClientSession::HTTPSClientSession(const SecureStreamSocket& socket, Session::Ptr pSession):
- HTTPClientSession(socket),
- _pContext(socket.context()),
- _pSession(pSession)
-{
- setPort(HTTPS_PORT);
-}
-
-
-HTTPSClientSession::HTTPSClientSession(const std::string& host, Poco::UInt16 port):
- HTTPClientSession(SecureStreamSocket()),
- _pContext(SSLManager::instance().defaultClientContext())
-{
- setHost(host);
- setPort(port);
-}
-
-
-HTTPSClientSession::HTTPSClientSession(Context::Ptr pContext):
- HTTPClientSession(SecureStreamSocket(pContext)),
- _pContext(pContext)
-{
-}
-
-
-HTTPSClientSession::HTTPSClientSession(Context::Ptr pContext, Session::Ptr pSession):
- HTTPClientSession(SecureStreamSocket(pContext, pSession)),
- _pContext(pContext),
- _pSession(pSession)
-{
-}
-
-
-HTTPSClientSession::HTTPSClientSession(const std::string& host, Poco::UInt16 port, Context::Ptr pContext):
- HTTPClientSession(SecureStreamSocket(pContext)),
- _pContext(pContext)
-{
- setHost(host);
- setPort(port);
-}
-
-
-HTTPSClientSession::HTTPSClientSession(const std::string& host, Poco::UInt16 port, Context::Ptr pContext, Session::Ptr pSession):
- HTTPClientSession(SecureStreamSocket(pContext, pSession)),
- _pContext(pContext),
- _pSession(pSession)
-{
- setHost(host);
- setPort(port);
-}
-
-
-HTTPSClientSession::~HTTPSClientSession()
-{
-}
-
-
-bool HTTPSClientSession::secure() const
-{
- return true;
-}
-
-
-void HTTPSClientSession::abort()
-{
- SecureStreamSocket sss(socket());
- sss.abort();
-}
-
-
-X509Certificate HTTPSClientSession::serverCertificate()
-{
- SecureStreamSocket sss(socket());
- return sss.peerCertificate();
-}
-
-
-std::string HTTPSClientSession::proxyRequestPrefix() const
-{
- return std::string();
-}
-
-
-void HTTPSClientSession::proxyAuthenticate(HTTPRequest& request)
-{
-}
-
-
-void HTTPSClientSession::connect(const SocketAddress& address)
-{
- if (getProxyHost().empty() || bypassProxy())
- {
- SecureStreamSocket sss(socket());
- if (sss.getPeerHostName().empty())
- {
- sss.setPeerHostName(getHost());
- }
- if (_pContext->sessionCacheEnabled())
- {
- sss.useSession(_pSession);
- }
- HTTPSession::connect(address);
- if (_pContext->sessionCacheEnabled())
- {
- _pSession = sss.currentSession();
- }
- }
- else
- {
- StreamSocket proxySocket(proxyConnect());
- SecureStreamSocket secureSocket = SecureStreamSocket::attach(proxySocket, getHost(), _pContext, _pSession);
- attachSocket(secureSocket);
- if (_pContext->sessionCacheEnabled())
- {
- _pSession = secureSocket.currentSession();
- }
- }
-}
-
-
-int HTTPSClientSession::read(char* buffer, std::streamsize length)
-{
- try
- {
- return HTTPSession::read(buffer, length);
+//
+// HTTPSClientSession.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: HTTPSClient
+// Module: HTTPSClientSession
+//
+// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/HTTPSClientSession.h"
+#include "Poco/Net/SecureStreamSocket.h"
+#include "Poco/Net/SecureStreamSocketImpl.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Net/SSLException.h"
+#include "Poco/Net/HTTPRequest.h"
+#include "Poco/Net/HTTPResponse.h"
+#include "Poco/Net/NetException.h"
+#include "Poco/NumberFormatter.h"
+
+
+using Poco::NumberFormatter;
+using Poco::IllegalStateException;
+
+
+namespace Poco {
+namespace Net {
+
+
+HTTPSClientSession::HTTPSClientSession():
+ HTTPClientSession(SecureStreamSocket()),
+ _pContext(SSLManager::instance().defaultClientContext())
+{
+ setPort(HTTPS_PORT);
+}
+
+
+HTTPSClientSession::HTTPSClientSession(const SecureStreamSocket& socket):
+ HTTPClientSession(socket),
+ _pContext(socket.context())
+{
+ setPort(HTTPS_PORT);
+}
+
+
+HTTPSClientSession::HTTPSClientSession(const SecureStreamSocket& socket, Session::Ptr pSession):
+ HTTPClientSession(socket),
+ _pContext(socket.context()),
+ _pSession(pSession)
+{
+ setPort(HTTPS_PORT);
+}
+
+
+HTTPSClientSession::HTTPSClientSession(const std::string& host, Poco::UInt16 port):
+ HTTPClientSession(SecureStreamSocket()),
+ _pContext(SSLManager::instance().defaultClientContext())
+{
+ setHost(host);
+ setPort(port);
+}
+
+
+HTTPSClientSession::HTTPSClientSession(Context::Ptr pContext):
+ HTTPClientSession(SecureStreamSocket(pContext)),
+ _pContext(pContext)
+{
+}
+
+
+HTTPSClientSession::HTTPSClientSession(Context::Ptr pContext, Session::Ptr pSession):
+ HTTPClientSession(SecureStreamSocket(pContext, pSession)),
+ _pContext(pContext),
+ _pSession(pSession)
+{
+}
+
+
+HTTPSClientSession::HTTPSClientSession(const std::string& host, Poco::UInt16 port, Context::Ptr pContext):
+ HTTPClientSession(SecureStreamSocket(pContext)),
+ _pContext(pContext)
+{
+ setHost(host);
+ setPort(port);
+}
+
+
+HTTPSClientSession::HTTPSClientSession(const std::string& host, Poco::UInt16 port, Context::Ptr pContext, Session::Ptr pSession):
+ HTTPClientSession(SecureStreamSocket(pContext, pSession)),
+ _pContext(pContext),
+ _pSession(pSession)
+{
+ setHost(host);
+ setPort(port);
+}
+
+
+HTTPSClientSession::~HTTPSClientSession()
+{
+}
+
+
+bool HTTPSClientSession::secure() const
+{
+ return true;
+}
+
+
+void HTTPSClientSession::abort()
+{
+ SecureStreamSocket sss(socket());
+ sss.abort();
+}
+
+
+X509Certificate HTTPSClientSession::serverCertificate()
+{
+ SecureStreamSocket sss(socket());
+ return sss.peerCertificate();
+}
+
+
+std::string HTTPSClientSession::proxyRequestPrefix() const
+{
+ return std::string();
+}
+
+
+void HTTPSClientSession::proxyAuthenticate(HTTPRequest& request)
+{
+}
+
+
+void HTTPSClientSession::connect(const SocketAddress& address)
+{
+ if (getProxyHost().empty() || bypassProxy())
+ {
+ SecureStreamSocket sss(socket());
+ if (sss.getPeerHostName().empty())
+ {
+ sss.setPeerHostName(getHost());
+ }
+ if (_pContext->sessionCacheEnabled())
+ {
+ sss.useSession(_pSession);
+ }
+ HTTPSession::connect(address);
+ if (_pContext->sessionCacheEnabled())
+ {
+ _pSession = sss.currentSession();
+ }
}
- catch(SSLConnectionUnexpectedlyClosedException&)
- {
- return 0;
- }
-}
-
-
-Session::Ptr HTTPSClientSession::sslSession()
-{
- return _pSession;
-}
-
-
-} } // namespace Poco::Net
+ else
+ {
+ StreamSocket proxySocket(proxyConnect());
+ SecureStreamSocket secureSocket = SecureStreamSocket::attach(proxySocket, getHost(), _pContext, _pSession);
+ attachSocket(secureSocket);
+ if (_pContext->sessionCacheEnabled())
+ {
+ _pSession = secureSocket.currentSession();
+ }
+ }
+}
+
+
+int HTTPSClientSession::read(char* buffer, std::streamsize length)
+{
+ try
+ {
+ return HTTPSession::read(buffer, length);
+ }
+ catch(SSLConnectionUnexpectedlyClosedException&)
+ {
+ return 0;
+ }
+}
+
+
+Session::Ptr HTTPSClientSession::sslSession()
+{
+ return _pSession;
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/HTTPSSessionInstantiator.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/HTTPSSessionInstantiator.cpp
index fb8774d654..cff887ce22 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/HTTPSSessionInstantiator.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/HTTPSSessionInstantiator.cpp
@@ -1,71 +1,71 @@
-//
-// HTTPSSessionInstantiator.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: HTTPSClient
-// Module: HTTPSSessionInstantiator
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/HTTPSSessionInstantiator.h"
-#include "Poco/Net/HTTPSessionFactory.h"
-#include "Poco/Net/HTTPSClientSession.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-HTTPSSessionInstantiator::HTTPSSessionInstantiator()
-{
-}
-
-
-HTTPSSessionInstantiator::HTTPSSessionInstantiator(Context::Ptr pContext) :
- _pContext(pContext)
-{
-}
-
-
-HTTPSSessionInstantiator::~HTTPSSessionInstantiator()
-{
-}
-
-
-HTTPClientSession* HTTPSSessionInstantiator::createClientSession(const Poco::URI& uri)
-{
- poco_assert (uri.getScheme() == "https");
- HTTPSClientSession* pSession = _pContext.isNull() ? new HTTPSClientSession(uri.getHost(), uri.getPort()) : new HTTPSClientSession(uri.getHost(), uri.getPort(), _pContext);
- if (!proxyHost().empty())
- {
- pSession->setProxy(proxyHost(), proxyPort());
- pSession->setProxyCredentials(proxyUsername(), proxyPassword());
- }
- return pSession;
-}
-
-
-void HTTPSSessionInstantiator::registerInstantiator()
-{
- HTTPSessionFactory::defaultFactory().registerProtocol("https", new HTTPSSessionInstantiator);
-}
-
-
-void HTTPSSessionInstantiator::registerInstantiator(Context::Ptr context)
-{
- HTTPSessionFactory::defaultFactory().registerProtocol("https", new HTTPSSessionInstantiator(context));
-}
-
-
-void HTTPSSessionInstantiator::unregisterInstantiator()
-{
- HTTPSessionFactory::defaultFactory().unregisterProtocol("https");
-}
-
-
-} } // namespace Poco::Net
+//
+// HTTPSSessionInstantiator.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: HTTPSClient
+// Module: HTTPSSessionInstantiator
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/HTTPSSessionInstantiator.h"
+#include "Poco/Net/HTTPSessionFactory.h"
+#include "Poco/Net/HTTPSClientSession.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+HTTPSSessionInstantiator::HTTPSSessionInstantiator()
+{
+}
+
+
+HTTPSSessionInstantiator::HTTPSSessionInstantiator(Context::Ptr pContext) :
+ _pContext(pContext)
+{
+}
+
+
+HTTPSSessionInstantiator::~HTTPSSessionInstantiator()
+{
+}
+
+
+HTTPClientSession* HTTPSSessionInstantiator::createClientSession(const Poco::URI& uri)
+{
+ poco_assert (uri.getScheme() == "https");
+ HTTPSClientSession* pSession = _pContext.isNull() ? new HTTPSClientSession(uri.getHost(), uri.getPort()) : new HTTPSClientSession(uri.getHost(), uri.getPort(), _pContext);
+ if (!proxyHost().empty())
+ {
+ pSession->setProxy(proxyHost(), proxyPort());
+ pSession->setProxyCredentials(proxyUsername(), proxyPassword());
+ }
+ return pSession;
+}
+
+
+void HTTPSSessionInstantiator::registerInstantiator()
+{
+ HTTPSessionFactory::defaultFactory().registerProtocol("https", new HTTPSSessionInstantiator);
+}
+
+
+void HTTPSSessionInstantiator::registerInstantiator(Context::Ptr context)
+{
+ HTTPSessionFactory::defaultFactory().registerProtocol("https", new HTTPSSessionInstantiator(context));
+}
+
+
+void HTTPSSessionInstantiator::unregisterInstantiator()
+{
+ HTTPSessionFactory::defaultFactory().unregisterProtocol("https");
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/HTTPSStreamFactory.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/HTTPSStreamFactory.cpp
index 6ef20e63ff..4c2e4db37c 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/HTTPSStreamFactory.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/HTTPSStreamFactory.cpp
@@ -1,194 +1,194 @@
-//
-// HTTPSStreamFactory.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: HTTPSClient
-// Module: HTTPSStreamFactory
-//
-// Copyright (c) 2006-2012, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/HTTPSStreamFactory.h"
-#include "Poco/Net/HTTPSClientSession.h"
-#include "Poco/Net/HTTPIOStream.h"
-#include "Poco/Net/HTTPRequest.h"
-#include "Poco/Net/HTTPResponse.h"
-#include "Poco/Net/HTTPCredentials.h"
-#include "Poco/Net/NetException.h"
-#include "Poco/URI.h"
-#include "Poco/URIStreamOpener.h"
-#include "Poco/UnbufferedStreamBuf.h"
-#include "Poco/NullStream.h"
-#include "Poco/StreamCopier.h"
-#include "Poco/Format.h"
-#include "Poco/Version.h"
-
-
-using Poco::URIStreamFactory;
-using Poco::URI;
-using Poco::URIStreamOpener;
-using Poco::UnbufferedStreamBuf;
-
-
-namespace Poco {
-namespace Net {
-
-
-HTTPSStreamFactory::HTTPSStreamFactory():
- _proxyPort(HTTPSession::HTTP_PORT)
-{
-}
-
-
-HTTPSStreamFactory::HTTPSStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort):
- _proxyHost(proxyHost),
- _proxyPort(proxyPort)
-{
-}
-
-
-HTTPSStreamFactory::HTTPSStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort, const std::string& proxyUsername, const std::string& proxyPassword):
- _proxyHost(proxyHost),
- _proxyPort(proxyPort),
- _proxyUsername(proxyUsername),
- _proxyPassword(proxyPassword)
-{
-}
-
-
-HTTPSStreamFactory::~HTTPSStreamFactory()
-{
-}
-
-
-std::istream* HTTPSStreamFactory::open(const URI& uri)
-{
- poco_assert (uri.getScheme() == "https" || uri.getScheme() == "http");
-
- URI resolvedURI(uri);
- URI proxyUri;
- HTTPClientSession* pSession = 0;
- HTTPResponse res;
- try
- {
- bool retry = false;
- bool authorize = false;
- int redirects = 0;
- std::string username;
- std::string password;
-
- do
- {
- if (!pSession)
- {
- if (resolvedURI.getScheme() != "http")
- pSession = new HTTPSClientSession(resolvedURI.getHost(), resolvedURI.getPort());
- else
- pSession = new HTTPClientSession(resolvedURI.getHost(), resolvedURI.getPort());
-
- if (proxyUri.empty())
- {
- if (!_proxyHost.empty())
- {
- pSession->setProxy(_proxyHost, _proxyPort);
- pSession->setProxyCredentials(_proxyUsername, _proxyPassword);
- }
- }
- else
- {
- pSession->setProxy(proxyUri.getHost(), proxyUri.getPort());
- if (!_proxyUsername.empty())
- {
- pSession->setProxyCredentials(_proxyUsername, _proxyPassword);
- }
- }
- }
- std::string path = resolvedURI.getPathAndQuery();
- if (path.empty()) path = "/";
- HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
-
- if (authorize)
- {
- HTTPCredentials::extractCredentials(uri, username, password);
- HTTPCredentials cred(username, password);
- cred.authenticate(req, res);
- }
-
- req.set("User-Agent", Poco::format("poco/%d.%d.%d",
- (POCO_VERSION >> 24) & 0xFF,
- (POCO_VERSION >> 16) & 0xFF,
- (POCO_VERSION >> 8) & 0xFF));
- req.set("Accept", "*/*");
-
- pSession->sendRequest(req);
- std::istream& rs = pSession->receiveResponse(res);
- bool moved = (res.getStatus() == HTTPResponse::HTTP_MOVED_PERMANENTLY ||
- res.getStatus() == HTTPResponse::HTTP_FOUND ||
- res.getStatus() == HTTPResponse::HTTP_SEE_OTHER ||
- res.getStatus() == HTTPResponse::HTTP_TEMPORARY_REDIRECT);
- if (moved)
- {
- resolvedURI.resolve(res.get("Location"));
- if (!username.empty())
- {
- resolvedURI.setUserInfo(username + ":" + password);
- authorize = false;
- }
- delete pSession;
- pSession = 0;
- ++redirects;
- retry = true;
- }
- else if (res.getStatus() == HTTPResponse::HTTP_OK)
- {
- return new HTTPResponseStream(rs, pSession);
- }
- else if (res.getStatus() == HTTPResponse::HTTP_USEPROXY && !retry)
- {
- // The requested resource MUST be accessed through the proxy
- // given by the Location field. The Location field gives the
- // URI of the proxy. The recipient is expected to repeat this
- // single request via the proxy. 305 responses MUST only be generated by origin servers.
- // only use for one single request!
- proxyUri.resolve(res.get("Location"));
- delete pSession;
- pSession = 0;
- retry = true; // only allow useproxy once
- }
- else if (res.getStatus() == HTTPResponse::HTTP_UNAUTHORIZED && !authorize)
- {
- authorize = true;
- retry = true;
- Poco::NullOutputStream null;
- Poco::StreamCopier::copyStream(rs, null);
- }
- else throw HTTPException(res.getReason(), uri.toString());
- }
- while (retry && redirects < MAX_REDIRECTS);
- throw HTTPException("Too many redirects", uri.toString());
- }
- catch (...)
- {
- delete pSession;
- throw;
- }
-}
-
-
-void HTTPSStreamFactory::registerFactory()
-{
- URIStreamOpener::defaultOpener().registerStreamFactory("https", new HTTPSStreamFactory);
-}
-
-
-void HTTPSStreamFactory::unregisterFactory()
-{
- URIStreamOpener::defaultOpener().unregisterStreamFactory("https");
-}
-
-
-} } // namespace Poco::Net
+//
+// HTTPSStreamFactory.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: HTTPSClient
+// Module: HTTPSStreamFactory
+//
+// Copyright (c) 2006-2012, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/HTTPSStreamFactory.h"
+#include "Poco/Net/HTTPSClientSession.h"
+#include "Poco/Net/HTTPIOStream.h"
+#include "Poco/Net/HTTPRequest.h"
+#include "Poco/Net/HTTPResponse.h"
+#include "Poco/Net/HTTPCredentials.h"
+#include "Poco/Net/NetException.h"
+#include "Poco/URI.h"
+#include "Poco/URIStreamOpener.h"
+#include "Poco/UnbufferedStreamBuf.h"
+#include "Poco/NullStream.h"
+#include "Poco/StreamCopier.h"
+#include "Poco/Format.h"
+#include "Poco/Version.h"
+
+
+using Poco::URIStreamFactory;
+using Poco::URI;
+using Poco::URIStreamOpener;
+using Poco::UnbufferedStreamBuf;
+
+
+namespace Poco {
+namespace Net {
+
+
+HTTPSStreamFactory::HTTPSStreamFactory():
+ _proxyPort(HTTPSession::HTTP_PORT)
+{
+}
+
+
+HTTPSStreamFactory::HTTPSStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort):
+ _proxyHost(proxyHost),
+ _proxyPort(proxyPort)
+{
+}
+
+
+HTTPSStreamFactory::HTTPSStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort, const std::string& proxyUsername, const std::string& proxyPassword):
+ _proxyHost(proxyHost),
+ _proxyPort(proxyPort),
+ _proxyUsername(proxyUsername),
+ _proxyPassword(proxyPassword)
+{
+}
+
+
+HTTPSStreamFactory::~HTTPSStreamFactory()
+{
+}
+
+
+std::istream* HTTPSStreamFactory::open(const URI& uri)
+{
+ poco_assert (uri.getScheme() == "https" || uri.getScheme() == "http");
+
+ URI resolvedURI(uri);
+ URI proxyUri;
+ HTTPClientSession* pSession = 0;
+ HTTPResponse res;
+ try
+ {
+ bool retry = false;
+ bool authorize = false;
+ int redirects = 0;
+ std::string username;
+ std::string password;
+
+ do
+ {
+ if (!pSession)
+ {
+ if (resolvedURI.getScheme() != "http")
+ pSession = new HTTPSClientSession(resolvedURI.getHost(), resolvedURI.getPort());
+ else
+ pSession = new HTTPClientSession(resolvedURI.getHost(), resolvedURI.getPort());
+
+ if (proxyUri.empty())
+ {
+ if (!_proxyHost.empty())
+ {
+ pSession->setProxy(_proxyHost, _proxyPort);
+ pSession->setProxyCredentials(_proxyUsername, _proxyPassword);
+ }
+ }
+ else
+ {
+ pSession->setProxy(proxyUri.getHost(), proxyUri.getPort());
+ if (!_proxyUsername.empty())
+ {
+ pSession->setProxyCredentials(_proxyUsername, _proxyPassword);
+ }
+ }
+ }
+ std::string path = resolvedURI.getPathAndQuery();
+ if (path.empty()) path = "/";
+ HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
+
+ if (authorize)
+ {
+ HTTPCredentials::extractCredentials(uri, username, password);
+ HTTPCredentials cred(username, password);
+ cred.authenticate(req, res);
+ }
+
+ req.set("User-Agent", Poco::format("poco/%d.%d.%d",
+ (POCO_VERSION >> 24) & 0xFF,
+ (POCO_VERSION >> 16) & 0xFF,
+ (POCO_VERSION >> 8) & 0xFF));
+ req.set("Accept", "*/*");
+
+ pSession->sendRequest(req);
+ std::istream& rs = pSession->receiveResponse(res);
+ bool moved = (res.getStatus() == HTTPResponse::HTTP_MOVED_PERMANENTLY ||
+ res.getStatus() == HTTPResponse::HTTP_FOUND ||
+ res.getStatus() == HTTPResponse::HTTP_SEE_OTHER ||
+ res.getStatus() == HTTPResponse::HTTP_TEMPORARY_REDIRECT);
+ if (moved)
+ {
+ resolvedURI.resolve(res.get("Location"));
+ if (!username.empty())
+ {
+ resolvedURI.setUserInfo(username + ":" + password);
+ authorize = false;
+ }
+ delete pSession;
+ pSession = 0;
+ ++redirects;
+ retry = true;
+ }
+ else if (res.getStatus() == HTTPResponse::HTTP_OK)
+ {
+ return new HTTPResponseStream(rs, pSession);
+ }
+ else if (res.getStatus() == HTTPResponse::HTTP_USEPROXY && !retry)
+ {
+ // The requested resource MUST be accessed through the proxy
+ // given by the Location field. The Location field gives the
+ // URI of the proxy. The recipient is expected to repeat this
+ // single request via the proxy. 305 responses MUST only be generated by origin servers.
+ // only use for one single request!
+ proxyUri.resolve(res.get("Location"));
+ delete pSession;
+ pSession = 0;
+ retry = true; // only allow useproxy once
+ }
+ else if (res.getStatus() == HTTPResponse::HTTP_UNAUTHORIZED && !authorize)
+ {
+ authorize = true;
+ retry = true;
+ Poco::NullOutputStream null;
+ Poco::StreamCopier::copyStream(rs, null);
+ }
+ else throw HTTPException(res.getReason(), uri.toString());
+ }
+ while (retry && redirects < MAX_REDIRECTS);
+ throw HTTPException("Too many redirects", uri.toString());
+ }
+ catch (...)
+ {
+ delete pSession;
+ throw;
+ }
+}
+
+
+void HTTPSStreamFactory::registerFactory()
+{
+ URIStreamOpener::defaultOpener().registerStreamFactory("https", new HTTPSStreamFactory);
+}
+
+
+void HTTPSStreamFactory::unregisterFactory()
+{
+ URIStreamOpener::defaultOpener().unregisterStreamFactory("https");
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/InvalidCertificateHandler.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/InvalidCertificateHandler.cpp
index 7cf68613c4..cf31c70788 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/InvalidCertificateHandler.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/InvalidCertificateHandler.cpp
@@ -1,52 +1,52 @@
-//
-// InvalidCertificateHandler.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: InvalidCertificateHandler
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/InvalidCertificateHandler.h"
-#include "Poco/Net/SSLManager.h"
-#include "Poco/Delegate.h"
-
-
-using Poco::Delegate;
-
-
-namespace Poco {
-namespace Net {
-
-
-InvalidCertificateHandler::InvalidCertificateHandler(bool handleErrorsOnServerSide): _handleErrorsOnServerSide(handleErrorsOnServerSide)
-{
- if (_handleErrorsOnServerSide)
- SSLManager::instance().ServerVerificationError += Delegate<InvalidCertificateHandler, VerificationErrorArgs>(this, &InvalidCertificateHandler::onInvalidCertificate);
- else
- SSLManager::instance().ClientVerificationError += Delegate<InvalidCertificateHandler, VerificationErrorArgs>(this, &InvalidCertificateHandler::onInvalidCertificate);
-}
-
-
-InvalidCertificateHandler::~InvalidCertificateHandler()
-{
- try
- {
- if (_handleErrorsOnServerSide)
- SSLManager::instance().ServerVerificationError -= Delegate<InvalidCertificateHandler, VerificationErrorArgs>(this, &InvalidCertificateHandler::onInvalidCertificate);
- else
- SSLManager::instance().ClientVerificationError -= Delegate<InvalidCertificateHandler, VerificationErrorArgs>(this, &InvalidCertificateHandler::onInvalidCertificate);
- }
- catch (...)
- {
- poco_unexpected();
- }
-}
-
-
-} } // namespace Poco::Net
+//
+// InvalidCertificateHandler.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: InvalidCertificateHandler
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/InvalidCertificateHandler.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Delegate.h"
+
+
+using Poco::Delegate;
+
+
+namespace Poco {
+namespace Net {
+
+
+InvalidCertificateHandler::InvalidCertificateHandler(bool handleErrorsOnServerSide): _handleErrorsOnServerSide(handleErrorsOnServerSide)
+{
+ if (_handleErrorsOnServerSide)
+ SSLManager::instance().ServerVerificationError += Delegate<InvalidCertificateHandler, VerificationErrorArgs>(this, &InvalidCertificateHandler::onInvalidCertificate);
+ else
+ SSLManager::instance().ClientVerificationError += Delegate<InvalidCertificateHandler, VerificationErrorArgs>(this, &InvalidCertificateHandler::onInvalidCertificate);
+}
+
+
+InvalidCertificateHandler::~InvalidCertificateHandler()
+{
+ try
+ {
+ if (_handleErrorsOnServerSide)
+ SSLManager::instance().ServerVerificationError -= Delegate<InvalidCertificateHandler, VerificationErrorArgs>(this, &InvalidCertificateHandler::onInvalidCertificate);
+ else
+ SSLManager::instance().ClientVerificationError -= Delegate<InvalidCertificateHandler, VerificationErrorArgs>(this, &InvalidCertificateHandler::onInvalidCertificate);
+ }
+ catch (...)
+ {
+ poco_unexpected();
+ }
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/KeyConsoleHandler.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/KeyConsoleHandler.cpp
index a0a144216e..f75e7986b5 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/KeyConsoleHandler.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/KeyConsoleHandler.cpp
@@ -1,40 +1,40 @@
-//
-// KeyConsoleHandler.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: KeyConsoleHandler
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/KeyConsoleHandler.h"
-#include <iostream>
-
-
-namespace Poco {
-namespace Net {
-
-
-KeyConsoleHandler::KeyConsoleHandler(bool server):PrivateKeyPassphraseHandler(server)
-{
-}
-
-
-KeyConsoleHandler::~KeyConsoleHandler()
-{
-}
-
-
-void KeyConsoleHandler::onPrivateKeyRequested(const void* /*pSender*/, std::string& privateKey)
-{
- std::cout << "Please enter the passphrase for the private key: ";
- std::cin >> privateKey;
-}
-
-
-} } // namespace Poco::Net
+//
+// KeyConsoleHandler.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: KeyConsoleHandler
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/KeyConsoleHandler.h"
+#include <iostream>
+
+
+namespace Poco {
+namespace Net {
+
+
+KeyConsoleHandler::KeyConsoleHandler(bool server):PrivateKeyPassphraseHandler(server)
+{
+}
+
+
+KeyConsoleHandler::~KeyConsoleHandler()
+{
+}
+
+
+void KeyConsoleHandler::onPrivateKeyRequested(const void* /*pSender*/, std::string& privateKey)
+{
+ std::cout << "Please enter the passphrase for the private key: ";
+ std::cin >> privateKey;
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/KeyFileHandler.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/KeyFileHandler.cpp
index d188b4575c..1f538987b1 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/KeyFileHandler.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/KeyFileHandler.cpp
@@ -1,61 +1,61 @@
-//
-// KeyFileHandler.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: KeyFileHandler
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/KeyFileHandler.h"
-#include "Poco/Net/SSLManager.h"
-#include "Poco/File.h"
-#include "Poco/Util/AbstractConfiguration.h"
-#include "Poco/Util/Application.h"
-#include "Poco/Util/OptionException.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-const std::string KeyFileHandler::CFG_PRIV_KEY_FILE("privateKeyPassphraseHandler.options.password");
-
-
-KeyFileHandler::KeyFileHandler(bool server):PrivateKeyPassphraseHandler(server)
-{
-}
-
-
-KeyFileHandler::~KeyFileHandler()
-{
-}
-
-
-void KeyFileHandler::onPrivateKeyRequested(const void* /*pSender*/, std::string& privateKey)
-{
- try
- {
- Poco::Util::AbstractConfiguration& config = Poco::Util::Application::instance().config();
- std::string prefix = serverSide() ? SSLManager::CFG_SERVER_PREFIX : SSLManager::CFG_CLIENT_PREFIX;
- if (!config.hasProperty(prefix + CFG_PRIV_KEY_FILE))
- throw Poco::Util::EmptyOptionException(std::string("Missing Configuration Entry: ") + prefix + CFG_PRIV_KEY_FILE);
-
- privateKey = config.getString(prefix + CFG_PRIV_KEY_FILE);
- }
- catch (Poco::NullPointerException&)
- {
- throw Poco::IllegalStateException(
- "An application configuration is required to obtain the private key passphrase, "
- "but no Poco::Util::Application instance is available."
- );
- }
-}
-
-
-} } // namespace Poco::Net
+//
+// KeyFileHandler.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: KeyFileHandler
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/KeyFileHandler.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/File.h"
+#include "Poco/Util/AbstractConfiguration.h"
+#include "Poco/Util/Application.h"
+#include "Poco/Util/OptionException.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+const std::string KeyFileHandler::CFG_PRIV_KEY_FILE("privateKeyPassphraseHandler.options.password");
+
+
+KeyFileHandler::KeyFileHandler(bool server):PrivateKeyPassphraseHandler(server)
+{
+}
+
+
+KeyFileHandler::~KeyFileHandler()
+{
+}
+
+
+void KeyFileHandler::onPrivateKeyRequested(const void* /*pSender*/, std::string& privateKey)
+{
+ try
+ {
+ Poco::Util::AbstractConfiguration& config = Poco::Util::Application::instance().config();
+ std::string prefix = serverSide() ? SSLManager::CFG_SERVER_PREFIX : SSLManager::CFG_CLIENT_PREFIX;
+ if (!config.hasProperty(prefix + CFG_PRIV_KEY_FILE))
+ throw Poco::Util::EmptyOptionException(std::string("Missing Configuration Entry: ") + prefix + CFG_PRIV_KEY_FILE);
+
+ privateKey = config.getString(prefix + CFG_PRIV_KEY_FILE);
+ }
+ catch (Poco::NullPointerException&)
+ {
+ throw Poco::IllegalStateException(
+ "An application configuration is required to obtain the private key passphrase, "
+ "but no Poco::Util::Application instance is available."
+ );
+ }
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/PrivateKeyFactory.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/PrivateKeyFactory.cpp
index 90297c351e..d3ae93cb31 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/PrivateKeyFactory.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/PrivateKeyFactory.cpp
@@ -1,44 +1,44 @@
-//
-// PrivateKeyFactory.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: PrivateKeyFactory
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/PrivateKeyFactory.h"
-#include "Poco/Net/SSLManager.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-PrivateKeyFactory::PrivateKeyFactory()
-{
-}
-
-
-PrivateKeyFactory::~PrivateKeyFactory()
-{
-}
-
-
-PrivateKeyFactoryRegistrar::PrivateKeyFactoryRegistrar(const std::string& name, PrivateKeyFactory* pFactory)
-{
- SSLManager::instance().privateKeyFactoryMgr().setFactory(name, pFactory);
-}
-
-
-PrivateKeyFactoryRegistrar::~PrivateKeyFactoryRegistrar()
-{
-}
-
-
-} } // namespace Poco::Net
+//
+// PrivateKeyFactory.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: PrivateKeyFactory
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/PrivateKeyFactory.h"
+#include "Poco/Net/SSLManager.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+PrivateKeyFactory::PrivateKeyFactory()
+{
+}
+
+
+PrivateKeyFactory::~PrivateKeyFactory()
+{
+}
+
+
+PrivateKeyFactoryRegistrar::PrivateKeyFactoryRegistrar(const std::string& name, PrivateKeyFactory* pFactory)
+{
+ SSLManager::instance().privateKeyFactoryMgr().setFactory(name, pFactory);
+}
+
+
+PrivateKeyFactoryRegistrar::~PrivateKeyFactoryRegistrar()
+{
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/PrivateKeyFactoryMgr.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/PrivateKeyFactoryMgr.cpp
index 94b4ad34ba..c3e027ce81 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/PrivateKeyFactoryMgr.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/PrivateKeyFactoryMgr.cpp
@@ -1,67 +1,67 @@
-//
-// PrivateKeyFactoryMgr.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: PrivateKeyFactoryMgr
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/PrivateKeyFactoryMgr.h"
-#include "Poco/Net/KeyFileHandler.h"
-#include "Poco/Net/KeyConsoleHandler.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-PrivateKeyFactoryMgr::PrivateKeyFactoryMgr()
-{
- setFactory("KeyFileHandler", new PrivateKeyFactoryImpl<KeyFileHandler>());
- setFactory("KeyConsoleHandler", new PrivateKeyFactoryImpl<KeyConsoleHandler>());
-}
-
-
-PrivateKeyFactoryMgr::~PrivateKeyFactoryMgr()
-{
-}
-
-
-void PrivateKeyFactoryMgr::setFactory(const std::string& name, PrivateKeyFactory* pFactory)
-{
- bool success = _factories.insert(make_pair(name, Poco::SharedPtr<PrivateKeyFactory>(pFactory))).second;
- if (!success)
- delete pFactory;
- poco_assert(success);
-}
-
-
-bool PrivateKeyFactoryMgr::hasFactory(const std::string& name) const
-{
- return _factories.find(name) != _factories.end();
-}
-
-
-const PrivateKeyFactory* PrivateKeyFactoryMgr::getFactory(const std::string& name) const
-{
- FactoriesMap::const_iterator it = _factories.find(name);
- if (it != _factories.end())
- return it->second;
- else
- return 0;
-}
-
-
-void PrivateKeyFactoryMgr::removeFactory(const std::string& name)
-{
- _factories.erase(name);
-}
-
-
-} } // namespace Poco::Net
+//
+// PrivateKeyFactoryMgr.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: PrivateKeyFactoryMgr
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/PrivateKeyFactoryMgr.h"
+#include "Poco/Net/KeyFileHandler.h"
+#include "Poco/Net/KeyConsoleHandler.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+PrivateKeyFactoryMgr::PrivateKeyFactoryMgr()
+{
+ setFactory("KeyFileHandler", new PrivateKeyFactoryImpl<KeyFileHandler>());
+ setFactory("KeyConsoleHandler", new PrivateKeyFactoryImpl<KeyConsoleHandler>());
+}
+
+
+PrivateKeyFactoryMgr::~PrivateKeyFactoryMgr()
+{
+}
+
+
+void PrivateKeyFactoryMgr::setFactory(const std::string& name, PrivateKeyFactory* pFactory)
+{
+ bool success = _factories.insert(make_pair(name, Poco::SharedPtr<PrivateKeyFactory>(pFactory))).second;
+ if (!success)
+ delete pFactory;
+ poco_assert(success);
+}
+
+
+bool PrivateKeyFactoryMgr::hasFactory(const std::string& name) const
+{
+ return _factories.find(name) != _factories.end();
+}
+
+
+const PrivateKeyFactory* PrivateKeyFactoryMgr::getFactory(const std::string& name) const
+{
+ FactoriesMap::const_iterator it = _factories.find(name);
+ if (it != _factories.end())
+ return it->second;
+ else
+ return 0;
+}
+
+
+void PrivateKeyFactoryMgr::removeFactory(const std::string& name)
+{
+ _factories.erase(name);
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/PrivateKeyPassphraseHandler.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/PrivateKeyPassphraseHandler.cpp
index 9c1386c74c..1d44e68a1e 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/PrivateKeyPassphraseHandler.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/PrivateKeyPassphraseHandler.cpp
@@ -1,46 +1,46 @@
-//
-// PrivateKeyPassphraseHandler.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: PrivateKeyPassphraseHandler
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/PrivateKeyPassphraseHandler.h"
-#include "Poco/Net/SSLManager.h"
-#include "Poco/Delegate.h"
-
-
-using Poco::Delegate;
-
-
-namespace Poco {
-namespace Net {
-
-
-PrivateKeyPassphraseHandler::PrivateKeyPassphraseHandler(bool onServerSide): _serverSide(onServerSide)
-{
- SSLManager::instance().PrivateKeyPassphraseRequired += Delegate<PrivateKeyPassphraseHandler, std::string>(this, &PrivateKeyPassphraseHandler::onPrivateKeyRequested);
-}
-
-
-PrivateKeyPassphraseHandler::~PrivateKeyPassphraseHandler()
-{
- try
- {
- SSLManager::instance().PrivateKeyPassphraseRequired -= Delegate<PrivateKeyPassphraseHandler, std::string>(this, &PrivateKeyPassphraseHandler::onPrivateKeyRequested);
- }
- catch (...)
- {
- poco_unexpected();
- }
-}
-
-
-} } // namespace Poco::Net
+//
+// PrivateKeyPassphraseHandler.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: PrivateKeyPassphraseHandler
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/PrivateKeyPassphraseHandler.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Delegate.h"
+
+
+using Poco::Delegate;
+
+
+namespace Poco {
+namespace Net {
+
+
+PrivateKeyPassphraseHandler::PrivateKeyPassphraseHandler(bool onServerSide): _serverSide(onServerSide)
+{
+ SSLManager::instance().PrivateKeyPassphraseRequired += Delegate<PrivateKeyPassphraseHandler, std::string>(this, &PrivateKeyPassphraseHandler::onPrivateKeyRequested);
+}
+
+
+PrivateKeyPassphraseHandler::~PrivateKeyPassphraseHandler()
+{
+ try
+ {
+ SSLManager::instance().PrivateKeyPassphraseRequired -= Delegate<PrivateKeyPassphraseHandler, std::string>(this, &PrivateKeyPassphraseHandler::onPrivateKeyRequested);
+ }
+ catch (...)
+ {
+ poco_unexpected();
+ }
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/RejectCertificateHandler.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/RejectCertificateHandler.cpp
index 1502a13e86..5782550b01 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/RejectCertificateHandler.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/RejectCertificateHandler.cpp
@@ -1,38 +1,38 @@
-//
-// RejectCertificateHandler.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: RejectCertificateHandler
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/RejectCertificateHandler.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-RejectCertificateHandler::RejectCertificateHandler(bool server): InvalidCertificateHandler(server)
-{
-}
-
-
-RejectCertificateHandler::~RejectCertificateHandler()
-{
-}
-
-
-void RejectCertificateHandler::onInvalidCertificate(const void*, VerificationErrorArgs& errorCert)
-{
- errorCert.setIgnoreError(false);
-}
-
-
-} } // namespace Poco::Net
+//
+// RejectCertificateHandler.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: RejectCertificateHandler
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/RejectCertificateHandler.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+RejectCertificateHandler::RejectCertificateHandler(bool server): InvalidCertificateHandler(server)
+{
+}
+
+
+RejectCertificateHandler::~RejectCertificateHandler()
+{
+}
+
+
+void RejectCertificateHandler::onInvalidCertificate(const void*, VerificationErrorArgs& errorCert)
+{
+ errorCert.setIgnoreError(false);
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/SSLException.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/SSLException.cpp
index 2b64d2a4d6..30716805d7 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/SSLException.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/SSLException.cpp
@@ -1,30 +1,30 @@
-//
-// SSLException.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: SSLException
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/SSLException.h"
-#include <typeinfo>
-
-
-namespace Poco {
-namespace Net {
-
-
-POCO_IMPLEMENT_EXCEPTION(SSLException, NetException, "SSL Exception")
-POCO_IMPLEMENT_EXCEPTION(SSLContextException, SSLException, "SSL context exception")
-POCO_IMPLEMENT_EXCEPTION(InvalidCertificateException, SSLException, "Invalid certficate")
-POCO_IMPLEMENT_EXCEPTION(CertificateValidationException, SSLException, "Certificate validation error")
-POCO_IMPLEMENT_EXCEPTION(SSLConnectionUnexpectedlyClosedException, SSLException, "SSL connection unexpectedly closed")
-
-
-} } // namespace Poco::Net
+//
+// SSLException.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: SSLException
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SSLException.h"
+#include <typeinfo>
+
+
+namespace Poco {
+namespace Net {
+
+
+POCO_IMPLEMENT_EXCEPTION(SSLException, NetException, "SSL Exception")
+POCO_IMPLEMENT_EXCEPTION(SSLContextException, SSLException, "SSL context exception")
+POCO_IMPLEMENT_EXCEPTION(InvalidCertificateException, SSLException, "Invalid certficate")
+POCO_IMPLEMENT_EXCEPTION(CertificateValidationException, SSLException, "Certificate validation error")
+POCO_IMPLEMENT_EXCEPTION(SSLConnectionUnexpectedlyClosedException, SSLException, "SSL connection unexpectedly closed")
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/SSLManager.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/SSLManager.cpp
index abb4389f26..8aeaa199e2 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/SSLManager.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/SSLManager.cpp
@@ -1,460 +1,460 @@
-//
-// SSLManager.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: SSLManager
-//
-// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/SSLManager.h"
-#include "Poco/Net/Context.h"
-#include "Poco/Net/Utility.h"
-#include "Poco/Net/PrivateKeyPassphraseHandler.h"
-#include "Poco/Net/RejectCertificateHandler.h"
-#include "Poco/Crypto/OpenSSLInitializer.h"
-#include "Poco/Net/SSLException.h"
-#include "Poco/SingletonHolder.h"
-#include "Poco/Delegate.h"
-#include "Poco/StringTokenizer.h"
-#include "Poco/Util/Application.h"
-#include "Poco/Util/OptionException.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-const std::string SSLManager::CFG_PRIV_KEY_FILE("privateKeyFile");
-const std::string SSLManager::CFG_CERTIFICATE_FILE("certificateFile");
-const std::string SSLManager::CFG_CA_LOCATION("caConfig");
-const std::string SSLManager::CFG_VER_MODE("verificationMode");
-const Context::VerificationMode SSLManager::VAL_VER_MODE(Context::VERIFY_RELAXED);
-const std::string SSLManager::CFG_VER_DEPTH("verificationDepth");
-const int SSLManager::VAL_VER_DEPTH(9);
-const std::string SSLManager::CFG_ENABLE_DEFAULT_CA("loadDefaultCAFile");
-const bool SSLManager::VAL_ENABLE_DEFAULT_CA(true);
-const std::string SSLManager::CFG_CIPHER_LIST("cipherList");
-const std::string SSLManager::CFG_CYPHER_LIST("cypherList");
-const std::string SSLManager::VAL_CIPHER_LIST("ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
-const std::string SSLManager::CFG_PREFER_SERVER_CIPHERS("preferServerCiphers");
-const std::string SSLManager::CFG_DELEGATE_HANDLER("privateKeyPassphraseHandler.name");
-const std::string SSLManager::VAL_DELEGATE_HANDLER("KeyConsoleHandler");
-const std::string SSLManager::CFG_CERTIFICATE_HANDLER("invalidCertificateHandler.name");
-const std::string SSLManager::VAL_CERTIFICATE_HANDLER("ConsoleCertificateHandler");
-const std::string SSLManager::CFG_SERVER_PREFIX("openSSL.server.");
-const std::string SSLManager::CFG_CLIENT_PREFIX("openSSL.client.");
-const std::string SSLManager::CFG_CACHE_SESSIONS("cacheSessions");
-const std::string SSLManager::CFG_SESSION_ID_CONTEXT("sessionIdContext");
-const std::string SSLManager::CFG_SESSION_CACHE_SIZE("sessionCacheSize");
-const std::string SSLManager::CFG_SESSION_TIMEOUT("sessionTimeout");
-const std::string SSLManager::CFG_EXTENDED_VERIFICATION("extendedVerification");
-const std::string SSLManager::CFG_REQUIRE_TLSV1("requireTLSv1");
-const std::string SSLManager::CFG_REQUIRE_TLSV1_1("requireTLSv1_1");
-const std::string SSLManager::CFG_REQUIRE_TLSV1_2("requireTLSv1_2");
-const std::string SSLManager::CFG_DISABLE_PROTOCOLS("disableProtocols");
-const std::string SSLManager::CFG_DH_PARAMS_FILE("dhParamsFile");
-const std::string SSLManager::CFG_ECDH_CURVE("ecdhCurve");
-#ifdef OPENSSL_FIPS
-const std::string SSLManager::CFG_FIPS_MODE("openSSL.fips");
-const bool SSLManager::VAL_FIPS_MODE(false);
-#endif
-
-
-SSLManager::SSLManager()
-{
-}
-
-
-SSLManager::~SSLManager()
-{
- try
- {
- shutdown();
- }
- catch (...)
- {
- poco_unexpected();
- }
-}
-
-
-void SSLManager::shutdown()
-{
- PrivateKeyPassphraseRequired.clear();
- ClientVerificationError.clear();
- ServerVerificationError.clear();
- _ptrDefaultServerContext = 0;
- _ptrDefaultClientContext = 0;
-}
-
-
-namespace
-{
- static Poco::SingletonHolder<SSLManager> singleton;
-}
-
-
-SSLManager& SSLManager::instance()
-{
- return *singleton.get();
-}
-
-
-void SSLManager::initializeServer(PrivateKeyPassphraseHandlerPtr ptrPassphraseHandler, InvalidCertificateHandlerPtr ptrHandler, Context::Ptr ptrContext)
-{
- _ptrServerPassphraseHandler = ptrPassphraseHandler;
- _ptrServerCertificateHandler = ptrHandler;
- _ptrDefaultServerContext = ptrContext;
-}
-
-
-void SSLManager::initializeClient(PrivateKeyPassphraseHandlerPtr ptrPassphraseHandler, InvalidCertificateHandlerPtr ptrHandler, Context::Ptr ptrContext)
-{
- _ptrClientPassphraseHandler = ptrPassphraseHandler;
- _ptrClientCertificateHandler = ptrHandler;
- _ptrDefaultClientContext = ptrContext;
-}
-
-
-Context::Ptr SSLManager::defaultServerContext()
-{
- Poco::FastMutex::ScopedLock lock(_mutex);
-
- if (!_ptrDefaultServerContext)
- initDefaultContext(true);
-
- return _ptrDefaultServerContext;
-}
-
-
-Context::Ptr SSLManager::defaultClientContext()
-{
- Poco::FastMutex::ScopedLock lock(_mutex);
-
- if (!_ptrDefaultClientContext)
- {
- try
- {
- initDefaultContext(false);
- }
- catch (Poco::IllegalStateException&)
- {
- _ptrClientCertificateHandler = new RejectCertificateHandler(false);
- _ptrDefaultClientContext = new Context(Context::CLIENT_USE, "", Context::VERIFY_RELAXED, 9, true);
- _ptrDefaultClientContext->disableProtocols(Context::PROTO_SSLV2 | Context::PROTO_SSLV3);
- }
- }
-
- return _ptrDefaultClientContext;
-}
-
-
-SSLManager::PrivateKeyPassphraseHandlerPtr SSLManager::serverPassphraseHandler()
-{
- Poco::FastMutex::ScopedLock lock(_mutex);
-
- if (!_ptrServerPassphraseHandler)
- initPassphraseHandler(true);
-
- return _ptrServerPassphraseHandler;
-}
-
-
-SSLManager::PrivateKeyPassphraseHandlerPtr SSLManager::clientPassphraseHandler()
-{
- Poco::FastMutex::ScopedLock lock(_mutex);
-
- if (!_ptrClientPassphraseHandler)
- initPassphraseHandler(false);
-
- return _ptrClientPassphraseHandler;
-}
-
-
-SSLManager::InvalidCertificateHandlerPtr SSLManager::serverCertificateHandler()
-{
- Poco::FastMutex::ScopedLock lock(_mutex);
-
- if (!_ptrServerCertificateHandler)
- initCertificateHandler(true);
-
- return _ptrServerCertificateHandler;
-}
-
-
-SSLManager::InvalidCertificateHandlerPtr SSLManager::clientCertificateHandler()
-{
- Poco::FastMutex::ScopedLock lock(_mutex);
-
- if (!_ptrClientCertificateHandler)
- initCertificateHandler(false);
-
- return _ptrClientCertificateHandler;
-}
-
-
-int SSLManager::verifyCallback(bool server, int ok, X509_STORE_CTX* pStore)
-{
- if (!ok)
- {
- X509* pCert = X509_STORE_CTX_get_current_cert(pStore);
- X509Certificate x509(pCert, true);
- int depth = X509_STORE_CTX_get_error_depth(pStore);
- int err = X509_STORE_CTX_get_error(pStore);
- std::string error(X509_verify_cert_error_string(err));
- VerificationErrorArgs args(x509, depth, err, error);
- if (server)
- SSLManager::instance().ServerVerificationError.notify(&SSLManager::instance(), args);
- else
- SSLManager::instance().ClientVerificationError.notify(&SSLManager::instance(), args);
- ok = args.getIgnoreError() ? 1 : 0;
- }
-
- return ok;
-}
-
-
-int SSLManager::privateKeyPassphraseCallback(char* pBuf, int size, int /*flag*/, void* /*userData*/)
-{
- std::string pwd;
- SSLManager::instance().PrivateKeyPassphraseRequired.notify(&SSLManager::instance(), pwd);
-
- strncpy(pBuf, (char *)(pwd.c_str()), size);
- pBuf[size - 1] = '\0';
- if (size > pwd.length())
- size = (int) pwd.length();
-
- return size;
-}
-
-
-void SSLManager::initDefaultContext(bool server)
-{
- if (server && _ptrDefaultServerContext) return;
- if (!server && _ptrDefaultClientContext) return;
-
- Poco::Crypto::OpenSSLInitializer openSSLInitializer;
- initEvents(server);
- Poco::Util::AbstractConfiguration& config = appConfig();
-
-#ifdef OPENSSL_FIPS
- bool fipsEnabled = config.getBool(CFG_FIPS_MODE, VAL_FIPS_MODE);
- if (fipsEnabled && !Poco::Crypto::OpenSSLInitializer::isFIPSEnabled())
- {
- Poco::Crypto::OpenSSLInitializer::enableFIPSMode(true);
- }
-#endif
-
- std::string prefix = server ? CFG_SERVER_PREFIX : CFG_CLIENT_PREFIX;
-
- Context::Params params;
- // mandatory options
- params.privateKeyFile = config.getString(prefix + CFG_PRIV_KEY_FILE, "");
- params.certificateFile = config.getString(prefix + CFG_CERTIFICATE_FILE, params.privateKeyFile);
- params.caLocation = config.getString(prefix + CFG_CA_LOCATION, "");
-
- if (server && params.certificateFile.empty() && params.privateKeyFile.empty())
- throw SSLException("Configuration error: no certificate file has been specified");
-
- // optional options for which we have defaults defined
- params.verificationMode = VAL_VER_MODE;
- if (config.hasProperty(prefix + CFG_VER_MODE))
- {
- // either: none, relaxed, strict, once
- std::string mode = config.getString(prefix + CFG_VER_MODE);
- params.verificationMode = Utility::convertVerificationMode(mode);
- }
-
- params.verificationDepth = config.getInt(prefix + CFG_VER_DEPTH, VAL_VER_DEPTH);
- params.loadDefaultCAs = config.getBool(prefix + CFG_ENABLE_DEFAULT_CA, VAL_ENABLE_DEFAULT_CA);
- params.cipherList = config.getString(prefix + CFG_CIPHER_LIST, VAL_CIPHER_LIST);
- params.cipherList = config.getString(prefix + CFG_CYPHER_LIST, params.cipherList); // for backwards compatibility
- bool requireTLSv1 = config.getBool(prefix + CFG_REQUIRE_TLSV1, false);
- bool requireTLSv1_1 = config.getBool(prefix + CFG_REQUIRE_TLSV1_1, false);
- bool requireTLSv1_2 = config.getBool(prefix + CFG_REQUIRE_TLSV1_2, false);
-
- params.dhParamsFile = config.getString(prefix + CFG_DH_PARAMS_FILE, "");
- params.ecdhCurve = config.getString(prefix + CFG_ECDH_CURVE, "");
-
- Context::Usage usage;
-
- if (server)
- {
- if (requireTLSv1_2)
- usage = Context::TLSV1_2_SERVER_USE;
- else if (requireTLSv1_1)
- usage = Context::TLSV1_1_SERVER_USE;
- else if (requireTLSv1)
- usage = Context::TLSV1_SERVER_USE;
- else
- usage = Context::SERVER_USE;
- _ptrDefaultServerContext = new Context(usage, params);
- }
- else
- {
- if (requireTLSv1_2)
- usage = Context::TLSV1_2_CLIENT_USE;
- else if (requireTLSv1_1)
- usage = Context::TLSV1_1_CLIENT_USE;
- else if (requireTLSv1)
- usage = Context::TLSV1_CLIENT_USE;
- else
- usage = Context::CLIENT_USE;
- _ptrDefaultClientContext = new Context(usage, params);
- }
-
- std::string disabledProtocolsList = config.getString(prefix + CFG_DISABLE_PROTOCOLS, "");
- Poco::StringTokenizer dpTok(disabledProtocolsList, ";,", Poco::StringTokenizer::TOK_TRIM | Poco::StringTokenizer::TOK_IGNORE_EMPTY);
- int disabledProtocols = 0;
- for (Poco::StringTokenizer::Iterator it = dpTok.begin(); it != dpTok.end(); ++it)
- {
- if (*it == "sslv2")
- disabledProtocols |= Context::PROTO_SSLV2;
- else if (*it == "sslv3")
- disabledProtocols |= Context::PROTO_SSLV3;
- else if (*it == "tlsv1")
- disabledProtocols |= Context::PROTO_TLSV1;
- else if (*it == "tlsv1_1")
- disabledProtocols |= Context::PROTO_TLSV1_1;
- else if (*it == "tlsv1_2")
- disabledProtocols |= Context::PROTO_TLSV1_2;
- }
- if (server)
- _ptrDefaultServerContext->disableProtocols(disabledProtocols);
- else
- _ptrDefaultClientContext->disableProtocols(disabledProtocols);
-
- bool cacheSessions = config.getBool(prefix + CFG_CACHE_SESSIONS, false);
- if (server)
- {
- std::string sessionIdContext = config.getString(prefix + CFG_SESSION_ID_CONTEXT, config.getString("application.name", ""));
- _ptrDefaultServerContext->enableSessionCache(cacheSessions, sessionIdContext);
- if (config.hasProperty(prefix + CFG_SESSION_CACHE_SIZE))
- {
- int cacheSize = config.getInt(prefix + CFG_SESSION_CACHE_SIZE);
- _ptrDefaultServerContext->setSessionCacheSize(cacheSize);
- }
- if (config.hasProperty(prefix + CFG_SESSION_TIMEOUT))
- {
- int timeout = config.getInt(prefix + CFG_SESSION_TIMEOUT);
- _ptrDefaultServerContext->setSessionTimeout(timeout);
- }
- }
- else
- {
- _ptrDefaultClientContext->enableSessionCache(cacheSessions);
- }
- bool extendedVerification = config.getBool(prefix + CFG_EXTENDED_VERIFICATION, false);
- if (server)
- _ptrDefaultServerContext->enableExtendedCertificateVerification(extendedVerification);
- else
- _ptrDefaultClientContext->enableExtendedCertificateVerification(extendedVerification);
-
- bool preferServerCiphers = config.getBool(prefix + CFG_PREFER_SERVER_CIPHERS, false);
- if (preferServerCiphers)
- {
- if (server)
- _ptrDefaultServerContext->preferServerCiphers();
- else
- _ptrDefaultClientContext->preferServerCiphers();
- }
-}
-
-
-void SSLManager::initEvents(bool server)
-{
- initPassphraseHandler(server);
- initCertificateHandler(server);
-}
-
-
-void SSLManager::initPassphraseHandler(bool server)
-{
- if (server && _ptrServerPassphraseHandler) return;
- if (!server && _ptrClientPassphraseHandler) return;
-
- std::string prefix = server ? CFG_SERVER_PREFIX : CFG_CLIENT_PREFIX;
- Poco::Util::AbstractConfiguration& config = appConfig();
-
- std::string className(config.getString(prefix + CFG_DELEGATE_HANDLER, VAL_DELEGATE_HANDLER));
-
- const PrivateKeyFactory* pFactory = 0;
- if (privateKeyFactoryMgr().hasFactory(className))
- {
- pFactory = privateKeyFactoryMgr().getFactory(className);
- }
-
- if (pFactory)
- {
- if (server)
- _ptrServerPassphraseHandler = pFactory->create(server);
- else
- _ptrClientPassphraseHandler = pFactory->create(server);
- }
- else throw Poco::Util::UnknownOptionException(std::string("No passphrase handler known with the name ") + className);
-}
-
-
-void SSLManager::initCertificateHandler(bool server)
-{
- if (server && _ptrServerCertificateHandler) return;
- if (!server && _ptrClientCertificateHandler) return;
-
- std::string prefix = server ? CFG_SERVER_PREFIX : CFG_CLIENT_PREFIX;
- Poco::Util::AbstractConfiguration& config = appConfig();
-
- std::string className(config.getString(prefix+CFG_CERTIFICATE_HANDLER, VAL_CERTIFICATE_HANDLER));
-
- const CertificateHandlerFactory* pFactory = 0;
- if (certificateHandlerFactoryMgr().hasFactory(className))
- {
- pFactory = certificateHandlerFactoryMgr().getFactory(className);
- }
-
- if (pFactory)
- {
- if (server)
- _ptrServerCertificateHandler = pFactory->create(true);
- else
- _ptrClientCertificateHandler = pFactory->create(false);
- }
- else throw Poco::Util::UnknownOptionException(std::string("No InvalidCertificate handler known with the name ") + className);
-}
-
-
-Poco::Util::AbstractConfiguration& SSLManager::appConfig()
-{
- try
- {
- return Poco::Util::Application::instance().config();
- }
- catch (Poco::NullPointerException&)
- {
- throw Poco::IllegalStateException(
- "An application configuration is required to initialize the Poco::Net::SSLManager, "
- "but no Poco::Util::Application instance is available."
- );
- }
-}
-
-
-void initializeSSL()
-{
- Poco::Crypto::initializeCrypto();
-}
-
-
-void uninitializeSSL()
-{
- SSLManager::instance().shutdown();
- Poco::Crypto::uninitializeCrypto();
-}
-
-
-} } // namespace Poco::Net
+//
+// SSLManager.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: SSLManager
+//
+// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Net/Context.h"
+#include "Poco/Net/Utility.h"
+#include "Poco/Net/PrivateKeyPassphraseHandler.h"
+#include "Poco/Net/RejectCertificateHandler.h"
+#include "Poco/Crypto/OpenSSLInitializer.h"
+#include "Poco/Net/SSLException.h"
+#include "Poco/SingletonHolder.h"
+#include "Poco/Delegate.h"
+#include "Poco/StringTokenizer.h"
+#include "Poco/Util/Application.h"
+#include "Poco/Util/OptionException.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+const std::string SSLManager::CFG_PRIV_KEY_FILE("privateKeyFile");
+const std::string SSLManager::CFG_CERTIFICATE_FILE("certificateFile");
+const std::string SSLManager::CFG_CA_LOCATION("caConfig");
+const std::string SSLManager::CFG_VER_MODE("verificationMode");
+const Context::VerificationMode SSLManager::VAL_VER_MODE(Context::VERIFY_RELAXED);
+const std::string SSLManager::CFG_VER_DEPTH("verificationDepth");
+const int SSLManager::VAL_VER_DEPTH(9);
+const std::string SSLManager::CFG_ENABLE_DEFAULT_CA("loadDefaultCAFile");
+const bool SSLManager::VAL_ENABLE_DEFAULT_CA(true);
+const std::string SSLManager::CFG_CIPHER_LIST("cipherList");
+const std::string SSLManager::CFG_CYPHER_LIST("cypherList");
+const std::string SSLManager::VAL_CIPHER_LIST("ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
+const std::string SSLManager::CFG_PREFER_SERVER_CIPHERS("preferServerCiphers");
+const std::string SSLManager::CFG_DELEGATE_HANDLER("privateKeyPassphraseHandler.name");
+const std::string SSLManager::VAL_DELEGATE_HANDLER("KeyConsoleHandler");
+const std::string SSLManager::CFG_CERTIFICATE_HANDLER("invalidCertificateHandler.name");
+const std::string SSLManager::VAL_CERTIFICATE_HANDLER("ConsoleCertificateHandler");
+const std::string SSLManager::CFG_SERVER_PREFIX("openSSL.server.");
+const std::string SSLManager::CFG_CLIENT_PREFIX("openSSL.client.");
+const std::string SSLManager::CFG_CACHE_SESSIONS("cacheSessions");
+const std::string SSLManager::CFG_SESSION_ID_CONTEXT("sessionIdContext");
+const std::string SSLManager::CFG_SESSION_CACHE_SIZE("sessionCacheSize");
+const std::string SSLManager::CFG_SESSION_TIMEOUT("sessionTimeout");
+const std::string SSLManager::CFG_EXTENDED_VERIFICATION("extendedVerification");
+const std::string SSLManager::CFG_REQUIRE_TLSV1("requireTLSv1");
+const std::string SSLManager::CFG_REQUIRE_TLSV1_1("requireTLSv1_1");
+const std::string SSLManager::CFG_REQUIRE_TLSV1_2("requireTLSv1_2");
+const std::string SSLManager::CFG_DISABLE_PROTOCOLS("disableProtocols");
+const std::string SSLManager::CFG_DH_PARAMS_FILE("dhParamsFile");
+const std::string SSLManager::CFG_ECDH_CURVE("ecdhCurve");
+#ifdef OPENSSL_FIPS
+const std::string SSLManager::CFG_FIPS_MODE("openSSL.fips");
+const bool SSLManager::VAL_FIPS_MODE(false);
+#endif
+
+
+SSLManager::SSLManager()
+{
+}
+
+
+SSLManager::~SSLManager()
+{
+ try
+ {
+ shutdown();
+ }
+ catch (...)
+ {
+ poco_unexpected();
+ }
+}
+
+
+void SSLManager::shutdown()
+{
+ PrivateKeyPassphraseRequired.clear();
+ ClientVerificationError.clear();
+ ServerVerificationError.clear();
+ _ptrDefaultServerContext = 0;
+ _ptrDefaultClientContext = 0;
+}
+
+
+namespace
+{
+ static Poco::SingletonHolder<SSLManager> singleton;
+}
+
+
+SSLManager& SSLManager::instance()
+{
+ return *singleton.get();
+}
+
+
+void SSLManager::initializeServer(PrivateKeyPassphraseHandlerPtr ptrPassphraseHandler, InvalidCertificateHandlerPtr ptrHandler, Context::Ptr ptrContext)
+{
+ _ptrServerPassphraseHandler = ptrPassphraseHandler;
+ _ptrServerCertificateHandler = ptrHandler;
+ _ptrDefaultServerContext = ptrContext;
+}
+
+
+void SSLManager::initializeClient(PrivateKeyPassphraseHandlerPtr ptrPassphraseHandler, InvalidCertificateHandlerPtr ptrHandler, Context::Ptr ptrContext)
+{
+ _ptrClientPassphraseHandler = ptrPassphraseHandler;
+ _ptrClientCertificateHandler = ptrHandler;
+ _ptrDefaultClientContext = ptrContext;
+}
+
+
+Context::Ptr SSLManager::defaultServerContext()
+{
+ Poco::FastMutex::ScopedLock lock(_mutex);
+
+ if (!_ptrDefaultServerContext)
+ initDefaultContext(true);
+
+ return _ptrDefaultServerContext;
+}
+
+
+Context::Ptr SSLManager::defaultClientContext()
+{
+ Poco::FastMutex::ScopedLock lock(_mutex);
+
+ if (!_ptrDefaultClientContext)
+ {
+ try
+ {
+ initDefaultContext(false);
+ }
+ catch (Poco::IllegalStateException&)
+ {
+ _ptrClientCertificateHandler = new RejectCertificateHandler(false);
+ _ptrDefaultClientContext = new Context(Context::CLIENT_USE, "", Context::VERIFY_RELAXED, 9, true);
+ _ptrDefaultClientContext->disableProtocols(Context::PROTO_SSLV2 | Context::PROTO_SSLV3);
+ }
+ }
+
+ return _ptrDefaultClientContext;
+}
+
+
+SSLManager::PrivateKeyPassphraseHandlerPtr SSLManager::serverPassphraseHandler()
+{
+ Poco::FastMutex::ScopedLock lock(_mutex);
+
+ if (!_ptrServerPassphraseHandler)
+ initPassphraseHandler(true);
+
+ return _ptrServerPassphraseHandler;
+}
+
+
+SSLManager::PrivateKeyPassphraseHandlerPtr SSLManager::clientPassphraseHandler()
+{
+ Poco::FastMutex::ScopedLock lock(_mutex);
+
+ if (!_ptrClientPassphraseHandler)
+ initPassphraseHandler(false);
+
+ return _ptrClientPassphraseHandler;
+}
+
+
+SSLManager::InvalidCertificateHandlerPtr SSLManager::serverCertificateHandler()
+{
+ Poco::FastMutex::ScopedLock lock(_mutex);
+
+ if (!_ptrServerCertificateHandler)
+ initCertificateHandler(true);
+
+ return _ptrServerCertificateHandler;
+}
+
+
+SSLManager::InvalidCertificateHandlerPtr SSLManager::clientCertificateHandler()
+{
+ Poco::FastMutex::ScopedLock lock(_mutex);
+
+ if (!_ptrClientCertificateHandler)
+ initCertificateHandler(false);
+
+ return _ptrClientCertificateHandler;
+}
+
+
+int SSLManager::verifyCallback(bool server, int ok, X509_STORE_CTX* pStore)
+{
+ if (!ok)
+ {
+ X509* pCert = X509_STORE_CTX_get_current_cert(pStore);
+ X509Certificate x509(pCert, true);
+ int depth = X509_STORE_CTX_get_error_depth(pStore);
+ int err = X509_STORE_CTX_get_error(pStore);
+ std::string error(X509_verify_cert_error_string(err));
+ VerificationErrorArgs args(x509, depth, err, error);
+ if (server)
+ SSLManager::instance().ServerVerificationError.notify(&SSLManager::instance(), args);
+ else
+ SSLManager::instance().ClientVerificationError.notify(&SSLManager::instance(), args);
+ ok = args.getIgnoreError() ? 1 : 0;
+ }
+
+ return ok;
+}
+
+
+int SSLManager::privateKeyPassphraseCallback(char* pBuf, int size, int /*flag*/, void* /*userData*/)
+{
+ std::string pwd;
+ SSLManager::instance().PrivateKeyPassphraseRequired.notify(&SSLManager::instance(), pwd);
+
+ strncpy(pBuf, (char *)(pwd.c_str()), size);
+ pBuf[size - 1] = '\0';
+ if (size > pwd.length())
+ size = (int) pwd.length();
+
+ return size;
+}
+
+
+void SSLManager::initDefaultContext(bool server)
+{
+ if (server && _ptrDefaultServerContext) return;
+ if (!server && _ptrDefaultClientContext) return;
+
+ Poco::Crypto::OpenSSLInitializer openSSLInitializer;
+ initEvents(server);
+ Poco::Util::AbstractConfiguration& config = appConfig();
+
+#ifdef OPENSSL_FIPS
+ bool fipsEnabled = config.getBool(CFG_FIPS_MODE, VAL_FIPS_MODE);
+ if (fipsEnabled && !Poco::Crypto::OpenSSLInitializer::isFIPSEnabled())
+ {
+ Poco::Crypto::OpenSSLInitializer::enableFIPSMode(true);
+ }
+#endif
+
+ std::string prefix = server ? CFG_SERVER_PREFIX : CFG_CLIENT_PREFIX;
+
+ Context::Params params;
+ // mandatory options
+ params.privateKeyFile = config.getString(prefix + CFG_PRIV_KEY_FILE, "");
+ params.certificateFile = config.getString(prefix + CFG_CERTIFICATE_FILE, params.privateKeyFile);
+ params.caLocation = config.getString(prefix + CFG_CA_LOCATION, "");
+
+ if (server && params.certificateFile.empty() && params.privateKeyFile.empty())
+ throw SSLException("Configuration error: no certificate file has been specified");
+
+ // optional options for which we have defaults defined
+ params.verificationMode = VAL_VER_MODE;
+ if (config.hasProperty(prefix + CFG_VER_MODE))
+ {
+ // either: none, relaxed, strict, once
+ std::string mode = config.getString(prefix + CFG_VER_MODE);
+ params.verificationMode = Utility::convertVerificationMode(mode);
+ }
+
+ params.verificationDepth = config.getInt(prefix + CFG_VER_DEPTH, VAL_VER_DEPTH);
+ params.loadDefaultCAs = config.getBool(prefix + CFG_ENABLE_DEFAULT_CA, VAL_ENABLE_DEFAULT_CA);
+ params.cipherList = config.getString(prefix + CFG_CIPHER_LIST, VAL_CIPHER_LIST);
+ params.cipherList = config.getString(prefix + CFG_CYPHER_LIST, params.cipherList); // for backwards compatibility
+ bool requireTLSv1 = config.getBool(prefix + CFG_REQUIRE_TLSV1, false);
+ bool requireTLSv1_1 = config.getBool(prefix + CFG_REQUIRE_TLSV1_1, false);
+ bool requireTLSv1_2 = config.getBool(prefix + CFG_REQUIRE_TLSV1_2, false);
+
+ params.dhParamsFile = config.getString(prefix + CFG_DH_PARAMS_FILE, "");
+ params.ecdhCurve = config.getString(prefix + CFG_ECDH_CURVE, "");
+
+ Context::Usage usage;
+
+ if (server)
+ {
+ if (requireTLSv1_2)
+ usage = Context::TLSV1_2_SERVER_USE;
+ else if (requireTLSv1_1)
+ usage = Context::TLSV1_1_SERVER_USE;
+ else if (requireTLSv1)
+ usage = Context::TLSV1_SERVER_USE;
+ else
+ usage = Context::SERVER_USE;
+ _ptrDefaultServerContext = new Context(usage, params);
+ }
+ else
+ {
+ if (requireTLSv1_2)
+ usage = Context::TLSV1_2_CLIENT_USE;
+ else if (requireTLSv1_1)
+ usage = Context::TLSV1_1_CLIENT_USE;
+ else if (requireTLSv1)
+ usage = Context::TLSV1_CLIENT_USE;
+ else
+ usage = Context::CLIENT_USE;
+ _ptrDefaultClientContext = new Context(usage, params);
+ }
+
+ std::string disabledProtocolsList = config.getString(prefix + CFG_DISABLE_PROTOCOLS, "");
+ Poco::StringTokenizer dpTok(disabledProtocolsList, ";,", Poco::StringTokenizer::TOK_TRIM | Poco::StringTokenizer::TOK_IGNORE_EMPTY);
+ int disabledProtocols = 0;
+ for (Poco::StringTokenizer::Iterator it = dpTok.begin(); it != dpTok.end(); ++it)
+ {
+ if (*it == "sslv2")
+ disabledProtocols |= Context::PROTO_SSLV2;
+ else if (*it == "sslv3")
+ disabledProtocols |= Context::PROTO_SSLV3;
+ else if (*it == "tlsv1")
+ disabledProtocols |= Context::PROTO_TLSV1;
+ else if (*it == "tlsv1_1")
+ disabledProtocols |= Context::PROTO_TLSV1_1;
+ else if (*it == "tlsv1_2")
+ disabledProtocols |= Context::PROTO_TLSV1_2;
+ }
+ if (server)
+ _ptrDefaultServerContext->disableProtocols(disabledProtocols);
+ else
+ _ptrDefaultClientContext->disableProtocols(disabledProtocols);
+
+ bool cacheSessions = config.getBool(prefix + CFG_CACHE_SESSIONS, false);
+ if (server)
+ {
+ std::string sessionIdContext = config.getString(prefix + CFG_SESSION_ID_CONTEXT, config.getString("application.name", ""));
+ _ptrDefaultServerContext->enableSessionCache(cacheSessions, sessionIdContext);
+ if (config.hasProperty(prefix + CFG_SESSION_CACHE_SIZE))
+ {
+ int cacheSize = config.getInt(prefix + CFG_SESSION_CACHE_SIZE);
+ _ptrDefaultServerContext->setSessionCacheSize(cacheSize);
+ }
+ if (config.hasProperty(prefix + CFG_SESSION_TIMEOUT))
+ {
+ int timeout = config.getInt(prefix + CFG_SESSION_TIMEOUT);
+ _ptrDefaultServerContext->setSessionTimeout(timeout);
+ }
+ }
+ else
+ {
+ _ptrDefaultClientContext->enableSessionCache(cacheSessions);
+ }
+ bool extendedVerification = config.getBool(prefix + CFG_EXTENDED_VERIFICATION, false);
+ if (server)
+ _ptrDefaultServerContext->enableExtendedCertificateVerification(extendedVerification);
+ else
+ _ptrDefaultClientContext->enableExtendedCertificateVerification(extendedVerification);
+
+ bool preferServerCiphers = config.getBool(prefix + CFG_PREFER_SERVER_CIPHERS, false);
+ if (preferServerCiphers)
+ {
+ if (server)
+ _ptrDefaultServerContext->preferServerCiphers();
+ else
+ _ptrDefaultClientContext->preferServerCiphers();
+ }
+}
+
+
+void SSLManager::initEvents(bool server)
+{
+ initPassphraseHandler(server);
+ initCertificateHandler(server);
+}
+
+
+void SSLManager::initPassphraseHandler(bool server)
+{
+ if (server && _ptrServerPassphraseHandler) return;
+ if (!server && _ptrClientPassphraseHandler) return;
+
+ std::string prefix = server ? CFG_SERVER_PREFIX : CFG_CLIENT_PREFIX;
+ Poco::Util::AbstractConfiguration& config = appConfig();
+
+ std::string className(config.getString(prefix + CFG_DELEGATE_HANDLER, VAL_DELEGATE_HANDLER));
+
+ const PrivateKeyFactory* pFactory = 0;
+ if (privateKeyFactoryMgr().hasFactory(className))
+ {
+ pFactory = privateKeyFactoryMgr().getFactory(className);
+ }
+
+ if (pFactory)
+ {
+ if (server)
+ _ptrServerPassphraseHandler = pFactory->create(server);
+ else
+ _ptrClientPassphraseHandler = pFactory->create(server);
+ }
+ else throw Poco::Util::UnknownOptionException(std::string("No passphrase handler known with the name ") + className);
+}
+
+
+void SSLManager::initCertificateHandler(bool server)
+{
+ if (server && _ptrServerCertificateHandler) return;
+ if (!server && _ptrClientCertificateHandler) return;
+
+ std::string prefix = server ? CFG_SERVER_PREFIX : CFG_CLIENT_PREFIX;
+ Poco::Util::AbstractConfiguration& config = appConfig();
+
+ std::string className(config.getString(prefix+CFG_CERTIFICATE_HANDLER, VAL_CERTIFICATE_HANDLER));
+
+ const CertificateHandlerFactory* pFactory = 0;
+ if (certificateHandlerFactoryMgr().hasFactory(className))
+ {
+ pFactory = certificateHandlerFactoryMgr().getFactory(className);
+ }
+
+ if (pFactory)
+ {
+ if (server)
+ _ptrServerCertificateHandler = pFactory->create(true);
+ else
+ _ptrClientCertificateHandler = pFactory->create(false);
+ }
+ else throw Poco::Util::UnknownOptionException(std::string("No InvalidCertificate handler known with the name ") + className);
+}
+
+
+Poco::Util::AbstractConfiguration& SSLManager::appConfig()
+{
+ try
+ {
+ return Poco::Util::Application::instance().config();
+ }
+ catch (Poco::NullPointerException&)
+ {
+ throw Poco::IllegalStateException(
+ "An application configuration is required to initialize the Poco::Net::SSLManager, "
+ "but no Poco::Util::Application instance is available."
+ );
+ }
+}
+
+
+void initializeSSL()
+{
+ Poco::Crypto::initializeCrypto();
+}
+
+
+void uninitializeSSL()
+{
+ SSLManager::instance().shutdown();
+ Poco::Crypto::uninitializeCrypto();
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/SecureSMTPClientSession.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/SecureSMTPClientSession.cpp
index c1a9569bc7..ff0fd5b0d4 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/SecureSMTPClientSession.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/SecureSMTPClientSession.cpp
@@ -1,64 +1,64 @@
-//
-// SecureSMTPClientSession.h
-//
-// Library: NetSSL_OpenSSL
-// Package: Mail
-// Module: SecureSMTPClientSession
-//
-// Copyright (c) 2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/SecureSMTPClientSession.h"
-#include "Poco/Net/SecureStreamSocket.h"
-#include "Poco/Net/SSLManager.h"
-#include "Poco/Net/DialogSocket.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-SecureSMTPClientSession::SecureSMTPClientSession(const StreamSocket& socket):
- SMTPClientSession(socket)
-{
-}
-
-
-SecureSMTPClientSession::SecureSMTPClientSession(const std::string& host, Poco::UInt16 port):
- SMTPClientSession(host, port),
- _host(host)
-{
-}
-
-
-SecureSMTPClientSession::~SecureSMTPClientSession()
-{
-}
-
-
-bool SecureSMTPClientSession::startTLS()
-{
- return startTLS(SSLManager::instance().defaultClientContext());
-}
-
-
-bool SecureSMTPClientSession::startTLS(Context::Ptr pContext)
-{
- int status = 0;
- std::string response;
-
- status = sendCommand("STARTTLS", response);
- if (!isPositiveCompletion(status)) return false;
-
- SecureStreamSocket sss(SecureStreamSocket::attach(socket(), _host, pContext));
- socket() = sss;
-
- return true;
-}
-
-
-} } // namespace Poco::Net
+//
+// SecureSMTPClientSession.h
+//
+// Library: NetSSL_OpenSSL
+// Package: Mail
+// Module: SecureSMTPClientSession
+//
+// Copyright (c) 2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SecureSMTPClientSession.h"
+#include "Poco/Net/SecureStreamSocket.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Net/DialogSocket.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+SecureSMTPClientSession::SecureSMTPClientSession(const StreamSocket& socket):
+ SMTPClientSession(socket)
+{
+}
+
+
+SecureSMTPClientSession::SecureSMTPClientSession(const std::string& host, Poco::UInt16 port):
+ SMTPClientSession(host, port),
+ _host(host)
+{
+}
+
+
+SecureSMTPClientSession::~SecureSMTPClientSession()
+{
+}
+
+
+bool SecureSMTPClientSession::startTLS()
+{
+ return startTLS(SSLManager::instance().defaultClientContext());
+}
+
+
+bool SecureSMTPClientSession::startTLS(Context::Ptr pContext)
+{
+ int status = 0;
+ std::string response;
+
+ status = sendCommand("STARTTLS", response);
+ if (!isPositiveCompletion(status)) return false;
+
+ SecureStreamSocket sss(SecureStreamSocket::attach(socket(), _host, pContext));
+ socket() = sss;
+
+ return true;
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/SecureServerSocket.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/SecureServerSocket.cpp
index a394304ace..b5ab4c15f0 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/SecureServerSocket.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/SecureServerSocket.cpp
@@ -1,121 +1,121 @@
-//
-// SecureServerSocket.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLSockets
-// Module: SecureServerSocket
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/SecureServerSocket.h"
-#include "Poco/Net/SecureServerSocketImpl.h"
-#include "Poco/Net/SecureStreamSocket.h"
-#include "Poco/Net/SSLManager.h"
-#include "Poco/Exception.h"
-
-
-using Poco::InvalidArgumentException;
-
-
-namespace Poco {
-namespace Net {
-
-
-SecureServerSocket::SecureServerSocket():
- ServerSocket(new SecureServerSocketImpl(SSLManager::instance().defaultServerContext()), true)
-{
-}
-
-
-SecureServerSocket::SecureServerSocket(Context::Ptr pContext):
- ServerSocket(new SecureServerSocketImpl(pContext), true)
-{
-}
-
-
-SecureServerSocket::SecureServerSocket(const Socket& socket):
- ServerSocket(socket)
-{
- if (!dynamic_cast<SecureServerSocketImpl*>(impl()))
- throw InvalidArgumentException("Cannot assign incompatible socket");
-}
-
-
-SecureServerSocket::SecureServerSocket(const SocketAddress& address, int backlog):
- ServerSocket(new SecureServerSocketImpl(SSLManager::instance().defaultServerContext()), true)
-{
- impl()->bind(address, true);
- impl()->listen(backlog);
-}
-
-
-SecureServerSocket::SecureServerSocket(const SocketAddress& address, int backlog, Context::Ptr pContext):
- ServerSocket(new SecureServerSocketImpl(pContext), true)
-{
- impl()->bind(address, true);
- impl()->listen(backlog);
-}
-
-
-SecureServerSocket::SecureServerSocket(Poco::UInt16 port, int backlog):
- ServerSocket(new SecureServerSocketImpl(SSLManager::instance().defaultServerContext()), true)
-{
- IPAddress wildcardAddr;
- SocketAddress address(wildcardAddr, port);
- impl()->bind(address, true);
- impl()->listen(backlog);
-}
-
-SecureServerSocket::SecureServerSocket(Poco::UInt16 port, int backlog, Context::Ptr pContext):
- ServerSocket(new SecureServerSocketImpl(pContext), true)
-{
- IPAddress wildcardAddr;
- SocketAddress address(wildcardAddr, port);
- impl()->bind(address, true);
- impl()->listen(backlog);
-}
-
-
-SecureServerSocket::~SecureServerSocket()
-{
-}
-
-
-SecureServerSocket& SecureServerSocket::operator = (const Socket& socket)
-{
- if (&socket != this)
- {
- if (dynamic_cast<SecureServerSocketImpl*>(socket.impl()))
- ServerSocket::operator = (socket);
- else
- throw InvalidArgumentException("Cannot assign incompatible socket");
- }
- return *this;
-}
-
-
-StreamSocket SecureServerSocket::acceptConnection(SocketAddress& clientAddr)
-{
- return SecureStreamSocket(impl()->acceptConnection(clientAddr));
-}
-
-
-StreamSocket SecureServerSocket::acceptConnection()
-{
- SocketAddress clientAddr;
- return SecureStreamSocket(impl()->acceptConnection(clientAddr));
-}
-
-
-Context::Ptr SecureServerSocket::context() const
-{
- return static_cast<SecureServerSocketImpl*>(impl())->context();
-}
-
-
-} } // namespace Poco::Net
+//
+// SecureServerSocket.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLSockets
+// Module: SecureServerSocket
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SecureServerSocket.h"
+#include "Poco/Net/SecureServerSocketImpl.h"
+#include "Poco/Net/SecureStreamSocket.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Exception.h"
+
+
+using Poco::InvalidArgumentException;
+
+
+namespace Poco {
+namespace Net {
+
+
+SecureServerSocket::SecureServerSocket():
+ ServerSocket(new SecureServerSocketImpl(SSLManager::instance().defaultServerContext()), true)
+{
+}
+
+
+SecureServerSocket::SecureServerSocket(Context::Ptr pContext):
+ ServerSocket(new SecureServerSocketImpl(pContext), true)
+{
+}
+
+
+SecureServerSocket::SecureServerSocket(const Socket& socket):
+ ServerSocket(socket)
+{
+ if (!dynamic_cast<SecureServerSocketImpl*>(impl()))
+ throw InvalidArgumentException("Cannot assign incompatible socket");
+}
+
+
+SecureServerSocket::SecureServerSocket(const SocketAddress& address, int backlog):
+ ServerSocket(new SecureServerSocketImpl(SSLManager::instance().defaultServerContext()), true)
+{
+ impl()->bind(address, true);
+ impl()->listen(backlog);
+}
+
+
+SecureServerSocket::SecureServerSocket(const SocketAddress& address, int backlog, Context::Ptr pContext):
+ ServerSocket(new SecureServerSocketImpl(pContext), true)
+{
+ impl()->bind(address, true);
+ impl()->listen(backlog);
+}
+
+
+SecureServerSocket::SecureServerSocket(Poco::UInt16 port, int backlog):
+ ServerSocket(new SecureServerSocketImpl(SSLManager::instance().defaultServerContext()), true)
+{
+ IPAddress wildcardAddr;
+ SocketAddress address(wildcardAddr, port);
+ impl()->bind(address, true);
+ impl()->listen(backlog);
+}
+
+SecureServerSocket::SecureServerSocket(Poco::UInt16 port, int backlog, Context::Ptr pContext):
+ ServerSocket(new SecureServerSocketImpl(pContext), true)
+{
+ IPAddress wildcardAddr;
+ SocketAddress address(wildcardAddr, port);
+ impl()->bind(address, true);
+ impl()->listen(backlog);
+}
+
+
+SecureServerSocket::~SecureServerSocket()
+{
+}
+
+
+SecureServerSocket& SecureServerSocket::operator = (const Socket& socket)
+{
+ if (&socket != this)
+ {
+ if (dynamic_cast<SecureServerSocketImpl*>(socket.impl()))
+ ServerSocket::operator = (socket);
+ else
+ throw InvalidArgumentException("Cannot assign incompatible socket");
+ }
+ return *this;
+}
+
+
+StreamSocket SecureServerSocket::acceptConnection(SocketAddress& clientAddr)
+{
+ return SecureStreamSocket(impl()->acceptConnection(clientAddr));
+}
+
+
+StreamSocket SecureServerSocket::acceptConnection()
+{
+ SocketAddress clientAddr;
+ return SecureStreamSocket(impl()->acceptConnection(clientAddr));
+}
+
+
+Context::Ptr SecureServerSocket::context() const
+{
+ return static_cast<SecureServerSocketImpl*>(impl())->context();
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/SecureServerSocketImpl.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/SecureServerSocketImpl.cpp
index 0175622a73..46df3b1cc5 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/SecureServerSocketImpl.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/SecureServerSocketImpl.cpp
@@ -1,122 +1,122 @@
-//
-// SecureServerSocketImpl.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLSockets
-// Module: SecureServerSocketImpl
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/SecureServerSocketImpl.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-SecureServerSocketImpl::SecureServerSocketImpl(Context::Ptr pContext):
- _impl(new ServerSocketImpl, pContext)
-{
-}
-
-
-SecureServerSocketImpl::~SecureServerSocketImpl()
-{
- try
- {
- reset();
- }
- catch (...)
- {
- poco_unexpected();
- }
-}
-
-
-SocketImpl* SecureServerSocketImpl::acceptConnection(SocketAddress& clientAddr)
-{
- return _impl.acceptConnection(clientAddr);
-}
-
-
-void SecureServerSocketImpl::connect(const SocketAddress& /*address*/)
-{
- throw Poco::InvalidAccessException("Cannot connect() a SecureServerSocket");
-}
-
-
-void SecureServerSocketImpl::connect(const SocketAddress& /*address*/, const Poco::Timespan& /*timeout*/)
-{
- throw Poco::InvalidAccessException("Cannot connect() a SecureServerSocket");
-}
-
-
-void SecureServerSocketImpl::connectNB(const SocketAddress& /*address*/)
-{
- throw Poco::InvalidAccessException("Cannot connect() a SecureServerSocket");
-}
-
-
-void SecureServerSocketImpl::bind(const SocketAddress& address, bool reuseAddress, bool reusePort)
-{
- _impl.bind(address, reuseAddress, reusePort);
- reset(_impl.sockfd());
-}
-
-
-void SecureServerSocketImpl::listen(int backlog)
-{
- _impl.listen(backlog);
- reset(_impl.sockfd());
-}
-
-
-void SecureServerSocketImpl::close()
-{
- reset();
- _impl.close();
-}
-
-
-int SecureServerSocketImpl::sendBytes(const void* /*buffer*/, int /*length*/, int /*flags*/)
-{
- throw Poco::InvalidAccessException("Cannot sendBytes() on a SecureServerSocket");
-}
-
-
-int SecureServerSocketImpl::receiveBytes(void* /*buffer*/, int /*length*/, int /*flags*/)
-{
- throw Poco::InvalidAccessException("Cannot receiveBytes() on a SecureServerSocket");
-}
-
-
-int SecureServerSocketImpl::sendTo(const void* /*buffer*/, int /*length*/, const SocketAddress& /*address*/, int /*flags*/)
-{
- throw Poco::InvalidAccessException("Cannot sendTo() on a SecureServerSocket");
-}
-
-
-int SecureServerSocketImpl::receiveFrom(void* /*buffer*/, int /*length*/, SocketAddress& /*address*/, int /*flags*/)
-{
- throw Poco::InvalidAccessException("Cannot receiveFrom() on a SecureServerSocket");
-}
-
-
-void SecureServerSocketImpl::sendUrgent(unsigned char /*data*/)
-{
- throw Poco::InvalidAccessException("Cannot sendUrgent() on a SecureServerSocket");
-}
-
-
-bool SecureServerSocketImpl::secure() const
-{
- return true;
-}
-
-
-} } // namespace Poco::Net
+//
+// SecureServerSocketImpl.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLSockets
+// Module: SecureServerSocketImpl
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SecureServerSocketImpl.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+SecureServerSocketImpl::SecureServerSocketImpl(Context::Ptr pContext):
+ _impl(new ServerSocketImpl, pContext)
+{
+}
+
+
+SecureServerSocketImpl::~SecureServerSocketImpl()
+{
+ try
+ {
+ reset();
+ }
+ catch (...)
+ {
+ poco_unexpected();
+ }
+}
+
+
+SocketImpl* SecureServerSocketImpl::acceptConnection(SocketAddress& clientAddr)
+{
+ return _impl.acceptConnection(clientAddr);
+}
+
+
+void SecureServerSocketImpl::connect(const SocketAddress& /*address*/)
+{
+ throw Poco::InvalidAccessException("Cannot connect() a SecureServerSocket");
+}
+
+
+void SecureServerSocketImpl::connect(const SocketAddress& /*address*/, const Poco::Timespan& /*timeout*/)
+{
+ throw Poco::InvalidAccessException("Cannot connect() a SecureServerSocket");
+}
+
+
+void SecureServerSocketImpl::connectNB(const SocketAddress& /*address*/)
+{
+ throw Poco::InvalidAccessException("Cannot connect() a SecureServerSocket");
+}
+
+
+void SecureServerSocketImpl::bind(const SocketAddress& address, bool reuseAddress, bool reusePort)
+{
+ _impl.bind(address, reuseAddress, reusePort);
+ reset(_impl.sockfd());
+}
+
+
+void SecureServerSocketImpl::listen(int backlog)
+{
+ _impl.listen(backlog);
+ reset(_impl.sockfd());
+}
+
+
+void SecureServerSocketImpl::close()
+{
+ reset();
+ _impl.close();
+}
+
+
+int SecureServerSocketImpl::sendBytes(const void* /*buffer*/, int /*length*/, int /*flags*/)
+{
+ throw Poco::InvalidAccessException("Cannot sendBytes() on a SecureServerSocket");
+}
+
+
+int SecureServerSocketImpl::receiveBytes(void* /*buffer*/, int /*length*/, int /*flags*/)
+{
+ throw Poco::InvalidAccessException("Cannot receiveBytes() on a SecureServerSocket");
+}
+
+
+int SecureServerSocketImpl::sendTo(const void* /*buffer*/, int /*length*/, const SocketAddress& /*address*/, int /*flags*/)
+{
+ throw Poco::InvalidAccessException("Cannot sendTo() on a SecureServerSocket");
+}
+
+
+int SecureServerSocketImpl::receiveFrom(void* /*buffer*/, int /*length*/, SocketAddress& /*address*/, int /*flags*/)
+{
+ throw Poco::InvalidAccessException("Cannot receiveFrom() on a SecureServerSocket");
+}
+
+
+void SecureServerSocketImpl::sendUrgent(unsigned char /*data*/)
+{
+ throw Poco::InvalidAccessException("Cannot sendUrgent() on a SecureServerSocket");
+}
+
+
+bool SecureServerSocketImpl::secure() const
+{
+ return true;
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/SecureSocketImpl.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/SecureSocketImpl.cpp
index ef924d66ac..564bc18683 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/SecureSocketImpl.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/SecureSocketImpl.cpp
@@ -1,49 +1,49 @@
-//
-// SecureSocketImpl.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLSockets
-// Module: SecureSocketImpl
-//
-// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/SecureSocketImpl.h"
-#include "Poco/Net/SSLException.h"
-#include "Poco/Net/Context.h"
-#include "Poco/Net/X509Certificate.h"
-#include "Poco/Net/Utility.h"
-#include "Poco/Net/SecureStreamSocket.h"
-#include "Poco/Net/SecureStreamSocketImpl.h"
-#include "Poco/Net/StreamSocketImpl.h"
-#include "Poco/Net/StreamSocket.h"
-#include "Poco/Net/NetException.h"
-#include "Poco/Net/DNS.h"
-#include "Poco/NumberFormatter.h"
-#include "Poco/NumberParser.h"
-#include "Poco/Format.h"
-#include <openssl/x509v3.h>
-#include <openssl/err.h>
-
-
-using Poco::IOException;
-using Poco::TimeoutException;
-using Poco::InvalidArgumentException;
-using Poco::NumberFormatter;
-using Poco::Timespan;
-
-
-// workaround for C++-incompatible macro
-#define POCO_BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(void*)((n)?"a":NULL))
-
-
-namespace Poco {
-namespace Net {
-
+//
+// SecureSocketImpl.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLSockets
+// Module: SecureSocketImpl
+//
+// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SecureSocketImpl.h"
+#include "Poco/Net/SSLException.h"
+#include "Poco/Net/Context.h"
+#include "Poco/Net/X509Certificate.h"
+#include "Poco/Net/Utility.h"
+#include "Poco/Net/SecureStreamSocket.h"
+#include "Poco/Net/SecureStreamSocketImpl.h"
+#include "Poco/Net/StreamSocketImpl.h"
+#include "Poco/Net/StreamSocket.h"
+#include "Poco/Net/NetException.h"
+#include "Poco/Net/DNS.h"
+#include "Poco/NumberFormatter.h"
+#include "Poco/NumberParser.h"
+#include "Poco/Format.h"
+#include <openssl/x509v3.h>
+#include <openssl/err.h>
+
+
+using Poco::IOException;
+using Poco::TimeoutException;
+using Poco::InvalidArgumentException;
+using Poco::NumberFormatter;
+using Poco::Timespan;
+
+
+// workaround for C++-incompatible macro
+#define POCO_BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(void*)((n)?"a":NULL))
+
+
+namespace Poco {
+namespace Net {
+
struct RemainingTimeCounter
{
RemainingTimeCounter(Poco::Timespan& remainingTime_) : remainingTime(remainingTime_) {};
@@ -60,137 +60,137 @@ private:
Poco::Timespan& remainingTime;
Poco::Timestamp start;
};
-
-SecureSocketImpl::SecureSocketImpl(Poco::AutoPtr<SocketImpl> pSocketImpl, Context::Ptr pContext):
- _pSSL(0),
- _pSocket(pSocketImpl),
- _pContext(pContext),
- _needHandshake(false)
-{
- poco_check_ptr (_pSocket);
- poco_check_ptr (_pContext);
-}
-
-
-SecureSocketImpl::~SecureSocketImpl()
-{
- try
- {
- reset();
- }
- catch (...)
- {
- poco_unexpected();
- }
-}
-
-
-SocketImpl* SecureSocketImpl::acceptConnection(SocketAddress& clientAddr)
-{
- poco_assert (!_pSSL);
-
- StreamSocket ss = _pSocket->acceptConnection(clientAddr);
- Poco::AutoPtr<SecureStreamSocketImpl> pSecureStreamSocketImpl = new SecureStreamSocketImpl(static_cast<StreamSocketImpl*>(ss.impl()), _pContext);
- pSecureStreamSocketImpl->acceptSSL();
- pSecureStreamSocketImpl->duplicate();
- return pSecureStreamSocketImpl;
-}
-
-
-void SecureSocketImpl::acceptSSL()
-{
- poco_assert (!_pSSL);
-
- BIO* pBIO = BIO_new(BIO_s_socket());
- if (!pBIO) throw SSLException("Cannot create BIO object");
- BIO_set_fd(pBIO, static_cast<int>(_pSocket->sockfd()), BIO_NOCLOSE);
-
- _pSSL = SSL_new(_pContext->sslContext());
- if (!_pSSL)
- {
- BIO_free(pBIO);
- throw SSLException("Cannot create SSL object");
- }
- SSL_set_bio(_pSSL, pBIO, pBIO);
- SSL_set_accept_state(_pSSL);
- _needHandshake = true;
-}
-
-
-void SecureSocketImpl::connect(const SocketAddress& address, bool performHandshake)
-{
- if (_pSSL) reset();
-
- poco_assert (!_pSSL);
-
- _pSocket->connect(address);
- connectSSL(performHandshake);
-}
-
-
-void SecureSocketImpl::connect(const SocketAddress& address, const Poco::Timespan& timeout, bool performHandshake)
-{
- if (_pSSL) reset();
-
- poco_assert (!_pSSL);
-
- _pSocket->connect(address, timeout);
+
+SecureSocketImpl::SecureSocketImpl(Poco::AutoPtr<SocketImpl> pSocketImpl, Context::Ptr pContext):
+ _pSSL(0),
+ _pSocket(pSocketImpl),
+ _pContext(pContext),
+ _needHandshake(false)
+{
+ poco_check_ptr (_pSocket);
+ poco_check_ptr (_pContext);
+}
+
+
+SecureSocketImpl::~SecureSocketImpl()
+{
+ try
+ {
+ reset();
+ }
+ catch (...)
+ {
+ poco_unexpected();
+ }
+}
+
+
+SocketImpl* SecureSocketImpl::acceptConnection(SocketAddress& clientAddr)
+{
+ poco_assert (!_pSSL);
+
+ StreamSocket ss = _pSocket->acceptConnection(clientAddr);
+ Poco::AutoPtr<SecureStreamSocketImpl> pSecureStreamSocketImpl = new SecureStreamSocketImpl(static_cast<StreamSocketImpl*>(ss.impl()), _pContext);
+ pSecureStreamSocketImpl->acceptSSL();
+ pSecureStreamSocketImpl->duplicate();
+ return pSecureStreamSocketImpl;
+}
+
+
+void SecureSocketImpl::acceptSSL()
+{
+ poco_assert (!_pSSL);
+
+ BIO* pBIO = BIO_new(BIO_s_socket());
+ if (!pBIO) throw SSLException("Cannot create BIO object");
+ BIO_set_fd(pBIO, static_cast<int>(_pSocket->sockfd()), BIO_NOCLOSE);
+
+ _pSSL = SSL_new(_pContext->sslContext());
+ if (!_pSSL)
+ {
+ BIO_free(pBIO);
+ throw SSLException("Cannot create SSL object");
+ }
+ SSL_set_bio(_pSSL, pBIO, pBIO);
+ SSL_set_accept_state(_pSSL);
+ _needHandshake = true;
+}
+
+
+void SecureSocketImpl::connect(const SocketAddress& address, bool performHandshake)
+{
+ if (_pSSL) reset();
+
+ poco_assert (!_pSSL);
+
+ _pSocket->connect(address);
+ connectSSL(performHandshake);
+}
+
+
+void SecureSocketImpl::connect(const SocketAddress& address, const Poco::Timespan& timeout, bool performHandshake)
+{
+ if (_pSSL) reset();
+
+ poco_assert (!_pSSL);
+
+ _pSocket->connect(address, timeout);
//FIXME it updates timeouts of SecureStreamSocketImpl::underlying_socket it does not update timeouts of SecureStreamSocketImpl
//However, timeouts of SecureStreamSocketImpl are not used in connectSSL() and previous settings are restored after
- Poco::Timespan receiveTimeout = _pSocket->getReceiveTimeout();
- Poco::Timespan sendTimeout = _pSocket->getSendTimeout();
- _pSocket->setReceiveTimeout(timeout);
- _pSocket->setSendTimeout(timeout);
- connectSSL(performHandshake);
- _pSocket->setReceiveTimeout(receiveTimeout);
- _pSocket->setSendTimeout(sendTimeout);
-}
-
-
-void SecureSocketImpl::connectNB(const SocketAddress& address)
-{
- if (_pSSL) reset();
-
- poco_assert (!_pSSL);
-
- _pSocket->connectNB(address);
- connectSSL(false);
-}
-
-
-void SecureSocketImpl::connectSSL(bool performHandshake)
-{
- poco_assert (!_pSSL);
- poco_assert (_pSocket->initialized());
-
- BIO* pBIO = BIO_new(BIO_s_socket());
- if (!pBIO) throw SSLException("Cannot create SSL BIO object");
- BIO_set_fd(pBIO, static_cast<int>(_pSocket->sockfd()), BIO_NOCLOSE);
-
- _pSSL = SSL_new(_pContext->sslContext());
- if (!_pSSL)
- {
- BIO_free(pBIO);
- throw SSLException("Cannot create SSL object");
- }
- SSL_set_bio(_pSSL, pBIO, pBIO);
-
-#if OPENSSL_VERSION_NUMBER >= 0x0908060L && !defined(OPENSSL_NO_TLSEXT)
- if (!_peerHostName.empty())
- {
- SSL_set_tlsext_host_name(_pSSL, _peerHostName.c_str());
- }
-#endif
-
- if (_pSession)
- {
- SSL_set_session(_pSSL, _pSession->sslSession());
- }
-
- try
- {
- if (performHandshake && _pSocket->getBlocking())
- {
+ Poco::Timespan receiveTimeout = _pSocket->getReceiveTimeout();
+ Poco::Timespan sendTimeout = _pSocket->getSendTimeout();
+ _pSocket->setReceiveTimeout(timeout);
+ _pSocket->setSendTimeout(timeout);
+ connectSSL(performHandshake);
+ _pSocket->setReceiveTimeout(receiveTimeout);
+ _pSocket->setSendTimeout(sendTimeout);
+}
+
+
+void SecureSocketImpl::connectNB(const SocketAddress& address)
+{
+ if (_pSSL) reset();
+
+ poco_assert (!_pSSL);
+
+ _pSocket->connectNB(address);
+ connectSSL(false);
+}
+
+
+void SecureSocketImpl::connectSSL(bool performHandshake)
+{
+ poco_assert (!_pSSL);
+ poco_assert (_pSocket->initialized());
+
+ BIO* pBIO = BIO_new(BIO_s_socket());
+ if (!pBIO) throw SSLException("Cannot create SSL BIO object");
+ BIO_set_fd(pBIO, static_cast<int>(_pSocket->sockfd()), BIO_NOCLOSE);
+
+ _pSSL = SSL_new(_pContext->sslContext());
+ if (!_pSSL)
+ {
+ BIO_free(pBIO);
+ throw SSLException("Cannot create SSL object");
+ }
+ SSL_set_bio(_pSSL, pBIO, pBIO);
+
+#if OPENSSL_VERSION_NUMBER >= 0x0908060L && !defined(OPENSSL_NO_TLSEXT)
+ if (!_peerHostName.empty())
+ {
+ SSL_set_tlsext_host_name(_pSSL, _peerHostName.c_str());
+ }
+#endif
+
+ if (_pSession)
+ {
+ SSL_set_session(_pSSL, _pSession->sslSession());
+ }
+
+ try
+ {
+ if (performHandshake && _pSocket->getBlocking())
+ {
int ret;
Poco::Timespan remaining_time = getMaxTimeout();
do
@@ -199,237 +199,237 @@ void SecureSocketImpl::connectSSL(bool performHandshake)
ret = SSL_connect(_pSSL);
}
while (mustRetry(ret, remaining_time));
- handleError(ret);
- verifyPeerCertificate();
- }
- else
- {
- SSL_set_connect_state(_pSSL);
- _needHandshake = true;
- }
- }
- catch (...)
- {
- SSL_free(_pSSL);
- _pSSL = 0;
- throw;
- }
-}
-
-
-void SecureSocketImpl::bind(const SocketAddress& address, bool reuseAddress, bool reusePort)
-{
- poco_check_ptr (_pSocket);
-
- _pSocket->bind(address, reuseAddress, reusePort);
-}
-
-
-void SecureSocketImpl::listen(int backlog)
-{
- poco_check_ptr (_pSocket);
-
- _pSocket->listen(backlog);
-}
-
-
-void SecureSocketImpl::shutdown()
-{
- if (_pSSL)
- {
- // Don't shut down the socket more than once.
- int shutdownState = SSL_get_shutdown(_pSSL);
- bool shutdownSent = (shutdownState & SSL_SENT_SHUTDOWN) == SSL_SENT_SHUTDOWN;
- if (!shutdownSent)
- {
- // A proper clean shutdown would require us to
- // retry the shutdown if we get a zero return
- // value, until SSL_shutdown() returns 1.
- // However, this will lead to problems with
- // most web browsers, so we just set the shutdown
- // flag by calling SSL_shutdown() once and be
- // done with it.
- int rc = SSL_shutdown(_pSSL);
- if (rc < 0) handleError(rc);
- if (_pSocket->getBlocking())
- {
- _pSocket->shutdown();
- }
- }
- }
-}
-
-
-void SecureSocketImpl::close()
-{
- try
- {
- shutdown();
- }
- catch (...)
- {
- }
- _pSocket->close();
-}
-
-
-int SecureSocketImpl::sendBytes(const void* buffer, int length, int /*flags*/)
-{
- poco_assert (_pSocket->initialized());
- poco_check_ptr (_pSSL);
-
- int rc;
- if (_needHandshake)
- {
- rc = completeHandshake();
- if (rc == 1)
- verifyPeerCertificate();
- else if (rc == 0)
- throw SSLConnectionUnexpectedlyClosedException();
- else
- return rc;
- }
+ handleError(ret);
+ verifyPeerCertificate();
+ }
+ else
+ {
+ SSL_set_connect_state(_pSSL);
+ _needHandshake = true;
+ }
+ }
+ catch (...)
+ {
+ SSL_free(_pSSL);
+ _pSSL = 0;
+ throw;
+ }
+}
+
+
+void SecureSocketImpl::bind(const SocketAddress& address, bool reuseAddress, bool reusePort)
+{
+ poco_check_ptr (_pSocket);
+
+ _pSocket->bind(address, reuseAddress, reusePort);
+}
+
+
+void SecureSocketImpl::listen(int backlog)
+{
+ poco_check_ptr (_pSocket);
+
+ _pSocket->listen(backlog);
+}
+
+
+void SecureSocketImpl::shutdown()
+{
+ if (_pSSL)
+ {
+ // Don't shut down the socket more than once.
+ int shutdownState = SSL_get_shutdown(_pSSL);
+ bool shutdownSent = (shutdownState & SSL_SENT_SHUTDOWN) == SSL_SENT_SHUTDOWN;
+ if (!shutdownSent)
+ {
+ // A proper clean shutdown would require us to
+ // retry the shutdown if we get a zero return
+ // value, until SSL_shutdown() returns 1.
+ // However, this will lead to problems with
+ // most web browsers, so we just set the shutdown
+ // flag by calling SSL_shutdown() once and be
+ // done with it.
+ int rc = SSL_shutdown(_pSSL);
+ if (rc < 0) handleError(rc);
+ if (_pSocket->getBlocking())
+ {
+ _pSocket->shutdown();
+ }
+ }
+ }
+}
+
+
+void SecureSocketImpl::close()
+{
+ try
+ {
+ shutdown();
+ }
+ catch (...)
+ {
+ }
+ _pSocket->close();
+}
+
+
+int SecureSocketImpl::sendBytes(const void* buffer, int length, int /*flags*/)
+{
+ poco_assert (_pSocket->initialized());
+ poco_check_ptr (_pSSL);
+
+ int rc;
+ if (_needHandshake)
+ {
+ rc = completeHandshake();
+ if (rc == 1)
+ verifyPeerCertificate();
+ else if (rc == 0)
+ throw SSLConnectionUnexpectedlyClosedException();
+ else
+ return rc;
+ }
Poco::Timespan remaining_time = getMaxTimeout();
- do
- {
+ do
+ {
RemainingTimeCounter counter(remaining_time);
- rc = SSL_write(_pSSL, buffer, length);
- }
+ rc = SSL_write(_pSSL, buffer, length);
+ }
while (mustRetry(rc, remaining_time));
- if (rc <= 0)
- {
- rc = handleError(rc);
- if (rc == 0) throw SSLConnectionUnexpectedlyClosedException();
- }
- return rc;
-}
-
-
-int SecureSocketImpl::receiveBytes(void* buffer, int length, int /*flags*/)
-{
- poco_assert (_pSocket->initialized());
- poco_check_ptr (_pSSL);
-
- int rc;
- if (_needHandshake)
- {
- rc = completeHandshake();
- if (rc == 1)
- verifyPeerCertificate();
- else
- return rc;
- }
+ if (rc <= 0)
+ {
+ rc = handleError(rc);
+ if (rc == 0) throw SSLConnectionUnexpectedlyClosedException();
+ }
+ return rc;
+}
+
+
+int SecureSocketImpl::receiveBytes(void* buffer, int length, int /*flags*/)
+{
+ poco_assert (_pSocket->initialized());
+ poco_check_ptr (_pSSL);
+
+ int rc;
+ if (_needHandshake)
+ {
+ rc = completeHandshake();
+ if (rc == 1)
+ verifyPeerCertificate();
+ else
+ return rc;
+ }
Poco::Timespan remaining_time = getMaxTimeout();
- do
- {
+ do
+ {
/// SSL record may consist of several TCP packets,
/// so thread can be blocked on recv/send and epoll_wait several times
/// until SSL_read will return rc > 0. Let's use our own time counter.
RemainingTimeCounter counter(remaining_time);
- rc = SSL_read(_pSSL, buffer, length);
- }
+ rc = SSL_read(_pSSL, buffer, length);
+ }
while (mustRetry(rc, remaining_time));
- if (rc <= 0)
- {
- return handleError(rc);
- }
- return rc;
-}
-
-
-int SecureSocketImpl::available() const
-{
- poco_check_ptr (_pSSL);
-
- return SSL_pending(_pSSL);
-}
-
-
-int SecureSocketImpl::completeHandshake()
-{
- poco_assert (_pSocket->initialized());
- poco_check_ptr (_pSSL);
-
- int rc;
+ if (rc <= 0)
+ {
+ return handleError(rc);
+ }
+ return rc;
+}
+
+
+int SecureSocketImpl::available() const
+{
+ poco_check_ptr (_pSSL);
+
+ return SSL_pending(_pSSL);
+}
+
+
+int SecureSocketImpl::completeHandshake()
+{
+ poco_assert (_pSocket->initialized());
+ poco_check_ptr (_pSSL);
+
+ int rc;
Poco::Timespan remaining_time = getMaxTimeout();
- do
- {
+ do
+ {
RemainingTimeCounter counter(remaining_time);
- rc = SSL_do_handshake(_pSSL);
- }
+ rc = SSL_do_handshake(_pSSL);
+ }
while (mustRetry(rc, remaining_time));
- if (rc <= 0)
- {
- return handleError(rc);
- }
- _needHandshake = false;
- return rc;
-}
-
-
-void SecureSocketImpl::verifyPeerCertificate()
-{
- if (_peerHostName.empty())
- verifyPeerCertificate(_pSocket->peerAddress().host().toString());
- else
- verifyPeerCertificate(_peerHostName);
-}
-
-
-void SecureSocketImpl::verifyPeerCertificate(const std::string& hostName)
-{
- long certErr = verifyPeerCertificateImpl(hostName);
- if (certErr != X509_V_OK)
- {
- std::string msg = Utility::convertCertificateError(certErr);
- throw CertificateValidationException("Unacceptable certificate from " + hostName, msg);
- }
-}
-
-
-long SecureSocketImpl::verifyPeerCertificateImpl(const std::string& hostName)
-{
- Context::VerificationMode mode = _pContext->verificationMode();
- if (mode == Context::VERIFY_NONE || !_pContext->extendedCertificateVerificationEnabled() ||
- (mode != Context::VERIFY_STRICT && isLocalHost(hostName)))
- {
- return X509_V_OK;
- }
-
- X509* pCert = SSL_get_peer_certificate(_pSSL);
- if (pCert)
- {
- X509Certificate cert(pCert);
- return cert.verify(hostName) ? X509_V_OK : X509_V_ERR_APPLICATION_VERIFICATION;
- }
- else return X509_V_OK;
-}
-
-
-bool SecureSocketImpl::isLocalHost(const std::string& hostName)
-{
- try
- {
- SocketAddress addr(hostName, 0);
- return addr.host().isLoopback();
- }
- catch (Poco::Exception&)
- {
- return false;
- }
-}
-
-
-X509* SecureSocketImpl::peerCertificate() const
-{
- if (_pSSL)
- return SSL_get_peer_certificate(_pSSL);
- else
- return 0;
-}
-
+ if (rc <= 0)
+ {
+ return handleError(rc);
+ }
+ _needHandshake = false;
+ return rc;
+}
+
+
+void SecureSocketImpl::verifyPeerCertificate()
+{
+ if (_peerHostName.empty())
+ verifyPeerCertificate(_pSocket->peerAddress().host().toString());
+ else
+ verifyPeerCertificate(_peerHostName);
+}
+
+
+void SecureSocketImpl::verifyPeerCertificate(const std::string& hostName)
+{
+ long certErr = verifyPeerCertificateImpl(hostName);
+ if (certErr != X509_V_OK)
+ {
+ std::string msg = Utility::convertCertificateError(certErr);
+ throw CertificateValidationException("Unacceptable certificate from " + hostName, msg);
+ }
+}
+
+
+long SecureSocketImpl::verifyPeerCertificateImpl(const std::string& hostName)
+{
+ Context::VerificationMode mode = _pContext->verificationMode();
+ if (mode == Context::VERIFY_NONE || !_pContext->extendedCertificateVerificationEnabled() ||
+ (mode != Context::VERIFY_STRICT && isLocalHost(hostName)))
+ {
+ return X509_V_OK;
+ }
+
+ X509* pCert = SSL_get_peer_certificate(_pSSL);
+ if (pCert)
+ {
+ X509Certificate cert(pCert);
+ return cert.verify(hostName) ? X509_V_OK : X509_V_ERR_APPLICATION_VERIFICATION;
+ }
+ else return X509_V_OK;
+}
+
+
+bool SecureSocketImpl::isLocalHost(const std::string& hostName)
+{
+ try
+ {
+ SocketAddress addr(hostName, 0);
+ return addr.host().isLoopback();
+ }
+ catch (Poco::Exception&)
+ {
+ return false;
+ }
+}
+
+
+X509* SecureSocketImpl::peerCertificate() const
+{
+ if (_pSSL)
+ return SSL_get_peer_certificate(_pSSL);
+ else
+ return 0;
+}
+
Poco::Timespan SecureSocketImpl::getMaxTimeout()
{
Poco::Timespan remaining_time = _pSocket->getReceiveTimeout();
@@ -438,164 +438,164 @@ Poco::Timespan SecureSocketImpl::getMaxTimeout()
remaining_time = send_timeout;
return remaining_time;
}
-
+
bool SecureSocketImpl::mustRetry(int rc, Poco::Timespan& remaining_time)
-{
- if (rc <= 0)
- {
- int sslError = SSL_get_error(_pSSL, rc);
- int socketError = _pSocket->lastError();
- switch (sslError)
- {
- case SSL_ERROR_WANT_READ:
- if (_pSocket->getBlocking())
- {
+{
+ if (rc <= 0)
+ {
+ int sslError = SSL_get_error(_pSSL, rc);
+ int socketError = _pSocket->lastError();
+ switch (sslError)
+ {
+ case SSL_ERROR_WANT_READ:
+ if (_pSocket->getBlocking())
+ {
/// Level-triggered mode of epoll_wait is used, so if SSL_read don't read all available data from socket,
/// epoll_wait returns true without waiting for new data even if remaining_time == 0
if (_pSocket->pollImpl(remaining_time, Poco::Net::Socket::SELECT_READ) && remaining_time != 0)
- return true;
- else
- throw Poco::TimeoutException();
- }
- break;
- case SSL_ERROR_WANT_WRITE:
- if (_pSocket->getBlocking())
- {
+ return true;
+ else
+ throw Poco::TimeoutException();
+ }
+ break;
+ case SSL_ERROR_WANT_WRITE:
+ if (_pSocket->getBlocking())
+ {
/// The same as for SSL_ERROR_WANT_READ
if (_pSocket->pollImpl(remaining_time, Poco::Net::Socket::SELECT_WRITE) && remaining_time != 0)
- return true;
- else
- throw Poco::TimeoutException();
- }
- break;
- case SSL_ERROR_SYSCALL:
- return socketError == POCO_EAGAIN || socketError == POCO_EINTR;
- default:
- return socketError == POCO_EINTR;
- }
- }
- return false;
-}
-
-
-int SecureSocketImpl::handleError(int rc)
-{
- if (rc > 0) return rc;
-
- int sslError = SSL_get_error(_pSSL, rc);
- int error = SocketImpl::lastError();
-
- switch (sslError)
- {
- case SSL_ERROR_ZERO_RETURN:
- return 0;
- case SSL_ERROR_WANT_READ:
- return SecureStreamSocket::ERR_SSL_WANT_READ;
- case SSL_ERROR_WANT_WRITE:
- return SecureStreamSocket::ERR_SSL_WANT_WRITE;
- case SSL_ERROR_WANT_CONNECT:
- case SSL_ERROR_WANT_ACCEPT:
- case SSL_ERROR_WANT_X509_LOOKUP:
- // these should not occur
- poco_bugcheck();
- return rc;
- case SSL_ERROR_SYSCALL:
- if (error != 0)
- {
- SocketImpl::error(error);
- }
- // fallthrough
- default:
- {
- long lastError = ERR_get_error();
- if (lastError == 0)
- {
- if (rc == 0)
- {
- // Most web browsers do this, don't report an error
- if (_pContext->isForServerUse())
- return 0;
- else
- throw SSLConnectionUnexpectedlyClosedException();
- }
- else if (rc == -1)
- {
- throw SSLConnectionUnexpectedlyClosedException();
- }
- else
- {
- SecureStreamSocketImpl::error(Poco::format("The BIO reported an error: %d", rc));
- }
- }
- else
- {
- char buffer[256];
- ERR_error_string_n(lastError, buffer, sizeof(buffer));
- std::string msg(buffer);
- throw SSLException(msg);
- }
- }
- break;
- }
- return rc;
-}
-
-
-void SecureSocketImpl::setPeerHostName(const std::string& peerHostName)
-{
- _peerHostName = peerHostName;
-}
-
-
-void SecureSocketImpl::reset()
-{
- close();
- if (_pSSL)
- {
- SSL_free(_pSSL);
- _pSSL = 0;
- }
-}
-
-
-void SecureSocketImpl::abort()
-{
- _pSocket->shutdown();
-}
-
-
-Session::Ptr SecureSocketImpl::currentSession()
-{
- if (_pSSL)
- {
- SSL_SESSION* pSession = SSL_get1_session(_pSSL);
- if (pSession)
- {
- if (_pSession && pSession == _pSession->sslSession())
- {
- SSL_SESSION_free(pSession);
- return _pSession;
- }
- else return new Session(pSession);
- }
- }
- return 0;
-}
-
-
-void SecureSocketImpl::useSession(Session::Ptr pSession)
-{
- _pSession = pSession;
-}
-
-
-bool SecureSocketImpl::sessionWasReused()
-{
- if (_pSSL)
- return SSL_session_reused(_pSSL) != 0;
- else
- return false;
-}
-
-
-} } // namespace Poco::Net
+ return true;
+ else
+ throw Poco::TimeoutException();
+ }
+ break;
+ case SSL_ERROR_SYSCALL:
+ return socketError == POCO_EAGAIN || socketError == POCO_EINTR;
+ default:
+ return socketError == POCO_EINTR;
+ }
+ }
+ return false;
+}
+
+
+int SecureSocketImpl::handleError(int rc)
+{
+ if (rc > 0) return rc;
+
+ int sslError = SSL_get_error(_pSSL, rc);
+ int error = SocketImpl::lastError();
+
+ switch (sslError)
+ {
+ case SSL_ERROR_ZERO_RETURN:
+ return 0;
+ case SSL_ERROR_WANT_READ:
+ return SecureStreamSocket::ERR_SSL_WANT_READ;
+ case SSL_ERROR_WANT_WRITE:
+ return SecureStreamSocket::ERR_SSL_WANT_WRITE;
+ case SSL_ERROR_WANT_CONNECT:
+ case SSL_ERROR_WANT_ACCEPT:
+ case SSL_ERROR_WANT_X509_LOOKUP:
+ // these should not occur
+ poco_bugcheck();
+ return rc;
+ case SSL_ERROR_SYSCALL:
+ if (error != 0)
+ {
+ SocketImpl::error(error);
+ }
+ // fallthrough
+ default:
+ {
+ long lastError = ERR_get_error();
+ if (lastError == 0)
+ {
+ if (rc == 0)
+ {
+ // Most web browsers do this, don't report an error
+ if (_pContext->isForServerUse())
+ return 0;
+ else
+ throw SSLConnectionUnexpectedlyClosedException();
+ }
+ else if (rc == -1)
+ {
+ throw SSLConnectionUnexpectedlyClosedException();
+ }
+ else
+ {
+ SecureStreamSocketImpl::error(Poco::format("The BIO reported an error: %d", rc));
+ }
+ }
+ else
+ {
+ char buffer[256];
+ ERR_error_string_n(lastError, buffer, sizeof(buffer));
+ std::string msg(buffer);
+ throw SSLException(msg);
+ }
+ }
+ break;
+ }
+ return rc;
+}
+
+
+void SecureSocketImpl::setPeerHostName(const std::string& peerHostName)
+{
+ _peerHostName = peerHostName;
+}
+
+
+void SecureSocketImpl::reset()
+{
+ close();
+ if (_pSSL)
+ {
+ SSL_free(_pSSL);
+ _pSSL = 0;
+ }
+}
+
+
+void SecureSocketImpl::abort()
+{
+ _pSocket->shutdown();
+}
+
+
+Session::Ptr SecureSocketImpl::currentSession()
+{
+ if (_pSSL)
+ {
+ SSL_SESSION* pSession = SSL_get1_session(_pSSL);
+ if (pSession)
+ {
+ if (_pSession && pSession == _pSession->sslSession())
+ {
+ SSL_SESSION_free(pSession);
+ return _pSession;
+ }
+ else return new Session(pSession);
+ }
+ }
+ return 0;
+}
+
+
+void SecureSocketImpl::useSession(Session::Ptr pSession)
+{
+ _pSession = pSession;
+}
+
+
+bool SecureSocketImpl::sessionWasReused()
+{
+ if (_pSSL)
+ return SSL_session_reused(_pSSL) != 0;
+ else
+ return false;
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/SecureStreamSocket.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/SecureStreamSocket.cpp
index f4766ca6f9..a62fcd33d4 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/SecureStreamSocket.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/SecureStreamSocket.cpp
@@ -1,287 +1,287 @@
-//
-// SecureStreamSocket.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLSockets
-// Module: SecureStreamSocket
-//
-// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/SecureStreamSocket.h"
-#include "Poco/Net/SecureStreamSocketImpl.h"
-#include "Poco/Net/SocketImpl.h"
-#include "Poco/Net/SSLManager.h"
-#include "Poco/Exception.h"
-
-
-using Poco::InvalidArgumentException;
-
-
-namespace Poco {
-namespace Net {
-
-
-SecureStreamSocket::SecureStreamSocket():
- StreamSocket(new SecureStreamSocketImpl(SSLManager::instance().defaultClientContext()))
-{
-}
-
-
-SecureStreamSocket::SecureStreamSocket(Context::Ptr pContext):
- StreamSocket(new SecureStreamSocketImpl(pContext))
-{
-}
-
-
-SecureStreamSocket::SecureStreamSocket(Context::Ptr pContext, Session::Ptr pSession):
- StreamSocket(new SecureStreamSocketImpl(pContext))
-{
- useSession(pSession);
-}
-
-
-SecureStreamSocket::SecureStreamSocket(const SocketAddress& address):
- StreamSocket(new SecureStreamSocketImpl(SSLManager::instance().defaultClientContext()))
-{
- connect(address);
-}
-
-
-SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, const std::string& hostName):
- StreamSocket(new SecureStreamSocketImpl(SSLManager::instance().defaultClientContext()))
-{
- static_cast<SecureStreamSocketImpl*>(impl())->setPeerHostName(hostName);
- connect(address);
-}
-
-
-SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, Context::Ptr pContext):
- StreamSocket(new SecureStreamSocketImpl(pContext))
-{
- connect(address);
-}
-
-
-SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, Context::Ptr pContext, Session::Ptr pSession):
- StreamSocket(new SecureStreamSocketImpl(pContext))
-{
- useSession(pSession);
- connect(address);
-}
-
-
-SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, const std::string& hostName, Context::Ptr pContext):
- StreamSocket(new SecureStreamSocketImpl(pContext))
-{
- static_cast<SecureStreamSocketImpl*>(impl())->setPeerHostName(hostName);
- connect(address);
-}
-
-
-SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, const std::string& hostName, Context::Ptr pContext, Session::Ptr pSession):
- StreamSocket(new SecureStreamSocketImpl(pContext))
-{
- static_cast<SecureStreamSocketImpl*>(impl())->setPeerHostName(hostName);
- useSession(pSession);
- connect(address);
-}
-
-
-SecureStreamSocket::SecureStreamSocket(const Socket& socket):
- StreamSocket(socket)
-{
- if (!dynamic_cast<SecureStreamSocketImpl*>(impl()))
- throw InvalidArgumentException("Cannot assign incompatible socket");
-}
-
-
-SecureStreamSocket::SecureStreamSocket(SocketImpl* pImpl):
- StreamSocket(pImpl)
-{
- if (!dynamic_cast<SecureStreamSocketImpl*>(impl()))
- throw InvalidArgumentException("Cannot assign incompatible socket");
-}
-
-
-SecureStreamSocket::~SecureStreamSocket()
-{
-}
-
-
-SecureStreamSocket& SecureStreamSocket::operator = (const Socket& socket)
-{
- if (dynamic_cast<SecureStreamSocketImpl*>(socket.impl()))
- StreamSocket::operator = (socket);
- else
- throw InvalidArgumentException("Cannot assign incompatible socket");
- return *this;
-}
-
-
-bool SecureStreamSocket::havePeerCertificate() const
-{
- return static_cast<SecureStreamSocketImpl*>(impl())->havePeerCertificate();
-}
-
-
-X509Certificate SecureStreamSocket::peerCertificate() const
-{
- return static_cast<SecureStreamSocketImpl*>(impl())->peerCertificate();
-}
-
-
-void SecureStreamSocket::setPeerHostName(const std::string& hostName)
-{
- static_cast<SecureStreamSocketImpl*>(impl())->setPeerHostName(hostName);
-}
-
-
-const std::string& SecureStreamSocket::getPeerHostName() const
-{
- return static_cast<SecureStreamSocketImpl*>(impl())->getPeerHostName();
-}
-
-
-SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket)
-{
- SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast<StreamSocketImpl*>(streamSocket.impl()), SSLManager::instance().defaultClientContext());
- SecureStreamSocket result(pImpl);
- if (pImpl->context()->isForServerUse())
- pImpl->acceptSSL();
- else
- pImpl->connectSSL();
- return result;
-}
-
-
-SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, Context::Ptr pContext)
-{
- SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast<StreamSocketImpl*>(streamSocket.impl()), pContext);
- SecureStreamSocket result(pImpl);
- if (pImpl->context()->isForServerUse())
- pImpl->acceptSSL();
- else
- pImpl->connectSSL();
- return result;
-}
-
-
-SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, Context::Ptr pContext, Session::Ptr pSession)
-{
- SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast<StreamSocketImpl*>(streamSocket.impl()), pContext);
- SecureStreamSocket result(pImpl);
- result.useSession(pSession);
- if (pImpl->context()->isForServerUse())
- pImpl->acceptSSL();
- else
- pImpl->connectSSL();
- return result;
-}
-
-
-SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, const std::string& peerHostName)
-{
- SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast<StreamSocketImpl*>(streamSocket.impl()), SSLManager::instance().defaultClientContext());
- SecureStreamSocket result(pImpl);
- result.setPeerHostName(peerHostName);
- if (pImpl->context()->isForServerUse())
- pImpl->acceptSSL();
- else
- pImpl->connectSSL();
- return result;
-}
-
-
-SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, const std::string& peerHostName, Context::Ptr pContext)
-{
- SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast<StreamSocketImpl*>(streamSocket.impl()), pContext);
- SecureStreamSocket result(pImpl);
- result.setPeerHostName(peerHostName);
- if (pImpl->context()->isForServerUse())
- pImpl->acceptSSL();
- else
- pImpl->connectSSL();
- return result;
-}
-
-
-SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, const std::string& peerHostName, Context::Ptr pContext, Session::Ptr pSession)
-{
- SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast<StreamSocketImpl*>(streamSocket.impl()), pContext);
- SecureStreamSocket result(pImpl);
- result.setPeerHostName(peerHostName);
- result.useSession(pSession);
- if (pImpl->context()->isForServerUse())
- pImpl->acceptSSL();
- else
- pImpl->connectSSL();
- return result;
-}
-
-
-Context::Ptr SecureStreamSocket::context() const
-{
- return static_cast<SecureStreamSocketImpl*>(impl())->context();
-}
-
-
-void SecureStreamSocket::setLazyHandshake(bool flag)
-{
- static_cast<SecureStreamSocketImpl*>(impl())->setLazyHandshake(flag);
-}
-
-
-bool SecureStreamSocket::getLazyHandshake() const
-{
- return static_cast<SecureStreamSocketImpl*>(impl())->getLazyHandshake();
-}
-
-
-void SecureStreamSocket::verifyPeerCertificate()
-{
- static_cast<SecureStreamSocketImpl*>(impl())->verifyPeerCertificate();
-}
-
-
-void SecureStreamSocket::verifyPeerCertificate(const std::string& hostName)
-{
- static_cast<SecureStreamSocketImpl*>(impl())->verifyPeerCertificate(hostName);
-}
-
-
-int SecureStreamSocket::completeHandshake()
-{
- return static_cast<SecureStreamSocketImpl*>(impl())->completeHandshake();
-}
-
-
-Session::Ptr SecureStreamSocket::currentSession()
-{
- return static_cast<SecureStreamSocketImpl*>(impl())->currentSession();
-}
-
-
-void SecureStreamSocket::useSession(Session::Ptr pSession)
-{
- static_cast<SecureStreamSocketImpl*>(impl())->useSession(pSession);
-}
-
-
-bool SecureStreamSocket::sessionWasReused()
-{
- return static_cast<SecureStreamSocketImpl*>(impl())->sessionWasReused();
-}
-
-
-void SecureStreamSocket::abort()
-{
- static_cast<SecureStreamSocketImpl*>(impl())->abort();
-}
-
-
-} } // namespace Poco::Net
+//
+// SecureStreamSocket.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLSockets
+// Module: SecureStreamSocket
+//
+// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SecureStreamSocket.h"
+#include "Poco/Net/SecureStreamSocketImpl.h"
+#include "Poco/Net/SocketImpl.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Exception.h"
+
+
+using Poco::InvalidArgumentException;
+
+
+namespace Poco {
+namespace Net {
+
+
+SecureStreamSocket::SecureStreamSocket():
+ StreamSocket(new SecureStreamSocketImpl(SSLManager::instance().defaultClientContext()))
+{
+}
+
+
+SecureStreamSocket::SecureStreamSocket(Context::Ptr pContext):
+ StreamSocket(new SecureStreamSocketImpl(pContext))
+{
+}
+
+
+SecureStreamSocket::SecureStreamSocket(Context::Ptr pContext, Session::Ptr pSession):
+ StreamSocket(new SecureStreamSocketImpl(pContext))
+{
+ useSession(pSession);
+}
+
+
+SecureStreamSocket::SecureStreamSocket(const SocketAddress& address):
+ StreamSocket(new SecureStreamSocketImpl(SSLManager::instance().defaultClientContext()))
+{
+ connect(address);
+}
+
+
+SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, const std::string& hostName):
+ StreamSocket(new SecureStreamSocketImpl(SSLManager::instance().defaultClientContext()))
+{
+ static_cast<SecureStreamSocketImpl*>(impl())->setPeerHostName(hostName);
+ connect(address);
+}
+
+
+SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, Context::Ptr pContext):
+ StreamSocket(new SecureStreamSocketImpl(pContext))
+{
+ connect(address);
+}
+
+
+SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, Context::Ptr pContext, Session::Ptr pSession):
+ StreamSocket(new SecureStreamSocketImpl(pContext))
+{
+ useSession(pSession);
+ connect(address);
+}
+
+
+SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, const std::string& hostName, Context::Ptr pContext):
+ StreamSocket(new SecureStreamSocketImpl(pContext))
+{
+ static_cast<SecureStreamSocketImpl*>(impl())->setPeerHostName(hostName);
+ connect(address);
+}
+
+
+SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, const std::string& hostName, Context::Ptr pContext, Session::Ptr pSession):
+ StreamSocket(new SecureStreamSocketImpl(pContext))
+{
+ static_cast<SecureStreamSocketImpl*>(impl())->setPeerHostName(hostName);
+ useSession(pSession);
+ connect(address);
+}
+
+
+SecureStreamSocket::SecureStreamSocket(const Socket& socket):
+ StreamSocket(socket)
+{
+ if (!dynamic_cast<SecureStreamSocketImpl*>(impl()))
+ throw InvalidArgumentException("Cannot assign incompatible socket");
+}
+
+
+SecureStreamSocket::SecureStreamSocket(SocketImpl* pImpl):
+ StreamSocket(pImpl)
+{
+ if (!dynamic_cast<SecureStreamSocketImpl*>(impl()))
+ throw InvalidArgumentException("Cannot assign incompatible socket");
+}
+
+
+SecureStreamSocket::~SecureStreamSocket()
+{
+}
+
+
+SecureStreamSocket& SecureStreamSocket::operator = (const Socket& socket)
+{
+ if (dynamic_cast<SecureStreamSocketImpl*>(socket.impl()))
+ StreamSocket::operator = (socket);
+ else
+ throw InvalidArgumentException("Cannot assign incompatible socket");
+ return *this;
+}
+
+
+bool SecureStreamSocket::havePeerCertificate() const
+{
+ return static_cast<SecureStreamSocketImpl*>(impl())->havePeerCertificate();
+}
+
+
+X509Certificate SecureStreamSocket::peerCertificate() const
+{
+ return static_cast<SecureStreamSocketImpl*>(impl())->peerCertificate();
+}
+
+
+void SecureStreamSocket::setPeerHostName(const std::string& hostName)
+{
+ static_cast<SecureStreamSocketImpl*>(impl())->setPeerHostName(hostName);
+}
+
+
+const std::string& SecureStreamSocket::getPeerHostName() const
+{
+ return static_cast<SecureStreamSocketImpl*>(impl())->getPeerHostName();
+}
+
+
+SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket)
+{
+ SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast<StreamSocketImpl*>(streamSocket.impl()), SSLManager::instance().defaultClientContext());
+ SecureStreamSocket result(pImpl);
+ if (pImpl->context()->isForServerUse())
+ pImpl->acceptSSL();
+ else
+ pImpl->connectSSL();
+ return result;
+}
+
+
+SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, Context::Ptr pContext)
+{
+ SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast<StreamSocketImpl*>(streamSocket.impl()), pContext);
+ SecureStreamSocket result(pImpl);
+ if (pImpl->context()->isForServerUse())
+ pImpl->acceptSSL();
+ else
+ pImpl->connectSSL();
+ return result;
+}
+
+
+SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, Context::Ptr pContext, Session::Ptr pSession)
+{
+ SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast<StreamSocketImpl*>(streamSocket.impl()), pContext);
+ SecureStreamSocket result(pImpl);
+ result.useSession(pSession);
+ if (pImpl->context()->isForServerUse())
+ pImpl->acceptSSL();
+ else
+ pImpl->connectSSL();
+ return result;
+}
+
+
+SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, const std::string& peerHostName)
+{
+ SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast<StreamSocketImpl*>(streamSocket.impl()), SSLManager::instance().defaultClientContext());
+ SecureStreamSocket result(pImpl);
+ result.setPeerHostName(peerHostName);
+ if (pImpl->context()->isForServerUse())
+ pImpl->acceptSSL();
+ else
+ pImpl->connectSSL();
+ return result;
+}
+
+
+SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, const std::string& peerHostName, Context::Ptr pContext)
+{
+ SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast<StreamSocketImpl*>(streamSocket.impl()), pContext);
+ SecureStreamSocket result(pImpl);
+ result.setPeerHostName(peerHostName);
+ if (pImpl->context()->isForServerUse())
+ pImpl->acceptSSL();
+ else
+ pImpl->connectSSL();
+ return result;
+}
+
+
+SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, const std::string& peerHostName, Context::Ptr pContext, Session::Ptr pSession)
+{
+ SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast<StreamSocketImpl*>(streamSocket.impl()), pContext);
+ SecureStreamSocket result(pImpl);
+ result.setPeerHostName(peerHostName);
+ result.useSession(pSession);
+ if (pImpl->context()->isForServerUse())
+ pImpl->acceptSSL();
+ else
+ pImpl->connectSSL();
+ return result;
+}
+
+
+Context::Ptr SecureStreamSocket::context() const
+{
+ return static_cast<SecureStreamSocketImpl*>(impl())->context();
+}
+
+
+void SecureStreamSocket::setLazyHandshake(bool flag)
+{
+ static_cast<SecureStreamSocketImpl*>(impl())->setLazyHandshake(flag);
+}
+
+
+bool SecureStreamSocket::getLazyHandshake() const
+{
+ return static_cast<SecureStreamSocketImpl*>(impl())->getLazyHandshake();
+}
+
+
+void SecureStreamSocket::verifyPeerCertificate()
+{
+ static_cast<SecureStreamSocketImpl*>(impl())->verifyPeerCertificate();
+}
+
+
+void SecureStreamSocket::verifyPeerCertificate(const std::string& hostName)
+{
+ static_cast<SecureStreamSocketImpl*>(impl())->verifyPeerCertificate(hostName);
+}
+
+
+int SecureStreamSocket::completeHandshake()
+{
+ return static_cast<SecureStreamSocketImpl*>(impl())->completeHandshake();
+}
+
+
+Session::Ptr SecureStreamSocket::currentSession()
+{
+ return static_cast<SecureStreamSocketImpl*>(impl())->currentSession();
+}
+
+
+void SecureStreamSocket::useSession(Session::Ptr pSession)
+{
+ static_cast<SecureStreamSocketImpl*>(impl())->useSession(pSession);
+}
+
+
+bool SecureStreamSocket::sessionWasReused()
+{
+ return static_cast<SecureStreamSocketImpl*>(impl())->sessionWasReused();
+}
+
+
+void SecureStreamSocket::abort()
+{
+ static_cast<SecureStreamSocketImpl*>(impl())->abort();
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/SecureStreamSocketImpl.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/SecureStreamSocketImpl.cpp
index bef198ae69..d562fe8c5b 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/SecureStreamSocketImpl.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/SecureStreamSocketImpl.cpp
@@ -1,241 +1,241 @@
-//
-// SecureStreamSocketImpl.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLSockets
-// Module: SecureStreamSocketImpl
-//
-// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/SecureStreamSocketImpl.h"
-#include "Poco/Net/SSLException.h"
-#include "Poco/Thread.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-SecureStreamSocketImpl::SecureStreamSocketImpl(Context::Ptr pContext):
+//
+// SecureStreamSocketImpl.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLSockets
+// Module: SecureStreamSocketImpl
+//
+// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/SecureStreamSocketImpl.h"
+#include "Poco/Net/SSLException.h"
+#include "Poco/Thread.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+SecureStreamSocketImpl::SecureStreamSocketImpl(Context::Ptr pContext):
underlying_socket(new StreamSocketImpl),
_impl(underlying_socket, pContext),
- _lazyHandshake(false)
-{
-}
-
-
-SecureStreamSocketImpl::SecureStreamSocketImpl(StreamSocketImpl* pStreamSocket, Context::Ptr pContext):
+ _lazyHandshake(false)
+{
+}
+
+
+SecureStreamSocketImpl::SecureStreamSocketImpl(StreamSocketImpl* pStreamSocket, Context::Ptr pContext):
underlying_socket(pStreamSocket),
_impl(underlying_socket, pContext),
- _lazyHandshake(false)
-{
- pStreamSocket->duplicate();
- reset(_impl.sockfd());
-}
-
-
-SecureStreamSocketImpl::~SecureStreamSocketImpl()
-{
- try
- {
- reset();
- }
- catch (...)
- {
- poco_unexpected();
- }
-}
-
+ _lazyHandshake(false)
+{
+ pStreamSocket->duplicate();
+ reset(_impl.sockfd());
+}
+
+
+SecureStreamSocketImpl::~SecureStreamSocketImpl()
+{
+ try
+ {
+ reset();
+ }
+ catch (...)
+ {
+ poco_unexpected();
+ }
+}
+
void SecureStreamSocketImpl::setSendTimeout(const Poco::Timespan& timeout)
{
underlying_socket->setSendTimeout(timeout);
_sndTimeout = underlying_socket->getSendTimeout();
}
-
+
void SecureStreamSocketImpl::setReceiveTimeout(const Poco::Timespan& timeout)
{
underlying_socket->setReceiveTimeout(timeout);
_recvTimeout = underlying_socket->getReceiveTimeout();
}
-SocketImpl* SecureStreamSocketImpl::acceptConnection(SocketAddress& /*clientAddr*/)
-{
- throw Poco::InvalidAccessException("Cannot acceptConnection() on a SecureStreamSocketImpl");
-}
-
-
-void SecureStreamSocketImpl::acceptSSL()
-{
- _impl.acceptSSL();
-}
-
-
-void SecureStreamSocketImpl::connect(const SocketAddress& address)
-{
- _impl.connect(address, !_lazyHandshake);
- reset(_impl.sockfd());
-}
-
-
-void SecureStreamSocketImpl::connect(const SocketAddress& address, const Poco::Timespan& timeout)
-{
- _impl.connect(address, timeout, !_lazyHandshake);
- reset(_impl.sockfd());
-}
-
-
-void SecureStreamSocketImpl::connectNB(const SocketAddress& address)
-{
- _impl.connectNB(address);
- reset(_impl.sockfd());
-}
-
-
-void SecureStreamSocketImpl::connectSSL()
-{
- _impl.connectSSL(!_lazyHandshake);
-}
-
-
-void SecureStreamSocketImpl::bind(const SocketAddress& address, bool reuseAddress, bool reusePort)
-{
- throw Poco::InvalidAccessException("Cannot bind() a SecureStreamSocketImpl");
-}
-
-
-void SecureStreamSocketImpl::listen(int /*backlog*/)
-{
- throw Poco::InvalidAccessException("Cannot listen() on a SecureStreamSocketImpl");
-}
-
-
-void SecureStreamSocketImpl::close()
-{
- reset();
- _impl.close();
-}
-
-
-void SecureStreamSocketImpl::abort()
-{
- reset();
- _impl.abort();
-}
-
-
-int SecureStreamSocketImpl::sendBytes(const void* buffer, int length, int flags)
-{
- return _impl.sendBytes(buffer, length, flags);
-}
-
-
-int SecureStreamSocketImpl::receiveBytes(void* buffer, int length, int flags)
-{
- return _impl.receiveBytes(buffer, length, flags);
-}
-
-
-int SecureStreamSocketImpl::sendTo(const void* /*buffer*/, int /*length*/, const SocketAddress& /*address*/, int /*flags*/)
-{
- throw Poco::InvalidAccessException("Cannot sendTo() on a SecureStreamSocketImpl");
-}
-
-
-int SecureStreamSocketImpl::receiveFrom(void* /*buffer*/, int /*length*/, SocketAddress& /*address*/, int /*flags*/)
-{
- throw Poco::InvalidAccessException("Cannot receiveFrom() on a SecureStreamSocketImpl");
-}
-
-
-void SecureStreamSocketImpl::sendUrgent(unsigned char /*data*/)
-{
- throw Poco::InvalidAccessException("Cannot sendUrgent() on a SecureStreamSocketImpl");
-}
-
-
-int SecureStreamSocketImpl::available()
-{
- return _impl.available();
-}
-
-
-void SecureStreamSocketImpl::shutdownReceive()
-{
-}
-
-
-void SecureStreamSocketImpl::shutdownSend()
-{
-}
-
-
-void SecureStreamSocketImpl::shutdown()
-{
- _impl.shutdown();
-}
-
-
-bool SecureStreamSocketImpl::secure() const
-{
- return true;
-}
-
-
-bool SecureStreamSocketImpl::havePeerCertificate() const
-{
- X509* pCert = _impl.peerCertificate();
- if (pCert)
- {
- X509_free(pCert);
- return true;
- }
- else return false;
-}
-
-
-X509Certificate SecureStreamSocketImpl::peerCertificate() const
-{
- X509* pCert = _impl.peerCertificate();
- if (pCert)
- return X509Certificate(pCert);
- else
- throw SSLException("No certificate available");
-}
-
-
-void SecureStreamSocketImpl::setLazyHandshake(bool flag)
-{
- _lazyHandshake = flag;
-}
-
-
-bool SecureStreamSocketImpl::getLazyHandshake() const
-{
- return _lazyHandshake;
-}
-
-
-void SecureStreamSocketImpl::verifyPeerCertificate()
-{
- _impl.verifyPeerCertificate();
-}
-
-
-void SecureStreamSocketImpl::verifyPeerCertificate(const std::string& hostName)
-{
- _impl.verifyPeerCertificate(hostName);
-}
-
-
-int SecureStreamSocketImpl::completeHandshake()
-{
- return _impl.completeHandshake();
-}
-
-
-} } // namespace Poco::Net
+SocketImpl* SecureStreamSocketImpl::acceptConnection(SocketAddress& /*clientAddr*/)
+{
+ throw Poco::InvalidAccessException("Cannot acceptConnection() on a SecureStreamSocketImpl");
+}
+
+
+void SecureStreamSocketImpl::acceptSSL()
+{
+ _impl.acceptSSL();
+}
+
+
+void SecureStreamSocketImpl::connect(const SocketAddress& address)
+{
+ _impl.connect(address, !_lazyHandshake);
+ reset(_impl.sockfd());
+}
+
+
+void SecureStreamSocketImpl::connect(const SocketAddress& address, const Poco::Timespan& timeout)
+{
+ _impl.connect(address, timeout, !_lazyHandshake);
+ reset(_impl.sockfd());
+}
+
+
+void SecureStreamSocketImpl::connectNB(const SocketAddress& address)
+{
+ _impl.connectNB(address);
+ reset(_impl.sockfd());
+}
+
+
+void SecureStreamSocketImpl::connectSSL()
+{
+ _impl.connectSSL(!_lazyHandshake);
+}
+
+
+void SecureStreamSocketImpl::bind(const SocketAddress& address, bool reuseAddress, bool reusePort)
+{
+ throw Poco::InvalidAccessException("Cannot bind() a SecureStreamSocketImpl");
+}
+
+
+void SecureStreamSocketImpl::listen(int /*backlog*/)
+{
+ throw Poco::InvalidAccessException("Cannot listen() on a SecureStreamSocketImpl");
+}
+
+
+void SecureStreamSocketImpl::close()
+{
+ reset();
+ _impl.close();
+}
+
+
+void SecureStreamSocketImpl::abort()
+{
+ reset();
+ _impl.abort();
+}
+
+
+int SecureStreamSocketImpl::sendBytes(const void* buffer, int length, int flags)
+{
+ return _impl.sendBytes(buffer, length, flags);
+}
+
+
+int SecureStreamSocketImpl::receiveBytes(void* buffer, int length, int flags)
+{
+ return _impl.receiveBytes(buffer, length, flags);
+}
+
+
+int SecureStreamSocketImpl::sendTo(const void* /*buffer*/, int /*length*/, const SocketAddress& /*address*/, int /*flags*/)
+{
+ throw Poco::InvalidAccessException("Cannot sendTo() on a SecureStreamSocketImpl");
+}
+
+
+int SecureStreamSocketImpl::receiveFrom(void* /*buffer*/, int /*length*/, SocketAddress& /*address*/, int /*flags*/)
+{
+ throw Poco::InvalidAccessException("Cannot receiveFrom() on a SecureStreamSocketImpl");
+}
+
+
+void SecureStreamSocketImpl::sendUrgent(unsigned char /*data*/)
+{
+ throw Poco::InvalidAccessException("Cannot sendUrgent() on a SecureStreamSocketImpl");
+}
+
+
+int SecureStreamSocketImpl::available()
+{
+ return _impl.available();
+}
+
+
+void SecureStreamSocketImpl::shutdownReceive()
+{
+}
+
+
+void SecureStreamSocketImpl::shutdownSend()
+{
+}
+
+
+void SecureStreamSocketImpl::shutdown()
+{
+ _impl.shutdown();
+}
+
+
+bool SecureStreamSocketImpl::secure() const
+{
+ return true;
+}
+
+
+bool SecureStreamSocketImpl::havePeerCertificate() const
+{
+ X509* pCert = _impl.peerCertificate();
+ if (pCert)
+ {
+ X509_free(pCert);
+ return true;
+ }
+ else return false;
+}
+
+
+X509Certificate SecureStreamSocketImpl::peerCertificate() const
+{
+ X509* pCert = _impl.peerCertificate();
+ if (pCert)
+ return X509Certificate(pCert);
+ else
+ throw SSLException("No certificate available");
+}
+
+
+void SecureStreamSocketImpl::setLazyHandshake(bool flag)
+{
+ _lazyHandshake = flag;
+}
+
+
+bool SecureStreamSocketImpl::getLazyHandshake() const
+{
+ return _lazyHandshake;
+}
+
+
+void SecureStreamSocketImpl::verifyPeerCertificate()
+{
+ _impl.verifyPeerCertificate();
+}
+
+
+void SecureStreamSocketImpl::verifyPeerCertificate(const std::string& hostName)
+{
+ _impl.verifyPeerCertificate(hostName);
+}
+
+
+int SecureStreamSocketImpl::completeHandshake()
+{
+ return _impl.completeHandshake();
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/Session.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/Session.cpp
index 96a507d946..a4e0989d53 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/Session.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/Session.cpp
@@ -1,40 +1,40 @@
-//
-// Session.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: Session
-//
-// Copyright (c) 2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#if defined(__APPLE__)
-// Some OpenSSL functions are deprecated in OS X 10.7
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
-
-
-#include "Poco/Net/Session.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-Session::Session(SSL_SESSION* pSession):
- _pSession(pSession)
-{
-}
-
-
-Session::~Session()
-{
- SSL_SESSION_free(_pSession);
-}
-
-
-} } // namespace Poco::Net
+//
+// Session.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: Session
+//
+// Copyright (c) 2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#if defined(__APPLE__)
+// Some OpenSSL functions are deprecated in OS X 10.7
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
+
+#include "Poco/Net/Session.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+Session::Session(SSL_SESSION* pSession):
+ _pSession(pSession)
+{
+}
+
+
+Session::~Session()
+{
+ SSL_SESSION_free(_pSession);
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/Utility.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/Utility.cpp
index 5428b76996..f6ab6cbeb6 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/Utility.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/Utility.cpp
@@ -1,71 +1,71 @@
-//
-// Utility.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: Utility
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/Utility.h"
-#include "Poco/String.h"
-#include "Poco/Util/OptionException.h"
-#include <openssl/err.h>
-
-
-namespace Poco {
-namespace Net {
-
-
-Context::VerificationMode Utility::convertVerificationMode(const std::string& vMode)
-{
- std::string mode = Poco::toLower(vMode);
- Context::VerificationMode verMode = Context::VERIFY_STRICT;
-
- if (mode == "none")
- verMode = Context::VERIFY_NONE;
- else if (mode == "relaxed")
- verMode = Context::VERIFY_RELAXED;
- else if (mode == "strict")
- verMode = Context::VERIFY_STRICT;
- else if (mode == "once")
- verMode = Context::VERIFY_ONCE;
- else
- throw Poco::InvalidArgumentException("Invalid verification mode. Should be relaxed, strict or once but got", vMode);
-
- return verMode;
-}
-
-
-std::string Utility::convertCertificateError(long errCode)
-{
- std::string errMsg(X509_verify_cert_error_string(errCode));
- return errMsg;
-}
-
-
-std::string Utility::getLastError()
-{
- unsigned long errCode = ERR_get_error();
- if (errCode != 0)
- {
- char buffer[256];
- ERR_error_string_n(errCode, buffer, sizeof(buffer));
- return std::string(buffer);
- }
- else return "No error";
-}
-
-
-void Utility::clearErrorStack()
-{
- ERR_clear_error();
-}
-
-
-} } // namespace Poco::Net
+//
+// Utility.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: Utility
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/Utility.h"
+#include "Poco/String.h"
+#include "Poco/Util/OptionException.h"
+#include <openssl/err.h>
+
+
+namespace Poco {
+namespace Net {
+
+
+Context::VerificationMode Utility::convertVerificationMode(const std::string& vMode)
+{
+ std::string mode = Poco::toLower(vMode);
+ Context::VerificationMode verMode = Context::VERIFY_STRICT;
+
+ if (mode == "none")
+ verMode = Context::VERIFY_NONE;
+ else if (mode == "relaxed")
+ verMode = Context::VERIFY_RELAXED;
+ else if (mode == "strict")
+ verMode = Context::VERIFY_STRICT;
+ else if (mode == "once")
+ verMode = Context::VERIFY_ONCE;
+ else
+ throw Poco::InvalidArgumentException("Invalid verification mode. Should be relaxed, strict or once but got", vMode);
+
+ return verMode;
+}
+
+
+std::string Utility::convertCertificateError(long errCode)
+{
+ std::string errMsg(X509_verify_cert_error_string(errCode));
+ return errMsg;
+}
+
+
+std::string Utility::getLastError()
+{
+ unsigned long errCode = ERR_get_error();
+ if (errCode != 0)
+ {
+ char buffer[256];
+ ERR_error_string_n(errCode, buffer, sizeof(buffer));
+ return std::string(buffer);
+ }
+ else return "No error";
+}
+
+
+void Utility::clearErrorStack()
+{
+ ERR_clear_error();
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/VerificationErrorArgs.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/VerificationErrorArgs.cpp
index f7f6451b1c..cb6917340a 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/VerificationErrorArgs.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/VerificationErrorArgs.cpp
@@ -1,37 +1,37 @@
-//
-// VerificationErrorArgs.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: VerificationErrorArgs
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/VerificationErrorArgs.h"
-
-
-namespace Poco {
-namespace Net {
-
-
-VerificationErrorArgs::VerificationErrorArgs(const X509Certificate& cert, int errDepth, int errNum, const std::string& errMsg):
- _cert(cert),
- _errorDepth(errDepth),
- _errorNumber(errNum),
- _errorMessage(errMsg),
- _ignoreError(false)
-{
-}
-
-
-VerificationErrorArgs::~VerificationErrorArgs()
-{
-}
-
-
-} } // namespace Poco::Net
+//
+// VerificationErrorArgs.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: VerificationErrorArgs
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/VerificationErrorArgs.h"
+
+
+namespace Poco {
+namespace Net {
+
+
+VerificationErrorArgs::VerificationErrorArgs(const X509Certificate& cert, int errDepth, int errNum, const std::string& errMsg):
+ _cert(cert),
+ _errorDepth(errDepth),
+ _errorNumber(errNum),
+ _errorMessage(errMsg),
+ _ignoreError(false)
+{
+}
+
+
+VerificationErrorArgs::~VerificationErrorArgs()
+{
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/src/X509Certificate.cpp b/contrib/libs/poco/NetSSL_OpenSSL/src/X509Certificate.cpp
index 54651c3ac8..188d909790 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/src/X509Certificate.cpp
+++ b/contrib/libs/poco/NetSSL_OpenSSL/src/X509Certificate.cpp
@@ -1,175 +1,175 @@
-//
-// X509Certificate.cpp
-//
-// Library: NetSSL_OpenSSL
-// Package: SSLCore
-// Module: X509Certificate
-//
-// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Net/X509Certificate.h"
-#include "Poco/Net/SSLException.h"
-#include "Poco/Net/SSLManager.h"
-#include "Poco/Net/DNS.h"
-#include "Poco/TemporaryFile.h"
-#include "Poco/FileStream.h"
-#include "Poco/StreamCopier.h"
-#include "Poco/String.h"
-#include "Poco/RegularExpression.h"
-#include "Poco/DateTimeParser.h"
-#include <openssl/pem.h>
-#include <openssl/x509v3.h>
-#include <openssl/err.h>
-
-
-namespace Poco {
-namespace Net {
-
-
-X509Certificate::X509Certificate(std::istream& istr):
- Poco::Crypto::X509Certificate(istr)
-{
-}
-
-
-X509Certificate::X509Certificate(const std::string& path):
- Poco::Crypto::X509Certificate(path)
-{
-}
-
-
-X509Certificate::X509Certificate(X509* pCert):
- Poco::Crypto::X509Certificate(pCert)
-{
-}
-
-
-X509Certificate::X509Certificate(X509* pCert, bool shared):
- Poco::Crypto::X509Certificate(pCert, shared)
-{
-}
-
-
-X509Certificate::X509Certificate(const Poco::Crypto::X509Certificate& cert):
- Poco::Crypto::X509Certificate(cert)
-{
-}
-
-
-X509Certificate& X509Certificate::operator = (const Poco::Crypto::X509Certificate& cert)
-{
- X509Certificate tmp(cert);
- swap(tmp);
- return *this;
-}
-
-
-X509Certificate::~X509Certificate()
-{
-}
-
-
-bool X509Certificate::verify(const std::string& hostName) const
-{
- return verify(*this, hostName);
-}
-
-
-bool X509Certificate::verify(const Poco::Crypto::X509Certificate& certificate, const std::string& hostName)
-{
-#if OPENSSL_VERSION_NUMBER < 0x10002000L
- std::string commonName;
- std::set<std::string> dnsNames;
- certificate.extractNames(commonName, dnsNames);
- if (!commonName.empty()) dnsNames.insert(commonName);
- bool ok = (dnsNames.find(hostName) != dnsNames.end());
- if (!ok)
- {
- for (std::set<std::string>::const_iterator it = dnsNames.begin(); !ok && it != dnsNames.end(); ++it)
- {
- try
- {
- // two cases: name contains wildcards or not
- if (containsWildcards(*it))
- {
- // a compare by IPAddress is not possible with wildcards
- // only allow compare by name
- ok = matchWildcard(*it, hostName);
- }
- else
- {
- // it depends on hostName whether we compare by IP or by alias
- IPAddress ip;
- if (IPAddress::tryParse(hostName, ip))
- {
- // compare by IP
- const HostEntry& heData = DNS::resolve(*it);
- const HostEntry::AddressList& addr = heData.addresses();
- HostEntry::AddressList::const_iterator it = addr.begin();
- HostEntry::AddressList::const_iterator itEnd = addr.end();
- for (; it != itEnd && !ok; ++it)
- {
- ok = (*it == ip);
- }
- }
- else
- {
- ok = Poco::icompare(*it, hostName) == 0;
- }
- }
- }
- catch (NoAddressFoundException&)
- {
- }
- catch (HostNotFoundException&)
- {
- }
- }
- }
- return ok;
-#else
- if (X509_check_host(const_cast<X509*>(certificate.certificate()), hostName.c_str(), hostName.length(), 0, NULL) == 1)
- {
- return true;
- }
- else
- {
- IPAddress ip;
- if (IPAddress::tryParse(hostName, ip))
- {
- return (X509_check_ip_asc(const_cast<X509*>(certificate.certificate()), hostName.c_str(), 0) == 1);
- }
- }
- return false;
-#endif
-}
-
-
-bool X509Certificate::containsWildcards(const std::string& commonName)
-{
- return (commonName.find('*') != std::string::npos || commonName.find('?') != std::string::npos);
-}
-
-
-bool X509Certificate::matchWildcard(const std::string& wildcard, const std::string& hostName)
-{
- // fix wildcards
- std::string wildcardExpr("^");
- wildcardExpr += Poco::replace(wildcard, ".", "\\.");
- Poco::replaceInPlace(wildcardExpr, "*", ".*");
- Poco::replaceInPlace(wildcardExpr, "..*", ".*");
- Poco::replaceInPlace(wildcardExpr, "?", ".?");
- Poco::replaceInPlace(wildcardExpr, "..?", ".?");
- wildcardExpr += "$";
-
- Poco::RegularExpression expr(wildcardExpr, Poco::RegularExpression::RE_CASELESS);
- return expr.match(hostName);
-}
-
-
-} } // namespace Poco::Net
+//
+// X509Certificate.cpp
+//
+// Library: NetSSL_OpenSSL
+// Package: SSLCore
+// Module: X509Certificate
+//
+// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Net/X509Certificate.h"
+#include "Poco/Net/SSLException.h"
+#include "Poco/Net/SSLManager.h"
+#include "Poco/Net/DNS.h"
+#include "Poco/TemporaryFile.h"
+#include "Poco/FileStream.h"
+#include "Poco/StreamCopier.h"
+#include "Poco/String.h"
+#include "Poco/RegularExpression.h"
+#include "Poco/DateTimeParser.h"
+#include <openssl/pem.h>
+#include <openssl/x509v3.h>
+#include <openssl/err.h>
+
+
+namespace Poco {
+namespace Net {
+
+
+X509Certificate::X509Certificate(std::istream& istr):
+ Poco::Crypto::X509Certificate(istr)
+{
+}
+
+
+X509Certificate::X509Certificate(const std::string& path):
+ Poco::Crypto::X509Certificate(path)
+{
+}
+
+
+X509Certificate::X509Certificate(X509* pCert):
+ Poco::Crypto::X509Certificate(pCert)
+{
+}
+
+
+X509Certificate::X509Certificate(X509* pCert, bool shared):
+ Poco::Crypto::X509Certificate(pCert, shared)
+{
+}
+
+
+X509Certificate::X509Certificate(const Poco::Crypto::X509Certificate& cert):
+ Poco::Crypto::X509Certificate(cert)
+{
+}
+
+
+X509Certificate& X509Certificate::operator = (const Poco::Crypto::X509Certificate& cert)
+{
+ X509Certificate tmp(cert);
+ swap(tmp);
+ return *this;
+}
+
+
+X509Certificate::~X509Certificate()
+{
+}
+
+
+bool X509Certificate::verify(const std::string& hostName) const
+{
+ return verify(*this, hostName);
+}
+
+
+bool X509Certificate::verify(const Poco::Crypto::X509Certificate& certificate, const std::string& hostName)
+{
+#if OPENSSL_VERSION_NUMBER < 0x10002000L
+ std::string commonName;
+ std::set<std::string> dnsNames;
+ certificate.extractNames(commonName, dnsNames);
+ if (!commonName.empty()) dnsNames.insert(commonName);
+ bool ok = (dnsNames.find(hostName) != dnsNames.end());
+ if (!ok)
+ {
+ for (std::set<std::string>::const_iterator it = dnsNames.begin(); !ok && it != dnsNames.end(); ++it)
+ {
+ try
+ {
+ // two cases: name contains wildcards or not
+ if (containsWildcards(*it))
+ {
+ // a compare by IPAddress is not possible with wildcards
+ // only allow compare by name
+ ok = matchWildcard(*it, hostName);
+ }
+ else
+ {
+ // it depends on hostName whether we compare by IP or by alias
+ IPAddress ip;
+ if (IPAddress::tryParse(hostName, ip))
+ {
+ // compare by IP
+ const HostEntry& heData = DNS::resolve(*it);
+ const HostEntry::AddressList& addr = heData.addresses();
+ HostEntry::AddressList::const_iterator it = addr.begin();
+ HostEntry::AddressList::const_iterator itEnd = addr.end();
+ for (; it != itEnd && !ok; ++it)
+ {
+ ok = (*it == ip);
+ }
+ }
+ else
+ {
+ ok = Poco::icompare(*it, hostName) == 0;
+ }
+ }
+ }
+ catch (NoAddressFoundException&)
+ {
+ }
+ catch (HostNotFoundException&)
+ {
+ }
+ }
+ }
+ return ok;
+#else
+ if (X509_check_host(const_cast<X509*>(certificate.certificate()), hostName.c_str(), hostName.length(), 0, NULL) == 1)
+ {
+ return true;
+ }
+ else
+ {
+ IPAddress ip;
+ if (IPAddress::tryParse(hostName, ip))
+ {
+ return (X509_check_ip_asc(const_cast<X509*>(certificate.certificate()), hostName.c_str(), 0) == 1);
+ }
+ }
+ return false;
+#endif
+}
+
+
+bool X509Certificate::containsWildcards(const std::string& commonName)
+{
+ return (commonName.find('*') != std::string::npos || commonName.find('?') != std::string::npos);
+}
+
+
+bool X509Certificate::matchWildcard(const std::string& wildcard, const std::string& hostName)
+{
+ // fix wildcards
+ std::string wildcardExpr("^");
+ wildcardExpr += Poco::replace(wildcard, ".", "\\.");
+ Poco::replaceInPlace(wildcardExpr, "*", ".*");
+ Poco::replaceInPlace(wildcardExpr, "..*", ".*");
+ Poco::replaceInPlace(wildcardExpr, "?", ".?");
+ Poco::replaceInPlace(wildcardExpr, "..?", ".?");
+ wildcardExpr += "$";
+
+ Poco::RegularExpression expr(wildcardExpr, Poco::RegularExpression::RE_CASELESS);
+ return expr.match(hostName);
+}
+
+
+} } // namespace Poco::Net
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/ya.make b/contrib/libs/poco/NetSSL_OpenSSL/ya.make
index ba6f99d872..c72bf7603f 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/ya.make
+++ b/contrib/libs/poco/NetSSL_OpenSSL/ya.make
@@ -1,7 +1,7 @@
-# Generated by devtools/yamaker.
-
-LIBRARY()
-
+# Generated by devtools/yamaker.
+
+LIBRARY()
+
OWNER(
orivej
g:cpp-contrib
@@ -14,57 +14,57 @@ LICENSE(
LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
-PEERDIR(
- contrib/libs/openssl
- contrib/libs/poco/Crypto
- contrib/libs/poco/Foundation
- contrib/libs/poco/JSON
- contrib/libs/poco/Net
- contrib/libs/poco/Util
- contrib/libs/poco/XML
-)
-
-ADDINCL(
- GLOBAL contrib/libs/poco/NetSSL_OpenSSL/include
- contrib/libs/poco/Crypto/include
- contrib/libs/poco/Foundation/include
- contrib/libs/poco/Net/include
- contrib/libs/poco/NetSSL_OpenSSL/src
- contrib/libs/poco/Util/include
-)
-
-NO_COMPILER_WARNINGS()
-
-NO_UTIL()
-
-SRCS(
- src/AcceptCertificateHandler.cpp
- src/CertificateHandlerFactory.cpp
- src/CertificateHandlerFactoryMgr.cpp
- src/ConsoleCertificateHandler.cpp
- src/Context.cpp
- src/HTTPSClientSession.cpp
- src/HTTPSSessionInstantiator.cpp
- src/HTTPSStreamFactory.cpp
- src/InvalidCertificateHandler.cpp
- src/KeyConsoleHandler.cpp
- src/KeyFileHandler.cpp
- src/PrivateKeyFactory.cpp
- src/PrivateKeyFactoryMgr.cpp
- src/PrivateKeyPassphraseHandler.cpp
- src/RejectCertificateHandler.cpp
- src/SSLException.cpp
- src/SSLManager.cpp
- src/SecureSMTPClientSession.cpp
- src/SecureServerSocket.cpp
- src/SecureServerSocketImpl.cpp
- src/SecureSocketImpl.cpp
- src/SecureStreamSocket.cpp
- src/SecureStreamSocketImpl.cpp
- src/Session.cpp
- src/Utility.cpp
- src/VerificationErrorArgs.cpp
- src/X509Certificate.cpp
-)
-
-END()
+PEERDIR(
+ contrib/libs/openssl
+ contrib/libs/poco/Crypto
+ contrib/libs/poco/Foundation
+ contrib/libs/poco/JSON
+ contrib/libs/poco/Net
+ contrib/libs/poco/Util
+ contrib/libs/poco/XML
+)
+
+ADDINCL(
+ GLOBAL contrib/libs/poco/NetSSL_OpenSSL/include
+ contrib/libs/poco/Crypto/include
+ contrib/libs/poco/Foundation/include
+ contrib/libs/poco/Net/include
+ contrib/libs/poco/NetSSL_OpenSSL/src
+ contrib/libs/poco/Util/include
+)
+
+NO_COMPILER_WARNINGS()
+
+NO_UTIL()
+
+SRCS(
+ src/AcceptCertificateHandler.cpp
+ src/CertificateHandlerFactory.cpp
+ src/CertificateHandlerFactoryMgr.cpp
+ src/ConsoleCertificateHandler.cpp
+ src/Context.cpp
+ src/HTTPSClientSession.cpp
+ src/HTTPSSessionInstantiator.cpp
+ src/HTTPSStreamFactory.cpp
+ src/InvalidCertificateHandler.cpp
+ src/KeyConsoleHandler.cpp
+ src/KeyFileHandler.cpp
+ src/PrivateKeyFactory.cpp
+ src/PrivateKeyFactoryMgr.cpp
+ src/PrivateKeyPassphraseHandler.cpp
+ src/RejectCertificateHandler.cpp
+ src/SSLException.cpp
+ src/SSLManager.cpp
+ src/SecureSMTPClientSession.cpp
+ src/SecureServerSocket.cpp
+ src/SecureServerSocketImpl.cpp
+ src/SecureSocketImpl.cpp
+ src/SecureStreamSocket.cpp
+ src/SecureStreamSocketImpl.cpp
+ src/Session.cpp
+ src/Utility.cpp
+ src/VerificationErrorArgs.cpp
+ src/X509Certificate.cpp
+)
+
+END()