couchbase 3.0.0.alpha.4-universal-darwin-19 → 3.0.0.alpha.5-universal-darwin-19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/bin/fetch-stats +19 -0
- data/bin/init-cluster +24 -24
- data/bin/jenkins/build-extension +35 -0
- data/bin/jenkins/install-dependencies +47 -0
- data/bin/jenkins/test-with-cbdyncluster +58 -0
- data/couchbase.gemspec +27 -1
- data/examples/subdocument.rb +2 -2
- data/ext/build_version.hxx.in +1 -1
- data/ext/couchbase/cluster.hxx +41 -40
- data/ext/couchbase/couchbase.cxx +174 -61
- data/ext/couchbase/io/dns_message.hxx +3 -6
- data/ext/couchbase/io/http_session.hxx +31 -26
- data/ext/couchbase/io/{session_manager.hxx → http_session_manager.hxx} +3 -3
- data/ext/couchbase/io/mcbp_message.hxx +19 -2
- data/ext/couchbase/io/mcbp_session.hxx +89 -47
- data/ext/couchbase/operations/command.hxx +18 -7
- data/ext/couchbase/operations/document_analytics.hxx +5 -6
- data/ext/couchbase/operations/document_decrement.hxx +2 -1
- data/ext/couchbase/operations/document_exists.hxx +2 -1
- data/ext/couchbase/operations/document_get.hxx +2 -1
- data/ext/couchbase/operations/document_get_and_lock.hxx +2 -1
- data/ext/couchbase/operations/document_get_and_touch.hxx +2 -1
- data/ext/couchbase/operations/document_get_projected.hxx +2 -1
- data/ext/couchbase/operations/document_increment.hxx +2 -1
- data/ext/couchbase/operations/document_insert.hxx +2 -1
- data/ext/couchbase/operations/document_lookup_in.hxx +21 -1
- data/ext/couchbase/operations/document_mutate_in.hxx +44 -2
- data/ext/couchbase/operations/document_query.hxx +6 -7
- data/ext/couchbase/operations/document_remove.hxx +2 -1
- data/ext/couchbase/operations/document_replace.hxx +2 -1
- data/ext/couchbase/operations/document_search.hxx +3 -2
- data/ext/couchbase/operations/document_touch.hxx +2 -1
- data/ext/couchbase/operations/document_unlock.hxx +2 -1
- data/ext/couchbase/operations/document_upsert.hxx +2 -1
- data/ext/couchbase/operations/document_view.hxx +2 -1
- data/ext/couchbase/operations/view_index_get_all.hxx +1 -1
- data/ext/couchbase/protocol/client_opcode.hxx +7 -3
- data/ext/couchbase/protocol/client_response.hxx +1 -1
- data/ext/couchbase/protocol/cmd_hello.hxx +10 -0
- data/ext/couchbase/protocol/cmd_lookup_in.hxx +1 -0
- data/ext/couchbase/protocol/cmd_mutate_in.hxx +53 -5
- data/ext/couchbase/version.hxx +1 -1
- data/ext/extconf.rb +1 -1
- data/lib/couchbase/bucket.rb +3 -0
- data/lib/couchbase/cluster.rb +5 -0
- data/lib/couchbase/collection.rb +18 -6
- data/lib/couchbase/collection_options.rb +50 -7
- data/lib/couchbase/errors.rb +2 -2
- data/lib/couchbase/subdoc.rb +80 -19
- data/lib/couchbase/version.rb +1 -1
- metadata +7 -705
- data/ext/third_party/asio/asio/src/examples/cpp03/Makefile.am +0 -251
- data/ext/third_party/asio/asio/src/examples/cpp03/allocation/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/allocation/server.cpp +0 -285
- data/ext/third_party/asio/asio/src/examples/cpp03/buffers/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/buffers/reference_counted.cpp +0 -131
- data/ext/third_party/asio/asio/src/examples/cpp03/chat/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/chat/chat_client.cpp +0 -177
- data/ext/third_party/asio/asio/src/examples/cpp03/chat/chat_message.hpp +0 -93
- data/ext/third_party/asio/asio/src/examples/cpp03/chat/chat_server.cpp +0 -249
- data/ext/third_party/asio/asio/src/examples/cpp03/chat/posix_chat_client.cpp +0 -204
- data/ext/third_party/asio/asio/src/examples/cpp03/echo/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/echo/async_tcp_echo_server.cpp +0 -137
- data/ext/third_party/asio/asio/src/examples/cpp03/echo/async_udp_echo_server.cpp +0 -92
- data/ext/third_party/asio/asio/src/examples/cpp03/echo/blocking_tcp_echo_client.cpp +0 -59
- data/ext/third_party/asio/asio/src/examples/cpp03/echo/blocking_tcp_echo_server.cpp +0 -79
- data/ext/third_party/asio/asio/src/examples/cpp03/echo/blocking_udp_echo_client.cpp +0 -59
- data/ext/third_party/asio/asio/src/examples/cpp03/echo/blocking_udp_echo_server.cpp +0 -53
- data/ext/third_party/asio/asio/src/examples/cpp03/fork/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/fork/daemon.cpp +0 -190
- data/ext/third_party/asio/asio/src/examples/cpp03/fork/process_per_connection.cpp +0 -161
- data/ext/third_party/asio/asio/src/examples/cpp03/http/client/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/http/client/async_client.cpp +0 -204
- data/ext/third_party/asio/asio/src/examples/cpp03/http/client/sync_client.cpp +0 -106
- data/ext/third_party/asio/asio/src/examples/cpp03/http/doc_root/data_1K.html +0 -28
- data/ext/third_party/asio/asio/src/examples/cpp03/http/doc_root/data_2K.html +0 -49
- data/ext/third_party/asio/asio/src/examples/cpp03/http/doc_root/data_4K.html +0 -91
- data/ext/third_party/asio/asio/src/examples/cpp03/http/doc_root/data_8K.html +0 -175
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/connection.cpp +0 -99
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/connection.hpp +0 -83
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/connection_manager.cpp +0 -38
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/connection_manager.hpp +0 -44
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/header.hpp +0 -28
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/main.cpp +0 -44
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/mime_types.cpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/mime_types.hpp +0 -27
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/reply.cpp +0 -256
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/reply.hpp +0 -64
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/request.hpp +0 -34
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/request_handler.cpp +0 -122
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/request_handler.hpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/request_parser.cpp +0 -315
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/request_parser.hpp +0 -95
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/server.cpp +0 -94
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/server.hpp +0 -69
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/connection.cpp +0 -93
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/connection.hpp +0 -75
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/header.hpp +0 -28
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/io_context_pool.cpp +0 -69
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/io_context_pool.hpp +0 -58
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/main.cpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/mime_types.cpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/mime_types.hpp +0 -27
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/reply.cpp +0 -256
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/reply.hpp +0 -64
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/request.hpp +0 -34
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/request_handler.cpp +0 -122
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/request_handler.hpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/request_parser.cpp +0 -315
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/request_parser.hpp +0 -95
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/server.cpp +0 -77
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/server.hpp +0 -68
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/connection.cpp +0 -94
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/connection.hpp +0 -78
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/header.hpp +0 -28
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/main.cpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/mime_types.cpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/mime_types.hpp +0 -27
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/reply.cpp +0 -256
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/reply.hpp +0 -64
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/request.hpp +0 -34
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/request_handler.cpp +0 -122
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/request_handler.hpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/request_parser.cpp +0 -315
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/request_parser.hpp +0 -95
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/server.cpp +0 -89
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/server.hpp +0 -70
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/file_handler.cpp +0 -122
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/file_handler.hpp +0 -44
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/header.hpp +0 -28
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/main.cpp +0 -58
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/mime_types.cpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/mime_types.hpp +0 -27
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/reply.cpp +0 -256
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/reply.hpp +0 -64
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/request.hpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/request_parser.cpp +0 -226
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/request_parser.hpp +0 -78
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/server.cpp +0 -122
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/server.hpp +0 -73
- data/ext/third_party/asio/asio/src/examples/cpp03/icmp/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/icmp/icmp_header.hpp +0 -94
- data/ext/third_party/asio/asio/src/examples/cpp03/icmp/ipv4_header.hpp +0 -102
- data/ext/third_party/asio/asio/src/examples/cpp03/icmp/ping.cpp +0 -163
- data/ext/third_party/asio/asio/src/examples/cpp03/invocation/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/invocation/prioritised_handlers.cpp +0 -171
- data/ext/third_party/asio/asio/src/examples/cpp03/iostreams/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/iostreams/daytime_client.cpp +0 -44
- data/ext/third_party/asio/asio/src/examples/cpp03/iostreams/daytime_server.cpp +0 -51
- data/ext/third_party/asio/asio/src/examples/cpp03/iostreams/http_client.cpp +0 -91
- data/ext/third_party/asio/asio/src/examples/cpp03/local/.gitignore +0 -13
- data/ext/third_party/asio/asio/src/examples/cpp03/local/connect_pair.cpp +0 -141
- data/ext/third_party/asio/asio/src/examples/cpp03/local/iostream_client.cpp +0 -62
- data/ext/third_party/asio/asio/src/examples/cpp03/local/stream_client.cpp +0 -61
- data/ext/third_party/asio/asio/src/examples/cpp03/local/stream_server.cpp +0 -141
- data/ext/third_party/asio/asio/src/examples/cpp03/multicast/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/multicast/receiver.cpp +0 -93
- data/ext/third_party/asio/asio/src/examples/cpp03/multicast/sender.cpp +0 -98
- data/ext/third_party/asio/asio/src/examples/cpp03/nonblocking/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/nonblocking/third_party_lib.cpp +0 -240
- data/ext/third_party/asio/asio/src/examples/cpp03/porthopper/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/porthopper/client.cpp +0 -192
- data/ext/third_party/asio/asio/src/examples/cpp03/porthopper/protocol.hpp +0 -156
- data/ext/third_party/asio/asio/src/examples/cpp03/porthopper/server.cpp +0 -187
- data/ext/third_party/asio/asio/src/examples/cpp03/serialization/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/serialization/client.cpp +0 -125
- data/ext/third_party/asio/asio/src/examples/cpp03/serialization/connection.hpp +0 -188
- data/ext/third_party/asio/asio/src/examples/cpp03/serialization/server.cpp +0 -123
- data/ext/third_party/asio/asio/src/examples/cpp03/serialization/stock.hpp +0 -50
- data/ext/third_party/asio/asio/src/examples/cpp03/services/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/services/basic_logger.hpp +0 -83
- data/ext/third_party/asio/asio/src/examples/cpp03/services/daytime_client.cpp +0 -97
- data/ext/third_party/asio/asio/src/examples/cpp03/services/logger.hpp +0 -24
- data/ext/third_party/asio/asio/src/examples/cpp03/services/logger_service.cpp +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/services/logger_service.hpp +0 -145
- data/ext/third_party/asio/asio/src/examples/cpp03/socks4/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/socks4/socks4.hpp +0 -144
- data/ext/third_party/asio/asio/src/examples/cpp03/socks4/sync_client.cpp +0 -94
- data/ext/third_party/asio/asio/src/examples/cpp03/spawn/.gitignore +0 -12
- data/ext/third_party/asio/asio/src/examples/cpp03/spawn/echo_server.cpp +0 -122
- data/ext/third_party/asio/asio/src/examples/cpp03/spawn/parallel_grep.cpp +0 -89
- data/ext/third_party/asio/asio/src/examples/cpp03/ssl/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/ssl/README +0 -8
- data/ext/third_party/asio/asio/src/examples/cpp03/ssl/ca.pem +0 -49
- data/ext/third_party/asio/asio/src/examples/cpp03/ssl/client.cpp +0 -157
- data/ext/third_party/asio/asio/src/examples/cpp03/ssl/dh2048.pem +0 -8
- data/ext/third_party/asio/asio/src/examples/cpp03/ssl/server.cpp +0 -170
- data/ext/third_party/asio/asio/src/examples/cpp03/ssl/server.pem +0 -71
- data/ext/third_party/asio/asio/src/examples/cpp03/timeouts/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/timeouts/async_tcp_client.cpp +0 -311
- data/ext/third_party/asio/asio/src/examples/cpp03/timeouts/blocking_tcp_client.cpp +0 -191
- data/ext/third_party/asio/asio/src/examples/cpp03/timeouts/blocking_token_tcp_client.cpp +0 -200
- data/ext/third_party/asio/asio/src/examples/cpp03/timeouts/blocking_udp_client.cpp +0 -154
- data/ext/third_party/asio/asio/src/examples/cpp03/timeouts/server.cpp +0 -433
- data/ext/third_party/asio/asio/src/examples/cpp03/timers/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/timers/time_t_timer.cpp +0 -106
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime1/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime1/client.cpp +0 -57
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime2/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime2/server.cpp +0 -50
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime3/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime3/server.cpp +0 -119
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime4/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime4/client.cpp +0 -52
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime5/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime5/server.cpp +0 -53
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime6/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime6/server.cpp +0 -89
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime7/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime7/server.cpp +0 -160
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime_dox.txt +0 -500
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/index_dox.txt +0 -48
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer1/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer1/timer.cpp +0 -24
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer2/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer2/timer.cpp +0 -29
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer3/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer3/timer.cpp +0 -43
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer4/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer4/timer.cpp +0 -54
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer5/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer5/timer.cpp +0 -80
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer_dox.txt +0 -378
- data/ext/third_party/asio/asio/src/examples/cpp03/windows/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/windows/transmit_file.cpp +0 -177
- data/ext/third_party/asio/asio/src/examples/cpp11/Makefile.am +0 -161
- data/ext/third_party/asio/asio/src/examples/cpp11/allocation/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp11/allocation/server.cpp +0 -255
- data/ext/third_party/asio/asio/src/examples/cpp11/buffers/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp11/buffers/reference_counted.cpp +0 -122
- data/ext/third_party/asio/asio/src/examples/cpp11/chat/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/chat/chat_client.cpp +0 -167
- data/ext/third_party/asio/asio/src/examples/cpp11/chat/chat_message.hpp +0 -91
- data/ext/third_party/asio/asio/src/examples/cpp11/chat/chat_server.cpp +0 -227
- data/ext/third_party/asio/asio/src/examples/cpp11/echo/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/echo/async_tcp_echo_server.cpp +0 -114
- data/ext/third_party/asio/asio/src/examples/cpp11/echo/async_udp_echo_server.cpp +0 -82
- data/ext/third_party/asio/asio/src/examples/cpp11/echo/blocking_tcp_echo_client.cpp +0 -55
- data/ext/third_party/asio/asio/src/examples/cpp11/echo/blocking_tcp_echo_server.cpp +0 -74
- data/ext/third_party/asio/asio/src/examples/cpp11/echo/blocking_udp_echo_client.cpp +0 -58
- data/ext/third_party/asio/asio/src/examples/cpp11/echo/blocking_udp_echo_server.cpp +0 -52
- data/ext/third_party/asio/asio/src/examples/cpp11/executors/.gitignore +0 -5
- data/ext/third_party/asio/asio/src/examples/cpp11/executors/actor.cpp +0 -286
- data/ext/third_party/asio/asio/src/examples/cpp11/executors/bank_account_1.cpp +0 -54
- data/ext/third_party/asio/asio/src/examples/cpp11/executors/bank_account_2.cpp +0 -54
- data/ext/third_party/asio/asio/src/examples/cpp11/executors/fork_join.cpp +0 -328
- data/ext/third_party/asio/asio/src/examples/cpp11/executors/pipeline.cpp +0 -299
- data/ext/third_party/asio/asio/src/examples/cpp11/executors/priority_scheduler.cpp +0 -174
- data/ext/third_party/asio/asio/src/examples/cpp11/fork/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/fork/daemon.cpp +0 -189
- data/ext/third_party/asio/asio/src/examples/cpp11/fork/process_per_connection.cpp +0 -162
- data/ext/third_party/asio/asio/src/examples/cpp11/futures/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/futures/daytime_client.cpp +0 -94
- data/ext/third_party/asio/asio/src/examples/cpp11/handler_tracking/custom_tracking.hpp +0 -201
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/connection.cpp +0 -94
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/connection.hpp +0 -79
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/connection_manager.cpp +0 -40
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/connection_manager.hpp +0 -48
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/header.hpp +0 -28
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/main.cpp +0 -43
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/mime_types.cpp +0 -45
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/mime_types.hpp +0 -27
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/reply.cpp +0 -255
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/reply.hpp +0 -64
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/request.hpp +0 -34
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/request_handler.cpp +0 -121
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/request_handler.hpp +0 -47
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/request_parser.cpp +0 -315
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/request_parser.hpp +0 -96
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/server.cpp +0 -94
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/server.hpp +0 -64
- data/ext/third_party/asio/asio/src/examples/cpp11/invocation/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp11/invocation/prioritised_handlers.cpp +0 -202
- data/ext/third_party/asio/asio/src/examples/cpp11/iostreams/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/iostreams/http_client.cpp +0 -91
- data/ext/third_party/asio/asio/src/examples/cpp11/local/.gitignore +0 -13
- data/ext/third_party/asio/asio/src/examples/cpp11/local/connect_pair.cpp +0 -129
- data/ext/third_party/asio/asio/src/examples/cpp11/local/iostream_client.cpp +0 -61
- data/ext/third_party/asio/asio/src/examples/cpp11/local/stream_client.cpp +0 -60
- data/ext/third_party/asio/asio/src/examples/cpp11/local/stream_server.cpp +0 -121
- data/ext/third_party/asio/asio/src/examples/cpp11/multicast/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/multicast/receiver.cpp +0 -88
- data/ext/third_party/asio/asio/src/examples/cpp11/multicast/sender.cpp +0 -91
- data/ext/third_party/asio/asio/src/examples/cpp11/nonblocking/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp11/nonblocking/third_party_lib.cpp +0 -212
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_1.cpp +0 -113
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_2.cpp +0 -131
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_3.cpp +0 -192
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_4.cpp +0 -207
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_5.cpp +0 -243
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_6.cpp +0 -302
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_7.cpp +0 -222
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_8.cpp +0 -217
- data/ext/third_party/asio/asio/src/examples/cpp11/socks4/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp11/socks4/socks4.hpp +0 -143
- data/ext/third_party/asio/asio/src/examples/cpp11/socks4/sync_client.cpp +0 -93
- data/ext/third_party/asio/asio/src/examples/cpp11/spawn/.gitignore +0 -12
- data/ext/third_party/asio/asio/src/examples/cpp11/spawn/echo_server.cpp +0 -111
- data/ext/third_party/asio/asio/src/examples/cpp11/spawn/parallel_grep.cpp +0 -84
- data/ext/third_party/asio/asio/src/examples/cpp11/ssl/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/ssl/README +0 -8
- data/ext/third_party/asio/asio/src/examples/cpp11/ssl/ca.pem +0 -49
- data/ext/third_party/asio/asio/src/examples/cpp11/ssl/client.cpp +0 -165
- data/ext/third_party/asio/asio/src/examples/cpp11/ssl/dh2048.pem +0 -8
- data/ext/third_party/asio/asio/src/examples/cpp11/ssl/server.cpp +0 -143
- data/ext/third_party/asio/asio/src/examples/cpp11/ssl/server.pem +0 -71
- data/ext/third_party/asio/asio/src/examples/cpp11/timeouts/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/timeouts/async_tcp_client.cpp +0 -311
- data/ext/third_party/asio/asio/src/examples/cpp11/timeouts/blocking_tcp_client.cpp +0 -192
- data/ext/third_party/asio/asio/src/examples/cpp11/timeouts/blocking_token_tcp_client.cpp +0 -197
- data/ext/third_party/asio/asio/src/examples/cpp11/timeouts/blocking_udp_client.cpp +0 -155
- data/ext/third_party/asio/asio/src/examples/cpp11/timeouts/server.cpp +0 -433
- data/ext/third_party/asio/asio/src/examples/cpp11/timers/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp11/timers/time_t_timer.cpp +0 -106
- data/ext/third_party/asio/asio/src/examples/cpp14/Makefile.am +0 -64
- data/ext/third_party/asio/asio/src/examples/cpp14/echo/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp14/echo/async_tcp_echo_server.cpp +0 -117
- data/ext/third_party/asio/asio/src/examples/cpp14/echo/async_udp_echo_server.cpp +0 -83
- data/ext/third_party/asio/asio/src/examples/cpp14/echo/blocking_tcp_echo_client.cpp +0 -55
- data/ext/third_party/asio/asio/src/examples/cpp14/echo/blocking_tcp_echo_server.cpp +0 -77
- data/ext/third_party/asio/asio/src/examples/cpp14/echo/blocking_udp_echo_client.cpp +0 -59
- data/ext/third_party/asio/asio/src/examples/cpp14/echo/blocking_udp_echo_server.cpp +0 -53
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/.gitignore +0 -6
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/actor.cpp +0 -281
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/async_1.cpp +0 -47
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/async_2.cpp +0 -68
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/bank_account_1.cpp +0 -54
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/bank_account_2.cpp +0 -53
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/fork_join.cpp +0 -327
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/pipeline.cpp +0 -294
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/priority_scheduler.cpp +0 -173
- data/ext/third_party/asio/asio/src/examples/cpp14/iostreams/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp14/iostreams/http_client.cpp +0 -91
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_1.cpp +0 -113
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_2.cpp +0 -131
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_3.cpp +0 -186
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_4.cpp +0 -201
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_5.cpp +0 -238
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_6.cpp +0 -298
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_7.cpp +0 -219
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_8.cpp +0 -212
- data/ext/third_party/asio/asio/src/examples/cpp17/Makefile.am +0 -8
- data/ext/third_party/asio/asio/src/examples/cpp17/coroutines_ts/chat_server.cpp +0 -225
- data/ext/third_party/asio/asio/src/examples/cpp17/coroutines_ts/echo_server.cpp +0 -76
- data/ext/third_party/asio/asio/src/examples/cpp17/coroutines_ts/echo_server_with_default.cpp +0 -78
- data/ext/third_party/asio/asio/src/examples/cpp17/coroutines_ts/range_based_for.cpp +0 -107
- data/ext/third_party/asio/asio/src/examples/cpp17/coroutines_ts/refactored_echo_server.cpp +0 -85
- data/ext/third_party/asio/asio/src/tests/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/tests/Makefile.am +0 -432
- data/ext/third_party/asio/asio/src/tests/latency/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/tests/latency/allocator.hpp +0 -52
- data/ext/third_party/asio/asio/src/tests/latency/high_res_clock.hpp +0 -53
- data/ext/third_party/asio/asio/src/tests/latency/tcp_client.cpp +0 -124
- data/ext/third_party/asio/asio/src/tests/latency/tcp_server.cpp +0 -114
- data/ext/third_party/asio/asio/src/tests/latency/udp_client.cpp +0 -104
- data/ext/third_party/asio/asio/src/tests/latency/udp_server.cpp +0 -125
- data/ext/third_party/asio/asio/src/tests/performance/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/tests/performance/client.cpp +0 -286
- data/ext/third_party/asio/asio/src/tests/performance/handler_allocator.hpp +0 -112
- data/ext/third_party/asio/asio/src/tests/performance/server.cpp +0 -233
- data/ext/third_party/asio/asio/src/tests/unit/.gitignore +0 -75
- data/ext/third_party/asio/asio/src/tests/unit/archetypes/async_ops.hpp +0 -415
- data/ext/third_party/asio/asio/src/tests/unit/archetypes/async_result.hpp +0 -94
- data/ext/third_party/asio/asio/src/tests/unit/archetypes/gettable_socket_option.hpp +0 -54
- data/ext/third_party/asio/asio/src/tests/unit/archetypes/io_control_command.hpp +0 -32
- data/ext/third_party/asio/asio/src/tests/unit/archetypes/settable_socket_option.hpp +0 -49
- data/ext/third_party/asio/asio/src/tests/unit/associated_allocator.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/associated_executor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/async_result.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/awaitable.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_datagram_socket.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_deadline_timer.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_raw_socket.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_seq_packet_socket.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_serial_port.cpp +0 -26
- data/ext/third_party/asio/asio/src/tests/unit/basic_signal_set.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_socket.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_socket_acceptor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_stream_socket.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_streambuf.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_waitable_timer.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/bind_executor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/buffer.cpp +0 -830
- data/ext/third_party/asio/asio/src/tests/unit/buffered_read_stream.cpp +0 -338
- data/ext/third_party/asio/asio/src/tests/unit/buffered_stream.cpp +0 -364
- data/ext/third_party/asio/asio/src/tests/unit/buffered_write_stream.cpp +0 -353
- data/ext/third_party/asio/asio/src/tests/unit/buffers_iterator.cpp +0 -292
- data/ext/third_party/asio/asio/src/tests/unit/co_spawn.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/completion_condition.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/compose.cpp +0 -185
- data/ext/third_party/asio/asio/src/tests/unit/connect.cpp +0 -1190
- data/ext/third_party/asio/asio/src/tests/unit/coroutine.cpp +0 -112
- data/ext/third_party/asio/asio/src/tests/unit/deadline_timer.cpp +0 -392
- data/ext/third_party/asio/asio/src/tests/unit/defer.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/detached.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/dispatch.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/error.cpp +0 -89
- data/ext/third_party/asio/asio/src/tests/unit/execution_context.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/executor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/executor_work_guard.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/generic/.gitignore +0 -14
- data/ext/third_party/asio/asio/src/tests/unit/generic/basic_endpoint.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/generic/datagram_protocol.cpp +0 -263
- data/ext/third_party/asio/asio/src/tests/unit/generic/raw_protocol.cpp +0 -263
- data/ext/third_party/asio/asio/src/tests/unit/generic/seq_packet_protocol.cpp +0 -205
- data/ext/third_party/asio/asio/src/tests/unit/generic/stream_protocol.cpp +0 -248
- data/ext/third_party/asio/asio/src/tests/unit/high_resolution_timer.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/io_context.cpp +0 -362
- data/ext/third_party/asio/asio/src/tests/unit/io_context_strand.cpp +0 -325
- data/ext/third_party/asio/asio/src/tests/unit/ip/.gitignore +0 -27
- data/ext/third_party/asio/asio/src/tests/unit/ip/address.cpp +0 -144
- data/ext/third_party/asio/asio/src/tests/unit/ip/basic_endpoint.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ip/basic_resolver.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ip/basic_resolver_entry.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ip/basic_resolver_iterator.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ip/basic_resolver_query.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ip/host_name.cpp +0 -55
- data/ext/third_party/asio/asio/src/tests/unit/ip/icmp.cpp +0 -577
- data/ext/third_party/asio/asio/src/tests/unit/ip/multicast.cpp +0 -363
- data/ext/third_party/asio/asio/src/tests/unit/ip/network_v4.cpp +0 -314
- data/ext/third_party/asio/asio/src/tests/unit/ip/network_v6.cpp +0 -238
- data/ext/third_party/asio/asio/src/tests/unit/ip/resolver_query_base.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ip/tcp.cpp +0 -1346
- data/ext/third_party/asio/asio/src/tests/unit/ip/udp.cpp +0 -673
- data/ext/third_party/asio/asio/src/tests/unit/ip/unicast.cpp +0 -171
- data/ext/third_party/asio/asio/src/tests/unit/ip/v6_only.cpp +0 -135
- data/ext/third_party/asio/asio/src/tests/unit/is_read_buffered.cpp +0 -129
- data/ext/third_party/asio/asio/src/tests/unit/is_write_buffered.cpp +0 -129
- data/ext/third_party/asio/asio/src/tests/unit/local/.gitignore +0 -13
- data/ext/third_party/asio/asio/src/tests/unit/local/basic_endpoint.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/local/connect_pair.cpp +0 -76
- data/ext/third_party/asio/asio/src/tests/unit/local/datagram_protocol.cpp +0 -242
- data/ext/third_party/asio/asio/src/tests/unit/local/stream_protocol.cpp +0 -219
- data/ext/third_party/asio/asio/src/tests/unit/packaged_task.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/placeholders.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/posix/.gitignore +0 -14
- data/ext/third_party/asio/asio/src/tests/unit/posix/basic_descriptor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/posix/basic_stream_descriptor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/posix/descriptor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/posix/descriptor_base.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/posix/stream_descriptor.cpp +0 -183
- data/ext/third_party/asio/asio/src/tests/unit/post.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/read.cpp +0 -4997
- data/ext/third_party/asio/asio/src/tests/unit/read_at.cpp +0 -7502
- data/ext/third_party/asio/asio/src/tests/unit/read_until.cpp +0 -1658
- data/ext/third_party/asio/asio/src/tests/unit/redirect_error.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/serial_port.cpp +0 -173
- data/ext/third_party/asio/asio/src/tests/unit/serial_port_base.cpp +0 -99
- data/ext/third_party/asio/asio/src/tests/unit/signal_set.cpp +0 -95
- data/ext/third_party/asio/asio/src/tests/unit/socket_base.cpp +0 -650
- data/ext/third_party/asio/asio/src/tests/unit/ssl/.gitignore +0 -15
- data/ext/third_party/asio/asio/src/tests/unit/ssl/context.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ssl/context_base.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ssl/error.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ssl/host_name_verification.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ssl/rfc2818_verification.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ssl/stream.cpp +0 -191
- data/ext/third_party/asio/asio/src/tests/unit/ssl/stream_base.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/steady_timer.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/strand.cpp +0 -263
- data/ext/third_party/asio/asio/src/tests/unit/streambuf.cpp +0 -62
- data/ext/third_party/asio/asio/src/tests/unit/system_context.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/system_executor.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/system_timer.cpp +0 -399
- data/ext/third_party/asio/asio/src/tests/unit/this_coro.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/thread.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/time_traits.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ts/.gitignore +0 -17
- data/ext/third_party/asio/asio/src/tests/unit/ts/buffer.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/ts/executor.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/ts/internet.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/ts/io_context.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/ts/net.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/ts/netfwd.cpp +0 -33
- data/ext/third_party/asio/asio/src/tests/unit/ts/socket.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/ts/timer.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/unit_test.hpp +0 -175
- data/ext/third_party/asio/asio/src/tests/unit/use_awaitable.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/use_future.cpp +0 -670
- data/ext/third_party/asio/asio/src/tests/unit/uses_executor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/wait_traits.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/windows/.gitignore +0 -18
- data/ext/third_party/asio/asio/src/tests/unit/windows/basic_object_handle.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/windows/basic_overlapped_handle.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/windows/basic_random_access_handle.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/windows/basic_stream_handle.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/windows/object_handle.cpp +0 -130
- data/ext/third_party/asio/asio/src/tests/unit/windows/overlapped_handle.cpp +0 -26
- data/ext/third_party/asio/asio/src/tests/unit/windows/overlapped_ptr.cpp +0 -107
- data/ext/third_party/asio/asio/src/tests/unit/windows/random_access_handle.cpp +0 -155
- data/ext/third_party/asio/asio/src/tests/unit/windows/stream_handle.cpp +0 -148
- data/ext/third_party/asio/asio/src/tests/unit/write.cpp +0 -4904
- data/ext/third_party/asio/asio/src/tests/unit/write_at.cpp +0 -7563
- data/ext/third_party/asio/asio/src/tools/handlerviz.pl +0 -299
- data/ext/third_party/gsl/tests/CMakeLists.txt +0 -267
- data/ext/third_party/gsl/tests/CMakeLists.txt.in +0 -14
- data/ext/third_party/gsl/tests/algorithm_tests.cpp +0 -227
- data/ext/third_party/gsl/tests/assertion_tests.cpp +0 -61
- data/ext/third_party/gsl/tests/at_tests.cpp +0 -135
- data/ext/third_party/gsl/tests/bounds_tests.cpp +0 -102
- data/ext/third_party/gsl/tests/byte_tests.cpp +0 -129
- data/ext/third_party/gsl/tests/multi_span_tests.cpp +0 -1866
- data/ext/third_party/gsl/tests/no_exception_ensure_tests.cpp +0 -48
- data/ext/third_party/gsl/tests/notnull_tests.cpp +0 -535
- data/ext/third_party/gsl/tests/owner_tests.cpp +0 -43
- data/ext/third_party/gsl/tests/span_compatibility_tests.cpp +0 -1021
- data/ext/third_party/gsl/tests/span_ext_tests.cpp +0 -360
- data/ext/third_party/gsl/tests/span_tests.cpp +0 -1244
- data/ext/third_party/gsl/tests/strict_notnull_tests.cpp +0 -190
- data/ext/third_party/gsl/tests/strided_span_tests.cpp +0 -790
- data/ext/third_party/gsl/tests/string_span_tests.cpp +0 -1217
- data/ext/third_party/gsl/tests/utils_tests.cpp +0 -129
- data/ext/third_party/http_parser/contrib/parsertrace.c +0 -157
- data/ext/third_party/http_parser/contrib/url_parser.c +0 -47
- data/ext/third_party/http_parser/fuzzers/fuzz_parser.c +0 -26
- data/ext/third_party/http_parser/fuzzers/fuzz_url.c +0 -14
- data/ext/third_party/json/contrib/nlohmann.cpp +0 -48
- data/ext/third_party/json/contrib/nlohmann/from_value.hpp +0 -62
- data/ext/third_party/json/contrib/nlohmann/json.hpp +0 -18928
- data/ext/third_party/json/contrib/nlohmann/to_value.hpp +0 -109
- data/ext/third_party/json/doc/Advanced-Use-Cases.md +0 -83
- data/ext/third_party/json/doc/Batteries-Included.md +0 -212
- data/ext/third_party/json/doc/Binding-Traits.md +0 -319
- data/ext/third_party/json/doc/Changelog.md +0 -31
- data/ext/third_party/json/doc/Common-Use-Cases.md +0 -148
- data/ext/third_party/json/doc/Design-Decisions.md +0 -36
- data/ext/third_party/json/doc/Events-Interface.md +0 -140
- data/ext/third_party/json/doc/Getting-Started.md +0 -19
- data/ext/third_party/json/doc/Instance-Sharing.md +0 -163
- data/ext/third_party/json/doc/Interoperability.md +0 -75
- data/ext/third_party/json/doc/Overview.md +0 -24
- data/ext/third_party/json/doc/Overview.png +0 -0
- data/ext/third_party/json/doc/Parser-Interface.md +0 -84
- data/ext/third_party/json/doc/README.md +0 -78
- data/ext/third_party/json/doc/Scratchpad.md +0 -25
- data/ext/third_party/json/doc/Type-Traits.md +0 -364
- data/ext/third_party/json/doc/Types.png +0 -0
- data/ext/third_party/json/doc/Value-Class.md +0 -525
- data/ext/third_party/json/src/example/json/CMakeLists.txt +0 -67
- data/ext/third_party/json/src/example/json/cbor_to_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/cbor_to_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/cbor_to_msgpack.cpp +0 -18
- data/ext/third_party/json/src/example/json/cbor_to_pretty_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/cbor_to_pretty_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/cbor_to_ubjson.cpp +0 -18
- data/ext/third_party/json/src/example/json/jaxn_to_cbor.cpp +0 -18
- data/ext/third_party/json/src/example/json/jaxn_to_cplusplus.cpp +0 -249
- data/ext/third_party/json/src/example/json/jaxn_to_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/jaxn_to_msgpack.cpp +0 -18
- data/ext/third_party/json/src/example/json/jaxn_to_pretty_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/jaxn_to_ubjson.cpp +0 -18
- data/ext/third_party/json/src/example/json/json_to_cbor.cpp +0 -18
- data/ext/third_party/json/src/example/json/json_to_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/json_to_msgpack.cpp +0 -18
- data/ext/third_party/json/src/example/json/json_to_pretty_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/json_to_ubjson.cpp +0 -18
- data/ext/third_party/json/src/example/json/msgpack_to_cbor.cpp +0 -18
- data/ext/third_party/json/src/example/json/msgpack_to_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/msgpack_to_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/msgpack_to_pretty_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/msgpack_to_pretty_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/msgpack_to_ubjson.cpp +0 -18
- data/ext/third_party/json/src/example/json/printf_doubles.cpp +0 -51
- data/ext/third_party/json/src/example/json/ubjson_to_cbor.cpp +0 -18
- data/ext/third_party/json/src/example/json/ubjson_to_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/ubjson_to_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/ubjson_to_msgpack.cpp +0 -18
- data/ext/third_party/json/src/example/json/ubjson_to_pretty_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/ubjson_to_pretty_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/validate_event_order.cpp +0 -27
- data/ext/third_party/json/src/example/json/validate_integer.cpp +0 -56
- data/ext/third_party/json/src/perf/json/bench_mark.hpp +0 -43
- data/ext/third_party/json/src/perf/json/benchmark.cpp +0 -34
- data/ext/third_party/json/src/perf/json/parse_file.cpp +0 -17
- data/ext/third_party/json/src/perf/json/pretty_print_file.cpp +0 -19
- data/ext/third_party/json/src/perf/json/print_double.cpp +0 -34
- data/ext/third_party/json/src/perf/json/print_file.cpp +0 -19
- data/ext/third_party/json/src/perf/json/sizes.cpp +0 -24
- data/ext/third_party/json/src/perf/json/syntax_only.cpp +0 -27
- data/ext/third_party/json/src/test/json/CMakeLists.txt +0 -97
- data/ext/third_party/json/src/test/json/big_list_of_naughty_strings.cpp +0 -43
- data/ext/third_party/json/src/test/json/binding_array.cpp +0 -549
- data/ext/third_party/json/src/test/json/binding_factory.cpp +0 -265
- data/ext/third_party/json/src/test/json/binding_object.cpp +0 -208
- data/ext/third_party/json/src/test/json/binding_versions.cpp +0 -95
- data/ext/third_party/json/src/test/json/cbor.cpp +0 -149
- data/ext/third_party/json/src/test/json/cbor_parts_parser.cpp +0 -36
- data/ext/third_party/json/src/test/json/contrib_diff.cpp +0 -43
- data/ext/third_party/json/src/test/json/contrib_get.cpp +0 -42
- data/ext/third_party/json/src/test/json/contrib_patch_add.cpp +0 -75
- data/ext/third_party/json/src/test/json/contrib_patch_copy.cpp +0 -113
- data/ext/third_party/json/src/test/json/contrib_patch_move.cpp +0 -97
- data/ext/third_party/json/src/test/json/contrib_patch_remove.cpp +0 -85
- data/ext/third_party/json/src/test/json/contrib_patch_replace.cpp +0 -79
- data/ext/third_party/json/src/test/json/contrib_patch_test.cpp +0 -69
- data/ext/third_party/json/src/test/json/contrib_position.cpp +0 -48
- data/ext/third_party/json/src/test/json/contrib_reference.cpp +0 -44
- data/ext/third_party/json/src/test/json/contrib_schema.cpp +0 -132
- data/ext/third_party/json/src/test/json/contrib_traits.cpp +0 -258
- data/ext/third_party/json/src/test/json/double.cpp +0 -182
- data/ext/third_party/json/src/test/json/enable_implicit_constructor.cpp +0 -54
- data/ext/third_party/json/src/test/json/escape.cpp +0 -42
- data/ext/third_party/json/src/test/json/events_binary_to.cpp +0 -56
- data/ext/third_party/json/src/test/json/events_compare.cpp +0 -433
- data/ext/third_party/json/src/test/json/events_debug.cpp +0 -24
- data/ext/third_party/json/src/test/json/events_hash.cpp +0 -65
- data/ext/third_party/json/src/test/json/events_to_stream.cpp +0 -28
- data/ext/third_party/json/src/test/json/events_to_string.cpp +0 -25
- data/ext/third_party/json/src/test/json/include_json.cpp +0 -14
- data/ext/third_party/json/src/test/json/integer.cpp +0 -118
- data/ext/third_party/json/src/test/json/jaxn_ostream.cpp +0 -76
- data/ext/third_party/json/src/test/json/jaxn_parse.cpp +0 -239
- data/ext/third_party/json/src/test/json/jaxn_parts_parser.cpp +0 -220
- data/ext/third_party/json/src/test/json/json_ostream.cpp +0 -102
- data/ext/third_party/json/src/test/json/json_parse.cpp +0 -153
- data/ext/third_party/json/src/test/json/json_parts_parser.cpp +0 -124
- data/ext/third_party/json/src/test/json/json_pointer.cpp +0 -176
- data/ext/third_party/json/src/test/json/key_camel_case_to_snake_case.cpp +0 -38
- data/ext/third_party/json/src/test/json/key_snake_case_to_camel_case.cpp +0 -33
- data/ext/third_party/json/src/test/json/literal.cpp +0 -18
- data/ext/third_party/json/src/test/json/main.hpp +0 -20
- data/ext/third_party/json/src/test/json/make_events.hpp +0 -362
- data/ext/third_party/json/src/test/json/msgpack.cpp +0 -136
- data/ext/third_party/json/src/test/json/object_construction.cpp +0 -167
- data/ext/third_party/json/src/test/json/opaque_pointer.cpp +0 -192
- data/ext/third_party/json/src/test/json/operators.cpp +0 -494
- data/ext/third_party/json/src/test/json/optional.cpp +0 -79
- data/ext/third_party/json/src/test/json/public_base.cpp +0 -142
- data/ext/third_party/json/src/test/json/self_contained.cpp +0 -106
- data/ext/third_party/json/src/test/json/sha256.cpp +0 -38
- data/ext/third_party/json/src/test/json/string_view.cpp +0 -70
- data/ext/third_party/json/src/test/json/temporary_parsing.cpp +0 -339
- data/ext/third_party/json/src/test/json/test.hpp +0 -74
- data/ext/third_party/json/src/test/json/test_events.hpp +0 -250
- data/ext/third_party/json/src/test/json/test_types.hpp +0 -557
- data/ext/third_party/json/src/test/json/test_unhex.hpp +0 -42
- data/ext/third_party/json/src/test/json/type.cpp +0 -35
- data/ext/third_party/json/src/test/json/ubjson.cpp +0 -119
- data/ext/third_party/json/src/test/json/uri_fragment.cpp +0 -52
- data/ext/third_party/json/src/test/json/validate_event_interfaces.cpp +0 -177
- data/ext/third_party/json/src/test/json/validate_utf8.cpp +0 -37
- data/ext/third_party/json/src/test/json/value_access.cpp +0 -144
- data/ext/third_party/json/src/test/json/value_basics.cpp +0 -241
- data/ext/third_party/json/src/test/json/value_create.cpp +0 -372
- data/ext/third_party/json/src/test/json/value_ptr.cpp +0 -33
- data/ext/third_party/json/src/test/json/value_subscript.cpp +0 -89
- data/ext/third_party/json/src/test/json/with_arguments.cpp +0 -98
- data/ext/third_party/json/tests/blns.json +0 -496
- data/ext/third_party/json/tests/canada.json +0 -9
- data/ext/third_party/json/tests/citm_catalog.json +0 -50469
- data/ext/third_party/json/tests/draft4/additionalItems.json +0 -82
- data/ext/third_party/json/tests/draft4/additionalProperties.json +0 -88
- data/ext/third_party/json/tests/draft4/allOf.json +0 -112
- data/ext/third_party/json/tests/draft4/anyOf.json +0 -68
- data/ext/third_party/json/tests/draft4/default.json +0 -49
- data/ext/third_party/json/tests/draft4/definitions.json +0 -32
- data/ext/third_party/json/tests/draft4/dependencies.json +0 -113
- data/ext/third_party/json/tests/draft4/enum.json +0 -72
- data/ext/third_party/json/tests/draft4/items.json +0 -46
- data/ext/third_party/json/tests/draft4/maxItems.json +0 -28
- data/ext/third_party/json/tests/draft4/maxLength.json +0 -33
- data/ext/third_party/json/tests/draft4/maxProperties.json +0 -28
- data/ext/third_party/json/tests/draft4/maximum.json +0 -42
- data/ext/third_party/json/tests/draft4/minItems.json +0 -28
- data/ext/third_party/json/tests/draft4/minLength.json +0 -33
- data/ext/third_party/json/tests/draft4/minProperties.json +0 -28
- data/ext/third_party/json/tests/draft4/minimum.json +0 -42
- data/ext/third_party/json/tests/draft4/multipleOf.json +0 -60
- data/ext/third_party/json/tests/draft4/not.json +0 -96
- data/ext/third_party/json/tests/draft4/oneOf.json +0 -68
- data/ext/third_party/json/tests/draft4/optional/bignum.json +0 -107
- data/ext/third_party/json/tests/draft4/optional/format.json +0 -148
- data/ext/third_party/json/tests/draft4/optional/zeroTerminatedFloats.json +0 -15
- data/ext/third_party/json/tests/draft4/pattern.json +0 -34
- data/ext/third_party/json/tests/draft4/patternProperties.json +0 -110
- data/ext/third_party/json/tests/draft4/properties.json +0 -92
- data/ext/third_party/json/tests/draft4/ref.json +0 -179
- data/ext/third_party/json/tests/draft4/refRemote.json +0 -74
- data/ext/third_party/json/tests/draft4/required.json +0 -44
- data/ext/third_party/json/tests/draft4/type.json +0 -345
- data/ext/third_party/json/tests/draft4/uniqueItems.json +0 -79
- data/ext/third_party/json/tests/taocpp/binary.jaxn +0 -4
- data/ext/third_party/json/tests/taocpp/dateTime.json +0 -108
- data/ext/third_party/json/tests/taocpp/make_events.cbor +0 -0
- data/ext/third_party/json/tests/taocpp/number.json +0 -682
- data/ext/third_party/json/tests/taocpp/position.json +0 -8
- data/ext/third_party/json/tests/taocpp/schema.json +0 -378
- data/ext/third_party/json/tests/twitter.json +0 -15482
- data/ext/third_party/snappy/testdata/alice29.txt +0 -3609
- data/ext/third_party/snappy/testdata/asyoulik.txt +0 -4122
- data/ext/third_party/snappy/testdata/baddata1.snappy +0 -0
- data/ext/third_party/snappy/testdata/baddata2.snappy +0 -0
- data/ext/third_party/snappy/testdata/baddata3.snappy +0 -0
- data/ext/third_party/snappy/testdata/fireworks.jpeg +0 -0
- data/ext/third_party/snappy/testdata/geo.protodata +0 -0
- data/ext/third_party/snappy/testdata/html +0 -1
- data/ext/third_party/snappy/testdata/html_x_4 +0 -1
- data/ext/third_party/snappy/testdata/kppkn.gtb +0 -0
- data/ext/third_party/snappy/testdata/lcet10.txt +0 -7519
- data/ext/third_party/snappy/testdata/paper-100k.pdf +2 -600
- data/ext/third_party/snappy/testdata/plrabn12.txt +0 -10699
- data/ext/third_party/snappy/testdata/urls.10K +0 -10000
- data/ext/third_party/spdlog/bench/CMakeLists.txt +0 -25
- data/ext/third_party/spdlog/bench/async_bench.cpp +0 -179
- data/ext/third_party/spdlog/bench/bench.cpp +0 -238
- data/ext/third_party/spdlog/bench/formatter-bench.cpp +0 -80
- data/ext/third_party/spdlog/bench/latency.cpp +0 -166
- data/ext/third_party/spdlog/bench/utils.h +0 -34
- data/ext/third_party/spdlog/example/CMakeLists.txt +0 -23
- data/ext/third_party/spdlog/example/example.cpp +0 -282
- data/ext/third_party/spdlog/logos/jetbrains-variant-4.svg +0 -43
- data/ext/third_party/spdlog/scripts/extract_version.py +0 -17
- data/ext/third_party/spdlog/scripts/format.sh +0 -16
- data/ext/third_party/spdlog/tests/CMakeLists.txt +0 -70
- data/ext/third_party/spdlog/tests/catch.hpp +0 -15372
- data/ext/third_party/spdlog/tests/catch.license +0 -23
- data/ext/third_party/spdlog/tests/includes.h +0 -26
- data/ext/third_party/spdlog/tests/main.cpp +0 -2
- data/ext/third_party/spdlog/tests/test_async.cpp +0 -188
- data/ext/third_party/spdlog/tests/test_backtrace.cpp +0 -65
- data/ext/third_party/spdlog/tests/test_cfg.cpp +0 -93
- data/ext/third_party/spdlog/tests/test_create_dir.cpp +0 -80
- data/ext/third_party/spdlog/tests/test_daily_logger.cpp +0 -149
- data/ext/third_party/spdlog/tests/test_dup_filter.cpp +0 -88
- data/ext/third_party/spdlog/tests/test_errors.cpp +0 -118
- data/ext/third_party/spdlog/tests/test_eventlog.cpp +0 -71
- data/ext/third_party/spdlog/tests/test_file_helper.cpp +0 -102
- data/ext/third_party/spdlog/tests/test_file_logging.cpp +0 -98
- data/ext/third_party/spdlog/tests/test_fmt_helper.cpp +0 -86
- data/ext/third_party/spdlog/tests/test_macros.cpp +0 -60
- data/ext/third_party/spdlog/tests/test_misc.cpp +0 -271
- data/ext/third_party/spdlog/tests/test_mpmc_q.cpp +0 -106
- data/ext/third_party/spdlog/tests/test_pattern_formatter.cpp +0 -443
- data/ext/third_party/spdlog/tests/test_registry.cpp +0 -116
- data/ext/third_party/spdlog/tests/test_sink.h +0 -79
- data/ext/third_party/spdlog/tests/test_stdout_api.cpp +0 -98
- data/ext/third_party/spdlog/tests/test_systemd.cpp +0 -15
- data/ext/third_party/spdlog/tests/test_time_point.cpp +0 -36
- data/ext/third_party/spdlog/tests/utils.cpp +0 -125
- data/ext/third_party/spdlog/tests/utils.h +0 -18
@@ -1,197 +0,0 @@
|
|
1
|
-
//
|
2
|
-
// blocking_token_tcp_client.cpp
|
3
|
-
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
4
|
-
//
|
5
|
-
// Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com)
|
6
|
-
//
|
7
|
-
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
8
|
-
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
9
|
-
//
|
10
|
-
|
11
|
-
#include "asio/connect.hpp"
|
12
|
-
#include "asio/io_context.hpp"
|
13
|
-
#include "asio/ip/tcp.hpp"
|
14
|
-
#include "asio/read_until.hpp"
|
15
|
-
#include "asio/streambuf.hpp"
|
16
|
-
#include "asio/system_error.hpp"
|
17
|
-
#include "asio/write.hpp"
|
18
|
-
#include <cstdlib>
|
19
|
-
#include <iostream>
|
20
|
-
#include <memory>
|
21
|
-
#include <string>
|
22
|
-
|
23
|
-
using asio::ip::tcp;
|
24
|
-
|
25
|
-
// We will use our sockets only with an io_context.
|
26
|
-
using tcp_socket = asio::basic_stream_socket<
|
27
|
-
tcp, asio::io_context::executor_type>;
|
28
|
-
|
29
|
-
//----------------------------------------------------------------------
|
30
|
-
|
31
|
-
// A custom completion token that makes asynchronous operations behave as
|
32
|
-
// though they are blocking calls with a timeout.
|
33
|
-
struct close_after
|
34
|
-
{
|
35
|
-
close_after(std::chrono::steady_clock::duration t, tcp_socket& s)
|
36
|
-
: timeout_(t), socket_(s)
|
37
|
-
{
|
38
|
-
}
|
39
|
-
|
40
|
-
// The maximum time to wait for an asynchronous operation to complete.
|
41
|
-
std::chrono::steady_clock::duration timeout_;
|
42
|
-
|
43
|
-
// The socket to be closed if the operation does not complete in time.
|
44
|
-
tcp_socket& socket_;
|
45
|
-
};
|
46
|
-
|
47
|
-
namespace asio {
|
48
|
-
|
49
|
-
// The async_result template is specialised to allow the close_after token to
|
50
|
-
// be used with asynchronous operations that have a completion signature of
|
51
|
-
// void(error_code, T). Generalising this for all completion signature forms is
|
52
|
-
// left as an exercise for the reader.
|
53
|
-
template <typename T>
|
54
|
-
class async_result<close_after, void(std::error_code, T)>
|
55
|
-
{
|
56
|
-
public:
|
57
|
-
// An asynchronous operation's initiating function automatically creates an
|
58
|
-
// completion_handler_type object from the token. This function object is
|
59
|
-
// then called on completion of the asynchronous operation.
|
60
|
-
class completion_handler_type
|
61
|
-
{
|
62
|
-
public:
|
63
|
-
completion_handler_type(const close_after& token)
|
64
|
-
: token_(token)
|
65
|
-
{
|
66
|
-
}
|
67
|
-
|
68
|
-
void operator()(const std::error_code& error, T t)
|
69
|
-
{
|
70
|
-
*error_ = error;
|
71
|
-
*t_ = t;
|
72
|
-
}
|
73
|
-
|
74
|
-
private:
|
75
|
-
friend class async_result;
|
76
|
-
close_after token_;
|
77
|
-
std::error_code* error_;
|
78
|
-
T* t_;
|
79
|
-
};
|
80
|
-
|
81
|
-
// The async_result constructor associates the completion handler object with
|
82
|
-
// the result of the initiating function.
|
83
|
-
explicit async_result(completion_handler_type& h)
|
84
|
-
: timeout_(h.token_.timeout_),
|
85
|
-
socket_(h.token_.socket_)
|
86
|
-
{
|
87
|
-
h.error_ = &error_;
|
88
|
-
h.t_ = &t_;
|
89
|
-
}
|
90
|
-
|
91
|
-
// The return_type typedef determines the result type of the asynchronous
|
92
|
-
// operation's initiating function.
|
93
|
-
typedef T return_type;
|
94
|
-
|
95
|
-
// The get() function is used to obtain the result of the asynchronous
|
96
|
-
// operation's initiating function. For the close_after completion token, we
|
97
|
-
// use this function to run the io_context until the operation is complete.
|
98
|
-
return_type get()
|
99
|
-
{
|
100
|
-
asio::io_context& io_context = socket_.get_executor().context();
|
101
|
-
|
102
|
-
// Restart the io_context, as it may have been left in the "stopped" state
|
103
|
-
// by a previous operation.
|
104
|
-
io_context.restart();
|
105
|
-
|
106
|
-
// Block until the asynchronous operation has completed, or timed out. If
|
107
|
-
// the pending asynchronous operation is a composed operation, the deadline
|
108
|
-
// applies to the entire operation, rather than individual operations on
|
109
|
-
// the socket.
|
110
|
-
io_context.run_for(timeout_);
|
111
|
-
|
112
|
-
// If the asynchronous operation completed successfully then the io_context
|
113
|
-
// would have been stopped due to running out of work. If it was not
|
114
|
-
// stopped, then the io_context::run_for call must have timed out and the
|
115
|
-
// operation is still incomplete.
|
116
|
-
if (!io_context.stopped())
|
117
|
-
{
|
118
|
-
// Close the socket to cancel the outstanding asynchronous operation.
|
119
|
-
socket_.close();
|
120
|
-
|
121
|
-
// Run the io_context again until the operation completes.
|
122
|
-
io_context.run();
|
123
|
-
}
|
124
|
-
|
125
|
-
// If the operation failed, throw an exception. Otherwise return the result.
|
126
|
-
return error_ ? throw std::system_error(error_) : t_;
|
127
|
-
}
|
128
|
-
|
129
|
-
private:
|
130
|
-
std::chrono::steady_clock::duration timeout_;
|
131
|
-
tcp_socket& socket_;
|
132
|
-
std::error_code error_;
|
133
|
-
T t_;
|
134
|
-
};
|
135
|
-
|
136
|
-
} // namespace asio
|
137
|
-
|
138
|
-
//----------------------------------------------------------------------
|
139
|
-
|
140
|
-
int main(int argc, char* argv[])
|
141
|
-
{
|
142
|
-
try
|
143
|
-
{
|
144
|
-
if (argc != 4)
|
145
|
-
{
|
146
|
-
std::cerr << "Usage: blocking_tcp_client <host> <port> <message>\n";
|
147
|
-
return 1;
|
148
|
-
}
|
149
|
-
|
150
|
-
asio::io_context io_context;
|
151
|
-
|
152
|
-
// Resolve the host name and service to a list of endpoints.
|
153
|
-
auto endpoints = tcp::resolver(io_context).resolve(argv[1], argv[2]);
|
154
|
-
|
155
|
-
tcp_socket socket(io_context);
|
156
|
-
|
157
|
-
// Run an asynchronous connect operation with a timeout.
|
158
|
-
asio::async_connect(socket, endpoints,
|
159
|
-
close_after(std::chrono::seconds(10), socket));
|
160
|
-
|
161
|
-
auto time_sent = std::chrono::steady_clock::now();
|
162
|
-
|
163
|
-
// Run an asynchronous write operation with a timeout.
|
164
|
-
std::string msg = argv[3] + std::string("\n");
|
165
|
-
asio::async_write(socket, asio::buffer(msg),
|
166
|
-
close_after(std::chrono::seconds(10), socket));
|
167
|
-
|
168
|
-
for (std::string input_buffer;;)
|
169
|
-
{
|
170
|
-
// Run an asynchronous read operation with a timeout.
|
171
|
-
std::size_t n = asio::async_read_until(socket,
|
172
|
-
asio::dynamic_buffer(input_buffer), '\n',
|
173
|
-
close_after(std::chrono::seconds(10), socket));
|
174
|
-
|
175
|
-
std::string line(input_buffer.substr(0, n - 1));
|
176
|
-
input_buffer.erase(0, n);
|
177
|
-
|
178
|
-
// Keep going until we get back the line that was sent.
|
179
|
-
if (line == argv[3])
|
180
|
-
break;
|
181
|
-
}
|
182
|
-
|
183
|
-
auto time_received = std::chrono::steady_clock::now();
|
184
|
-
|
185
|
-
std::cout << "Round trip time: ";
|
186
|
-
std::cout << std::chrono::duration_cast<
|
187
|
-
std::chrono::microseconds>(
|
188
|
-
time_received - time_sent).count();
|
189
|
-
std::cout << " microseconds\n";
|
190
|
-
}
|
191
|
-
catch (std::exception& e)
|
192
|
-
{
|
193
|
-
std::cerr << "Exception: " << e.what() << "\n";
|
194
|
-
}
|
195
|
-
|
196
|
-
return 0;
|
197
|
-
}
|
@@ -1,155 +0,0 @@
|
|
1
|
-
//
|
2
|
-
// blocking_udp_client.cpp
|
3
|
-
// ~~~~~~~~~~~~~~~~~~~~~~~
|
4
|
-
//
|
5
|
-
// Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com)
|
6
|
-
//
|
7
|
-
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
8
|
-
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
9
|
-
//
|
10
|
-
|
11
|
-
#include "asio/buffer.hpp"
|
12
|
-
#include "asio/io_context.hpp"
|
13
|
-
#include "asio/ip/udp.hpp"
|
14
|
-
#include <cstdlib>
|
15
|
-
#include <functional>
|
16
|
-
#include <iostream>
|
17
|
-
|
18
|
-
using asio::ip::udp;
|
19
|
-
using std::placeholders::_1;
|
20
|
-
using std::placeholders::_2;
|
21
|
-
|
22
|
-
//----------------------------------------------------------------------
|
23
|
-
|
24
|
-
//
|
25
|
-
// This class manages socket timeouts by running the io_context using the timed
|
26
|
-
// io_context::run_for() member function. Each asynchronous operation is given
|
27
|
-
// a timeout within which it must complete. The socket operations themselves
|
28
|
-
// use std::bind to specify the completion handler:
|
29
|
-
//
|
30
|
-
// +---------------+
|
31
|
-
// | |
|
32
|
-
// | receive |
|
33
|
-
// | |
|
34
|
-
// +---------------+
|
35
|
-
// |
|
36
|
-
// async_- | +----------------+
|
37
|
-
// receive() | | |
|
38
|
-
// +--->| handle_receive |
|
39
|
-
// | |
|
40
|
-
// +----------------+
|
41
|
-
//
|
42
|
-
// For a given socket operation, the client object runs the io_context to block
|
43
|
-
// thread execution until the operation completes or the timeout is reached. If
|
44
|
-
// the io_context::run_for() function times out, the socket is closed and the
|
45
|
-
// outstanding asynchronous operation is cancelled.
|
46
|
-
//
|
47
|
-
class client
|
48
|
-
{
|
49
|
-
public:
|
50
|
-
client(const udp::endpoint& listen_endpoint)
|
51
|
-
: socket_(io_context_, listen_endpoint)
|
52
|
-
{
|
53
|
-
}
|
54
|
-
|
55
|
-
std::size_t receive(const asio::mutable_buffer& buffer,
|
56
|
-
std::chrono::steady_clock::duration timeout,
|
57
|
-
std::error_code& error)
|
58
|
-
{
|
59
|
-
// Start the asynchronous operation. The handle_receive function used as a
|
60
|
-
// callback will update the error and length variables.
|
61
|
-
std::size_t length = 0;
|
62
|
-
socket_.async_receive(asio::buffer(buffer),
|
63
|
-
std::bind(&client::handle_receive, _1, _2, &error, &length));
|
64
|
-
|
65
|
-
// Run the operation until it completes, or until the timeout.
|
66
|
-
run(timeout);
|
67
|
-
|
68
|
-
return length;
|
69
|
-
}
|
70
|
-
|
71
|
-
private:
|
72
|
-
void run(std::chrono::steady_clock::duration timeout)
|
73
|
-
{
|
74
|
-
// Restart the io_context, as it may have been left in the "stopped" state
|
75
|
-
// by a previous operation.
|
76
|
-
io_context_.restart();
|
77
|
-
|
78
|
-
// Block until the asynchronous operation has completed, or timed out. If
|
79
|
-
// the pending asynchronous operation is a composed operation, the deadline
|
80
|
-
// applies to the entire operation, rather than individual operations on
|
81
|
-
// the socket.
|
82
|
-
io_context_.run_for(timeout);
|
83
|
-
|
84
|
-
// If the asynchronous operation completed successfully then the io_context
|
85
|
-
// would have been stopped due to running out of work. If it was not
|
86
|
-
// stopped, then the io_context::run_for call must have timed out.
|
87
|
-
if (!io_context_.stopped())
|
88
|
-
{
|
89
|
-
// Cancel the outstanding asynchronous operation.
|
90
|
-
socket_.cancel();
|
91
|
-
|
92
|
-
// Run the io_context again until the operation completes.
|
93
|
-
io_context_.run();
|
94
|
-
}
|
95
|
-
}
|
96
|
-
|
97
|
-
static void handle_receive(
|
98
|
-
const std::error_code& error, std::size_t length,
|
99
|
-
std::error_code* out_error, std::size_t* out_length)
|
100
|
-
{
|
101
|
-
*out_error = error;
|
102
|
-
*out_length = length;
|
103
|
-
}
|
104
|
-
|
105
|
-
private:
|
106
|
-
asio::io_context io_context_;
|
107
|
-
udp::socket socket_;
|
108
|
-
};
|
109
|
-
|
110
|
-
//----------------------------------------------------------------------
|
111
|
-
|
112
|
-
int main(int argc, char* argv[])
|
113
|
-
{
|
114
|
-
try
|
115
|
-
{
|
116
|
-
using namespace std; // For atoi.
|
117
|
-
|
118
|
-
if (argc != 3)
|
119
|
-
{
|
120
|
-
std::cerr << "Usage: blocking_udp_client <listen_addr> <listen_port>\n";
|
121
|
-
return 1;
|
122
|
-
}
|
123
|
-
|
124
|
-
udp::endpoint listen_endpoint(
|
125
|
-
asio::ip::make_address(argv[1]),
|
126
|
-
std::atoi(argv[2]));
|
127
|
-
|
128
|
-
client c(listen_endpoint);
|
129
|
-
|
130
|
-
for (;;)
|
131
|
-
{
|
132
|
-
char data[1024];
|
133
|
-
std::error_code error;
|
134
|
-
std::size_t n = c.receive(asio::buffer(data),
|
135
|
-
std::chrono::seconds(10), error);
|
136
|
-
|
137
|
-
if (error)
|
138
|
-
{
|
139
|
-
std::cout << "Receive error: " << error.message() << "\n";
|
140
|
-
}
|
141
|
-
else
|
142
|
-
{
|
143
|
-
std::cout << "Received: ";
|
144
|
-
std::cout.write(data, n);
|
145
|
-
std::cout << "\n";
|
146
|
-
}
|
147
|
-
}
|
148
|
-
}
|
149
|
-
catch (std::exception& e)
|
150
|
-
{
|
151
|
-
std::cerr << "Exception: " << e.what() << "\n";
|
152
|
-
}
|
153
|
-
|
154
|
-
return 0;
|
155
|
-
}
|
@@ -1,433 +0,0 @@
|
|
1
|
-
//
|
2
|
-
// server.cpp
|
3
|
-
// ~~~~~~~~~~
|
4
|
-
//
|
5
|
-
// Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com)
|
6
|
-
//
|
7
|
-
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
8
|
-
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
9
|
-
//
|
10
|
-
|
11
|
-
#include <algorithm>
|
12
|
-
#include <cstdlib>
|
13
|
-
#include <deque>
|
14
|
-
#include <iostream>
|
15
|
-
#include <memory>
|
16
|
-
#include <set>
|
17
|
-
#include <string>
|
18
|
-
#include "asio/buffer.hpp"
|
19
|
-
#include "asio/io_context.hpp"
|
20
|
-
#include "asio/ip/tcp.hpp"
|
21
|
-
#include "asio/ip/udp.hpp"
|
22
|
-
#include "asio/read_until.hpp"
|
23
|
-
#include "asio/steady_timer.hpp"
|
24
|
-
#include "asio/write.hpp"
|
25
|
-
|
26
|
-
using asio::steady_timer;
|
27
|
-
using asio::ip::tcp;
|
28
|
-
using asio::ip::udp;
|
29
|
-
|
30
|
-
//----------------------------------------------------------------------
|
31
|
-
|
32
|
-
class subscriber
|
33
|
-
{
|
34
|
-
public:
|
35
|
-
virtual ~subscriber() = default;
|
36
|
-
virtual void deliver(const std::string& msg) = 0;
|
37
|
-
};
|
38
|
-
|
39
|
-
typedef std::shared_ptr<subscriber> subscriber_ptr;
|
40
|
-
|
41
|
-
//----------------------------------------------------------------------
|
42
|
-
|
43
|
-
class channel
|
44
|
-
{
|
45
|
-
public:
|
46
|
-
void join(subscriber_ptr subscriber)
|
47
|
-
{
|
48
|
-
subscribers_.insert(subscriber);
|
49
|
-
}
|
50
|
-
|
51
|
-
void leave(subscriber_ptr subscriber)
|
52
|
-
{
|
53
|
-
subscribers_.erase(subscriber);
|
54
|
-
}
|
55
|
-
|
56
|
-
void deliver(const std::string& msg)
|
57
|
-
{
|
58
|
-
for (const auto& s : subscribers_)
|
59
|
-
{
|
60
|
-
s->deliver(msg);
|
61
|
-
}
|
62
|
-
}
|
63
|
-
|
64
|
-
private:
|
65
|
-
std::set<subscriber_ptr> subscribers_;
|
66
|
-
};
|
67
|
-
|
68
|
-
//----------------------------------------------------------------------
|
69
|
-
|
70
|
-
//
|
71
|
-
// This class manages socket timeouts by applying the concept of a deadline.
|
72
|
-
// Some asynchronous operations are given deadlines by which they must complete.
|
73
|
-
// Deadlines are enforced by two "actors" that persist for the lifetime of the
|
74
|
-
// session object, one for input and one for output:
|
75
|
-
//
|
76
|
-
// +----------------+ +----------------+
|
77
|
-
// | | | |
|
78
|
-
// | check_deadline |<-------+ | check_deadline |<-------+
|
79
|
-
// | | | | | |
|
80
|
-
// +----------------+ | +----------------+ |
|
81
|
-
// | | | |
|
82
|
-
// async_wait() | +----------------+ async_wait() | +----------------+
|
83
|
-
// on input | | lambda | on output | | lambda |
|
84
|
-
// deadline +--->| in | deadline +--->| in |
|
85
|
-
// | check_deadline | | check_deadline |
|
86
|
-
// +----------------+ +----------------+
|
87
|
-
//
|
88
|
-
// If either deadline actor determines that the corresponding deadline has
|
89
|
-
// expired, the socket is closed and any outstanding operations are cancelled.
|
90
|
-
//
|
91
|
-
// The input actor reads messages from the socket, where messages are delimited
|
92
|
-
// by the newline character:
|
93
|
-
//
|
94
|
-
// +-------------+
|
95
|
-
// | |
|
96
|
-
// | read_line |<----+
|
97
|
-
// | | |
|
98
|
-
// +-------------+ |
|
99
|
-
// | |
|
100
|
-
// async_- | +-------------+
|
101
|
-
// read_- | | lambda |
|
102
|
-
// until() +--->| in |
|
103
|
-
// | read_line |
|
104
|
-
// +-------------+
|
105
|
-
//
|
106
|
-
// The deadline for receiving a complete message is 30 seconds. If a non-empty
|
107
|
-
// message is received, it is delivered to all subscribers. If a heartbeat (a
|
108
|
-
// message that consists of a single newline character) is received, a heartbeat
|
109
|
-
// is enqueued for the client, provided there are no other messages waiting to
|
110
|
-
// be sent.
|
111
|
-
//
|
112
|
-
// The output actor is responsible for sending messages to the client:
|
113
|
-
//
|
114
|
-
// +----------------+
|
115
|
-
// | |<---------------------+
|
116
|
-
// | await_output | |
|
117
|
-
// | |<-------+ |
|
118
|
-
// +----------------+ | |
|
119
|
-
// | | | |
|
120
|
-
// | async_- | +----------------+ |
|
121
|
-
// | wait() | | lambda | |
|
122
|
-
// | +->| in | |
|
123
|
-
// | | await_output | |
|
124
|
-
// | +----------------+ |
|
125
|
-
// V |
|
126
|
-
// +--------------+ +--------------+
|
127
|
-
// | | async_write() | lambda |
|
128
|
-
// | write_line |-------------->| in |
|
129
|
-
// | | | write_line |
|
130
|
-
// +--------------+ +--------------+
|
131
|
-
//
|
132
|
-
// The output actor first waits for an output message to be enqueued. It does
|
133
|
-
// this by using a steady_timer as an asynchronous condition variable. The
|
134
|
-
// steady_timer will be signalled whenever the output queue is non-empty.
|
135
|
-
//
|
136
|
-
// Once a message is available, it is sent to the client. The deadline for
|
137
|
-
// sending a complete message is 30 seconds. After the message is successfully
|
138
|
-
// sent, the output actor again waits for the output queue to become non-empty.
|
139
|
-
//
|
140
|
-
class tcp_session
|
141
|
-
: public subscriber,
|
142
|
-
public std::enable_shared_from_this<tcp_session>
|
143
|
-
{
|
144
|
-
public:
|
145
|
-
tcp_session(tcp::socket socket, channel& ch)
|
146
|
-
: channel_(ch),
|
147
|
-
socket_(std::move(socket))
|
148
|
-
{
|
149
|
-
input_deadline_.expires_at(steady_timer::time_point::max());
|
150
|
-
output_deadline_.expires_at(steady_timer::time_point::max());
|
151
|
-
|
152
|
-
// The non_empty_output_queue_ steady_timer is set to the maximum time
|
153
|
-
// point whenever the output queue is empty. This ensures that the output
|
154
|
-
// actor stays asleep until a message is put into the queue.
|
155
|
-
non_empty_output_queue_.expires_at(steady_timer::time_point::max());
|
156
|
-
}
|
157
|
-
|
158
|
-
// Called by the server object to initiate the four actors.
|
159
|
-
void start()
|
160
|
-
{
|
161
|
-
channel_.join(shared_from_this());
|
162
|
-
|
163
|
-
read_line();
|
164
|
-
check_deadline(input_deadline_);
|
165
|
-
|
166
|
-
await_output();
|
167
|
-
check_deadline(output_deadline_);
|
168
|
-
}
|
169
|
-
|
170
|
-
private:
|
171
|
-
void stop()
|
172
|
-
{
|
173
|
-
channel_.leave(shared_from_this());
|
174
|
-
|
175
|
-
std::error_code ignored_error;
|
176
|
-
socket_.close(ignored_error);
|
177
|
-
input_deadline_.cancel();
|
178
|
-
non_empty_output_queue_.cancel();
|
179
|
-
output_deadline_.cancel();
|
180
|
-
}
|
181
|
-
|
182
|
-
bool stopped() const
|
183
|
-
{
|
184
|
-
return !socket_.is_open();
|
185
|
-
}
|
186
|
-
|
187
|
-
void deliver(const std::string& msg) override
|
188
|
-
{
|
189
|
-
output_queue_.push_back(msg + "\n");
|
190
|
-
|
191
|
-
// Signal that the output queue contains messages. Modifying the expiry
|
192
|
-
// will wake the output actor, if it is waiting on the timer.
|
193
|
-
non_empty_output_queue_.expires_at(steady_timer::time_point::min());
|
194
|
-
}
|
195
|
-
|
196
|
-
void read_line()
|
197
|
-
{
|
198
|
-
// Set a deadline for the read operation.
|
199
|
-
input_deadline_.expires_after(std::chrono::seconds(30));
|
200
|
-
|
201
|
-
// Start an asynchronous operation to read a newline-delimited message.
|
202
|
-
auto self(shared_from_this());
|
203
|
-
asio::async_read_until(socket_,
|
204
|
-
asio::dynamic_buffer(input_buffer_), '\n',
|
205
|
-
[this, self](const std::error_code& error, std::size_t n)
|
206
|
-
{
|
207
|
-
// Check if the session was stopped while the operation was pending.
|
208
|
-
if (stopped())
|
209
|
-
return;
|
210
|
-
|
211
|
-
if (!error)
|
212
|
-
{
|
213
|
-
// Extract the newline-delimited message from the buffer.
|
214
|
-
std::string msg(input_buffer_.substr(0, n - 1));
|
215
|
-
input_buffer_.erase(0, n);
|
216
|
-
|
217
|
-
if (!msg.empty())
|
218
|
-
{
|
219
|
-
channel_.deliver(msg);
|
220
|
-
}
|
221
|
-
else
|
222
|
-
{
|
223
|
-
|
224
|
-
// We received a heartbeat message from the client. If there's
|
225
|
-
// nothing else being sent or ready to be sent, send a heartbeat
|
226
|
-
// right back.
|
227
|
-
if (output_queue_.empty())
|
228
|
-
{
|
229
|
-
output_queue_.push_back("\n");
|
230
|
-
|
231
|
-
// Signal that the output queue contains messages. Modifying
|
232
|
-
// the expiry will wake the output actor, if it is waiting on
|
233
|
-
// the timer.
|
234
|
-
non_empty_output_queue_.expires_at(
|
235
|
-
steady_timer::time_point::min());
|
236
|
-
}
|
237
|
-
}
|
238
|
-
|
239
|
-
read_line();
|
240
|
-
}
|
241
|
-
else
|
242
|
-
{
|
243
|
-
stop();
|
244
|
-
}
|
245
|
-
});
|
246
|
-
}
|
247
|
-
|
248
|
-
void await_output()
|
249
|
-
{
|
250
|
-
auto self(shared_from_this());
|
251
|
-
non_empty_output_queue_.async_wait(
|
252
|
-
[this, self](const std::error_code& /*error*/)
|
253
|
-
{
|
254
|
-
// Check if the session was stopped while the operation was pending.
|
255
|
-
if (stopped())
|
256
|
-
return;
|
257
|
-
|
258
|
-
if (output_queue_.empty())
|
259
|
-
{
|
260
|
-
// There are no messages that are ready to be sent. The actor goes
|
261
|
-
// to sleep by waiting on the non_empty_output_queue_ timer. When a
|
262
|
-
// new message is added, the timer will be modified and the actor
|
263
|
-
// will wake.
|
264
|
-
non_empty_output_queue_.expires_at(steady_timer::time_point::max());
|
265
|
-
await_output();
|
266
|
-
}
|
267
|
-
else
|
268
|
-
{
|
269
|
-
write_line();
|
270
|
-
}
|
271
|
-
});
|
272
|
-
}
|
273
|
-
|
274
|
-
void write_line()
|
275
|
-
{
|
276
|
-
// Set a deadline for the write operation.
|
277
|
-
output_deadline_.expires_after(std::chrono::seconds(30));
|
278
|
-
|
279
|
-
// Start an asynchronous operation to send a message.
|
280
|
-
auto self(shared_from_this());
|
281
|
-
asio::async_write(socket_,
|
282
|
-
asio::buffer(output_queue_.front()),
|
283
|
-
[this, self](const std::error_code& error, std::size_t /*n*/)
|
284
|
-
{
|
285
|
-
// Check if the session was stopped while the operation was pending.
|
286
|
-
if (stopped())
|
287
|
-
return;
|
288
|
-
|
289
|
-
if (!error)
|
290
|
-
{
|
291
|
-
output_queue_.pop_front();
|
292
|
-
|
293
|
-
await_output();
|
294
|
-
}
|
295
|
-
else
|
296
|
-
{
|
297
|
-
stop();
|
298
|
-
}
|
299
|
-
});
|
300
|
-
}
|
301
|
-
|
302
|
-
void check_deadline(steady_timer& deadline)
|
303
|
-
{
|
304
|
-
auto self(shared_from_this());
|
305
|
-
deadline.async_wait(
|
306
|
-
[this, self, &deadline](const std::error_code& /*error*/)
|
307
|
-
{
|
308
|
-
// Check if the session was stopped while the operation was pending.
|
309
|
-
if (stopped())
|
310
|
-
return;
|
311
|
-
|
312
|
-
// Check whether the deadline has passed. We compare the deadline
|
313
|
-
// against the current time since a new asynchronous operation may
|
314
|
-
// have moved the deadline before this actor had a chance to run.
|
315
|
-
if (deadline.expiry() <= steady_timer::clock_type::now())
|
316
|
-
{
|
317
|
-
// The deadline has passed. Stop the session. The other actors will
|
318
|
-
// terminate as soon as possible.
|
319
|
-
stop();
|
320
|
-
}
|
321
|
-
else
|
322
|
-
{
|
323
|
-
// Put the actor back to sleep.
|
324
|
-
check_deadline(deadline);
|
325
|
-
}
|
326
|
-
});
|
327
|
-
}
|
328
|
-
|
329
|
-
channel& channel_;
|
330
|
-
tcp::socket socket_;
|
331
|
-
std::string input_buffer_;
|
332
|
-
steady_timer input_deadline_{socket_.get_executor()};
|
333
|
-
std::deque<std::string> output_queue_;
|
334
|
-
steady_timer non_empty_output_queue_{socket_.get_executor()};
|
335
|
-
steady_timer output_deadline_{socket_.get_executor()};
|
336
|
-
};
|
337
|
-
|
338
|
-
typedef std::shared_ptr<tcp_session> tcp_session_ptr;
|
339
|
-
|
340
|
-
//----------------------------------------------------------------------
|
341
|
-
|
342
|
-
class udp_broadcaster
|
343
|
-
: public subscriber
|
344
|
-
{
|
345
|
-
public:
|
346
|
-
udp_broadcaster(asio::io_context& io_context,
|
347
|
-
const udp::endpoint& broadcast_endpoint)
|
348
|
-
: socket_(io_context)
|
349
|
-
{
|
350
|
-
socket_.connect(broadcast_endpoint);
|
351
|
-
socket_.set_option(udp::socket::broadcast(true));
|
352
|
-
}
|
353
|
-
|
354
|
-
private:
|
355
|
-
void deliver(const std::string& msg)
|
356
|
-
{
|
357
|
-
std::error_code ignored_error;
|
358
|
-
socket_.send(asio::buffer(msg), 0, ignored_error);
|
359
|
-
}
|
360
|
-
|
361
|
-
udp::socket socket_;
|
362
|
-
};
|
363
|
-
|
364
|
-
//----------------------------------------------------------------------
|
365
|
-
|
366
|
-
class server
|
367
|
-
{
|
368
|
-
public:
|
369
|
-
server(asio::io_context& io_context,
|
370
|
-
const tcp::endpoint& listen_endpoint,
|
371
|
-
const udp::endpoint& broadcast_endpoint)
|
372
|
-
: io_context_(io_context),
|
373
|
-
acceptor_(io_context, listen_endpoint)
|
374
|
-
{
|
375
|
-
channel_.join(
|
376
|
-
std::make_shared<udp_broadcaster>(
|
377
|
-
io_context_, broadcast_endpoint));
|
378
|
-
|
379
|
-
accept();
|
380
|
-
}
|
381
|
-
|
382
|
-
private:
|
383
|
-
void accept()
|
384
|
-
{
|
385
|
-
acceptor_.async_accept(
|
386
|
-
[this](const std::error_code& error, tcp::socket socket)
|
387
|
-
{
|
388
|
-
if (!error)
|
389
|
-
{
|
390
|
-
std::make_shared<tcp_session>(std::move(socket), channel_)->start();
|
391
|
-
}
|
392
|
-
|
393
|
-
accept();
|
394
|
-
});
|
395
|
-
}
|
396
|
-
|
397
|
-
asio::io_context& io_context_;
|
398
|
-
tcp::acceptor acceptor_;
|
399
|
-
channel channel_;
|
400
|
-
};
|
401
|
-
|
402
|
-
//----------------------------------------------------------------------
|
403
|
-
|
404
|
-
int main(int argc, char* argv[])
|
405
|
-
{
|
406
|
-
try
|
407
|
-
{
|
408
|
-
using namespace std; // For atoi.
|
409
|
-
|
410
|
-
if (argc != 4)
|
411
|
-
{
|
412
|
-
std::cerr << "Usage: server <listen_port> <bcast_address> <bcast_port>\n";
|
413
|
-
return 1;
|
414
|
-
}
|
415
|
-
|
416
|
-
asio::io_context io_context;
|
417
|
-
|
418
|
-
tcp::endpoint listen_endpoint(tcp::v4(), atoi(argv[1]));
|
419
|
-
|
420
|
-
udp::endpoint broadcast_endpoint(
|
421
|
-
asio::ip::make_address(argv[2]), atoi(argv[3]));
|
422
|
-
|
423
|
-
server s(io_context, listen_endpoint, broadcast_endpoint);
|
424
|
-
|
425
|
-
io_context.run();
|
426
|
-
}
|
427
|
-
catch (std::exception& e)
|
428
|
-
{
|
429
|
-
std::cerr << "Exception: " << e.what() << "\n";
|
430
|
-
}
|
431
|
-
|
432
|
-
return 0;
|
433
|
-
}
|