blocxx
src
blocxx
Socket_needs_SSL.cpp
Go to the documentation of this file.
1
/*******************************************************************************
2
* Copyright (C) 2005, Vintela, Inc. All rights reserved.
3
* Copyright (C) 2006, Novell, Inc. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are met:
7
*
8
* * Redistributions of source code must retain the above copyright notice,
9
* this list of conditions and the following disclaimer.
10
* * Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* * Neither the name of
14
* Vintela, Inc.,
15
* nor Novell, Inc.,
16
* nor the names of its contributors or employees may be used to
17
* endorse or promote products derived from this software without
18
* specific prior written permission.
19
*
20
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
* POSSIBILITY OF SUCH DAMAGE.
31
*******************************************************************************/
32
33
39
#include "blocxx/BLOCXX_config.h"
40
#include "
blocxx/Socket.hpp
"
41
#include "
blocxx/SocketImpl.hpp
"
42
#include "
blocxx/SSLException.hpp
"
43
#include "
blocxx/SSLSocketImpl.hpp
"
44
45
// This code was pulled out of BLOCXX_Socket.cpp so that programs that use
46
// Socket but don't need SSL don't have to pull in the SSL libraries.
47
48
namespace
BLOCXX_NAMESPACE
49
{
50
52
Socket::Socket
(
const
SSLClientCtxRef
& sslCtx)
53
{
54
if
(sslCtx)
55
{
56
#ifndef BLOCXX_NO_SSL
57
m_impl
=
SocketBaseImplRef
(
new
SSLSocketImpl
(sslCtx));
58
#else
59
BLOCXX_THROW
(
SSLException
,
"Not built with SSL"
);
60
#endif
// #ifndef BLOCXX_NO_SSL
61
}
62
else
63
{
64
m_impl
=
SocketBaseImplRef
(
new
SocketImpl
);
65
}
66
}
67
69
Socket::Socket
(
SocketFlags::ESSLFlag
isSSL)
70
{
71
if
(isSSL ==
SocketFlags::E_SSL
)
72
{
73
#ifndef BLOCXX_NO_SSL
74
m_impl
=
SocketBaseImplRef
(
new
SSLSocketImpl
);
75
#else
76
BLOCXX_THROW
(
SSLException
,
"Not built with SSL"
);
77
#endif
// #ifndef BLOCXX_NO_SSL
78
}
79
else
80
{
81
m_impl
=
SocketBaseImplRef
(
new
SocketImpl
);
82
}
83
}
85
Socket::Socket
(
SocketHandle_t
fd,
86
SocketAddress::AddressType
addrType,
SocketFlags::ESSLFlag
isSSL)
87
{
88
if
(isSSL ==
SocketFlags::E_SSL
)
89
{
90
#ifndef BLOCXX_NO_SSL
91
m_impl
=
SocketBaseImplRef
(
new
SSLSocketImpl
(fd, addrType));
92
#else
93
BLOCXX_THROW
(
SSLException
,
"Not built with SSL"
);
94
#endif
// #ifndef BLOCXX_NO_SSL
95
}
96
else
97
{
98
m_impl
=
SocketBaseImplRef
(
new
SocketImpl
(fd, addrType));
99
}
100
}
102
// Used by ServerSocket2::accept()
103
Socket::Socket
(
SocketHandle_t
fd,
104
SocketAddress::AddressType
addrType,
const
SSLServerCtxRef
& sslCtx)
105
{
106
if
(sslCtx)
107
{
108
#ifndef BLOCXX_NO_SSL
109
m_impl
=
SocketBaseImplRef
(
new
SSLSocketImpl
(fd, addrType, sslCtx));
110
#else
111
BLOCXX_THROW
(
SSLException
,
"Not built with SSL"
);
112
#endif
// #ifndef BLOCXX_NO_SSL
113
}
114
else
115
{
116
m_impl
=
SocketBaseImplRef
(
new
SocketImpl
(fd, addrType));
117
}
118
}
120
Socket::Socket
(
const
SocketAddress
& addr,
SocketFlags::ESSLFlag
isSSL)
121
{
122
if
(isSSL ==
SocketFlags::E_SSL
)
123
{
124
#ifndef BLOCXX_NO_SSL
125
m_impl
=
SocketBaseImplRef
(
new
SSLSocketImpl
(addr));
126
#else
127
BLOCXX_THROW
(
SSLException
,
"Not built with SSL"
);
128
#endif
// #ifndef BLOCXX_NO_SSL
129
}
130
else
131
{
132
m_impl
=
SocketBaseImplRef
(
new
SocketImpl
(addr));
133
}
134
}
135
136
#ifndef BLOCXX_NO_SSL
137
SSL*
138
Socket::getSSL
()
const
139
{
140
IntrusiveReference<SSLSocketImpl>
sslsock =
m_impl
.
cast_to
<
SSLSocketImpl
>();
141
if
(!sslsock)
142
{
143
return
0;
144
}
145
return
sslsock->getSSL();
146
}
147
149
bool
150
Socket::peerCertVerified
()
const
151
{
152
IntrusiveReference<SSLSocketImpl>
sslsock =
m_impl
.
cast_to
<
SSLSocketImpl
>();
153
if
(!sslsock)
154
{
155
return
false
;
156
}
157
return
sslsock->peerCertVerified();
158
}
159
#endif
160
161
}
// namespace BLOCXX_NAMESPACE
BLOCXX_THROW
#define BLOCXX_THROW(exType, msg)
Throw an exception using FILE and LINE.
Definition
Exception.hpp:263
SSLException.hpp
SSLSocketImpl.hpp
Socket.hpp
SocketImpl.hpp
BLOCXX_NAMESPACE::IntrusiveReference< SSLClientCtx >
BLOCXX_NAMESPACE::IntrusiveReference::cast_to
IntrusiveReference< U > cast_to() const
Definition
IntrusiveReference.hpp:152
BLOCXX_NAMESPACE::SSLException
Definition
SSLException.hpp:47
BLOCXX_NAMESPACE::SSLSocketImpl
Definition
SSLSocketImpl.hpp:57
BLOCXX_NAMESPACE::SocketAddress
Definition
SocketAddress.hpp:56
BLOCXX_NAMESPACE::SocketAddress::AddressType
AddressType
Definition
SocketAddress.hpp:61
BLOCXX_NAMESPACE::Socket::Socket
Socket()
Construct a non-SSL Socket.
Definition
Socket.cpp:60
BLOCXX_NAMESPACE::Socket::peerCertVerified
bool peerCertVerified() const
did the peer certificate pass verification?
Definition
Socket_needs_SSL.cpp:150
BLOCXX_NAMESPACE::Socket::getSSL
SSL * getSSL() const
get the SSL structure associated with the socket (if it is an SSL socket)
Definition
Socket_needs_SSL.cpp:138
BLOCXX_NAMESPACE::Socket::m_impl
SocketBaseImplRef m_impl
Definition
Socket.hpp:332
BLOCXX_NAMESPACE::SocketImpl
Definition
SocketImpl.hpp:56
BLOCXX_NAMESPACE::SocketFlags::ESSLFlag
ESSLFlag
Definition
SocketFlags.hpp:49
BLOCXX_NAMESPACE::SocketFlags::E_SSL
@ E_SSL
Definition
SocketFlags.hpp:51
BLOCXX_NAMESPACE
Taken from RFC 1321.
Definition
AppenderLogger.cpp:48
BLOCXX_NAMESPACE::SocketBaseImplRef
IntrusiveReference< SocketBaseImpl > SocketBaseImplRef
Definition
CommonFwd.hpp:124
BLOCXX_NAMESPACE::SocketHandle_t
int SocketHandle_t
Definition
NetworkTypes.hpp:97
Generated by
1.12.0