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
38
39#include "blocxx/BLOCXX_config.h"
40#include "blocxx/Socket.hpp"
41#include "blocxx/SocketImpl.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
48namespace BLOCXX_NAMESPACE
49{
50
53{
54 if (sslCtx)
55 {
56#ifndef BLOCXX_NO_SSL
58#else
59 BLOCXX_THROW(SSLException, "Not built with SSL");
60#endif // #ifndef BLOCXX_NO_SSL
61 }
62 else
63 {
65 }
66}
67
70{
71 if (isSSL == SocketFlags::E_SSL)
72 {
73#ifndef BLOCXX_NO_SSL
75#else
76 BLOCXX_THROW(SSLException, "Not built with SSL");
77#endif // #ifndef BLOCXX_NO_SSL
78 }
79 else
80 {
82 }
83}
84
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}
101
102// Used by ServerSocket2::accept()
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}
119
121{
122 if (isSSL == SocketFlags::E_SSL)
123 {
124#ifndef BLOCXX_NO_SSL
126#else
127 BLOCXX_THROW(SSLException, "Not built with SSL");
128#endif // #ifndef BLOCXX_NO_SSL
129 }
130 else
131 {
133 }
134}
135
136#ifndef BLOCXX_NO_SSL
137SSL*
139{
141 if (!sslsock)
142 {
143 return 0;
144 }
145 return sslsock->getSSL();
146}
147
149bool
151{
153 if (!sslsock)
154 {
155 return false;
156 }
157 return sslsock->peerCertVerified();
158}
159#endif
160
161} // namespace BLOCXX_NAMESPACE
#define BLOCXX_THROW(exType, msg)
Throw an exception using FILE and LINE.
Socket()
Construct a non-SSL Socket.
Definition Socket.cpp:60
bool peerCertVerified() const
did the peer certificate pass verification?
SSL * getSSL() const
get the SSL structure associated with the socket (if it is an SSL socket)
SocketBaseImplRef m_impl
Definition Socket.hpp:332
Taken from RFC 1321.
IntrusiveReference< SocketBaseImpl > SocketBaseImplRef
IntrusiveReference< SSLServerCtx > SSLServerCtxRef
IntrusiveReference< SSLClientCtx > SSLClientCtxRef