From 7a6770e9095ff3516bceb2a7ffdaa473536c3401 Mon Sep 17 00:00:00 2001 From: Chris Grahn Date: Wed, 16 Nov 2016 14:26:59 -0600 Subject: [PATCH 01/43] Change client_impl::send_impl() not to delay ping client_impl::close_impl() only gets called when the user is closing the connection ("End by user"), when there is a handshake error, when the server sends a frame_close packet ("End by server"), or when there is a pong timeout. Before, in the case where send_impl() would continously get called with an interval less than client_impl::m_ping_interval, a disconnect due to network problems would never be detected because the ping would keep getting delayed, thus never allowing the pong timeout to happen. This fixes that by not delaying pings. --- src/internal/sio_client_impl.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 618dd1f4..eae50161 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -264,13 +264,6 @@ namespace sio { if(m_con_state == con_opened) { - //delay the ping, since we already have message to send. - boost::system::error_code timeout_ec; - if(m_ping_timer) - { - m_ping_timer->expires_from_now(milliseconds(m_ping_interval),timeout_ec); - m_ping_timer->async_wait(lib::bind(&client_impl::ping,this,lib::placeholders::_1)); - } lib::error_code ec; m_client.send(m_con,*payload_ptr,opcode,ec); if(ec) From 29468bfbd2d948dc12e65af8b47b5bcb3294135e Mon Sep 17 00:00:00 2001 From: Joel Nordell Date: Thu, 8 Dec 2016 10:02:55 -0600 Subject: [PATCH 02/43] Consider all client-initiated closes to be close_reason_normal. If any errors occur while closing, such as TLS Short Read, we don't want to reconnect if we had initiated the close. --- src/internal/sio_client_impl.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 618dd1f4..57bd371e 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -406,6 +406,7 @@ namespace sio void client_impl::on_close(connection_hdl con) { LOG("Client Disconnected." << endl); + con_state m_con_state_was = m_con_state; m_con_state = con_closed; lib::error_code ec; close::status::value code = close::status::normal; @@ -421,7 +422,11 @@ namespace sio m_con.reset(); this->clear_timers(); client::close_reason reason; - if(code == close::status::normal) + + // If we initiated the close, no matter what the close status was, + // we'll consider it a normal close. (When using TLS, we can + // sometimes get a TLS Short Read error when closing.) + if(code == close::status::normal || m_con_state_was == con_closing) { this->sockets_invoke_void(&sio::socket::on_disconnect); reason = client::close_reason_normal; From ffff9412e7c0d1fa3b8107ea1b4783f3d80520f5 Mon Sep 17 00:00:00 2001 From: Jianjun Zhu Date: Tue, 3 Jan 2017 09:05:43 +0800 Subject: [PATCH 03/43] URL encode query string. Percent encode query string so it can handle non-ascii characters and reserved characters. --- src/internal/.DS_Store | Bin 0 -> 6148 bytes src/internal/sio_client_impl.cpp | 18 +++++++++++++++++- src/internal/sio_client_impl.h | 3 +++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 src/internal/.DS_Store diff --git a/src/internal/.DS_Store b/src/internal/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..67805212cc42671983e02e32f95b8dd02f6868e2 GIT binary patch literal 6148 zcmeHK!AiqG5PefCv?x;X;xR{01^*zFDD-MRpxRncj3#Kk=QI2$Kfu4yH@ibBzc z*$pv9h8#0$bAIJwUX*jL>R;oM`t})w7I1s8>Gp4^nH7z<> z&epOVf1Bm5mEoPW*E1Y787kbc<^zApYI}9LYQ-Mzh;7xBk5(L~F3x~6;0*k62H3Mz z1_u#+bOxLOXP{v~-wz2@F*U3shF1rNa0MXt=?+3$KNvM8F-#5Xh+Lsa3?;@;u`7ne zaQYM5mm1a)V>rYvA7YioZYUC}Gk+4cL(+&oIs?wYCIfqMI@11svHSkN8RRo(z!~^g z3`jrAvk4!`dTZz5wAUuoYpROwt0OicG(s!pUTwvv)FAXHY7kSyIwCz3{}2c?_}~ou GC<9+w(OU@s literal 0 HcmV?d00001 diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 618dd1f4..7e310455 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -95,7 +95,8 @@ namespace sio query_str.append("&"); query_str.append(it->first); query_str.append("="); - query_str.append(it->second); + string query_str_value=encode_query_string(it->second); + query_str.append(query_str_value); } m_query_string=move(query_str); @@ -585,4 +586,19 @@ namespace sio return ctx; } #endif + + std::string client_impl::encode_query_string(const std::string &query){ + ostringstream ss; + ss << std::hex; + // Percent-encode (RFC3986) non-alphanumeric characters. + for(const char c : query){ + if((c >= 'a' && c <= 'z') || (c>= 'A' && c<= 'Z') || (c >= '0' && c<= '9')){ + ss << c; + } else { + ss << '%' << std::uppercase << std::setw(2) << int((unsigned char) c) << std::nouppercase; + } + } + ss << std::dec; + return ss.str(); + } } diff --git a/src/internal/sio_client_impl.h b/src/internal/sio_client_impl.h index 87ac1d03..311a267e 100644 --- a/src/internal/sio_client_impl.h +++ b/src/internal/sio_client_impl.h @@ -176,6 +176,9 @@ namespace sio context_ptr on_tls_init(connection_hdl con); #endif + // Percent encode query string + std::string encode_query_string(const std::string &query); + // Connection pointer for client functions. connection_hdl m_con; client_type m_client; From aee175e81cddf8347b4eb1472aa521dd457c0e26 Mon Sep 17 00:00:00 2001 From: lmat Date: Mon, 13 Feb 2017 12:20:16 -0500 Subject: [PATCH 04/43] Remove unused parameters and reorder constructors to get rid of warnings --- src/internal/sio_client_impl.cpp | 19 +++++++++---------- src/internal/sio_packet.cpp | 4 ++-- src/sio_client.h | 4 ++-- src/sio_socket.cpp | 6 +++--- src/sio_socket.h | 4 ++-- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 618dd1f4..57a598b1 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -25,14 +25,14 @@ namespace sio { /*************************public:*************************/ client_impl::client_impl() : - m_con_state(con_closed), m_ping_interval(0), m_ping_timeout(0), m_network_thread(), - m_reconn_attempts(0xFFFFFFFF), - m_reconn_made(0), + m_con_state(con_closed), m_reconn_delay(5000), - m_reconn_delay_max(25000) + m_reconn_delay_max(25000), + m_reconn_attempts(0xFFFFFFFF), + m_reconn_made(0) { using websocketpp::log::alevel; #ifndef DEBUG @@ -285,12 +285,11 @@ namespace sio if(ec || m_con.expired()) { if (ec != boost::asio::error::operation_aborted) - LOG("ping exit,con is expired?"< payload) + m_packet_mgr.encode(p, [&](bool /*isBin*/,shared_ptr payload) { lib::error_code ec; this->m_client.send(this->m_con, *payload, frame::opcode::text, ec); @@ -370,7 +369,7 @@ namespace sio } } - void client_impl::on_fail(connection_hdl con) + void client_impl::on_fail(connection_hdl) { m_con.reset(); m_con_state = con_closed; @@ -449,7 +448,7 @@ namespace sio } } - void client_impl::on_message(connection_hdl con, client_type::message_ptr msg) + void client_impl::on_message(connection_hdl, client_type::message_ptr msg) { if (m_ping_timeout_timer) { boost::system::error_code ec; @@ -495,7 +494,7 @@ namespace sio m_ping_timer.reset(new boost::asio::deadline_timer(m_client.get_io_service())); boost::system::error_code ec; m_ping_timer->expires_from_now(milliseconds(m_ping_interval), ec); - if(ec)LOG("ec:"<async_wait(lib::bind(&client_impl::ping,this,lib::placeholders::_1)); LOG("On handshake,sid:"<opened()) @@ -449,7 +449,7 @@ namespace sio } } - void socket::impl::ack(int msgId, const string &name, const message::list &ack_message) + void socket::impl::ack(int msgId, const string &, const message::list &ack_message) { packet p(m_nsp, ack_message.to_array_message(),msgId,true); send_packet(p); diff --git a/src/sio_socket.h b/src/sio_socket.h index 53fa95a8..69ef1f47 100644 --- a/src/sio_socket.h +++ b/src/sio_socket.h @@ -91,8 +91,8 @@ namespace sio private: //disable copy constructor and assign operator. - socket(socket const& sock){} - void operator=(socket const& sock){} + socket(socket const&){} + void operator=(socket const&){} class impl; impl *m_impl; From d8f8ed516b2e28e65e0b8ca3fe0e4592649efe88 Mon Sep 17 00:00:00 2001 From: Jack Lee Date: Mon, 6 Mar 2017 19:21:56 +0900 Subject: [PATCH 05/43] Remove unused argument --- examples/Console/main.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/Console/main.cpp b/examples/Console/main.cpp index 846f46fa..9a95dfb2 100755 --- a/examples/Console/main.cpp +++ b/examples/Console/main.cpp @@ -69,7 +69,7 @@ int participants = -1; socket::ptr current_socket; -void bind_events(socket::ptr &socket) +void bind_events() { current_socket->on("new message", sio::socket::event_listener_aux([&](string const& name, message::ptr const& data, bool isAck,message::list &ack_resp) { @@ -141,7 +141,7 @@ MAIN_FUNC _cond.wait(_lock); } _lock.unlock(); - bind_events(current_socket); + bind_events(); HIGHLIGHT("Start to chat,commands:\n'$exit' : exit chat\n'$nsp ' : change namespace"); for (std::string line; std::getline(std::cin, line);) { @@ -166,7 +166,7 @@ MAIN_FUNC current_socket->close(); } current_socket = h.socket(new_nsp); - bind_events(current_socket); + bind_events(); //if change to default nsp, we do not need to login again (since it is not closed). if(current_socket->get_namespace() == "/") { From af68bf3067ab45dc6a53261284e0da9afd21b636 Mon Sep 17 00:00:00 2001 From: Sepehr Laal Date: Sun, 10 Sep 2017 12:01:26 -0700 Subject: [PATCH 06/43] refactor: remove Boost dependency (#176) - add the standalone ASIO as a replacement for Boost ASIO - add Catch++ as a replacement for Boost Test framework - remove dependency on Boost DateTime and Boost Lexical Cast --- .gitmodules | 6 + .travis.yml | 5 +- BOOST.md | 21 --- CMakeLists.txt | 36 +++-- INSTALL.md | 51 ++----- lib/asio | 1 + lib/catch | 1 + lib/websocketpp | 2 +- src/internal/sio_client_impl.cpp | 99 ++++++------- src/internal/sio_client_impl.h | 26 ++-- src/internal/sio_packet.cpp | 5 +- src/sio_client.cpp | 1 - src/sio_socket.cpp | 26 ++-- test/CMakeLists.txt | 10 +- test/README.md | 18 --- test/sio_test.cpp | 230 ++++++++++++++++--------------- 16 files changed, 250 insertions(+), 288 deletions(-) delete mode 100644 BOOST.md create mode 160000 lib/asio create mode 160000 lib/catch delete mode 100644 test/README.md diff --git a/.gitmodules b/.gitmodules index 2644de04..42509be9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,9 @@ [submodule "lib/rapidjson"] path = lib/rapidjson url = https://github.com/miloyip/rapidjson.git +[submodule "lib/asio"] + path = lib/asio + url = https://github.com/chriskohlhoff/asio.git +[submodule "lib/catch"] + path = lib/catch + url = https://github.com/philsquared/Catch.git diff --git a/.travis.yml b/.travis.yml index 9c865bac..eac4142e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,14 +5,13 @@ compiler: before_install: - sudo apt-get install clang git libssl-dev - - sudo add-apt-repository -y ppa:boost-latest/ppa - sudo add-apt-repository -y ppa:kubuntu-ppa/backports - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test -y - sudo apt-get update -yqq - - sudo apt-get install -y libboost1.55-dev libboost-system1.55-dev libboost-date-time1.55-dev libboost-random1.55-dev - sudo apt-get install -y cmake g++-4.8 - sed -i -e 's/cmake_minimum_required(VERSION 3.1.0/cmake_minimum_required(VERSION 2.8.12/' ./CMakeLists.txt script: - - cmake -D CMAKE_CXX_FLAGS=-std=c++11 . + - cmake -D CMAKE_CXX_FLAGS=-std=c++11 -D BUILD_UNIT_TESTS=ON . - make + - make test - make install diff --git a/BOOST.md b/BOOST.md deleted file mode 100644 index d9c46460..00000000 --- a/BOOST.md +++ /dev/null @@ -1,21 +0,0 @@ -## Boost setup - -1. Download boost from [boost.org](http://www.boost.org/). -1. Unpack boost to some place. -1. Run either .\bootstrap.bat (on Windows), or ./bootstrap.sh (on other operating systems) under boost folder. - -## Boost build (Build the necessary subset only) - -#### Windows (or other mainstream desktop platforms shall work too): -Run with following script will build the necessary subset: - -```bash -bjam install --prefix="" --with-system --with-date_time --with-random link=static runtime-link=shared threading=multi -``` -Optionally You can merge all output .lib files into a fat one,especially if you're not using cmake. - -In output folder, run: - -```bash -lib.exe /OUT:boost.lib * -``` diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c2fad3f..4187f21f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) PROJECT(sioclient) option(BUILD_SHARED_LIBS "Build the shared library" OFF) -option(Boost_USE_STATIC_LIBS "Use Boost static version" ON) +option(BUILD_UNIT_TESTS "Builds unit tests target" OFF) set(MAJOR 1) set(MINOR 6) @@ -16,27 +16,32 @@ MESSAGE(SEND_ERROR "CMAKE_BUILD_TYPE must be either Release or Debug") return() endif() -set(BOOST_VER "1.55.0" CACHE STRING "boost version" ) - -set(Boost_USE_MULTITHREADED ON) -set(Boost_USE_STATIC_RUNTIME OFF) -find_package(Boost ${BOOST_VER} REQUIRED COMPONENTS system date_time random) - aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src ALL_SRC) aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/internal ALL_SRC) file(GLOB ALL_HEADERS ${CMAKE_CURRENT_LIST_DIR}/src/*.h ) set(SIO_INCLUDEDIR ${CMAKE_CURRENT_LIST_DIR}) +add_definitions( + # These will force ASIO to compile without Boost + -DBOOST_DATE_TIME_NO_LIB + -DBOOST_REGEX_NO_LIB + -DASIO_STANDALONE + # These will force WebsocketPP to compile with C++11 + -D_WEBSOCKETPP_CPP11_STL_ + -D_WEBSOCKETPP_CPP11_FUNCTIONAL_ +) + add_library(sioclient ${ALL_SRC}) -target_include_directories(sioclient PRIVATE ${Boost_INCLUDE_DIRS} +target_include_directories(sioclient PRIVATE ${CMAKE_CURRENT_LIST_DIR}/src ${CMAKE_CURRENT_LIST_DIR}/lib/websocketpp ${CMAKE_CURRENT_LIST_DIR}/lib/rapidjson/include + ${CMAKE_CURRENT_LIST_DIR}/lib/asio/asio/include ) set_property(TARGET sioclient PROPERTY CXX_STANDARD 11) set_property(TARGET sioclient PROPERTY CXX_STANDARD_REQUIRED ON) -target_link_libraries(sioclient PRIVATE ${Boost_LIBRARIES}) + if(BUILD_SHARED_LIBS) set_target_properties(sioclient PROPERTIES @@ -49,16 +54,17 @@ list(APPEND TARGET_LIBRARIES sioclient) find_package(OpenSSL) if(OPENSSL_FOUND) add_library(sioclient_tls ${ALL_SRC}) -target_include_directories(sioclient_tls PRIVATE ${Boost_INCLUDE_DIRS} +target_include_directories(sioclient_tls PRIVATE ${CMAKE_CURRENT_LIST_DIR}/src ${CMAKE_CURRENT_LIST_DIR}/lib/websocketpp ${CMAKE_CURRENT_LIST_DIR}/lib/rapidjson/include + ${CMAKE_CURRENT_LIST_DIR}/lib/asio/asio/include ${OPENSSL_INCLUDE_DIR} ) set_property(TARGET sioclient_tls PROPERTY CXX_STANDARD 11) set_property(TARGET sioclient_tls PROPERTY CXX_STANDARD_REQUIRED ON) -target_link_libraries(sioclient_tls PRIVATE ${Boost_LIBRARIES} ${OPENSSL_LIBRARIES} ) +target_link_libraries(sioclient_tls PRIVATE ${OPENSSL_LIBRARIES} ) target_compile_definitions(sioclient_tls PRIVATE -DSIO_TLS) if(BUILD_SHARED_LIBS) set_target_properties(sioclient_tls @@ -79,6 +85,8 @@ install(TARGETS ${TARGET_LIBRARIES} DESTINATION "${CMAKE_CURRENT_LIST_DIR}/build/lib/${CMAKE_BUILD_TYPE}" ) -install(FILES ${Boost_LIBRARIES} - DESTINATION "${CMAKE_CURRENT_LIST_DIR}/build/lib/${CMAKE_BUILD_TYPE}" -) +if(BUILD_UNIT_TESTS) +message(STATUS "Building with unit test support.") +enable_testing() +add_subdirectory(test) +endif() diff --git a/INSTALL.md b/INSTALL.md index 614280df..49fc262d 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,48 +1,13 @@ ## Install ### With CMake -1. Install boost, see [Boost setup](#boost_setup) section. -2. Use `git clone --recurse-submodules https://github.com/socketio/socket.io-client-cpp.git` to clone your local repo. -3. Run `cmake -DBOOST_ROOT:STRING= -DBOOST_VER:STRING= ./` -4. Run `make install`(if makefile generated) or open generated project (if project file generated) to build. -5. Outputs is under `./build`, link with the all static libs under `./build/lib` and include headers under `./build/include` in your client code where you want to use it. - -* If you're using boost without install,you can specify `boost include dir` and `boost lib dir` separately by: -```bash -cmake --DBOOST_INCLUDEDIR= --DBOOST_LIBRARYDIR= --DBOOST_VER:STRING= -./ -``` -* CMake didn't allow merging static libraries,but they're all copied to `./build/lib`, you can DIY if you like. +1. Use `git clone --recurse-submodules https://github.com/socketio/socket.io-client-cpp.git` to clone your local repo. +2. Run `cmake ./` +3. Run `make install`(if makefile generated) or open generated project (if project file generated) to build. +4. Outputs is under `./build`, link with the all static libs under `./build/lib` and include headers under `./build/include` in your client code where you want to use it. ### Without CMake -1. Install boost, see [Boost setup](#boost_setup) section. -2. Use `git clone --recurse-submodules https://github.com/socketio/socket.io-client-cpp.git` to clone your local repo. -3. Add `/include`,`./lib/websocketpp` and `./lib/rapidjson/include` to headers search path. -4. Include all files under `./src` in your project, add `sio_client.cpp`,`sio_socket.cpp`,`internal/sio_client_impl.cpp`, `internal/sio_packet.cpp` to source list. -5. Add `/lib` to library search path, add `boost.lib`(Win32) or `-lboost`(Other) link option. -6. Include `sio_client.h` in your client code where you want to use it. - -## Boost setup - -1. Download boost from [boost.org](http://www.boost.org/). -1. Unpack boost to some place. -1. Run either .\bootstrap.bat (on Windows), or ./bootstrap.sh (on other operating systems) under boost folder. - -## Boost build (Build the necessary subset only) -Windows (or other mainstream desktop platforms shall work too): - -The following script will build the necessary subset: - -```bash -bjam install --prefix="" --with-system --with-date_time --with-random link=static runtime-link=shared threading=multi -``` -Optionally You can merge all output .lib files into a fat one, especially if you're not using cmake. - -In output folder, run: - -```bash -lib.exe /OUT:boost.lib * -``` +1. Use `git clone --recurse-submodules https://github.com/socketio/socket.io-client-cpp.git` to clone your local repo. +2. Add `./lib/asio/asio/include`, `./lib/websocketpp` and `./lib/rapidjson/include` to headers search path. +3. Include all files under `./src` in your project, add `sio_client.cpp`,`sio_socket.cpp`,`internal/sio_client_impl.cpp`, `internal/sio_packet.cpp` to source list. +4. Include `sio_client.h` in your client code where you want to use it. diff --git a/lib/asio b/lib/asio new file mode 160000 index 00000000..230c0d2a --- /dev/null +++ b/lib/asio @@ -0,0 +1 @@ +Subproject commit 230c0d2ae035c5ce1292233fcab03cea0d341264 diff --git a/lib/catch b/lib/catch new file mode 160000 index 00000000..9c07718b --- /dev/null +++ b/lib/catch @@ -0,0 +1 @@ +Subproject commit 9c07718b5f779bc1405f98ca6b5b693026f6eac7 diff --git a/lib/websocketpp b/lib/websocketpp index ac5d7ea5..378437ae 160000 --- a/lib/websocketpp +++ b/lib/websocketpp @@ -1 +1 @@ -Subproject commit ac5d7ea5af9734de965688b54a7860259887b537 +Subproject commit 378437aecdcb1dfe62096ffd5d944bf1f640ccc3 diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index e8da085e..11f8914f 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -7,8 +7,9 @@ // #include "sio_client_impl.h" +#include #include -#include +#include #include #include // Comment this out to disable handshake logging to stdout @@ -18,7 +19,13 @@ #define LOG(x) #endif -using boost::posix_time::milliseconds; +#if SIO_TLS +// If using Asio's SSL support, you will also need to add this #include. +// Source: http://think-async.com/Asio/asio-1.10.6/doc/asio/using.html +// #include +#endif + +using std::chrono::milliseconds; using namespace std; namespace sio @@ -43,18 +50,18 @@ namespace sio m_client.init_asio(); // Bind the clients we are using - using websocketpp::lib::placeholders::_1; - using websocketpp::lib::placeholders::_2; - m_client.set_open_handler(lib::bind(&client_impl::on_open,this,_1)); - m_client.set_close_handler(lib::bind(&client_impl::on_close,this,_1)); - m_client.set_fail_handler(lib::bind(&client_impl::on_fail,this,_1)); - m_client.set_message_handler(lib::bind(&client_impl::on_message,this,_1,_2)); + using std::placeholders::_1; + using std::placeholders::_2; + m_client.set_open_handler(std::bind(&client_impl::on_open,this,_1)); + m_client.set_close_handler(std::bind(&client_impl::on_close,this,_1)); + m_client.set_fail_handler(std::bind(&client_impl::on_fail,this,_1)); + m_client.set_message_handler(std::bind(&client_impl::on_message,this,_1,_2)); #if SIO_TLS - m_client.set_tls_init_handler(lib::bind(&client_impl::on_tls_init,this,_1)); + m_client.set_tls_init_handler(std::bind(&client_impl::on_tls_init,this,_1)); #endif - m_packet_mgr.set_decode_callback(lib::bind(&client_impl::on_decode,this,_1)); + m_packet_mgr.set_decode_callback(std::bind(&client_impl::on_decode,this,_1)); - m_packet_mgr.set_encode_callback(lib::bind(&client_impl::on_encode,this,_1,_2)); + m_packet_mgr.set_encode_callback(std::bind(&client_impl::on_encode,this,_1,_2)); } client_impl::~client_impl() @@ -103,8 +110,8 @@ namespace sio m_http_headers = headers; this->reset_states(); - m_client.get_io_service().dispatch(lib::bind(&client_impl::connect_impl,this,uri,m_query_string)); - m_network_thread.reset(new thread(lib::bind(&client_impl::run_loop,this)));//uri lifecycle? + m_client.get_io_service().dispatch(std::bind(&client_impl::connect_impl,this,uri,m_query_string)); + m_network_thread.reset(new thread(std::bind(&client_impl::run_loop,this)));//uri lifecycle? } @@ -142,14 +149,14 @@ namespace sio { m_con_state = con_closing; this->sockets_invoke_void(&sio::socket::close); - m_client.get_io_service().dispatch(lib::bind(&client_impl::close_impl, this,close::status::normal,"End by user")); + m_client.get_io_service().dispatch(std::bind(&client_impl::close_impl, this,close::status::normal,"End by user")); } void client_impl::sync_close() { m_con_state = con_closing; this->sockets_invoke_void(&sio::socket::close); - m_client.get_io_service().dispatch(lib::bind(&client_impl::close_impl, this,close::status::normal,"End by user")); + m_client.get_io_service().dispatch(std::bind(&client_impl::close_impl, this,close::status::normal,"End by user")); if(m_network_thread) { m_network_thread->join(); @@ -173,7 +180,7 @@ namespace sio } } - boost::asio::io_service& client_impl::get_io_service() + asio::io_service& client_impl::get_io_service() { return m_client.get_io_service(); } @@ -274,11 +281,11 @@ namespace sio } } - void client_impl::ping(const boost::system::error_code& ec) + void client_impl::ping(const asio::error_code& ec) { if(ec || m_con.expired()) { - if (ec != boost::asio::error::operation_aborted) + if (ec != asio::error::operation_aborted) LOG("ping exit,con is expired?"<expires_from_now(milliseconds(m_ping_interval), e_code); - m_ping_timer->async_wait(lib::bind(&client_impl::ping,this,lib::placeholders::_1)); + m_ping_timer->async_wait(std::bind(&client_impl::ping,this, std::placeholders::_1)); } if(!m_ping_timeout_timer) { - m_ping_timeout_timer.reset(new boost::asio::deadline_timer(m_client.get_io_service())); - boost::system::error_code timeout_ec; + m_ping_timeout_timer.reset(new asio::steady_timer(m_client.get_io_service())); + std::error_code timeout_ec; m_ping_timeout_timer->expires_from_now(milliseconds(m_ping_timeout), timeout_ec); - m_ping_timeout_timer->async_wait(lib::bind(&client_impl::timeout_pong, this,lib::placeholders::_1)); + m_ping_timeout_timer->async_wait(std::bind(&client_impl::timeout_pong, this, std::placeholders::_1)); } } - void client_impl::timeout_pong(const boost::system::error_code &ec) + void client_impl::timeout_pong(const asio::error_code &ec) { if(ec) { return; } LOG("Pong timeout"<reset_states(); LOG("Reconnecting..."<next_delay(); if(m_reconnect_listener) m_reconnect_listener(m_reconn_made,delay); - m_reconn_timer.reset(new boost::asio::deadline_timer(m_client.get_io_service())); - boost::system::error_code ec; + m_reconn_timer.reset(new asio::steady_timer(m_client.get_io_service())); + asio::error_code ec; m_reconn_timer->expires_from_now(milliseconds(delay), ec); - m_reconn_timer->async_wait(lib::bind(&client_impl::timeout_reconnect,this,lib::placeholders::_1)); + m_reconn_timer->async_wait(std::bind(&client_impl::timeout_reconnect,this, std::placeholders::_1)); } else { @@ -432,10 +439,10 @@ namespace sio LOG("Reconnect for attempt:"<next_delay(); if(m_reconnect_listener) m_reconnect_listener(m_reconn_made,delay); - m_reconn_timer.reset(new boost::asio::deadline_timer(m_client.get_io_service())); - boost::system::error_code ec; + m_reconn_timer.reset(new asio::steady_timer(m_client.get_io_service())); + asio::error_code ec; m_reconn_timer->expires_from_now(milliseconds(delay), ec); - m_reconn_timer->async_wait(lib::bind(&client_impl::timeout_reconnect,this,lib::placeholders::_1)); + m_reconn_timer->async_wait(std::bind(&client_impl::timeout_reconnect,this, std::placeholders::_1)); return; } reason = client::close_reason_drop; @@ -450,9 +457,9 @@ namespace sio void client_impl::on_message(connection_hdl, client_type::message_ptr msg) { if (m_ping_timeout_timer) { - boost::system::error_code ec; + asio::error_code ec; m_ping_timeout_timer->expires_from_now(milliseconds(m_ping_timeout),ec); - m_ping_timeout_timer->async_wait(lib::bind(&client_impl::timeout_pong, this,lib::placeholders::_1)); + m_ping_timeout_timer->async_wait(std::bind(&client_impl::timeout_pong, this, std::placeholders::_1)); } // Parse the incoming message according to socket.IO rules m_packet_mgr.put_payload(msg->get_payload()); @@ -490,17 +497,17 @@ namespace sio m_ping_timeout = 60000; } - m_ping_timer.reset(new boost::asio::deadline_timer(m_client.get_io_service())); - boost::system::error_code ec; + m_ping_timer.reset(new asio::steady_timer(m_client.get_io_service())); + asio::error_code ec; m_ping_timer->expires_from_now(milliseconds(m_ping_interval), ec); if(ec)LOG("ec:"<async_wait(lib::bind(&client_impl::ping,this,lib::placeholders::_1)); + m_ping_timer->async_wait(std::bind(&client_impl::ping,this, std::placeholders::_1)); LOG("On handshake,sid:"< const& payload) { LOG("encoded payload length:"<length()<cancel(ec); @@ -570,11 +577,11 @@ namespace sio #if SIO_TLS client_impl::context_ptr client_impl::on_tls_init(connection_hdl conn) { - context_ptr ctx = context_ptr(new boost::asio::ssl::context(boost::asio::ssl::context::tlsv1)); - boost::system::error_code ec; - ctx->set_options(boost::asio::ssl::context::default_workarounds | - boost::asio::ssl::context::no_sslv2 | - boost::asio::ssl::context::single_dh_use,ec); + context_ptr ctx = context_ptr(new asio::ssl::context(asio::ssl::context::tlsv1)); + asio::error_code ec; + ctx->set_options(asio::ssl::context::default_workarounds | + asio::ssl::context::no_sslv2 | + asio::ssl::context::single_dh_use,ec); if(ec) { cerr<<"Init tls failed,reason:"<< ec.message()< #ifdef _WIN32 #define _WEBSOCKETPP_CPP11_THREAD_ -#define BOOST_ALL_NO_LIB //#define _WEBSOCKETPP_CPP11_RANDOM_DEVICE_ #define _WEBSOCKETPP_NO_CPP11_FUNCTIONAL_ #define INTIALIZER(__TYPE__) @@ -30,7 +29,14 @@ typedef websocketpp::config::asio_tls_client client_config; typedef websocketpp::config::asio_client client_config; #endif //SIO_TLS #endif //DEBUG -#include + +#if SIO_TLS +#include +#endif + +#include +#include +#include #include #include @@ -122,7 +128,7 @@ namespace sio void remove_socket(std::string const& nsp); - boost::asio::io_service& get_io_service(); + asio::io_service& get_io_service(); void on_socket_closed(std::string const& nsp); @@ -137,11 +143,11 @@ namespace sio void send_impl(std::shared_ptr const& payload_ptr,frame::opcode::value opcode); - void ping(const boost::system::error_code& ec); + void ping(const asio::error_code& ec); - void timeout_pong(const boost::system::error_code& ec); + void timeout_pong(const asio::error_code& ec); - void timeout_reconnect(boost::system::error_code const& ec); + void timeout_reconnect(asio::error_code const& ec); unsigned next_delay() const; @@ -171,7 +177,7 @@ namespace sio void clear_timers(); #if SIO_TLS - typedef websocketpp::lib::shared_ptr context_ptr; + typedef websocketpp::lib::shared_ptr context_ptr; context_ptr on_tls_init(connection_hdl con); #endif @@ -195,11 +201,11 @@ namespace sio packet_manager m_packet_mgr; - std::unique_ptr m_ping_timer; + std::unique_ptr m_ping_timer; - std::unique_ptr m_ping_timeout_timer; + std::unique_ptr m_ping_timeout_timer; - std::unique_ptr m_reconn_timer; + std::unique_ptr m_reconn_timer; con_state m_con_state; diff --git a/src/internal/sio_packet.cpp b/src/internal/sio_packet.cpp index a2d13b5e..f549aaac 100755 --- a/src/internal/sio_packet.cpp +++ b/src/internal/sio_packet.cpp @@ -9,7 +9,6 @@ #include #include #include -#include #define kBIN_PLACE_HOLDER "_placeholder" @@ -288,7 +287,7 @@ namespace sio pos++; if (_type == type_binary_event || _type == type_binary_ack) { size_t score_pos = payload_ptr.find('-'); - _pending_buffers = boost::lexical_cast(payload_ptr.substr(pos,score_pos - pos)); + _pending_buffers = static_cast(std::stoul(payload_ptr.substr(pos, score_pos - pos))); pos = score_pos+1; } } @@ -328,7 +327,7 @@ namespace sio if(pos(payload_ptr.substr(pos,json_pos - pos)); + _pack_id = std::stoi(payload_ptr.substr(pos,json_pos - pos)); } if (_frame == frame_message && (_type == type_binary_event || _type == type_binary_ack)) { //parse later when all buffers are arrived. diff --git a/src/sio_client.cpp b/src/sio_client.cpp index 48d0ce20..d85f7bfe 100644 --- a/src/sio_client.cpp +++ b/src/sio_client.cpp @@ -8,7 +8,6 @@ #include "internal/sio_client_impl.h" using namespace websocketpp; -using boost::posix_time::milliseconds; using std::stringstream; namespace sio diff --git a/src/sio_socket.cpp b/src/sio_socket.cpp index 299e0ad0..e3a14736 100644 --- a/src/sio_socket.cpp +++ b/src/sio_socket.cpp @@ -1,10 +1,12 @@ #include "sio_socket.h" #include "internal/sio_packet.h" #include "internal/sio_client_impl.h" -#include -#include +#include +#include #include +#include #include +#include #if DEBUG || _DEBUG #define LOG(x) std::cout << x @@ -157,7 +159,7 @@ namespace sio void ack(int msgId,string const& name,message::list const& ack_message); - void timeout_connection(const boost::system::error_code &ec); + void timeout_connection(const asio::error_code &ec); void send_connect(); @@ -178,7 +180,7 @@ namespace sio error_listener m_error_listener; - std::unique_ptr m_connection_timer; + std::unique_ptr m_connection_timer; std::queue m_packet_queue; @@ -273,9 +275,9 @@ namespace sio } packet p(packet::type_connect,m_nsp); m_client->send(p); - m_connection_timer.reset(new boost::asio::deadline_timer(m_client->get_io_service())); - boost::system::error_code ec; - m_connection_timer->expires_from_now(boost::posix_time::milliseconds(20000), ec); + m_connection_timer.reset(new asio::steady_timer(m_client->get_io_service())); + asio::error_code ec; + m_connection_timer->expires_from_now(std::chrono::milliseconds(20000), ec); m_connection_timer->async_wait(std::bind(&socket::impl::timeout_connection,this, std::placeholders::_1)); } @@ -289,11 +291,11 @@ namespace sio if(!m_connection_timer) { - m_connection_timer.reset(new boost::asio::deadline_timer(m_client->get_io_service())); + m_connection_timer.reset(new asio::steady_timer(m_client->get_io_service())); } - boost::system::error_code ec; - m_connection_timer->expires_from_now(boost::posix_time::milliseconds(3000), ec); - m_connection_timer->async_wait(lib::bind(&socket::impl::on_close, this)); + asio::error_code ec; + m_connection_timer->expires_from_now(std::chrono::milliseconds(3000), ec); + m_connection_timer->async_wait(std::bind(&socket::impl::on_close, this)); } } @@ -475,7 +477,7 @@ namespace sio if(m_error_listener)m_error_listener(err_message); } - void socket::impl::timeout_connection(const boost::system::error_code &ec) + void socket::impl::timeout_connection(const asio::error_code &ec) { NULL_GUARD(m_client); if(ec) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c9c78d81..5da7085d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,9 +1,9 @@ -cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) -include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt) -find_package(Boost ${BOOST_VER} REQUIRED COMPONENTS unit_test_framework) add_executable(sio_test sio_test.cpp) set_property(TARGET sio_test PROPERTY CXX_STANDARD 11) set_property(TARGET sio_test PROPERTY CXX_STANDARD_REQUIRED ON) -target_link_libraries(sioclient PRIVATE ${Boost_LIBRARIES}) target_link_libraries(sio_test sioclient) -target_include_directories(sio_test PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../src" ${Boost_INCLUDE_DIRS} ) +target_include_directories(sio_test PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/../lib/catch/include" + "${CMAKE_CURRENT_SOURCE_DIR}/../src" +) +add_test(sioclient_test sio_test) diff --git a/test/README.md b/test/README.md deleted file mode 100644 index ee7b663f..00000000 --- a/test/README.md +++ /dev/null @@ -1,18 +0,0 @@ -You need have your boost unpacked on your disk, at least staged following modules: - -* system -* date_time -* random -* unit_test_framework - -Then use following instruction to gen makefile or VS project. -```bash -cmake -DBOOST_LIBRARYDIR=`` -DBOOST_INCLUDEDIR=`` -DBOOST_VER:STRING=`` -DCMAKE_BUILD_TYPE=Debug ./ -``` -Then run `make` or open by VS. - -For example I've installed boost 1.57.0 at `D:\boost_1_57_0` and staged the static lib at `D\boost_1_57_0\build\lib` then the command should be: -```bash -cmake -DBOOST_LIBRARYDIR=D:\boost_1_57_0\build\lib -DBOOST_INCLUDEDIR=D:\boost_1_57_0 -DBOOST_VER:STRING=1.57.0 -DCMAKE_BUILD_TYPE=Debug ./ -``` -In this case(Windows) CMake will create a VS project under `./test` folder. Open in VS and run it. \ No newline at end of file diff --git a/test/sio_test.cpp b/test/sio_test.cpp index fb6f3e50..2ee159bb 100644 --- a/test/sio_test.cpp +++ b/test/sio_test.cpp @@ -10,65 +10,66 @@ #include #include -#define BOOST_TEST_MODULE sio_test +#define CATCH_CONFIG_MAIN // This tells Catch to provide a main() - only do this in one cpp file +#include "catch.hpp" -#include #ifndef _WIN32 #include "json.hpp" //nlohmann::json cannot build in MSVC #endif using namespace sio; -BOOST_AUTO_TEST_SUITE(test_packet) -BOOST_AUTO_TEST_CASE( test_packet_construct_1 ) +TEST_CASE( "test_packet_construct_1" ) { packet p("/nsp",nullptr,1001,true); - BOOST_CHECK(p.get_frame() == packet::frame_message); - BOOST_CHECK(p.get_message() == nullptr); - BOOST_CHECK(p.get_nsp() == std::string("/nsp")); - BOOST_CHECK(p.get_pack_id() == 1001); + CHECK(p.get_frame() == packet::frame_message); + CHECK(p.get_message() == nullptr); + CHECK(p.get_nsp() == std::string("/nsp")); + CHECK(p.get_pack_id() == 1001); } -BOOST_AUTO_TEST_CASE( test_packet_construct_2 ) +TEST_CASE( "test_packet_construct_2" ) { packet p(packet::frame_ping); - BOOST_CHECK(p.get_frame() == packet::frame_ping); - BOOST_CHECK(p.get_message() == nullptr); - BOOST_CHECK(p.get_nsp() == std::string("")); - BOOST_CHECK(p.get_pack_id() == 0xFFFFFFFF); + CHECK(p.get_frame() == packet::frame_ping); + CHECK(p.get_message() == nullptr); + CHECK(p.get_nsp() == std::string("")); + CHECK(p.get_pack_id() == 0xFFFFFFFF); } -BOOST_AUTO_TEST_CASE( test_packet_construct_3 ) +TEST_CASE( "test_packet_construct_3" ) { packet p(packet::type_connect,"/nsp",nullptr); - BOOST_CHECK(p.get_frame() == packet::frame_message); - BOOST_CHECK(p.get_type() == packet::type_connect); - BOOST_CHECK(p.get_message() == nullptr); - BOOST_CHECK(p.get_nsp() == std::string("/nsp")); - BOOST_CHECK(p.get_pack_id() == 0xFFFFFFFF); + CHECK(p.get_frame() == packet::frame_message); + CHECK(p.get_type() == packet::type_connect); + CHECK(p.get_message() == nullptr); + CHECK(p.get_nsp() == std::string("/nsp")); + CHECK(p.get_pack_id() == 0xFFFFFFFF); } -BOOST_AUTO_TEST_CASE( test_packet_accept_1 ) +TEST_CASE( "test_packet_accept_1" ) { packet p(packet::type_connect,"/nsp",nullptr); std::string payload; std::vector > buffers; p.accept(payload,buffers); - BOOST_CHECK(buffers.size() == 0); - BOOST_CHECK_MESSAGE(payload == "40/nsp",std::string("outputing payload:")+payload); + CHECK(buffers.size() == 0); + CHECK(payload == "40/nsp"); + INFO("outputing payload:" << payload) } -BOOST_AUTO_TEST_CASE( test_packet_accept_2 ) +TEST_CASE( "test_packet_accept_2" ) { packet p(packet::frame_ping); std::string payload; std::vector > buffers; p.accept(payload,buffers); - BOOST_CHECK(buffers.size() == 0); - BOOST_CHECK_MESSAGE(payload == "2",std::string("outputing payload:")+payload); + CHECK(buffers.size() == 0); + CHECK(payload == "2"); + INFO("outputing payload:" << payload) } -BOOST_AUTO_TEST_CASE( test_packet_accept_3 ) +TEST_CASE( "test_packet_accept_3" ) { message::ptr array = array_message::create(); array->get_vector().push_back(string_message::create("event")); @@ -77,13 +78,14 @@ BOOST_AUTO_TEST_CASE( test_packet_accept_3 ) std::string payload; std::vector > buffers; p.accept(payload,buffers); - BOOST_CHECK(p.get_type() == packet::type_ack); - BOOST_CHECK(buffers.size() == 0); - BOOST_CHECK_MESSAGE(payload == "43/nsp,1001[\"event\",\"text\"]",std::string("outputing payload:")+payload); + CHECK(p.get_type() == packet::type_ack); + CHECK(buffers.size() == 0); + CHECK(payload == "43/nsp,1001[\"event\",\"text\"]"); + INFO("outputing payload:" << payload) } #ifndef _WIN32 -BOOST_AUTO_TEST_CASE( test_packet_accept_4 ) +TEST_CASE( "test_packet_accept_4" ) { message::ptr binObj = object_message::create(); binObj->get_map()["desc"] = string_message::create("Bin of 100 bytes"); @@ -98,132 +100,138 @@ BOOST_AUTO_TEST_CASE( test_packet_accept_4 ) std::string payload; std::vector > buffers; p.accept(payload,buffers); - BOOST_CHECK(p.get_type() == packet::type_binary_event); - BOOST_REQUIRE(buffers.size() == 2); + CHECK(p.get_type() == packet::type_binary_event); + REQUIRE(buffers.size() == 2); size_t json_start = payload.find("{"); - BOOST_REQUIRE(json_start!=std::string::npos); + REQUIRE(json_start!=std::string::npos); std::string header = payload.substr(0,json_start); - BOOST_CHECK_MESSAGE(header=="452-/nsp,1001",std::string("outputing payload header:")+header); + CHECK(header=="452-/nsp,1001"); + INFO("outputing payload:" << payload) std::string json = payload.substr(json_start); nlohmann::json j = nlohmann::json::parse(json); - BOOST_CHECK_MESSAGE(j["desc"].get() == "Bin of 100 bytes", std::string("outputing payload desc:") + j["desc"].get()); - BOOST_CHECK_MESSAGE((bool)j["bin1"]["_placeholder"] , std::string("outputing payload bin1:") + j["bin1"].dump()); - BOOST_CHECK_MESSAGE((bool)j["bin2"]["_placeholder"] , std::string("outputing payload bin2:") + j["bin2"].dump()); + CHECK(j["desc"].get() == "Bin of 100 bytes"); + INFO("outputing payload desc::" << j["desc"].get()) + CHECK((bool)j["bin1"]["_placeholder"]); + INFO("outputing payload bin1:" << j["bin1"].dump()) + CHECK((bool)j["bin2"]["_placeholder"]); + INFO("outputing payload bin2:" << j["bin2"].dump()) int bin1Num = j["bin1"]["num"].get(); char numchar[] = {0,0}; numchar[0] = bin1Num+'0'; - BOOST_CHECK_MESSAGE(buffers[bin1Num]->length()==101 , std::string("outputing payload bin1 num:")+numchar); - BOOST_CHECK(buffers[bin1Num]->at(50)==0 && buffers[bin1Num]->at(0) == packet::frame_message); + CHECK(buffers[bin1Num]->length()==101); + INFO("outputing payload bin1 num:" << numchar) + CHECK(buffers[bin1Num]->at(50)==0); + CHECK(buffers[bin1Num]->at(0) == packet::frame_message); int bin2Num = j["bin2"]["num"].get(); numchar[0] = bin2Num+'0'; - BOOST_CHECK_MESSAGE(buffers[bin2Num]->length()==51 , std::string("outputing payload bin2 num:") + numchar); - BOOST_CHECK(buffers[bin2Num]->at(25)==1 && buffers[bin2Num]->at(0) == packet::frame_message); + CHECK(buffers[bin2Num]->length()==51); + INFO("outputing payload bin2 num:" << numchar) + CHECK(buffers[bin2Num]->at(25)==1); + CHECK(buffers[bin2Num]->at(0) == packet::frame_message); } #endif -BOOST_AUTO_TEST_CASE( test_packet_parse_1 ) +TEST_CASE( "test_packet_parse_1" ) { packet p; bool hasbin = p.parse("42/nsp,1001[\"event\",\"text\"]"); - BOOST_CHECK(!hasbin); - BOOST_CHECK(p.get_frame() == packet::frame_message); - BOOST_CHECK(p.get_type() == packet::type_event); - BOOST_CHECK(p.get_nsp() == "/nsp"); - BOOST_CHECK(p.get_pack_id() == 1001); - BOOST_CHECK(p.get_message()->get_flag() == message::flag_array); - BOOST_REQUIRE(p.get_message()->get_vector()[0]->get_flag() == message::flag_string); - BOOST_CHECK(p.get_message()->get_vector()[0]->get_string() == "event"); - BOOST_REQUIRE(p.get_message()->get_vector()[1]->get_flag() == message::flag_string); - BOOST_CHECK(p.get_message()->get_vector()[1]->get_string() == "text"); + CHECK(!hasbin); + CHECK(p.get_frame() == packet::frame_message); + CHECK(p.get_type() == packet::type_event); + CHECK(p.get_nsp() == "/nsp"); + CHECK(p.get_pack_id() == 1001); + CHECK(p.get_message()->get_flag() == message::flag_array); + REQUIRE(p.get_message()->get_vector()[0]->get_flag() == message::flag_string); + CHECK(p.get_message()->get_vector()[0]->get_string() == "event"); + REQUIRE(p.get_message()->get_vector()[1]->get_flag() == message::flag_string); + CHECK(p.get_message()->get_vector()[1]->get_string() == "text"); hasbin = p.parse("431111[\"ack\",{\"count\":5}]"); - BOOST_CHECK(!hasbin); - BOOST_CHECK(p.get_frame() == packet::frame_message); - BOOST_CHECK(p.get_type() == packet::type_ack); - BOOST_CHECK(p.get_pack_id() == 1111); - BOOST_CHECK(p.get_nsp() == "/"); - BOOST_CHECK(p.get_message()->get_flag() == message::flag_array); - BOOST_REQUIRE(p.get_message()->get_vector()[0]->get_flag() == message::flag_string); - BOOST_CHECK(p.get_message()->get_vector()[0]->get_string() == "ack"); - BOOST_REQUIRE(p.get_message()->get_vector()[1]->get_flag() == message::flag_object); - BOOST_CHECK(p.get_message()->get_vector()[1]->get_map()["count"]->get_int() == 5); + CHECK(!hasbin); + CHECK(p.get_frame() == packet::frame_message); + CHECK(p.get_type() == packet::type_ack); + CHECK(p.get_pack_id() == 1111); + CHECK(p.get_nsp() == "/"); + CHECK(p.get_message()->get_flag() == message::flag_array); + REQUIRE(p.get_message()->get_vector()[0]->get_flag() == message::flag_string); + CHECK(p.get_message()->get_vector()[0]->get_string() == "ack"); + REQUIRE(p.get_message()->get_vector()[1]->get_flag() == message::flag_object); + CHECK(p.get_message()->get_vector()[1]->get_map()["count"]->get_int() == 5); } -BOOST_AUTO_TEST_CASE( test_packet_parse_2 ) +TEST_CASE( "test_packet_parse_2" ) { packet p; bool hasbin = p.parse("3"); - BOOST_CHECK(!hasbin); - BOOST_CHECK(p.get_frame() == packet::frame_pong); - BOOST_CHECK(!p.get_message()); - BOOST_CHECK(p.get_nsp() == "/"); - BOOST_CHECK(p.get_pack_id() == -1); + CHECK(!hasbin); + CHECK(p.get_frame() == packet::frame_pong); + CHECK(!p.get_message()); + CHECK(p.get_nsp() == "/"); + CHECK(p.get_pack_id() == -1); hasbin = p.parse("2"); - BOOST_CHECK(!hasbin); - BOOST_CHECK(p.get_frame() == packet::frame_ping); - BOOST_CHECK(!p.get_message()); - BOOST_CHECK(p.get_nsp() == "/"); - BOOST_CHECK(p.get_pack_id() == -1); + CHECK(!hasbin); + CHECK(p.get_frame() == packet::frame_ping); + CHECK(!p.get_message()); + CHECK(p.get_nsp() == "/"); + CHECK(p.get_pack_id() == -1); } -BOOST_AUTO_TEST_CASE( test_packet_parse_3 ) +TEST_CASE( "test_packet_parse_3" ) { packet p; bool hasbin = p.parse("40/nsp"); - BOOST_CHECK(!hasbin); - BOOST_CHECK(p.get_type() == packet::type_connect); - BOOST_CHECK(p.get_frame() == packet::frame_message); - BOOST_CHECK(p.get_nsp() == "/nsp"); - BOOST_CHECK(p.get_pack_id() == -1); - BOOST_CHECK(!p.get_message()); + CHECK(!hasbin); + CHECK(p.get_type() == packet::type_connect); + CHECK(p.get_frame() == packet::frame_message); + CHECK(p.get_nsp() == "/nsp"); + CHECK(p.get_pack_id() == -1); + CHECK(!p.get_message()); p.parse("40"); - BOOST_CHECK(p.get_type() == packet::type_connect); - BOOST_CHECK(p.get_nsp() == "/"); - BOOST_CHECK(p.get_pack_id() == -1); - BOOST_CHECK(!p.get_message()); + CHECK(p.get_type() == packet::type_connect); + CHECK(p.get_nsp() == "/"); + CHECK(p.get_pack_id() == -1); + CHECK(!p.get_message()); p.parse("44\"error\""); - BOOST_CHECK(p.get_type() == packet::type_error); - BOOST_CHECK(p.get_nsp() == "/"); - BOOST_CHECK(p.get_pack_id() == -1); - BOOST_CHECK(p.get_message()->get_flag() == message::flag_string); + CHECK(p.get_type() == packet::type_error); + CHECK(p.get_nsp() == "/"); + CHECK(p.get_pack_id() == -1); + CHECK(p.get_message()->get_flag() == message::flag_string); p.parse("44/nsp,\"error\""); - BOOST_CHECK(p.get_type() == packet::type_error); - BOOST_CHECK(p.get_nsp() == "/nsp"); - BOOST_CHECK(p.get_pack_id() == -1); - BOOST_CHECK(p.get_message()->get_flag() == message::flag_string); + CHECK(p.get_type() == packet::type_error); + CHECK(p.get_nsp() == "/nsp"); + CHECK(p.get_pack_id() == -1); + CHECK(p.get_message()->get_flag() == message::flag_string); } -BOOST_AUTO_TEST_CASE( test_packet_parse_4 ) +TEST_CASE( "test_packet_parse_4" ) { packet p; bool hasbin = p.parse("452-/nsp,101[\"bin_event\",[{\"_placeholder\":true,\"num\":1},{\"_placeholder\":true,\"num\":0},\"text\"]]"); - BOOST_CHECK(hasbin); + CHECK(hasbin); char buf[101]; buf[0] = packet::frame_message; memset(buf+1,0,100); std::string bufstr(buf,101); std::string bufstr2(buf,51); - BOOST_CHECK(p.parse_buffer(bufstr)); - BOOST_CHECK(!p.parse_buffer(bufstr2)); + CHECK(p.parse_buffer(bufstr)); + CHECK(!p.parse_buffer(bufstr2)); - BOOST_CHECK(p.get_frame() == packet::frame_message); - BOOST_CHECK(p.get_nsp() == "/nsp"); - BOOST_CHECK(p.get_pack_id() == 101); + CHECK(p.get_frame() == packet::frame_message); + CHECK(p.get_nsp() == "/nsp"); + CHECK(p.get_pack_id() == 101); message::ptr msg = p.get_message(); - BOOST_REQUIRE(msg&&msg->get_flag() == message::flag_array); - BOOST_CHECK(msg->get_vector()[0]->get_string() == "bin_event"); + REQUIRE(msg); + REQUIRE(msg->get_flag() == message::flag_array); + CHECK(msg->get_vector()[0]->get_string() == "bin_event"); message::ptr array = msg->get_vector()[1]; - BOOST_REQUIRE(array->get_flag() == message::flag_array); - BOOST_REQUIRE(array->get_vector()[0]->get_flag() == message::flag_binary); - BOOST_REQUIRE(array->get_vector()[1]->get_flag() == message::flag_binary); - BOOST_REQUIRE(array->get_vector()[2]->get_flag() == message::flag_string); - BOOST_CHECK(array->get_vector()[0]->get_binary()->size() == 50); - BOOST_CHECK(array->get_vector()[1]->get_binary()->size() == 100); - BOOST_CHECK(array->get_vector()[2]->get_string() == "text"); + REQUIRE(array->get_flag() == message::flag_array); + REQUIRE(array->get_vector()[0]->get_flag() == message::flag_binary); + REQUIRE(array->get_vector()[1]->get_flag() == message::flag_binary); + REQUIRE(array->get_vector()[2]->get_flag() == message::flag_string); + CHECK(array->get_vector()[0]->get_binary()->size() == 50); + CHECK(array->get_vector()[1]->get_binary()->size() == 100); + CHECK(array->get_vector()[2]->get_string() == "text"); } - -BOOST_AUTO_TEST_SUITE_END() - From 019742fcd592fa1bbf7491c63f5bd0bd3dfa0604 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Thu, 7 Jan 2021 14:55:00 +0100 Subject: [PATCH 07/43] chore: update .gitignore with cmake output [skip ci] --- .gitignore | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 989bd14a..1b5b52a4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,9 @@ build/ -**/*.user \ No newline at end of file +**/*.user + +CMakeCache.txt +CMakeFiles/ +Makefile +cmake_install.cmake +install_manifest.txt +libsioclient.a From 8d4fe204f1a34c1184371e3a728b1bf68172e521 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Thu, 7 Jan 2021 15:27:45 +0100 Subject: [PATCH 08/43] ci: migrate to GitHub Actions Due to the recent changes to the Travis CI platform (see [1]), we will now use GitHub Actions to run the tests. Reference: https://docs.github.com/en/free-pro-team@latest/actions/guides/building-and-testing-nodejs [1]: https://blog.travis-ci.com/2020-11-02-travis-ci-new-billing --- .github/workflows/ci.yml | 26 ++++++++++++++++++++++++++ .travis.yml | 17 ----------------- README.md | 3 ++- lib/websocketpp | 2 +- 4 files changed, 29 insertions(+), 19 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..c8e65c60 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,26 @@ +name: CI + +on: + push: + pull_request: + schedule: + - cron: '0 0 * * 0' + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + fail-fast: false + steps: + - name: Checkout + uses: actions/checkout@v2.0.0 + + - name: Build project + uses: nicledomaS/cmake_build_action@v1.3 + with: + submodule_update: ON + run_tests: ON + unit_test_build: -DBUILD_UNIT_TESTS=ON + cmake_args: -DCMAKE_CXX_FLAGS=-std=c++11 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index eac4142e..00000000 --- a/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -language: cpp - -compiler: - - clang - -before_install: - - sudo apt-get install clang git libssl-dev - - sudo add-apt-repository -y ppa:kubuntu-ppa/backports - - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test -y - - sudo apt-get update -yqq - - sudo apt-get install -y cmake g++-4.8 - - sed -i -e 's/cmake_minimum_required(VERSION 3.1.0/cmake_minimum_required(VERSION 2.8.12/' ./CMakeLists.txt -script: - - cmake -D CMAKE_CXX_FLAGS=-std=c++11 -D BUILD_UNIT_TESTS=ON . - - make - - make test - - make install diff --git a/README.md b/README.md index b30c7d8f..76d284b9 100755 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # Socket.IO C++ Client -[![Build Status](https://travis-ci.org/socketio/socket.io-client-cpp.svg)](https://travis-ci.org/socketio/socket.io-client-cpp) + +[![Build Status](https://github.com/socketio/socket.io-client-cpp/workflows/CI/badge.svg)](https://github.com/socketio/socket.io-client-cpp/actions) By virtue of being written in C++, this client works in several different platforms. The [examples](https://github.com/socketio/socket.io-client-cpp/tree/master/examples) folder contains an iPhone, QT and Console example chat client! It depends on [websocket++](https://github.com/zaphoyd/websocketpp) and is inspired by [socket.io-clientpp](https://github.com/ebshimizu/socket.io-clientpp). diff --git a/lib/websocketpp b/lib/websocketpp index 378437ae..56123c87 160000 --- a/lib/websocketpp +++ b/lib/websocketpp @@ -1 +1 @@ -Subproject commit 378437aecdcb1dfe62096ffd5d944bf1f640ccc3 +Subproject commit 56123c87598f8b1dd471be83ca841ceae07f95ba From d353647b39c849da858aee041858d348c677dbcb Mon Sep 17 00:00:00 2001 From: Vincent Raman Date: Mon, 21 Sep 2015 21:34:46 +0200 Subject: [PATCH 09/43] refactor: use standard install paths (#58) --- CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4187f21f..19c5e54d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,12 +77,14 @@ list(APPEND TARGET_LIBRARIES sioclient_tls) endif() +include(GNUInstallDirs) + install(FILES ${ALL_HEADERS} - DESTINATION "${CMAKE_CURRENT_LIST_DIR}/build/include" + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) install(TARGETS ${TARGET_LIBRARIES} - DESTINATION "${CMAKE_CURRENT_LIST_DIR}/build/lib/${CMAKE_BUILD_TYPE}" + DESTINATION ${CMAKE_INSTALL_LIBDIR} ) if(BUILD_UNIT_TESTS) From b1216ee428dd7d1e72368da9b12aa43bfc487c93 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Sat, 9 Jan 2021 02:13:39 +0100 Subject: [PATCH 10/43] refactor: use correct Engine.IO protocol revision The 3rd revision is included in Socket.IO v1/v2, whereas the 4th is included in Socket.IO v3. Note: this query parameter is not currently checked on the server-side Reference: https://github.com/socketio/engine.io-protocol --- src/internal/sio_client_impl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 11f8914f..2eab3ad5 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -222,7 +222,7 @@ namespace sio } else { ss<0){ ss<<"&sid="< Date: Sat, 9 Jan 2021 01:40:31 +0100 Subject: [PATCH 11/43] feat: add support for Socket.IO v3 See also: - https://github.com/socketio/engine.io-protocol#difference-between-v3-and-v4 - https://github.com/socketio/socket.io-protocol#difference-between-v5-and-v4 --- README.md | 10 +- src/internal/sio_client_impl.cpp | 31 ++---- src/internal/sio_client_impl.h | 4 +- src/internal/sio_packet.cpp | 10 +- src/sio_socket.cpp | 4 - test/echo_server/index.js | 12 +-- test/echo_server/package-lock.json | 165 +++++++++++++++++++++++++++++ test/echo_server/package.json | 8 +- test/sio_test | Bin 0 -> 888448 bytes test/sio_test.cpp | 17 ++- 10 files changed, 204 insertions(+), 57 deletions(-) create mode 100644 test/echo_server/package-lock.json create mode 100755 test/sio_test diff --git a/README.md b/README.md index 76d284b9..46c9e5ed 100755 --- a/README.md +++ b/README.md @@ -6,16 +6,24 @@ By virtue of being written in C++, this client works in several different platfo [![Clients with iPhone, QT, Console and web](https://cldup.com/ukvVVZmvYV.png)](https://github.com/socketio/socket.io-client-cpp/tree/master/examples) +## Compatibility table + +| C++ Client version | Socket.IO server version | +| ------------------- | ------------------------ | +| 2.x (`2.x` branch) | 1.x / 2.x | +| 3.x (master branch) | 3.x | + ## Features - 100% written in modern C++11 -- Compatible with socket.io 1.0+ protocol - Binary support - Automatic JSON encoding - Multiplex support - Similar API to the Socket.IO JS client - Cross platform +Note: Only the WebSocket transport is currently implemented (no fallback to HTTP long-polling) + ## Installation alternatives * [With CMAKE](./INSTALL.md#with-cmake) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 2eab3ad5..f78aea49 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -222,7 +222,7 @@ namespace sio } else { ss<0){ ss<<"&sid="<m_client.send(this->m_con, *payload, frame::opcode::text, ec); }); - if(m_ping_timer) - { - asio::error_code e_code; - m_ping_timer->expires_from_now(milliseconds(m_ping_interval), e_code); - m_ping_timer->async_wait(std::bind(&client_impl::ping,this, std::placeholders::_1)); - } if(!m_ping_timeout_timer) { m_ping_timeout_timer.reset(new asio::steady_timer(m_client.get_io_service())); @@ -497,12 +491,6 @@ namespace sio m_ping_timeout = 60000; } - m_ping_timer.reset(new asio::steady_timer(m_client.get_io_service())); - asio::error_code ec; - m_ping_timer->expires_from_now(milliseconds(m_ping_interval), ec); - if(ec)LOG("ec:"<async_wait(std::bind(&client_impl::ping,this, std::placeholders::_1)); - LOG("On handshake,sid:"< payload) + { + this->m_client.send(this->m_con, *payload, frame::opcode::text); + }); + if(m_ping_timeout_timer) { m_ping_timeout_timer->cancel(); @@ -536,8 +530,8 @@ namespace sio //FIXME how to deal? this->close_impl(close::status::abnormal_close, "End by server"); break; - case packet::frame_pong: - this->on_pong(); + case packet::frame_ping: + this->on_ping(); break; default: @@ -560,11 +554,6 @@ namespace sio m_ping_timeout_timer->cancel(ec); m_ping_timeout_timer.reset(); } - if(m_ping_timer) - { - m_ping_timer->cancel(ec); - m_ping_timer.reset(); - } } void client_impl::reset_states() diff --git a/src/internal/sio_client_impl.h b/src/internal/sio_client_impl.h index 577b1dd2..bfdc0abc 100644 --- a/src/internal/sio_client_impl.h +++ b/src/internal/sio_client_impl.h @@ -170,7 +170,7 @@ namespace sio //socketio callbacks void on_handshake(message::ptr const& message); - void on_pong(); + void on_ping(); void reset_states(); @@ -201,8 +201,6 @@ namespace sio packet_manager m_packet_mgr; - std::unique_ptr m_ping_timer; - std::unique_ptr m_ping_timeout_timer; std::unique_ptr m_reconn_timer; diff --git a/src/internal/sio_packet.cpp b/src/internal/sio_packet.cpp index f549aaac..4b810987 100755 --- a/src/internal/sio_packet.cpp +++ b/src/internal/sio_packet.cpp @@ -53,13 +53,7 @@ namespace sio Value numVal; numVal.SetInt((int)buffers.size()); val.AddMember("num", numVal, doc.GetAllocator()); - //FIXME can not avoid binary copy here. - shared_ptr write_buffer = make_shared(); - write_buffer->reserve(msg.get_binary()->size()+1); - char frame_char = packet::frame_message; - write_buffer->append(&frame_char,1); - write_buffer->append(*(msg.get_binary())); - buffers.push_back(write_buffer); + buffers.push_back(msg.get_binary()); } void accept_array_message(array_message const& msg,Value& val,Document& doc,vector >& buffers) @@ -253,7 +247,7 @@ namespace sio { if (_pending_buffers > 0) { assert(is_binary_message(buf_payload));//this is ensured by outside. - _buffers.push_back(std::make_shared(buf_payload.data()+1,buf_payload.size()-1)); + _buffers.push_back(std::make_shared(buf_payload.data(),buf_payload.size())); _pending_buffers--; if (_pending_buffers == 0) { diff --git a/src/sio_socket.cpp b/src/sio_socket.cpp index e3a14736..e15ba83b 100644 --- a/src/sio_socket.cpp +++ b/src/sio_socket.cpp @@ -269,10 +269,6 @@ namespace sio void socket::impl::send_connect() { NULL_GUARD(m_client); - if(m_nsp == "/") - { - return; - } packet p(packet::type_connect,m_nsp); m_client->send(p); m_connection_timer.reset(new asio::steady_timer(m_client->get_io_service())); diff --git a/test/echo_server/index.js b/test/echo_server/index.js index 2c59ab1c..049066be 100644 --- a/test/echo_server/index.js +++ b/test/echo_server/index.js @@ -1,19 +1,17 @@ var port = 3000; -var io = require('socket.io').listen(port); +var io = require('socket.io')().listen(port); console.log("Listening on port " + port); /* Socket.IO events */ io.on("connection", function(socket){ console.log("new connection"); - socket.on('test_text',function() - { - console.log("test text event received."); + socket.on('test_text', (...args) => { + console.log("test text event received.", args); }); - socket.on('test_binary',function() - { - var args =Array.prototype.slice.call(arguments); + socket.on('test_binary', (...args) => { + console.log("test binary event received", args); if(args[0] instanceof Buffer) { console.log("test binary event received,binary length:"+ args[0].length); diff --git a/test/echo_server/package-lock.json b/test/echo_server/package-lock.json new file mode 100644 index 00000000..ed9e9d12 --- /dev/null +++ b/test/echo_server/package-lock.json @@ -0,0 +1,165 @@ +{ + "name": "echo_server", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", + "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" + }, + "@types/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==" + }, + "@types/cors": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.9.tgz", + "integrity": "sha512-zurD1ibz21BRlAOIKP8yhrxlqKx6L9VCwkB5kMiP6nZAhoF5MvC7qS1qPA7nRcr1GJolfkQC7/EAL4hdYejLtg==" + }, + "@types/node": { + "version": "14.14.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", + "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "engine.io": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.0.6.tgz", + "integrity": "sha512-rf7HAVZpcRrcKEKddgIzYUnwg0g5HE1RvJaTLwkcfJmce4g+po8aMuE6vxzp6JwlK8FEq/vi0KWN6tA585DjaA==", + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", + "ws": "~7.4.2" + } + }, + "engine.io-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", + "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "requires": { + "base64-arraybuffer": "0.1.4" + } + }, + "mime-db": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" + }, + "mime-types": { + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "requires": { + "mime-db": "1.45.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "socket.io": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.0.5.tgz", + "integrity": "sha512-5yWQ43P/4IttmPCGKDQ3CVocBiJWGpibyhYJxgUhf69EHMzmK8XW0DkmHIoYdLmZaVZJyiEkUqpeC7rSCIqekw==", + "requires": { + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "@types/node": "^14.14.10", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~4.0.6", + "socket.io-adapter": "~2.0.3", + "socket.io-parser": "~4.0.3" + } + }, + "socket.io-adapter": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.0.3.tgz", + "integrity": "sha512-2wo4EXgxOGSFueqvHAdnmi5JLZzWqMArjuP4nqC26AtLh5PoCPsaRbRdah2xhcwTAMooZfjYiNVNkkmmSMaxOQ==" + }, + "socket.io-parser": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.3.tgz", + "integrity": "sha512-m4ybFiP4UYVORRt7jcdqf8UWx+ywVdAqqsJyruXxAdD3Sv6MDemijWij34mOWdMJ55bEdIb9jACBhxUgNK6sxw==", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "ws": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", + "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==" + } + } +} diff --git a/test/echo_server/package.json b/test/echo_server/package.json index e4a4727e..b980f3c8 100644 --- a/test/echo_server/package.json +++ b/test/echo_server/package.json @@ -1,8 +1,8 @@ { "name": "echo_server", - "author":"Melo Yao", - "version":"0.0.0", + "author": "Melo Yao", + "version": "0.0.0", "dependencies": { - "socket.io": "1.*" - } + "socket.io": "^3.0.5" + } } diff --git a/test/sio_test b/test/sio_test new file mode 100755 index 0000000000000000000000000000000000000000..55c24ea1d1bc6bf14ceb10afcc407735992ae8bd GIT binary patch literal 888448 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ℜ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 `J2ae1w{p)B_}slOc528BoS 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

g8xGa?#OHH-K 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 W@OJF@fAx?55+CqO!2!XqJO2;o)lpLb literal 0 HcmV?d00001 diff --git a/test/sio_test.cpp b/test/sio_test.cpp index 2ee159bb..22d4f601 100644 --- a/test/sio_test.cpp +++ b/test/sio_test.cpp @@ -118,16 +118,16 @@ TEST_CASE( "test_packet_accept_4" ) int bin1Num = j["bin1"]["num"].get(); char numchar[] = {0,0}; numchar[0] = bin1Num+'0'; - CHECK(buffers[bin1Num]->length()==101); + CHECK(buffers[bin1Num]->length()==100); INFO("outputing payload bin1 num:" << numchar) CHECK(buffers[bin1Num]->at(50)==0); - CHECK(buffers[bin1Num]->at(0) == packet::frame_message); + CHECK(buffers[bin1Num]->at(0) == 0); int bin2Num = j["bin2"]["num"].get(); numchar[0] = bin2Num+'0'; - CHECK(buffers[bin2Num]->length()==51); + CHECK(buffers[bin2Num]->length()==50); INFO("outputing payload bin2 num:" << numchar) CHECK(buffers[bin2Num]->at(25)==1); - CHECK(buffers[bin2Num]->at(0) == packet::frame_message); + CHECK(buffers[bin2Num]->at(0) == 1); } #endif @@ -209,12 +209,11 @@ TEST_CASE( "test_packet_parse_4" ) packet p; bool hasbin = p.parse("452-/nsp,101[\"bin_event\",[{\"_placeholder\":true,\"num\":1},{\"_placeholder\":true,\"num\":0},\"text\"]]"); CHECK(hasbin); - char buf[101]; - buf[0] = packet::frame_message; - memset(buf+1,0,100); + char buf[100]; + memset(buf,0,100); - std::string bufstr(buf,101); - std::string bufstr2(buf,51); + std::string bufstr(buf,100); + std::string bufstr2(buf,50); CHECK(p.parse_buffer(bufstr)); CHECK(!p.parse_buffer(bufstr2)); From 1b42ce738f4c3e260f79bcb143bfe6efcdce5709 Mon Sep 17 00:00:00 2001 From: Adrian DC Date: Thu, 23 Apr 2020 22:06:14 +0200 Subject: [PATCH 12/43] feat: implement #45: add support for logging configuration --- API.md | 13 +++++++++++++ src/internal/sio_client_impl.cpp | 16 ++++++++++++++++ src/internal/sio_client_impl.h | 8 +++++++- src/sio_client.cpp | 17 ++++++++++++++++- src/sio_client.h | 8 +++++++- 5 files changed, 59 insertions(+), 3 deletions(-) diff --git a/API.md b/API.md index 1061fc74..f1280eb4 100644 --- a/API.md +++ b/API.md @@ -168,6 +168,19 @@ Set listener for reconnecting is in process. Set listener for reconnecting event, called once a delayed connecting is scheduled. +#### Logs +`void set_logs_default()` + +Configure logs to the default level (connect, disconnect, app) + +`void set_logs_quiet()` + +Configure logs to the quiet level + +`void set_logs_verbose()` + +Configure logs to the verbose level + #### Namespace `socket::ptr socket(std::string const& nsp)` diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index f78aea49..d79681e7 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -164,6 +164,22 @@ namespace sio } } + void client_impl::set_logs_default() + { + m_client.clear_access_channels(websocketpp::log::alevel::all); + m_client.set_access_channels(websocketpp::log::alevel::connect | websocketpp::log::alevel::disconnect | websocketpp::log::alevel::app); + } + + void client_impl::set_logs_quiet() + { + m_client.clear_access_channels(websocketpp::log::alevel::all); + } + + void client_impl::set_logs_verbose() + { + m_client.set_access_channels(websocketpp::log::alevel::all); + } + /*************************protected:*************************/ void client_impl::send(packet& p) { diff --git a/src/internal/sio_client_impl.h b/src/internal/sio_client_impl.h index bfdc0abc..34db1869 100644 --- a/src/internal/sio_client_impl.h +++ b/src/internal/sio_client_impl.h @@ -122,7 +122,13 @@ namespace sio void set_reconnect_delay(unsigned millis) {m_reconn_delay = millis;if(m_reconn_delay_maxmillis) m_reconn_delay = millis;} - + + void set_logs_default(); + + void set_logs_quiet(); + + void set_logs_verbose(); + protected: void send(packet& p); diff --git a/src/sio_client.cpp b/src/sio_client.cpp index d85f7bfe..b475e6f7 100644 --- a/src/sio_client.cpp +++ b/src/sio_client.cpp @@ -123,5 +123,20 @@ namespace sio { m_impl->set_reconnect_delay_max(millis); } - + + void client::set_logs_default() + { + m_impl->set_logs_default(); + } + + void client::set_logs_quiet() + { + m_impl->set_logs_quiet(); + } + + void client::set_logs_verbose() + { + m_impl->set_logs_verbose(); + } + } diff --git a/src/sio_client.h b/src/sio_client.h index 77be0a2d..c37882ab 100644 --- a/src/sio_client.h +++ b/src/sio_client.h @@ -66,7 +66,13 @@ namespace sio void set_reconnect_delay(unsigned millis); void set_reconnect_delay_max(unsigned millis); - + + void set_logs_default(); + + void set_logs_quiet(); + + void set_logs_verbose(); + sio::socket::ptr const& socket(const std::string& nsp = ""); // Closes the connection From b196fa7537cd3f7bed626ead873a7b71d1293c0d Mon Sep 17 00:00:00 2001 From: DK Moon Date: Mon, 27 Feb 2017 05:12:30 +0000 Subject: [PATCH 13/43] fix: lower the minimum CMake supported version If CMake doesn't understand C++11-related property, simply use the COMPILE_FLAGS property --- CMakeLists.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 19c5e54d..f0bd6957 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) +cmake_minimum_required(VERSION 2.8 FATAL_ERROR) PROJECT(sioclient) option(BUILD_SHARED_LIBS "Build the shared library" OFF) @@ -39,9 +39,12 @@ target_include_directories(sioclient PRIVATE ${CMAKE_CURRENT_LIST_DIR}/lib/asio/asio/include ) +if (CMAKE_VERSION VERSION_GREATER "3.1") set_property(TARGET sioclient PROPERTY CXX_STANDARD 11) set_property(TARGET sioclient PROPERTY CXX_STANDARD_REQUIRED ON) - +else() +set_property(TARGET sioclient APPEND_STRING PROPERTY COMPILE_FLAGS "-std=c++11") +endif() if(BUILD_SHARED_LIBS) set_target_properties(sioclient PROPERTIES @@ -62,9 +65,13 @@ target_include_directories(sioclient_tls PRIVATE ${OPENSSL_INCLUDE_DIR} ) +if (CMAKE_VERSION VERSION_GREATER "3.1") set_property(TARGET sioclient_tls PROPERTY CXX_STANDARD 11) set_property(TARGET sioclient_tls PROPERTY CXX_STANDARD_REQUIRED ON) target_link_libraries(sioclient_tls PRIVATE ${OPENSSL_LIBRARIES} ) +else() +set_property(TARGET sioclient_tls APPEND_STRING PROPERTY COMPILE_FLAGS "-std=c++11") +endif() target_compile_definitions(sioclient_tls PRIVATE -DSIO_TLS) if(BUILD_SHARED_LIBS) set_target_properties(sioclient_tls From d1c73b73a8f536da3d353eac2a560af9791b13e3 Mon Sep 17 00:00:00 2001 From: Adrian DC Date: Fri, 5 Feb 2021 22:30:56 +0100 Subject: [PATCH 14/43] fix: resolve #254: handle closing sockets upon on_fail events --- src/internal/sio_client_impl.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index d79681e7..32dd4a46 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -382,6 +382,12 @@ namespace sio void client_impl::on_fail(connection_hdl) { + if (m_con_state == con_closing) { + LOG("Connection failed while closing." << endl); + this->close(); + return; + } + m_con.reset(); m_con_state = con_closed; this->sockets_invoke_void(&sio::socket::on_disconnect); @@ -404,6 +410,12 @@ namespace sio void client_impl::on_open(connection_hdl con) { + if (m_con_state == con_closing) { + LOG("Connection opened while closing." << endl); + this->close(); + return; + } + LOG("Connected." << endl); m_con_state = con_opened; m_con = con; From e7de4ebf64f4f49e18594a2c093c07beb963579a Mon Sep 17 00:00:00 2001 From: Adrian DC Date: Fri, 5 Feb 2021 23:25:13 +0100 Subject: [PATCH 15/43] fix: resolve client_impl::ping LOG call syntax in debug builds --- src/internal/sio_client_impl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 32dd4a46..b9de3449 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -302,7 +302,7 @@ namespace sio if(ec || m_con.expired()) { if (ec != asio::error::operation_aborted) - LOG("ping exit,con is expired?"< Date: Sun, 14 Feb 2021 00:01:35 -0600 Subject: [PATCH 16/43] feat: allow resource path to be set in connection URI (#134) Please note that this implementation differs from the JS one, where the resource path is the namespace you want to reach: ```js const socket = io("https://example.com/my-namespace", { path: "/my-custom-path/" }); ``` Here, we will have: ```C++ sio::client h; h.connect("https://example.com/my-custom-path/"); h.socket("/my-namespace")->emit("hello"); ``` --- src/internal/sio_client_impl.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index b9de3449..1f91d5a9 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -238,7 +238,12 @@ namespace sio } else { ss<0){ ss<<"&sid="< Date: Wed, 24 Mar 2021 21:40:14 +0000 Subject: [PATCH 17/43] docs: fix title format (#297) --- examples/QT/README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/examples/QT/README.md b/examples/QT/README.md index 03ccb8ec..f39c4052 100644 --- a/examples/QT/README.md +++ b/examples/QT/README.md @@ -2,7 +2,7 @@ In this tutorial we’ll learn how to create a QT chat application that communicates with a [Socket.IO Node.JS chat server](https://github.com/Automattic/socket.io/tree/master/examples/chat). -###Introduction +### Introduction To follow along, start by cloning the repository: [socket.io-client-cpp](https://github.com/socketio/socket.io-client-cpp). Using: @@ -39,7 +39,7 @@ SioChatDemo |__mainwindow.ui ``` -###Import SioClient and config compile options. +### Import SioClient and config compile options. Let's copy the SioClient into the QT project as a subfolder `sioclient`. Edit `SioChatDemo.pro` to config paths and compile options, simply add: @@ -82,7 +82,7 @@ else:win32:CONFIG(debug, debug|release): LIBS += -L`our Win32 boost static lib f else:unix: LIBS += -L`our osx boost static lib folder` -lboost ``` -###Make up mainwindow ui. +### Make up mainwindow ui. Make up a simple ui by drag and drop widget from `Widget box` in left side. We finally end up with this: @@ -101,7 +101,7 @@ It contains: * a `QPushButton` at the bottomright for sending message, named `sendBtn` -###Add Slots in mainwindow +### Add Slots in mainwindow Slots need to be added in `mainwindow` class to handle UI events.They are * click login button @@ -122,7 +122,7 @@ public Q_SLOTS: void OnMessageReturn(); ``` -###Connect UI event signal and slots together +### Connect UI event signal and slots together Open `mainwindow.ui` in Design mode. switch to `signals/slots` mode by check `Menu->Edit->Edit Signals/Slots` By press left mouse on widget and drag on to the window (cursor will become a sign of electrical ground), to open the connection editor. @@ -135,7 +135,7 @@ We finally end up with this: ![QT signals&slots](https://cldup.com/Vsb-UXG3FC.jpg) -###Adding UI refresh Signals/Slots +### Adding UI refresh Signals/Slots `sio::client`'s callbacks are not in UI thread. However, UI is required to be updated by those callbacks, so we need some `Signal` for non-UI thread to "request" `Slots` functions been called in UI thread. Say if we want to signal `QListWidgetItem` being added, add: ```C++ @@ -160,7 +160,7 @@ Then connect them in `MainWindow` constructor. connect(this,SIGNAL(RequestAddListItem(QListWidgetItem*)),this,SLOT(AddListItem(QListWidgetItem*))); ``` -###Init sio::client in MainWindow +### Init sio::client in MainWindow For single window applications, simply let `MainWindow` class holding the `sio::client` object: declare a `unique_ptr` member of `sio::client` and Several event handling functions in `mainwindow.h` @@ -214,7 +214,7 @@ MainWindow::MainWindow(QWidget *parent) : } ``` -###Managing connection state +### Managing connection state We have several connection listeners for connection events. First we want to send login message once we're connected, get the default `socket` from `client` to do that. @@ -256,7 +256,7 @@ MainWindow::~MainWindow() } ``` -###Handle socket.io events +### Handle socket.io events We'll need to handle socket.io events in our functions bind to socket.io events. For example, we need to show received messages to the `listView` @@ -278,7 +278,7 @@ void MainWindow::OnNewMessage(std::string const& name,message::ptr const& data,b } ``` -###Sending chat message +### Sending chat message When `sendBtn` is clicked, we need to send the text in `messageEdit` to chatroom. Add code to `SendBtnClicked()`: @@ -301,7 +301,7 @@ void MainWindow::SendBtnClicked() } ``` -###Further reading +### Further reading You can run [Demo project](https://github.com/socketio/socket.io-client-cpp/tree/master/examples/QT/SioChatDemo) to have a closer look. Before running, please follow the [instructions](../../README.md#with_cmake) to make the sioclient library. From 0581aaba021066706da7ca637977553733f7d38e Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Wed, 24 Mar 2021 22:40:33 +0100 Subject: [PATCH 18/43] docs: update compatibility table for Socket.IO v4 The v4 contains only a few breaking changes at the API level on the server-side, so the current C++ client is compatible. Reference: https://socket.io/docs/v4/migrating-from-3-x-to-4-0/ --- README.md | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 46c9e5ed..5a68967f 100755 --- a/README.md +++ b/README.md @@ -8,10 +8,26 @@ By virtue of being written in C++, this client works in several different platfo ## Compatibility table -| C++ Client version | Socket.IO server version | -| ------------------- | ------------------------ | -| 2.x (`2.x` branch) | 1.x / 2.x | -| 3.x (master branch) | 3.x | + + + + + + + + + + + + + + + + + + + +
C++ Client versionSocket.IO server version
1.x / 2.x3.x / 4.x
2.x (2.x branch)YESYES, with allowEIO3: true
3.x (master branch)NOYES
## Features From e8ea70776dc0902725b38d1f988fbadc40474d14 Mon Sep 17 00:00:00 2001 From: Johny Qiu Date: Fri, 11 Jun 2021 17:15:24 +0800 Subject: [PATCH 19/43] feat: use TLSv2 when TLS is used (#310) --- src/internal/sio_client_impl.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 1f91d5a9..8bf90f97 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -599,10 +599,9 @@ namespace sio #if SIO_TLS client_impl::context_ptr client_impl::on_tls_init(connection_hdl conn) { - context_ptr ctx = context_ptr(new asio::ssl::context(asio::ssl::context::tlsv1)); + context_ptr ctx = context_ptr(new asio::ssl::context(asio::ssl::context::tlsv12)); asio::error_code ec; ctx->set_options(asio::ssl::context::default_workarounds | - asio::ssl::context::no_sslv2 | asio::ssl::context::single_dh_use,ec); if(ec) { From 3ff5fc8347f5fbadc49f756e36d454e7fcae90ff Mon Sep 17 00:00:00 2001 From: Desp4 Date: Sun, 1 Aug 2021 02:41:05 +0300 Subject: [PATCH 20/43] update non-cmake installation guide --- INSTALL.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index 49fc262d..f7495e9d 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -10,4 +10,5 @@ 1. Use `git clone --recurse-submodules https://github.com/socketio/socket.io-client-cpp.git` to clone your local repo. 2. Add `./lib/asio/asio/include`, `./lib/websocketpp` and `./lib/rapidjson/include` to headers search path. 3. Include all files under `./src` in your project, add `sio_client.cpp`,`sio_socket.cpp`,`internal/sio_client_impl.cpp`, `internal/sio_packet.cpp` to source list. -4. Include `sio_client.h` in your client code where you want to use it. +4. Add `BOOST_DATE_TIME_NO_LIB`, `BOOST_REGEX_NO_LIB`, `ASIO_STANDALONE`, `_WEBSOCKETPP_CPP11_STL_` and `_WEBSOCKETPP_CPP11_FUNCTIONAL_` to the preprocessor definitions +5. Include `sio_client.h` in your client code where you want to use it. From 82d39a90ef118500a0329d214eec331db983bd74 Mon Sep 17 00:00:00 2001 From: Chris Grahn Date: Thu, 2 Sep 2021 01:40:06 -0500 Subject: [PATCH 21/43] feat: support TLSv1.2 and newer (#321) --- src/internal/sio_client_impl.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 8bf90f97..53cfe539 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -599,10 +599,12 @@ namespace sio #if SIO_TLS client_impl::context_ptr client_impl::on_tls_init(connection_hdl conn) { - context_ptr ctx = context_ptr(new asio::ssl::context(asio::ssl::context::tlsv12)); + context_ptr ctx = context_ptr(new asio::ssl::context(asio::ssl::context::tls)); asio::error_code ec; ctx->set_options(asio::ssl::context::default_workarounds | - asio::ssl::context::single_dh_use,ec); + asio::ssl::context::no_tlsv1 | + asio::ssl::context::no_tlsv1_1 | + asio::ssl::context::single_dh_use,ec); if(ec) { cerr<<"Init tls failed,reason:"<< ec.message()< Date: Tue, 12 Oct 2021 10:24:29 +0200 Subject: [PATCH 22/43] chore(release): 3.1.0 --- CHANGELOG.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..286b43b1 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,25 @@ +# [3.1.0](https://github.com/socketio/socket.io-client-cpp/compare/3.0.0...3.1.0) (2021-10-12) + + +### Bug Fixes + +* lower the minimum CMake supported version ([b196fa7](https://github.com/socketio/socket.io-client-cpp/commit/b196fa7537cd3f7bed626ead873a7b71d1293c0d)) +* handle closing sockets upon on_fail events ([d1c73b7](https://github.com/socketio/socket.io-client-cpp/commit/d1c73b73a8f536da3d353eac2a560af9791b13e3)) +* resolve client_impl::ping LOG call syntax in debug builds ([e7de4eb](https://github.com/socketio/socket.io-client-cpp/commit/e7de4ebf64f4f49e18594a2c093c07beb963579a)) + + +### Features + +* allow resource path to be set in connection URI ([#134](https://github.com/socketio/socket.io-client-cpp/issues/134)) ([36a8cd4](https://github.com/socketio/socket.io-client-cpp/commit/36a8cd45272aa51f0f6ef27aa4744dbc6e8421f7)) +* add support for logging configuration ([1b42ce7](https://github.com/socketio/socket.io-client-cpp/commit/1b42ce738f4c3e260f79bcb143bfe6efcdce5709)) +* support TLSv1.2 and newer ([#321](https://github.com/socketio/socket.io-client-cpp/issues/321)) ([82d39a9](https://github.com/socketio/socket.io-client-cpp/commit/82d39a90ef118500a0329d214eec331db983bd74)) + + + +# [3.0.0](https://github.com/socketio/socket.io-client-cpp/compare/2.0.0...3.0.0) (2021-01-09) + + +### Features + +* add support for Socket.IO v3 ([ec4d540](https://github.com/socketio/socket.io-client-cpp/commit/ec4d540ad54593604ac2091e67ffc2a6d9a00db6)) + From 2573a120d90f083e485ade18adfd644617439584 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Tue, 12 Oct 2021 11:12:29 +0200 Subject: [PATCH 23/43] docs: add changelog for version 2.1.0 --- CHANGELOG.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 286b43b1..d1691679 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +# [2.1.0](https://github.com/socketio/socket.io-client-cpp/compare/2.0.0...2.1.0) (2021-10-12) + + +### Bug Fixes + +* fix ASIO_STANDALONE release build trying to use boost::random ([#301](https://github.com/socketio/socket.io-client-cpp/issues/301)) ([168ce9d](https://github.com/socketio/socket.io-client-cpp/commit/168ce9d10b4ac667c43fe16b4cf530f6a3749235)) +* fix LOG call syntax ([#301](https://github.com/socketio/socket.io-client-cpp/issues/301)) ([c09221f](https://github.com/socketio/socket.io-client-cpp/commit/c09221f357effe1a5a0fc0e7d7902eba1ab0484d)) + + +### Features + +* support TLSv1.2 and newer ([#321](https://github.com/socketio/socket.io-client-cpp/issues/321)) ([7c60ba9](https://github.com/socketio/socket.io-client-cpp/commit/7c60ba9d1e5e58de57f127025bcf69f4baecd2b4)) + + + # [3.1.0](https://github.com/socketio/socket.io-client-cpp/compare/3.0.0...3.1.0) (2021-10-12) From 94a59f02246db897ab6e4cb9d7b590c7cbb336b7 Mon Sep 17 00:00:00 2001 From: Berrae Meixsell Date: Fri, 12 Nov 2021 09:03:24 -0600 Subject: [PATCH 24/43] Update CMakeLists.txt Exposing include files for use in projects via FetchContent --- CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f0bd6957..314ac9d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,8 +32,9 @@ add_definitions( ) add_library(sioclient ${ALL_SRC}) -target_include_directories(sioclient PRIVATE +target_include_directories(sioclient PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src + PRIVATE ${CMAKE_CURRENT_LIST_DIR}/lib/websocketpp ${CMAKE_CURRENT_LIST_DIR}/lib/rapidjson/include ${CMAKE_CURRENT_LIST_DIR}/lib/asio/asio/include @@ -57,8 +58,9 @@ list(APPEND TARGET_LIBRARIES sioclient) find_package(OpenSSL) if(OPENSSL_FOUND) add_library(sioclient_tls ${ALL_SRC}) -target_include_directories(sioclient_tls PRIVATE +target_include_directories(sioclient_tls PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src + PRIVATE ${CMAKE_CURRENT_LIST_DIR}/lib/websocketpp ${CMAKE_CURRENT_LIST_DIR}/lib/rapidjson/include ${CMAKE_CURRENT_LIST_DIR}/lib/asio/asio/include From 2b1dda79cf5a9b714bc3e10caab8efe9b0864542 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Marc=C3=A8=20i=20Igual?= Date: Wed, 29 Sep 2021 18:00:39 +0200 Subject: [PATCH 25/43] chore: increase minimum CMake version (#328) Reference: https://hsf-training.github.io/hsf-training-cmake-webpage/07-commonproblems/index.html --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f0bd6957..907563ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8 FATAL_ERROR) +cmake_minimum_required(VERSION 3.4 FATAL_ERROR) PROJECT(sioclient) option(BUILD_SHARED_LIBS "Build the shared library" OFF) From 23f243ff555aa86193aa673d616ba6cca7899256 Mon Sep 17 00:00:00 2001 From: Gabriel Jablonski Date: Tue, 23 Nov 2021 19:44:34 -0300 Subject: [PATCH 26/43] feat: send auth object upon connecting (#335) Usage: ```c++ sio::client client; sio::message::ptr auth = sio::object_message::create(); auth->get_map()["token"] = sio::string_message::create("eyJhbGciOiJIUzI1NiIsInR..."); auth->get_map()["sessionId"] = sio::string_message::create("p0ZoB1FwH6"); client.connect(server_url, auth); ``` --- src/internal/sio_client_impl.cpp | 5 +++-- src/internal/sio_client_impl.h | 3 ++- src/sio_client.cpp | 22 +++++++++++++++++++--- src/sio_client.h | 7 +++++++ src/sio_socket.cpp | 14 ++++++++------ src/sio_socket.h | 2 +- 6 files changed, 40 insertions(+), 13 deletions(-) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 53cfe539..fa948f4c 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -70,7 +70,7 @@ namespace sio sync_close(); } - void client_impl::connect(const string& uri, const map& query, const map& headers) + void client_impl::connect(const string& uri, const map& query, const map& headers, const message::ptr& auth) { if(m_reconn_timer) { @@ -108,6 +108,7 @@ namespace sio m_query_string=move(query_str); m_http_headers = headers; + m_auth = auth; this->reset_states(); m_client.get_io_service().dispatch(std::bind(&client_impl::connect_impl,this,uri,m_query_string)); @@ -140,7 +141,7 @@ namespace sio } else { - pair p(aux,shared_ptr(new sio::socket(this,aux))); + pair p(aux,shared_ptr(new sio::socket(this,aux,m_auth))); return (m_sockets.insert(p).first)->second; } } diff --git a/src/internal/sio_client_impl.h b/src/internal/sio_client_impl.h index 34db1869..856622ab 100644 --- a/src/internal/sio_client_impl.h +++ b/src/internal/sio_client_impl.h @@ -104,7 +104,7 @@ namespace sio // Client Functions - such as send, etc. void connect(const std::string& uri, const std::map& queryString, - const std::map& httpExtraHeaders); + const std::map& httpExtraHeaders, const message::ptr& auth); sio::socket::ptr const& socket(const std::string& nsp); @@ -199,6 +199,7 @@ namespace sio std::string m_base_url; std::string m_query_string; std::map m_http_headers; + message::ptr m_auth; unsigned int m_ping_interval; unsigned int m_ping_timeout; diff --git a/src/sio_client.cpp b/src/sio_client.cpp index b475e6f7..95054780 100644 --- a/src/sio_client.cpp +++ b/src/sio_client.cpp @@ -69,18 +69,34 @@ namespace sio void client::connect(const std::string& uri) { - m_impl->connect(uri, {}, {}); + m_impl->connect(uri, {}, {}, {}); + } + + void client::connect(const std::string& uri, const message::ptr& auth) + { + m_impl->connect(uri, {}, {}, auth); } void client::connect(const std::string& uri, const std::map& query) { - m_impl->connect(uri, query, {}); + m_impl->connect(uri, query, {}, {}); + } + + void client::connect(const std::string& uri, const std::map& query, const message::ptr& auth) + { + m_impl->connect(uri, query, {}, auth); } void client::connect(const std::string& uri, const std::map& query, const std::map& http_extra_headers) { - m_impl->connect(uri, query, http_extra_headers); + m_impl->connect(uri, query, http_extra_headers, {}); + } + + void client::connect(const std::string& uri, const std::map& query, + const std::map& http_extra_headers, const message::ptr& auth) + { + m_impl->connect(uri, query, http_extra_headers, auth); } socket::ptr const& client::socket(const std::string& nsp) diff --git a/src/sio_client.h b/src/sio_client.h index c37882ab..7b6f1f89 100644 --- a/src/sio_client.h +++ b/src/sio_client.h @@ -56,11 +56,18 @@ namespace sio // Client Functions - such as send, etc. void connect(const std::string& uri); + void connect(const std::string& uri, const message::ptr& auth); + void connect(const std::string& uri, const std::map& query); + void connect(const std::string& uri, const std::map& query, const message::ptr& auth); + void connect(const std::string& uri, const std::map& query, const std::map& http_extra_headers); + void connect(const std::string& uri, const std::map& query, + const std::map& http_extra_headers, const message::ptr& auth); + void set_reconnect_attempts(int attempts); void set_reconnect_delay(unsigned millis); diff --git a/src/sio_socket.cpp b/src/sio_socket.cpp index e15ba83b..34be59bf 100644 --- a/src/sio_socket.cpp +++ b/src/sio_socket.cpp @@ -108,7 +108,7 @@ namespace sio { public: - impl(client_impl *,std::string const&); + impl(client_impl *, std::string const&, message::ptr const&); ~impl(); void on(std::string const& event_name,event_listener_aux const& func); @@ -173,6 +173,7 @@ namespace sio bool m_connected; std::string m_nsp; + message::ptr m_auth; std::map > m_acks; @@ -228,10 +229,11 @@ namespace sio m_error_listener = nullptr; } - socket::impl::impl(client_impl *client,std::string const& nsp): + socket::impl::impl(client_impl *client, std::string const& nsp, message::ptr const& auth): m_client(client), m_connected(false), - m_nsp(nsp) + m_nsp(nsp), + m_auth(auth) { NULL_GUARD(client); if(m_client->opened()) @@ -269,7 +271,7 @@ namespace sio void socket::impl::send_connect() { NULL_GUARD(m_client); - packet p(packet::type_connect,m_nsp); + packet p(packet::type_connect, m_nsp, m_auth); m_client->send(p); m_connection_timer.reset(new asio::steady_timer(m_client->get_io_service())); asio::error_code ec; @@ -523,8 +525,8 @@ namespace sio return socket::event_listener(); } - socket::socket(client_impl* client,std::string const& nsp): - m_impl(new impl(client,nsp)) + socket::socket(client_impl* client,std::string const& nsp,message::ptr const& auth): + m_impl(new impl(client,nsp,auth)) { } diff --git a/src/sio_socket.h b/src/sio_socket.h index 69ef1f47..bf760340 100644 --- a/src/sio_socket.h +++ b/src/sio_socket.h @@ -75,7 +75,7 @@ namespace sio std::string const& get_namespace() const; protected: - socket(client_impl*,std::string const&); + socket(client_impl*,std::string const&,message::ptr const&); void on_connected(); From 46597e393dab5ae2c2ec208ea6d2426bde1a4e1e Mon Sep 17 00:00:00 2001 From: Gabriel Jablonski Date: Tue, 23 Nov 2021 19:44:34 -0300 Subject: [PATCH 27/43] docs: add vcpkg installation instructions (#252) --- INSTALL.md | 14 ++++++++++++++ README.md | 1 + 2 files changed, 15 insertions(+) diff --git a/INSTALL.md b/INSTALL.md index 49fc262d..b70ef5cc 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -11,3 +11,17 @@ 2. Add `./lib/asio/asio/include`, `./lib/websocketpp` and `./lib/rapidjson/include` to headers search path. 3. Include all files under `./src` in your project, add `sio_client.cpp`,`sio_socket.cpp`,`internal/sio_client_impl.cpp`, `internal/sio_packet.cpp` to source list. 4. Include `sio_client.h` in your client code where you want to use it. + +### With vcpkg + +You can download and install the Socket.IO C++ client using the [vcpkg](https://github.com/Microsoft/vcpkg) dependency manager: + +```bash +git clone https://github.com/Microsoft/vcpkg.git +cd vcpkg +./bootstrap-vcpkg.sh +./vcpkg integrate install +vcpkg install socket-io-client +``` + +The Socket.IO client port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository. diff --git a/README.md b/README.md index 5a68967f..63a78041 100755 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ Note: Only the WebSocket transport is currently implemented (no fallback to HTTP * [With CMAKE](./INSTALL.md#with-cmake) * [Without CMAKE](./INSTALL.md#without-cmake) +* [With VCPKG](./INSTALL.md#with-vcpkg) * [iOS and OS X](./INSTALL_IOS.md) * Option 1: Cocoapods * Option 2: Create a static library From 9173946c965fc9fbf6013964b16b93fe044fb6c8 Mon Sep 17 00:00:00 2001 From: Federico Fuga Date: Tue, 8 Mar 2022 12:01:15 +0100 Subject: [PATCH 28/43] chore: Remove unnecessary check for CMAKE_BUILD_TYPE (#311) --- CMakeLists.txt | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 78293cd3..68b48b6d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,25 +1,19 @@ cmake_minimum_required(VERSION 3.4 FATAL_ERROR) -PROJECT(sioclient) +PROJECT(sioclient + VERSION 3.1.0 + ) option(BUILD_SHARED_LIBS "Build the shared library" OFF) -option(BUILD_UNIT_TESTS "Builds unit tests target" OFF) +option(BUILD_UNIT_TESTS "Builds unit tests target" OFF) set(MAJOR 1) set(MINOR 6) set(PATCH 0) -if(NOT CMAKE_BUILD_TYPE ) -MESSAGE(STATUS "not define build type, set to release" ) -set(CMAKE_BUILD_TYPE Release ) -elseif(NOT (${CMAKE_BUILD_TYPE} STREQUAL "Release" OR ${CMAKE_BUILD_TYPE} STREQUAL "Debug" )) -MESSAGE(SEND_ERROR "CMAKE_BUILD_TYPE must be either Release or Debug") -return() -endif() - aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src ALL_SRC) aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/internal ALL_SRC) -file(GLOB ALL_HEADERS ${CMAKE_CURRENT_LIST_DIR}/src/*.h ) -set(SIO_INCLUDEDIR ${CMAKE_CURRENT_LIST_DIR}) + +file(GLOB ALL_HEADERS ${CMAKE_CURRENT_LIST_DIR}/src/*.h) add_definitions( # These will force ASIO to compile without Boost @@ -32,10 +26,10 @@ add_definitions( ) add_library(sioclient ${ALL_SRC}) -target_include_directories(sioclient PUBLIC +target_include_directories(sioclient PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/lib/websocketpp + ${CMAKE_CURRENT_LIST_DIR}/lib/websocketpp ${CMAKE_CURRENT_LIST_DIR}/lib/rapidjson/include ${CMAKE_CURRENT_LIST_DIR}/lib/asio/asio/include ) @@ -61,7 +55,7 @@ add_library(sioclient_tls ${ALL_SRC}) target_include_directories(sioclient_tls PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/lib/websocketpp + ${CMAKE_CURRENT_LIST_DIR}/lib/websocketpp ${CMAKE_CURRENT_LIST_DIR}/lib/rapidjson/include ${CMAKE_CURRENT_LIST_DIR}/lib/asio/asio/include ${OPENSSL_INCLUDE_DIR} From 9ad238358b529ee53e11fc4e5d08792c11cb229c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Marc=C3=A8=20i=20Igual?= Date: Tue, 8 Mar 2022 12:12:46 +0100 Subject: [PATCH 29/43] chore: set default build type as Release --- CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 68b48b6d..9e420e38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,14 @@ set(MAJOR 1) set(MINOR 6) set(PATCH 0) +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(DEFAULT_BUILD_TYPE "Release") + message(STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.") + set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}" CACHE STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") +endif() + aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src ALL_SRC) aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/internal ALL_SRC) From 7496162fa3985b0cb7020af6ca22e74bd859d0ff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Mar 2022 09:38:48 +0100 Subject: [PATCH 30/43] deps: bump ws from 7.4.2 to 7.4.6 in /test/echo_server (#308) Bumps [ws](https://github.com/websockets/ws) from 7.4.2 to 7.4.6. - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/7.4.2...7.4.6) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- test/echo_server/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/echo_server/package-lock.json b/test/echo_server/package-lock.json index ed9e9d12..123cb616 100644 --- a/test/echo_server/package-lock.json +++ b/test/echo_server/package-lock.json @@ -157,9 +157,9 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "ws": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", - "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==" + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" } } } From c733c3e165cc0ff64a31cd5c3990638a954bfdc9 Mon Sep 17 00:00:00 2001 From: jianjunz Date: Wed, 9 Mar 2022 22:00:29 +0800 Subject: [PATCH 31/43] docs: remove Cocoapods from iOS installation guide. (#78) As mentioned in #67, Cocoapods is not supported at this time. --- INSTALL_IOS.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/INSTALL_IOS.md b/INSTALL_IOS.md index 881b2085..e154cf85 100644 --- a/INSTALL_IOS.md +++ b/INSTALL_IOS.md @@ -1,12 +1,6 @@ ## iOS -### Option 1: Cocoapods - -``` -pod 'SocketIO-Client-CPP' -``` - -### Option 2: Create a static library +### Option 1: Create a static library 1. Create a static library 1. Copy the header files into xcode @@ -26,7 +20,7 @@ libtool -static -o libUniversalDebug.a Debug-iphoneos/libsioclient.a Debug-iphon ``` -### Option 3: Manual integration +### Option 2: Manual integration Use this [shell](https://gist.github.com/melode11/a90114a2abf009ca22ea) to download and build boost completely automattically. It installs boost to `/prefix`. From 5a0c1ececdf249d4ae21886d2f918f82235021ad Mon Sep 17 00:00:00 2001 From: Tor Morten Finnesand Date: Wed, 9 Mar 2022 16:02:20 +0100 Subject: [PATCH 32/43] core: re-enable ping timeout behaviour for 3x branch (#351) Heartbeat mechanism was not properly working as intended. For more info see: https://socket.io/docs/v4/how-it-works/#disconnection-detection --- src/internal/sio_client_impl.cpp | 55 +++++++++++--------------------- src/internal/sio_client_impl.h | 4 ++- 2 files changed, 22 insertions(+), 37 deletions(-) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index fa948f4c..52540208 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -303,37 +303,14 @@ namespace sio } } - void client_impl::ping(const asio::error_code& ec) - { - if(ec || m_con.expired()) - { - if (ec != asio::error::operation_aborted) - LOG("ping exit,con is expired?"< payload) - { - lib::error_code ec; - this->m_client.send(this->m_con, *payload, frame::opcode::text, ec); - }); - if(!m_ping_timeout_timer) - { - m_ping_timeout_timer.reset(new asio::steady_timer(m_client.get_io_service())); - std::error_code timeout_ec; - m_ping_timeout_timer->expires_from_now(milliseconds(m_ping_timeout), timeout_ec); - m_ping_timeout_timer->async_wait(std::bind(&client_impl::timeout_pong, this, std::placeholders::_1)); - } - } - - void client_impl::timeout_pong(const asio::error_code &ec) + void client_impl::timeout_ping(const asio::error_code &ec) { if(ec) { return; } - LOG("Pong timeout"<expires_from_now(milliseconds(m_ping_timeout),ec); - m_ping_timeout_timer->async_wait(std::bind(&client_impl::timeout_pong, this, std::placeholders::_1)); - } // Parse the incoming message according to socket.IO rules m_packet_mgr.put_payload(msg->get_payload()); } @@ -525,6 +497,9 @@ namespace sio m_ping_timeout = 60000; } + // Start ping timeout + update_ping_timeout_timer(); + return; } failed: @@ -534,17 +509,15 @@ namespace sio void client_impl::on_ping() { + // Reply with pong packet. packet p(packet::frame_pong); m_packet_mgr.encode(p, [&](bool /*isBin*/,shared_ptr payload) { this->m_client.send(this->m_con, *payload, frame::opcode::text); }); - if(m_ping_timeout_timer) - { - m_ping_timeout_timer->cancel(); - m_ping_timeout_timer.reset(); - } + // Reset the ping timeout. + update_ping_timeout_timer(); } void client_impl::on_decode(packet const& p) @@ -589,6 +562,16 @@ namespace sio m_ping_timeout_timer.reset(); } } + + void client_impl::update_ping_timeout_timer() { + if (!m_ping_timeout_timer) { + m_ping_timeout_timer = std::unique_ptr(new asio::steady_timer(get_io_service())); + } + + asio::error_code ec; + m_ping_timeout_timer->expires_from_now(milliseconds(m_ping_interval + m_ping_timeout), ec); + m_ping_timeout_timer->async_wait(std::bind(&client_impl::timeout_ping, this, std::placeholders::_1)); + } void client_impl::reset_states() { diff --git a/src/internal/sio_client_impl.h b/src/internal/sio_client_impl.h index 856622ab..bbc5ae6a 100644 --- a/src/internal/sio_client_impl.h +++ b/src/internal/sio_client_impl.h @@ -151,7 +151,7 @@ namespace sio void ping(const asio::error_code& ec); - void timeout_pong(const asio::error_code& ec); + void timeout_ping(const asio::error_code& ec); void timeout_reconnect(asio::error_code const& ec); @@ -181,6 +181,8 @@ namespace sio void reset_states(); void clear_timers(); + + void update_ping_timeout_timer(); #if SIO_TLS typedef websocketpp::lib::shared_ptr context_ptr; From bacd9172e78b2b68ec29bdde0b3bed56238f84a9 Mon Sep 17 00:00:00 2001 From: Patti Vacek Date: Tue, 29 Mar 2022 10:00:34 +0200 Subject: [PATCH 33/43] core: abort retrying when closing down. (#312) Signed-off-by: Patti Vacek --- src/internal/sio_client_impl.cpp | 7 +++++-- src/internal/sio_client_impl.h | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 52540208..6246a95a 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -111,6 +111,7 @@ namespace sio m_auth = auth; this->reset_states(); + m_abort_retries = false; m_client.get_io_service().dispatch(std::bind(&client_impl::connect_impl,this,uri,m_query_string)); m_network_thread.reset(new thread(std::bind(&client_impl::run_loop,this)));//uri lifecycle? @@ -149,6 +150,7 @@ namespace sio void client_impl::close() { m_con_state = con_closing; + m_abort_retries = true; this->sockets_invoke_void(&sio::socket::close); m_client.get_io_service().dispatch(std::bind(&client_impl::close_impl, this,close::status::normal,"End by user")); } @@ -156,6 +158,7 @@ namespace sio void client_impl::sync_close() { m_con_state = con_closing; + m_abort_retries = true; this->sockets_invoke_void(&sio::socket::close); m_client.get_io_service().dispatch(std::bind(&client_impl::close_impl, this,close::status::normal,"End by user")); if(m_network_thread) @@ -375,7 +378,7 @@ namespace sio m_con_state = con_closed; this->sockets_invoke_void(&sio::socket::on_disconnect); LOG("Connection failed." << endl); - if(m_reconn_madenext_delay(); @@ -439,7 +442,7 @@ namespace sio else { this->sockets_invoke_void(&sio::socket::on_disconnect); - if(m_reconn_madenext_delay(); diff --git a/src/internal/sio_client_impl.h b/src/internal/sio_client_impl.h index bbc5ae6a..8e35887a 100644 --- a/src/internal/sio_client_impl.h +++ b/src/internal/sio_client_impl.h @@ -38,6 +38,7 @@ typedef websocketpp::config::asio_client client_config; #include #include +#include #include #include #include @@ -236,7 +237,9 @@ namespace sio unsigned m_reconn_attempts; unsigned m_reconn_made; - + + std::atomic m_abort_retries { false }; + friend class sio::client; friend class sio::socket; }; From 9bca702b924d227422a18e16def5835edb586fce Mon Sep 17 00:00:00 2001 From: Abraham Hernandez Date: Tue, 26 Apr 2022 04:18:53 -0400 Subject: [PATCH 34/43] build: removing .DS_Store (#362) --- .gitignore | 1 + src/internal/.DS_Store | Bin 6148 -> 0 bytes 2 files changed, 1 insertion(+) delete mode 100644 src/internal/.DS_Store diff --git a/.gitignore b/.gitignore index 1b5b52a4..ec9c2f5b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ Makefile cmake_install.cmake install_manifest.txt libsioclient.a +.DS_Store \ No newline at end of file diff --git a/src/internal/.DS_Store b/src/internal/.DS_Store deleted file mode 100644 index 67805212cc42671983e02e32f95b8dd02f6868e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!AiqG5PefCv?x;X;xR{01^*zFDD-MRpxRncj3#Kk=QI2$Kfu4yH@ibBzc z*$pv9h8#0$bAIJwUX*jL>R;oM`t})w7I1s8>Gp4^nH7z<> z&epOVf1Bm5mEoPW*E1Y787kbc<^zApYI}9LYQ-Mzh;7xBk5(L~F3x~6;0*k62H3Mz z1_u#+bOxLOXP{v~-wz2@F*U3shF1rNa0MXt=?+3$KNvM8F-#5Xh+Lsa3?;@;u`7ne zaQYM5mm1a)V>rYvA7YioZYUC}Gk+4cL(+&oIs?wYCIfqMI@11svHSkN8RRo(z!~^g z3`jrAvk4!`dTZz5wAUuoYpROwt0OicG(s!pUTwvv)FAXHY7kSyIwCz3{}2c?_}~ou GC<9+w(OU@s From 973baa37491cdeee21243780924f04750aa8a2f4 Mon Sep 17 00:00:00 2001 From: Ian Reinhart Geiser Date: Mon, 1 Aug 2022 05:37:06 -0400 Subject: [PATCH 35/43] build: Support vcpkg - Update cmake for system install (#367) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update cmake for system install * remove tooling hack * CMake 3.4 is required so this is not needed Co-authored-by: Joan Marcè i Igual * Use submodules on ci * Update .github/workflows/ci.yml * Update CMakeLists.txt Co-authored-by: Joan Marcè i Igual --- .github/workflows/ci.yml | 2 +- CMakeLists.txt | 159 +++++++++++++++++++++++++++------------ sioclientConfig.cmake.in | 7 ++ 3 files changed, 120 insertions(+), 48 deletions(-) create mode 100644 sioclientConfig.cmake.in diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c8e65c60..7001ae61 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,4 +23,4 @@ jobs: submodule_update: ON run_tests: ON unit_test_build: -DBUILD_UNIT_TESTS=ON - cmake_args: -DCMAKE_CXX_FLAGS=-std=c++11 + cmake_args: -DCMAKE_CXX_FLAGS=-std=c++11;-DUSE_SUBMODULES=ON diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e420e38..d1a045ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,10 +1,12 @@ cmake_minimum_required(VERSION 3.4 FATAL_ERROR) + PROJECT(sioclient - VERSION 3.1.0 - ) + VERSION 3.1.0 +) option(BUILD_SHARED_LIBS "Build the shared library" OFF) option(BUILD_UNIT_TESTS "Builds unit tests target" OFF) +option(USE_SUBMODULES "Use source in local submodules instead of system libraries" OFF) set(MAJOR 1) set(MINOR 6) @@ -14,6 +16,7 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(DEFAULT_BUILD_TYPE "Release") message(STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.") set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}" CACHE STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() @@ -24,82 +27,144 @@ aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/internal ALL_SRC) file(GLOB ALL_HEADERS ${CMAKE_CURRENT_LIST_DIR}/src/*.h) add_definitions( + # These will force ASIO to compile without Boost -DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB -DASIO_STANDALONE - # These will force WebsocketPP to compile with C++11 + + # These will force sioclient to compile with C++11 -D_WEBSOCKETPP_CPP11_STL_ -D_WEBSOCKETPP_CPP11_FUNCTIONAL_ + -D_WEBSOCKETPP_CPP11_TYPE_TRAITS_ + -D_WEBSOCKETPP_CPP11_CHRONO_ ) add_library(sioclient ${ALL_SRC}) + +if(USE_SUBMODULES) + set(MODULE_INCLUDE_DIRS + ${CMAKE_CURRENT_LIST_DIR}/lib/websocketpp + ${CMAKE_CURRENT_LIST_DIR}/lib/rapidjson/include + ${CMAKE_CURRENT_LIST_DIR}/lib/asio/asio/include + ) +else() + find_package(websocketpp CONFIG REQUIRED) + find_package(asio CONFIG REQUIRED) + find_package(RapidJSON CONFIG REQUIRED) + target_link_libraries(sioclient PRIVATE websocketpp::websocketpp asio asio::asio rapidjson) +endif() + target_include_directories(sioclient PUBLIC - ${CMAKE_CURRENT_LIST_DIR}/src + $ + $ PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/lib/websocketpp - ${CMAKE_CURRENT_LIST_DIR}/lib/rapidjson/include - ${CMAKE_CURRENT_LIST_DIR}/lib/asio/asio/include + ${MODULE_INCLUDE_DIRS} ) -if (CMAKE_VERSION VERSION_GREATER "3.1") -set_property(TARGET sioclient PROPERTY CXX_STANDARD 11) -set_property(TARGET sioclient PROPERTY CXX_STANDARD_REQUIRED ON) +if(CMAKE_VERSION VERSION_GREATER "3.1") + set_property(TARGET sioclient PROPERTY CXX_STANDARD 11) + set_property(TARGET sioclient PROPERTY CXX_STANDARD_REQUIRED ON) else() -set_property(TARGET sioclient APPEND_STRING PROPERTY COMPILE_FLAGS "-std=c++11") + set_property(TARGET sioclient APPEND_STRING PROPERTY COMPILE_FLAGS "-std=c++11") endif() + if(BUILD_SHARED_LIBS) -set_target_properties(sioclient - PROPERTIES - SOVERSION ${MAJOR} - VERSION ${MAJOR}.${MINOR}.${PATCH} - ) + set_target_properties(sioclient + PROPERTIES + SOVERSION ${MAJOR} + VERSION ${MAJOR}.${MINOR}.${PATCH} + ) endif() + list(APPEND TARGET_LIBRARIES sioclient) find_package(OpenSSL) + if(OPENSSL_FOUND) -add_library(sioclient_tls ${ALL_SRC}) -target_include_directories(sioclient_tls PUBLIC - ${CMAKE_CURRENT_LIST_DIR}/src - PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/lib/websocketpp - ${CMAKE_CURRENT_LIST_DIR}/lib/rapidjson/include - ${CMAKE_CURRENT_LIST_DIR}/lib/asio/asio/include - ${OPENSSL_INCLUDE_DIR} -) + add_library(sioclient_tls ${ALL_SRC}) + target_include_directories(sioclient_tls PUBLIC + $ + $ + PRIVATE + ${MODULE_INCLUDE_DIRS} + ${OPENSSL_INCLUDE_DIR} + ) -if (CMAKE_VERSION VERSION_GREATER "3.1") -set_property(TARGET sioclient_tls PROPERTY CXX_STANDARD 11) -set_property(TARGET sioclient_tls PROPERTY CXX_STANDARD_REQUIRED ON) -target_link_libraries(sioclient_tls PRIVATE ${OPENSSL_LIBRARIES} ) -else() -set_property(TARGET sioclient_tls APPEND_STRING PROPERTY COMPILE_FLAGS "-std=c++11") -endif() -target_compile_definitions(sioclient_tls PRIVATE -DSIO_TLS) -if(BUILD_SHARED_LIBS) -set_target_properties(sioclient_tls - PROPERTIES - SOVERSION ${MAJOR} - VERSION ${MAJOR}.${MINOR}.${PATCH} - ) -endif() -list(APPEND TARGET_LIBRARIES sioclient_tls) + set_property(TARGET sioclient_tls PROPERTY CXX_STANDARD 11) + set_property(TARGET sioclient_tls PROPERTY CXX_STANDARD_REQUIRED ON) + + target_link_libraries(sioclient_tls PRIVATE OpenSSL::SSL OpenSSL::Crypto) + if (NOT USE_SUBMODULES) + target_link_libraries(sioclient_tls PRIVATE websocketpp::websocketpp asio asio::asio rapidjson) + endif() + target_compile_definitions(sioclient_tls PRIVATE -DSIO_TLS) + + if(BUILD_SHARED_LIBS) + set_target_properties(sioclient_tls + PROPERTIES + SOVERSION ${MAJOR} + VERSION ${MAJOR}.${MINOR}.${PATCH} + ) + endif() + + list(APPEND TARGET_LIBRARIES sioclient_tls) endif() +export(PACKAGE sioclient) + include(GNUInstallDirs) -install(FILES ${ALL_HEADERS} +install(FILES ${ALL_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) -install(TARGETS ${TARGET_LIBRARIES} - DESTINATION ${CMAKE_INSTALL_LIBDIR} +install(TARGETS ${TARGET_LIBRARIES} EXPORT sioclientTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +# === generate a CMake Config File === +include(CMakePackageConfigHelpers) +set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/sioclient) +string(REGEX REPLACE "([^;]+)" "find_dependency(\\1)" _find_dependency_calls "${_package_dependencies}") +string(REPLACE ";" "\n" _find_dependency_calls "${_find_dependency_calls}") + +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/sioclient/sioclientConfigVersion.cmake" + VERSION ${sioclient_VERSION} + COMPATIBILITY AnyNewerVersion +) + +export(EXPORT sioclientTargets + FILE "${CMAKE_CURRENT_BINARY_DIR}/sioclient/sioclientTargets.cmake" + NAMESPACE sioclient:: +) + +configure_package_config_file(sioclientConfig.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/sioclient/sioclientConfig.cmake" + INSTALL_DESTINATION "${ConfigPackageLocation}" +) + +install(EXPORT sioclientTargets + NAMESPACE + sioclient:: + DESTINATION + ${ConfigPackageLocation} +) +install( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/sioclient/sioclientConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/sioclient/sioclientConfigVersion.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/sioclient/sioclientConfigTargets.cmake" + DESTINATION + ${ConfigPackageLocation} ) if(BUILD_UNIT_TESTS) -message(STATUS "Building with unit test support.") -enable_testing() -add_subdirectory(test) + message(STATUS "Building with unit test support.") + enable_testing() + add_subdirectory(test) endif() diff --git a/sioclientConfig.cmake.in b/sioclientConfig.cmake.in new file mode 100644 index 00000000..a28fad84 --- /dev/null +++ b/sioclientConfig.cmake.in @@ -0,0 +1,7 @@ + +@PACKAGE_INIT@ + +include(CMakeFindDependencyMacro) +@_find_dependency_calls@ + +include("${CMAKE_CURRENT_LIST_DIR}/sioclientTargets.cmake") \ No newline at end of file From dbb4547d3160368feaaf55c3338ad085a8f968b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Marc=C3=A8=20i=20Igual?= Date: Thu, 4 Aug 2022 13:29:15 +0200 Subject: [PATCH 36/43] build: fix installation and change build default flags (#372) * Change default submodules and fix install issue The wrong target was used for installation of targets * Disable flag as we changed the default --- .github/workflows/ci.yml | 2 +- CMakeLists.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7001ae61..c8e65c60 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,4 +23,4 @@ jobs: submodule_update: ON run_tests: ON unit_test_build: -DBUILD_UNIT_TESTS=ON - cmake_args: -DCMAKE_CXX_FLAGS=-std=c++11;-DUSE_SUBMODULES=ON + cmake_args: -DCMAKE_CXX_FLAGS=-std=c++11 diff --git a/CMakeLists.txt b/CMakeLists.txt index d1a045ab..7a7592b5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ PROJECT(sioclient option(BUILD_SHARED_LIBS "Build the shared library" OFF) option(BUILD_UNIT_TESTS "Builds unit tests target" OFF) -option(USE_SUBMODULES "Use source in local submodules instead of system libraries" OFF) +option(USE_SUBMODULES "Use source in local submodules instead of system libraries" ON) set(MAJOR 1) set(MINOR 6) @@ -158,7 +158,7 @@ install( FILES "${CMAKE_CURRENT_BINARY_DIR}/sioclient/sioclientConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/sioclient/sioclientConfigVersion.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/sioclient/sioclientConfigTargets.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/sioclient/sioclientTargets.cmake" DESTINATION ${ConfigPackageLocation} ) From 201d99d9845cb4a782cbb111562f2fec35ffc976 Mon Sep 17 00:00:00 2001 From: zeze <33378686+zeze-zeze@users.noreply.github.com> Date: Fri, 30 Sep 2022 16:36:52 +0800 Subject: [PATCH 37/43] feat: basic auth proxy (#369) --- src/internal/sio_client_impl.cpp | 24 ++++++++++++++++++++++++ src/internal/sio_client_impl.h | 5 +++++ src/sio_client.cpp | 5 +++++ src/sio_client.h | 2 ++ 4 files changed, 36 insertions(+) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 6246a95a..3cd98da8 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -69,6 +69,13 @@ namespace sio this->sockets_invoke_void(&sio::socket::on_close); sync_close(); } + + void client_impl::set_proxy_basic_auth(const std::string& uri, const std::string& username, const std::string& password) + { + m_proxy_base_url = uri; + m_proxy_basic_username = username; + m_proxy_basic_password = password; + } void client_impl::connect(const string& uri, const map& query, const map& headers, const message::ptr& auth) { @@ -263,6 +270,23 @@ namespace sio for( auto&& header: m_http_headers ) { con->replace_header(header.first, header.second); } + + if (!m_proxy_base_url.empty()) { + con->set_proxy(m_proxy_base_url, ec); + if (ec) { + m_client.get_alog().write(websocketpp::log::alevel::app, + "Set Proxy Error: " + ec.message()); + break; + } + if (!m_proxy_basic_username.empty()) { + con->set_proxy_basic_auth(m_proxy_basic_username, m_proxy_basic_password, ec); + if (ec) { + m_client.get_alog().write(websocketpp::log::alevel::app, + "Set Proxy Basic Auth Error: " + ec.message()); + break; + } + } + } m_client.connect(con); return; diff --git a/src/internal/sio_client_impl.h b/src/internal/sio_client_impl.h index 8e35887a..3cd82a0d 100644 --- a/src/internal/sio_client_impl.h +++ b/src/internal/sio_client_impl.h @@ -129,6 +129,8 @@ namespace sio void set_logs_quiet(); void set_logs_verbose(); + + void set_proxy_basic_auth(const std::string& uri, const std::string& username, const std::string& password); protected: void send(packet& p); @@ -203,6 +205,9 @@ namespace sio std::string m_query_string; std::map m_http_headers; message::ptr m_auth; + std::string m_proxy_base_url; + std::string m_proxy_basic_username; + std::string m_proxy_basic_password; unsigned int m_ping_interval; unsigned int m_ping_timeout; diff --git a/src/sio_client.cpp b/src/sio_client.cpp index 95054780..b3fa7765 100644 --- a/src/sio_client.cpp +++ b/src/sio_client.cpp @@ -66,6 +66,11 @@ namespace sio { m_impl->clear_socket_listeners(); } + + void client::set_proxy_basic_auth(const std::string& uri, const std::string& username, const std::string& password) + { + m_impl->set_proxy_basic_auth(uri, username, password); + } void client::connect(const std::string& uri) { diff --git a/src/sio_client.h b/src/sio_client.h index 7b6f1f89..821164aa 100644 --- a/src/sio_client.h +++ b/src/sio_client.h @@ -87,6 +87,8 @@ namespace sio void sync_close(); + void set_proxy_basic_auth(const std::string& uri, const std::string& username, const std::string& password); + bool opened() const; std::string const& get_sessionid() const; From 3e01111ddf9778a162c4c4bb91f795d2dd59f065 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Nov 2022 13:48:04 +0100 Subject: [PATCH 38/43] build(deps): bump socket.io-parser in /test/echo_server (#377) Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.0.3 to 4.0.5. - [Release notes](https://github.com/socketio/socket.io-parser/releases) - [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md) - [Commits](https://github.com/socketio/socket.io-parser/compare/4.0.3...4.0.5) --- updated-dependencies: - dependency-name: socket.io-parser dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- test/echo_server/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/echo_server/package-lock.json b/test/echo_server/package-lock.json index 123cb616..15ee0cb0 100644 --- a/test/echo_server/package-lock.json +++ b/test/echo_server/package-lock.json @@ -142,9 +142,9 @@ "integrity": "sha512-2wo4EXgxOGSFueqvHAdnmi5JLZzWqMArjuP4nqC26AtLh5PoCPsaRbRdah2xhcwTAMooZfjYiNVNkkmmSMaxOQ==" }, "socket.io-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.3.tgz", - "integrity": "sha512-m4ybFiP4UYVORRt7jcdqf8UWx+ywVdAqqsJyruXxAdD3Sv6MDemijWij34mOWdMJ55bEdIb9jACBhxUgNK6sxw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", + "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", "requires": { "@types/component-emitter": "^1.2.10", "component-emitter": "~1.3.0", From b10474e3eaa6b27e75dbc1382ac9af74fdf3fa85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Marc=C3=A8=20i=20Igual?= Date: Mon, 13 Feb 2023 17:38:21 +0100 Subject: [PATCH 39/43] docs: Remove Boost from Qt example (#387) --- examples/QT/README.md | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/examples/QT/README.md b/examples/QT/README.md index f39c4052..a26610d1 100644 --- a/examples/QT/README.md +++ b/examples/QT/README.md @@ -65,23 +65,6 @@ CONFIG+=c++11 `no_keywords` is for preventing qmake treat some function's name `emit` as the keyword of signal-slot mechanism. `c++11` ask for C++11 support. -##Import boost -Suppose we now have our boost `headers` and a fat boost `static lib` named `libboost.a`(non-win32) or `boost.lib`(win32) ready. - -To import them we need to edit `SioChatDemo.pro` again,add header include: - -```bash -INCLUDEPATH += `our boost headers folder` -``` - -also linker options: - -```bash -win32:CONFIG(release, debug|release): LIBS += -L`our Win32 boost static lib folder` -lboost -else:win32:CONFIG(debug, debug|release): LIBS += -L`our Win32 boost static lib folder` -lboost -else:unix: LIBS += -L`our osx boost static lib folder` -lboost -``` - ### Make up mainwindow ui. Make up a simple ui by drag and drop widget from `Widget box` in left side. From 9066882fa164c27591aac0d5016a8ee0c2c073c5 Mon Sep 17 00:00:00 2001 From: Michael Scofield Date: Mon, 26 Jun 2023 12:28:22 +0200 Subject: [PATCH 40/43] feat: allow for custom io_service (#390) (#391) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: allow for custom io_service (#390) * Keep default constructor --------- Co-authored-by: Joan Marcè i Igual --- src/internal/sio_client_impl.cpp | 8 ++++++-- src/internal/sio_client_impl.h | 2 +- src/sio_client.cpp | 6 ++++-- src/sio_client.h | 9 +++++++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 3cd98da8..91dad3d6 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -31,7 +31,7 @@ using namespace std; namespace sio { /*************************public:*************************/ - client_impl::client_impl() : + client_impl::client_impl(client_options const& options) : m_ping_interval(0), m_ping_timeout(0), m_network_thread(), @@ -47,7 +47,11 @@ namespace sio m_client.set_access_channels(alevel::connect|alevel::disconnect|alevel::app); #endif // Initialize the Asio transport policy - m_client.init_asio(); + if (options.io_context != nullptr) { + m_client.init_asio(options.io_context); + } else { + m_client.init_asio(); + } // Bind the clients we are using using std::placeholders::_1; diff --git a/src/internal/sio_client_impl.h b/src/internal/sio_client_impl.h index 3cd82a0d..f4f02aa5 100644 --- a/src/internal/sio_client_impl.h +++ b/src/internal/sio_client_impl.h @@ -62,7 +62,7 @@ namespace sio con_closed }; - client_impl(); + client_impl(client_options const& options); ~client_impl(); diff --git a/src/sio_client.cpp b/src/sio_client.cpp index b3fa7765..1cdb7f7c 100644 --- a/src/sio_client.cpp +++ b/src/sio_client.cpp @@ -12,8 +12,10 @@ using std::stringstream; namespace sio { - client::client(): - m_impl(new client_impl()) + client::client() : m_impl(new client_impl({})) {} + + client::client(client_options const& options): + m_impl(new client_impl(options)) { } diff --git a/src/sio_client.h b/src/sio_client.h index 821164aa..a8cbb9fe 100644 --- a/src/sio_client.h +++ b/src/sio_client.h @@ -11,9 +11,17 @@ #include "sio_message.h" #include "sio_socket.h" +namespace asio { + class io_context; +} + namespace sio { class client_impl; + + struct client_options { + asio::io_context* io_context = nullptr; + }; class client { public: @@ -32,6 +40,7 @@ namespace sio typedef std::function socket_listener; client(); + client(client_options const& options); ~client(); //set listeners and event bindings. From 9d55f6e10ef180e9473142027d3fac4e93418c24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Marc=C3=A8=20i=20Igual?= Date: Mon, 26 Jun 2023 15:55:19 +0200 Subject: [PATCH 41/43] build(deps): update catch2 from 1.10.0 to v3.3.2 (#400) * build(deps): update catch2 from 1.10.0 to v3.3.2 * Use new catch version * Fix test * Remove catch submodule --- .gitmodules | 3 --- CMakeLists.txt | 51 +++++++++++++++++++++++---------------------- lib/catch | 1 - test/CMakeLists.txt | 15 ++++++++----- test/sio_test.cpp | 24 ++++++++++----------- 5 files changed, 48 insertions(+), 46 deletions(-) delete mode 160000 lib/catch diff --git a/.gitmodules b/.gitmodules index 42509be9..6c672230 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,6 +7,3 @@ [submodule "lib/asio"] path = lib/asio url = https://github.com/chriskohlhoff/asio.git -[submodule "lib/catch"] - path = lib/catch - url = https://github.com/philsquared/Catch.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a7592b5..9686332f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,10 +8,6 @@ option(BUILD_SHARED_LIBS "Build the shared library" OFF) option(BUILD_UNIT_TESTS "Builds unit tests target" OFF) option(USE_SUBMODULES "Use source in local submodules instead of system libraries" ON) -set(MAJOR 1) -set(MINOR 6) -set(PATCH 0) - if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(DEFAULT_BUILD_TYPE "Release") message(STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.") @@ -21,13 +17,16 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() -aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src ALL_SRC) -aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/internal ALL_SRC) - -file(GLOB ALL_HEADERS ${CMAKE_CURRENT_LIST_DIR}/src/*.h) +# Only do these if this is the main project, and not if it is included through add_subdirectory +if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) + # Testing only available if this is the main app + # Note this needs to be done in the main CMakeLists + # since it calls enable_testing, which must be in the + # main CMakeLists. + include(CTest) +endif() add_definitions( - # These will force ASIO to compile without Boost -DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB @@ -40,6 +39,12 @@ add_definitions( -D_WEBSOCKETPP_CPP11_CHRONO_ ) +set(ALL_SRC + "src/sio_client.cpp" + "src/sio_socket.cpp" + "src/internal/sio_client_impl.cpp" + "src/internal/sio_packet.cpp" +) add_library(sioclient ${ALL_SRC}) if(USE_SUBMODULES) @@ -55,25 +60,22 @@ else() target_link_libraries(sioclient PRIVATE websocketpp::websocketpp asio asio::asio rapidjson) endif() -target_include_directories(sioclient PUBLIC - $ +target_include_directories(sioclient + PUBLIC + $ $ PRIVATE ${MODULE_INCLUDE_DIRS} ) -if(CMAKE_VERSION VERSION_GREATER "3.1") - set_property(TARGET sioclient PROPERTY CXX_STANDARD 11) - set_property(TARGET sioclient PROPERTY CXX_STANDARD_REQUIRED ON) -else() - set_property(TARGET sioclient APPEND_STRING PROPERTY COMPILE_FLAGS "-std=c++11") -endif() +set_property(TARGET sioclient PROPERTY CXX_STANDARD 11) +set_property(TARGET sioclient PROPERTY CXX_STANDARD_REQUIRED ON) if(BUILD_SHARED_LIBS) set_target_properties(sioclient PROPERTIES - SOVERSION ${MAJOR} - VERSION ${MAJOR}.${MINOR}.${PATCH} + SOVERSION ${PROJECT_VERSION_MAJOR} + VERSION ${PROJECT_VERSION} ) endif() @@ -84,7 +86,7 @@ find_package(OpenSSL) if(OPENSSL_FOUND) add_library(sioclient_tls ${ALL_SRC}) target_include_directories(sioclient_tls PUBLIC - $ + $ $ PRIVATE ${MODULE_INCLUDE_DIRS} @@ -104,8 +106,8 @@ if(OPENSSL_FOUND) if(BUILD_SHARED_LIBS) set_target_properties(sioclient_tls PROPERTIES - SOVERSION ${MAJOR} - VERSION ${MAJOR}.${MINOR}.${PATCH} + SOVERSION ${PROJECT_VERSION_MAJOR} + VERSION ${PROJECT_VERSION} ) endif() @@ -116,6 +118,7 @@ export(PACKAGE sioclient) include(GNUInstallDirs) +file(GLOB ALL_HEADERS ${CMAKE_CURRENT_LIST_DIR}/src/*.h) install(FILES ${ALL_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) @@ -163,8 +166,6 @@ install( ${ConfigPackageLocation} ) -if(BUILD_UNIT_TESTS) - message(STATUS "Building with unit test support.") - enable_testing() +if((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_TESTING) OR BUILD_UNIT_TESTS) add_subdirectory(test) endif() diff --git a/lib/catch b/lib/catch deleted file mode 160000 index 9c07718b..00000000 --- a/lib/catch +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9c07718b5f779bc1405f98ca6b5b693026f6eac7 diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 5da7085d..78e5d24e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,9 +1,14 @@ +include(FetchContent) + +FetchContent_Declare( + Catch2 + GIT_REPOSITORY https://github.com/catchorg/Catch2.git + GIT_TAG v3.3.2 +) +FetchContent_MakeAvailable(Catch2) + add_executable(sio_test sio_test.cpp) set_property(TARGET sio_test PROPERTY CXX_STANDARD 11) set_property(TARGET sio_test PROPERTY CXX_STANDARD_REQUIRED ON) -target_link_libraries(sio_test sioclient) -target_include_directories(sio_test PRIVATE - "${CMAKE_CURRENT_SOURCE_DIR}/../lib/catch/include" - "${CMAKE_CURRENT_SOURCE_DIR}/../src" -) +target_link_libraries(sio_test PRIVATE Catch2::Catch2WithMain sioclient) add_test(sioclient_test sio_test) diff --git a/test/sio_test.cpp b/test/sio_test.cpp index 22d4f601..3901f05e 100644 --- a/test/sio_test.cpp +++ b/test/sio_test.cpp @@ -10,8 +10,7 @@ #include #include -#define CATCH_CONFIG_MAIN // This tells Catch to provide a main() - only do this in one cpp file -#include "catch.hpp" +#include #ifndef _WIN32 #include "json.hpp" //nlohmann::json cannot build in MSVC @@ -55,7 +54,7 @@ TEST_CASE( "test_packet_accept_1" ) p.accept(payload,buffers); CHECK(buffers.size() == 0); CHECK(payload == "40/nsp"); - INFO("outputing payload:" << payload) + INFO("outputing payload:" << payload); } TEST_CASE( "test_packet_accept_2" ) @@ -66,7 +65,7 @@ TEST_CASE( "test_packet_accept_2" ) p.accept(payload,buffers); CHECK(buffers.size() == 0); CHECK(payload == "2"); - INFO("outputing payload:" << payload) + INFO("outputing payload:" << payload); } TEST_CASE( "test_packet_accept_3" ) @@ -81,7 +80,7 @@ TEST_CASE( "test_packet_accept_3" ) CHECK(p.get_type() == packet::type_ack); CHECK(buffers.size() == 0); CHECK(payload == "43/nsp,1001[\"event\",\"text\"]"); - INFO("outputing payload:" << payload) + INFO("outputing payload:" << payload); } #ifndef _WIN32 @@ -106,26 +105,26 @@ TEST_CASE( "test_packet_accept_4" ) REQUIRE(json_start!=std::string::npos); std::string header = payload.substr(0,json_start); CHECK(header=="452-/nsp,1001"); - INFO("outputing payload:" << payload) + INFO("outputing payload:" << payload); std::string json = payload.substr(json_start); nlohmann::json j = nlohmann::json::parse(json); CHECK(j["desc"].get() == "Bin of 100 bytes"); - INFO("outputing payload desc::" << j["desc"].get()) + INFO("outputing payload desc::" << j["desc"].get()); CHECK((bool)j["bin1"]["_placeholder"]); - INFO("outputing payload bin1:" << j["bin1"].dump()) + INFO("outputing payload bin1:" << j["bin1"].dump()); CHECK((bool)j["bin2"]["_placeholder"]); - INFO("outputing payload bin2:" << j["bin2"].dump()) + INFO("outputing payload bin2:" << j["bin2"].dump()); int bin1Num = j["bin1"]["num"].get(); char numchar[] = {0,0}; numchar[0] = bin1Num+'0'; CHECK(buffers[bin1Num]->length()==100); - INFO("outputing payload bin1 num:" << numchar) + INFO("outputing payload bin1 num:" << numchar); CHECK(buffers[bin1Num]->at(50)==0); CHECK(buffers[bin1Num]->at(0) == 0); int bin2Num = j["bin2"]["num"].get(); numchar[0] = bin2Num+'0'; CHECK(buffers[bin2Num]->length()==50); - INFO("outputing payload bin2 num:" << numchar) + INFO("outputing payload bin2 num:" << numchar); CHECK(buffers[bin2Num]->at(25)==1); CHECK(buffers[bin2Num]->at(0) == 1); } @@ -210,7 +209,8 @@ TEST_CASE( "test_packet_parse_4" ) bool hasbin = p.parse("452-/nsp,101[\"bin_event\",[{\"_placeholder\":true,\"num\":1},{\"_placeholder\":true,\"num\":0},\"text\"]]"); CHECK(hasbin); char buf[100]; - memset(buf,0,100); + buf[0] = packet::frame_message; + memset(buf + 1,0,99); std::string bufstr(buf,100); std::string bufstr2(buf,50); From 75e058980b7b5d420a6ca56d8f7cad28efe35556 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Marc=C3=A8=20i=20Igual?= Date: Mon, 26 Jun 2023 16:05:16 +0200 Subject: [PATCH 42/43] feat: allow disabling the logging of the library (#399) --- CMakeLists.txt | 5 +++++ src/internal/sio_client_impl.cpp | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9686332f..b88e9aef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,7 @@ PROJECT(sioclient option(BUILD_SHARED_LIBS "Build the shared library" OFF) option(BUILD_UNIT_TESTS "Builds unit tests target" OFF) option(USE_SUBMODULES "Use source in local submodules instead of system libraries" ON) +option(DISABLE_LOGGING "Do not print logging messages" OFF) if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(DEFAULT_BUILD_TYPE "Release") @@ -39,6 +40,10 @@ add_definitions( -D_WEBSOCKETPP_CPP11_CHRONO_ ) +if (DISABLE_LOGGING) + add_definitions(-DSIO_DISABLE_LOGGING) +endif() + set(ALL_SRC "src/sio_client.cpp" "src/sio_socket.cpp" diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 91dad3d6..efda7f54 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -13,7 +13,7 @@ #include #include // Comment this out to disable handshake logging to stdout -#if DEBUG || _DEBUG +#if (DEBUG || _DEBUG) && !defined(SIO_DISABLE_LOGGING) #define LOG(x) std::cout << x #else #define LOG(x) From 4ecddef06b9e7ba69ab2451c28d57301aa30da7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Marc=C3=A8=20i=20Igual?= Date: Fri, 30 Jun 2023 11:37:17 +0200 Subject: [PATCH 43/43] Fix compiler issue with MSVC --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index b88e9aef..edaba3be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,11 @@ add_definitions( -D_WEBSOCKETPP_CPP11_CHRONO_ ) +if (MSVC) + # To solve error C1128: number of sections exceeded object file format limit: compile with /bigobj + add_compile_options(/bigobj) +endif() + if (DISABLE_LOGGING) add_definitions(-DSIO_DISABLE_LOGGING) endif()