1//
2// NetSSL.h
3//
4// Library: NetSSL_OpenSSL
5// Package: SSLCore
6// Module: OpenSSL
7//
8// Basic definitions for the Poco OpenSSL library.
9// This file must be the first file included by every other OpenSSL
10// header file.
11//
12// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH.
13// and Contributors.
14//
15// SPDX-License-Identifier: BSL-1.0
16//
17
18
19#ifndef NetSSL_NetSSL_INCLUDED
20#define NetSSL_NetSSL_INCLUDED
21
22
23#include "Poco/Net/Net.h"
24#include "Poco/Crypto/Crypto.h"
25
26//
27// The following block is the standard way of creating macros which make exporting
28// from a DLL simpler. All files within this DLL are compiled with the NetSSL_EXPORTS
29// symbol defined on the command line. this symbol should not be defined on any project
30// that uses this DLL. This way any other project whose source files include this file see
31// NetSSL_API functions as being imported from a DLL, whereas this DLL sees symbols
32// defined with this macro as being exported.
33//
34#if defined(POCO_COMPILER_MSVC) && defined(POCO_DLL)
35 #if defined(NetSSL_EXPORTS)
36 #define NetSSL_API __declspec(dllexport)
37 #else
38 #define NetSSL_API __declspec(dllimport)
39 #endif
40#endif
41
42
43#if !defined(NetSSL_API)
44 #if !defined(POCO_NO_GCC_API_ATTRIBUTE) && defined (__GNUC__) && (__GNUC__ >= 4)
45 #define NetSSL_API __attribute__ ((visibility ("default")))
46 #else
47 #define NetSSL_API
48 #endif
49#endif
50
51
52//
53// Automatically link NetSSL
54//
55#if defined(POCO_COMPILER_MSVC)
56 #if !defined(POCO_NO_AUTOMATIC_LIBS)
57 #if defined(POCO_INTERNAL_OPENSSL_MSVC_VER)
58 #if defined(POCO_EXTERNAL_OPENSSL)
59 #pragma warning "External OpenSSL defined but internal headers used - possible mismatch!"
60 #endif // POCO_EXTERNAL_OPENSSL
61 #if !defined(_DEBUG)
62 #define POCO_DEBUG_SUFFIX ""
63 #if !defined (_DLL)
64 #define POCO_STATIC_SUFFIX "mt"
65 #else // _DLL
66 #define POCO_STATIC_SUFFIX ""
67 #endif
68 #else // _DEBUG
69 #define POCO_DEBUG_SUFFIX "d"
70 #if !defined (_DLL)
71 #define POCO_STATIC_SUFFIX "mt"
72 #else // _DLL
73 #define POCO_STATIC_SUFFIX ""
74 #endif
75 #endif
76 #pragma comment(lib, "libcrypto" POCO_STATIC_SUFFIX POCO_DEBUG_SUFFIX ".lib")
77 #pragma comment(lib, "libssl" POCO_STATIC_SUFFIX POCO_DEBUG_SUFFIX ".lib")
78 #if !defined(_WIN64) && !defined (_DLL) && \
79 (POCO_INTERNAL_OPENSSL_MSVC_VER == 120) && \
80 (POCO_MSVC_VERSION < POCO_INTERNAL_OPENSSL_MSVC_VER)
81 #pragma comment(lib, "libPreVS2013CRT" POCO_STATIC_SUFFIX POCO_DEBUG_SUFFIX ".lib")
82 #endif
83 #if !defined (_DLL) && (POCO_MSVS_VERSION >= 2015)
84 #pragma comment(lib, "legacy_stdio_definitions.lib")
85 #pragma comment(lib, "legacy_stdio_wide_specifiers.lib")
86 #endif
87 #endif // POCO_INTERNAL_OPENSSL_MSVC_VER
88 #if !defined(NetSSL_EXPORTS)
89 #pragma comment(lib, "PocoNetSSL" POCO_LIB_SUFFIX)
90 #endif
91 #endif // POCO_NO_AUTOMATIC_LIBS
92#endif
93
94
95namespace Poco {
96namespace Net {
97
98
99void NetSSL_API initializeSSL();
100 /// Initialize the NetSSL library, as well as the underlying OpenSSL
101 /// libraries, by calling Poco::Crypto::OpenSSLInitializer::initialize().
102 ///
103 /// Should be called before using any class from the NetSSL library.
104 /// The NetSSL will be initialized automatically, through
105 /// Poco::Crypto::OpenSSLInitializer instances or similar mechanisms
106 /// when creating Context or SSLManager instances.
107 /// However, it is recommended to call initializeSSL()
108 /// in any case at application startup.
109 ///
110 /// Can be called multiple times; however, for every call to
111 /// initializeSSL(), a matching call to uninitializeSSL()
112 /// must be performed.
113
114
115void NetSSL_API uninitializeSSL();
116 /// Uninitializes the NetSSL library by calling
117 /// Poco::Crypto::OpenSSLInitializer::uninitialize() and
118 /// shutting down the SSLManager.
119
120
121} } // namespace Poco::Net
122
123
124#endif // NetSSL_NetSSL_INCLUDED
125