Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit716911a

Browse files
author
Alexis Moinet
committed
Fix for issue#444 "Unable to compile without OpenSSL"
- add an option CPP-NETLIB_ENABLE_HTTPS to enable/disable HTTPS in cmake config. By default it is turned ON (enable HTTPS) so as to preserve before-patch behavior. Turn it OFF to disable entirely SSL usage and linkage in libraries and header files.- when SSL is disabled, the 'stream_handler' struct is replaced by a simple tcp_socket, and function calls in the files option.hpp, async_server.hpp and async_connection.hpp are adapted and compiled accordingly.Note that sync_...hpp files don't have problems (yet) since SSL isnot integrated into these. Also note that a cleaner solution mightbe to consider implementing two separate struct 'stream_handler' and'stream_handler_ssl', or something similar.
1 parent24f3a44 commit716911a

File tree

5 files changed

+46
-11
lines changed

5 files changed

+46
-11
lines changed

‎CMakeLists.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ option( CPP-NETLIB_BUILD_SHARED_LIBS "Build cpp-netlib as shared libraries." OFF
1010
option(CPP-NETLIB_BUILD_TESTS"Build the cpp-netlib project tests."ON)
1111
option(CPP-NETLIB_BUILD_EXPERIMENTS"Build the cpp-netlib project experiments."ON)
1212
option(CPP-NETLIB_BUILD_EXAMPLES"Build the cpp-netlib project examples."ON)
13+
option(CPP-NETLIB_ENABLE_HTTPS"Build cpp-netlib with support for https if OpenSSL is found."ON)
1314

1415
include(GNUInstallDirs)
1516

@@ -43,7 +44,11 @@ set(Boost_USE_MULTI_THREADED ON)
4344
find_package(Boost1.54.0
4445
REQUIREDunit_test_frameworksystemregexdate_timethreadfilesystem
4546
program_optionschronoatomic )
46-
find_package(OpenSSL )
47+
48+
if (CPP-NETLIB_ENABLE_HTTPS)
49+
find_package(OpenSSL )
50+
endif()
51+
4752
find_package(Threads )
4853
set(CMAKE_VERBOSE_MAKEFILEtrue)
4954

‎boost/network/protocol/http/server/async_connection.hpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,14 +174,18 @@ struct async_connection
174174
public:
175175
async_connection(asio::io_service& io_service, Handler& handler,
176176
utils::thread_pool& thread_pool,
177-
boost::shared_ptr<boost::asio::ssl::context> ctx =
178-
boost::shared_ptr<boost::asio::ssl::context>())
177+
boost::shared_ptr<ssl_context> ctx =
178+
boost::shared_ptr<ssl_context>())
179179
: strand(io_service),
180180
handler(handler),
181181
thread_pool_(thread_pool),
182182
headers_buffer(
183183
BOOST_NETWORK_HTTP_SERVER_CONNECTION_HEADER_BUFFER_MAX_SIZE),
184+
#ifdef BOOST_NETWORK_ENABLE_HTTPS
184185
socket_(io_service, ctx),
186+
#else
187+
socket_(io_service),
188+
#endif
185189
handshake_done(false),
186190
headers_already_sent(false),
187191
headers_in_progress(false) {
@@ -379,21 +383,25 @@ struct async_connection
379383
}
380384

381385
voidread_more(state_t state) {
386+
#ifdef BOOST_NETWORK_ENABLE_HTTPS
382387
if (socket_.is_ssl_enabled() && !handshake_done) {
383388
socket_.async_handshake(
384389
boost::asio::ssl::stream_base::server,
385390
boost::bind(&async_connection::handle_handshake,
386391
async_connection<Tag, Handler>::shared_from_this(),
387392
boost::asio::placeholders::error, state));
388393
}else {
394+
#endif
389395
socket_.async_read_some(
390396
asio::buffer(read_buffer_),
391397
strand.wrap(
392398
boost::bind(&async_connection<Tag, Handler>::handle_read_data,
393399
async_connection<Tag, Handler>::shared_from_this(),
394400
state, boost::asio::placeholders::error,
395401
boost::asio::placeholders::bytes_transferred)));
402+
#ifdef BOOST_NETWORK_ENABLE_HTTPS
396403
}
404+
#endif
397405
}
398406

399407
voidhandle_read_data(state_t state, boost::system::error_codeconst& ec,

‎boost/network/protocol/http/server/async_server.hpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ struct async_server_base : server_storage_base, socket_options_base {
8989
boost::mutex listening_mutex_;
9090
boost::mutex stopping_mutex_;
9191
bool listening;
92-
boost::shared_ptr<boost::asio::ssl::context> ctx_;
92+
boost::shared_ptr<ssl_context> ctx_;
9393

9494
voidhandle_stop() {
9595
scoped_mutex_lockstopping_lock(stopping_mutex_);
@@ -111,12 +111,20 @@ struct async_server_base : server_storage_base, socket_options_base {
111111
BOOST_NETWORK_MESSAGE("Error accepting connection, reason:" << ec);
112112
}
113113

114+
#ifdef BOOST_NETWORK_ENABLE_HTTPS
114115
socket_options_base::socket_options(new_connection->socket().next_layer());
116+
#else
117+
socket_options_base::socket_options(new_connection->socket());
118+
#endif
115119

116120
new_connection->start();
117121
new_connection.reset(newconnection(service_, handler, *thread_pool, ctx_));
118122
acceptor.async_accept(
123+
#ifdef BOOST_NETWORK_ENABLE_HTTPS
119124
new_connection->socket().next_layer(),
125+
#else
126+
new_connection->socket(),
127+
#endif
120128
boost::bind(&async_server_base<Tag, Handler>::handle_accept,this,
121129
boost::asio::placeholders::error));
122130
}
@@ -155,7 +163,11 @@ struct async_server_base : server_storage_base, socket_options_base {
155163
}
156164
new_connection.reset(newconnection(service_, handler, *thread_pool, ctx_));
157165
acceptor.async_accept(
166+
#ifdef BOOST_NETWORK_ENABLE_HTTPS
158167
new_connection->socket().next_layer(),
168+
#else
169+
new_connection->socket(),
170+
#endif
159171
boost::bind(&async_server_base<Tag, Handler>::handle_accept,this,
160172
boost::asio::placeholders::error));
161173
listening =true;

‎boost/network/protocol/http/server/options.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
#include<boost/asio/io_service.hpp>
1212
#include<boost/asio/socket_base.hpp>
13-
#include<boost/asio/ssl.hpp>
13+
#include<boost/network/protocol/stream_handler.hpp>
1414
#include<boost/network/traits/string.hpp>
1515
#include<boost/network/utils/thread_pool.hpp>
1616
#include<boost/optional.hpp>
@@ -81,7 +81,7 @@ struct server_options {
8181
swap(context_, other.context_);
8282
}
8383

84-
server_options &context(boost::shared_ptr<boost::asio::ssl::context> v) {
84+
server_options &context(boost::shared_ptr<ssl_context> v) {
8585
context_ = v;
8686
return *this;
8787
}
@@ -172,7 +172,7 @@ struct server_options {
172172
boost::shared_ptr<utils::thread_pool>thread_pool()const {
173173
return thread_pool_;
174174
}
175-
boost::shared_ptr<boost::asio::ssl::context>context()const {
175+
boost::shared_ptr<ssl_context>context()const {
176176
return context_;
177177
}
178178

@@ -194,7 +194,7 @@ struct server_options {
194194
boost::optional<boost::asio::socket_base::send_low_watermark>
195195
send_low_watermark_;
196196
boost::shared_ptr<utils::thread_pool> thread_pool_;
197-
boost::shared_ptr<boost::asio::ssl::context> context_;
197+
boost::shared_ptr<ssl_context> context_;
198198
};
199199

200200
template<classTag,classHandler>

‎boost/network/protocol/stream_handler.hpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
#include<boost/asio/detail/throw_error.hpp>
1515
#include<boost/asio/error.hpp>
1616
#include<boost/asio.hpp>
17+
#ifdef BOOST_NETWORK_ENABLE_HTTPS
1718
#include<boost/asio/ssl.hpp>
19+
#endif
1820
#include<boost/asio/detail/push_options.hpp>
1921
#include<boost/asio/detail/config.hpp>
2022
#include<boost/asio/detail/handler_type_requirements.hpp>
@@ -28,9 +30,16 @@
2830
namespaceboost {
2931
namespacenetwork {
3032

31-
typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> ssl_socket;
3233
typedef boost::asio::ip::tcp::socket tcp_socket;
3334

35+
#ifndef BOOST_NETWORK_ENABLE_HTTPS
36+
typedef tcp_socket stream_handler;
37+
typedefvoid ssl_context;
38+
#else
39+
40+
typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> ssl_socket;
41+
typedef boost::asio::ssl::context ssl_context;
42+
3443
structstream_handler {
3544
public:
3645
stream_handler(boost::shared_ptr<tcp_socket> socket)
@@ -42,8 +51,8 @@ struct stream_handler {
4251
: ssl_sock_(socket), ssl_enabled(true) {}
4352

4453
stream_handler(boost::asio::io_service& io,
45-
boost::shared_ptr<boost::asio::ssl::context> ctx =
46-
boost::shared_ptr<boost::asio::ssl::context>()) {
54+
boost::shared_ptr<ssl_context> ctx =
55+
boost::shared_ptr<ssl_context>()) {
4756
tcp_sock_ = boost::make_shared<tcp_socket>(boost::ref(io));
4857
ssl_enabled =false;
4958
if (ctx) {
@@ -172,6 +181,7 @@ struct stream_handler {
172181
boost::shared_ptr<ssl_socket> ssl_sock_;
173182
bool ssl_enabled;
174183
};
184+
#endif
175185
}
176186
}
177187

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp