From 920d63e719937596f7a1a6ddb0ccbafdb8ce735a Mon Sep 17 00:00:00 2001 From: AntonBikineev Date: Tue, 12 Jan 2016 17:30:55 +0300 Subject: [PATCH 1/3] Updating websocketpp to 6.0-permessage-deflate --- Release/libs/websocketpp/CMakeLists.txt | 10 +- Release/libs/websocketpp/Doxyfile | 4 +- Release/libs/websocketpp/SConstruct | 9 +- Release/libs/websocketpp/changelog.md | 47 ++- .../examples/echo_server/echo_server.cpp | 7 + .../examples/echo_server_tls/dh.pem | 8 + .../echo_server_tls/echo_server_tls.cpp | 60 ++- .../examples/echo_server_tls/server.pem | 105 +++-- .../examples/print_server/print_server.cpp | 2 + .../examples/scratch_client/SConscript | 24 ++ .../scratch_client/scratch_client.cpp | 270 +++++++++++++ .../examples/scratch_server/SConscript | 24 ++ .../scratch_server/scratch_server.cpp | 106 +++++ .../telemetry_client/telemetry_client.cpp | 6 +- .../telemetry_server/telemetry_server.cpp | 6 +- .../examples/testee_client/SConscript | 4 +- .../examples/testee_client/testee_client.cpp | 69 +++- .../examples/testee_server/SConscript | 4 +- .../examples/testee_server/testee_server.cpp | 9 +- .../examples/utility_client/CMakeLists.txt | 24 +- .../examples/utility_client/SConscript | 24 +- .../utility_client/utility_client.cpp | 2 +- Release/libs/websocketpp/readme.md | 10 +- .../test/connection/connection.cpp | 47 +++ .../websocketpp/test/endpoint/endpoint.cpp | 29 ++ .../test/extension/permessage_deflate.cpp | 364 +++++++++++------- .../libs/websocketpp/test/logger/basic.cpp | 64 +++ .../websocketpp/test/processors/hybi13.cpp | 2 +- .../websocketpp/test/transport/SConscript | 2 +- .../test/transport/asio/SConscript | 2 +- .../test/transport/integration.cpp | 8 + .../test/transport/iostream/connection.cpp | 44 ++- .../utility_client/utility_client.md | 9 +- .../websocketpp/websocketpp/common/asio.hpp | 131 +++++++ .../websocketpp/common/asio_ssl.hpp | 37 ++ .../websocketpp/websocketpp/common/chrono.hpp | 11 +- .../websocketpp/websocketpp/common/cpp11.hpp | 6 + .../websocketpp/common/network.hpp | 2 + .../websocketpp/common/system_error.hpp | 2 + .../websocketpp/common/type_traits.hpp | 63 +++ .../websocketpp/websocketpp/connection.hpp | 74 +++- .../libs/websocketpp/websocketpp/endpoint.hpp | 80 +++- .../libs/websocketpp/websocketpp/error.hpp | 11 +- .../permessage_deflate/disabled.hpp | 24 +- .../extensions/permessage_deflate/enabled.hpp | 237 +++++++----- .../libs/websocketpp/websocketpp/frame.hpp | 28 +- .../websocketpp/impl/connection_impl.hpp | 129 ++++++- .../websocketpp/impl/endpoint_impl.hpp | 14 + .../websocketpp/websocketpp/logger/basic.hpp | 30 ++ .../websocketpp/message_buffer/message.hpp | 8 +- .../websocketpp/processors/hybi00.hpp | 18 +- .../websocketpp/processors/hybi13.hpp | 146 +++++-- .../websocketpp/processors/processor.hpp | 21 +- .../websocketpp/roles/client_endpoint.hpp | 1 + .../websocketpp/roles/server_endpoint.hpp | 22 ++ .../websocketpp/transport/asio/base.hpp | 148 ++++--- .../websocketpp/transport/asio/connection.hpp | 119 +++--- .../websocketpp/transport/asio/endpoint.hpp | 140 +++---- .../transport/asio/security/base.hpp | 10 +- .../transport/asio/security/none.hpp | 66 ++-- .../transport/asio/security/tls.hpp | 94 +++-- .../transport/debug/connection.hpp | 15 + .../websocketpp/transport/iostream/base.hpp | 16 +- .../transport/iostream/connection.hpp | 77 +++- .../websocketpp/transport/stub/connection.hpp | 14 + .../libs/websocketpp/websocketpp/version.hpp | 10 +- 66 files changed, 2476 insertions(+), 733 deletions(-) create mode 100755 Release/libs/websocketpp/examples/echo_server_tls/dh.pem create mode 100755 Release/libs/websocketpp/examples/scratch_client/SConscript create mode 100755 Release/libs/websocketpp/examples/scratch_client/scratch_client.cpp create mode 100755 Release/libs/websocketpp/examples/scratch_server/SConscript create mode 100755 Release/libs/websocketpp/examples/scratch_server/scratch_server.cpp create mode 100755 Release/libs/websocketpp/websocketpp/common/asio.hpp create mode 100755 Release/libs/websocketpp/websocketpp/common/asio_ssl.hpp create mode 100755 Release/libs/websocketpp/websocketpp/common/type_traits.hpp diff --git a/Release/libs/websocketpp/CMakeLists.txt b/Release/libs/websocketpp/CMakeLists.txt index 8279156029..0874b4eed8 100644 --- a/Release/libs/websocketpp/CMakeLists.txt +++ b/Release/libs/websocketpp/CMakeLists.txt @@ -9,8 +9,8 @@ project (websocketpp) cmake_minimum_required (VERSION 2.6) set (WEBSOCKETPP_MAJOR_VERSION 0) -set (WEBSOCKETPP_MINOR_VERSION 5) -set (WEBSOCKETPP_PATCH_VERSION 1) +set (WEBSOCKETPP_MINOR_VERSION 6) +set (WEBSOCKETPP_PATCH_VERSION 0) set (WEBSOCKETPP_VERSION ${WEBSOCKETPP_MAJOR_VERSION}.${WEBSOCKETPP_MINOR_VERSION}.${WEBSOCKETPP_PATCH_VERSION}) set(INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files") @@ -70,7 +70,7 @@ if (BUILD_TESTS OR BUILD_EXAMPLES) ############ Compiler specific setup set (WEBSOCKETPP_PLATFORM_LIBS "") - set (WEBSOCKETPP_PLATFORM_TSL_LIBS "") + set (WEBSOCKETPP_PLATFORM_TLS_LIBS "") set (WEBSOCKETPP_BOOST_LIBS "") # VC9 and C++11 reasoning @@ -111,7 +111,7 @@ if (BUILD_TESTS OR BUILD_EXAMPLES) # g++ if (CMAKE_COMPILER_IS_GNUCXX) set (WEBSOCKETPP_PLATFORM_LIBS pthread rt) - set (WEBSOCKETPP_PLATFORM_TSL_LIBS ssl crypto) + set (WEBSOCKETPP_PLATFORM_TLS_LIBS ssl crypto) set (WEBSOCKETPP_BOOST_LIBS system thread) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") if (NOT APPLE) @@ -133,7 +133,7 @@ if (BUILD_TESTS OR BUILD_EXAMPLES) else() set (WEBSOCKETPP_PLATFORM_LIBS pthread) endif() - set (WEBSOCKETPP_PLATFORM_TSL_LIBS ssl crypto) + set (WEBSOCKETPP_PLATFORM_TLS_LIBS ssl crypto) set (WEBSOCKETPP_BOOST_LIBS system thread) set (CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-std=c++0x -stdlib=libc++") # todo: is libc++ really needed here? if (NOT APPLE) diff --git a/Release/libs/websocketpp/Doxyfile b/Release/libs/websocketpp/Doxyfile index ff97242672..b9ff53dc05 100644 --- a/Release/libs/websocketpp/Doxyfile +++ b/Release/libs/websocketpp/Doxyfile @@ -32,9 +32,7 @@ PROJECT_NAME = "websocketpp" # This could be handy for archiving the generated documentation or # if some version control system is used. - -PROJECT_NUMBER = "0.5.1" - +PROJECT_NUMBER = "0.6.0" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer diff --git a/Release/libs/websocketpp/SConstruct b/Release/libs/websocketpp/SConstruct index e01ff04e94..b064417f49 100644 --- a/Release/libs/websocketpp/SConstruct +++ b/Release/libs/websocketpp/SConstruct @@ -125,6 +125,7 @@ elif env['CXX'].startswith('clang++'): # Wpadded # Wsign-conversion + # platform_libs = [] tls_libs = [] @@ -240,8 +241,12 @@ testee_server = SConscript('#/examples/testee_server/SConscript',variant_dir = b # testee_client testee_client = SConscript('#/examples/testee_client/SConscript',variant_dir = builddir + 'testee_client',duplicate = 0) -# utility_client -utility_client = SConscript('#/examples/utility_client/SConscript',variant_dir = builddir + 'utility_client',duplicate = 0) +# scratch_client +scratch_client = SConscript('#/examples/scratch_client/SConscript',variant_dir = builddir + 'scratch_client',duplicate = 0) + +# scratch_server +scratch_server = SConscript('#/examples/scratch_server/SConscript',variant_dir = builddir + 'scratch_server',duplicate = 0) + # debug_client debug_client = SConscript('#/examples/debug_client/SConscript',variant_dir = builddir + 'debug_client',duplicate = 0) diff --git a/Release/libs/websocketpp/changelog.md b/Release/libs/websocketpp/changelog.md index 296f1054ee..986245bf8b 100644 --- a/Release/libs/websocketpp/changelog.md +++ b/Release/libs/websocketpp/changelog.md @@ -1,10 +1,55 @@ HEAD +0.6.0 +- MINOR 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 added to any existing custom transport policy to fulfill this + requirement. This does not affect anyone using the bundled transports or + configs. +- MINOR 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. +- MINOR BREAKING DEPENDENCY CHANGE: When using Boost versions greater than or + equal to 1.49 in C++03 mode, `libboost-chrono` is needed now instead of + `libboost-date_time`. Users with C++11 compilers or using Boost versions 1.48 + and earlier are not affected. Note: This change affects the bundled unit test + suite. +- 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. Thank you Robert Seiler for proof of concept + code that was used as a guide for this implementation. Fixes #324 +- Feature: Adds a vectored/scatter-gather write handler to the iostream + transport. +- Feature: Adds the ability to defer sending an HTTP response until sometime + after the `http_handler` is run. This allows processing of long running http + handlers to defer their response until it is ready without blocking the + network thread. references #425 +- Improvement: `echo_server_tls` has been update to demonstrate how to configure + it for Mozilla's recommended intermediate and modern TLS security profiles. +- 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. Thank you moozzyk for reporting. + Fixes #400 +- Improvement: Removes an unnecessary mutex lock in `get_con_from_hdl`. +- 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. +- Bug: Fixes a potential dangling pointer and inconsistent error message + handling in `websocketpp::exception`. #432 Thank you Tom Swirly for the fix. + 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 type in the name of the set method for `max_http_body_size`. #406 +- 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 diff --git a/Release/libs/websocketpp/examples/echo_server/echo_server.cpp b/Release/libs/websocketpp/examples/echo_server/echo_server.cpp index 5ec576f949..5ae78ad39b 100644 --- a/Release/libs/websocketpp/examples/echo_server/echo_server.cpp +++ b/Release/libs/websocketpp/examples/echo_server/echo_server.cpp @@ -19,6 +19,13 @@ void on_message(server* s, websocketpp::connection_hdl hdl, message_ptr msg) { << " and message: " << msg->get_payload() << std::endl; + // check for a special command to instruct the server to stop listening so + // it can be cleanly exited. + if (msg->get_payload() == "stop-listening") { + s->stop_listening(); + return; + } + try { s->send(hdl, msg->get_payload(), msg->get_opcode()); } catch (const websocketpp::lib::error_code& e) { diff --git a/Release/libs/websocketpp/examples/echo_server_tls/dh.pem b/Release/libs/websocketpp/examples/echo_server_tls/dh.pem new file mode 100755 index 0000000000..6b1c74d43f --- /dev/null +++ b/Release/libs/websocketpp/examples/echo_server_tls/dh.pem @@ -0,0 +1,8 @@ +-----BEGIN DH PARAMETERS----- +MIIBCAKCAQEAqxMGKZB8YNV8WQnbJWwwwmifc+PfVRtd1FN5v5aQSsf6dpjX3Zlh +N1NmgecsQyg4u2EWe4Umta10QzCgYaxf6QdTCg7iprLzFNw7IvWYbQ6du12NMGDr +hmwA6KQKwbTgPL6mSlSlcK2wTP2FzxDTNffFu10cB/6Fj4kdQjPG0c1Koz/z7OOq +BuDElJLClS8rjp3z1xvrc7gX95dFa2KaKgOAYDkpe8tfHRhHfJeIVS/whH9hzx6r +OBg+E5K9JyvayrUoKgPeptRKCqo8A4YevtMLpRxMup0nMUgAIv6+BGTwPAFpwgl/ +8UIVcvjh1v95PwGDM/Q8yvIBJznBYk/e2wIBAg== +-----END DH PARAMETERS----- diff --git a/Release/libs/websocketpp/examples/echo_server_tls/echo_server_tls.cpp b/Release/libs/websocketpp/examples/echo_server_tls/echo_server_tls.cpp index 8408ebccca..a260c9e4ea 100644 --- a/Release/libs/websocketpp/examples/echo_server_tls/echo_server_tls.cpp +++ b/Release/libs/websocketpp/examples/echo_server_tls/echo_server_tls.cpp @@ -27,24 +27,66 @@ void on_message(server* s, websocketpp::connection_hdl hdl, message_ptr msg) { } } +void on_http(server* s, websocketpp::connection_hdl hdl) { + server::connection_ptr con = s->get_con_from_hdl(hdl); + + con->set_body("Hello World!"); + con->set_status(websocketpp::http::status_code::ok); +} + std::string get_password() { return "test"; } -context_ptr on_tls_init(websocketpp::connection_hdl hdl) { +// See https://wiki.mozilla.org/Security/Server_Side_TLS for more details about +// the TLS modes. The code below demonstrates how to implement both the modern +enum tls_mode { + MOZILLA_INTERMEDIATE = 1, + MOZILLA_MODERN = 2 +}; + +context_ptr on_tls_init(tls_mode mode, websocketpp::connection_hdl hdl) { std::cout << "on_tls_init called with hdl: " << hdl.lock().get() << std::endl; - context_ptr ctx = websocketpp::lib::make_shared(boost::asio::ssl::context::tlsv1); + std::cout << "using TLS mode: " << (mode == MOZILLA_MODERN ? "Mozilla Modern" : "Mozilla Intermediate") << std::endl; + context_ptr ctx = websocketpp::lib::make_shared(boost::asio::ssl::context::sslv23); try { - ctx->set_options(boost::asio::ssl::context::default_workarounds | - boost::asio::ssl::context::no_sslv2 | - boost::asio::ssl::context::no_sslv3 | - boost::asio::ssl::context::single_dh_use); + if (mode == MOZILLA_MODERN) { + // Modern disables TLSv1 + ctx->set_options(boost::asio::ssl::context::default_workarounds | + boost::asio::ssl::context::no_sslv2 | + boost::asio::ssl::context::no_sslv3 | + boost::asio::ssl::context::no_tlsv1 | + boost::asio::ssl::context::single_dh_use); + } else { + ctx->set_options(boost::asio::ssl::context::default_workarounds | + boost::asio::ssl::context::no_sslv2 | + boost::asio::ssl::context::no_sslv3 | + boost::asio::ssl::context::single_dh_use); + } ctx->set_password_callback(bind(&get_password)); ctx->use_certificate_chain_file("server.pem"); ctx->use_private_key_file("server.pem", boost::asio::ssl::context::pem); + + // Example method of generating this file: + // `openssl dhparam -out dh.pem 2048` + // Mozilla Intermediate suggests 1024 as the minimum size to use + // Mozilla Modern suggests 2048 as the minimum size to use. + ctx->use_tmp_dh_file("dh.pem"); + + std::string ciphers; + + if (mode == MOZILLA_MODERN) { + ciphers = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK"; + } else { + ciphers = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA"; + } + + if (SSL_CTX_set_cipher_list(ctx->native_handle() , ciphers.c_str()) != 1) { + std::cout << "Error setting cipher list" << std::endl; + } } catch (std::exception& e) { - std::cout << e.what() << std::endl; + std::cout << "Exception: " << e.what() << std::endl; } return ctx; } @@ -58,8 +100,8 @@ int main() { // Register our message handler echo_server.set_message_handler(bind(&on_message,&echo_server,::_1,::_2)); - echo_server.set_tls_init_handler(bind(&on_tls_init,::_1)); - + echo_server.set_http_handler(bind(&on_http,&echo_server,::_1)); + echo_server.set_tls_init_handler(bind(&on_tls_init,MOZILLA_INTERMEDIATE,::_1)); // Listen on port 9002 echo_server.listen(9002); diff --git a/Release/libs/websocketpp/examples/echo_server_tls/server.pem b/Release/libs/websocketpp/examples/echo_server_tls/server.pem index 9f679a49b6..5196dcfe55 100644 --- a/Release/libs/websocketpp/examples/echo_server_tls/server.pem +++ b/Release/libs/websocketpp/examples/echo_server_tls/server.pem @@ -1,58 +1,55 @@ -----BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CBC,A0ED66EF872A48A9 - -gXuvKojXzApVhhPVNdRliiajbC4PtwQG5c8TA7JADLgwOR7o9t6KtXEr37bDRpvB -9aO9P+SJaK5OOp3XKPGthOdqv+tvCRTlmzmC8GjPLBX389DWT2xoGu7JkGwDtdSm -rnF49Rlp5bfjpACk5xKNiKeDo1CWfeEJzw9Kto0g+5eMaEdors64oPzjXs3geA2g -TxCJSHv9qSX6++pCLKKCUTbyzidAxV/Zb0AAubt5V40QKqX4HhSwwstFnTaX3tlb -3QOdY+y04VIkM6d7qN5W8M7NzRkMpZ1qBpQcUMpkhQcRzWP2wub5AAff9D2GntRd -4Dz1vn3u41U3Okdr0CNj+iH7byCzuokoAhk6ZQEN6WB+GTpGgfBXdtUZrfpb0MKm -UNYP5AF2AmUqJRXhViTDVtu/V2tHF3LGuNT+W2Dz+spFZEq0byEO0N858eR0dikc -6jOASvNQbSwD0+mkgBC1gXKKU3ngj2gpJUwljeACdWFd8N2egrZfyI05CmX7vPNC -NXbs7k2buWNdjP4/D8IM+HDVidWzQa/kG/qokXKqllem9Egg37lUucwnP3cX2/Hw -U2mfaBWzeZtqc+GqRp08rYIql+Reai3sUYlQMnNk01prVY47UQb+dxuqjaxGV5Xx -Xkx0s2mfQnNRjL4S7Hjhqelufi6GpkCQ2EGsPpA+6K1ztZ0ame9Q2BE1SXeM/6vU -rxT5nRrCxueyXAyQSGcqMX9//gSeK8WWBqG/c1IAMVDa0NWrJeOJhSziE+ta3B0m -bHAPBY6vh0iB3lLdRlbUOPbC6R1TpxMOs+6Vbs2+OTifFpvOVymEoZq/nroyg68P -vn5uCKogwWA7o8EArf/UTlIwWJmH9bgILdZKld4wMel2HQg16RDzm+mEXAJi52a/ -FC+fgfphdxltmUJ+rqOyR4AHULjaTWUQqTIB6sdlzgmES1nXAiE71zX//KFqomar -O60SPPk3C1bs0x5DsvmGJa8SIfDhyd+D7NPyqwEKqrZsaotYGklNkfqxa6pa8mrc -ejxquW1PK4FvBk26+osu5a90Jih0PcQM7DUMMr2WHdTiMSXWAiK2ToYF8Itt25Qv -Cd0CsSYw9CJkXNr1u1+mObheaY9QYOmztnSJLy4ZO2JsMhqNwuAueIcwmhXOREq7 -kzlnGMgJcuSeAS/OBNj8Zgx0c7QQ0kzc+YmnOCsqoMtPsu/CsXJ4iJiM3Tki/2jT -bywrTiQwE6R3a/87GREOREX+WLicZBWX3k9/4tBL5XSe1p5wPpuIRQUDvAGNfNHP -JN7kujDF4SehilF1qtvCygAwvxHFDj+EwhXKNDKJzoZZIM15rAk3k92n2j6nz1qH -a3xOU05yydOlO6F6w51I1QoDddmkzCRNB0TeO3D6rekHsCK1aDWmC+qRcm2ZFtVz -sY6fdZN2NEmMQokIh9Opi1f8CSYSizPESMzdu2SF0xVO9n/IGIkn1ksK04O2BZo0 -X3LBPHLfCRsQNY1eF17bj07fYU2oPZKs/XzJiwxkqK6LFvpeAVaYrtg9fqRO/UVe -QhUIj3BL550ocEpa15xLehLrmwzYiW5zwGjSHQ4EgZluGLCwyKGTh4QswEJRA9Rt +MIIEowIBAAKCAQEA77v5VbFaq+geVd/RCLXoKTWj/LgXGjiOXBpJZca3o5edi7N1 +Ej41/13jfZ4OxgFIRFAALd+fU4NsObXzskth3rJLmJjUtGajRIPqF2IUVjFMmybQ +9dUDSqPzd/bG+ul0DP7DNuiBcLC8XNC3/kchPUzVq9gNDk56jXn87kMoIkVXBWQS +Rwk0yCtELSfwxxRCrGKgQDfXnRdwmkPe42DmKtdGksXJlUhP1UVTAXaSw1Nz64LV +9bJje/eoDsSe4OxifVVToE6ZxIW+r1jVgrcupeYXQrSHIztl2U/rx2JkGMN0eS+P +qrsJmkmRBN1cpgmvSV7WoM3hj6Eq71z4Dfv6EwIDAQABAoIBAEXAL19bZsI1mv3p +TOx34MB8tuXEuhQK+ICbtVdDZhLW/iOzZxCTwSo3qwTVg/7gSKJ3lFXEhprJ1idE +ZU8u157vyUbw0JJceoxoxSdghgI9/cf2lz2vaHHDGgeBaYt/eSB+z1WeeGrNQUDQ +CXiWQXmQbWq+Ra4v70BSieDY8UhmzCTRhvfZV80vaY/4SnHxJ9C8Nu8/An7U3pwq +ccfTaWMp3Q5ztmEnExF6/b1SUsnI8rzFovw/4C50AU09N/Z6zZVFsXgJAT2Kd1Tx +HfP1vUkWZ/TJ6kcmVIV9U3uMcedBD8Rb/3M0Qdp+eymQ+1oYQ3K3/a2RlUQIeXzf +hRbE4wECgYEA/WyULrwBsvSMPqK0K9pZpv921Yl6d4bGnpxKze7ltc9o5/LsU35q +8u29Es7cPyhyUDOsPW8v2CNjw54t+eFGsu59bBvXZNz5gB7hTUEyLntB24cO5PmN +kVExcMDFC6NgPaauBtUhODievKJ2C8P7sRJDAVKE9KkavDddU7nSEjMCgYEA8ivG +AqwNXYsiIFjAo4uj3kuBFt8LU/q4m6GXI+9qyxfiJjuF1dROx5qaQGiE85VaBFUu +gpbnjZH7s+BBgoaQhrB4i6mztljdN1KKuAlnjhB+Fywg8m8N9lAi3wIaxnIEqDkU +vFiIFPTBCk0U7IZ/OyCrKPQTE9ApWHfBwA/vWKECgYBQixrJg61SkBCms5Vpvprx +zY2aLniC1o33yRqpOr09PG9OENH1c19QWCjYenBbjmJOhS2/1L+zBQRnHrXkDion +Ik8wdeTORMDzbF0U7ZyiU0BKIjGkqn/I6LI68LlvinxC+9+hgkltkek5cLTt5lrv +Gyu6ltx02e4KVdpOiuduKwKBgQC3U0PWigCkK8ttyUIrjG5Evcu/UKH2tPpDdpQ/ +8+JYVIAyiSTLtqjcmcDjuTvMWeeHGCTZXvtzRGvSw5VUBiIqlDTtJU6SX7s3QhkZ +MKVf+kQ5roJShJeBOzDquWEjkPTNlEiKPErn8lCgR7HrS/XNAPIRUpOOkCp8ekwF +5Qo/gQKBgAue3TeCeIzxh4PxSAk39Uaj+AaLvlYg8C+ucEodCNQZnJ7jOO0hHkfT +NvZBes0VukCGlBLOGRQtC3kgtyrerscnDiZOhdnJrhPIdNPC0k/p/uAfh7+C5Sxm +rCEL0S7kORdEjlIGd5j6ZEN/HZe8FyOYSjbFAoJSlAId9WMSxycQ -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- -MIIE0DCCA7igAwIBAgIJAM5MuKJezXq0MA0GCSqGSIb3DQEBBQUAMIGgMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xGDAW -BgNVBAoTD1phcGhveWQgU3R1ZGlvczEUMBIGA1UECxMLV2ViU29ja2V0KysxFjAU -BgNVBAMTDVBldGVyIFRob3Jzb24xJDAiBgkqhkiG9w0BCQEWFXdlYm1hc3RlckB6 -YXBob3lkLmNvbTAeFw0xMTExMTUyMTIwMDZaFw0xMjExMTQyMTIwMDZaMIGgMQsw -CQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28x -GDAWBgNVBAoTD1phcGhveWQgU3R1ZGlvczEUMBIGA1UECxMLV2ViU29ja2V0Kysx -FjAUBgNVBAMTDVBldGVyIFRob3Jzb24xJDAiBgkqhkiG9w0BCQEWFXdlYm1hc3Rl -ckB6YXBob3lkLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANR0 -tdwAnIB8I9qRZ7QbzEWY95RpM7GIn0u/9oH90PzdHiE0rXSkKT+yw3XUzH0iw5t0 -5dEwSC+srSP5Vm4cA6kXc94agVVaPW89tGcdP4fHptCruSrzQsDXELCPl5UUvMpA -YUcGisdXYPN/EeOoqb9wKWxoW5mREsyyeWWS89fYN5qU/d0QpbSvEWghqLbL/ZS2 -hOlXT9LufOeA+vHiV1/T/h5xC7ecIH02YDQw1EnqxbPmkLPcWThztLS9FiufNDRM -Rhcoaj2b9VDHvDwdbeA0T5v5qNdG34LaapYOelxzQMOtM0f9Dgqehodyxl2qm9mR -lq432dlOEzDnVCPNHwECAwEAAaOCAQkwggEFMB0GA1UdDgQWBBTTPKfNMnKOykhv -+vKS7vql5JsMyzCB1QYDVR0jBIHNMIHKgBTTPKfNMnKOykhv+vKS7vql5JsMy6GB -pqSBozCBoDELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQH -EwdDaGljYWdvMRgwFgYDVQQKEw9aYXBob3lkIFN0dWRpb3MxFDASBgNVBAsTC1dl -YlNvY2tldCsrMRYwFAYDVQQDEw1QZXRlciBUaG9yc29uMSQwIgYJKoZIhvcNAQkB -FhV3ZWJtYXN0ZXJAemFwaG95ZC5jb22CCQDOTLiiXs16tDAMBgNVHRMEBTADAQH/ -MA0GCSqGSIb3DQEBBQUAA4IBAQB+SH0s/hrv5VYqgX6SNLzxdSLvCVsUkCdTpxwY -wOJ84XmYcXDMhKDtZqLtOtN6pfEwVusFlC9mkieuunztCnWNmsSG83RuljJPjFSi -1d4Id4bKEQkQ4cfnjoHKivRrViWLnxuNnLzC6tpyGH/35kKWhhr6T58AXerFgVw3 -mHvLPTr1DuhdAZA0ZuvuseVAFFAjI3RetSySwHJE3ak8KswDVfLi6E3XxMVsIWTS -/iFsC2WwoZQlljya2V/kRYIhu+uCdqJ01wunn2BvmURPSgr4GTBF0FQ9JGpNbXxM -TAU7oQJgyFc5sCcuEgPTO0dWVQTvdZVgay4tkmduKDRkmJBF +MIIEpzCCA4+gAwIBAgIJAMlCHvwnJ+F/MA0GCSqGSIb3DQEBCwUAMIGTMQswCQYD +VQQGEwJVUzELMAkGA1UECBMCSUwxEDAOBgNVBAcTB0NoaWNhZ28xGTAXBgNVBAoT +EFdlYlNvY2tldCsrIERlbW8xIjAgBgNVBAMTGXV0aWxpdGllcy53ZWJzb2NrZXRw +cC5vcmcxJjAkBgkqhkiG9w0BCQEWF3dlYnNvY2tldHBwQHphcGhveWQuY29tMB4X +DTE1MDQyNTE1NTk1M1oXDTE4MDMyODE1NTk1M1owgZMxCzAJBgNVBAYTAlVTMQsw +CQYDVQQIEwJJTDEQMA4GA1UEBxMHQ2hpY2FnbzEZMBcGA1UEChMQV2ViU29ja2V0 +KysgRGVtbzEiMCAGA1UEAxMZdXRpbGl0aWVzLndlYnNvY2tldHBwLm9yZzEmMCQG +CSqGSIb3DQEJARYXd2Vic29ja2V0cHBAemFwaG95ZC5jb20wggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDvu/lVsVqr6B5V39EItegpNaP8uBcaOI5cGkll +xrejl52Ls3USPjX/XeN9ng7GAUhEUAAt359Tg2w5tfOyS2HeskuYmNS0ZqNEg+oX +YhRWMUybJtD11QNKo/N39sb66XQM/sM26IFwsLxc0Lf+RyE9TNWr2A0OTnqNefzu +QygiRVcFZBJHCTTIK0QtJ/DHFEKsYqBAN9edF3CaQ97jYOYq10aSxcmVSE/VRVMB +dpLDU3PrgtX1smN796gOxJ7g7GJ9VVOgTpnEhb6vWNWCty6l5hdCtIcjO2XZT+vH +YmQYw3R5L4+quwmaSZEE3VymCa9JXtagzeGPoSrvXPgN+/oTAgMBAAGjgfswgfgw +HQYDVR0OBBYEFAWNBET93ZzSukXGkuGb93CfmUkDMIHIBgNVHSMEgcAwgb2AFAWN +BET93ZzSukXGkuGb93CfmUkDoYGZpIGWMIGTMQswCQYDVQQGEwJVUzELMAkGA1UE +CBMCSUwxEDAOBgNVBAcTB0NoaWNhZ28xGTAXBgNVBAoTEFdlYlNvY2tldCsrIERl +bW8xIjAgBgNVBAMTGXV0aWxpdGllcy53ZWJzb2NrZXRwcC5vcmcxJjAkBgkqhkiG +9w0BCQEWF3dlYnNvY2tldHBwQHphcGhveWQuY29tggkAyUIe/Ccn4X8wDAYDVR0T +BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEA2DRQSDmo2Q5t8MEjp6jddRIFts5t +BDBWPSwJ0qvmheFt53MuLds2hhvMn42WGrKtVJiLiDyOWuUZ41REJZb1uaissUuY +r9pLuP5QLdibx7+/30iDEY0OGTgtSTfgwNx8bIApBSHoZEN3/HaikqplBng2+6u/ +kTe6UnRrBJ+8JOGl+duhCXNPeSyLa2NcrxE9XpWC/k1kC9MTUF+2NuqCtK3zO8ci +p0mqARWDSrEBYISh3dAOgDFrcX6zj+0MK+iswu3ijEdItGAjxjlQ2t4XT1T/CDbc +ysHg04TJw7v682+v124GrnrAPYUK34OK8kFVJ60SNYRUi7euOCdTM4Lwkw== -----END CERTIFICATE----- + diff --git a/Release/libs/websocketpp/examples/print_server/print_server.cpp b/Release/libs/websocketpp/examples/print_server/print_server.cpp index 78fb0e8f92..5f6f444df8 100644 --- a/Release/libs/websocketpp/examples/print_server/print_server.cpp +++ b/Release/libs/websocketpp/examples/print_server/print_server.cpp @@ -13,6 +13,8 @@ int main() { server print_server; print_server.set_message_handler(&on_message); + print_server.set_access_channels(websocketpp::log::alevel::all); + print_server.set_error_channels(websocketpp::log::elevel::all); print_server.init_asio(); print_server.listen(9002); diff --git a/Release/libs/websocketpp/examples/scratch_client/SConscript b/Release/libs/websocketpp/examples/scratch_client/SConscript new file mode 100755 index 0000000000..6e7b2ef07f --- /dev/null +++ b/Release/libs/websocketpp/examples/scratch_client/SConscript @@ -0,0 +1,24 @@ +## Scratch client example +## + +Import('env') +Import('env_cpp11') +Import('boostlibs') +Import('platform_libs') +Import('polyfill_libs') +Import('tls_libs') + +env = env.Clone () +env_cpp11 = env_cpp11.Clone () + +prgs = [] + +# if a C++11 environment is available build using that, otherwise use boost +if env_cpp11.has_key('WSPP_CPP11_ENABLED'): + ALL_LIBS = boostlibs(['system'],env_cpp11) + [platform_libs] + [polyfill_libs] + [tls_libs] + prgs += env_cpp11.Program('scratch_client', ["scratch_client.cpp"], LIBS = ALL_LIBS) +else: + ALL_LIBS = boostlibs(['system','random'],env) + [platform_libs] + [polyfill_libs] + prgs += env.Program('utility_client', ["utility_client.cpp"], LIBS = ALL_LIBS) + +Return('prgs') diff --git a/Release/libs/websocketpp/examples/scratch_client/scratch_client.cpp b/Release/libs/websocketpp/examples/scratch_client/scratch_client.cpp new file mode 100755 index 0000000000..9b5a25c0d0 --- /dev/null +++ b/Release/libs/websocketpp/examples/scratch_client/scratch_client.cpp @@ -0,0 +1,270 @@ +/* + * Copyright (c) 2014, 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. + */ + +// **NOTE:** This file is a snapshot of the WebSocket++ utility client tutorial. +// Additional related material can be found in the tutorials/utility_client +// directory of the WebSocket++ repository. + +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +typedef websocketpp::client client; + +class connection_metadata { +public: + typedef websocketpp::lib::shared_ptr ptr; + + connection_metadata(int id, websocketpp::connection_hdl hdl, std::string uri) + : m_id(id) + , m_hdl(hdl) + , m_status("Connecting") + , m_uri(uri) + , m_server("N/A") + {} + + void on_open(client * c, websocketpp::connection_hdl hdl) { + m_status = "Open"; + + client::connection_ptr con = c->get_con_from_hdl(hdl); + m_server = con->get_response_header("Server"); + } + + void on_fail(client * c, websocketpp::connection_hdl hdl) { + m_status = "Failed"; + + client::connection_ptr con = c->get_con_from_hdl(hdl); + m_server = con->get_response_header("Server"); + m_error_reason = con->get_ec().message(); + } + + void on_close(client * c, websocketpp::connection_hdl hdl) { + m_status = "Closed"; + client::connection_ptr con = c->get_con_from_hdl(hdl); + std::stringstream s; + s << "close code: " << con->get_remote_close_code() << " (" + << websocketpp::close::status::get_string(con->get_remote_close_code()) + << "), close reason: " << con->get_remote_close_reason(); + m_error_reason = s.str(); + } + + websocketpp::connection_hdl get_hdl() const { + return m_hdl; + } + + int get_id() const { + return m_id; + } + + std::string get_status() const { + return m_status; + } + + friend std::ostream & operator<< (std::ostream & out, connection_metadata const & data); +private: + int m_id; + websocketpp::connection_hdl m_hdl; + std::string m_status; + std::string m_uri; + std::string m_server; + std::string m_error_reason; +}; + +std::ostream & operator<< (std::ostream & out, connection_metadata const & data) { + out << "> URI: " << data.m_uri << "\n" + << "> Status: " << data.m_status << "\n" + << "> Remote Server: " << (data.m_server.empty() ? "None Specified" : data.m_server) << "\n" + << "> Error/close reason: " << (data.m_error_reason.empty() ? "N/A" : data.m_error_reason); + + return out; +} + +class websocket_endpoint { +public: + websocket_endpoint () : m_next_id(0) { + m_endpoint.clear_access_channels(websocketpp::log::alevel::all); + m_endpoint.clear_error_channels(websocketpp::log::elevel::all); + + m_endpoint.init_asio(); + m_endpoint.start_perpetual(); + + m_thread.reset(new websocketpp::lib::thread(&client::run, &m_endpoint)); + } + + ~websocket_endpoint() { + m_endpoint.stop_perpetual(); + + for (con_list::const_iterator it = m_connection_list.begin(); it != m_connection_list.end(); ++it) { + if (it->second->get_status() != "Open") { + // Only close open connections + continue; + } + + std::cout << "> Closing connection " << it->second->get_id() << std::endl; + + websocketpp::lib::error_code ec; + m_endpoint.close(it->second->get_hdl(), websocketpp::close::status::going_away, "", ec); + if (ec) { + std::cout << "> Error closing connection " << it->second->get_id() << ": " + << ec.message() << std::endl; + } + } + + m_thread->join(); + } + + int connect(std::string const & uri) { + websocketpp::lib::error_code ec; + + client::connection_ptr con = m_endpoint.get_connection(uri, ec); + + if (ec) { + std::cout << "> Connect initialization error: " << ec.message() << std::endl; + return -1; + } + + int new_id = m_next_id++; + connection_metadata::ptr metadata_ptr(new connection_metadata(new_id, con->get_handle(), uri)); + m_connection_list[new_id] = metadata_ptr; + + con->set_open_handler(websocketpp::lib::bind( + &connection_metadata::on_open, + metadata_ptr, + &m_endpoint, + websocketpp::lib::placeholders::_1 + )); + con->set_fail_handler(websocketpp::lib::bind( + &connection_metadata::on_fail, + metadata_ptr, + &m_endpoint, + websocketpp::lib::placeholders::_1 + )); + con->set_close_handler(websocketpp::lib::bind( + &connection_metadata::on_close, + metadata_ptr, + &m_endpoint, + websocketpp::lib::placeholders::_1 + )); + + m_endpoint.connect(con); + + return new_id; + } + + void close(int id, websocketpp::close::status::value code, std::string reason) { + websocketpp::lib::error_code ec; + + con_list::iterator metadata_it = m_connection_list.find(id); + if (metadata_it == m_connection_list.end()) { + std::cout << "> No connection found with id " << id << std::endl; + return; + } + + m_endpoint.close(metadata_it->second->get_hdl(), code, reason, ec); + if (ec) { + std::cout << "> Error initiating close: " << ec.message() << std::endl; + } + } + + connection_metadata::ptr get_metadata(int id) const { + con_list::const_iterator metadata_it = m_connection_list.find(id); + if (metadata_it == m_connection_list.end()) { + return connection_metadata::ptr(); + } else { + return metadata_it->second; + } + } +private: + typedef std::map con_list; + + client m_endpoint; + websocketpp::lib::shared_ptr m_thread; + + con_list m_connection_list; + int m_next_id; +}; + +int main() { + bool done = false; + std::string input; + websocket_endpoint endpoint; + + while (!done) { + std::cout << "Enter Command: "; + std::getline(std::cin, input); + + if (input == "quit") { + done = true; + } else if (input == "help") { + std::cout + << "\nCommand List:\n" + << "connect \n" + << "close [] []\n" + << "show \n" + << "help: Display this help text\n" + << "quit: Exit the program\n" + << std::endl; + } else if (input.substr(0,7) == "connect") { + int id = endpoint.connect(input.substr(8)); + if (id != -1) { + std::cout << "> Created connection with id " << id << std::endl; + } + } else if (input.substr(0,5) == "close") { + std::stringstream ss(input); + + std::string cmd; + int id; + int close_code = websocketpp::close::status::normal; + std::string reason = ""; + + ss >> cmd >> id >> close_code; + std::getline(ss,reason); + + endpoint.close(id, close_code, reason); + } else if (input.substr(0,4) == "show") { + int id = atoi(input.substr(5).c_str()); + + connection_metadata::ptr metadata = endpoint.get_metadata(id); + if (metadata) { + std::cout << *metadata << std::endl; + } else { + std::cout << "> Unknown connection id " << id << std::endl; + } + } else { + std::cout << "> Unrecognized Command" << std::endl; + } + } + + return 0; +} diff --git a/Release/libs/websocketpp/examples/scratch_server/SConscript b/Release/libs/websocketpp/examples/scratch_server/SConscript new file mode 100755 index 0000000000..bf90f7433e --- /dev/null +++ b/Release/libs/websocketpp/examples/scratch_server/SConscript @@ -0,0 +1,24 @@ +## Scratch server example +## + +Import('env') +Import('env_cpp11') +Import('boostlibs') +Import('platform_libs') +Import('polyfill_libs') +Import('tls_libs') + +env = env.Clone () +env_cpp11 = env_cpp11.Clone () + +prgs = [] + +# if a C++11 environment is available build using that, otherwise use boost +if env_cpp11.has_key('WSPP_CPP11_ENABLED'): + ALL_LIBS = boostlibs(['system'],env_cpp11) + [platform_libs] + [polyfill_libs] + [tls_libs] + ['z'] + prgs += env_cpp11.Program('scratch_server', ["scratch_server.cpp"], LIBS = ALL_LIBS) +else: + ALL_LIBS = boostlibs(['system','regex','random'],env) + [platform_libs] + [polyfill_libs] + [tls_libs] + ['z'] + prgs += env.Program('scratch_server', ["scratch_server.cpp"], LIBS = ALL_LIBS) + +Return('prgs') diff --git a/Release/libs/websocketpp/examples/scratch_server/scratch_server.cpp b/Release/libs/websocketpp/examples/scratch_server/scratch_server.cpp new file mode 100755 index 0000000000..e37a58929b --- /dev/null +++ b/Release/libs/websocketpp/examples/scratch_server/scratch_server.cpp @@ -0,0 +1,106 @@ +/** + * This example is presently used as a scratch space. It may or may not be broken + * at any given time. + */ + +#include + +#include +#include + +#include + +struct deflate_config : public websocketpp::config::debug_core { + typedef deflate_config type; + typedef debug_core base; + + typedef base::concurrency_type concurrency_type; + + typedef base::request_type request_type; + typedef base::response_type response_type; + + typedef base::message_type message_type; + typedef base::con_msg_manager_type con_msg_manager_type; + typedef base::endpoint_msg_manager_type endpoint_msg_manager_type; + + typedef base::alog_type alog_type; + typedef base::elog_type elog_type; + + typedef base::rng_type rng_type; + + struct transport_config : public base::transport_config { + typedef type::concurrency_type concurrency_type; + typedef type::alog_type alog_type; + typedef type::elog_type elog_type; + typedef type::request_type request_type; + typedef type::response_type response_type; + typedef websocketpp::transport::asio::basic_socket::endpoint + socket_type; + }; + + typedef websocketpp::transport::asio::endpoint + transport_type; + + /// permessage_compress extension + struct permessage_deflate_config {}; + + typedef websocketpp::extensions::permessage_deflate::enabled + permessage_deflate_type; +}; + +typedef websocketpp::server server; + +typedef server::message_ptr message_ptr; + +// Define a callback to handle incoming messages +void on_message(server* s, websocketpp::connection_hdl hdl, message_ptr msg) { + /*std::cout << "on_message called with hdl: " << hdl.lock().get() + << " and message (" << msg->get_payload().size() << "): " << msg->get_payload() + << std::endl; + */ + try { + s->send(hdl, msg->get_payload(), msg->get_opcode()); + } catch (const websocketpp::lib::error_code& e) { + std::cout << "Echo failed because: " << e + << "(" << e.message() << ")" << std::endl; + } +} + +int main(int argc, char * argv[]) { + // Create a server endpoint + server echo_server; + + try { + // Set logging settings + if (argc > 1 && std::string(argv[1]) == "-d") { + echo_server.set_access_channels(websocketpp::log::alevel::all); + echo_server.set_error_channels(websocketpp::log::elevel::all); + } else { + echo_server.set_access_channels(websocketpp::log::alevel::none); + echo_server.set_error_channels(websocketpp::log::elevel::none); + } + + // Initialize ASIO + echo_server.init_asio(); + + // Register our message handler + using websocketpp::lib::placeholders::_1; + using websocketpp::lib::placeholders::_2; + echo_server.set_message_handler(bind(&on_message,&echo_server,_1,_2)); + + // Listen on port 9002 + echo_server.listen(9002); + + // Start the server accept loop + echo_server.start_accept(); + + // Start the ASIO io_service run loop + echo_server.run(); + } catch (const std::exception & e) { + std::cout << e.what() << std::endl; + } catch (websocketpp::lib::error_code e) { + std::cout << e.message() << std::endl; + } catch (...) { + std::cout << "other exception" << std::endl; + } +} diff --git a/Release/libs/websocketpp/examples/telemetry_client/telemetry_client.cpp b/Release/libs/websocketpp/examples/telemetry_client/telemetry_client.cpp index 658fb3d468..6a57da15d4 100644 --- a/Release/libs/websocketpp/examples/telemetry_client/telemetry_client.cpp +++ b/Release/libs/websocketpp/examples/telemetry_client/telemetry_client.cpp @@ -30,9 +30,9 @@ class telemetry_client { // 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/Release/libs/websocketpp/examples/telemetry_server/telemetry_server.cpp b/Release/libs/websocketpp/examples/telemetry_server/telemetry_server.cpp index 80a791343b..7c45ae590a 100644 --- a/Release/libs/websocketpp/examples/telemetry_server/telemetry_server.cpp +++ b/Release/libs/websocketpp/examples/telemetry_server/telemetry_server.cpp @@ -46,9 +46,9 @@ class telemetry_server { // 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/Release/libs/websocketpp/examples/testee_client/SConscript b/Release/libs/websocketpp/examples/testee_client/SConscript index 9547f3fc43..64f0ef1f35 100644 --- a/Release/libs/websocketpp/examples/testee_client/SConscript +++ b/Release/libs/websocketpp/examples/testee_client/SConscript @@ -14,10 +14,10 @@ prgs = [] # if a C++11 environment is available build using that, otherwise use boost if env_cpp11.has_key('WSPP_CPP11_ENABLED'): - ALL_LIBS = boostlibs(['system'],env_cpp11) + [platform_libs] + [polyfill_libs] + ALL_LIBS = boostlibs(['system'],env_cpp11) + [platform_libs] + [polyfill_libs] + ['z'] prgs += env_cpp11.Program('testee_client', ["testee_client.cpp"], LIBS = ALL_LIBS) else: - ALL_LIBS = boostlibs(['system','random'],env) + [platform_libs] + [polyfill_libs] + ALL_LIBS = boostlibs(['system','random'],env) + [platform_libs] + [polyfill_libs] + ['z'] prgs += env.Program('testee_client', ["testee_client.cpp"], LIBS = ALL_LIBS) Return('prgs') diff --git a/Release/libs/websocketpp/examples/testee_client/testee_client.cpp b/Release/libs/websocketpp/examples/testee_client/testee_client.cpp index d191df5796..b66e63353f 100644 --- a/Release/libs/websocketpp/examples/testee_client/testee_client.cpp +++ b/Release/libs/websocketpp/examples/testee_client/testee_client.cpp @@ -1,10 +1,75 @@ -#include +/* + * 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. + * + */ +#include #include +#include #include -typedef websocketpp::client client; +struct deflate_config : public websocketpp::config::asio_client { + typedef deflate_config type; + typedef asio_client base; + + typedef base::concurrency_type concurrency_type; + + typedef base::request_type request_type; + typedef base::response_type response_type; + + typedef base::message_type message_type; + typedef base::con_msg_manager_type con_msg_manager_type; + typedef base::endpoint_msg_manager_type endpoint_msg_manager_type; + + typedef base::alog_type alog_type; + typedef base::elog_type elog_type; + + typedef base::rng_type rng_type; + + struct transport_config : public base::transport_config { + typedef type::concurrency_type concurrency_type; + typedef type::alog_type alog_type; + typedef type::elog_type elog_type; + typedef type::request_type request_type; + typedef type::response_type response_type; + typedef websocketpp::transport::asio::basic_socket::endpoint + socket_type; + }; + + typedef websocketpp::transport::asio::endpoint + transport_type; + + /// permessage_compress extension + struct permessage_deflate_config {}; + + typedef websocketpp::extensions::permessage_deflate::enabled + permessage_deflate_type; +}; + +typedef websocketpp::client client; using websocketpp::lib::placeholders::_1; using websocketpp::lib::placeholders::_2; diff --git a/Release/libs/websocketpp/examples/testee_server/SConscript b/Release/libs/websocketpp/examples/testee_server/SConscript index 526886f68a..3c75f4ff27 100644 --- a/Release/libs/websocketpp/examples/testee_server/SConscript +++ b/Release/libs/websocketpp/examples/testee_server/SConscript @@ -14,10 +14,10 @@ prgs = [] # if a C++11 environment is available build using that, otherwise use boost if env_cpp11.has_key('WSPP_CPP11_ENABLED'): - ALL_LIBS = boostlibs(['system'],env_cpp11) + [platform_libs] + [polyfill_libs] + ALL_LIBS = boostlibs(['system'],env_cpp11) + [platform_libs] + [polyfill_libs] + ['z'] prgs += env_cpp11.Program('testee_server', ["testee_server.cpp"], LIBS = ALL_LIBS) else: - ALL_LIBS = boostlibs(['system'],env) + [platform_libs] + [polyfill_libs] + ALL_LIBS = boostlibs(['system'],env) + [platform_libs] + [polyfill_libs] + ['z'] prgs += env.Program('testee_server', ["testee_server.cpp"], LIBS = ALL_LIBS) Return('prgs') diff --git a/Release/libs/websocketpp/examples/testee_server/testee_server.cpp b/Release/libs/websocketpp/examples/testee_server/testee_server.cpp index d44368c886..9ac9a7d4ca 100644 --- a/Release/libs/websocketpp/examples/testee_server/testee_server.cpp +++ b/Release/libs/websocketpp/examples/testee_server/testee_server.cpp @@ -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: @@ -27,6 +27,7 @@ #include #include +#include #include struct testee_config : public websocketpp::config::asio { @@ -64,6 +65,12 @@ struct testee_config : public websocketpp::config::asio { websocketpp::log::elevel::none; static const websocketpp::log::level alog_level = websocketpp::log::alevel::none; + + /// permessage_compress extension + struct permessage_deflate_config {}; + + typedef websocketpp::extensions::permessage_deflate::enabled + permessage_deflate_type; }; typedef websocketpp::server server; diff --git a/Release/libs/websocketpp/examples/utility_client/CMakeLists.txt b/Release/libs/websocketpp/examples/utility_client/CMakeLists.txt index 865a4c783d..6e6cd8c9d5 100644 --- a/Release/libs/websocketpp/examples/utility_client/CMakeLists.txt +++ b/Release/libs/websocketpp/examples/utility_client/CMakeLists.txt @@ -1,11 +1,23 @@ +## Utility client example +## -file (GLOB SOURCE_FILES *.cpp) -file (GLOB HEADER_FILES *.hpp) +Import('env') +Import('env_cpp11') +Import('boostlibs') +Import('platform_libs') +Import('polyfill_libs') -init_target (utility_client) +env = env.Clone () +env_cpp11 = env_cpp11.Clone () -build_executable (${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES}) +prgs = [] -link_boost () -final_target () +# if a C++11 environment is available build using that, otherwise use boost +if env_cpp11.has_key('WSPP_CPP11_ENABLED'): + ALL_LIBS = boostlibs(['system'],env_cpp11) + [platform_libs] + [polyfill_libs] + prgs += env_cpp11.Program('utility_client', ["utility_client.cpp"], LIBS = ALL_LIBS) +else: + ALL_LIBS = boostlibs(['system','random'],env) + [platform_libs] + [polyfill_libs] + prgs += env.Program('utility_client', ["utility_client.cpp"], LIBS = ALL_LIBS) +Return('prgs') \ No newline at end of file diff --git a/Release/libs/websocketpp/examples/utility_client/SConscript b/Release/libs/websocketpp/examples/utility_client/SConscript index 88def4b084..865a4c783d 100644 --- a/Release/libs/websocketpp/examples/utility_client/SConscript +++ b/Release/libs/websocketpp/examples/utility_client/SConscript @@ -1,23 +1,11 @@ -## Utility client example -## -Import('env') -Import('env_cpp11') -Import('boostlibs') -Import('platform_libs') -Import('polyfill_libs') +file (GLOB SOURCE_FILES *.cpp) +file (GLOB HEADER_FILES *.hpp) -env = env.Clone () -env_cpp11 = env_cpp11.Clone () +init_target (utility_client) -prgs = [] +build_executable (${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES}) -# if a C++11 environment is available build using that, otherwise use boost -if env_cpp11.has_key('WSPP_CPP11_ENABLED'): - ALL_LIBS = boostlibs(['system'],env_cpp11) + [platform_libs] + [polyfill_libs] - prgs += env_cpp11.Program('utility_client', ["utility_client.cpp"], LIBS = ALL_LIBS) -else: - ALL_LIBS = boostlibs(['system','random'],env) + [platform_libs] + [polyfill_libs] - prgs += env.Program('utility_client', ["utility_client.cpp"], LIBS = ALL_LIBS) +link_boost () +final_target () -Return('prgs') diff --git a/Release/libs/websocketpp/examples/utility_client/utility_client.cpp b/Release/libs/websocketpp/examples/utility_client/utility_client.cpp index ee13f16a5b..e9108dc015 100644 --- a/Release/libs/websocketpp/examples/utility_client/utility_client.cpp +++ b/Release/libs/websocketpp/examples/utility_client/utility_client.cpp @@ -322,4 +322,4 @@ int main() { } return 0; -} +} \ No newline at end of file diff --git a/Release/libs/websocketpp/readme.md b/Release/libs/websocketpp/readme.md index a9551373d9..18716d4fa8 100644 --- a/Release/libs/websocketpp/readme.md +++ b/Release/libs/websocketpp/readme.md @@ -1,10 +1,12 @@ -WebSocket++ (0.5.1) +WebSocket++ (0.6.0) ========================== 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 @@ -31,6 +33,8 @@ http://www.zaphoyd.com/websocketpp/manual/ **GitHub Repository** https://github.com/zaphoyd/websocketpp/ +GitHub pull requests should be submitted to the `develop` branch. + **Announcements Mailing List** http://groups.google.com/group/websocketpp-announcements/ diff --git a/Release/libs/websocketpp/test/connection/connection.cpp b/Release/libs/websocketpp/test/connection/connection.cpp index 0c67bd1935..5491ab1d06 100644 --- a/Release/libs/websocketpp/test/connection/connection.cpp +++ b/Release/libs/websocketpp/test/connection/connection.cpp @@ -167,6 +167,15 @@ void http_func(server* s, websocketpp::connection_hdl hdl) { con->set_status(websocketpp::http::status_code::ok); } +void defer_http_func(server* s, bool * deferred, websocketpp::connection_hdl hdl) { + *deferred = true; + + server::connection_ptr con = s->get_con_from_hdl(hdl); + + websocketpp::lib::error_code ec = con->defer_http_response(); + BOOST_CHECK_EQUAL(ec, websocketpp::lib::error_code()); +} + void check_on_fail(server* s, websocketpp::lib::error_code ec, bool & called, websocketpp::connection_hdl hdl) { @@ -223,6 +232,44 @@ BOOST_AUTO_TEST_CASE( http_request ) { BOOST_CHECK_EQUAL(run_server_test(s,input), output); } +BOOST_AUTO_TEST_CASE( deferred_http_request ) { + std::string input = "GET /foo/bar HTTP/1.1\r\nHost: www.example.com\r\nOrigin: http://www.example.com\r\n\r\n"; + std::string output = "HTTP/1.1 200 OK\r\nContent-Length: 8\r\nServer: "; + output+=websocketpp::user_agent; + output+="\r\n\r\n/foo/bar"; + + server s; + server::connection_ptr con; + bool deferred = false; + s.set_http_handler(bind(&defer_http_func,&s, &deferred,::_1)); + + s.clear_access_channels(websocketpp::log::alevel::all); + s.clear_error_channels(websocketpp::log::elevel::all); + + std::stringstream ostream; + s.register_ostream(&ostream); + + con = s.get_connection(); + con->start(); + + BOOST_CHECK(!deferred); + BOOST_CHECK_EQUAL(ostream.str(), ""); + con->read_some(input.data(),input.size()); + BOOST_CHECK(deferred); + BOOST_CHECK_EQUAL(ostream.str(), ""); + + con->set_body(con->get_resource()); + con->set_status(websocketpp::http::status_code::ok); + + websocketpp::lib::error_code ec; + s.send_http_response(con->get_handle(),ec); + BOOST_CHECK_EQUAL(ec, websocketpp::lib::error_code()); + BOOST_CHECK_EQUAL(ostream.str(), output); + con->send_http_response(ec); + BOOST_CHECK_EQUAL(ec, make_error_code(websocketpp::error::invalid_state)); + +} + BOOST_AUTO_TEST_CASE( request_no_server_header ) { std::string input = "GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Version: 13\r\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\nOrigin: http://www.example.com\r\n\r\n"; std::string output = "HTTP/1.1 101 Switching Protocols\r\nConnection: upgrade\r\nSec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\nUpgrade: websocket\r\n\r\n"; diff --git a/Release/libs/websocketpp/test/endpoint/endpoint.cpp b/Release/libs/websocketpp/test/endpoint/endpoint.cpp index 08b0560b50..34764d1bd7 100644 --- a/Release/libs/websocketpp/test/endpoint/endpoint.cpp +++ b/Release/libs/websocketpp/test/endpoint/endpoint.cpp @@ -57,6 +57,35 @@ BOOST_AUTO_TEST_CASE( initialize_server_asio_external ) { s.init_asio(&ios); } +#ifdef _WEBSOCKETPP_MOVE_SEMANTICS_ +BOOST_AUTO_TEST_CASE( move_construct_server_core ) { + websocketpp::server s1; + + websocketpp::server s2(std::move(s1)); +} + +/* +// temporary disable because library doesn't pass +BOOST_AUTO_TEST_CASE( emplace ) { + std::stringstream out1; + std::stringstream out2; + + std::vector> v; + + v.emplace_back(); + v.emplace_back(); + + v[0].get_alog().set_ostream(&out1); + v[0].get_alog().set_ostream(&out2); + + v[0].get_alog().write(websocketpp::log::alevel::app,"devel0"); + v[1].get_alog().write(websocketpp::log::alevel::app,"devel1"); + BOOST_CHECK( out1.str().size() > 0 ); + BOOST_CHECK( out2.str().size() > 0 ); +}*/ + +#endif // _WEBSOCKETPP_MOVE_SEMANTICS_ + struct endpoint_extension { endpoint_extension() : extension_value(5) {} diff --git a/Release/libs/websocketpp/test/extension/permessage_deflate.cpp b/Release/libs/websocketpp/test/extension/permessage_deflate.cpp index 60e3c24d57..06ace5e2c5 100644 --- a/Release/libs/websocketpp/test/extension/permessage_deflate.cpp +++ b/Release/libs/websocketpp/test/extension/permessage_deflate.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Peter Thorson. All rights reserved. + * Copyright (c) 2013, 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: @@ -100,10 +100,10 @@ BOOST_AUTO_TEST_CASE( negotiation_invalid_attr ) { BOOST_CHECK_EQUAL( v.esp.second, ""); } -// Negotiate s2c_no_context_takeover -BOOST_AUTO_TEST_CASE( negotiate_s2c_no_context_takeover_invalid ) { +// Negotiate server_no_context_takeover +BOOST_AUTO_TEST_CASE( negotiate_server_no_context_takeover_invalid ) { ext_vars v; - v.attr["s2c_no_context_takeover"] = "foo"; + v.attr["server_no_context_takeover"] = "foo"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( !v.exts.is_enabled() ); @@ -111,30 +111,30 @@ BOOST_AUTO_TEST_CASE( negotiate_s2c_no_context_takeover_invalid ) { BOOST_CHECK_EQUAL( v.esp.second, ""); } -BOOST_AUTO_TEST_CASE( negotiate_s2c_no_context_takeover ) { +BOOST_AUTO_TEST_CASE( negotiate_server_no_context_takeover ) { ext_vars v; - v.attr["s2c_no_context_takeover"] = ""; + v.attr["server_no_context_takeover"] = ""; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; s2c_no_context_takeover"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_no_context_takeover"); } -BOOST_AUTO_TEST_CASE( negotiate_s2c_no_context_takeover_server_initiated ) { +BOOST_AUTO_TEST_CASE( negotiate_server_no_context_takeover_server_initiated ) { ext_vars v; - v.exts.enable_s2c_no_context_takeover(); + v.exts.enable_server_no_context_takeover(); v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; s2c_no_context_takeover"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_no_context_takeover"); } -// Negotiate c2s_no_context_takeover -BOOST_AUTO_TEST_CASE( negotiate_c2s_no_context_takeover_invalid ) { +// Negotiate client_no_context_takeover +BOOST_AUTO_TEST_CASE( negotiate_client_no_context_takeover_invalid ) { ext_vars v; - v.attr["c2s_no_context_takeover"] = "foo"; + v.attr["client_no_context_takeover"] = "foo"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( !v.exts.is_enabled() ); @@ -142,29 +142,29 @@ BOOST_AUTO_TEST_CASE( negotiate_c2s_no_context_takeover_invalid ) { BOOST_CHECK_EQUAL( v.esp.second, ""); } -BOOST_AUTO_TEST_CASE( negotiate_c2s_no_context_takeover ) { +BOOST_AUTO_TEST_CASE( negotiate_client_no_context_takeover ) { ext_vars v; - v.attr["c2s_no_context_takeover"] = ""; + v.attr["client_no_context_takeover"] = ""; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; c2s_no_context_takeover"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_no_context_takeover"); } -BOOST_AUTO_TEST_CASE( negotiate_c2s_no_context_takeover_server_initiated ) { +BOOST_AUTO_TEST_CASE( negotiate_client_no_context_takeover_server_initiated ) { ext_vars v; - v.exts.enable_c2s_no_context_takeover(); + v.exts.enable_client_no_context_takeover(); v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; c2s_no_context_takeover"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_no_context_takeover"); } -// Negotiate s2c_max_window_bits -BOOST_AUTO_TEST_CASE( negotiate_s2c_max_window_bits_invalid ) { +// Negotiate server_max_window_bits +BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_invalid ) { ext_vars v; std::vector values; @@ -175,7 +175,7 @@ BOOST_AUTO_TEST_CASE( negotiate_s2c_max_window_bits_invalid ) { std::vector::const_iterator it; for (it = values.begin(); it != values.end(); ++it) { - v.attr["s2c_max_window_bits"] = *it; + v.attr["server_max_window_bits"] = *it; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( !v.exts.is_enabled() ); @@ -184,16 +184,16 @@ BOOST_AUTO_TEST_CASE( negotiate_s2c_max_window_bits_invalid ) { } } -BOOST_AUTO_TEST_CASE( negotiate_s2c_max_window_bits_valid ) { +BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_valid ) { ext_vars v; - v.attr["s2c_max_window_bits"] = "8"; + v.attr["server_max_window_bits"] = "8"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; s2c_max_window_bits=8"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=8"); - v.attr["s2c_max_window_bits"] = "15"; + v.attr["server_max_window_bits"] = "15"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); @@ -201,21 +201,21 @@ BOOST_AUTO_TEST_CASE( negotiate_s2c_max_window_bits_valid ) { BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate"); } -BOOST_AUTO_TEST_CASE( invalid_set_s2c_max_window_bits ) { +BOOST_AUTO_TEST_CASE( invalid_set_server_max_window_bits ) { ext_vars v; - v.ec = v.exts.set_s2c_max_window_bits(7,pmd_mode::decline); + v.ec = v.exts.set_server_max_window_bits(7,pmd_mode::decline); BOOST_CHECK_EQUAL(v.ec,pmde::make_error_code(pmde::invalid_max_window_bits)); - v.ec = v.exts.set_s2c_max_window_bits(16,pmd_mode::decline); + v.ec = v.exts.set_server_max_window_bits(16,pmd_mode::decline); BOOST_CHECK_EQUAL(v.ec,pmde::make_error_code(pmde::invalid_max_window_bits)); } -BOOST_AUTO_TEST_CASE( negotiate_s2c_max_window_bits_decline ) { +BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_decline ) { ext_vars v; - v.attr["s2c_max_window_bits"] = "8"; + v.attr["server_max_window_bits"] = "8"; - v.ec = v.exts.set_s2c_max_window_bits(15,pmd_mode::decline); + v.ec = v.exts.set_server_max_window_bits(15,pmd_mode::decline); v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); @@ -223,44 +223,44 @@ BOOST_AUTO_TEST_CASE( negotiate_s2c_max_window_bits_decline ) { BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate"); } -BOOST_AUTO_TEST_CASE( negotiate_s2c_max_window_bits_accept ) { +BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_accept ) { ext_vars v; - v.attr["s2c_max_window_bits"] = "8"; + v.attr["server_max_window_bits"] = "8"; - v.ec = v.exts.set_s2c_max_window_bits(15,pmd_mode::accept); + v.ec = v.exts.set_server_max_window_bits(15,pmd_mode::accept); v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; s2c_max_window_bits=8"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=8"); } -BOOST_AUTO_TEST_CASE( negotiate_s2c_max_window_bits_largest ) { +BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_largest ) { ext_vars v; - v.attr["s2c_max_window_bits"] = "8"; + v.attr["server_max_window_bits"] = "8"; - v.ec = v.exts.set_s2c_max_window_bits(15,pmd_mode::largest); + v.ec = v.exts.set_server_max_window_bits(15,pmd_mode::largest); v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; s2c_max_window_bits=8"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=8"); } -BOOST_AUTO_TEST_CASE( negotiate_s2c_max_window_bits_smallest ) { +BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_smallest ) { ext_vars v; - v.attr["s2c_max_window_bits"] = "8"; + v.attr["server_max_window_bits"] = "8"; - v.ec = v.exts.set_s2c_max_window_bits(15,pmd_mode::smallest); + v.ec = v.exts.set_server_max_window_bits(15,pmd_mode::smallest); v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; s2c_max_window_bits=8"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=8"); } -// Negotiate s2c_max_window_bits -BOOST_AUTO_TEST_CASE( negotiate_c2s_max_window_bits_invalid ) { +// Negotiate server_max_window_bits +BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_invalid ) { ext_vars v; std::vector values; @@ -270,7 +270,7 @@ BOOST_AUTO_TEST_CASE( negotiate_c2s_max_window_bits_invalid ) { std::vector::const_iterator it; for (it = values.begin(); it != values.end(); ++it) { - v.attr["c2s_max_window_bits"] = *it; + v.attr["client_max_window_bits"] = *it; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( !v.exts.is_enabled() ); @@ -279,43 +279,43 @@ BOOST_AUTO_TEST_CASE( negotiate_c2s_max_window_bits_invalid ) { } } -BOOST_AUTO_TEST_CASE( negotiate_c2s_max_window_bits_valid ) { +BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_valid ) { ext_vars v; - v.attr["c2s_max_window_bits"] = ""; + v.attr["client_max_window_bits"] = ""; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate"); - v.attr["c2s_max_window_bits"] = "8"; + v.attr["client_max_window_bits"] = "8"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; c2s_max_window_bits=8"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=8"); - v.attr["c2s_max_window_bits"] = "15"; + v.attr["client_max_window_bits"] = "15"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate"); } -BOOST_AUTO_TEST_CASE( invalid_set_c2s_max_window_bits ) { +BOOST_AUTO_TEST_CASE( invalid_set_client_max_window_bits ) { ext_vars v; - v.ec = v.exts.set_c2s_max_window_bits(7,pmd_mode::decline); + v.ec = v.exts.set_client_max_window_bits(7,pmd_mode::decline); BOOST_CHECK_EQUAL(v.ec,pmde::make_error_code(pmde::invalid_max_window_bits)); - v.ec = v.exts.set_c2s_max_window_bits(16,pmd_mode::decline); + v.ec = v.exts.set_client_max_window_bits(16,pmd_mode::decline); BOOST_CHECK_EQUAL(v.ec,pmde::make_error_code(pmde::invalid_max_window_bits)); } -BOOST_AUTO_TEST_CASE( negotiate_c2s_max_window_bits_decline ) { +BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_decline ) { ext_vars v; - v.attr["c2s_max_window_bits"] = "8"; + v.attr["client_max_window_bits"] = "8"; - v.ec = v.exts.set_c2s_max_window_bits(8,pmd_mode::decline); + v.ec = v.exts.set_client_max_window_bits(8,pmd_mode::decline); v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); @@ -323,40 +323,40 @@ BOOST_AUTO_TEST_CASE( negotiate_c2s_max_window_bits_decline ) { BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate"); } -BOOST_AUTO_TEST_CASE( negotiate_c2s_max_window_bits_accept ) { +BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_accept ) { ext_vars v; - v.attr["c2s_max_window_bits"] = "8"; + v.attr["client_max_window_bits"] = "8"; - v.ec = v.exts.set_c2s_max_window_bits(15,pmd_mode::accept); + v.ec = v.exts.set_client_max_window_bits(15,pmd_mode::accept); v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; c2s_max_window_bits=8"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=8"); } -BOOST_AUTO_TEST_CASE( negotiate_c2s_max_window_bits_largest ) { +BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_largest ) { ext_vars v; - v.attr["c2s_max_window_bits"] = "8"; + v.attr["client_max_window_bits"] = "8"; - v.ec = v.exts.set_c2s_max_window_bits(15,pmd_mode::largest); + v.ec = v.exts.set_client_max_window_bits(15,pmd_mode::largest); v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; c2s_max_window_bits=8"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=8"); } -BOOST_AUTO_TEST_CASE( negotiate_c2s_max_window_bits_smallest ) { +BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_smallest ) { ext_vars v; - v.attr["c2s_max_window_bits"] = "8"; + v.attr["client_max_window_bits"] = "8"; - v.ec = v.exts.set_c2s_max_window_bits(15,pmd_mode::smallest); + v.ec = v.exts.set_client_max_window_bits(15,pmd_mode::smallest); v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; c2s_max_window_bits=8"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_max_window_bits=8"); } @@ -364,180 +364,286 @@ BOOST_AUTO_TEST_CASE( negotiate_c2s_max_window_bits_smallest ) { BOOST_AUTO_TEST_CASE( negotiate_two_client_initiated1 ) { ext_vars v; - v.attr["s2c_no_context_takeover"] = ""; - v.attr["c2s_no_context_takeover"] = ""; + v.attr["server_no_context_takeover"] = ""; + v.attr["client_no_context_takeover"] = ""; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; s2c_no_context_takeover; c2s_no_context_takeover"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_no_context_takeover; client_no_context_takeover"); } BOOST_AUTO_TEST_CASE( negotiate_two_client_initiated2 ) { ext_vars v; - v.attr["s2c_no_context_takeover"] = ""; - v.attr["s2c_max_window_bits"] = "10"; + v.attr["server_no_context_takeover"] = ""; + v.attr["server_max_window_bits"] = "10"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; s2c_no_context_takeover; s2c_max_window_bits=10"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_no_context_takeover; server_max_window_bits=10"); } BOOST_AUTO_TEST_CASE( negotiate_two_client_initiated3 ) { ext_vars v; - v.attr["s2c_no_context_takeover"] = ""; - v.attr["c2s_max_window_bits"] = "10"; + v.attr["server_no_context_takeover"] = ""; + v.attr["client_max_window_bits"] = "10"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; s2c_no_context_takeover; c2s_max_window_bits=10"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_no_context_takeover; client_max_window_bits=10"); } BOOST_AUTO_TEST_CASE( negotiate_two_client_initiated4 ) { ext_vars v; - v.attr["c2s_no_context_takeover"] = ""; - v.attr["s2c_max_window_bits"] = "10"; + v.attr["client_no_context_takeover"] = ""; + v.attr["server_max_window_bits"] = "10"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; c2s_no_context_takeover; s2c_max_window_bits=10"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_no_context_takeover; server_max_window_bits=10"); } BOOST_AUTO_TEST_CASE( negotiate_two_client_initiated5 ) { ext_vars v; - v.attr["c2s_no_context_takeover"] = ""; - v.attr["c2s_max_window_bits"] = "10"; + v.attr["client_no_context_takeover"] = ""; + v.attr["client_max_window_bits"] = "10"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; c2s_no_context_takeover; c2s_max_window_bits=10"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_no_context_takeover; client_max_window_bits=10"); } BOOST_AUTO_TEST_CASE( negotiate_two_client_initiated6 ) { ext_vars v; - v.attr["s2c_max_window_bits"] = "10"; - v.attr["c2s_max_window_bits"] = "10"; + v.attr["server_max_window_bits"] = "10"; + v.attr["client_max_window_bits"] = "10"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; s2c_max_window_bits=10; c2s_max_window_bits=10"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_max_window_bits=10; client_max_window_bits=10"); } BOOST_AUTO_TEST_CASE( negotiate_three_client_initiated1 ) { ext_vars v; - v.attr["s2c_no_context_takeover"] = ""; - v.attr["c2s_no_context_takeover"] = ""; - v.attr["s2c_max_window_bits"] = "10"; + v.attr["server_no_context_takeover"] = ""; + v.attr["client_no_context_takeover"] = ""; + v.attr["server_max_window_bits"] = "10"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; s2c_no_context_takeover; c2s_no_context_takeover; s2c_max_window_bits=10"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_no_context_takeover; client_no_context_takeover; server_max_window_bits=10"); } BOOST_AUTO_TEST_CASE( negotiate_three_client_initiated2 ) { ext_vars v; - v.attr["s2c_no_context_takeover"] = ""; - v.attr["c2s_no_context_takeover"] = ""; - v.attr["c2s_max_window_bits"] = "10"; + v.attr["server_no_context_takeover"] = ""; + v.attr["client_no_context_takeover"] = ""; + v.attr["client_max_window_bits"] = "10"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; s2c_no_context_takeover; c2s_no_context_takeover; c2s_max_window_bits=10"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_no_context_takeover; client_no_context_takeover; client_max_window_bits=10"); } BOOST_AUTO_TEST_CASE( negotiate_three_client_initiated3 ) { ext_vars v; - v.attr["s2c_no_context_takeover"] = ""; - v.attr["s2c_max_window_bits"] = "10"; - v.attr["c2s_max_window_bits"] = "10"; + v.attr["server_no_context_takeover"] = ""; + v.attr["server_max_window_bits"] = "10"; + v.attr["client_max_window_bits"] = "10"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; s2c_no_context_takeover; s2c_max_window_bits=10; c2s_max_window_bits=10"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_no_context_takeover; server_max_window_bits=10; client_max_window_bits=10"); } BOOST_AUTO_TEST_CASE( negotiate_three_client_initiated4 ) { ext_vars v; - v.attr["c2s_no_context_takeover"] = ""; - v.attr["s2c_max_window_bits"] = "10"; - v.attr["c2s_max_window_bits"] = "10"; + v.attr["client_no_context_takeover"] = ""; + v.attr["server_max_window_bits"] = "10"; + v.attr["client_max_window_bits"] = "10"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; c2s_no_context_takeover; s2c_max_window_bits=10; c2s_max_window_bits=10"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; client_no_context_takeover; server_max_window_bits=10; client_max_window_bits=10"); } BOOST_AUTO_TEST_CASE( negotiate_four_client_initiated ) { ext_vars v; - v.attr["s2c_no_context_takeover"] = ""; - v.attr["c2s_no_context_takeover"] = ""; - v.attr["s2c_max_window_bits"] = "10"; - v.attr["c2s_max_window_bits"] = "10"; + v.attr["server_no_context_takeover"] = ""; + v.attr["client_no_context_takeover"] = ""; + v.attr["server_max_window_bits"] = "10"; + v.attr["client_max_window_bits"] = "10"; v.esp = v.exts.negotiate(v.attr); BOOST_CHECK( v.exts.is_enabled() ); BOOST_CHECK_EQUAL( v.esp.first, websocketpp::lib::error_code() ); - BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; s2c_no_context_takeover; c2s_no_context_takeover; s2c_max_window_bits=10; c2s_max_window_bits=10"); + BOOST_CHECK_EQUAL( v.esp.second, "permessage-deflate; server_no_context_takeover; client_no_context_takeover; server_max_window_bits=10; client_max_window_bits=10"); } // Compression -/* BOOST_AUTO_TEST_CASE( compress_data ) { ext_vars v; - std::string in = "Hello"; - std::string out; - std::string in2; - std::string out2; + std::string compress_in = "Hello"; + std::string compress_out; + std::string decompress_out; - v.exts.init(); + v.exts.init(true); - v.ec = v.exts.compress(in,out); + v.ec = v.exts.compress(compress_in,compress_out); + BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); - std::cout << "in : " << websocketpp::utility::to_hex(in) << std::endl; + v.ec = v.exts.decompress(reinterpret_cast(compress_out.data()),compress_out.size(),decompress_out); BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); - std::cout << "out: " << websocketpp::utility::to_hex(out) << std::endl; + BOOST_CHECK_EQUAL( compress_in, decompress_out ); +} + +BOOST_AUTO_TEST_CASE( compress_data_multiple ) { + ext_vars v; + + v.exts.init(true); + + for (int i = 0; i < 2; i++) { + std::string compress_in = "Hello"; + std::string compress_out; + std::string decompress_out; + + v.ec = v.exts.compress(compress_in,compress_out); + BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); + + v.ec = v.exts.decompress(reinterpret_cast(compress_out.data()),compress_out.size(),decompress_out); + BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); + BOOST_CHECK_EQUAL( compress_in, decompress_out ); + } +} + +BOOST_AUTO_TEST_CASE( compress_data_large ) { + ext_vars v; - in2 = out; + std::string compress_in(600,'*'); + std::string compress_out; + std::string decompress_out; - v.ec = v.exts.decompress(reinterpret_cast(in2.data()),in2.size(),out2); + websocketpp::http::attribute_list alist; + alist["server_max_window_bits"] = "8"; + v.exts.set_server_max_window_bits(8,websocketpp::extensions::permessage_deflate::mode::smallest); + + v.exts.negotiate(alist); + v.exts.init(true); + + v.ec = v.exts.compress(compress_in,compress_out); + BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); + + v.ec = v.exts.decompress(reinterpret_cast(compress_out.data()),compress_out.size(),decompress_out); BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); - std::cout << "out: " << websocketpp::utility::to_hex(out2) << std::endl; - BOOST_CHECK_EQUAL( out, out2 ); + BOOST_CHECK_EQUAL( compress_in, decompress_out ); } +BOOST_AUTO_TEST_CASE( compress_data_no_context_takeover ) { + ext_vars v; + + std::string compress_in = "Hello"; + std::string compress_out1; + std::string compress_out2; + std::string decompress_out; + + websocketpp::http::attribute_list alist; + + alist["server_no_context_takeover"] = ""; + v.exts.enable_server_no_context_takeover(); + + v.exts.negotiate(alist); + v.exts.init(true); + + v.ec = v.exts.compress(compress_in,compress_out1); + BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); + + v.ec = v.exts.decompress( + reinterpret_cast(compress_out1.data()), + compress_out1.size(), + decompress_out + ); + BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); + BOOST_CHECK_EQUAL( compress_in, decompress_out ); + + decompress_out = ""; + + v.ec = v.exts.compress(compress_in,compress_out2); + BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); + + v.ec = v.exts.decompress( + reinterpret_cast(compress_out2.data()), + compress_out2.size(), + decompress_out + ); + BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); + BOOST_CHECK_EQUAL( compress_in, decompress_out ); + + BOOST_CHECK_EQUAL( compress_out1, compress_out2 ); +} + +BOOST_AUTO_TEST_CASE( compress_empty ) { + ext_vars v; + + std::string compress_in = ""; + std::string compress_out; + std::string decompress_out; + + v.exts.init(true); + + v.ec = v.exts.compress(compress_in,compress_out); + BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); + + v.ec = v.exts.decompress(reinterpret_cast(compress_out.data()),compress_out.size(),decompress_out); + + compress_out = ""; + decompress_out = ""; + + v.ec = v.exts.compress(compress_in,compress_out); + BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); + + v.ec = v.exts.decompress(reinterpret_cast(compress_out.data()),compress_out.size(),decompress_out); + BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); + BOOST_CHECK_EQUAL( compress_in, decompress_out ); +} + +/// @todo: more compression tests +/** + * - compress at different compression levels + */ + +// Decompression BOOST_AUTO_TEST_CASE( decompress_data ) { ext_vars v; - uint8_t in[12] = {0xf2, 0x48, 0xcd, 0xc9, 0xc9, 0x07, 0x00, 0x00, 0x00, 0xff, 0xff}; - std::string out; + uint8_t in[11] = {0xf2, 0x48, 0xcd, 0xc9, 0xc9, 0x07, 0x00, 0x00, 0x00, 0xff, 0xff}; + std::string out = ""; + std::string reference = "Hello"; - v.exts.init(); + v.exts.init(true); - v.ec = v.exts.decompress(in,12,out); + v.ec = v.exts.decompress(in,11,out); BOOST_CHECK_EQUAL( v.ec, websocketpp::lib::error_code() ); - std::cout << "out: " << websocketpp::utility::to_hex(out) << std::endl; - BOOST_CHECK( false ); + BOOST_CHECK_EQUAL( out, reference ); } -*/ diff --git a/Release/libs/websocketpp/test/logger/basic.cpp b/Release/libs/websocketpp/test/logger/basic.cpp index de51e5ad20..a73053575b 100644 --- a/Release/libs/websocketpp/test/logger/basic.cpp +++ b/Release/libs/websocketpp/test/logger/basic.cpp @@ -34,6 +34,8 @@ #include #include +typedef websocketpp::log::basic basic_access_log_type; + BOOST_AUTO_TEST_CASE( is_token_char ) { typedef websocketpp::log::basic error_log; @@ -79,3 +81,65 @@ BOOST_AUTO_TEST_CASE( basic_concurrency ) { //std::cout << "|" << out.str() << "|" << std::endl; BOOST_CHECK( out.str().size() > 0 ); } + + +BOOST_AUTO_TEST_CASE( copy_constructor ) { + std::stringstream out; + + basic_access_log_type logger1(0xffffffff,&out); + basic_access_log_type logger2(logger1); + + logger2.set_channels(0xffffffff); + logger2.write(websocketpp::log::alevel::devel,"devel"); + BOOST_CHECK( out.str().size() > 0 ); +} + +#ifdef _WEBSOCKETPP_MOVE_SEMANTICS_ +BOOST_AUTO_TEST_CASE( move_constructor ) { + std::stringstream out; + + basic_access_log_type logger1(0xffffffff,&out); + basic_access_log_type logger2(std::move(logger1)); + + logger2.set_channels(0xffffffff); + logger2.write(websocketpp::log::alevel::devel,"devel"); + BOOST_CHECK( out.str().size() > 0 ); +} + +// Emplace requires move assignment, which logger doesn't support right now +// due to const members. This is pretty irritating and will probably result in +// the const members being removed. For now though this test will fail to +// compile +/*BOOST_AUTO_TEST_CASE( emplace ) { + std::stringstream out1; + std::stringstream out2; + + std::vector v; + + v.emplace_back(websocketpp::log::level(0xffffffff),&out1); + v.emplace_back(websocketpp::log::level(0xffffffff),&out2); + + v[0].set_channels(0xffffffff); + v[1].set_channels(0xffffffff); + v[0].write(websocketpp::log::alevel::devel,"devel"); + v[1].write(websocketpp::log::alevel::devel,"devel"); + BOOST_CHECK( out1.str().size() > 0 ); + BOOST_CHECK( out2.str().size() > 0 ); +}*/ +#endif // #ifdef _WEBSOCKETPP_MOVE_SEMANTICS_ + +// As long as there are const member variables these can't exist +// These remain commented as they are useful for testing the deleted operators +/*BOOST_AUTO_TEST_CASE( copy_assign ) { + basic_access_log_type logger1; + basic_access_log_type logger2; + + logger2 = logger1; +} + +BOOST_AUTO_TEST_CASE( move_assign ) { + basic_access_log_type logger1; + basic_access_log_type logger2; + + logger2 = std::move(logger1); +}*/ diff --git a/Release/libs/websocketpp/test/processors/hybi13.cpp b/Release/libs/websocketpp/test/processors/hybi13.cpp index d16ba1797b..9b2618ac07 100644 --- a/Release/libs/websocketpp/test/processors/hybi13.cpp +++ b/Release/libs/websocketpp/test/processors/hybi13.cpp @@ -682,7 +682,7 @@ BOOST_AUTO_TEST_CASE( extension_negotiation_permessage_deflate ) { processor_setup_ext env(true); env.req.replace_header("Sec-WebSocket-Extensions", - "permessage-deflate; c2s_max_window_bits"); + "permessage-deflate; client_max_window_bits"); std::pair neg_results; neg_results = env.p.negotiate_extensions(env.req); diff --git a/Release/libs/websocketpp/test/transport/SConscript b/Release/libs/websocketpp/test/transport/SConscript index 74ec781ef9..71b31b6c5a 100644 --- a/Release/libs/websocketpp/test/transport/SConscript +++ b/Release/libs/websocketpp/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/Release/libs/websocketpp/test/transport/asio/SConscript b/Release/libs/websocketpp/test/transport/asio/SConscript index 6cae57c07b..ea0526b3ac 100644 --- a/Release/libs/websocketpp/test/transport/asio/SConscript +++ b/Release/libs/websocketpp/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/Release/libs/websocketpp/test/transport/integration.cpp b/Release/libs/websocketpp/test/transport/integration.cpp index 1d2e7e795c..f886fbf263 100644 --- a/Release/libs/websocketpp/test/transport/integration.cpp +++ b/Release/libs/websocketpp/test/transport/integration.cpp @@ -607,3 +607,11 @@ BOOST_AUTO_TEST_CASE( pause_reading ) { BOOST_AUTO_TEST_CASE( server_connection_cleanup ) { server_tls s; } + +#ifdef _WEBSOCKETPP_MOVE_SEMANTICS_ +BOOST_AUTO_TEST_CASE( move_construct_transport ) { + server s1; + + server s2(std::move(s1)); +} +#endif // _WEBSOCKETPP_MOVE_SEMANTICS_ diff --git a/Release/libs/websocketpp/test/transport/iostream/connection.cpp b/Release/libs/websocketpp/test/transport/iostream/connection.cpp index 49465d6bae..2a45013523 100644 --- a/Release/libs/websocketpp/test/transport/iostream/connection.cpp +++ b/Release/libs/websocketpp/test/transport/iostream/connection.cpp @@ -117,7 +117,7 @@ struct stub_con : public iostream_con { indef_read_size = num_bytes; indef_read_buf = buf; indef_read_len = len; - + indef_read(); } @@ -138,7 +138,7 @@ struct stub_con : public iostream_con { void handle_indef(websocketpp::lib::error_code const & e, size_t amt_read) { ec = e; indef_read_total += amt_read; - + indef_read(); } @@ -203,6 +203,15 @@ websocketpp::lib::error_code write_handler(std::string & o, websocketpp::connect return websocketpp::lib::error_code(); } +websocketpp::lib::error_code vector_write_handler(std::string & o, websocketpp::connection_hdl, std::vector const & bufs) { + std::vector::const_iterator it; + for (it = bufs.begin(); it != bufs.end(); it++) { + o += std::string((*it).buf, (*it).len); + } + + return websocketpp::lib::error_code(); +} + websocketpp::lib::error_code write_handler_error(websocketpp::connection_hdl, char const *, size_t) { return make_error_code(websocketpp::transport::error::general); } @@ -249,7 +258,7 @@ BOOST_AUTO_TEST_CASE( async_write_vector_0_write_handler ) { std::string output; stub_con::ptr con(new stub_con(true,alogger,elogger)); - + con->set_write_handler(websocketpp::lib::bind( &write_handler, websocketpp::lib::ref(output), @@ -354,6 +363,31 @@ BOOST_AUTO_TEST_CASE( async_write_vector_2_write_handler ) { BOOST_CHECK_EQUAL( output, "foobar" ); } +BOOST_AUTO_TEST_CASE( async_write_vector_2_vector_write_handler ) { + std::string output; + + stub_con::ptr con(new stub_con(true,alogger,elogger)); + con->set_vector_write_handler(websocketpp::lib::bind( + &vector_write_handler, + websocketpp::lib::ref(output), + websocketpp::lib::placeholders::_1, + websocketpp::lib::placeholders::_2 + )); + + std::vector bufs; + + std::string foo = "foo"; + std::string bar = "bar"; + + bufs.push_back(websocketpp::transport::buffer(foo.data(),foo.size())); + bufs.push_back(websocketpp::transport::buffer(bar.data(),bar.size())); + + con->write(bufs); + + BOOST_CHECK( !con->ec ); + BOOST_CHECK_EQUAL( output, "foobar" ); +} + BOOST_AUTO_TEST_CASE( async_read_at_least_too_much ) { stub_con::ptr con(new stub_con(true,alogger,elogger)); @@ -483,7 +517,7 @@ BOOST_AUTO_TEST_CASE( async_read_at_least_read_some_indef ) { BOOST_CHECK( !con->ec ); BOOST_CHECK_EQUAL( std::string(buf,10), "aaaaaxxxxx" ); BOOST_CHECK_EQUAL( con->indef_read_total, 5 ); - + // A subsequent read should read 5 more because the indef read refreshes // itself. The new read will start again at the beginning of the buffer. BOOST_CHECK_EQUAL(con->read_some(input+5,5), 5); @@ -539,7 +573,7 @@ websocketpp::lib::error_code sd_handler(websocketpp::connection_hdl) { BOOST_AUTO_TEST_CASE( shutdown_handler ) { stub_con::ptr con(new stub_con(true,alogger,elogger)); - + con->set_shutdown_handler(&sd_handler); BOOST_CHECK_EQUAL( con->ec, make_error_code(websocketpp::error::test) ); con->shutdown(); diff --git a/Release/libs/websocketpp/tutorials/utility_client/utility_client.md b/Release/libs/websocketpp/tutorials/utility_client/utility_client.md index 5490f571bb..85cc928178 100644 --- a/Release/libs/websocketpp/tutorials/utility_client/utility_client.md +++ b/Release/libs/websocketpp/tutorials/utility_client/utility_client.md @@ -235,7 +235,7 @@ The `websocket_endpoint` object has gained some new data members and methods. It A new WebSocket connection is initiated via a three step process. First, a connection request is created by `endpoint::get_connection(uri)`. Next, the connection request is configured. Lastly, the connection request is submitted back to the endpoint via `endpoint::connect()` which adds it to the queue of new connections to make. > ###### Terminology `connection_ptr` -> WebSocket++ keeps track of connection related resources using a reference counted shared pointer. The type of this pointer is `endpoint::connection_ptr`. A `connection_ptr` allows direct access to information about the connection and allows changing connection settings. Because of this direct access and their internal resource management role within the library it is not safe to for end applications to use `connection_ptr` except in the specific circumstances detailed below. +> WebSocket++ keeps track of connection related resources using a reference counted shared pointer. The type of this pointer is `endpoint::connection_ptr`. A `connection_ptr` allows direct access to information about the connection and allows changing connection settings. Because of this direct access and their internal resource management role within the library it is not safe for end applications to use `connection_ptr` except in the specific circumstances detailed below. > > **When is it safe to use `connection_ptr`?** > - After `endpoint::get_connection(...)` and before `endpoint::connect()`: `get_connection` returns a `connection_ptr`. It is safe to use this pointer to configure your new connection. Once you submit the connection to `connect` you may no longer use the `connection_ptr` and should discard it immediately for optimal memory management. @@ -813,6 +813,13 @@ Enter Command: show 0 _Using TLS / Secure WebSockets_ +- Change the includes +- link to the new library dependencies +- Switch the config +- add the `tls_init_handler` +- configure the SSL context for desired security level +- mixing secure and non-secure connections in one application. + Chapter 2: Intermediate Features -------------------------------- diff --git a/Release/libs/websocketpp/websocketpp/common/asio.hpp b/Release/libs/websocketpp/websocketpp/common/asio.hpp new file mode 100755 index 0000000000..ca48359399 --- /dev/null +++ b/Release/libs/websocketpp/websocketpp/common/asio.hpp @@ -0,0 +1,131 @@ +/* + * 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 + #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/Release/libs/websocketpp/websocketpp/common/asio_ssl.hpp b/Release/libs/websocketpp/websocketpp/common/asio_ssl.hpp new file mode 100755 index 0000000000..cc74297ea7 --- /dev/null +++ b/Release/libs/websocketpp/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/Release/libs/websocketpp/websocketpp/common/chrono.hpp b/Release/libs/websocketpp/websocketpp/common/chrono.hpp index c536a3652c..d50dd1209a 100644 --- a/Release/libs/websocketpp/websocketpp/common/chrono.hpp +++ b/Release/libs/websocketpp/websocketpp/common/chrono.hpp @@ -28,7 +28,12 @@ #ifndef WEBSOCKETPP_COMMON_CHRONO_HPP #define WEBSOCKETPP_COMMON_CHRONO_HPP -#if defined _WEBSOCKETPP_CPP11_STL_ && !defined _WEBSOCKETPP_NO_CPP11_CHRONO_ +#include + +// If we've determined that we're in full C++11 mode and the user hasn't +// explicitly disabled the use of C++11 functional header, then prefer it to +// boost. +#if defined _WEBSOCKETPP_CPP11_INTERNAL_ && !defined _WEBSOCKETPP_NO_CPP11_CHRONO_ #ifndef _WEBSOCKETPP_CPP11_CHRONO_ #define _WEBSOCKETPP_CPP11_CHRONO_ #endif @@ -44,9 +49,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/Release/libs/websocketpp/websocketpp/common/cpp11.hpp b/Release/libs/websocketpp/websocketpp/common/cpp11.hpp index 6c79d644d7..a150de363b 100644 --- a/Release/libs/websocketpp/websocketpp/common/cpp11.hpp +++ b/Release/libs/websocketpp/websocketpp/common/cpp11.hpp @@ -80,6 +80,12 @@ #ifndef _WEBSOCKETPP_NULLPTR_TOKEN_ #define _WEBSOCKETPP_NULLPTR_TOKEN_ nullptr #endif + #ifndef _WEBSOCKETPP_MOVE_SEMANTICS_ + #define _WEBSOCKETPP_MOVE_SEMANTICS_ + #endif + #ifndef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + #define _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + #endif #ifndef __GNUC__ // GCC as of version 4.9 (latest) does not support std::put_time yet. diff --git a/Release/libs/websocketpp/websocketpp/common/network.hpp b/Release/libs/websocketpp/websocketpp/common/network.hpp index 3f98396656..26a4cb9ea8 100644 --- a/Release/libs/websocketpp/websocketpp/common/network.hpp +++ b/Release/libs/websocketpp/websocketpp/common/network.hpp @@ -36,6 +36,8 @@ #include #endif +#include + namespace websocketpp { namespace lib { namespace net { diff --git a/Release/libs/websocketpp/websocketpp/common/system_error.hpp b/Release/libs/websocketpp/websocketpp/common/system_error.hpp index 4abe1732f1..e5aea25495 100644 --- a/Release/libs/websocketpp/websocketpp/common/system_error.hpp +++ b/Release/libs/websocketpp/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/Release/libs/websocketpp/websocketpp/common/type_traits.hpp b/Release/libs/websocketpp/websocketpp/common/type_traits.hpp new file mode 100755 index 0000000000..72cc2e1e40 --- /dev/null +++ b/Release/libs/websocketpp/websocketpp/common/type_traits.hpp @@ -0,0 +1,63 @@ +/* + * 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_TYPE_TRAITS_HPP +#define WEBSOCKETPP_COMMON_TYPE_TRAITS_HPP + +#include + +// If we've determined that we're in full C++11 mode and the user hasn't +// explicitly disabled the use of C++11 functional header, then prefer it to +// boost. +#if defined _WEBSOCKETPP_CPP11_INTERNAL_ && !defined _WEBSOCKETPP_NO_CPP11_TYPE_TRAITS_ + #ifndef _WEBSOCKETPP_CPP11_TYPE_TRAITS_ + #define _WEBSOCKETPP_CPP11_TYPE_TRAITS_ + #endif +#endif + + +#ifdef _WEBSOCKETPP_CPP11_TYPE_TRAITS_ + #include +#else + #include +#endif + + + +namespace websocketpp { +namespace lib { + +#ifdef _WEBSOCKETPP_CPP11_TYPE_TRAITS_ + using std::aligned_storage; +#else + using boost::aligned_storage; +#endif + +} // namespace lib +} // namespace websocketpp + +#endif // WEBSOCKETPP_COMMON_TYPE_TRAITS_HPP diff --git a/Release/libs/websocketpp/websocketpp/connection.hpp b/Release/libs/websocketpp/websocketpp/connection.hpp index 954683279d..203de6f66e 100644 --- a/Release/libs/websocketpp/websocketpp/connection.hpp +++ b/Release/libs/websocketpp/websocketpp/connection.hpp @@ -214,6 +214,20 @@ namespace internal_state { PROCESS_CONNECTION = 7 }; } // namespace internal_state + + +namespace http_state { + // states to keep track of the progress of http connections + + enum value { + init = 0, + deferred = 1, + headers_written = 2, + body_written = 3, + closed = 4 + }; +} // namespace http_state + } // namespace session /// Represents an individual WebSocket connection @@ -312,6 +326,7 @@ class connection , m_local_close_code(close::status::abnormal_close) , m_remote_close_code(close::status::abnormal_close) , m_is_http(false) + , m_http_state(session::http_state::init) , m_was_clean(false) { m_alog.write(log::alevel::devel,"connection constructor"); @@ -1060,6 +1075,52 @@ class connection request_type const & get_request() const { return m_request; } + + /// Defer HTTP Response until later (Exception free) + /** + * Used in the http handler to defer the HTTP response for this connection + * until later. Handshake timers will be canceled and the connection will be + * left open until `send_http_response` or an equivalent is called. + * + * Warning: deferred connections won't time out and as a result can tie up + * resources. + * + * @since 0.6.0 + * + * @return A status code, zero on success, non-zero otherwise + */ + lib::error_code defer_http_response(); + + /// Send deferred HTTP Response (exception free) + /** + * Sends an http response to an HTTP connection that was deferred. This will + * send a complete response including all headers, status line, and body + * text. The connection will be closed afterwards. + * + * @since 0.6.0 + * + * @param ec A status code, zero on success, non-zero otherwise + */ + void send_http_response(lib::error_code & ec); + + /// Send deferred HTTP Response + void send_http_response(); + + // TODO HTTPNBIO: write_headers + // function that processes headers + status so far and writes it to the wire + // beginning the HTTP response body state. This method will ignore anything + // in the response body. + + // TODO HTTPNBIO: write_body_message + // queues the specified message_buffer for async writing + + // TODO HTTPNBIO: finish connection + // + + // TODO HTTPNBIO: write_response + // Writes the whole response, headers + body and closes the connection + + ///////////////////////////////////////////////////////////// // Pass-through access to the other connection information // @@ -1202,7 +1263,8 @@ class connection void handle_read_http_response(lib::error_code const & ec, size_t bytes_transferred); - void handle_send_http_response(lib::error_code const & ec); + + void handle_write_http_response(lib::error_code const & ec); void handle_send_http_request(lib::error_code const & ec); void handle_open_handshake_timeout(lib::error_code const & ec); @@ -1254,13 +1316,13 @@ class connection lib::error_code process_handshake_request(); private: /// Completes m_response, serializes it, and sends it out on the wire. - void send_http_response(lib::error_code const & ec); + void write_http_response(lib::error_code const & ec); /// Sends an opening WebSocket connect request void send_http_request(); - /// Alternate path for send_http_response in error conditions - void send_http_response_error(lib::error_code const & ec); + /// Alternate path for write_http_response in error conditions + void write_http_response_error(lib::error_code const & ec); /// Process control message /** @@ -1510,6 +1572,10 @@ class connection /// A flag that gets set once it is determined that the connection is an /// HTTP connection and not a WebSocket one. bool m_is_http; + + /// A flag that gets set when the completion of an http connection is + /// deferred until later. + session::http_state::value m_http_state; bool m_was_clean; diff --git a/Release/libs/websocketpp/websocketpp/endpoint.hpp b/Release/libs/websocketpp/websocketpp/endpoint.hpp index 15db1ccb34..908a6f96f9 100644 --- a/Release/libs/websocketpp/websocketpp/endpoint.hpp +++ b/Release/libs/websocketpp/websocketpp/endpoint.hpp @@ -104,6 +104,56 @@ class endpoint : public config::transport_type, public config::endpoint_base { transport_type::init_logging(&m_alog, &m_elog); } + + /// Destructor + ~endpoint() {} + + #ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + // no copy constructor because endpoints are not copyable + endpoint(endpoint &) = delete; + + // no copy assignment operator because endpoints are not copyable + endpoint & operator=(endpoint const &) = delete; + #endif // _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + + #ifdef _WEBSOCKETPP_MOVE_SEMANTICS_ + /// Move constructor + endpoint(endpoint && o) + : config::transport_type(std::move(o)) + , config::endpoint_base(std::move(o)) + , m_alog(std::move(o.m_alog)) + , m_elog(std::move(o.m_elog)) + , m_user_agent(std::move(o.m_user_agent)) + , m_open_handler(std::move(o.m_open_handler)) + + , m_close_handler(std::move(o.m_close_handler)) + , m_fail_handler(std::move(o.m_fail_handler)) + , m_ping_handler(std::move(o.m_ping_handler)) + , m_pong_handler(std::move(o.m_pong_handler)) + , m_pong_timeout_handler(std::move(o.m_pong_timeout_handler)) + , m_interrupt_handler(std::move(o.m_interrupt_handler)) + , m_http_handler(std::move(o.m_http_handler)) + , m_validate_handler(std::move(o.m_validate_handler)) + , m_message_handler(std::move(o.m_message_handler)) + + , m_open_handshake_timeout_dur(o.m_open_handshake_timeout_dur) + , m_close_handshake_timeout_dur(o.m_close_handshake_timeout_dur) + , m_pong_timeout_dur(o.m_pong_timeout_dur) + , m_max_message_size(o.m_max_message_size) + , m_max_http_body_size(o.m_max_http_body_size) + + , m_rng(std::move(o.m_rng)) + , m_is_server(o.m_is_server) + {} + + #ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + // no move assignment operator because of const member variables + endpoint & operator=(endpoint &&) = delete; + #endif // _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + + #endif // _WEBSOCKETPP_MOVE_SEMANTICS_ + + /// Returns the user agent string that this endpoint will use /** * Returns the user agent string that this endpoint will use when creating @@ -466,6 +516,35 @@ class endpoint : public config::transport_type, public config::endpoint_base { /// Resume reading of new data void resume_reading(connection_hdl hdl); + /// Send deferred HTTP Response + /** + * Sends an http response to an HTTP connection that was deferred. This will + * send a complete response including all headers, status line, and body + * text. The connection will be closed afterwards. + * + * Exception free variant + * + * @since 0.6.0 + * + * @param hdl The connection to send the response on + * @param ec A status code, zero on success, non-zero otherwise + */ + void send_http_response(connection_hdl hdl, lib::error_code & ec); + + /// Send deferred HTTP Response (exception free) + /** + * Sends an http response to an HTTP connection that was deferred. This will + * send a complete response including all headers, status line, and body + * text. The connection will be closed afterwards. + * + * Exception variant + * + * @since 0.6.0 + * + * @param hdl The connection to send the response on + */ + void send_http_response(connection_hdl hdl); + /// Create a message and add it to the outgoing send queue (exception free) /** * Convenience method to send a message given a payload string and an opcode @@ -559,7 +638,6 @@ class endpoint : public config::transport_type, public config::endpoint_base { * @return the connection_ptr. May be NULL if the handle was invalid. */ connection_ptr get_con_from_hdl(connection_hdl hdl, lib::error_code & ec) { - scoped_lock_type lock(m_mutex); connection_ptr con = lib::static_pointer_cast( hdl.lock()); if (!con) { diff --git a/Release/libs/websocketpp/websocketpp/error.hpp b/Release/libs/websocketpp/websocketpp/error.hpp index 81fff8733d..562fb6ed71 100644 --- a/Release/libs/websocketpp/websocketpp/error.hpp +++ b/Release/libs/websocketpp/websocketpp/error.hpp @@ -140,7 +140,10 @@ enum value { unsupported_version, /// HTTP parse error - http_parse_error + http_parse_error, + + /// Extension negotiation failed + extension_neg_failed }; // enum value @@ -216,6 +219,8 @@ class category : public lib::error_category { return "Unsupported version"; case error::http_parse_error: return "HTTP parse error"; + case error::extension_neg_failed: + return "Extension negotiation failed"; default: return "Unknown"; } @@ -250,7 +255,7 @@ class exception : public std::exception { {} explicit exception(lib::error_code ec) - : m_code(ec) + : m_msg(ec.message()), m_code(ec) {} ~exception() throw() {} @@ -263,7 +268,7 @@ class exception : public std::exception { return m_code; } - std::string m_msg; + const std::string m_msg; lib::error_code m_code; }; diff --git a/Release/libs/websocketpp/websocketpp/extensions/permessage_deflate/disabled.hpp b/Release/libs/websocketpp/websocketpp/extensions/permessage_deflate/disabled.hpp index c76bf93649..49c0e1dcf7 100644 --- a/Release/libs/websocketpp/websocketpp/extensions/permessage_deflate/disabled.hpp +++ b/Release/libs/websocketpp/websocketpp/extensions/permessage_deflate/disabled.hpp @@ -55,7 +55,7 @@ class disabled { public: /// Negotiate extension /** - * The disabled extension always fails the negotiation with a disabled + * The disabled extension always fails the negotiation with a disabled * error. * * @param offer Attribute from client's offer @@ -65,6 +65,17 @@ class disabled { return make_pair(make_error_code(error::disabled),std::string()); } + /// Initialize state + /** + * For the disabled extension state initialization is a no-op. + * + * @param is_server True to initialize as a server, false for a client. + * @return A code representing the error that occurred, if any + */ + lib::error_code init(bool) { + return lib::error_code(); + } + /// Returns true if the extension is capable of providing /// permessage_deflate functionality bool is_implemented() const { @@ -77,6 +88,17 @@ class disabled { return false; } + /// Generate extension offer + /** + * Creates an offer string to include in the Sec-WebSocket-Extensions + * header of outgoing client requests. + * + * @return A WebSocket extension offer string for this extension + */ + std::string generate_offer() const { + return ""; + } + /// Compress bytes /** * @param [in] in String to compress diff --git a/Release/libs/websocketpp/websocketpp/extensions/permessage_deflate/enabled.hpp b/Release/libs/websocketpp/websocketpp/extensions/permessage_deflate/enabled.hpp index 73b9b30728..1581f14cb4 100644 --- a/Release/libs/websocketpp/websocketpp/extensions/permessage_deflate/enabled.hpp +++ b/Release/libs/websocketpp/websocketpp/extensions/permessage_deflate/enabled.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: @@ -50,9 +50,13 @@ namespace extensions { /** * ### permessage-deflate interface * - * **is_implemented**\n - * `bool is_implemented()`\n - * Returns whether or not the object implements the extension or not + * **init**\n + * `lib::error_code init(bool is_server)`\n + * Performs initialization + * + * **is_implimented**\n + * `bool is_implimented()`\n + * Returns whether or not the object impliments the extension or not * * **is_enabled**\n * `bool is_enabled()`\n @@ -136,7 +140,7 @@ class category : public lib::error_category { case zlib_error: return "A zlib function returned an error"; case uninitialized: - return "Object must be initialized before use"; + return "Deflate extension must be initialized before use"; default: return "Unknown permessage-compress error"; } @@ -144,13 +148,13 @@ class category : public lib::error_category { }; /// Get a reference to a static copy of the permessage-deflate error category -lib::error_category const & get_category() { +inline lib::error_category const & get_category() { static category instance; return instance; } /// Create an error code in the permessage-deflate category -lib::error_code make_error_code(error::value e) { +inline lib::error_code make_error_code(error::value e) { return lib::error_code(static_cast(e), get_category()); } @@ -170,19 +174,19 @@ namespace websocketpp { namespace extensions { namespace permessage_deflate { -/// Default value for s2c_max_window_bits as defined by RFC6455 -static uint8_t const default_s2c_max_window_bits = 15; -/// Minimum value for s2c_max_window_bits as defined by RFC6455 -static uint8_t const min_s2c_max_window_bits = 8; -/// Maximum value for s2c_max_window_bits as defined by RFC6455 -static uint8_t const max_s2c_max_window_bits = 15; +/// Default value for server_max_window_bits as defined by draft 17 +static uint8_t const default_server_max_window_bits = 15; +/// Minimum value for server_max_window_bits as defined by draft 17 +static uint8_t const min_server_max_window_bits = 8; +/// Maximum value for server_max_window_bits as defined by draft 17 +static uint8_t const max_server_max_window_bits = 15; -/// Default value for c2s_max_window_bits as defined by RFC6455 -static uint8_t const default_c2s_max_window_bits = 15; -/// Minimum value for c2s_max_window_bits as defined by RFC6455 -static uint8_t const min_c2s_max_window_bits = 8; -/// Maximum value for c2s_max_window_bits as defined by RFC6455 -static uint8_t const max_c2s_max_window_bits = 15; +/// Default value for client_max_window_bits as defined by draft 17 +static uint8_t const default_client_max_window_bits = 15; +/// Minimum value for client_max_window_bits as defined by draft 17 +static uint8_t const min_client_max_window_bits = 8; +/// Maximum value for client_max_window_bits as defined by draft 17 +static uint8_t const max_client_max_window_bits = 15; namespace mode { enum value { @@ -202,12 +206,12 @@ class enabled { public: enabled() : m_enabled(false) - , m_s2c_no_context_takeover(false) - , m_c2s_no_context_takeover(false) - , m_s2c_max_window_bits(15) - , m_c2s_max_window_bits(15) - , m_s2c_max_window_bits_mode(mode::accept) - , m_c2s_max_window_bits_mode(mode::accept) + , m_server_no_context_takeover(false) + , m_client_no_context_takeover(false) + , m_server_max_window_bits(15) + , m_client_max_window_bits(15) + , m_server_max_window_bits_mode(mode::accept) + , m_client_max_window_bits_mode(mode::accept) , m_initialized(false) , m_compress_buffer_size(16384) { @@ -244,20 +248,25 @@ class enabled { /// Initialize zlib state /** + * Note: this should be called *after* the negotiation methods. It will use + * information from the negotiation to determine how to initialize the zlib + * data structures. * * @todo memory level, strategy, etc are hardcoded - * @todo server detection is hardcoded + * + * @param is_server True to initialize as a server, false for a client. + * @return A code representing the error that occurred, if any */ - lib::error_code init() { + lib::error_code init(bool is_server) { uint8_t deflate_bits; uint8_t inflate_bits; - if (true /*is_server*/) { - deflate_bits = m_s2c_max_window_bits; - inflate_bits = m_c2s_max_window_bits; + if (is_server) { + deflate_bits = m_server_max_window_bits; + inflate_bits = m_client_max_window_bits; } else { - deflate_bits = m_c2s_max_window_bits; - inflate_bits = m_s2c_max_window_bits; + deflate_bits = m_client_max_window_bits; + inflate_bits = m_server_max_window_bits; } int ret = deflateInit2( @@ -265,8 +274,8 @@ class enabled { Z_DEFAULT_COMPRESSION, Z_DEFLATED, -1*deflate_bits, - 8, // memory level 1-9 - /*Z_DEFAULT_STRATEGY*/Z_FIXED + 4, // memory level 1-9 + Z_DEFAULT_STRATEGY ); if (ret != Z_OK) { @@ -283,6 +292,13 @@ class enabled { } m_compress_buffer.reset(new unsigned char[m_compress_buffer_size]); + if ((m_server_no_context_takeover && is_server) || + (m_client_no_context_takeover && !is_server)) + { + m_flush = Z_FULL_FLUSH; + } else { + m_flush = Z_SYNC_FLUSH; + } m_initialized = true; return lib::error_code(); } @@ -329,8 +345,8 @@ class enabled { * the option will be in use so they can optimize resource usage if they * are able. */ - void enable_s2c_no_context_takeover() { - m_s2c_no_context_takeover = true; + void enable_server_no_context_takeover() { + m_server_no_context_takeover = true; } /// Reset client's outgoing LZ77 sliding window for each new message @@ -348,8 +364,8 @@ class enabled { * This option is supported by all compliant clients and servers. Enabling * it via either endpoint should be sufficient to ensure it is used. */ - void enable_c2s_no_context_takeover() { - m_c2s_no_context_takeover = true; + void enable_client_no_context_takeover() { + m_client_no_context_takeover = true; } /// Limit server LZ77 sliding window size @@ -374,12 +390,12 @@ class enabled { * @param mode The mode to use for negotiating this parameter * @return A status code */ - lib::error_code set_s2c_max_window_bits(uint8_t bits, mode::value mode) { - if (bits < min_s2c_max_window_bits || bits > max_s2c_max_window_bits) { + lib::error_code set_server_max_window_bits(uint8_t bits, mode::value mode) { + if (bits < min_server_max_window_bits || bits > max_server_max_window_bits) { return error::make_error_code(error::invalid_max_window_bits); } - m_s2c_max_window_bits = bits; - m_s2c_max_window_bits_mode = mode; + m_server_max_window_bits = bits; + m_server_max_window_bits_mode = mode; return lib::error_code(); } @@ -405,12 +421,12 @@ class enabled { * @param mode The mode to use for negotiating this parameter * @return A status code */ - lib::error_code set_c2s_max_window_bits(uint8_t bits, mode::value mode) { - if (bits < min_c2s_max_window_bits || bits > max_c2s_max_window_bits) { + lib::error_code set_client_max_window_bits(uint8_t bits, mode::value mode) { + if (bits < min_client_max_window_bits || bits > max_client_max_window_bits) { return error::make_error_code(error::invalid_max_window_bits); } - m_c2s_max_window_bits = bits; - m_c2s_max_window_bits_mode = mode; + m_client_max_window_bits = bits; + m_client_max_window_bits_mode = mode; return lib::error_code(); } @@ -423,7 +439,8 @@ class enabled { * @return A WebSocket extension offer string for this extension */ std::string generate_offer() const { - return ""; + // TODO: this should be dynamically generated based on user settings + return "permessage-deflate; client_no_context_takeover; client_max_window_bits"; } /// Validate extension response @@ -435,7 +452,7 @@ class enabled { * @return Validation error or 0 on success */ lib::error_code validate_offer(http::attribute_list const &) { - return make_error_code(error::general); + return lib::error_code(); } /// Negotiate extension @@ -452,14 +469,14 @@ class enabled { http::attribute_list::const_iterator it; for (it = offer.begin(); it != offer.end(); ++it) { - if (it->first == "s2c_no_context_takeover") { - negotiate_s2c_no_context_takeover(it->second,ret.first); - } else if (it->first == "c2s_no_context_takeover") { - negotiate_c2s_no_context_takeover(it->second,ret.first); - } else if (it->first == "s2c_max_window_bits") { - negotiate_s2c_max_window_bits(it->second,ret.first); - } else if (it->first == "c2s_max_window_bits") { - negotiate_c2s_max_window_bits(it->second,ret.first); + if (it->first == "server_no_context_takeover") { + negotiate_server_no_context_takeover(it->second,ret.first); + } else if (it->first == "client_no_context_takeover") { + negotiate_client_no_context_takeover(it->second,ret.first); + } else if (it->first == "server_max_window_bits") { + negotiate_server_max_window_bits(it->second,ret.first); + } else if (it->first == "client_max_window_bits") { + negotiate_client_max_window_bits(it->second,ret.first); } else { ret.first = make_error_code(error::invalid_attributes); } @@ -479,6 +496,9 @@ class enabled { /// Compress bytes /** + * @todo: avail_in/out is 32 bit, need to fix for cases of >32 bit frames + * on 64 bit machines. + * * @param [in] in String to compress * @param [out] out String to append compressed bytes to * @return Error or status code @@ -490,7 +510,13 @@ class enabled { size_t output; - m_dstate.avail_out = m_compress_buffer_size; + if (in.empty()) { + uint8_t buf[6] = {0x02, 0x00, 0x00, 0x00, 0xff, 0xff}; + out.append((char *)(buf),6); + return lib::error_code(); + } + + m_dstate.avail_in = in.size(); m_dstate.next_in = (unsigned char *)(const_cast(in.data())); do { @@ -498,7 +524,7 @@ class enabled { m_dstate.avail_out = m_compress_buffer_size; m_dstate.next_out = m_compress_buffer.get(); - deflate(&m_dstate, Z_SYNC_FLUSH); + deflate(&m_dstate, m_flush); output = m_compress_buffer_size - m_dstate.avail_out; @@ -553,35 +579,35 @@ class enabled { std::string generate_response() { std::string ret = "permessage-deflate"; - if (m_s2c_no_context_takeover) { - ret += "; s2c_no_context_takeover"; + if (m_server_no_context_takeover) { + ret += "; server_no_context_takeover"; } - if (m_c2s_no_context_takeover) { - ret += "; c2s_no_context_takeover"; + if (m_client_no_context_takeover) { + ret += "; client_no_context_takeover"; } - if (m_s2c_max_window_bits < default_s2c_max_window_bits) { + if (m_server_max_window_bits < default_server_max_window_bits) { std::stringstream s; - s << int(m_s2c_max_window_bits); - ret += "; s2c_max_window_bits="+s.str(); + s << int(m_server_max_window_bits); + ret += "; server_max_window_bits="+s.str(); } - if (m_c2s_max_window_bits < default_c2s_max_window_bits) { + if (m_client_max_window_bits < default_client_max_window_bits) { std::stringstream s; - s << int(m_c2s_max_window_bits); - ret += "; c2s_max_window_bits="+s.str(); + s << int(m_client_max_window_bits); + ret += "; client_max_window_bits="+s.str(); } return ret; } - /// Negotiate s2c_no_context_takeover attribute + /// Negotiate server_no_context_takeover attribute /** * @param [in] value The value of the attribute from the offer * @param [out] ec A reference to the error code to return errors via */ - void negotiate_s2c_no_context_takeover(std::string const & value, + void negotiate_server_no_context_takeover(std::string const & value, lib::error_code & ec) { if (!value.empty()) { @@ -589,15 +615,15 @@ class enabled { return; } - m_s2c_no_context_takeover = true; + m_server_no_context_takeover = true; } - /// Negotiate c2s_no_context_takeover attribute + /// Negotiate client_no_context_takeover attribute /** * @param [in] value The value of the attribute from the offer * @param [out] ec A reference to the error code to return errors via */ - void negotiate_c2s_no_context_takeover(std::string const & value, + void negotiate_client_no_context_takeover(std::string const & value, lib::error_code & ec) { if (!value.empty()) { @@ -605,13 +631,13 @@ class enabled { return; } - m_c2s_no_context_takeover = true; + m_client_no_context_takeover = true; } - /// Negotiate s2c_max_window_bits attribute + /// Negotiate server_max_window_bits attribute /** - * When this method starts, m_s2c_max_window_bits will contain the server's - * preferred value and m_s2c_max_window_bits_mode will contain the mode the + * When this method starts, m_server_max_window_bits will contain the server's + * preferred value and m_server_max_window_bits_mode will contain the mode the * server wants to use to for negotiation. `value` contains the value the * client requested that we use. * @@ -624,39 +650,39 @@ class enabled { * @param [in] value The value of the attribute from the offer * @param [out] ec A reference to the error code to return errors via */ - void negotiate_s2c_max_window_bits(std::string const & value, + void negotiate_server_max_window_bits(std::string const & value, lib::error_code & ec) { uint8_t bits = uint8_t(atoi(value.c_str())); - if (bits < min_s2c_max_window_bits || bits > max_s2c_max_window_bits) { + if (bits < min_server_max_window_bits || bits > max_server_max_window_bits) { ec = make_error_code(error::invalid_attribute_value); - m_s2c_max_window_bits = default_s2c_max_window_bits; + m_server_max_window_bits = default_server_max_window_bits; return; } - switch (m_s2c_max_window_bits_mode) { + switch (m_server_max_window_bits_mode) { case mode::decline: - m_s2c_max_window_bits = default_s2c_max_window_bits; + m_server_max_window_bits = default_server_max_window_bits; break; case mode::accept: - m_s2c_max_window_bits = bits; + m_server_max_window_bits = bits; break; case mode::largest: - m_s2c_max_window_bits = (std::min)(bits,m_s2c_max_window_bits); + m_server_max_window_bits = std::min(bits,m_server_max_window_bits); break; case mode::smallest: - m_s2c_max_window_bits = min_s2c_max_window_bits; + m_server_max_window_bits = min_server_max_window_bits; break; default: ec = make_error_code(error::invalid_mode); - m_s2c_max_window_bits = default_s2c_max_window_bits; + m_server_max_window_bits = default_server_max_window_bits; } } - /// Negotiate c2s_max_window_bits attribute + /// Negotiate client_max_window_bits attribute /** - * When this method starts, m_c2s_max_window_bits and m_c2s_max_window_mode + * When this method starts, m_client_max_window_bits and m_c2s_max_window_mode * will contain the server's preferred values for window size and * negotiation mode. * @@ -669,49 +695,50 @@ class enabled { * @param [in] value The value of the attribute from the offer * @param [out] ec A reference to the error code to return errors via */ - void negotiate_c2s_max_window_bits(std::string const & value, + void negotiate_client_max_window_bits(std::string const & value, lib::error_code & ec) { uint8_t bits = uint8_t(atoi(value.c_str())); if (value.empty()) { - bits = default_c2s_max_window_bits; - } else if (bits < min_c2s_max_window_bits || - bits > max_c2s_max_window_bits) + bits = default_client_max_window_bits; + } else if (bits < min_client_max_window_bits || + bits > max_client_max_window_bits) { ec = make_error_code(error::invalid_attribute_value); - m_c2s_max_window_bits = default_c2s_max_window_bits; + m_client_max_window_bits = default_client_max_window_bits; return; } - switch (m_c2s_max_window_bits_mode) { + switch (m_client_max_window_bits_mode) { case mode::decline: - m_c2s_max_window_bits = default_c2s_max_window_bits; + m_client_max_window_bits = default_client_max_window_bits; break; case mode::accept: - m_c2s_max_window_bits = bits; + m_client_max_window_bits = bits; break; case mode::largest: - m_c2s_max_window_bits = std::min(bits,m_c2s_max_window_bits); + m_client_max_window_bits = std::min(bits,m_client_max_window_bits); break; case mode::smallest: - m_c2s_max_window_bits = min_c2s_max_window_bits; + m_client_max_window_bits = min_client_max_window_bits; break; default: ec = make_error_code(error::invalid_mode); - m_c2s_max_window_bits = default_c2s_max_window_bits; + m_client_max_window_bits = default_client_max_window_bits; } } bool m_enabled; - bool m_s2c_no_context_takeover; - bool m_c2s_no_context_takeover; - uint8_t m_s2c_max_window_bits; - uint8_t m_c2s_max_window_bits; - mode::value m_s2c_max_window_bits_mode; - mode::value m_c2s_max_window_bits_mode; + bool m_server_no_context_takeover; + bool m_client_no_context_takeover; + uint8_t m_server_max_window_bits; + uint8_t m_client_max_window_bits; + mode::value m_server_max_window_bits_mode; + mode::value m_client_max_window_bits_mode; bool m_initialized; + int m_flush; size_t m_compress_buffer_size; lib::unique_ptr_uchar_array m_compress_buffer; z_stream m_dstate; diff --git a/Release/libs/websocketpp/websocketpp/frame.hpp b/Release/libs/websocketpp/websocketpp/frame.hpp index 7179089bae..8a173375a2 100644 --- a/Release/libs/websocketpp/websocketpp/frame.hpp +++ b/Release/libs/websocketpp/websocketpp/frame.hpp @@ -30,7 +30,6 @@ #include #include -#include #include #include @@ -55,19 +54,19 @@ static unsigned int const MAX_EXTENDED_HEADER_LENGTH = 12; /// Two byte conversion union union uint16_converter { uint16_t i; - std::array c; + uint8_t c[2]; }; /// Four byte conversion union union uint32_converter { uint32_t i; - std::array c; + uint8_t c[4]; }; /// Eight byte conversion union union uint64_converter { uint64_t i; - std::array c; + uint8_t c[8]; }; /// Constants and utility functions related to WebSocket opcodes @@ -235,17 +234,17 @@ struct basic_header { /// The variable size component of a WebSocket frame header struct extended_header { extended_header() { - std::fill_n(this->bytes.begin(), MAX_EXTENDED_HEADER_LENGTH, 0x00); + std::fill_n(this->bytes,MAX_EXTENDED_HEADER_LENGTH,0x00); } extended_header(uint64_t payload_size) { - std::fill_n(this->bytes.begin(), MAX_EXTENDED_HEADER_LENGTH, 0x00); + std::fill_n(this->bytes,MAX_EXTENDED_HEADER_LENGTH,0x00); copy_payload(payload_size); } extended_header(uint64_t payload_size, uint32_t masking_key) { - std::fill_n(this->bytes.begin(), MAX_EXTENDED_HEADER_LENGTH, 0x00); + std::fill_n(this->bytes,MAX_EXTENDED_HEADER_LENGTH,0x00); // Copy payload size int offset = copy_payload(payload_size); @@ -253,10 +252,10 @@ struct extended_header { // Copy Masking Key uint32_converter temp32; temp32.i = masking_key; - std::copy(temp32.c.begin(), temp32.c.end(), bytes.begin() + offset); + std::copy(temp32.c,temp32.c+4,bytes+offset); } - std::array bytes; + uint8_t bytes[MAX_EXTENDED_HEADER_LENGTH]; private: int copy_payload(uint64_t payload_size) { int payload_offset = 0; @@ -269,7 +268,7 @@ struct extended_header { uint64_converter temp64; temp64.i = lib::net::_htonll(payload_size); - std::copy(temp64.c.begin() + payload_offset, temp64.c.begin() + 8, bytes.begin()); + std::copy(temp64.c+payload_offset,temp64.c+8,bytes); return 8-payload_offset; } @@ -495,7 +494,7 @@ inline std::string prepare_header(const basic_header &h, const ret.push_back(char(h.b0)); ret.push_back(char(h.b1)); ret.append( - reinterpret_cast(&*e.bytes.begin()), + reinterpret_cast(e.bytes), get_header_len(h)-BASIC_HEADER_LENGTH ); @@ -523,8 +522,7 @@ inline masking_key_type get_masking_key(const basic_header &h, const temp32.i = 0; } else { unsigned int offset = get_masking_key_offset(h); - auto ptr = e.bytes.begin() + offset; - std::copy(ptr, ptr + 4, temp32.c.begin()); + std::copy(e.bytes+offset,e.bytes+offset+4,temp32.c); } return temp32; @@ -541,7 +539,7 @@ inline masking_key_type get_masking_key(const basic_header &h, const */ inline uint16_t get_extended_size(const extended_header &e) { uint16_converter temp16; - std::copy(e.bytes.begin() , e.bytes.begin() + 2, temp16.c.begin()); + std::copy(e.bytes,e.bytes+2,temp16.c); return ntohs(temp16.i); } @@ -556,7 +554,7 @@ inline uint16_t get_extended_size(const extended_header &e) { */ inline uint64_t get_jumbo_size(const extended_header &e) { uint64_converter temp64; - std::copy(e.bytes.begin(), e.bytes.begin() + 8, temp64.c.begin()); + std::copy(e.bytes,e.bytes+8,temp64.c); return lib::net::_ntohll(temp64.i); } diff --git a/Release/libs/websocketpp/websocketpp/impl/connection_impl.hpp b/Release/libs/websocketpp/websocketpp/impl/connection_impl.hpp index 55832d01a1..b191756d70 100644 --- a/Release/libs/websocketpp/websocketpp/impl/connection_impl.hpp +++ b/Release/libs/websocketpp/websocketpp/impl/connection_impl.hpp @@ -85,6 +85,7 @@ lib::error_code connection::send(std::string const & payload, { message_ptr msg = m_msg_manager->get_message(op,payload.size()); msg->append_payload(payload); + msg->set_compressed(true); return send(msg); } @@ -635,7 +636,66 @@ void connection::remove_header(std::string const & key) } } +/// Defer HTTP Response until later +/** + * Used in the http handler to defer the HTTP response for this connection + * until later. Handshake timers will be canceled and the connection will be + * left open until `send_http_response` or an equivalent is called. + * + * Warning: deferred connections won't time out and as a result can tie up + * resources. + * + * @return A status code, zero on success, non-zero otherwise + */ +template +lib::error_code connection::defer_http_response() { + // Cancel handshake timer, otherwise the connection will time out and we'll + // close the connection before the app has a chance to send a response. + if (m_handshake_timer) { + m_handshake_timer->cancel(); + m_handshake_timer.reset(); + } + + // Do something to signal deferral + m_http_state = session::http_state::deferred; + + return lib::error_code(); +} +/// Send deferred HTTP Response (exception free) +/** + * Sends an http response to an HTTP connection that was deferred. This will + * send a complete response including all headers, status line, and body + * text. The connection will be closed afterwards. + * + * @since 0.6.0 + * + * @param ec A status code, zero on success, non-zero otherwise + */ +template +void connection::send_http_response(lib::error_code & ec) { + { + scoped_lock_type lock(m_connection_state_lock); + if (m_http_state != session::http_state::deferred) { + ec = error::make_error_code(error::invalid_state); + return; + } + + m_http_state = session::http_state::body_written; + } + + this->write_http_response(lib::error_code()); + ec = lib::error_code(); +} + +template +void connection::send_http_response() { + lib::error_code ec; + this->send_http_response(ec); + if (ec) { + throw exception(ec); + } +} @@ -728,7 +788,7 @@ void connection::read_handshake(size_t num_bytes) { ); } -// All exit paths for this function need to call send_http_response() or submit +// All exit paths for this function need to call write_http_response() or submit // a new read request with this function as the handler. template void connection::handle_read_handshake(lib::error_code const & ec, @@ -784,7 +844,7 @@ void connection::handle_read_handshake(lib::error_code const & ec, // All HTTP exceptions will result in this request failing and an error // response being returned. No more bytes will be read in this con. m_response.set_status(e.m_error_code,e.m_error_msg); - this->send_http_response_error(error::make_error_code(error::http_parse_error)); + this->write_http_response_error(error::make_error_code(error::http_parse_error)); return; } @@ -806,7 +866,7 @@ void connection::handle_read_handshake(lib::error_code const & ec, if (m_request.ready()) { lib::error_code processor_ec = this->initialize_processor(); if (processor_ec) { - this->send_http_response_error(processor_ec); + this->write_http_response_error(processor_ec); return; } @@ -823,7 +883,7 @@ void connection::handle_read_handshake(lib::error_code const & ec, // TODO: need more bytes m_alog.write(log::alevel::devel,"short key3 read"); m_response.set_status(http::status_code::internal_server_error); - this->send_http_response_error(processor::error::make_error_code(processor::error::short_key3)); + this->write_http_response_error(processor::error::make_error_code(processor::error::short_key3)); return; } } @@ -847,7 +907,9 @@ void connection::handle_read_handshake(lib::error_code const & ec, // We have the complete request. Process it. lib::error_code handshake_ec = this->process_handshake_request(); - this->send_http_response(handshake_ec); + if (!m_is_http || m_http_state != session::http_state::deferred) { + this->write_http_response(handshake_ec); + } } else { // read at least 1 more byte transport_con_type::async_read_at_least( @@ -864,26 +926,26 @@ void connection::handle_read_handshake(lib::error_code const & ec, } } -// send_http_response requires the request to be fully read and the connection +// write_http_response requires the request to be fully read and the connection // to be in the PROCESS_HTTP_REQUEST state. In some cases we can detect errors // before the request is fully read (specifically at a point where we aren't // sure if the hybi00 key3 bytes need to be read). This method sets the correct -// state and calls send_http_response +// state and calls write_http_response template -void connection::send_http_response_error(lib::error_code const & ec) { +void connection::write_http_response_error(lib::error_code const & ec) { if (m_internal_state != istate::READ_HTTP_REQUEST) { m_alog.write(log::alevel::devel, - "send_http_response_error called in invalid state"); + "write_http_response_error called in invalid state"); this->terminate(error::make_error_code(error::invalid_state)); return; } m_internal_state = istate::PROCESS_HTTP_REQUEST; - this->send_http_response(ec); + this->write_http_response(ec); } -// All exit paths for this function need to call send_http_response() or submit +// All exit paths for this function need to call write_http_response() or submit // a new read request with this function as the handler. template void connection::handle_read_frame(lib::error_code const & ec, @@ -965,6 +1027,12 @@ void connection::handle_read_frame(lib::error_code const & ec, lib::error_code consume_ec; + if (m_alog.static_test(log::alevel::devel)) { + std::stringstream s; + s << "Processing Bytes: " << utility::to_hex(reinterpret_cast(m_buf)+p,bytes_transferred-p); + m_alog.write(log::alevel::devel,s.str()); + } + p += m_processor->consume( reinterpret_cast(m_buf)+p, bytes_transferred-p, @@ -1113,6 +1181,7 @@ lib::error_code connection::process_handshake_request() { if (m_http_handler) { m_is_http = true; m_http_handler(m_connection_hdl); + if (m_state == session::state::closed) { return error::make_error_code(error::http_connection_ended); } @@ -1207,8 +1276,8 @@ lib::error_code connection::process_handshake_request() { } template -void connection::send_http_response(lib::error_code const & ec) { - m_alog.write(log::alevel::devel,"connection send_http_response"); +void connection::write_http_response(lib::error_code const & ec) { + m_alog.write(log::alevel::devel,"connection write_http_response"); if (ec == error::make_error_code(error::http_connection_ended)) { m_alog.write(log::alevel::http,"An HTTP handler took over the connection."); @@ -1254,7 +1323,7 @@ void connection::send_http_response(lib::error_code const & ec) { m_handshake_buffer.data(), m_handshake_buffer.size(), lib::bind( - &type::handle_send_http_response, + &type::handle_write_http_response, type::get_shared(), lib::placeholders::_1 ) @@ -1262,8 +1331,8 @@ void connection::send_http_response(lib::error_code const & ec) { } template -void connection::handle_send_http_response(lib::error_code const & ec) { - m_alog.write(log::alevel::devel,"handle_send_http_response"); +void connection::handle_write_http_response(lib::error_code const & ec) { + m_alog.write(log::alevel::devel,"handle_write_http_response"); lib::error_code ecm = ec; @@ -1279,7 +1348,7 @@ void connection::handle_send_http_response(lib::error_code const & ec) { // usually by the handshake timer. This is basically expected // (though hopefully rare) and there is nothing we can do so ignore. m_alog.write(log::alevel::devel, - "handle_send_http_response invoked after connection was closed"); + "handle_write_http_response invoked after connection was closed"); return; } else { ecm = error::make_error_code(error::invalid_state); @@ -1294,7 +1363,7 @@ void connection::handle_send_http_response(lib::error_code const & ec) { return; } - log_err(log::elevel::rerror,"handle_send_http_response",ecm); + log_err(log::elevel::rerror,"handle_write_http_response",ecm); this->terminate(ecm); return; } @@ -1525,6 +1594,25 @@ void connection::handle_read_http_response(lib::error_code const & ec, return; } + // Read extension parameters and set up values necessary for the end + // user to complete extension negotiation. + std::pair neg_results; + neg_results = m_processor->negotiate_extensions(m_response); + + if (neg_results.first) { + // There was a fatal error in extension negotiation. For the moment + // kill all connections that fail extension negotiation. + + // TODO: deal with cases where the response is well formed but + // doesn't match the options requested by the client. Its possible + // that the best behavior in this cases is to log and continue with + // an unextended connection. + m_alog.write(log::alevel::devel, "Extension negotiation failed: " + + neg_results.first.message()); + this->terminate(make_error_code(error::extension_neg_failed)); + // TODO: close connection with reason 1010 (and list extensions) + } + // response is valid, connection can now be assumed to be open m_internal_state = istate::PROCESS_CONNECTION; m_state = session::state::open; @@ -1608,7 +1696,10 @@ void connection::terminate(lib::error_code const & ec) { m_local_close_reason = ec.message(); } - // TODO: does this need a mutex? + // TODO: does any of this need a mutex? + if (m_is_http) { + m_http_state = session::http_state::closed; + } if (m_state == session::state::connecting) { m_state = session::state::closed; tstat = failed; diff --git a/Release/libs/websocketpp/websocketpp/impl/endpoint_impl.hpp b/Release/libs/websocketpp/websocketpp/impl/endpoint_impl.hpp index 5895199a01..e09cda95ec 100644 --- a/Release/libs/websocketpp/websocketpp/impl/endpoint_impl.hpp +++ b/Release/libs/websocketpp/websocketpp/impl/endpoint_impl.hpp @@ -142,7 +142,21 @@ void endpoint::resume_reading(connection_hdl hdl) { if (ec) { throw exception(ec); } } +template +void endpoint::send_http_response(connection_hdl hdl, + lib::error_code & ec) +{ + connection_ptr con = get_con_from_hdl(hdl,ec); + if (ec) {return;} + con->send_http_response(ec); +} +template +void endpoint::send_http_response(connection_hdl hdl) { + lib::error_code ec; + send_http_response(hdl,ec); + if (ec) { throw exception(ec); } +} template void endpoint::send(connection_hdl hdl, std::string const & payload, diff --git a/Release/libs/websocketpp/websocketpp/logger/basic.hpp b/Release/libs/websocketpp/websocketpp/logger/basic.hpp index 95099a8343..84514130e7 100644 --- a/Release/libs/websocketpp/websocketpp/logger/basic.hpp +++ b/Release/libs/websocketpp/websocketpp/logger/basic.hpp @@ -80,6 +80,36 @@ class basic { , m_dynamic_channels(0) , m_out(out) {} + /// Destructor + ~basic() {} + + /// Copy constructor + basic(basic const & other) + : m_static_channels(other.m_static_channels) + , m_dynamic_channels(other.m_dynamic_channels) + , m_out(other.m_out) + {} + +#ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + // no copy assignment operator because of const member variables + basic & operator=(basic const &) = delete; +#endif // _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + +#ifdef _WEBSOCKETPP_MOVE_SEMANTICS_ + /// Move constructor + basic(basic && other) + : m_static_channels(other.m_static_channels) + , m_dynamic_channels(other.m_dynamic_channels) + , m_out(other.m_out) + {} + +#ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + // no move assignment operator because of const member variables + basic & operator=(basic &&) = delete; +#endif // _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + +#endif // _WEBSOCKETPP_MOVE_SEMANTICS_ + void set_ostream(std::ostream * out = &std::cout) { m_out = out; } diff --git a/Release/libs/websocketpp/websocketpp/message_buffer/message.hpp b/Release/libs/websocketpp/websocketpp/message_buffer/message.hpp index b127ee254b..da36e20012 100644 --- a/Release/libs/websocketpp/websocketpp/message_buffer/message.hpp +++ b/Release/libs/websocketpp/websocketpp/message_buffer/message.hpp @@ -146,10 +146,10 @@ class message { /// Set or clear the compression flag /** - * The compression flag is used to indicate whether or not the message is - * or should be compressed. Compression is not guaranteed. Both endpoints - * must support a compression extension and the connection must have had - * that extension negotiated in its handshake. + * Setting the compression flag indicates that the data in this message + * would benefit from compression. If both endpoints negotiate a compression + * extension WebSocket++ will attempt to compress messages with this flag. + * Setting this flag does not guarantee that the message will be compressed. * * @param value The value to set the compressed flag to */ diff --git a/Release/libs/websocketpp/websocketpp/processors/hybi00.hpp b/Release/libs/websocketpp/websocketpp/processors/hybi00.hpp index d693a47442..991813922b 100644 --- a/Release/libs/websocketpp/websocketpp/processors/hybi00.hpp +++ b/Release/libs/websocketpp/websocketpp/processors/hybi00.hpp @@ -98,7 +98,7 @@ class hybi00 : public processor { lib::error_code process_handshake(request_type const & req, std::string const & subprotocol, response_type & res) const { - std::array key_final; + char key_final[16]; // copy key1 into final key decode_client_key(req.get_header("Sec-WebSocket-Key1"), &key_final[0]); @@ -112,13 +112,13 @@ class hybi00 : public processor { // TODO: decide if it is best to silently fail here or produce some sort // of warning or exception. std::string const & key3 = req.get_header("Sec-WebSocket-Key3"); - std::copy(key3.begin(), - key3.begin() + std::min(size_t(8), key3.size()), - key_final.begin() + 8); + std::copy(key3.c_str(), + key3.c_str()+(std::min)(static_cast(8), key3.size()), + &key_final[8]); res.append_header( "Sec-WebSocket-Key3", - md5::md5_hash_string(std::string(key_final.begin(), key_final.end())) + md5::md5_hash_string(std::string(key_final,16)) ); res.append_header("Upgrade","WebSocket"); @@ -415,11 +415,9 @@ class hybi00 : public processor { num = static_cast(strtoul(digits.c_str(), NULL, 10)); if (spaces > 0 && num > 0) { num = htonl(num/spaces); -#ifdef _MS_WINDOWS - memcpy_s(result, 4, reinterpret_cast(&num), 4); -#else - memcpy(result, reinterpret_cast(&num), 4); -#endif + std::copy(reinterpret_cast(&num), + reinterpret_cast(&num)+4, + result); } else { std::fill(result,result+4,0); } diff --git a/Release/libs/websocketpp/websocketpp/processors/hybi13.hpp b/Release/libs/websocketpp/websocketpp/processors/hybi13.hpp index 66e2e75f1a..b46593f651 100644 --- a/Release/libs/websocketpp/websocketpp/processors/hybi13.hpp +++ b/Release/libs/websocketpp/websocketpp/processors/hybi13.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: @@ -85,7 +85,21 @@ class hybi13 : public processor { return m_permessage_deflate.is_implemented(); } - err_str_pair negotiate_extensions(request_type const & req) { + err_str_pair negotiate_extensions(request_type const & request) { + return negotiate_extensions_helper(request); + } + + err_str_pair negotiate_extensions(response_type const & response) { + return negotiate_extensions_helper(response); + } + + /// Extension negotiation helper function + /** + * This exists mostly because the code for requests and responses is + * identical and I can't have virtual template methods. + */ + template + err_str_pair negotiate_extensions_helper(header_type const & header) { err_str_pair ret; // Respect blanket disabling of all extensions and don't even parse @@ -97,7 +111,7 @@ class hybi13 : public processor { http::parameter_list p; - bool error = req.get_header_as_plist("Sec-WebSocket-Extensions",p); + bool error = header.get_header_as_plist("Sec-WebSocket-Extensions",p); if (error) { ret.first = make_error_code(error::extension_parse_error); @@ -116,6 +130,14 @@ class hybi13 : public processor { for (it = p.begin(); it != p.end(); ++it) { // look through each extension, if the key is permessage-deflate if (it->first == "permessage-deflate") { + // if we have already successfully negotiated this extension + // then skip any other requests to negotiate the same one + // with different parameters + if (m_permessage_deflate.is_enabled()) { + continue; + } + + neg_ret = m_permessage_deflate.negotiate(it->second); if (neg_ret.first) { @@ -128,6 +150,7 @@ class hybi13 : public processor { // Note: this list will need commas if WebSocket++ ever // supports more than one extension ret.second += neg_ret.second; + m_permessage_deflate.init(base::m_server); continue; } } @@ -214,14 +237,21 @@ class hybi13 : public processor { // Generate handshake key frame::uint32_converter conv; - std::array raw_key; + unsigned char raw_key[16]; for (int i = 0; i < 4; i++) { conv.i = m_rng(); - std::copy(conv.c.begin(), conv.c.begin() + 4, raw_key.begin() + i * 4); + std::copy(conv.c,conv.c+4,&raw_key[i*4]); } - req.replace_header("Sec-WebSocket-Key",base64_encode(&raw_key[0], 16)); + req.replace_header("Sec-WebSocket-Key",base64_encode(raw_key, 16)); + + if (m_permessage_deflate.is_implemented()) { + std::string offer = m_permessage_deflate.generate_offer(); + if (!offer.empty()) { + req.replace_header("Sec-WebSocket-Extensions",offer); + } + } return lib::error_code(); } @@ -264,6 +294,8 @@ class hybi13 : public processor { return error::make_error_code(error::missing_required_header); } + // check extensions + return lib::error_code(); } @@ -391,6 +423,10 @@ class hybi13 : public processor { m_msg_manager->get_message(op,m_bytes_needed), frame::get_masking_key(m_basic_header,m_extended_header) ); + + if (m_permessage_deflate.is_enabled()) { + m_data_msg.msg_ptr->set_compressed(frame::get_rsv1(m_basic_header)); + } } else { // Fetch the underlying payload buffer from the data message we // are writing into. @@ -432,15 +468,10 @@ class hybi13 : public processor { // If this was the last frame in the message set the ready flag. // Otherwise, reset processor state to read additional frames. if (frame::get_fin(m_basic_header)) { - // ensure that text messages end on a valid UTF8 code point - if (frame::get_opcode(m_basic_header) == frame::opcode::TEXT) { - if (!m_current_msg->validator.complete()) { - ec = make_error_code(error::invalid_utf8); - break; - } + ec = finalize_message(); + if (ec) { + break; } - - m_state = READY; } else { this->reset_headers(); } @@ -454,6 +485,44 @@ class hybi13 : public processor { return p; } + /// Perform any finalization actions on an incoming message + /** + * Called after the full message is received. Provides the opportunity for + * extensions to complete any data post processing as well as final UTF8 + * validation checks for text messages. + * + * @return A code indicating errors, if any + */ + lib::error_code finalize_message() { + std::string & out = m_current_msg->msg_ptr->get_raw_payload(); + + // if the frame is compressed, append the compression + // trailer and flush the compression buffer. + if (m_permessage_deflate.is_enabled() + && m_current_msg->msg_ptr->get_compressed()) + { + uint8_t trailer[4] = {0x00, 0x00, 0xff, 0xff}; + + // Decompress current buffer into the message buffer + lib::error_code ec; + ec = m_permessage_deflate.decompress(trailer,4,out); + if (ec) { + return ec; + } + } + + // ensure that text messages end on a valid UTF8 code point + if (frame::get_opcode(m_basic_header) == frame::opcode::TEXT) { + if (!m_current_msg->validator.complete()) { + return make_error_code(error::invalid_utf8); + } + } + + m_state = READY; + + return lib::error_code(); + } + void reset_headers() { m_state = HEADER_BASIC; m_bytes_needed = frame::BASIC_HEADER_LENGTH; @@ -461,9 +530,9 @@ class hybi13 : public processor { m_basic_header.b0 = 0x00; m_basic_header.b1 = 0x00; - std::fill( - m_extended_header.bytes.begin(), - m_extended_header.bytes.end(), + std::fill_n( + m_extended_header.bytes, + frame::MAX_EXTENDED_HEADER_LENGTH, 0x00 ); } @@ -551,18 +620,11 @@ class hybi13 : public processor { && in->get_compressed(); bool fin = in->get_fin(); - // generate header - frame::basic_header h(op,i.size(),fin,masked,compressed); - if (masked) { // Generate masking key. key.i = m_rng(); - - frame::extended_header e(i.size(),key.i); - out->set_header(frame::prepare_header(h,e)); } else { - frame::extended_header e(i.size()); - out->set_header(frame::prepare_header(h,e)); + key.i = 0; } // prepare payload @@ -570,6 +632,14 @@ class hybi13 : public processor { // compress and store in o after header. m_permessage_deflate.compress(i,o); + if (o.size() < 4) { + return make_error_code(error::general); + } + + // Strip trailing 4 0x00 0x00 0xff 0xff bytes before writing to the + // wire + o.resize(o.size()-4); + // mask in place if necessary if (masked) { this->masked_copy(o,o,key); @@ -588,6 +658,17 @@ class hybi13 : public processor { } } + // generate header + frame::basic_header h(op,o.size(),fin,masked,compressed); + + if (masked) { + frame::extended_header e(o.size(),key.i); + out->set_header(frame::prepare_header(h,e)); + } else { + frame::extended_header e(o.size()); + out->set_header(frame::prepare_header(h,e)); + } + out->set_prepared(true); out->set_opcode(op); @@ -686,7 +767,7 @@ class hybi13 : public processor { size_t copy_extended_header_bytes(uint8_t const * buf, size_t len) { size_t bytes_to_read = (std::min)(m_bytes_needed,len); - std::copy(buf, buf + bytes_to_read, m_extended_header.bytes.begin() + m_cursor); + std::copy(buf,buf+bytes_to_read,m_extended_header.bytes+m_cursor); m_cursor += bytes_to_read; m_bytes_needed -= bytes_to_read; @@ -730,13 +811,13 @@ class hybi13 : public processor { // decompress message if needed. if (m_permessage_deflate.is_enabled() - && frame::get_rsv1(m_basic_header)) + && m_current_msg->msg_ptr->get_compressed()) { // Decompress current buffer into the message buffer - m_permessage_deflate.decompress(buf,len,out); - - // get the length of the newly uncompressed output - offset = out.size() - offset; + ec = m_permessage_deflate.decompress(buf,len,out); + if (ec) { + return 0; + } } else { // No compression, straight copy out.append(reinterpret_cast(buf),len); @@ -937,7 +1018,8 @@ class hybi13 : public processor { out->set_header(frame::prepare_header(h,e)); std::copy(payload.begin(),payload.end(),o.begin()); } - + + out->set_opcode(op); out->set_prepared(true); return lib::error_code(); diff --git a/Release/libs/websocketpp/websocketpp/processors/processor.hpp b/Release/libs/websocketpp/websocketpp/processors/processor.hpp index 99b64cae8a..ff3cbb2e78 100644 --- a/Release/libs/websocketpp/websocketpp/processors/processor.hpp +++ b/Release/libs/websocketpp/websocketpp/processors/processor.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: @@ -217,13 +217,28 @@ class processor { /** * Reads the Sec-WebSocket-Extensions header and determines if any of the * requested extensions are supported by this processor. If they are their - * settings data is initialized. + * settings data is initialized and an extension string to send to the + * is returned. * - * @param request The request headers to look at. + * @param request The request or response headers to look at. */ virtual err_str_pair negotiate_extensions(request_type const &) { return err_str_pair(); } + + /// Initializes extensions based on the Sec-WebSocket-Extensions header + /** + * Reads the Sec-WebSocket-Extensions header and determines if any of the + * requested extensions were accepted by the server. If they are their + * settings data is initialized. If they are not a list of required + * extensions (if any) is returned. This list may be sent back to the server + * as a part of the 1010/Extension required close code. + * + * @param response The request or response headers to look at. + */ + virtual err_str_pair negotiate_extensions(response_type const &) { + return err_str_pair(); + } /// validate a WebSocket handshake request for this version /** diff --git a/Release/libs/websocketpp/websocketpp/roles/client_endpoint.hpp b/Release/libs/websocketpp/websocketpp/roles/client_endpoint.hpp index d5a9f00384..b793873ac2 100644 --- a/Release/libs/websocketpp/websocketpp/roles/client_endpoint.hpp +++ b/Release/libs/websocketpp/websocketpp/roles/client_endpoint.hpp @@ -29,6 +29,7 @@ #define WEBSOCKETPP_CLIENT_ENDPOINT_HPP #include +#include #include diff --git a/Release/libs/websocketpp/websocketpp/roles/server_endpoint.hpp b/Release/libs/websocketpp/websocketpp/roles/server_endpoint.hpp index 45a4bef9e0..dadcf72f77 100644 --- a/Release/libs/websocketpp/websocketpp/roles/server_endpoint.hpp +++ b/Release/libs/websocketpp/websocketpp/roles/server_endpoint.hpp @@ -69,6 +69,28 @@ class server : public endpoint,config> { endpoint_type::m_alog.write(log::alevel::devel, "server constructor"); } + /// Destructor + ~server() {} + +#ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + // no copy constructor because endpoints are not copyable + server(server &) = delete; + + // no copy assignment operator because endpoints are not copyable + server & operator=(server const &) = delete; +#endif // _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + +#ifdef _WEBSOCKETPP_MOVE_SEMANTICS_ + /// Move constructor + server(server && o) : endpoint,config>(std::move(o)) {} + +#ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + // no move assignment operator because of const member variables + server & operator=(server &&) = delete; +#endif // _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + +#endif // _WEBSOCKETPP_MOVE_SEMANTICS_ + /// Create and initialize a new connection /** * The connection will be initialized and ready to begin. Call its start() diff --git a/Release/libs/websocketpp/websocketpp/transport/asio/base.hpp b/Release/libs/websocketpp/websocketpp/transport/asio/base.hpp index 8ede3aaabd..6ee881ab85 100644 --- a/Release/libs/websocketpp/websocketpp/transport/asio/base.hpp +++ b/Release/libs/websocketpp/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,123 +28,107 @@ #ifndef WEBSOCKETPP_TRANSPORT_ASIO_BASE_HPP #define WEBSOCKETPP_TRANSPORT_ASIO_BASE_HPP +#include #include #include #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 // allocator delegates allocation to the global heap. -class handler_allocator - : private boost::noncopyable -{ +class handler_allocator { public: - handler_allocator() - : in_use_(false) - { - } - - void* allocate(std::size_t size) - { - if (!in_use_ && size < storage_.size) - { - in_use_ = true; - return storage_.address(); - } - else - { - return ::operator new(size); + static const size_t size = 1024; + + handler_allocator() : m_in_use(false) {} + +#ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + handler_allocator(handler_allocator const & cpy) = delete; + handler_allocator & operator =(handler_allocator const &) = delete; +#endif + + void * allocate(std::size_t memsize) { + if (!m_in_use && memsize < size) { + m_in_use = true; + return static_cast(&m_storage); + } else { + return ::operator new(memsize); + } } - } - void deallocate(void* pointer) - { - if (pointer == storage_.address()) - { - in_use_ = false; - } - else - { - ::operator delete(pointer); + void deallocate(void * pointer) { + if (pointer == &m_storage) { + m_in_use = false; + } else { + ::operator delete(pointer); + } } - } private: - // Storage space used for handler-based custom memory allocation. - boost::aligned_storage<1024> storage_; + // Storage space used for handler-based custom memory allocation. + lib::aligned_storage::type m_storage; - // Whether the handler-based custom allocation storage has been used. - bool in_use_; + // Whether the handler-based custom allocation storage has been used. + bool m_in_use; }; // Wrapper class template for handler objects to allow handler memory // allocation to be customised. Calls to operator() are forwarded to the // encapsulated handler. template -class custom_alloc_handler -{ +class custom_alloc_handler { public: - custom_alloc_handler(handler_allocator& a, Handler h) - : allocator_(a), - handler_(h) - { - } - - template - void operator()(Arg1 arg1) - { - handler_(arg1); - } - - template - void operator()(Arg1 arg1, Arg2 arg2) - { - handler_(arg1, arg2); - } - - friend void* asio_handler_allocate(std::size_t size, - custom_alloc_handler* this_handler) - { - return this_handler->allocator_.allocate(size); - } - - friend void asio_handler_deallocate(void* pointer, std::size_t /*size*/, - custom_alloc_handler* this_handler) - { - this_handler->allocator_.deallocate(pointer); - } + custom_alloc_handler(handler_allocator& a, Handler h) + : allocator_(a), + handler_(h) + {} + + template + void operator()(Arg1 arg1) { + handler_(arg1); + } + + template + void operator()(Arg1 arg1, Arg2 arg2) { + handler_(arg1, arg2); + } + + friend void* asio_handler_allocate(std::size_t size, + custom_alloc_handler * this_handler) + { + return this_handler->allocator_.allocate(size); + } + + friend void asio_handler_deallocate(void* pointer, std::size_t /*size*/, + custom_alloc_handler * this_handler) + { + this_handler->allocator_.deallocate(pointer); + } private: - handler_allocator& allocator_; - Handler handler_; + handler_allocator & allocator_; + Handler handler_; }; // Helper function to wrap a handler object to add custom allocation. template inline custom_alloc_handler make_custom_alloc_handler( - handler_allocator& a, Handler h) + handler_allocator & a, Handler h) { - return custom_alloc_handler(a, h); + return custom_alloc_handler(a, h); } @@ -158,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/Release/libs/websocketpp/websocketpp/transport/asio/connection.hpp b/Release/libs/websocketpp/websocketpp/transport/asio/connection.hpp index 0be40f6b45..635a0f3a15 100644 --- a/Release/libs/websocketpp/websocketpp/transport/asio/connection.hpp +++ b/Release/libs/websocketpp/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: @@ -37,15 +37,15 @@ #include #include +#include +#include +#include #include #include #include #include -#include -#include - #include #include #include @@ -57,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 @@ -85,12 +85,12 @@ class connection : public config::socket_type::socket_con_type { 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 @@ -98,7 +98,7 @@ class connection : public config::socket_type::socket_con_type { 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) @@ -115,6 +115,22 @@ class connection : public config::socket_type::socket_con_type { return socket_con_type::is_secure(); } + /// Set uri hook + /** + * Called by the endpoint as a connection is being established to provide + * the uri being connected to to the transport layer. + * + * This transport policy doesn't use the uri except to forward it to the + * socket layer. + * + * @since 0.6.0 + * + * @param u The uri to set + */ + void set_uri(uri_ptr u) { + socket_con_type::set_uri(u); + } + /// Sets the tcp pre init handler /** * The tcp pre init handler is called after the raw tcp connection has been @@ -295,9 +311,9 @@ class connection : public config::socket_type::socket_con_type { * 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) { @@ -331,10 +347,10 @@ class connection : public config::socket_type::socket_con_type { * @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); @@ -344,7 +360,7 @@ class connection : public config::socket_type::socket_con_type { callback(lib::error_code()); } } -protected: + /// Get a pointer to this connection's strand strand_ptr get_strand() { return m_strand; @@ -353,7 +369,7 @@ class connection : public config::socket_type::socket_con_type { /// 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 @@ -367,6 +383,7 @@ class connection : public config::socket_type::socket_con_type { * read or write the WebSocket handshakes. At this point the original * callback function is called. */ +protected: void init(init_handler callback) { if (m_alog.static_test(log::alevel::devel)) { m_alog.write(log::alevel::devel,"asio connection init"); @@ -411,7 +428,7 @@ class connection : public config::socket_type::socket_con_type { /// 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 @@ -422,7 +439,7 @@ class connection : public config::socket_type::socket_con_type { 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( @@ -555,7 +572,7 @@ class connection : public config::socket_type::socket_con_type { 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; @@ -590,8 +607,8 @@ class connection : public config::socket_type::socket_con_type { 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); @@ -608,7 +625,7 @@ class connection : public config::socket_type::socket_con_type { // 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( @@ -618,7 +635,7 @@ class connection : public config::socket_type::socket_con_type { )) ); } else { - boost::asio::async_write( + lib::asio::async_write( socket_con_type::get_next_layer(), m_bufs, lib::bind( @@ -648,7 +665,7 @@ class connection : public config::socket_type::socket_con_type { } 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, @@ -660,8 +677,8 @@ class connection : public config::socket_type::socket_con_type { // 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; @@ -691,7 +708,7 @@ class connection : public config::socket_type::socket_con_type { } 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", @@ -702,7 +719,7 @@ class connection : public config::socket_type::socket_con_type { )) ); } 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", @@ -722,7 +739,7 @@ class connection : public config::socket_type::socket_con_type { * @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, @@ -732,8 +749,8 @@ class connection : public config::socket_type::socket_con_type { // 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; @@ -836,10 +853,10 @@ class connection : public config::socket_type::socket_con_type { "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 @@ -847,14 +864,14 @@ class connection : public config::socket_type::socket_con_type { ); } - 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 @@ -890,11 +907,11 @@ class connection : public config::socket_type::socket_con_type { 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( @@ -914,12 +931,12 @@ class connection : public config::socket_type::socket_con_type { 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( @@ -934,7 +951,7 @@ class connection : public config::socket_type::socket_con_type { * @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) { @@ -1061,10 +1078,10 @@ class connection : public config::socket_type::socket_con_type { } 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; @@ -1074,7 +1091,7 @@ class connection : public config::socket_type::socket_con_type { 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 @@ -1124,7 +1141,7 @@ class connection : public config::socket_type::socket_con_type { 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; }; @@ -1137,7 +1154,7 @@ class connection : public config::socket_type::socket_con_type { 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/Release/libs/websocketpp/websocketpp/transport/asio/endpoint.hpp b/Release/libs/websocketpp/websocketpp/transport/asio/endpoint.hpp index ef3b07db46..4e278d41c1 100644 --- a/Release/libs/websocketpp/websocketpp/transport/asio/endpoint.hpp +++ b/Release/libs/websocketpp/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 @@ class endpoint : public config::socket_type { 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() @@ -113,23 +109,28 @@ class endpoint : public config::socket_type { /// transport::asio objects are moveable but not copyable or assignable. /// The following code sets this situation up based on whether or not we /// have C++11 support or not -#ifdef _WEBSOCKETPP_DELETED_FUNCTIONS_ - endpoint(const endpoint& src) = delete; +#ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + endpoint(const endpoint & src) = delete; endpoint& operator= (const endpoint & rhs) = delete; #else private: - endpoint(const endpoint& src); - endpoint& operator= (const endpoint & rhs); + endpoint(const endpoint & src); + endpoint & operator= (const endpoint & rhs); public: -#endif - -#ifdef _WEBSOCKETPP_RVALUE_REFERENCES_ - endpoint (endpoint&& src) - : m_io_service(src.m_io_service) +#endif // _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ + +#ifdef _WEBSOCKETPP_MOVE_SEMANTICS_ + endpoint (endpoint && src) + : config::socket_type(std::move(src)) + , m_tcp_pre_init_handler(src.m_tcp_pre_init_handler) + , m_tcp_post_init_handler(src.m_tcp_post_init_handler) + , 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) , m_state(src.m_state) { src.m_io_service = NULL; @@ -138,7 +139,7 @@ class endpoint : public config::socket_type { src.m_state = UNINITIALIZED; } - endpoint& operator= (const endpoint && rhs) { + /*endpoint & operator= (const endpoint && rhs) { if (this != &rhs) { m_io_service = rhs.m_io_service; m_external_io_service = rhs.m_external_io_service; @@ -150,12 +151,15 @@ class endpoint : public config::socket_type { 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 } return *this; - } -#endif + }*/ +#endif // _WEBSOCKETPP_MOVE_SEMANTICS_ + /// Return whether or not the endpoint produces secure connections. bool is_secure() const { return socket_type::is_secure(); @@ -183,7 +187,7 @@ class endpoint : public config::socket_type { 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; @@ -214,7 +218,7 @@ class endpoint : public config::socket_type { * @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; } @@ -226,7 +230,7 @@ class endpoint : public config::socket_type { * @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; } @@ -325,7 +329,7 @@ class endpoint : public config::socket_type { * * @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; } @@ -337,7 +341,7 @@ class endpoint : public config::socket_type { * @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, @@ -349,11 +353,11 @@ class endpoint : public config::socket_type { 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); @@ -379,7 +383,7 @@ class endpoint : public config::socket_type { * * @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); } @@ -392,8 +396,8 @@ class endpoint : public config::socket_type { * 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. @@ -403,7 +407,7 @@ class endpoint : public config::socket_type { 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); } @@ -414,8 +418,8 @@ class endpoint : public config::socket_type { * 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. @@ -423,7 +427,7 @@ class endpoint : public config::socket_type { 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); } @@ -440,7 +444,7 @@ class endpoint : public config::socket_type { * @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 @@ -456,13 +460,13 @@ class endpoint : public config::socket_type { * @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. * @@ -478,7 +482,7 @@ class endpoint : public config::socket_type { 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); @@ -495,7 +499,7 @@ class endpoint : public config::socket_type { /// 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. * @@ -609,7 +613,7 @@ class endpoint : public config::socket_type { * @since 0.3.0 */ void start_perpetual() { - m_work = lib::make_shared( + m_work = lib::make_shared( lib::ref(*m_io_service) ); } @@ -639,9 +643,9 @@ class endpoint : public config::socket_type { * 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( @@ -667,10 +671,10 @@ class endpoint : public config::socket_type { * @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, @@ -749,18 +753,18 @@ class endpoint : public config::socket_type { 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); } } @@ -771,14 +775,16 @@ class endpoint : public config::socket_type { /// 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)); } + tcon->set_uri(u); + std::string proxy = tcon->get_proxy(); std::string host; std::string port; @@ -888,11 +894,11 @@ class endpoint : public config::socket_type { } 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; @@ -910,7 +916,7 @@ class endpoint : public config::socket_type { 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() << " "; } @@ -935,7 +941,7 @@ class endpoint : public config::socket_type { ); if (config::enable_multithreading) { - boost::asio::async_connect( + lib::asio::async_connect( tcon->get_raw_socket(), iterator, tcon->get_strand()->wrap(lib::bind( @@ -948,7 +954,7 @@ class endpoint : public config::socket_type { )) ); } else { - boost::asio::async_connect( + lib::asio::async_connect( tcon->get_raw_socket(), iterator, lib::bind( @@ -997,10 +1003,10 @@ class endpoint : public config::socket_type { } 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/Release/libs/websocketpp/websocketpp/transport/asio/security/base.hpp b/Release/libs/websocketpp/websocketpp/transport/asio/security/base.hpp index 543a3533c0..dff14508bd 100644 --- a/Release/libs/websocketpp/websocketpp/transport/asio/security/base.hpp +++ b/Release/libs/websocketpp/websocketpp/transport/asio/security/base.hpp @@ -34,8 +34,6 @@ #include #include -#include - #include // Interface that sockets/security policies must implement @@ -56,6 +54,7 @@ // Connection // TODO +// set_hostname(std::string hostname) // pre_init(init_handler); // post_init(init_handler); @@ -97,7 +96,10 @@ namespace error { missing_tls_init_handler, /// TLS Handshake Failed - tls_handshake_failed + tls_handshake_failed, + + /// Failed to set TLS SNI hostname + tls_failed_sni_hostname }; } // namespace error @@ -126,6 +128,8 @@ class socket_category : public lib::error_category { return "Required tls_init handler not present."; case error::tls_handshake_failed: return "TLS handshake failed"; + case error::tls_failed_sni_hostname: + return "Failed to set TLS SNI hostname"; default: return "Unknown"; } diff --git a/Release/libs/websocketpp/websocketpp/transport/asio/security/none.hpp b/Release/libs/websocketpp/websocketpp/transport/asio/security/none.hpp index 14b6f8b5f7..138ea403a0 100644 --- a/Release/libs/websocketpp/websocketpp/transport/asio/security/none.hpp +++ b/Release/libs/websocketpp/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: @@ -28,12 +28,13 @@ #ifndef WEBSOCKETPP_TRANSPORT_SECURITY_NONE_HPP #define WEBSOCKETPP_TRANSPORT_SECURITY_NONE_HPP +#include + #include +#include #include -#include - #include #include @@ -45,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: @@ -60,12 +61,12 @@ class connection : public lib::enable_shared_from_this { /// 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; @@ -91,7 +92,7 @@ class connection : public lib::enable_shared_from_this { /** * 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 */ @@ -103,7 +104,7 @@ class connection : public lib::enable_shared_from_this { /** * 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; } @@ -111,7 +112,7 @@ class connection : public lib::enable_shared_from_this { /** * This is used internally. */ - boost::asio::ip::tcp::socket& get_next_layer() { + lib::asio::ip::tcp::socket & get_next_layer() { return *m_socket; } @@ -119,7 +120,7 @@ class connection : public lib::enable_shared_from_this { /** * 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; } @@ -133,16 +134,16 @@ class connection : public lib::enable_shared_from_this { * * @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(); @@ -154,7 +155,7 @@ class connection : public lib::enable_shared_from_this { /// 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 @@ -166,7 +167,7 @@ class connection : public lib::enable_shared_from_this { 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; @@ -174,6 +175,19 @@ class connection : public lib::enable_shared_from_this { return lib::error_code(); } + /// Set uri hook + /** + * Called by the transport as a connection is being established to provide + * the uri being connected to to the security/socket layer. + * + * This socket policy doesn't use the uri so it is ignored. + * + * @since 0.6.0 + * + * @param u The uri to set + */ + void set_uri(uri_ptr) {} + /// Pre-initialize security policy /** * Called by the transport after a new connection is created to initialize @@ -227,8 +241,8 @@ class connection : public lib::enable_shared_from_this { } 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); } @@ -248,7 +262,7 @@ class connection : public lib::enable_shared_from_this { * @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/Release/libs/websocketpp/websocketpp/transport/asio/security/tls.hpp b/Release/libs/websocketpp/websocketpp/transport/asio/security/tls.hpp index 8434a5c3d9..350a49fab4 100644 --- a/Release/libs/websocketpp/websocketpp/transport/asio/security/tls.hpp +++ b/Release/libs/websocketpp/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: @@ -30,14 +30,14 @@ #include +#include + +#include +#include #include #include #include -#include -#include -#include - #include #include @@ -49,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: @@ -68,17 +68,15 @@ class connection : public lib::enable_shared_from_this { 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" @@ -102,7 +100,7 @@ class connection : public lib::enable_shared_from_this { /** * 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(); } @@ -110,7 +108,7 @@ class connection : public lib::enable_shared_from_this { /** * 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(); } @@ -118,7 +116,7 @@ class connection : public lib::enable_shared_from_this { /** * This is used internally. */ - socket_type& get_socket() { + socket_type & get_socket() { return *m_socket; } @@ -157,16 +155,16 @@ class connection : public lib::enable_shared_from_this { * * @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(); @@ -178,7 +176,7 @@ class connection : public lib::enable_shared_from_this { /// 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 @@ -205,6 +203,22 @@ class connection : public lib::enable_shared_from_this { return lib::error_code(); } + /// Set hostname hook + /** + * Called by the transport as a connection is being established to provide + * the hostname being connected to to the security/socket layer. + * + * This socket policy uses the hostname to set the appropriate TLS SNI + * header. + * + * @since 0.6.0 + * + * @param u The uri to set + */ + void set_uri(uri_ptr u) { + m_uri = u; + } + /// Pre-initialize security policy /** * Called by the transport after a new connection is created to initialize @@ -215,6 +229,22 @@ class connection : public lib::enable_shared_from_this { * @param callback Handler to call back with completion information */ void pre_init(init_handler callback) { + // TODO: is this the best way to check whether this function is + // available in the version of OpenSSL being used? + // TODO: consider case where host is an IP address +#if OPENSSL_VERSION_NUMBER >= 0x90812f + if (!m_is_server) { + // For clients on systems with a suitable OpenSSL version, set the + // TLS SNI hostname header so connecting to TLS servers using SNI + // will work. + long res = SSL_set_tlsext_host_name( + get_socket().native_handle(), m_uri->get_host().c_str()); + if (!(1 == res)) { + callback(socket::make_error_code(socket::error::tls_failed_sni_hostname)); + } + } +#endif + if (m_socket_init_handler) { m_socket_init_handler(m_hdl,get_socket()); } @@ -266,8 +296,7 @@ class connection : public lib::enable_shared_from_this { 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 { @@ -306,7 +335,7 @@ class connection : public lib::enable_shared_from_this { * @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 { @@ -323,9 +352,9 @@ class connection : public lib::enable_shared_from_this { 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; } } @@ -333,6 +362,7 @@ class connection : public lib::enable_shared_from_this { strand_ptr m_strand; context_ptr m_context; socket_ptr m_socket; + uri_ptr m_uri; bool m_is_server; lib::error_code m_ec; @@ -342,10 +372,10 @@ class connection : public lib::enable_shared_from_this { 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/Release/libs/websocketpp/websocketpp/transport/debug/connection.hpp b/Release/libs/websocketpp/websocketpp/transport/debug/connection.hpp index 7b8c29cbde..36b282a20d 100644 --- a/Release/libs/websocketpp/websocketpp/transport/debug/connection.hpp +++ b/Release/libs/websocketpp/websocketpp/transport/debug/connection.hpp @@ -32,6 +32,7 @@ #include +#include #include #include @@ -103,6 +104,20 @@ class connection : public lib::enable_shared_from_this< connection > { return false; } + /// Set uri hook + /** + * Called by the endpoint as a connection is being established to provide + * the uri being connected to to the transport layer. + * + * Implementation is optional and can be ignored if the transport has no + * need for this information. + * + * @since 0.6.0 + * + * @param u The uri to set + */ + void set_uri(uri_ptr) {} + /// Set human readable remote endpoint address /** * Sets the remote endpoint address returned by `get_remote_endpoint`. This diff --git a/Release/libs/websocketpp/websocketpp/transport/iostream/base.hpp b/Release/libs/websocketpp/websocketpp/transport/iostream/base.hpp index 0103856a97..f878398783 100644 --- a/Release/libs/websocketpp/websocketpp/transport/iostream/base.hpp +++ b/Release/libs/websocketpp/websocketpp/transport/iostream/base.hpp @@ -33,7 +33,10 @@ #include #include +#include + #include +#include namespace websocketpp { namespace transport { @@ -41,10 +44,19 @@ namespace transport { namespace iostream { /// The type and signature of the callback used by iostream transport to write -typedef lib::function +typedef lib::function write_handler; -/// The type and signature of the callback used by iostream transport to signal +/// The type and signature of the callback used by iostream transport to perform +/// vectored writes. +/** + * If a vectored write handler is not set the standard write handler will be + * called multiple times. + */ +typedef lib::function const + & bufs)> vector_write_handler; + +/// The type and signature of the callback used by iostream transport to signal /// a transport shutdown. typedef lib::function shutdown_handler; diff --git a/Release/libs/websocketpp/websocketpp/transport/iostream/connection.hpp b/Release/libs/websocketpp/websocketpp/transport/iostream/connection.hpp index c0d0901180..81c4f41134 100644 --- a/Release/libs/websocketpp/websocketpp/transport/iostream/connection.hpp +++ b/Release/libs/websocketpp/websocketpp/transport/iostream/connection.hpp @@ -32,6 +32,8 @@ #include +#include + #include #include @@ -105,6 +107,19 @@ class connection : public lib::enable_shared_from_this< connection > { m_output_stream = o; } + /// Set uri hook + /** + * Called by the endpoint as a connection is being established to provide + * the uri being connected to to the transport layer. + * + * This transport policy doesn't use the uri so it is ignored. + * + * @since 0.6.0 + * + * @param u The uri to set + */ + void set_uri(uri_ptr) {} + /// Overloaded stream input operator /** * Attempts to read input from the given stream into the transport. Bytes @@ -153,7 +168,7 @@ class connection : public lib::enable_shared_from_this< connection > { return this->read_some_impl(buf,len); } - + /// Manual input supply (read all) /** * Similar to read_some, but continues to read until all bytes in the @@ -173,7 +188,7 @@ class connection : public lib::enable_shared_from_this< connection > { size_t read_all(char const * buf, size_t len) { // this serializes calls to external read. scoped_lock_type lock(m_read_mutex); - + size_t total_read = 0; size_t temp_read = 0; @@ -312,25 +327,60 @@ class connection : public lib::enable_shared_from_this< connection > { timer_ptr set_timer(long, timer_handler) { return timer_ptr(); } - + /// Sets the write handler /** * The write handler is called when the iostream transport receives data * that needs to be written to the appropriate output location. This handler * can be used in place of registering an ostream for output. * - * The signature of the handler is + * The signature of the handler is * `lib::error_code (connection_hdl, char const *, size_t)` The * code returned will be reported and logged by the core library. * + * See also, set_vector_write_handler, for an optional write handler that + * allows more efficient handling of multiple writes at once. + * + * @see set_vector_write_handler + * * @since 0.5.0 * - * @param h The handler to call on connection shutdown. + * @param h The handler to call when data is to be written. */ void set_write_handler(write_handler h) { m_write_handler = h; } - + + /// Sets the vectored write handler + /** + * The vectored write handler is called when the iostream transport receives + * multiple chunks of data that need to be written to the appropriate output + * location. This handler can be used in conjunction with the write_handler + * in place of registering an ostream for output. + * + * The sequence of buffers represents bytes that should be written + * consecutively and it is suggested to group the buffers into as few next + * layer packets as possible. Vector write is used to allow implementations + * that support it to coalesce writes into a single TCP packet or TLS + * segment for improved efficiency. + * + * This is an optional handler. If it is not defined then multiple calls + * will be made to the standard write handler. + * + * The signature of the handler is + * `lib::error_code (connection_hdl, std::vector + * const & bufs)`. The code returned will be reported and logged by the core + * library. The `websocketpp::transport::buffer` type is a struct with two + * data members. buf (char const *) and len (size_t). + * + * @since 0.6.0 + * + * @param h The handler to call when vectored data is to be written. + */ + void set_vector_write_handler(vector_write_handler h) { + m_vector_write_handler = h; + } + /// Sets the shutdown handler /** * The shutdown handler is called when the iostream transport receives a @@ -434,7 +484,7 @@ class connection : public lib::enable_shared_from_this< connection > { * @param len number of bytes to write * @param handler Callback to invoke with operation status. */ - void async_write(char const * buf, size_t len, transport::write_handler + void async_write(char const * buf, size_t len, transport::write_handler handler) { m_alog.write(log::alevel::devel,"iostream_con async_write"); @@ -444,7 +494,7 @@ class connection : public lib::enable_shared_from_this< connection > { if (m_output_stream) { m_output_stream->write(buf,len); - + if (m_output_stream->bad()) { ec = make_error_code(error::bad_stream); } @@ -492,17 +542,19 @@ class connection : public lib::enable_shared_from_this< connection > { break; } } + } else if (m_vector_write_handler) { + ec = m_vector_write_handler(m_connection_hdl, bufs); } else if (m_write_handler) { std::vector::const_iterator it; for (it = bufs.begin(); it != bufs.end(); it++) { ec = m_write_handler(m_connection_hdl, (*it).buf, (*it).len); if (ec) {break;} } - + } else { ec = make_error_code(error::output_stream_required); } - + handler(ec); } @@ -540,11 +592,11 @@ class connection : public lib::enable_shared_from_this< connection > { */ void async_shutdown(transport::shutdown_handler handler) { lib::error_code ec; - + if (m_shutdown_handler) { ec = m_shutdown_handler(m_connection_hdl); } - + handler(ec); } private: @@ -636,6 +688,7 @@ class connection : public lib::enable_shared_from_this< connection > { std::ostream * m_output_stream; connection_hdl m_connection_hdl; write_handler m_write_handler; + vector_write_handler m_vector_write_handler; shutdown_handler m_shutdown_handler; bool m_reading; diff --git a/Release/libs/websocketpp/websocketpp/transport/stub/connection.hpp b/Release/libs/websocketpp/websocketpp/transport/stub/connection.hpp index 3e501a9635..59bd4a0a43 100644 --- a/Release/libs/websocketpp/websocketpp/transport/stub/connection.hpp +++ b/Release/libs/websocketpp/websocketpp/transport/stub/connection.hpp @@ -103,6 +103,20 @@ class connection : public lib::enable_shared_from_this< connection > { return false; } + /// Set uri hook + /** + * Called by the endpoint as a connection is being established to provide + * the uri being connected to to the transport layer. + * + * Implementation is optional and can be ignored if the transport has no + * need for this information. + * + * @since 0.6.0 + * + * @param u The uri to set + */ + void set_uri(uri_ptr) {} + /// Set human readable remote endpoint address /** * Sets the remote endpoint address returned by `get_remote_endpoint`. This diff --git a/Release/libs/websocketpp/websocketpp/version.hpp b/Release/libs/websocketpp/websocketpp/version.hpp index 24d6be4a2e..56a0a76d69 100644 --- a/Release/libs/websocketpp/websocketpp/version.hpp +++ b/Release/libs/websocketpp/websocketpp/version.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: @@ -42,18 +42,18 @@ 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 = 1; +static int const patch_version = 0; /// Library pre-release flag /** * This is a textual flag indicating the type and number for pre-release * versions (dev, alpha, beta, rc). This will be blank for release versions. */ -static char const prerelease_flag[] = ""; +static char const prerelease_flag[] = "permessagedeflate"; /// Default user agent string -static char const user_agent[] = "WebSocket++/0.5.1"; +static char const user_agent[] = "WebSocketpp/0.6.0-permessagedeflate"; } // namespace websocketpp From 78bae21ccf1085501c0a0a1307d2029e4330debc Mon Sep 17 00:00:00 2001 From: AntonBikineev Date: Thu, 14 Jan 2016 21:04:21 +0300 Subject: [PATCH 2/3] Deleting SSL_set_tlsext_host_name call as this function call is already present in cpprest module --- .../websocketpp/transport/asio/security/tls.hpp | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/Release/libs/websocketpp/websocketpp/transport/asio/security/tls.hpp b/Release/libs/websocketpp/websocketpp/transport/asio/security/tls.hpp index 350a49fab4..9ce9408f85 100644 --- a/Release/libs/websocketpp/websocketpp/transport/asio/security/tls.hpp +++ b/Release/libs/websocketpp/websocketpp/transport/asio/security/tls.hpp @@ -229,22 +229,6 @@ class connection : public lib::enable_shared_from_this { * @param callback Handler to call back with completion information */ void pre_init(init_handler callback) { - // TODO: is this the best way to check whether this function is - // available in the version of OpenSSL being used? - // TODO: consider case where host is an IP address -#if OPENSSL_VERSION_NUMBER >= 0x90812f - if (!m_is_server) { - // For clients on systems with a suitable OpenSSL version, set the - // TLS SNI hostname header so connecting to TLS servers using SNI - // will work. - long res = SSL_set_tlsext_host_name( - get_socket().native_handle(), m_uri->get_host().c_str()); - if (!(1 == res)) { - callback(socket::make_error_code(socket::error::tls_failed_sni_hostname)); - } - } -#endif - if (m_socket_init_handler) { m_socket_init_handler(m_hdl,get_socket()); } From 177d96b09aa18d3d1b37cc295a831f895445bfd9 Mon Sep 17 00:00:00 2001 From: AntonBikineev Date: Wed, 20 Jan 2016 14:09:34 +0300 Subject: [PATCH 3/3] Adding missing files from websocket-6.0-permessage-deflate and removing leftovers --- Release/libs/websocketpp/.travis.yml | 2 +- .../libs/websocketpp/cmake/CMakeHelpers.cmake | 78 ++++++++++++++++++ Release/libs/websocketpp/test/http/a.out | Bin 0 -> 120748 bytes Release/libs/websocketpp/test/http/perf.out | Bin 0 -> 60208 bytes Release/libs/websocketpp/test/http/test.out | Bin 0 -> 1599720 bytes .../websocketpp/error_container.hpp | 71 ---------------- 6 files changed, 79 insertions(+), 72 deletions(-) create mode 100755 Release/libs/websocketpp/cmake/CMakeHelpers.cmake create mode 100755 Release/libs/websocketpp/test/http/a.out create mode 100755 Release/libs/websocketpp/test/http/perf.out create mode 100755 Release/libs/websocketpp/test/http/test.out delete mode 100644 Release/libs/websocketpp/websocketpp/error_container.hpp diff --git a/Release/libs/websocketpp/.travis.yml b/Release/libs/websocketpp/.travis.yml index 027ac560ed..0ee516e9b8 100644 --- a/Release/libs/websocketpp/.travis.yml +++ b/Release/libs/websocketpp/.travis.yml @@ -2,7 +2,7 @@ language: cpp compiler: - gcc before_install: - - sudo apt-get install libboost-regex1.48-dev libboost-system1.48-dev libboost-thread1.48-dev libboost-test1.48-dev libboost-random1.48-dev -y + - sudo apt-get install libboost-chrono1.48-dev libboost-regex1.48-dev libboost-system1.48-dev libboost-thread1.48-dev libboost-test1.48-dev libboost-random1.48-dev -y env: global: - BOOST_INCLUDES=/usr/include diff --git a/Release/libs/websocketpp/cmake/CMakeHelpers.cmake b/Release/libs/websocketpp/cmake/CMakeHelpers.cmake new file mode 100755 index 0000000000..0a23905e89 --- /dev/null +++ b/Release/libs/websocketpp/cmake/CMakeHelpers.cmake @@ -0,0 +1,78 @@ + +# Print build configuration +macro (print_used_build_config) + message ("\n=========== Used Build Configuration =============\n") + message (STATUS "ENABLE_CPP11 = " ${ENABLE_CPP11}) + message (STATUS "BUILD_EXAMPLES = " ${BUILD_EXAMPLES}) + message (STATUS "BUILD_TESTS = " ${BUILD_TESTS}) + message ("") + message (STATUS "WEBSOCKETPP_ROOT = " ${WEBSOCKETPP_ROOT}) + message (STATUS "WEBSOCKETPP_BIN = " ${WEBSOCKETPP_BIN}) + message (STATUS "WEBSOCKETPP_LIB = " ${WEBSOCKETPP_LIB}) + message (STATUS "Install prefix = " ${CMAKE_INSTALL_PREFIX}) + message ("") + message (STATUS "WEBSOCKETPP_BOOST_LIBS = ${WEBSOCKETPP_BOOST_LIBS}") + message (STATUS "WEBSOCKETPP_PLATFORM_LIBS = ${WEBSOCKETPP_PLATFORM_LIBS}") + message (STATUS "WEBSOCKETPP_PLATFORM_TSL_LIBS = ${WEBSOCKETPP_PLATFORM_TSL_LIBS}") + message ("") +endmacro () + +# Adds the given folder_name into the source files of the current project. +# Use this macro when your module contains .cpp and .h files in several subdirectories. +# Your sources variable needs to be WSPP_SOURCE_FILES and headers variable WSPP_HEADER_FILES. +macro(add_source_folder folder_name) + file(GLOB H_FILES_IN_FOLDER_${folder_name} ${folder_name}/*.hpp ${folder_name}/*.h) + file(GLOB CPP_FILES_IN_FOLDER_${folder_name} ${folder_name}/*.cpp ${folder_name}/*.c) + source_group("Header Files\\${folder_name}" FILES ${H_FILES_IN_FOLDER_${folder_name}}) + source_group("Source Files\\${folder_name}" FILES ${CPP_FILES_IN_FOLDER_${folder_name}}) + set(WSPP_HEADER_FILES ${WSPP_HEADER_FILES} ${H_FILES_IN_FOLDER_${folder_name}}) + set(WSPP_SOURCE_FILES ${WSPP_SOURCE_FILES} ${CPP_FILES_IN_FOLDER_${folder_name}}) +endmacro() + +# Initialize target. +macro (init_target NAME) + set (TARGET_NAME ${NAME}) + message ("** " ${TARGET_NAME}) + + # Include our own module path. This makes #include "x.h" + # work in project subfolders to include the main directory headers. + include_directories (${CMAKE_CURRENT_SOURCE_DIR}) +endmacro () + +# Build executable for executables +macro (build_executable TARGET_NAME) + set (TARGET_LIB_TYPE "EXECUTABLE") + message (STATUS "-- Build Type:") + message (STATUS " " ${TARGET_LIB_TYPE}) + + add_executable (${TARGET_NAME} ${ARGN}) + + include_directories (${WEBSOCKETPP_ROOT} ${WEBSOCKETPP_INCLUDE}) + + set_target_properties (${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${WEBSOCKETPP_BIN}) + set_target_properties (${TARGET_NAME} PROPERTIES DEBUG_POSTFIX d) +endmacro () + +# Finalize target for all types +macro (final_target) + if ("${TARGET_LIB_TYPE}" STREQUAL "EXECUTABLE") + install (TARGETS ${TARGET_NAME} + RUNTIME DESTINATION "bin" + CONFIGURATIONS ${CMAKE_CONFIGURATION_TYPES}) + endif () + + # install headers, directly from current source dir and look for subfolders with headers + file (GLOB_RECURSE TARGET_INSTALL_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.hpp) + foreach (hppfile ${TARGET_INSTALL_HEADERS}) + get_filename_component (currdir ${hppfile} PATH) + install (FILES ${hppfile} DESTINATION "include/${TARGET_NAME}/${currdir}") + endforeach() +endmacro () + +macro (link_boost) + target_link_libraries (${TARGET_NAME} ${Boost_LIBRARIES}) +endmacro () + +macro (link_openssl) + target_link_libraries (${TARGET_NAME} ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY}) +endmacro () diff --git a/Release/libs/websocketpp/test/http/a.out b/Release/libs/websocketpp/test/http/a.out new file mode 100755 index 0000000000000000000000000000000000000000..b2a20f1c70b04ccacd9b39aa0aacc6e8249af69e GIT binary patch literal 120748 zcmdSC4Sc0nSudI?9Y_mxrve%k4?zoLP$5MsDMM)n8@fj)5GuooUSR^|W5Cj;r2|2o zLvm(b+3&o4CEUw~_<<+hi-)Lq$U%0A&|Na^IEfrC1mt3_r)oex-mRkq#1atb`G2hS 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

;lf==rg}NV= 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%0DHCIq5HD}-|m5^Fa6gFZr=cY_Je!h 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

?cvp+|}eV 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 R*El(^-8C+~fIR!({{yHWSqK0C literal 0 HcmV?d00001 diff --git a/Release/libs/websocketpp/websocketpp/error_container.hpp b/Release/libs/websocketpp/websocketpp/error_container.hpp deleted file mode 100644 index b7c75ac964..0000000000 --- a/Release/libs/websocketpp/websocketpp/error_container.hpp +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2012, 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_ERROR_MESSAGE_HPP -#define WEBSOCKETPP_ERROR_MESSAGE_HPP - -namespace websocketpp { - -/** - * The transport::security::* classes are a set of security/socket related - * policies and support code for the ASIO transport types. - */ -class error_msg { -public: - const std::string& get_msg() const { - return m_error_msg; - } - - void set_msg(const std::string& msg) { - m_error_msg = msg; - } - - void append_msg(const std::string& msg) { - m_error_msg.append(msg); - } - - template - void set_msg(const T& thing) { - std::stringsteam val; - val << thing; - this->set_msg(val.str()); - } - - template - void append_msg(const T& thing) { - std::stringsteam val; - val << thing; - this->append_msg(val.str()); - } -private: - // error resources - std::string m_error_msg; -}; - -} // namespace websocketpp - -#endif // WEBSOCKETPP_ERROR_MESSAGE_HPP