diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ccb1f2..570673a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ project (websocketpp) cmake_minimum_required (VERSION 2.6) set (WEBSOCKETPP_MAJOR_VERSION 0) -set (WEBSOCKETPP_MINOR_VERSION 5) +set (WEBSOCKETPP_MINOR_VERSION 6) set (WEBSOCKETPP_PATCH_VERSION 0) set (WEBSOCKETPP_VERSION ${WEBSOCKETPP_MAJOR_VERSION}.${WEBSOCKETPP_MINOR_VERSION}.${WEBSOCKETPP_PATCH_VERSION}) diff --git a/Doxyfile b/Doxyfile index 105729c..49256bb 100644 --- a/Doxyfile +++ b/Doxyfile @@ -33,7 +33,7 @@ PROJECT_NAME = "websocketpp" # if some version control system is used. -PROJECT_NUMBER = "0.5.x-dev" +PROJECT_NUMBER = "0.6.x-dev" # Using the PROJECT_BRIEF tag one can provide an optional one line description diff --git a/changelog.md b/changelog.md index 6452f26..e42efe1 100644 --- a/changelog.md +++ b/changelog.md @@ -2,17 +2,37 @@ HEAD - BREAKING TRANSPORT POLICY CHANGE: Custom transport policies will now be required to include a new method `void set_uri(uri_ptr u)`. An implementation is not required. The stub transport policy includes an example stub method - that can be pasted into any existing custom transport policy to fulfill this + that can be added to any existing custom transport policy to fulfill this requirement. This does not affect anyone using the bundled transports or configs. - BREAKING SOCKET POLICY CHANGE: Custom asio transport socket policies will now be required to include a new method `void set_uri(uri_ptr u)`. Like with the transport layer, an implementation is not required. This does not affect anyone using the bundled socket policies. -- Improvement: Outgoing TLS connections to servers using the SNI extension to - choose a certificate will now work. +- Feature: WebSocket++ Asio transport policy can now be used with the standalone + version of Asio (1.8.0+) when a C++11 compiler and standard library are + present. This means that it is possible now to use WebSocket++'s Asio + transport entirely without Boost. - Feature: Adds a vectored/scatter-gather write handler to the iostream transport. +- Improvement: `endpoint::set_timer` now uses a steady clock provided by + `boost::chrono` or `std::chrono` where available instead of the non-monotonic + system clock. Thank you breyed for reporting. fixes #241 +- Improvement: Outgoing TLS connections to servers using the SNI extension to + choose a certificate will now work. +- Cleanup: Asio transport policy has been refactored to remove many Boost + dependencies. On C++03 compilers the `boost::noncopyable` dependency has been + removed and the `boost::date_time` dependency has been replaced with the newer + `boost::chrono` when possible. On C++11 compilers the `boost::aligned_storage` + and `boost::date_time` dependencies are gone, replaced with equivalent C++11 + standard library features. + +0.5.1 - 2015-02-27 +- Bug: Fixes an issue where some frame data was counted against the max header + size limit, resulting in connections that included a lot of frame data + immediately after the opening handshake to fail. +- Bug: Fix a typo in the name of the set method for `max_http_body_size`. #406 + Thank you jplatte for reporting. 0.5.0 - 2015-01-22 - BREAKING UTILITY CHANGE: Deprecated methods `http::parser::parse_headers`, diff --git a/examples/telemetry_client/telemetry_client.cpp b/examples/telemetry_client/telemetry_client.cpp index 658fb3d..6a57da1 100644 --- a/examples/telemetry_client/telemetry_client.cpp +++ b/examples/telemetry_client/telemetry_client.cpp @@ -30,9 +30,9 @@ public: // Bind the handlers we are using using websocketpp::lib::placeholders::_1; using websocketpp::lib::bind; - m_client.set_open_handler(bind(&telemetry_client::on_open,this,::_1)); - m_client.set_close_handler(bind(&telemetry_client::on_close,this,::_1)); - m_client.set_fail_handler(bind(&telemetry_client::on_fail,this,::_1)); + m_client.set_open_handler(bind(&telemetry_client::on_open,this,_1)); + m_client.set_close_handler(bind(&telemetry_client::on_close,this,_1)); + m_client.set_fail_handler(bind(&telemetry_client::on_fail,this,_1)); } // This method will block until the connection is complete diff --git a/examples/telemetry_server/telemetry_server.cpp b/examples/telemetry_server/telemetry_server.cpp index 80a7913..7c45ae5 100644 --- a/examples/telemetry_server/telemetry_server.cpp +++ b/examples/telemetry_server/telemetry_server.cpp @@ -46,9 +46,9 @@ public: // Bind the handlers we are using using websocketpp::lib::placeholders::_1; using websocketpp::lib::bind; - m_endpoint.set_open_handler(bind(&telemetry_server::on_open,this,::_1)); - m_endpoint.set_close_handler(bind(&telemetry_server::on_close,this,::_1)); - m_endpoint.set_http_handler(bind(&telemetry_server::on_http,this,::_1)); + m_endpoint.set_open_handler(bind(&telemetry_server::on_open,this,_1)); + m_endpoint.set_close_handler(bind(&telemetry_server::on_close,this,_1)); + m_endpoint.set_http_handler(bind(&telemetry_server::on_http,this,_1)); } void run(std::string docroot, uint16_t port) { diff --git a/readme.md b/readme.md index c5e0f88..a92b11c 100644 --- a/readme.md +++ b/readme.md @@ -1,10 +1,12 @@ -WebSocket++ (0.5.x-dev) +WebSocket++ (0.6.x-dev) ========================== WebSocket++ is a header only C++ library that implements RFC6455 The WebSocket Protocol. It allows integrating WebSocket client and server functionality into C++ programs. It uses interchangeable network transport modules including one -based on C++ iostreams and one based on Boost Asio. +based on raw char buffers, one based on C++ iostreams, and one based on Asio +(either via Boost or standalone). End users can write additional transport +policies to support other networking or event libraries as needed. Major Features ============== @@ -13,7 +15,7 @@ Major Features * Message/event based interface * Supports secure WebSockets (TLS), IPv6, and explicit proxies. * Flexible dependency management (C++11 Standard Library or Boost) -* Interchangeable network transport modules (iostream and Boost Asio) +* Interchangeable network transport modules (raw, iostream, Asio, or custom) * Portable/cross platform (Posix/Windows, 32/64bit, Intel/ARM/PPC) * Thread-safe diff --git a/test/transport/SConscript b/test/transport/SConscript index 74ec781..71b31b6 100644 --- a/test/transport/SConscript +++ b/test/transport/SConscript @@ -11,7 +11,7 @@ Import('tls_libs') env = env.Clone () env_cpp11 = env_cpp11.Clone () -BOOST_LIBS = boostlibs(['unit_test_framework','system','thread','random'],env) + [platform_libs] + [tls_libs] +BOOST_LIBS = boostlibs(['unit_test_framework','system','thread','random','chrono'],env) + [platform_libs] + [tls_libs] objs = env.Object('boost_integration.o', ["integration.cpp"], LIBS = BOOST_LIBS) prgs = env.Program('test_boost_integration', ["boost_integration.o"], LIBS = BOOST_LIBS) diff --git a/test/transport/asio/SConscript b/test/transport/asio/SConscript index 6cae57c..ea0526b 100644 --- a/test/transport/asio/SConscript +++ b/test/transport/asio/SConscript @@ -11,7 +11,7 @@ Import('tls_libs') env = env.Clone () env_cpp11 = env_cpp11.Clone () -BOOST_LIBS = boostlibs(['unit_test_framework','system','thread'],env) + [platform_libs] + [tls_libs] +BOOST_LIBS = boostlibs(['unit_test_framework','system','thread','chrono'],env) + [platform_libs] + [tls_libs] objs = env.Object('base_boost.o', ["base.cpp"], LIBS = BOOST_LIBS) objs += env.Object('timers_boost.o', ["timers.cpp"], LIBS = BOOST_LIBS) diff --git a/websocketpp/common/asio.hpp b/websocketpp/common/asio.hpp new file mode 100644 index 0000000..0a88490 --- /dev/null +++ b/websocketpp/common/asio.hpp @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2015, Peter Thorson. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the WebSocket++ Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL PETER THORSON BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef WEBSOCKETPP_COMMON_ASIO_HPP +#define WEBSOCKETPP_COMMON_ASIO_HPP + +// This file goes to some length to preserve compatibility with versions of +// boost older than 1.49 (where the first modern steady_timer timer based on +// boost/std chrono was introduced. +// +// For the versions older than 1.49, the deadline_timer is used instead. this +// brings in dependencies on boost date_time and it has a different interface +// that is normalized by the `lib::asio::is_neg` and `lib::asio::milliseconds` +// wrappers provided by this file. +// +// The primary reason for this continued support is that boost 1.48 is the +// default and not easily changeable version of boost supplied by the package +// manager of popular Linux distributions like Ubuntu 12.04 LTS. Once the need +// for this has passed this should be cleaned up and simplified. + +#ifdef ASIO_STANDALONE + #include + + #if (ASIO_VERSION/100000) == 1 && ((ASIO_VERSION/100)%1000) < 8 + static_assert(false, "The minimum version of standalone Asio is 1.8.0"); + #endif + + #include + #include + #include +#else + #include + + // See note above about boost <1.49 compatibility. If we are running on + // boost > 1.48 pull in the steady timer and chrono library + #if (BOOST_VERSION/100000) == 1 && ((BOOST_VERSION/100)%1000) > 48 + #include + #include + #endif + + #include +#endif + +namespace websocketpp { +namespace lib { + +#ifdef ASIO_STANDALONE + namespace asio { + using namespace ::asio; + // Here we assume that we will be using std::error_code with standalone + // Asio. This is probably a good assumption, but it is possible in rare + // cases that local Asio versions would be used. + using std::errc; + + // See note above about boost <1.49 compatibility. Because we require + // a standalone Asio version of 1.8+ we are guaranteed to have + // steady_timer available. By convention we require the chrono library + // (either boost or std) for use with standalone Asio. + template + bool is_neg(T duration) { + return duration.count() < 0; + } + inline lib::chrono::milliseconds milliseconds(long duration) { + return lib::chrono::milliseconds(duration); + } + } // namespace asio + +#else + namespace asio { + using namespace boost::asio; + + // See note above about boost <1.49 compatibility + #if (BOOST_VERSION/100000) == 1 && ((BOOST_VERSION/100)%1000) > 48 + // Using boost::asio >=1.49 so we use chrono and steady_timer + template + bool is_neg(T duration) { + return duration.count() < 0; + } + inline lib::chrono::milliseconds milliseconds(long duration) { + return lib::chrono::milliseconds(duration); + } + #else + // Using boost::asio <1.49 we pretend a deadline timer is a steady + // timer and wrap the negative detection and duration conversion + // appropriately. + typedef boost::asio::deadline_timer steady_timer; + + template + bool is_neg(T duration) { + return duration.is_negative(); + } + inline boost::posix_time::time_duration milliseconds(long duration) { + return boost::posix_time::milliseconds(duration); + } + #endif + + using boost::system::error_code; + namespace errc = boost::system::errc; + } // namespace asio +#endif + + +} // namespace lib +} // namespace websocketpp + +#endif // WEBSOCKETPP_COMMON_ASIO_HPP diff --git a/websocketpp/common/asio_ssl.hpp b/websocketpp/common/asio_ssl.hpp new file mode 100644 index 0000000..cc74297 --- /dev/null +++ b/websocketpp/common/asio_ssl.hpp @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2015, Peter Thorson. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the WebSocket++ Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL PETER THORSON BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef WEBSOCKETPP_COMMON_ASIO_SSL_HPP +#define WEBSOCKETPP_COMMON_ASIO_SSL_HPP + +#ifdef ASIO_STANDALONE + #include +#else + #include +#endif + +#endif // WEBSOCKETPP_COMMON_ASIO_SSL_HPP diff --git a/websocketpp/common/chrono.hpp b/websocketpp/common/chrono.hpp index c536a36..41efd8f 100644 --- a/websocketpp/common/chrono.hpp +++ b/websocketpp/common/chrono.hpp @@ -44,9 +44,9 @@ namespace websocketpp { namespace lib { #ifdef _WEBSOCKETPP_CPP11_CHRONO_ - using std::chrono::system_clock; + namespace chrono = std::chrono; #else - using boost::chrono::system_clock; + namespace chrono = boost::chrono; #endif } // namespace lib diff --git a/websocketpp/common/system_error.hpp b/websocketpp/common/system_error.hpp index 4abe173..e5aea25 100644 --- a/websocketpp/common/system_error.hpp +++ b/websocketpp/common/system_error.hpp @@ -61,6 +61,7 @@ namespace websocketpp { namespace lib { #ifdef _WEBSOCKETPP_CPP11_SYSTEM_ERROR_ + using std::errc; using std::error_code; using std::error_category; using std::error_condition; @@ -68,6 +69,7 @@ namespace lib { #define _WEBSOCKETPP_ERROR_CODE_ENUM_NS_START_ namespace std { #define _WEBSOCKETPP_ERROR_CODE_ENUM_NS_END_ } #else + namespace errc = boost::system::errc; using boost::system::error_code; using boost::system::error_category; using boost::system::error_condition; diff --git a/websocketpp/transport/asio/base.hpp b/websocketpp/transport/asio/base.hpp index 5fb4056..6ee881a 100644 --- a/websocketpp/transport/asio/base.hpp +++ b/websocketpp/transport/asio/base.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Peter Thorson. All rights reserved. + * Copyright (c) 2015, Peter Thorson. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -28,26 +28,23 @@ #ifndef WEBSOCKETPP_TRANSPORT_ASIO_BASE_HPP #define WEBSOCKETPP_TRANSPORT_ASIO_BASE_HPP +#include #include #include #include #include -#include - #include namespace websocketpp { namespace transport { -/// Transport policy that uses boost::asio +/// Transport policy that uses asio /** - * This policy uses a single boost::asio io_service to provide transport + * This policy uses a single asio io_service to provide transport * services to a WebSocket++ endpoint. */ namespace asio { -// - // Class to manage the memory to be used for handler-based custom allocation. // It contains a single block of memory which may be returned for allocation // requests. If the memory is in use when an allocation request is made, the @@ -145,13 +142,13 @@ inline custom_alloc_handler make_custom_alloc_handler( template class endpoint; -typedef lib::function +typedef lib::function socket_shutdown_handler; -typedef lib::function async_read_handler; -typedef lib::function async_write_handler; typedef lib::function pre_init_handler; diff --git a/websocketpp/transport/asio/connection.hpp b/websocketpp/transport/asio/connection.hpp index 578c7ab..635a0f3 100644 --- a/websocketpp/transport/asio/connection.hpp +++ b/websocketpp/transport/asio/connection.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Peter Thorson. All rights reserved. + * Copyright (c) 2015, Peter Thorson. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -39,14 +39,13 @@ #include #include +#include +#include #include #include #include #include -#include -#include - #include #include #include @@ -58,10 +57,10 @@ namespace asio { typedef lib::function tcp_init_handler; -/// Boost Asio based connection transport component +/// Asio based connection transport component /** * transport::asio::connection implements a connection transport component using - * Boost ASIO that works with the transport::asio::endpoint endpoint transport + * Asio that works with the transport::asio::endpoint endpoint transport * component. */ template @@ -86,12 +85,12 @@ public: typedef typename config::response_type response_type; typedef typename response_type::ptr response_ptr; - /// Type of a pointer to the ASIO io_service being used - typedef boost::asio::io_service* io_service_ptr; - /// Type of a pointer to the ASIO io_service::strand being used - typedef lib::shared_ptr strand_ptr; - /// Type of a pointer to the ASIO timer class - typedef lib::shared_ptr timer_ptr; + /// Type of a pointer to the Asio io_service being used + typedef lib::asio::io_service * io_service_ptr; + /// Type of a pointer to the Asio io_service::strand being used + typedef lib::shared_ptr strand_ptr; + /// Type of a pointer to the Asio timer class + typedef lib::shared_ptr timer_ptr; // connection is friends with its associated endpoint to allow the endpoint // to call private/protected utility methods that we don't want to expose @@ -99,7 +98,7 @@ public: friend class endpoint; // generate and manage our own io_service - explicit connection(bool is_server, alog_type& alog, elog_type& elog) + explicit connection(bool is_server, alog_type & alog, elog_type & elog) : m_is_server(is_server) , m_alog(alog) , m_elog(elog) @@ -312,9 +311,9 @@ public: * needed. */ timer_ptr set_timer(long duration, timer_handler callback) { - timer_ptr new_timer = lib::make_shared( + timer_ptr new_timer = lib::make_shared( lib::ref(*m_io_service), - boost::posix_time::milliseconds(duration) + lib::asio::milliseconds(duration) ); if (config::enable_multithreading) { @@ -348,10 +347,10 @@ public: * @param ec The status code */ void handle_timer(timer_ptr, timer_handler callback, - boost::system::error_code const & ec) + lib::asio::error_code const & ec) { if (ec) { - if (ec == boost::asio::error::operation_aborted) { + if (ec == lib::asio::error::operation_aborted) { callback(make_error_code(transport::error::operation_aborted)); } else { log_err(log::elevel::info,"asio handle_timer",ec); @@ -370,7 +369,7 @@ public: /// Initialize transport for reading /** * init_asio is called once immediately after construction to initialize - * boost::asio components to the io_service + * Asio components to the io_service * * The transport initialization sequence consists of the following steps: * - Pre-init: the underlying socket is initialized to the point where @@ -429,7 +428,7 @@ protected: /// Finish constructing the transport /** * init_asio is called once immediately after construction to initialize - * boost::asio components to the io_service. + * Asio components to the io_service. * * @param io_service A pointer to the io_service to register with this * connection @@ -440,7 +439,7 @@ protected: m_io_service = io_service; if (config::enable_multithreading) { - m_strand = lib::make_shared( + m_strand = lib::make_shared( lib::ref(*io_service)); m_async_read_handler = m_strand->wrap(lib::bind( @@ -573,7 +572,7 @@ protected: lib::error_code const & ec) { if (ec == transport::error::operation_aborted || - (post_timer && post_timer->expires_from_now().is_negative())) + (post_timer && lib::asio::is_neg(post_timer->expires_from_now()))) { m_alog.write(log::alevel::devel,"post_init cancelled"); return; @@ -608,8 +607,8 @@ protected: m_proxy_data->write_buf = m_proxy_data->req.raw(); - m_bufs.push_back(boost::asio::buffer(m_proxy_data->write_buf.data(), - m_proxy_data->write_buf.size())); + m_bufs.push_back(lib::asio::buffer(m_proxy_data->write_buf.data(), + m_proxy_data->write_buf.size())); m_alog.write(log::alevel::devel,m_proxy_data->write_buf); @@ -626,7 +625,7 @@ protected: // Send proxy request if (config::enable_multithreading) { - boost::asio::async_write( + lib::asio::async_write( socket_con_type::get_next_layer(), m_bufs, m_strand->wrap(lib::bind( @@ -636,7 +635,7 @@ protected: )) ); } else { - boost::asio::async_write( + lib::asio::async_write( socket_con_type::get_next_layer(), m_bufs, lib::bind( @@ -666,7 +665,7 @@ protected: } void handle_proxy_write(init_handler callback, - boost::system::error_code const & ec) + lib::asio::error_code const & ec) { if (m_alog.static_test(log::alevel::devel)) { m_alog.write(log::alevel::devel, @@ -678,8 +677,8 @@ protected: // Timer expired or the operation was aborted for some reason. // Whatever aborted it will be issuing the callback so we are safe to // return - if (ec == boost::asio::error::operation_aborted || - m_proxy_data->timer->expires_from_now().is_negative()) + if (ec == lib::asio::error::operation_aborted || + lib::asio::is_neg(m_proxy_data->timer->expires_from_now())) { m_elog.write(log::elevel::devel,"write operation aborted"); return; @@ -709,7 +708,7 @@ protected: } if (config::enable_multithreading) { - boost::asio::async_read_until( + lib::asio::async_read_until( socket_con_type::get_next_layer(), m_proxy_data->read_buf, "\r\n\r\n", @@ -720,7 +719,7 @@ protected: )) ); } else { - boost::asio::async_read_until( + lib::asio::async_read_until( socket_con_type::get_next_layer(), m_proxy_data->read_buf, "\r\n\r\n", @@ -740,7 +739,7 @@ protected: * @param bytes_transferred The number of bytes read */ void handle_proxy_read(init_handler callback, - boost::system::error_code const & ec, size_t) + lib::asio::error_code const & ec, size_t) { if (m_alog.static_test(log::alevel::devel)) { m_alog.write(log::alevel::devel, @@ -750,8 +749,8 @@ protected: // Timer expired or the operation was aborted for some reason. // Whatever aborted it will be issuing the callback so we are safe to // return - if (ec == boost::asio::error::operation_aborted || - m_proxy_data->timer->expires_from_now().is_negative()) + if (ec == lib::asio::error::operation_aborted || + lib::asio::is_neg(m_proxy_data->timer->expires_from_now())) { m_elog.write(log::elevel::devel,"read operation aborted"); return; @@ -854,10 +853,10 @@ protected: "asio con async_read_at_least called with bad handler"); } - boost::asio::async_read( + lib::asio::async_read( socket_con_type::get_socket(), - boost::asio::buffer(buf,len), - boost::asio::transfer_at_least(num_bytes), + lib::asio::buffer(buf,len), + lib::asio::transfer_at_least(num_bytes), make_custom_alloc_handler( m_read_handler_allocator, m_async_read_handler @@ -865,14 +864,14 @@ protected: ); } - void handle_async_read(boost::system::error_code const & ec, + void handle_async_read(lib::asio::error_code const & ec, size_t bytes_transferred) { m_alog.write(log::alevel::devel, "asio con handle_async_read"); - // translate boost error codes into more lib::error_codes + // translate asio error codes into more lib::error_codes lib::error_code tec; - if (ec == boost::asio::error::eof) { + if (ec == lib::asio::error::eof) { tec = make_error_code(transport::error::eof); } else if (ec) { // We don't know much more about the error at this point. As our @@ -908,11 +907,11 @@ protected: return; } - m_bufs.push_back(boost::asio::buffer(buf,len)); + m_bufs.push_back(lib::asio::buffer(buf,len)); m_write_handler = handler; - boost::asio::async_write( + lib::asio::async_write( socket_con_type::get_socket(), m_bufs, make_custom_alloc_handler( @@ -932,12 +931,12 @@ protected: std::vector::const_iterator it; for (it = bufs.begin(); it != bufs.end(); ++it) { - m_bufs.push_back(boost::asio::buffer((*it).buf,(*it).len)); + m_bufs.push_back(lib::asio::buffer((*it).buf,(*it).len)); } m_write_handler = handler; - boost::asio::async_write( + lib::asio::async_write( socket_con_type::get_socket(), m_bufs, make_custom_alloc_handler( @@ -952,7 +951,7 @@ protected: * @param ec The status code * @param bytes_transferred The number of bytes read */ - void handle_async_write(boost::system::error_code const & ec, size_t) { + void handle_async_write(lib::asio::error_code const & ec, size_t) { m_bufs.clear(); lib::error_code tec; if (ec) { @@ -1079,10 +1078,10 @@ protected: } void handle_async_shutdown(timer_ptr shutdown_timer, shutdown_handler - callback, boost::system::error_code const & ec) + callback, lib::asio::error_code const & ec) { - if (ec == boost::asio::error::operation_aborted || - shutdown_timer->expires_from_now().is_negative()) + if (ec == lib::asio::error::operation_aborted || + lib::asio::is_neg(shutdown_timer->expires_from_now())) { m_alog.write(log::alevel::devel,"async_shutdown cancelled"); return; @@ -1092,7 +1091,7 @@ protected: lib::error_code tec; if (ec) { - if (ec == boost::asio::error::not_connected) { + if (ec == lib::asio::error::not_connected) { // The socket was already closed when we tried to close it. This // happens periodically (usually if a read or write fails // earlier and if it is a real error will be caught at another @@ -1142,7 +1141,7 @@ private: request_type req; response_type res; std::string write_buf; - boost::asio::streambuf read_buf; + lib::asio::streambuf read_buf; long timeout_proxy; timer_ptr timer; }; @@ -1155,7 +1154,7 @@ private: strand_ptr m_strand; connection_hdl m_connection_hdl; - std::vector m_bufs; + std::vector m_bufs; // Handlers tcp_init_handler m_tcp_pre_init_handler; diff --git a/websocketpp/transport/asio/endpoint.hpp b/websocketpp/transport/asio/endpoint.hpp index f515ef1..4e278d4 100644 --- a/websocketpp/transport/asio/endpoint.hpp +++ b/websocketpp/transport/asio/endpoint.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Peter Thorson. All rights reserved. + * Copyright (c) 2015, Peter Thorson. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -37,10 +37,6 @@ #include -#include -#include -#include - #include #include @@ -48,10 +44,10 @@ namespace websocketpp { namespace transport { namespace asio { -/// Boost Asio based endpoint transport component +/// Asio based endpoint transport component /** * transport::asio::endpoint implements an endpoint transport component using - * Boost ASIO. + * Asio. */ template class endpoint : public config::socket_type { @@ -81,15 +77,15 @@ public: typedef typename transport_con_type::ptr transport_con_ptr; /// Type of a pointer to the ASIO io_service being used - typedef boost::asio::io_service* io_service_ptr; + typedef lib::asio::io_service * io_service_ptr; /// Type of a shared pointer to the acceptor being used - typedef lib::shared_ptr acceptor_ptr; + typedef lib::shared_ptr acceptor_ptr; /// Type of a shared pointer to the resolver being used - typedef lib::shared_ptr resolver_ptr; + typedef lib::shared_ptr resolver_ptr; /// Type of timer handle - typedef lib::shared_ptr timer_ptr; + typedef lib::shared_ptr timer_ptr; /// Type of a shared pointer to an io_service work object - typedef lib::shared_ptr work_ptr; + typedef lib::shared_ptr work_ptr; // generate and manage our own io_service explicit endpoint() @@ -131,7 +127,7 @@ public: , m_io_service(src.m_io_service) , m_external_io_service(src.m_external_io_service) , m_acceptor(src.m_acceptor) - , m_listen_backlog(boost::asio::socket_base::max_connections) + , m_listen_backlog(lib::asio::socket_base::max_connections) , m_reuse_addr(src.m_reuse_addr) , m_elog(src.m_elog) , m_alog(src.m_alog) @@ -155,7 +151,7 @@ public: rhs.m_io_service = NULL; rhs.m_external_io_service = false; rhs.m_acceptor = NULL; - rhs.m_listen_backlog = boost::asio::socket_base::max_connections; + rhs.m_listen_backlog = lib::asio::socket_base::max_connections; rhs.m_state = UNINITIALIZED; // TODO: this needs to be updated @@ -191,7 +187,7 @@ public: m_io_service = ptr; m_external_io_service = true; - m_acceptor = lib::make_shared( + m_acceptor = lib::make_shared( lib::ref(*m_io_service)); m_state = READY; @@ -222,7 +218,7 @@ public: * @param ec Set to indicate what error occurred, if any. */ void init_asio(lib::error_code & ec) { - init_asio(new boost::asio::io_service(), ec); + init_asio(new lib::asio::io_service(), ec); m_external_io_service = false; } @@ -234,7 +230,7 @@ public: * @see init_asio(io_service_ptr ptr) */ void init_asio() { - init_asio(new boost::asio::io_service()); + init_asio(new lib::asio::io_service()); m_external_io_service = false; } @@ -333,7 +329,7 @@ public: * * @return A reference to the endpoint's io_service */ - boost::asio::io_service & get_io_service() { + lib::asio::io_service & get_io_service() { return *m_io_service; } @@ -345,7 +341,7 @@ public: * @param ep An endpoint to read settings from * @param ec Set to indicate what error occurred, if any. */ - void listen(boost::asio::ip::tcp::endpoint const & ep, lib::error_code & ec) + void listen(lib::asio::ip::tcp::endpoint const & ep, lib::error_code & ec) { if (m_state != READY) { m_elog->write(log::elevel::library, @@ -357,11 +353,11 @@ public: m_alog->write(log::alevel::devel,"asio::listen"); - boost::system::error_code bec; + lib::asio::error_code bec; m_acceptor->open(ep.protocol(),bec); if (!bec) { - m_acceptor->set_option(boost::asio::socket_base::reuse_address(m_reuse_addr),bec); + m_acceptor->set_option(lib::asio::socket_base::reuse_address(m_reuse_addr),bec); } if (!bec) { m_acceptor->bind(ep,bec); @@ -387,7 +383,7 @@ public: * * @param ep An endpoint to read settings from */ - void listen(boost::asio::ip::tcp::endpoint const & ep) { + void listen(lib::asio::ip::tcp::endpoint const & ep) { lib::error_code ec; listen(ep,ec); if (ec) { throw exception(ec); } @@ -400,8 +396,8 @@ public: * listening. * * Common options include: - * - IPv6 with mapped IPv4 for dual stack hosts boost::asio::ip::tcp::v6() - * - IPv4 only: boost::asio::ip::tcp::v4() + * - IPv6 with mapped IPv4 for dual stack hosts lib::asio::ip::tcp::v6() + * - IPv4 only: lib::asio::ip::tcp::v4() * * @param internet_protocol The internet protocol to use. * @param port The port to listen on. @@ -411,7 +407,7 @@ public: void listen(InternetProtocol const & internet_protocol, uint16_t port, lib::error_code & ec) { - boost::asio::ip::tcp::endpoint ep(internet_protocol, port); + lib::asio::ip::tcp::endpoint ep(internet_protocol, port); listen(ep,ec); } @@ -422,8 +418,8 @@ public: * listening. * * Common options include: - * - IPv6 with mapped IPv4 for dual stack hosts boost::asio::ip::tcp::v6() - * - IPv4 only: boost::asio::ip::tcp::v4() + * - IPv6 with mapped IPv4 for dual stack hosts lib::asio::ip::tcp::v6() + * - IPv4 only: lib::asio::ip::tcp::v4() * * @param internet_protocol The internet protocol to use. * @param port The port to listen on. @@ -431,7 +427,7 @@ public: template void listen(InternetProtocol const & internet_protocol, uint16_t port) { - boost::asio::ip::tcp::endpoint ep(internet_protocol, port); + lib::asio::ip::tcp::endpoint ep(internet_protocol, port); listen(ep); } @@ -448,7 +444,7 @@ public: * @param ec Set to indicate what error occurred, if any. */ void listen(uint16_t port, lib::error_code & ec) { - listen(boost::asio::ip::tcp::v6(), port, ec); + listen(lib::asio::ip::tcp::v6(), port, ec); } /// Set up endpoint for listening on a port @@ -464,13 +460,13 @@ public: * @param ec Set to indicate what error occurred, if any. */ void listen(uint16_t port) { - listen(boost::asio::ip::tcp::v6(), port); + listen(lib::asio::ip::tcp::v6(), port); } /// Set up endpoint for listening on a host and service (exception free) /** * Bind the internal acceptor using the given host and service. More details - * about what host and service can be are available in the boost asio + * about what host and service can be are available in the Asio * documentation for ip::basic_resolver_query::basic_resolver_query's * constructors. * @@ -486,7 +482,7 @@ public: void listen(std::string const & host, std::string const & service, lib::error_code & ec) { - using boost::asio::ip::tcp; + using lib::asio::ip::tcp; tcp::resolver r(*m_io_service); tcp::resolver::query query(host, service); tcp::resolver::iterator endpoint_iterator = r.resolve(query); @@ -503,7 +499,7 @@ public: /// Set up endpoint for listening on a host and service /** * Bind the internal acceptor using the given host and service. More details - * about what host and service can be are available in the boost asio + * about what host and service can be are available in the Asio * documentation for ip::basic_resolver_query::basic_resolver_query's * constructors. * @@ -617,7 +613,7 @@ public: * @since 0.3.0 */ void start_perpetual() { - m_work = lib::make_shared( + m_work = lib::make_shared( lib::ref(*m_io_service) ); } @@ -647,9 +643,9 @@ public: * needed. */ timer_ptr set_timer(long duration, timer_handler callback) { - timer_ptr new_timer = lib::make_shared( + timer_ptr new_timer = lib::make_shared( *m_io_service, - boost::posix_time::milliseconds(duration) + lib::asio::milliseconds(duration) ); new_timer->async_wait( @@ -675,10 +671,10 @@ public: * @param ec A status code indicating an error, if any. */ void handle_timer(timer_ptr, timer_handler callback, - boost::system::error_code const & ec) + lib::asio::error_code const & ec) { if (ec) { - if (ec == boost::asio::error::operation_aborted) { + if (ec == lib::asio::error::operation_aborted) { callback(make_error_code(transport::error::operation_aborted)); } else { m_elog->write(log::elevel::info, @@ -757,18 +753,18 @@ protected: m_elog = e; } - void handle_accept(accept_handler callback, boost::system::error_code const - & boost_ec) + void handle_accept(accept_handler callback, lib::asio::error_code const & + asio_ec) { lib::error_code ret_ec; m_alog->write(log::alevel::devel, "asio::handle_accept"); - if (boost_ec) { - if (boost_ec == boost::system::errc::operation_canceled) { + if (asio_ec) { + if (asio_ec == lib::asio::errc::operation_canceled) { ret_ec = make_error_code(websocketpp::error::operation_canceled); } else { - log_err(log::elevel::info,"asio handle_accept",boost_ec); + log_err(log::elevel::info,"asio handle_accept",asio_ec); ret_ec = make_error_code(error::pass_through); } } @@ -779,11 +775,11 @@ protected: /// Initiate a new connection // TODO: there have to be some more failure conditions here void async_connect(transport_con_ptr tcon, uri_ptr u, connect_handler cb) { - using namespace boost::asio::ip; + using namespace lib::asio::ip; // Create a resolver if (!m_resolver) { - m_resolver = lib::make_shared( + m_resolver = lib::make_shared( lib::ref(*m_io_service)); } @@ -898,11 +894,11 @@ protected: } void handle_resolve(transport_con_ptr tcon, timer_ptr dns_timer, - connect_handler callback, boost::system::error_code const & ec, - boost::asio::ip::tcp::resolver::iterator iterator) + connect_handler callback, lib::asio::error_code const & ec, + lib::asio::ip::tcp::resolver::iterator iterator) { - if (ec == boost::asio::error::operation_aborted || - dns_timer->expires_from_now().is_negative()) + if (ec == lib::asio::error::operation_aborted || + lib::asio::is_neg(dns_timer->expires_from_now())) { m_alog->write(log::alevel::devel,"async_resolve cancelled"); return; @@ -920,7 +916,7 @@ protected: std::stringstream s; s << "Async DNS resolve successful. Results: "; - boost::asio::ip::tcp::resolver::iterator it, end; + lib::asio::ip::tcp::resolver::iterator it, end; for (it = iterator; it != end; ++it) { s << (*it).endpoint() << " "; } @@ -945,7 +941,7 @@ protected: ); if (config::enable_multithreading) { - boost::asio::async_connect( + lib::asio::async_connect( tcon->get_raw_socket(), iterator, tcon->get_strand()->wrap(lib::bind( @@ -958,7 +954,7 @@ protected: )) ); } else { - boost::asio::async_connect( + lib::asio::async_connect( tcon->get_raw_socket(), iterator, lib::bind( @@ -1007,10 +1003,10 @@ protected: } void handle_connect(transport_con_ptr tcon, timer_ptr con_timer, - connect_handler callback, boost::system::error_code const & ec) + connect_handler callback, lib::asio::error_code const & ec) { - if (ec == boost::asio::error::operation_aborted || - con_timer->expires_from_now().is_negative()) + if (ec == lib::asio::error::operation_aborted || + lib::asio::is_neg(con_timer->expires_from_now())) { m_alog->write(log::alevel::devel,"async_connect cancelled"); return; diff --git a/websocketpp/transport/asio/security/base.hpp b/websocketpp/transport/asio/security/base.hpp index d2d31b4..dff1450 100644 --- a/websocketpp/transport/asio/security/base.hpp +++ b/websocketpp/transport/asio/security/base.hpp @@ -34,8 +34,6 @@ #include #include -#include - #include // Interface that sockets/security policies must implement diff --git a/websocketpp/transport/asio/security/none.hpp b/websocketpp/transport/asio/security/none.hpp index a4986d2..138ea40 100644 --- a/websocketpp/transport/asio/security/none.hpp +++ b/websocketpp/transport/asio/security/none.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Peter Thorson. All rights reserved. + * Copyright (c) 2015, Peter Thorson. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -32,10 +32,9 @@ #include +#include #include -#include - #include #include @@ -47,13 +46,13 @@ namespace asio { namespace basic_socket { /// The signature of the socket init handler for this socket policy -typedef lib::function +typedef lib::function socket_init_handler; -/// Basic Boost ASIO connection socket component +/// Basic Asio connection socket component /** * transport::asio::basic_socket::connection implements a connection socket - * component using Boost ASIO ip::tcp::socket. + * component using Asio ip::tcp::socket. */ class connection : public lib::enable_shared_from_this { public: @@ -62,12 +61,12 @@ public: /// Type of a shared pointer to this connection socket component typedef lib::shared_ptr ptr; - /// Type of a pointer to the ASIO io_service being used - typedef boost::asio::io_service* io_service_ptr; - /// Type of a pointer to the ASIO io_service strand being used - typedef lib::shared_ptr strand_ptr; + /// Type of a pointer to the Asio io_service being used + typedef lib::asio::io_service* io_service_ptr; + /// Type of a pointer to the Asio io_service strand being used + typedef lib::shared_ptr strand_ptr; /// Type of the ASIO socket being used - typedef boost::asio::ip::tcp::socket socket_type; + typedef lib::asio::ip::tcp::socket socket_type; /// Type of a shared pointer to the socket being used. typedef lib::shared_ptr socket_ptr; @@ -93,7 +92,7 @@ public: /** * The socket initialization handler is called after the socket object is * created but before it is used. This gives the application a chance to - * set any ASIO socket options it needs. + * set any Asio socket options it needs. * * @param h The new socket_init_handler */ @@ -105,7 +104,7 @@ public: /** * This is used internally. It can also be used to set socket options, etc */ - boost::asio::ip::tcp::socket& get_socket() { + lib::asio::ip::tcp::socket & get_socket() { return *m_socket; } @@ -113,7 +112,7 @@ public: /** * This is used internally. */ - boost::asio::ip::tcp::socket& get_next_layer() { + lib::asio::ip::tcp::socket & get_next_layer() { return *m_socket; } @@ -121,7 +120,7 @@ public: /** * This is used internally. It can also be used to set socket options, etc */ - boost::asio::ip::tcp::socket& get_raw_socket() { + lib::asio::ip::tcp::socket & get_raw_socket() { return *m_socket; } @@ -135,16 +134,16 @@ public: * * @return A string identifying the address of the remote endpoint */ - std::string get_remote_endpoint(lib::error_code &ec) const { + std::string get_remote_endpoint(lib::error_code & ec) const { std::stringstream s; - boost::system::error_code bec; - boost::asio::ip::tcp::endpoint ep = m_socket->remote_endpoint(bec); + lib::asio::error_code aec; + lib::asio::ip::tcp::endpoint ep = m_socket->remote_endpoint(aec); - if (bec) { + if (aec) { ec = error::make_error_code(error::pass_through); - s << "Error getting remote endpoint: " << bec - << " (" << bec.message() << ")"; + s << "Error getting remote endpoint: " << aec + << " (" << aec.message() << ")"; return s.str(); } else { ec = lib::error_code(); @@ -156,7 +155,7 @@ protected: /// Perform one time initializations /** * init_asio is called once immediately after construction to initialize - * boost::asio components to the io_service + * Asio components to the io_service * * @param service A pointer to the endpoint's io_service * @param strand A shared pointer to the connection's asio strand @@ -168,7 +167,7 @@ protected: return socket::make_error_code(socket::error::invalid_state); } - m_socket = lib::make_shared( + m_socket = lib::make_shared( lib::ref(*service)); m_state = READY; @@ -242,8 +241,8 @@ protected: } void async_shutdown(socket_shutdown_handler h) { - boost::system::error_code ec; - m_socket->shutdown(boost::asio::ip::tcp::socket::shutdown_both,ec); + lib::asio::error_code ec; + m_socket->shutdown(lib::asio::ip::tcp::socket::shutdown_both, ec); h(ec); } @@ -263,7 +262,7 @@ protected: * @param ec The error code to translate_ec * @return The translated error code */ - lib::error_code translate_ec(boost::system::error_code) { + lib::error_code translate_ec(lib::asio::error_code) { // We don't know any more information about this error so pass through return make_error_code(transport::error::pass_through); } diff --git a/websocketpp/transport/asio/security/tls.hpp b/websocketpp/transport/asio/security/tls.hpp index a4400bd..350a49f 100644 --- a/websocketpp/transport/asio/security/tls.hpp +++ b/websocketpp/transport/asio/security/tls.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Peter Thorson. All rights reserved. + * Copyright (c) 2015, Peter Thorson. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -32,14 +32,12 @@ #include +#include +#include #include #include #include -#include -#include -#include - #include #include @@ -51,16 +49,16 @@ namespace asio { namespace tls_socket { /// The signature of the socket_init_handler for this socket policy -typedef lib::function&)> socket_init_handler; +typedef lib::function&)> socket_init_handler; /// The signature of the tls_init_handler for this socket policy -typedef lib::function(connection_hdl)> +typedef lib::function(connection_hdl)> tls_init_handler; /// TLS enabled Boost ASIO connection socket component /** * transport::asio::tls_socket::connection implements a secure connection socket - * component that uses Boost ASIO's ssl::stream to wrap an ip::tcp::socket. + * component that uses Asio's ssl::stream to wrap an ip::tcp::socket. */ class connection : public lib::enable_shared_from_this { public: @@ -70,17 +68,15 @@ public: typedef lib::shared_ptr ptr; /// Type of the ASIO socket being used - typedef boost::asio::ssl::stream socket_type; + typedef lib::asio::ssl::stream socket_type; /// Type of a shared pointer to the ASIO socket being used typedef lib::shared_ptr socket_ptr; /// Type of a pointer to the ASIO io_service being used - typedef boost::asio::io_service* io_service_ptr; + typedef lib::asio::io_service * io_service_ptr; /// Type of a pointer to the ASIO io_service strand being used - typedef lib::shared_ptr strand_ptr; + typedef lib::shared_ptr strand_ptr; /// Type of a shared pointer to the ASIO TLS context being used - typedef lib::shared_ptr context_ptr; - - typedef boost::system::error_code boost_error; + typedef lib::shared_ptr context_ptr; explicit connection() { //std::cout << "transport::asio::tls_socket::connection constructor" @@ -104,7 +100,7 @@ public: /** * This is used internally. It can also be used to set socket options, etc */ - socket_type::lowest_layer_type& get_raw_socket() { + socket_type::lowest_layer_type & get_raw_socket() { return m_socket->lowest_layer(); } @@ -112,7 +108,7 @@ public: /** * This is used internally. */ - socket_type::next_layer_type& get_next_layer() { + socket_type::next_layer_type & get_next_layer() { return m_socket->next_layer(); } @@ -120,7 +116,7 @@ public: /** * This is used internally. */ - socket_type& get_socket() { + socket_type & get_socket() { return *m_socket; } @@ -159,16 +155,16 @@ public: * * @return A string identifying the address of the remote endpoint */ - std::string get_remote_endpoint(lib::error_code &ec) const { + std::string get_remote_endpoint(lib::error_code & ec) const { std::stringstream s; - boost::system::error_code bec; - boost::asio::ip::tcp::endpoint ep = m_socket->lowest_layer().remote_endpoint(bec); + lib::asio::error_code aec; + lib::asio::ip::tcp::endpoint ep = m_socket->lowest_layer().remote_endpoint(aec); - if (bec) { + if (aec) { ec = error::make_error_code(error::pass_through); - s << "Error getting remote endpoint: " << bec - << " (" << bec.message() << ")"; + s << "Error getting remote endpoint: " << aec + << " (" << aec.message() << ")"; return s.str(); } else { ec = lib::error_code(); @@ -180,7 +176,7 @@ protected: /// Perform one time initializations /** * init_asio is called once immediately after construction to initialize - * boost::asio components to the io_service + * Asio components to the io_service * * @param service A pointer to the endpoint's io_service * @param strand A pointer to the connection's strand @@ -300,8 +296,7 @@ protected: m_hdl = hdl; } - void handle_init(init_handler callback,boost::system::error_code const & ec) - { + void handle_init(init_handler callback,lib::asio::error_code const & ec) { if (ec) { m_ec = socket::make_error_code(socket::error::tls_handshake_failed); } else { @@ -340,7 +335,7 @@ protected: * @return The translated error code */ lib::error_code translate_ec(boost::system::error_code ec) { - if (ec.category() == boost::asio::error::get_ssl_category()) { + if (ec.category() == lib::asio::error::get_ssl_category()) { if (ERR_GET_REASON(ec.value()) == SSL_R_SHORT_READ) { return make_error_code(transport::error::tls_short_read); } else { @@ -357,9 +352,9 @@ protected: private: socket_type::handshake_type get_handshake_type() { if (m_is_server) { - return boost::asio::ssl::stream_base::server; + return lib::asio::ssl::stream_base::server; } else { - return boost::asio::ssl::stream_base::client; + return lib::asio::ssl::stream_base::client; } } @@ -377,10 +372,10 @@ private: tls_init_handler m_tls_init_handler; }; -/// TLS enabled Boost ASIO endpoint socket component +/// TLS enabled Asio endpoint socket component /** * transport::asio::tls_socket::endpoint implements a secure endpoint socket - * component that uses Boost ASIO's ssl::stream to wrap an ip::tcp::socket. + * component that uses Asio's ssl::stream to wrap an ip::tcp::socket. */ class endpoint { public: diff --git a/websocketpp/version.hpp b/websocketpp/version.hpp index 0d64078..f5f561a 100644 --- a/websocketpp/version.hpp +++ b/websocketpp/version.hpp @@ -42,7 +42,7 @@ namespace websocketpp { /// Library major version number static int const major_version = 0; /// Library minor version number -static int const minor_version = 5; +static int const minor_version = 6; /// Library patch version number static int const patch_version = 0; /// Library pre-release flag @@ -53,7 +53,7 @@ static int const patch_version = 0; static char const prerelease_flag[] = "dev"; /// Default user agent string -static char const user_agent[] = "WebSocket++/0.5.x-dev"; +static char const user_agent[] = "WebSocket++/0.6.x-dev"; } // namespace websocketpp