1//
2// CertificateHandlerFactory.h
3//
4// Library: NetSSL_OpenSSL
5// Package: SSLCore
6// Module: CertificateHandlerFactory
7//
8// Definition of the CertificateHandlerFactory class.
9//
10// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
11// and Contributors.
12//
13// SPDX-License-Identifier: BSL-1.0
14//
15
16
17#ifndef NetSSL_CertificateHandlerFactory_INCLUDED
18#define NetSSL_CertificateHandlerFactory_INCLUDED
19
20
21#include "Poco/Net/NetSSL.h"
22
23
24namespace Poco {
25namespace Net {
26
27
28class InvalidCertificateHandler;
29
30
31class NetSSL_API CertificateHandlerFactory
32 /// A CertificateHandlerFactory is responsible for creating InvalidCertificateHandlers.
33 ///
34 /// You don't need to access this class directly. Use the macro
35 /// POCO_REGISTER_CHFACTORY(namespace, InvalidCertificateHandlerName)
36 /// instead (see the documentation of InvalidCertificateHandler for an example).
37{
38public:
39 CertificateHandlerFactory();
40 /// Creates the CertificateHandlerFactory.
41
42 virtual ~CertificateHandlerFactory();
43 /// Destroys the CertificateHandlerFactory.
44
45 virtual InvalidCertificateHandler* create(bool server) const = 0;
46 /// Creates a new InvalidCertificateHandler. Set server to true if the certificate handler is used on the server side.
47};
48
49
50class NetSSL_API CertificateHandlerFactoryRegistrar
51 /// Registrar class which automatically registers CertificateHandlerFactory at the CertificateHandlerFactoryMgr.
52 /// You don't need to access this class directly. Use the macro
53 /// POCO_REGISTER_CHFACTORY(namespace, InvalidCertificateHandlerName)
54 /// instead (see the documentation of InvalidCertificateHandler for an example).
55{
56public:
57 CertificateHandlerFactoryRegistrar(const std::string& name, CertificateHandlerFactory* pFactory);
58 /// Registers the CertificateHandlerFactory with the given name at the factory manager.
59
60 virtual ~CertificateHandlerFactoryRegistrar();
61 /// Destroys the CertificateHandlerFactoryRegistrar.
62};
63
64
65template <typename T>
66class CertificateHandlerFactoryImpl: public Poco::Net::CertificateHandlerFactory
67{
68public:
69 CertificateHandlerFactoryImpl()
70 {
71 }
72
73 ~CertificateHandlerFactoryImpl()
74 {
75 }
76
77 InvalidCertificateHandler* create(bool server) const
78 {
79 return new T(server);
80 }
81};
82
83
84} } // namespace Poco::Net
85
86
87// DEPRECATED: register the factory directly at the FactoryMgr:
88// Poco::Net::SSLManager::instance().certificateHandlerFactoryMgr().setFactory(name, new Poco::Net::CertificateHandlerFactoryImpl<MyConsoleHandler>());
89#define POCO_REGISTER_CHFACTORY(API, PKCLS) \
90 static Poco::Net::CertificateHandlerFactoryRegistrar aRegistrar(std::string(#PKCLS), new Poco::Net::CertificateHandlerFactoryImpl<PKCLS>());
91
92
93#endif // NetSSL_CertificateHandlerFactory_INCLUDED
94