summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/asio/src/examples/cpp03
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/asio/src/examples/cpp03')
-rw-r--r--3rdparty/asio/src/examples/cpp03/Makefile.am250
-rw-r--r--3rdparty/asio/src/examples/cpp03/allocation/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/allocation/server.cpp238
-rw-r--r--3rdparty/asio/src/examples/cpp03/buffers/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/buffers/reference_counted.cpp131
-rw-r--r--3rdparty/asio/src/examples/cpp03/chat/.gitignore11
-rw-r--r--3rdparty/asio/src/examples/cpp03/chat/chat_client.cpp177
-rw-r--r--3rdparty/asio/src/examples/cpp03/chat/chat_message.hpp93
-rw-r--r--3rdparty/asio/src/examples/cpp03/chat/chat_server.cpp247
-rw-r--r--3rdparty/asio/src/examples/cpp03/chat/posix_chat_client.cpp204
-rw-r--r--3rdparty/asio/src/examples/cpp03/echo/.gitignore11
-rw-r--r--3rdparty/asio/src/examples/cpp03/echo/async_tcp_echo_server.cpp137
-rw-r--r--3rdparty/asio/src/examples/cpp03/echo/async_udp_echo_server.cpp92
-rw-r--r--3rdparty/asio/src/examples/cpp03/echo/blocking_tcp_echo_client.cpp59
-rw-r--r--3rdparty/asio/src/examples/cpp03/echo/blocking_tcp_echo_server.cpp79
-rw-r--r--3rdparty/asio/src/examples/cpp03/echo/blocking_udp_echo_client.cpp59
-rw-r--r--3rdparty/asio/src/examples/cpp03/echo/blocking_udp_echo_server.cpp53
-rw-r--r--3rdparty/asio/src/examples/cpp03/fork/.gitignore11
-rw-r--r--3rdparty/asio/src/examples/cpp03/fork/daemon.cpp189
-rw-r--r--3rdparty/asio/src/examples/cpp03/fork/process_per_connection.cpp160
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/client/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/client/async_client.cpp204
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/client/sync_client.cpp106
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/doc_root/data_1K.html28
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/doc_root/data_2K.html49
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/doc_root/data_4K.html91
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/doc_root/data_8K.html175
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/.gitignore11
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/connection.cpp99
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/connection.hpp83
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/connection_manager.cpp38
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/connection_manager.hpp44
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/header.hpp28
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/main.cpp44
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/mime_types.cpp46
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/mime_types.hpp27
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/reply.cpp256
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/reply.hpp64
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/request.hpp34
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/request_handler.cpp122
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/request_handler.hpp46
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/request_parser.cpp315
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/request_parser.hpp95
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/server.cpp94
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server/server.hpp69
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/.gitignore11
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/connection.cpp93
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/connection.hpp75
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/header.hpp28
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/io_context_pool.cpp69
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/io_context_pool.hpp57
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/main.cpp46
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/mime_types.cpp46
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/mime_types.hpp27
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/reply.cpp256
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/reply.hpp64
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/request.hpp34
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/request_handler.cpp122
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/request_handler.hpp46
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/request_parser.cpp315
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/request_parser.hpp95
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/server.cpp77
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server2/server.hpp68
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/.gitignore11
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/connection.cpp98
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/connection.hpp78
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/header.hpp28
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/main.cpp46
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/mime_types.cpp46
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/mime_types.hpp27
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/reply.cpp256
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/reply.hpp64
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/request.hpp34
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/request_handler.cpp122
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/request_handler.hpp46
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/request_parser.cpp315
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/request_parser.hpp95
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/server.cpp89
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server3/server.hpp70
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server4/.gitignore11
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server4/file_handler.cpp122
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server4/file_handler.hpp44
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server4/header.hpp28
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server4/main.cpp58
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server4/mime_types.cpp46
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server4/mime_types.hpp27
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server4/reply.cpp256
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server4/reply.hpp64
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server4/request.hpp46
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server4/request_parser.cpp226
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server4/request_parser.hpp78
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server4/server.cpp122
-rw-r--r--3rdparty/asio/src/examples/cpp03/http/server4/server.hpp73
-rw-r--r--3rdparty/asio/src/examples/cpp03/icmp/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/icmp/icmp_header.hpp94
-rw-r--r--3rdparty/asio/src/examples/cpp03/icmp/ipv4_header.hpp102
-rw-r--r--3rdparty/asio/src/examples/cpp03/icmp/ping.cpp161
-rw-r--r--3rdparty/asio/src/examples/cpp03/invocation/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/invocation/prioritised_handlers.cpp162
-rw-r--r--3rdparty/asio/src/examples/cpp03/iostreams/.gitignore11
-rw-r--r--3rdparty/asio/src/examples/cpp03/iostreams/daytime_client.cpp44
-rw-r--r--3rdparty/asio/src/examples/cpp03/iostreams/daytime_server.cpp51
-rw-r--r--3rdparty/asio/src/examples/cpp03/iostreams/http_client.cpp91
-rw-r--r--3rdparty/asio/src/examples/cpp03/local/.gitignore13
-rw-r--r--3rdparty/asio/src/examples/cpp03/local/connect_pair.cpp141
-rw-r--r--3rdparty/asio/src/examples/cpp03/local/iostream_client.cpp62
-rw-r--r--3rdparty/asio/src/examples/cpp03/local/stream_client.cpp61
-rw-r--r--3rdparty/asio/src/examples/cpp03/local/stream_server.cpp141
-rw-r--r--3rdparty/asio/src/examples/cpp03/multicast/.gitignore11
-rw-r--r--3rdparty/asio/src/examples/cpp03/multicast/receiver.cpp93
-rw-r--r--3rdparty/asio/src/examples/cpp03/multicast/sender.cpp99
-rw-r--r--3rdparty/asio/src/examples/cpp03/nonblocking/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/nonblocking/third_party_lib.cpp240
-rw-r--r--3rdparty/asio/src/examples/cpp03/porthopper/.gitignore11
-rw-r--r--3rdparty/asio/src/examples/cpp03/porthopper/client.cpp192
-rw-r--r--3rdparty/asio/src/examples/cpp03/porthopper/protocol.hpp156
-rw-r--r--3rdparty/asio/src/examples/cpp03/porthopper/server.cpp189
-rw-r--r--3rdparty/asio/src/examples/cpp03/serialization/.gitignore11
-rw-r--r--3rdparty/asio/src/examples/cpp03/serialization/client.cpp125
-rw-r--r--3rdparty/asio/src/examples/cpp03/serialization/connection.hpp188
-rw-r--r--3rdparty/asio/src/examples/cpp03/serialization/server.cpp123
-rw-r--r--3rdparty/asio/src/examples/cpp03/serialization/stock.hpp50
-rw-r--r--3rdparty/asio/src/examples/cpp03/services/.gitignore11
-rw-r--r--3rdparty/asio/src/examples/cpp03/services/basic_logger.hpp83
-rw-r--r--3rdparty/asio/src/examples/cpp03/services/daytime_client.cpp97
-rw-r--r--3rdparty/asio/src/examples/cpp03/services/logger.hpp24
-rw-r--r--3rdparty/asio/src/examples/cpp03/services/logger_service.cpp17
-rw-r--r--3rdparty/asio/src/examples/cpp03/services/logger_service.hpp145
-rw-r--r--3rdparty/asio/src/examples/cpp03/socks4/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/socks4/socks4.hpp144
-rw-r--r--3rdparty/asio/src/examples/cpp03/socks4/sync_client.cpp94
-rw-r--r--3rdparty/asio/src/examples/cpp03/spawn/.gitignore12
-rw-r--r--3rdparty/asio/src/examples/cpp03/spawn/echo_server.cpp122
-rw-r--r--3rdparty/asio/src/examples/cpp03/spawn/parallel_grep.cpp89
-rw-r--r--3rdparty/asio/src/examples/cpp03/ssl/.gitignore11
-rw-r--r--3rdparty/asio/src/examples/cpp03/ssl/README8
-rw-r--r--3rdparty/asio/src/examples/cpp03/ssl/ca.pem49
-rw-r--r--3rdparty/asio/src/examples/cpp03/ssl/client.cpp156
-rw-r--r--3rdparty/asio/src/examples/cpp03/ssl/dh2048.pem8
-rw-r--r--3rdparty/asio/src/examples/cpp03/ssl/server.cpp170
-rw-r--r--3rdparty/asio/src/examples/cpp03/ssl/server.pem71
-rw-r--r--3rdparty/asio/src/examples/cpp03/timeouts/.gitignore11
-rw-r--r--3rdparty/asio/src/examples/cpp03/timeouts/async_tcp_client.cpp308
-rw-r--r--3rdparty/asio/src/examples/cpp03/timeouts/blocking_tcp_client.cpp242
-rw-r--r--3rdparty/asio/src/examples/cpp03/timeouts/blocking_udp_client.cpp182
-rw-r--r--3rdparty/asio/src/examples/cpp03/timeouts/server.cpp427
-rw-r--r--3rdparty/asio/src/examples/cpp03/timers/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/timers/tick_count_timer.cpp123
-rw-r--r--3rdparty/asio/src/examples/cpp03/timers/time_t_timer.cpp93
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/daytime1/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/daytime1/client.cpp57
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/daytime2/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/daytime2/server.cpp50
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/daytime3/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/daytime3/server.cpp117
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/daytime4/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/daytime4/client.cpp52
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/daytime5/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/daytime5/server.cpp58
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/daytime6/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/daytime6/server.cpp89
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/daytime7/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/daytime7/server.cpp158
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/daytime_dox.txt502
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/index_dox.txt48
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/timer1/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/timer1/timer.cpp25
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/timer2/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/timer2/timer.cpp30
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/timer3/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/timer3/timer.cpp44
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/timer4/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/timer4/timer.cpp55
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/timer5/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/timer5/timer.cpp81
-rw-r--r--3rdparty/asio/src/examples/cpp03/tutorial/timer_dox.txt383
-rw-r--r--3rdparty/asio/src/examples/cpp03/windows/.gitignore10
-rw-r--r--3rdparty/asio/src/examples/cpp03/windows/transmit_file.cpp171
178 files changed, 0 insertions, 15973 deletions
diff --git a/3rdparty/asio/src/examples/cpp03/Makefile.am b/3rdparty/asio/src/examples/cpp03/Makefile.am
deleted file mode 100644
index adacab88ef6..00000000000
--- a/3rdparty/asio/src/examples/cpp03/Makefile.am
+++ /dev/null
@@ -1,250 +0,0 @@
-AUTOMAKE_OPTIONS = subdir-objects
-
-if SEPARATE_COMPILATION
-noinst_LIBRARIES = libasio.a
-libasio_a_SOURCES = ../../asio.cpp
-if HAVE_OPENSSL
-libasio_a_SOURCES += ../../asio_ssl.cpp
-endif
-LDADD = libasio.a
-endif
-
-noinst_PROGRAMS = \
- allocation/server \
- buffers/reference_counted \
- chat/chat_client \
- chat/chat_server \
- echo/async_tcp_echo_server \
- echo/async_udp_echo_server \
- echo/blocking_tcp_echo_client \
- echo/blocking_tcp_echo_server \
- echo/blocking_udp_echo_client \
- echo/blocking_udp_echo_server \
- http/client/async_client \
- http/client/sync_client \
- http/server/http_server \
- http/server2/http_server \
- http/server3/http_server \
- http/server4/http_server \
- icmp/ping \
- invocation/prioritised_handlers \
- iostreams/daytime_client \
- iostreams/daytime_server \
- iostreams/http_client \
- multicast/receiver \
- multicast/sender \
- nonblocking/third_party_lib \
- porthopper/client \
- porthopper/server \
- services/daytime_client \
- socks4/sync_client \
- timeouts/async_tcp_client \
- timeouts/blocking_tcp_client \
- timeouts/blocking_udp_client \
- timeouts/server \
- timers/time_t_timer \
- tutorial/timer1/timer \
- tutorial/timer2/timer \
- tutorial/timer3/timer \
- tutorial/timer4/timer \
- tutorial/timer5/timer \
- tutorial/daytime1/client \
- tutorial/daytime2/server \
- tutorial/daytime3/server \
- tutorial/daytime4/client \
- tutorial/daytime5/server \
- tutorial/daytime6/server \
- tutorial/daytime7/server
-
-if !WINDOWS_TARGET
-noinst_PROGRAMS += \
- chat/posix_chat_client \
- fork/daemon \
- fork/process_per_connection \
- local/connect_pair \
- local/iostream_client \
- local/stream_server \
- local/stream_client
-endif
-
-if WINDOWS_TARGET
-noinst_PROGRAMS += \
- windows/transmit_file
-endif
-
-if HAVE_OPENSSL
-noinst_PROGRAMS += \
- ssl/client \
- ssl/server
-endif
-
-if HAVE_BOOST_COROUTINE
-noinst_PROGRAMS += \
- spawn/echo_server \
- spawn/parallel_grep
-endif
-
-noinst_HEADERS = \
- chat/chat_message.hpp \
- services/basic_logger.hpp \
- services/logger.hpp \
- services/logger_service.hpp
-
-AM_CXXFLAGS = -I$(srcdir)/../../../include
-
-allocation_server_SOURCES = allocation/server.cpp
-buffers_reference_counted_SOURCES = buffers/reference_counted.cpp
-chat_chat_client_SOURCES = chat/chat_client.cpp
-chat_chat_server_SOURCES = chat/chat_server.cpp
-echo_async_tcp_echo_server_SOURCES = echo/async_tcp_echo_server.cpp
-echo_async_udp_echo_server_SOURCES = echo/async_udp_echo_server.cpp
-echo_blocking_tcp_echo_client_SOURCES = echo/blocking_tcp_echo_client.cpp
-echo_blocking_tcp_echo_server_SOURCES = echo/blocking_tcp_echo_server.cpp
-echo_blocking_udp_echo_client_SOURCES = echo/blocking_udp_echo_client.cpp
-echo_blocking_udp_echo_server_SOURCES = echo/blocking_udp_echo_server.cpp
-http_client_async_client_SOURCES = http/client/async_client.cpp
-http_client_sync_client_SOURCES = http/client/sync_client.cpp
-http_server_http_server_SOURCES = \
- http/server/connection.cpp \
- http/server/connection_manager.cpp \
- http/server/main.cpp \
- http/server/mime_types.cpp \
- http/server/reply.cpp \
- http/server/request_handler.cpp \
- http/server/request_parser.cpp \
- http/server/server.cpp
-http_server2_http_server_SOURCES = \
- http/server2/connection.cpp \
- http/server2/io_context_pool.cpp \
- http/server2/main.cpp \
- http/server2/mime_types.cpp \
- http/server2/reply.cpp \
- http/server2/request_handler.cpp \
- http/server2/request_parser.cpp \
- http/server2/server.cpp
-http_server3_http_server_SOURCES = \
- http/server3/connection.cpp \
- http/server3/main.cpp \
- http/server3/mime_types.cpp \
- http/server3/reply.cpp \
- http/server3/request_handler.cpp \
- http/server3/request_parser.cpp \
- http/server3/server.cpp
-http_server4_http_server_SOURCES = \
- http/server4/file_handler.cpp \
- http/server4/main.cpp \
- http/server4/mime_types.cpp \
- http/server4/reply.cpp \
- http/server4/request_parser.cpp \
- http/server4/server.cpp
-icmp_ping_SOURCES = icmp/ping.cpp
-invocation_prioritised_handlers_SOURCES = invocation/prioritised_handlers.cpp
-iostreams_daytime_client_SOURCES = iostreams/daytime_client.cpp
-iostreams_daytime_server_SOURCES = iostreams/daytime_server.cpp
-iostreams_http_client_SOURCES = iostreams/http_client.cpp
-multicast_receiver_SOURCES = multicast/receiver.cpp
-multicast_sender_SOURCES = multicast/sender.cpp
-nonblocking_third_party_lib_SOURCES = nonblocking/third_party_lib.cpp
-porthopper_client_SOURCES = porthopper/client.cpp
-porthopper_server_SOURCES = porthopper/server.cpp
-services_daytime_client_SOURCES = \
- services/daytime_client.cpp \
- services/logger_service.cpp
-socks4_sync_client_SOURCES = socks4/sync_client.cpp
-timeouts_async_tcp_client_SOURCES = timeouts/async_tcp_client.cpp
-timeouts_blocking_tcp_client_SOURCES = timeouts/blocking_tcp_client.cpp
-timeouts_blocking_udp_client_SOURCES = timeouts/blocking_udp_client.cpp
-timeouts_server_SOURCES = timeouts/server.cpp
-timers_time_t_timer_SOURCES = timers/time_t_timer.cpp
-tutorial_timer1_timer_SOURCES = tutorial/timer1/timer.cpp
-tutorial_timer2_timer_SOURCES = tutorial/timer2/timer.cpp
-tutorial_timer3_timer_SOURCES = tutorial/timer3/timer.cpp
-tutorial_timer4_timer_SOURCES = tutorial/timer4/timer.cpp
-tutorial_timer5_timer_SOURCES = tutorial/timer5/timer.cpp
-tutorial_daytime1_client_SOURCES = tutorial/daytime1/client.cpp
-tutorial_daytime2_server_SOURCES = tutorial/daytime2/server.cpp
-tutorial_daytime3_server_SOURCES = tutorial/daytime3/server.cpp
-tutorial_daytime4_client_SOURCES = tutorial/daytime4/client.cpp
-tutorial_daytime5_server_SOURCES = tutorial/daytime5/server.cpp
-tutorial_daytime6_server_SOURCES = tutorial/daytime6/server.cpp
-tutorial_daytime7_server_SOURCES = tutorial/daytime7/server.cpp
-
-if !WINDOWS_TARGET
-chat_posix_chat_client_SOURCES = chat/posix_chat_client.cpp
-fork_daemon_SOURCES = fork/daemon.cpp
-fork_process_per_connection_SOURCES = fork/process_per_connection.cpp
-local_connect_pair_SOURCES = local/connect_pair.cpp
-local_iostream_client_SOURCES = local/iostream_client.cpp
-local_stream_server_SOURCES = local/stream_server.cpp
-local_stream_client_SOURCES = local/stream_client.cpp
-endif
-
-if WINDOWS_TARGET
-windows_transmit_file_SOURCES = windows/transmit_file.cpp
-endif
-
-if HAVE_OPENSSL
-ssl_client_SOURCES = ssl/client.cpp
-ssl_server_SOURCES = ssl/server.cpp
-endif
-
-if HAVE_BOOST_COROUTINE
-spawn_echo_server_SOURCES = spawn/echo_server.cpp
-spawn_echo_server_LDADD = $(LDADD) -lboost_coroutine -lboost_context -lboost_thread -lboost_chrono -lboost_system
-spawn_parallel_grep_SOURCES = spawn/parallel_grep.cpp
-spawn_parallel_grep_LDADD = $(LDADD) -lboost_coroutine -lboost_context -lboost_thread -lboost_chrono -lboost_system
-endif
-
-EXTRA_DIST = \
- http/server/connection.hpp \
- http/server/connection_manager.hpp \
- http/server/header.hpp \
- http/server/mime_types.hpp \
- http/server/reply.hpp \
- http/server/request.hpp \
- http/server/request_handler.hpp \
- http/server/request_parser.hpp \
- http/server/server.hpp \
- http/server2/connection.hpp \
- http/server2/io_context_pool.hpp \
- http/server2/header.hpp \
- http/server2/mime_types.hpp \
- http/server2/reply.hpp \
- http/server2/request.hpp \
- http/server2/request_handler.hpp \
- http/server2/request_parser.hpp \
- http/server2/server.hpp \
- http/server3/connection.hpp \
- http/server3/header.hpp \
- http/server3/mime_types.hpp \
- http/server3/reply.hpp \
- http/server3/request.hpp \
- http/server3/request_handler.hpp \
- http/server3/request_parser.hpp \
- http/server3/server.hpp \
- http/server4/file_handler.hpp \
- http/server4/header.hpp \
- http/server4/mime_types.hpp \
- http/server4/reply.hpp \
- http/server4/request.hpp \
- http/server4/request_parser.hpp \
- http/server4/server.hpp \
- icmp/icmp_header.hpp \
- icmp/ipv4_header.hpp \
- porthopper/protocol.hpp \
- serialization/client.cpp \
- serialization/server.cpp \
- serialization/connection.hpp \
- serialization/stock.hpp \
- services/basic_logger.hpp \
- services/logger.hpp \
- services/logger_service.hpp \
- socks4/socks4.hpp \
- ssl/README \
- ssl/ca.pem \
- ssl/server.pem \
- ssl/dh2048.pem \
- timers/tick_count_timer.cpp
-
-MAINTAINERCLEANFILES = \
- $(srcdir)/Makefile.in
diff --git a/3rdparty/asio/src/examples/cpp03/allocation/.gitignore b/3rdparty/asio/src/examples/cpp03/allocation/.gitignore
deleted file mode 100644
index 180ba886e58..00000000000
--- a/3rdparty/asio/src/examples/cpp03/allocation/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-server
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/allocation/server.cpp b/3rdparty/asio/src/examples/cpp03/allocation/server.cpp
deleted file mode 100644
index e26eb564918..00000000000
--- a/3rdparty/asio/src/examples/cpp03/allocation/server.cpp
+++ /dev/null
@@ -1,238 +0,0 @@
-//
-// server.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <cstdlib>
-#include <iostream>
-#include <boost/aligned_storage.hpp>
-#include <boost/array.hpp>
-#include <boost/bind.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include <boost/noncopyable.hpp>
-#include <boost/shared_ptr.hpp>
-#include "asio.hpp"
-
-using asio::ip::tcp;
-
-// Class to manage the memory to be used for handler-based custom allocation.
-// It contains a single block of memory which may be returned for allocation
-// requests. If the memory is in use when an allocation request is made, the
-// allocator delegates allocation to the global heap.
-class handler_allocator
- : private boost::noncopyable
-{
-public:
- handler_allocator()
- : in_use_(false)
- {
- }
-
- void* allocate(std::size_t size)
- {
- if (!in_use_ && size < storage_.size)
- {
- in_use_ = true;
- return storage_.address();
- }
- else
- {
- return ::operator new(size);
- }
- }
-
- void deallocate(void* pointer)
- {
- if (pointer == storage_.address())
- {
- in_use_ = false;
- }
- else
- {
- ::operator delete(pointer);
- }
- }
-
-private:
- // Storage space used for handler-based custom memory allocation.
- boost::aligned_storage<1024> storage_;
-
- // Whether the handler-based custom allocation storage has been used.
- bool in_use_;
-};
-
-// Wrapper class template for handler objects to allow handler memory
-// allocation to be customised. Calls to operator() are forwarded to the
-// encapsulated handler.
-template <typename Handler>
-class custom_alloc_handler
-{
-public:
- custom_alloc_handler(handler_allocator& a, Handler h)
- : allocator_(a),
- handler_(h)
- {
- }
-
- template <typename Arg1>
- void operator()(Arg1 arg1)
- {
- handler_(arg1);
- }
-
- template <typename Arg1, typename Arg2>
- void operator()(Arg1 arg1, Arg2 arg2)
- {
- handler_(arg1, arg2);
- }
-
- friend void* asio_handler_allocate(std::size_t size,
- custom_alloc_handler<Handler>* this_handler)
- {
- return this_handler->allocator_.allocate(size);
- }
-
- friend void asio_handler_deallocate(void* pointer, std::size_t /*size*/,
- custom_alloc_handler<Handler>* this_handler)
- {
- this_handler->allocator_.deallocate(pointer);
- }
-
-private:
- handler_allocator& allocator_;
- Handler handler_;
-};
-
-// Helper function to wrap a handler object to add custom allocation.
-template <typename Handler>
-inline custom_alloc_handler<Handler> make_custom_alloc_handler(
- handler_allocator& a, Handler h)
-{
- return custom_alloc_handler<Handler>(a, h);
-}
-
-class session
- : public boost::enable_shared_from_this<session>
-{
-public:
- session(asio::io_context& io_context)
- : socket_(io_context)
- {
- }
-
- tcp::socket& socket()
- {
- return socket_;
- }
-
- void start()
- {
- socket_.async_read_some(asio::buffer(data_),
- make_custom_alloc_handler(allocator_,
- boost::bind(&session::handle_read,
- shared_from_this(),
- asio::placeholders::error,
- asio::placeholders::bytes_transferred)));
- }
-
- void handle_read(const asio::error_code& error,
- size_t bytes_transferred)
- {
- if (!error)
- {
- asio::async_write(socket_,
- asio::buffer(data_, bytes_transferred),
- make_custom_alloc_handler(allocator_,
- boost::bind(&session::handle_write,
- shared_from_this(),
- asio::placeholders::error)));
- }
- }
-
- void handle_write(const asio::error_code& error)
- {
- if (!error)
- {
- socket_.async_read_some(asio::buffer(data_),
- make_custom_alloc_handler(allocator_,
- boost::bind(&session::handle_read,
- shared_from_this(),
- asio::placeholders::error,
- asio::placeholders::bytes_transferred)));
- }
- }
-
-private:
- // The socket used to communicate with the client.
- tcp::socket socket_;
-
- // Buffer used to store data received from the client.
- boost::array<char, 1024> data_;
-
- // The allocator to use for handler-based custom memory allocation.
- handler_allocator allocator_;
-};
-
-typedef boost::shared_ptr<session> session_ptr;
-
-class server
-{
-public:
- server(asio::io_context& io_context, short port)
- : io_context_(io_context),
- acceptor_(io_context, tcp::endpoint(tcp::v4(), port))
- {
- session_ptr new_session(new session(io_context_));
- acceptor_.async_accept(new_session->socket(),
- boost::bind(&server::handle_accept, this, new_session,
- asio::placeholders::error));
- }
-
- void handle_accept(session_ptr new_session,
- const asio::error_code& error)
- {
- if (!error)
- {
- new_session->start();
- }
-
- new_session.reset(new session(io_context_));
- acceptor_.async_accept(new_session->socket(),
- boost::bind(&server::handle_accept, this, new_session,
- asio::placeholders::error));
- }
-
-private:
- asio::io_context& io_context_;
- tcp::acceptor acceptor_;
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: server <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- using namespace std; // For atoi.
- server s(io_context, atoi(argv[1]));
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/buffers/.gitignore b/3rdparty/asio/src/examples/cpp03/buffers/.gitignore
deleted file mode 100644
index abe68c665f5..00000000000
--- a/3rdparty/asio/src/examples/cpp03/buffers/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-reference_counted
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/buffers/reference_counted.cpp b/3rdparty/asio/src/examples/cpp03/buffers/reference_counted.cpp
deleted file mode 100644
index 9f7455cdbbd..00000000000
--- a/3rdparty/asio/src/examples/cpp03/buffers/reference_counted.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-//
-// reference_counted.cpp
-// ~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <asio.hpp>
-#include <boost/bind.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include <boost/shared_ptr.hpp>
-#include <iostream>
-#include <vector>
-
-using asio::ip::tcp;
-
-// A reference-counted non-modifiable buffer class.
-class shared_const_buffer
-{
-public:
- // Construct from a std::string.
- explicit shared_const_buffer(const std::string& data)
- : data_(new std::vector<char>(data.begin(), data.end())),
- buffer_(asio::buffer(*data_))
- {
- }
-
- // Implement the ConstBufferSequence requirements.
- typedef asio::const_buffer value_type;
- typedef const asio::const_buffer* const_iterator;
- const asio::const_buffer* begin() const { return &buffer_; }
- const asio::const_buffer* end() const { return &buffer_ + 1; }
-
-private:
- boost::shared_ptr<std::vector<char> > data_;
- asio::const_buffer buffer_;
-};
-
-class session
- : public boost::enable_shared_from_this<session>
-{
-public:
- session(asio::io_context& io_context)
- : socket_(io_context)
- {
- }
-
- tcp::socket& socket()
- {
- return socket_;
- }
-
- void start()
- {
- using namespace std; // For time_t, time and ctime.
- time_t now = time(0);
- shared_const_buffer buffer(ctime(&now));
- asio::async_write(socket_, buffer,
- boost::bind(&session::handle_write, shared_from_this()));
- }
-
- void handle_write()
- {
- }
-
-private:
- // The socket used to communicate with the client.
- tcp::socket socket_;
-};
-
-typedef boost::shared_ptr<session> session_ptr;
-
-class server
-{
-public:
- server(asio::io_context& io_context, short port)
- : io_context_(io_context),
- acceptor_(io_context, tcp::endpoint(tcp::v4(), port))
- {
- session_ptr new_session(new session(io_context_));
- acceptor_.async_accept(new_session->socket(),
- boost::bind(&server::handle_accept, this, new_session,
- asio::placeholders::error));
- }
-
- void handle_accept(session_ptr new_session,
- const asio::error_code& error)
- {
- if (!error)
- {
- new_session->start();
- }
-
- new_session.reset(new session(io_context_));
- acceptor_.async_accept(new_session->socket(),
- boost::bind(&server::handle_accept, this, new_session,
- asio::placeholders::error));
- }
-
-private:
- asio::io_context& io_context_;
- tcp::acceptor acceptor_;
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: reference_counted <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- using namespace std; // For atoi.
- server s(io_context, atoi(argv[1]));
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/chat/.gitignore b/3rdparty/asio/src/examples/cpp03/chat/.gitignore
deleted file mode 100644
index 0882fa6ced3..00000000000
--- a/3rdparty/asio/src/examples/cpp03/chat/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*_server
-*_client
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/chat/chat_client.cpp b/3rdparty/asio/src/examples/cpp03/chat/chat_client.cpp
deleted file mode 100644
index 9dd16145b81..00000000000
--- a/3rdparty/asio/src/examples/cpp03/chat/chat_client.cpp
+++ /dev/null
@@ -1,177 +0,0 @@
-//
-// chat_client.cpp
-// ~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <cstdlib>
-#include <deque>
-#include <iostream>
-#include <boost/bind.hpp>
-#include "asio.hpp"
-#include "chat_message.hpp"
-
-using asio::ip::tcp;
-
-typedef std::deque<chat_message> chat_message_queue;
-
-class chat_client
-{
-public:
- chat_client(asio::io_context& io_context,
- const tcp::resolver::results_type& endpoints)
- : io_context_(io_context),
- socket_(io_context)
- {
- asio::async_connect(socket_, endpoints,
- boost::bind(&chat_client::handle_connect, this,
- asio::placeholders::error));
- }
-
- void write(const chat_message& msg)
- {
- asio::post(io_context_,
- boost::bind(&chat_client::do_write, this, msg));
- }
-
- void close()
- {
- asio::post(io_context_,
- boost::bind(&chat_client::do_close, this));
- }
-
-private:
-
- void handle_connect(const asio::error_code& error)
- {
- if (!error)
- {
- asio::async_read(socket_,
- asio::buffer(read_msg_.data(), chat_message::header_length),
- boost::bind(&chat_client::handle_read_header, this,
- asio::placeholders::error));
- }
- }
-
- void handle_read_header(const asio::error_code& error)
- {
- if (!error && read_msg_.decode_header())
- {
- asio::async_read(socket_,
- asio::buffer(read_msg_.body(), read_msg_.body_length()),
- boost::bind(&chat_client::handle_read_body, this,
- asio::placeholders::error));
- }
- else
- {
- do_close();
- }
- }
-
- void handle_read_body(const asio::error_code& error)
- {
- if (!error)
- {
- std::cout.write(read_msg_.body(), read_msg_.body_length());
- std::cout << "\n";
- asio::async_read(socket_,
- asio::buffer(read_msg_.data(), chat_message::header_length),
- boost::bind(&chat_client::handle_read_header, this,
- asio::placeholders::error));
- }
- else
- {
- do_close();
- }
- }
-
- void do_write(chat_message msg)
- {
- bool write_in_progress = !write_msgs_.empty();
- write_msgs_.push_back(msg);
- if (!write_in_progress)
- {
- asio::async_write(socket_,
- asio::buffer(write_msgs_.front().data(),
- write_msgs_.front().length()),
- boost::bind(&chat_client::handle_write, this,
- asio::placeholders::error));
- }
- }
-
- void handle_write(const asio::error_code& error)
- {
- if (!error)
- {
- write_msgs_.pop_front();
- if (!write_msgs_.empty())
- {
- asio::async_write(socket_,
- asio::buffer(write_msgs_.front().data(),
- write_msgs_.front().length()),
- boost::bind(&chat_client::handle_write, this,
- asio::placeholders::error));
- }
- }
- else
- {
- do_close();
- }
- }
-
- void do_close()
- {
- socket_.close();
- }
-
-private:
- asio::io_context& io_context_;
- tcp::socket socket_;
- chat_message read_msg_;
- chat_message_queue write_msgs_;
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 3)
- {
- std::cerr << "Usage: chat_client <host> <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- tcp::resolver resolver(io_context);
- tcp::resolver::results_type endpoints = resolver.resolve(argv[1], argv[2]);
-
- chat_client c(io_context, endpoints);
-
- asio::thread t(boost::bind(&asio::io_context::run, &io_context));
-
- char line[chat_message::max_body_length + 1];
- while (std::cin.getline(line, chat_message::max_body_length + 1))
- {
- using namespace std; // For strlen and memcpy.
- chat_message msg;
- msg.body_length(strlen(line));
- memcpy(msg.body(), line, msg.body_length());
- msg.encode_header();
- c.write(msg);
- }
-
- c.close();
- t.join();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/chat/chat_message.hpp b/3rdparty/asio/src/examples/cpp03/chat/chat_message.hpp
deleted file mode 100644
index ceeef2f03f8..00000000000
--- a/3rdparty/asio/src/examples/cpp03/chat/chat_message.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-//
-// chat_message.hpp
-// ~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef CHAT_MESSAGE_HPP
-#define CHAT_MESSAGE_HPP
-
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-
-class chat_message
-{
-public:
- enum { header_length = 4 };
- enum { max_body_length = 512 };
-
- chat_message()
- : body_length_(0)
- {
- }
-
- const char* data() const
- {
- return data_;
- }
-
- char* data()
- {
- return data_;
- }
-
- size_t length() const
- {
- return header_length + body_length_;
- }
-
- const char* body() const
- {
- return data_ + header_length;
- }
-
- char* body()
- {
- return data_ + header_length;
- }
-
- size_t body_length() const
- {
- return body_length_;
- }
-
- void body_length(size_t new_length)
- {
- body_length_ = new_length;
- if (body_length_ > max_body_length)
- body_length_ = max_body_length;
- }
-
- bool decode_header()
- {
- using namespace std; // For strncat and atoi.
- char header[header_length + 1] = "";
- strncat(header, data_, header_length);
- body_length_ = atoi(header);
- if (body_length_ > max_body_length)
- {
- body_length_ = 0;
- return false;
- }
- return true;
- }
-
- void encode_header()
- {
- using namespace std; // For sprintf and memcpy.
- char header[header_length + 1] = "";
- sprintf(header, "%4d", static_cast<int>(body_length_));
- memcpy(data_, header, header_length);
- }
-
-private:
- char data_[header_length + max_body_length];
- size_t body_length_;
-};
-
-#endif // CHAT_MESSAGE_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/chat/chat_server.cpp b/3rdparty/asio/src/examples/cpp03/chat/chat_server.cpp
deleted file mode 100644
index 902515b3b54..00000000000
--- a/3rdparty/asio/src/examples/cpp03/chat/chat_server.cpp
+++ /dev/null
@@ -1,247 +0,0 @@
-//
-// chat_server.cpp
-// ~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <algorithm>
-#include <cstdlib>
-#include <deque>
-#include <iostream>
-#include <list>
-#include <set>
-#include <boost/bind.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include "asio.hpp"
-#include "chat_message.hpp"
-
-using asio::ip::tcp;
-
-//----------------------------------------------------------------------
-
-typedef std::deque<chat_message> chat_message_queue;
-
-//----------------------------------------------------------------------
-
-class chat_participant
-{
-public:
- virtual ~chat_participant() {}
- virtual void deliver(const chat_message& msg) = 0;
-};
-
-typedef boost::shared_ptr<chat_participant> chat_participant_ptr;
-
-//----------------------------------------------------------------------
-
-class chat_room
-{
-public:
- void join(chat_participant_ptr participant)
- {
- participants_.insert(participant);
- std::for_each(recent_msgs_.begin(), recent_msgs_.end(),
- boost::bind(&chat_participant::deliver, participant, _1));
- }
-
- void leave(chat_participant_ptr participant)
- {
- participants_.erase(participant);
- }
-
- void deliver(const chat_message& msg)
- {
- recent_msgs_.push_back(msg);
- while (recent_msgs_.size() > max_recent_msgs)
- recent_msgs_.pop_front();
-
- std::for_each(participants_.begin(), participants_.end(),
- boost::bind(&chat_participant::deliver, _1, boost::ref(msg)));
- }
-
-private:
- std::set<chat_participant_ptr> participants_;
- enum { max_recent_msgs = 100 };
- chat_message_queue recent_msgs_;
-};
-
-//----------------------------------------------------------------------
-
-class chat_session
- : public chat_participant,
- public boost::enable_shared_from_this<chat_session>
-{
-public:
- chat_session(asio::io_context& io_context, chat_room& room)
- : socket_(io_context),
- room_(room)
- {
- }
-
- tcp::socket& socket()
- {
- return socket_;
- }
-
- void start()
- {
- room_.join(shared_from_this());
- asio::async_read(socket_,
- asio::buffer(read_msg_.data(), chat_message::header_length),
- boost::bind(
- &chat_session::handle_read_header, shared_from_this(),
- asio::placeholders::error));
- }
-
- void deliver(const chat_message& msg)
- {
- bool write_in_progress = !write_msgs_.empty();
- write_msgs_.push_back(msg);
- if (!write_in_progress)
- {
- asio::async_write(socket_,
- asio::buffer(write_msgs_.front().data(),
- write_msgs_.front().length()),
- boost::bind(&chat_session::handle_write, shared_from_this(),
- asio::placeholders::error));
- }
- }
-
- void handle_read_header(const asio::error_code& error)
- {
- if (!error && read_msg_.decode_header())
- {
- asio::async_read(socket_,
- asio::buffer(read_msg_.body(), read_msg_.body_length()),
- boost::bind(&chat_session::handle_read_body, shared_from_this(),
- asio::placeholders::error));
- }
- else
- {
- room_.leave(shared_from_this());
- }
- }
-
- void handle_read_body(const asio::error_code& error)
- {
- if (!error)
- {
- room_.deliver(read_msg_);
- asio::async_read(socket_,
- asio::buffer(read_msg_.data(), chat_message::header_length),
- boost::bind(&chat_session::handle_read_header, shared_from_this(),
- asio::placeholders::error));
- }
- else
- {
- room_.leave(shared_from_this());
- }
- }
-
- void handle_write(const asio::error_code& error)
- {
- if (!error)
- {
- write_msgs_.pop_front();
- if (!write_msgs_.empty())
- {
- asio::async_write(socket_,
- asio::buffer(write_msgs_.front().data(),
- write_msgs_.front().length()),
- boost::bind(&chat_session::handle_write, shared_from_this(),
- asio::placeholders::error));
- }
- }
- else
- {
- room_.leave(shared_from_this());
- }
- }
-
-private:
- tcp::socket socket_;
- chat_room& room_;
- chat_message read_msg_;
- chat_message_queue write_msgs_;
-};
-
-typedef boost::shared_ptr<chat_session> chat_session_ptr;
-
-//----------------------------------------------------------------------
-
-class chat_server
-{
-public:
- chat_server(asio::io_context& io_context,
- const tcp::endpoint& endpoint)
- : io_context_(io_context),
- acceptor_(io_context, endpoint)
- {
- start_accept();
- }
-
- void start_accept()
- {
- chat_session_ptr new_session(new chat_session(io_context_, room_));
- acceptor_.async_accept(new_session->socket(),
- boost::bind(&chat_server::handle_accept, this, new_session,
- asio::placeholders::error));
- }
-
- void handle_accept(chat_session_ptr session,
- const asio::error_code& error)
- {
- if (!error)
- {
- session->start();
- }
-
- start_accept();
- }
-
-private:
- asio::io_context& io_context_;
- tcp::acceptor acceptor_;
- chat_room room_;
-};
-
-typedef boost::shared_ptr<chat_server> chat_server_ptr;
-typedef std::list<chat_server_ptr> chat_server_list;
-
-//----------------------------------------------------------------------
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc < 2)
- {
- std::cerr << "Usage: chat_server <port> [<port> ...]\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- chat_server_list servers;
- for (int i = 1; i < argc; ++i)
- {
- using namespace std; // For atoi.
- tcp::endpoint endpoint(tcp::v4(), atoi(argv[i]));
- chat_server_ptr server(new chat_server(io_context, endpoint));
- servers.push_back(server);
- }
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/chat/posix_chat_client.cpp b/3rdparty/asio/src/examples/cpp03/chat/posix_chat_client.cpp
deleted file mode 100644
index 91428825aad..00000000000
--- a/3rdparty/asio/src/examples/cpp03/chat/posix_chat_client.cpp
+++ /dev/null
@@ -1,204 +0,0 @@
-//
-// posix_chat_client.cpp
-// ~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <cstdlib>
-#include <cstring>
-#include <iostream>
-#include <boost/array.hpp>
-#include <boost/bind.hpp>
-#include "asio.hpp"
-#include "chat_message.hpp"
-
-#if defined(ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
-
-using asio::ip::tcp;
-namespace posix = asio::posix;
-
-class posix_chat_client
-{
-public:
- posix_chat_client(asio::io_context& io_context,
- const tcp::resolver::results_type& endpoints)
- : socket_(io_context),
- input_(io_context, ::dup(STDIN_FILENO)),
- output_(io_context, ::dup(STDOUT_FILENO)),
- input_buffer_(chat_message::max_body_length)
- {
- asio::async_connect(socket_, endpoints,
- boost::bind(&posix_chat_client::handle_connect, this,
- asio::placeholders::error));
- }
-
-private:
-
- void handle_connect(const asio::error_code& error)
- {
- if (!error)
- {
- // Read the fixed-length header of the next message from the server.
- asio::async_read(socket_,
- asio::buffer(read_msg_.data(), chat_message::header_length),
- boost::bind(&posix_chat_client::handle_read_header, this,
- asio::placeholders::error));
-
- // Read a line of input entered by the user.
- asio::async_read_until(input_, input_buffer_, '\n',
- boost::bind(&posix_chat_client::handle_read_input, this,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
- }
-
- void handle_read_header(const asio::error_code& error)
- {
- if (!error && read_msg_.decode_header())
- {
- // Read the variable-length body of the message from the server.
- asio::async_read(socket_,
- asio::buffer(read_msg_.body(), read_msg_.body_length()),
- boost::bind(&posix_chat_client::handle_read_body, this,
- asio::placeholders::error));
- }
- else
- {
- close();
- }
- }
-
- void handle_read_body(const asio::error_code& error)
- {
- if (!error)
- {
- // Write out the message we just received, terminated by a newline.
- static char eol[] = { '\n' };
- boost::array<asio::const_buffer, 2> buffers = {{
- asio::buffer(read_msg_.body(), read_msg_.body_length()),
- asio::buffer(eol) }};
- asio::async_write(output_, buffers,
- boost::bind(&posix_chat_client::handle_write_output, this,
- asio::placeholders::error));
- }
- else
- {
- close();
- }
- }
-
- void handle_write_output(const asio::error_code& error)
- {
- if (!error)
- {
- // Read the fixed-length header of the next message from the server.
- asio::async_read(socket_,
- asio::buffer(read_msg_.data(), chat_message::header_length),
- boost::bind(&posix_chat_client::handle_read_header, this,
- asio::placeholders::error));
- }
- else
- {
- close();
- }
- }
-
- void handle_read_input(const asio::error_code& error,
- std::size_t length)
- {
- if (!error)
- {
- // Write the message (minus the newline) to the server.
- write_msg_.body_length(length - 1);
- input_buffer_.sgetn(write_msg_.body(), length - 1);
- input_buffer_.consume(1); // Remove newline from input.
- write_msg_.encode_header();
- asio::async_write(socket_,
- asio::buffer(write_msg_.data(), write_msg_.length()),
- boost::bind(&posix_chat_client::handle_write, this,
- asio::placeholders::error));
- }
- else if (error == asio::error::not_found)
- {
- // Didn't get a newline. Send whatever we have.
- write_msg_.body_length(input_buffer_.size());
- input_buffer_.sgetn(write_msg_.body(), input_buffer_.size());
- write_msg_.encode_header();
- asio::async_write(socket_,
- asio::buffer(write_msg_.data(), write_msg_.length()),
- boost::bind(&posix_chat_client::handle_write, this,
- asio::placeholders::error));
- }
- else
- {
- close();
- }
- }
-
- void handle_write(const asio::error_code& error)
- {
- if (!error)
- {
- // Read a line of input entered by the user.
- asio::async_read_until(input_, input_buffer_, '\n',
- boost::bind(&posix_chat_client::handle_read_input, this,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
- else
- {
- close();
- }
- }
-
- void close()
- {
- // Cancel all outstanding asynchronous operations.
- socket_.close();
- input_.close();
- output_.close();
- }
-
-private:
- tcp::socket socket_;
- posix::stream_descriptor input_;
- posix::stream_descriptor output_;
- chat_message read_msg_;
- chat_message write_msg_;
- asio::streambuf input_buffer_;
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 3)
- {
- std::cerr << "Usage: posix_chat_client <host> <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- tcp::resolver resolver(io_context);
- tcp::resolver::results_type endpoints = resolver.resolve(argv[1], argv[2]);
-
- posix_chat_client c(io_context, endpoints);
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
-
-#else // defined(ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
-int main() {}
-#endif // defined(ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
diff --git a/3rdparty/asio/src/examples/cpp03/echo/.gitignore b/3rdparty/asio/src/examples/cpp03/echo/.gitignore
deleted file mode 100644
index 0882fa6ced3..00000000000
--- a/3rdparty/asio/src/examples/cpp03/echo/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*_server
-*_client
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/echo/async_tcp_echo_server.cpp b/3rdparty/asio/src/examples/cpp03/echo/async_tcp_echo_server.cpp
deleted file mode 100644
index c26136e89b5..00000000000
--- a/3rdparty/asio/src/examples/cpp03/echo/async_tcp_echo_server.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-//
-// async_tcp_echo_server.cpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <cstdlib>
-#include <iostream>
-#include <boost/bind.hpp>
-#include "asio.hpp"
-
-using asio::ip::tcp;
-
-class session
-{
-public:
- session(asio::io_context& io_context)
- : socket_(io_context)
- {
- }
-
- tcp::socket& socket()
- {
- return socket_;
- }
-
- void start()
- {
- socket_.async_read_some(asio::buffer(data_, max_length),
- boost::bind(&session::handle_read, this,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
-
-private:
- void handle_read(const asio::error_code& error,
- size_t bytes_transferred)
- {
- if (!error)
- {
- asio::async_write(socket_,
- asio::buffer(data_, bytes_transferred),
- boost::bind(&session::handle_write, this,
- asio::placeholders::error));
- }
- else
- {
- delete this;
- }
- }
-
- void handle_write(const asio::error_code& error)
- {
- if (!error)
- {
- socket_.async_read_some(asio::buffer(data_, max_length),
- boost::bind(&session::handle_read, this,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
- else
- {
- delete this;
- }
- }
-
- tcp::socket socket_;
- enum { max_length = 1024 };
- char data_[max_length];
-};
-
-class server
-{
-public:
- server(asio::io_context& io_context, short port)
- : io_context_(io_context),
- acceptor_(io_context, tcp::endpoint(tcp::v4(), port))
- {
- start_accept();
- }
-
-private:
- void start_accept()
- {
- session* new_session = new session(io_context_);
- acceptor_.async_accept(new_session->socket(),
- boost::bind(&server::handle_accept, this, new_session,
- asio::placeholders::error));
- }
-
- void handle_accept(session* new_session,
- const asio::error_code& error)
- {
- if (!error)
- {
- new_session->start();
- }
- else
- {
- delete new_session;
- }
-
- start_accept();
- }
-
- asio::io_context& io_context_;
- tcp::acceptor acceptor_;
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: async_tcp_echo_server <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- using namespace std; // For atoi.
- server s(io_context, atoi(argv[1]));
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/echo/async_udp_echo_server.cpp b/3rdparty/asio/src/examples/cpp03/echo/async_udp_echo_server.cpp
deleted file mode 100644
index 851c46b0803..00000000000
--- a/3rdparty/asio/src/examples/cpp03/echo/async_udp_echo_server.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-//
-// async_udp_echo_server.cpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <cstdlib>
-#include <iostream>
-#include <boost/bind.hpp>
-#include "asio.hpp"
-
-using asio::ip::udp;
-
-class server
-{
-public:
- server(asio::io_context& io_context, short port)
- : socket_(io_context, udp::endpoint(udp::v4(), port))
- {
- socket_.async_receive_from(
- asio::buffer(data_, max_length), sender_endpoint_,
- boost::bind(&server::handle_receive_from, this,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
-
- void handle_receive_from(const asio::error_code& error,
- size_t bytes_recvd)
- {
- if (!error && bytes_recvd > 0)
- {
- socket_.async_send_to(
- asio::buffer(data_, bytes_recvd), sender_endpoint_,
- boost::bind(&server::handle_send_to, this,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
- else
- {
- socket_.async_receive_from(
- asio::buffer(data_, max_length), sender_endpoint_,
- boost::bind(&server::handle_receive_from, this,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
- }
-
- void handle_send_to(const asio::error_code& /*error*/,
- size_t /*bytes_sent*/)
- {
- socket_.async_receive_from(
- asio::buffer(data_, max_length), sender_endpoint_,
- boost::bind(&server::handle_receive_from, this,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
-
-private:
- udp::socket socket_;
- udp::endpoint sender_endpoint_;
- enum { max_length = 1024 };
- char data_[max_length];
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: async_udp_echo_server <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- using namespace std; // For atoi.
- server s(io_context, atoi(argv[1]));
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/echo/blocking_tcp_echo_client.cpp b/3rdparty/asio/src/examples/cpp03/echo/blocking_tcp_echo_client.cpp
deleted file mode 100644
index 224b9dbb1b2..00000000000
--- a/3rdparty/asio/src/examples/cpp03/echo/blocking_tcp_echo_client.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// blocking_tcp_echo_client.cpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <cstdlib>
-#include <cstring>
-#include <iostream>
-#include "asio.hpp"
-
-using asio::ip::tcp;
-
-enum { max_length = 1024 };
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 3)
- {
- std::cerr << "Usage: blocking_tcp_echo_client <host> <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- tcp::resolver resolver(io_context);
- tcp::resolver::results_type endpoints =
- resolver.resolve(tcp::v4(), argv[1], argv[2]);
-
- tcp::socket s(io_context);
- asio::connect(s, endpoints);
-
- using namespace std; // For strlen.
- std::cout << "Enter message: ";
- char request[max_length];
- std::cin.getline(request, max_length);
- size_t request_length = strlen(request);
- asio::write(s, asio::buffer(request, request_length));
-
- char reply[max_length];
- size_t reply_length = asio::read(s,
- asio::buffer(reply, request_length));
- std::cout << "Reply is: ";
- std::cout.write(reply, reply_length);
- std::cout << "\n";
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/echo/blocking_tcp_echo_server.cpp b/3rdparty/asio/src/examples/cpp03/echo/blocking_tcp_echo_server.cpp
deleted file mode 100644
index 163dc2a392c..00000000000
--- a/3rdparty/asio/src/examples/cpp03/echo/blocking_tcp_echo_server.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-//
-// blocking_tcp_echo_server.cpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <cstdlib>
-#include <iostream>
-#include <boost/bind.hpp>
-#include <boost/smart_ptr.hpp>
-#include "asio.hpp"
-
-using asio::ip::tcp;
-
-const int max_length = 1024;
-
-typedef boost::shared_ptr<tcp::socket> socket_ptr;
-
-void session(socket_ptr sock)
-{
- try
- {
- for (;;)
- {
- char data[max_length];
-
- asio::error_code error;
- size_t length = sock->read_some(asio::buffer(data), error);
- if (error == asio::error::eof)
- break; // Connection closed cleanly by peer.
- else if (error)
- throw asio::system_error(error); // Some other error.
-
- asio::write(*sock, asio::buffer(data, length));
- }
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception in thread: " << e.what() << "\n";
- }
-}
-
-void server(asio::io_context& io_context, unsigned short port)
-{
- tcp::acceptor a(io_context, tcp::endpoint(tcp::v4(), port));
- for (;;)
- {
- socket_ptr sock(new tcp::socket(io_context));
- a.accept(*sock);
- asio::thread t(boost::bind(session, sock));
- }
-}
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: blocking_tcp_echo_server <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- using namespace std; // For atoi.
- server(io_context, atoi(argv[1]));
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/echo/blocking_udp_echo_client.cpp b/3rdparty/asio/src/examples/cpp03/echo/blocking_udp_echo_client.cpp
deleted file mode 100644
index ee90081b7ea..00000000000
--- a/3rdparty/asio/src/examples/cpp03/echo/blocking_udp_echo_client.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// blocking_udp_echo_client.cpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <cstdlib>
-#include <cstring>
-#include <iostream>
-#include "asio.hpp"
-
-using asio::ip::udp;
-
-enum { max_length = 1024 };
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 3)
- {
- std::cerr << "Usage: blocking_udp_echo_client <host> <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- udp::socket s(io_context, udp::endpoint(udp::v4(), 0));
-
- udp::resolver resolver(io_context);
- udp::resolver::results_type endpoints =
- resolver.resolve(udp::v4(), argv[1], argv[2]);
-
- using namespace std; // For strlen.
- std::cout << "Enter message: ";
- char request[max_length];
- std::cin.getline(request, max_length);
- size_t request_length = strlen(request);
- s.send_to(asio::buffer(request, request_length), *endpoints.begin());
-
- char reply[max_length];
- udp::endpoint sender_endpoint;
- size_t reply_length = s.receive_from(
- asio::buffer(reply, max_length), sender_endpoint);
- std::cout << "Reply is: ";
- std::cout.write(reply, reply_length);
- std::cout << "\n";
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/echo/blocking_udp_echo_server.cpp b/3rdparty/asio/src/examples/cpp03/echo/blocking_udp_echo_server.cpp
deleted file mode 100644
index 3cc364c20b5..00000000000
--- a/3rdparty/asio/src/examples/cpp03/echo/blocking_udp_echo_server.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// blocking_udp_echo_server.cpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <cstdlib>
-#include <iostream>
-#include "asio.hpp"
-
-using asio::ip::udp;
-
-enum { max_length = 1024 };
-
-void server(asio::io_context& io_context, unsigned short port)
-{
- udp::socket sock(io_context, udp::endpoint(udp::v4(), port));
- for (;;)
- {
- char data[max_length];
- udp::endpoint sender_endpoint;
- size_t length = sock.receive_from(
- asio::buffer(data, max_length), sender_endpoint);
- sock.send_to(asio::buffer(data, length), sender_endpoint);
- }
-}
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: blocking_udp_echo_server <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- using namespace std; // For atoi.
- server(io_context, atoi(argv[1]));
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/fork/.gitignore b/3rdparty/asio/src/examples/cpp03/fork/.gitignore
deleted file mode 100644
index 6b565fe313a..00000000000
--- a/3rdparty/asio/src/examples/cpp03/fork/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*.ilk
-*.manifest
-*.pdb
-*.tds
-daemon
-process_per_connection
diff --git a/3rdparty/asio/src/examples/cpp03/fork/daemon.cpp b/3rdparty/asio/src/examples/cpp03/fork/daemon.cpp
deleted file mode 100644
index 06eef3d6b49..00000000000
--- a/3rdparty/asio/src/examples/cpp03/fork/daemon.cpp
+++ /dev/null
@@ -1,189 +0,0 @@
-//
-// daemon.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <asio/io_context.hpp>
-#include <asio/ip/udp.hpp>
-#include <asio/signal_set.hpp>
-#include <boost/array.hpp>
-#include <boost/bind.hpp>
-#include <ctime>
-#include <iostream>
-#include <syslog.h>
-#include <unistd.h>
-
-using asio::ip::udp;
-
-class udp_daytime_server
-{
-public:
- udp_daytime_server(asio::io_context& io_context)
- : socket_(io_context, udp::endpoint(udp::v4(), 13))
- {
- start_receive();
- }
-
-private:
- void start_receive()
- {
- socket_.async_receive_from(
- asio::buffer(recv_buffer_), remote_endpoint_,
- boost::bind(&udp_daytime_server::handle_receive, this, _1));
- }
-
- void handle_receive(const asio::error_code& ec)
- {
- if (!ec || ec == asio::error::message_size)
- {
- using namespace std; // For time_t, time and ctime;
- time_t now = time(0);
- std::string message = ctime(&now);
-
- asio::error_code ignored_ec;
- socket_.send_to(asio::buffer(message),
- remote_endpoint_, 0, ignored_ec);
- }
-
- start_receive();
- }
-
- udp::socket socket_;
- udp::endpoint remote_endpoint_;
- boost::array<char, 1> recv_buffer_;
-};
-
-int main()
-{
- try
- {
- asio::io_context io_context;
-
- // Initialise the server before becoming a daemon. If the process is
- // started from a shell, this means any errors will be reported back to the
- // user.
- udp_daytime_server server(io_context);
-
- // Register signal handlers so that the daemon may be shut down. You may
- // also want to register for other signals, such as SIGHUP to trigger a
- // re-read of a configuration file.
- asio::signal_set signals(io_context, SIGINT, SIGTERM);
- signals.async_wait(
- boost::bind(&asio::io_context::stop, &io_context));
-
- // Inform the io_context that we are about to become a daemon. The
- // io_context cleans up any internal resources, such as threads, that may
- // interfere with forking.
- io_context.notify_fork(asio::io_context::fork_prepare);
-
- // Fork the process and have the parent exit. If the process was started
- // from a shell, this returns control to the user. Forking a new process is
- // also a prerequisite for the subsequent call to setsid().
- if (pid_t pid = fork())
- {
- if (pid > 0)
- {
- // We're in the parent process and need to exit.
- //
- // When the exit() function is used, the program terminates without
- // invoking local variables' destructors. Only global variables are
- // destroyed. As the io_context object is a local variable, this means
- // we do not have to call:
- //
- // io_context.notify_fork(asio::io_context::fork_parent);
- //
- // However, this line should be added before each call to exit() if
- // using a global io_context object. An additional call:
- //
- // io_context.notify_fork(asio::io_context::fork_prepare);
- //
- // should also precede the second fork().
- exit(0);
- }
- else
- {
- syslog(LOG_ERR | LOG_USER, "First fork failed: %m");
- return 1;
- }
- }
-
- // Make the process a new session leader. This detaches it from the
- // terminal.
- setsid();
-
- // A process inherits its working directory from its parent. This could be
- // on a mounted filesystem, which means that the running daemon would
- // prevent this filesystem from being unmounted. Changing to the root
- // directory avoids this problem.
- chdir("/");
-
- // The file mode creation mask is also inherited from the parent process.
- // We don't want to restrict the permissions on files created by the
- // daemon, so the mask is cleared.
- umask(0);
-
- // A second fork ensures the process cannot acquire a controlling terminal.
- if (pid_t pid = fork())
- {
- if (pid > 0)
- {
- exit(0);
- }
- else
- {
- syslog(LOG_ERR | LOG_USER, "Second fork failed: %m");
- return 1;
- }
- }
-
- // Close the standard streams. This decouples the daemon from the terminal
- // that started it.
- close(0);
- close(1);
- close(2);
-
- // We don't want the daemon to have any standard input.
- if (open("/dev/null", O_RDONLY) < 0)
- {
- syslog(LOG_ERR | LOG_USER, "Unable to open /dev/null: %m");
- return 1;
- }
-
- // Send standard output to a log file.
- const char* output = "/tmp/asio.daemon.out";
- const int flags = O_WRONLY | O_CREAT | O_APPEND;
- const mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
- if (open(output, flags, mode) < 0)
- {
- syslog(LOG_ERR | LOG_USER, "Unable to open output file %s: %m", output);
- return 1;
- }
-
- // Also send standard error to the same log file.
- if (dup(1) < 0)
- {
- syslog(LOG_ERR | LOG_USER, "Unable to dup output descriptor: %m");
- return 1;
- }
-
- // Inform the io_context that we have finished becoming a daemon. The
- // io_context uses this opportunity to create any internal file descriptors
- // that need to be private to the new process.
- io_context.notify_fork(asio::io_context::fork_child);
-
- // The io_context can now be used normally.
- syslog(LOG_INFO | LOG_USER, "Daemon started");
- io_context.run();
- syslog(LOG_INFO | LOG_USER, "Daemon stopped");
- }
- catch (std::exception& e)
- {
- syslog(LOG_ERR | LOG_USER, "Exception: %s", e.what());
- std::cerr << "Exception: " << e.what() << std::endl;
- }
-}
diff --git a/3rdparty/asio/src/examples/cpp03/fork/process_per_connection.cpp b/3rdparty/asio/src/examples/cpp03/fork/process_per_connection.cpp
deleted file mode 100644
index 483147e9552..00000000000
--- a/3rdparty/asio/src/examples/cpp03/fork/process_per_connection.cpp
+++ /dev/null
@@ -1,160 +0,0 @@
-//
-// process_per_connection.cpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <asio/io_context.hpp>
-#include <asio/ip/tcp.hpp>
-#include <asio/signal_set.hpp>
-#include <asio/write.hpp>
-#include <boost/array.hpp>
-#include <boost/bind.hpp>
-#include <cstdlib>
-#include <iostream>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-using asio::ip::tcp;
-
-class server
-{
-public:
- server(asio::io_context& io_context, unsigned short port)
- : io_context_(io_context),
- signal_(io_context, SIGCHLD),
- acceptor_(io_context, tcp::endpoint(tcp::v4(), port)),
- socket_(io_context)
- {
- start_signal_wait();
- start_accept();
- }
-
-private:
- void start_signal_wait()
- {
- signal_.async_wait(boost::bind(&server::handle_signal_wait, this));
- }
-
- void handle_signal_wait()
- {
- // Only the parent process should check for this signal. We can determine
- // whether we are in the parent by checking if the acceptor is still open.
- if (acceptor_.is_open())
- {
- // Reap completed child processes so that we don't end up with zombies.
- int status = 0;
- while (waitpid(-1, &status, WNOHANG) > 0) {}
-
- start_signal_wait();
- }
- }
-
- void start_accept()
- {
- acceptor_.async_accept(socket_,
- boost::bind(&server::handle_accept, this, _1));
- }
-
- void handle_accept(const asio::error_code& ec)
- {
- if (!ec)
- {
- // Inform the io_context that we are about to fork. The io_context cleans
- // up any internal resources, such as threads, that may interfere with
- // forking.
- io_context_.notify_fork(asio::io_context::fork_prepare);
-
- if (fork() == 0)
- {
- // Inform the io_context that the fork is finished and that this is the
- // child process. The io_context uses this opportunity to create any
- // internal file descriptors that must be private to the new process.
- io_context_.notify_fork(asio::io_context::fork_child);
-
- // The child won't be accepting new connections, so we can close the
- // acceptor. It remains open in the parent.
- acceptor_.close();
-
- // The child process is not interested in processing the SIGCHLD signal.
- signal_.cancel();
-
- start_read();
- }
- else
- {
- // Inform the io_context that the fork is finished (or failed) and that
- // this is the parent process. The io_context uses this opportunity to
- // recreate any internal resources that were cleaned up during
- // preparation for the fork.
- io_context_.notify_fork(asio::io_context::fork_parent);
-
- socket_.close();
- start_accept();
- }
- }
- else
- {
- std::cerr << "Accept error: " << ec.message() << std::endl;
- start_accept();
- }
- }
-
- void start_read()
- {
- socket_.async_read_some(asio::buffer(data_),
- boost::bind(&server::handle_read, this, _1, _2));
- }
-
- void handle_read(const asio::error_code& ec, std::size_t length)
- {
- if (!ec)
- start_write(length);
- }
-
- void start_write(std::size_t length)
- {
- asio::async_write(socket_, asio::buffer(data_, length),
- boost::bind(&server::handle_write, this, _1));
- }
-
- void handle_write(const asio::error_code& ec)
- {
- if (!ec)
- start_read();
- }
-
- asio::io_context& io_context_;
- asio::signal_set signal_;
- tcp::acceptor acceptor_;
- tcp::socket socket_;
- boost::array<char, 1024> data_;
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: process_per_connection <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- using namespace std; // For atoi.
- server s(io_context, atoi(argv[1]));
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << std::endl;
- }
-}
diff --git a/3rdparty/asio/src/examples/cpp03/http/client/.gitignore b/3rdparty/asio/src/examples/cpp03/http/client/.gitignore
deleted file mode 100644
index e80f510d76c..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/client/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*_client
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/http/client/async_client.cpp b/3rdparty/asio/src/examples/cpp03/http/client/async_client.cpp
deleted file mode 100644
index 83dcc36d53a..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/client/async_client.cpp
+++ /dev/null
@@ -1,204 +0,0 @@
-//
-// async_client.cpp
-// ~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <istream>
-#include <ostream>
-#include <string>
-#include <asio.hpp>
-#include <boost/bind.hpp>
-
-using asio::ip::tcp;
-
-class client
-{
-public:
- client(asio::io_context& io_context,
- const std::string& server, const std::string& path)
- : resolver_(io_context),
- socket_(io_context)
- {
- // Form the request. We specify the "Connection: close" header so that the
- // server will close the socket after transmitting the response. This will
- // allow us to treat all data up until the EOF as the content.
- std::ostream request_stream(&request_);
- request_stream << "GET " << path << " HTTP/1.0\r\n";
- request_stream << "Host: " << server << "\r\n";
- request_stream << "Accept: */*\r\n";
- request_stream << "Connection: close\r\n\r\n";
-
- // Start an asynchronous resolve to translate the server and service names
- // into a list of endpoints.
- resolver_.async_resolve(server, "http",
- boost::bind(&client::handle_resolve, this,
- asio::placeholders::error,
- asio::placeholders::results));
- }
-
-private:
- void handle_resolve(const asio::error_code& err,
- const tcp::resolver::results_type& endpoints)
- {
- if (!err)
- {
- // Attempt a connection to each endpoint in the list until we
- // successfully establish a connection.
- asio::async_connect(socket_, endpoints,
- boost::bind(&client::handle_connect, this,
- asio::placeholders::error));
- }
- else
- {
- std::cout << "Error: " << err.message() << "\n";
- }
- }
-
- void handle_connect(const asio::error_code& err)
- {
- if (!err)
- {
- // The connection was successful. Send the request.
- asio::async_write(socket_, request_,
- boost::bind(&client::handle_write_request, this,
- asio::placeholders::error));
- }
- else
- {
- std::cout << "Error: " << err.message() << "\n";
- }
- }
-
- void handle_write_request(const asio::error_code& err)
- {
- if (!err)
- {
- // Read the response status line. The response_ streambuf will
- // automatically grow to accommodate the entire line. The growth may be
- // limited by passing a maximum size to the streambuf constructor.
- asio::async_read_until(socket_, response_, "\r\n",
- boost::bind(&client::handle_read_status_line, this,
- asio::placeholders::error));
- }
- else
- {
- std::cout << "Error: " << err.message() << "\n";
- }
- }
-
- void handle_read_status_line(const asio::error_code& err)
- {
- if (!err)
- {
- // Check that response is OK.
- std::istream response_stream(&response_);
- std::string http_version;
- response_stream >> http_version;
- unsigned int status_code;
- response_stream >> status_code;
- std::string status_message;
- std::getline(response_stream, status_message);
- if (!response_stream || http_version.substr(0, 5) != "HTTP/")
- {
- std::cout << "Invalid response\n";
- return;
- }
- if (status_code != 200)
- {
- std::cout << "Response returned with status code ";
- std::cout << status_code << "\n";
- return;
- }
-
- // Read the response headers, which are terminated by a blank line.
- asio::async_read_until(socket_, response_, "\r\n\r\n",
- boost::bind(&client::handle_read_headers, this,
- asio::placeholders::error));
- }
- else
- {
- std::cout << "Error: " << err << "\n";
- }
- }
-
- void handle_read_headers(const asio::error_code& err)
- {
- if (!err)
- {
- // Process the response headers.
- std::istream response_stream(&response_);
- std::string header;
- while (std::getline(response_stream, header) && header != "\r")
- std::cout << header << "\n";
- std::cout << "\n";
-
- // Write whatever content we already have to output.
- if (response_.size() > 0)
- std::cout << &response_;
-
- // Start reading remaining data until EOF.
- asio::async_read(socket_, response_,
- asio::transfer_at_least(1),
- boost::bind(&client::handle_read_content, this,
- asio::placeholders::error));
- }
- else
- {
- std::cout << "Error: " << err << "\n";
- }
- }
-
- void handle_read_content(const asio::error_code& err)
- {
- if (!err)
- {
- // Write all of the data that has been read so far.
- std::cout << &response_;
-
- // Continue reading remaining data until EOF.
- asio::async_read(socket_, response_,
- asio::transfer_at_least(1),
- boost::bind(&client::handle_read_content, this,
- asio::placeholders::error));
- }
- else if (err != asio::error::eof)
- {
- std::cout << "Error: " << err << "\n";
- }
- }
-
- tcp::resolver resolver_;
- tcp::socket socket_;
- asio::streambuf request_;
- asio::streambuf response_;
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 3)
- {
- std::cout << "Usage: async_client <server> <path>\n";
- std::cout << "Example:\n";
- std::cout << " async_client www.boost.org /LICENSE_1_0.txt\n";
- return 1;
- }
-
- asio::io_context io_context;
- client c(io_context, argv[1], argv[2]);
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cout << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/http/client/sync_client.cpp b/3rdparty/asio/src/examples/cpp03/http/client/sync_client.cpp
deleted file mode 100644
index a11b5c7c76a..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/client/sync_client.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-//
-// sync_client.cpp
-// ~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <istream>
-#include <ostream>
-#include <string>
-#include <asio.hpp>
-
-using asio::ip::tcp;
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 3)
- {
- std::cout << "Usage: sync_client <server> <path>\n";
- std::cout << "Example:\n";
- std::cout << " sync_client www.boost.org /LICENSE_1_0.txt\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- // Get a list of endpoints corresponding to the server name.
- tcp::resolver resolver(io_context);
- tcp::resolver::results_type endpoints = resolver.resolve(argv[1], "http");
-
- // Try each endpoint until we successfully establish a connection.
- tcp::socket socket(io_context);
- asio::connect(socket, endpoints);
-
- // Form the request. We specify the "Connection: close" header so that the
- // server will close the socket after transmitting the response. This will
- // allow us to treat all data up until the EOF as the content.
- asio::streambuf request;
- std::ostream request_stream(&request);
- request_stream << "GET " << argv[2] << " HTTP/1.0\r\n";
- request_stream << "Host: " << argv[1] << "\r\n";
- request_stream << "Accept: */*\r\n";
- request_stream << "Connection: close\r\n\r\n";
-
- // Send the request.
- asio::write(socket, request);
-
- // Read the response status line. The response streambuf will automatically
- // grow to accommodate the entire line. The growth may be limited by passing
- // a maximum size to the streambuf constructor.
- asio::streambuf response;
- asio::read_until(socket, response, "\r\n");
-
- // Check that response is OK.
- std::istream response_stream(&response);
- std::string http_version;
- response_stream >> http_version;
- unsigned int status_code;
- response_stream >> status_code;
- std::string status_message;
- std::getline(response_stream, status_message);
- if (!response_stream || http_version.substr(0, 5) != "HTTP/")
- {
- std::cout << "Invalid response\n";
- return 1;
- }
- if (status_code != 200)
- {
- std::cout << "Response returned with status code " << status_code << "\n";
- return 1;
- }
-
- // Read the response headers, which are terminated by a blank line.
- asio::read_until(socket, response, "\r\n\r\n");
-
- // Process the response headers.
- std::string header;
- while (std::getline(response_stream, header) && header != "\r")
- std::cout << header << "\n";
- std::cout << "\n";
-
- // Write whatever content we already have to output.
- if (response.size() > 0)
- std::cout << &response;
-
- // Read until EOF, writing data to output as we go.
- asio::error_code error;
- while (asio::read(socket, response,
- asio::transfer_at_least(1), error))
- std::cout << &response;
- if (error != asio::error::eof)
- throw asio::system_error(error);
- }
- catch (std::exception& e)
- {
- std::cout << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/http/doc_root/data_1K.html b/3rdparty/asio/src/examples/cpp03/http/doc_root/data_1K.html
deleted file mode 100644
index 1372c4dd177..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/doc_root/data_1K.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-
-Distributed under the Boost Software License, Version 1.0. (See accompanying
-file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
--->
-
-<html>
-<body>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the<br/>
-</body>
-</html>
-
-<!-- boostinspect:nounlinked -->
diff --git a/3rdparty/asio/src/examples/cpp03/http/doc_root/data_2K.html b/3rdparty/asio/src/examples/cpp03/http/doc_root/data_2K.html
deleted file mode 100644
index 686ce52b0a0..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/doc_root/data_2K.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
-Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-
-Distributed under the Boost Software License, Version 1.0. (See accompanying
-file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
--->
-
-<html>
-<body>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps ove<br/>
-</body>
-</html>
-
-<!-- boostinspect:nounlinked -->
diff --git a/3rdparty/asio/src/examples/cpp03/http/doc_root/data_4K.html b/3rdparty/asio/src/examples/cpp03/http/doc_root/data_4K.html
deleted file mode 100644
index f5db0a2bc00..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/doc_root/data_4K.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!--
-Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-
-Distributed under the Boost Software License, Version 1.0. (See accompanying
-file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
--->
-
-<html>
-<body>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox<br/>
-</body>
-</html>
-
-<!-- boostinspect:nounlinked -->
diff --git a/3rdparty/asio/src/examples/cpp03/http/doc_root/data_8K.html b/3rdparty/asio/src/examples/cpp03/http/doc_root/data_8K.html
deleted file mode 100644
index 0d42f72886b..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/doc_root/data_8K.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<!--
-Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-
-Distributed under the Boost Software License, Version 1.0. (See accompanying
-file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
--->
-
-<html>
-<body>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-The quick brown fox jumps over the lazy dog<br/>
-....
-</body>
-</html>
-
-<!-- boostinspect:nounlinked -->
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/.gitignore b/3rdparty/asio/src/examples/cpp03/http/server/.gitignore
deleted file mode 100644
index 0882fa6ced3..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*_server
-*_client
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/connection.cpp b/3rdparty/asio/src/examples/cpp03/http/server/connection.cpp
deleted file mode 100644
index acbf637b453..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/connection.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-//
-// connection.cpp
-// ~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "connection.hpp"
-#include <vector>
-#include <boost/bind.hpp>
-#include "connection_manager.hpp"
-#include "request_handler.hpp"
-
-namespace http {
-namespace server {
-
-connection::connection(asio::io_context& io_context,
- connection_manager& manager, request_handler& handler)
- : socket_(io_context),
- connection_manager_(manager),
- request_handler_(handler)
-{
-}
-
-asio::ip::tcp::socket& connection::socket()
-{
- return socket_;
-}
-
-void connection::start()
-{
- socket_.async_read_some(asio::buffer(buffer_),
- boost::bind(&connection::handle_read, shared_from_this(),
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
-}
-
-void connection::stop()
-{
- socket_.close();
-}
-
-void connection::handle_read(const asio::error_code& e,
- std::size_t bytes_transferred)
-{
- if (!e)
- {
- boost::tribool result;
- boost::tie(result, boost::tuples::ignore) = request_parser_.parse(
- request_, buffer_.data(), buffer_.data() + bytes_transferred);
-
- if (result)
- {
- request_handler_.handle_request(request_, reply_);
- asio::async_write(socket_, reply_.to_buffers(),
- boost::bind(&connection::handle_write, shared_from_this(),
- asio::placeholders::error));
- }
- else if (!result)
- {
- reply_ = reply::stock_reply(reply::bad_request);
- asio::async_write(socket_, reply_.to_buffers(),
- boost::bind(&connection::handle_write, shared_from_this(),
- asio::placeholders::error));
- }
- else
- {
- socket_.async_read_some(asio::buffer(buffer_),
- boost::bind(&connection::handle_read, shared_from_this(),
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
- }
- else if (e != asio::error::operation_aborted)
- {
- connection_manager_.stop(shared_from_this());
- }
-}
-
-void connection::handle_write(const asio::error_code& e)
-{
- if (!e)
- {
- // Initiate graceful connection closure.
- asio::error_code ignored_ec;
- socket_.shutdown(asio::ip::tcp::socket::shutdown_both, ignored_ec);
- }
-
- if (e != asio::error::operation_aborted)
- {
- connection_manager_.stop(shared_from_this());
- }
-}
-
-} // namespace server
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/connection.hpp b/3rdparty/asio/src/examples/cpp03/http/server/connection.hpp
deleted file mode 100644
index 6193b486443..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/connection.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-//
-// connection.hpp
-// ~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_CONNECTION_HPP
-#define HTTP_CONNECTION_HPP
-
-#include <asio.hpp>
-#include <boost/array.hpp>
-#include <boost/noncopyable.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include "reply.hpp"
-#include "request.hpp"
-#include "request_handler.hpp"
-#include "request_parser.hpp"
-
-namespace http {
-namespace server {
-
-class connection_manager;
-
-/// Represents a single connection from a client.
-class connection
- : public boost::enable_shared_from_this<connection>,
- private boost::noncopyable
-{
-public:
- /// Construct a connection with the given io_context.
- explicit connection(asio::io_context& io_context,
- connection_manager& manager, request_handler& handler);
-
- /// Get the socket associated with the connection.
- asio::ip::tcp::socket& socket();
-
- /// Start the first asynchronous operation for the connection.
- void start();
-
- /// Stop all asynchronous operations associated with the connection.
- void stop();
-
-private:
- /// Handle completion of a read operation.
- void handle_read(const asio::error_code& e,
- std::size_t bytes_transferred);
-
- /// Handle completion of a write operation.
- void handle_write(const asio::error_code& e);
-
- /// Socket for the connection.
- asio::ip::tcp::socket socket_;
-
- /// The manager for this connection.
- connection_manager& connection_manager_;
-
- /// The handler used to process the incoming request.
- request_handler& request_handler_;
-
- /// Buffer for incoming data.
- boost::array<char, 8192> buffer_;
-
- /// The incoming request.
- request request_;
-
- /// The parser for the incoming request.
- request_parser request_parser_;
-
- /// The reply to be sent back to the client.
- reply reply_;
-};
-
-typedef boost::shared_ptr<connection> connection_ptr;
-
-} // namespace server
-} // namespace http
-
-#endif // HTTP_CONNECTION_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/connection_manager.cpp b/3rdparty/asio/src/examples/cpp03/http/server/connection_manager.cpp
deleted file mode 100644
index 8fc9d8f285b..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/connection_manager.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-//
-// connection_manager.cpp
-// ~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "connection_manager.hpp"
-#include <algorithm>
-#include <boost/bind.hpp>
-
-namespace http {
-namespace server {
-
-void connection_manager::start(connection_ptr c)
-{
- connections_.insert(c);
- c->start();
-}
-
-void connection_manager::stop(connection_ptr c)
-{
- connections_.erase(c);
- c->stop();
-}
-
-void connection_manager::stop_all()
-{
- std::for_each(connections_.begin(), connections_.end(),
- boost::bind(&connection::stop, _1));
- connections_.clear();
-}
-
-} // namespace server
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/connection_manager.hpp b/3rdparty/asio/src/examples/cpp03/http/server/connection_manager.hpp
deleted file mode 100644
index e67653f6a26..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/connection_manager.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// connection_manager.hpp
-// ~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_CONNECTION_MANAGER_HPP
-#define HTTP_CONNECTION_MANAGER_HPP
-
-#include <set>
-#include <boost/noncopyable.hpp>
-#include "connection.hpp"
-
-namespace http {
-namespace server {
-
-/// Manages open connections so that they may be cleanly stopped when the server
-/// needs to shut down.
-class connection_manager
- : private boost::noncopyable
-{
-public:
- /// Add the specified connection to the manager and start it.
- void start(connection_ptr c);
-
- /// Stop the specified connection.
- void stop(connection_ptr c);
-
- /// Stop all connections.
- void stop_all();
-
-private:
- /// The managed connections.
- std::set<connection_ptr> connections_;
-};
-
-} // namespace server
-} // namespace http
-
-#endif // HTTP_CONNECTION_MANAGER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/header.hpp b/3rdparty/asio/src/examples/cpp03/http/server/header.hpp
deleted file mode 100644
index 22e3c4a7a10..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/header.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// header.hpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_HEADER_HPP
-#define HTTP_HEADER_HPP
-
-#include <string>
-
-namespace http {
-namespace server {
-
-struct header
-{
- std::string name;
- std::string value;
-};
-
-} // namespace server
-} // namespace http
-
-#endif // HTTP_HEADER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/main.cpp b/3rdparty/asio/src/examples/cpp03/http/server/main.cpp
deleted file mode 100644
index 32d6f54dcb5..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/main.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// main.cpp
-// ~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <string>
-#include <asio.hpp>
-#include <boost/bind.hpp>
-#include "server.hpp"
-
-int main(int argc, char* argv[])
-{
- try
- {
- // Check command line arguments.
- if (argc != 4)
- {
- std::cerr << "Usage: http_server <address> <port> <doc_root>\n";
- std::cerr << " For IPv4, try:\n";
- std::cerr << " receiver 0.0.0.0 80 .\n";
- std::cerr << " For IPv6, try:\n";
- std::cerr << " receiver 0::0 80 .\n";
- return 1;
- }
-
- // Initialise the server.
- http::server::server s(argv[1], argv[2], argv[3]);
-
- // Run the server until stopped.
- s.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/mime_types.cpp b/3rdparty/asio/src/examples/cpp03/http/server/mime_types.cpp
deleted file mode 100644
index 80fdfe30e64..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/mime_types.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// mime_types.cpp
-// ~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "mime_types.hpp"
-
-namespace http {
-namespace server {
-namespace mime_types {
-
-struct mapping
-{
- const char* extension;
- const char* mime_type;
-} mappings[] =
-{
- { "gif", "image/gif" },
- { "htm", "text/html" },
- { "html", "text/html" },
- { "jpg", "image/jpeg" },
- { "png", "image/png" },
- { 0, 0 } // Marks end of list.
-};
-
-std::string extension_to_type(const std::string& extension)
-{
- for (mapping* m = mappings; m->extension; ++m)
- {
- if (m->extension == extension)
- {
- return m->mime_type;
- }
- }
-
- return "text/plain";
-}
-
-} // namespace mime_types
-} // namespace server
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/mime_types.hpp b/3rdparty/asio/src/examples/cpp03/http/server/mime_types.hpp
deleted file mode 100644
index 2fc0332791f..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/mime_types.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-// mime_types.hpp
-// ~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_MIME_TYPES_HPP
-#define HTTP_MIME_TYPES_HPP
-
-#include <string>
-
-namespace http {
-namespace server {
-namespace mime_types {
-
-/// Convert a file extension into a MIME type.
-std::string extension_to_type(const std::string& extension);
-
-} // namespace mime_types
-} // namespace server
-} // namespace http
-
-#endif // HTTP_MIME_TYPES_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/reply.cpp b/3rdparty/asio/src/examples/cpp03/http/server/reply.cpp
deleted file mode 100644
index f3730d3d94d..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/reply.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-//
-// reply.cpp
-// ~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "reply.hpp"
-#include <string>
-#include <boost/lexical_cast.hpp>
-
-namespace http {
-namespace server {
-
-namespace status_strings {
-
-const std::string ok =
- "HTTP/1.0 200 OK\r\n";
-const std::string created =
- "HTTP/1.0 201 Created\r\n";
-const std::string accepted =
- "HTTP/1.0 202 Accepted\r\n";
-const std::string no_content =
- "HTTP/1.0 204 No Content\r\n";
-const std::string multiple_choices =
- "HTTP/1.0 300 Multiple Choices\r\n";
-const std::string moved_permanently =
- "HTTP/1.0 301 Moved Permanently\r\n";
-const std::string moved_temporarily =
- "HTTP/1.0 302 Moved Temporarily\r\n";
-const std::string not_modified =
- "HTTP/1.0 304 Not Modified\r\n";
-const std::string bad_request =
- "HTTP/1.0 400 Bad Request\r\n";
-const std::string unauthorized =
- "HTTP/1.0 401 Unauthorized\r\n";
-const std::string forbidden =
- "HTTP/1.0 403 Forbidden\r\n";
-const std::string not_found =
- "HTTP/1.0 404 Not Found\r\n";
-const std::string internal_server_error =
- "HTTP/1.0 500 Internal Server Error\r\n";
-const std::string not_implemented =
- "HTTP/1.0 501 Not Implemented\r\n";
-const std::string bad_gateway =
- "HTTP/1.0 502 Bad Gateway\r\n";
-const std::string service_unavailable =
- "HTTP/1.0 503 Service Unavailable\r\n";
-
-asio::const_buffer to_buffer(reply::status_type status)
-{
- switch (status)
- {
- case reply::ok:
- return asio::buffer(ok);
- case reply::created:
- return asio::buffer(created);
- case reply::accepted:
- return asio::buffer(accepted);
- case reply::no_content:
- return asio::buffer(no_content);
- case reply::multiple_choices:
- return asio::buffer(multiple_choices);
- case reply::moved_permanently:
- return asio::buffer(moved_permanently);
- case reply::moved_temporarily:
- return asio::buffer(moved_temporarily);
- case reply::not_modified:
- return asio::buffer(not_modified);
- case reply::bad_request:
- return asio::buffer(bad_request);
- case reply::unauthorized:
- return asio::buffer(unauthorized);
- case reply::forbidden:
- return asio::buffer(forbidden);
- case reply::not_found:
- return asio::buffer(not_found);
- case reply::internal_server_error:
- return asio::buffer(internal_server_error);
- case reply::not_implemented:
- return asio::buffer(not_implemented);
- case reply::bad_gateway:
- return asio::buffer(bad_gateway);
- case reply::service_unavailable:
- return asio::buffer(service_unavailable);
- default:
- return asio::buffer(internal_server_error);
- }
-}
-
-} // namespace status_strings
-
-namespace misc_strings {
-
-const char name_value_separator[] = { ':', ' ' };
-const char crlf[] = { '\r', '\n' };
-
-} // namespace misc_strings
-
-std::vector<asio::const_buffer> reply::to_buffers()
-{
- std::vector<asio::const_buffer> buffers;
- buffers.push_back(status_strings::to_buffer(status));
- for (std::size_t i = 0; i < headers.size(); ++i)
- {
- header& h = headers[i];
- buffers.push_back(asio::buffer(h.name));
- buffers.push_back(asio::buffer(misc_strings::name_value_separator));
- buffers.push_back(asio::buffer(h.value));
- buffers.push_back(asio::buffer(misc_strings::crlf));
- }
- buffers.push_back(asio::buffer(misc_strings::crlf));
- buffers.push_back(asio::buffer(content));
- return buffers;
-}
-
-namespace stock_replies {
-
-const char ok[] = "";
-const char created[] =
- "<html>"
- "<head><title>Created</title></head>"
- "<body><h1>201 Created</h1></body>"
- "</html>";
-const char accepted[] =
- "<html>"
- "<head><title>Accepted</title></head>"
- "<body><h1>202 Accepted</h1></body>"
- "</html>";
-const char no_content[] =
- "<html>"
- "<head><title>No Content</title></head>"
- "<body><h1>204 Content</h1></body>"
- "</html>";
-const char multiple_choices[] =
- "<html>"
- "<head><title>Multiple Choices</title></head>"
- "<body><h1>300 Multiple Choices</h1></body>"
- "</html>";
-const char moved_permanently[] =
- "<html>"
- "<head><title>Moved Permanently</title></head>"
- "<body><h1>301 Moved Permanently</h1></body>"
- "</html>";
-const char moved_temporarily[] =
- "<html>"
- "<head><title>Moved Temporarily</title></head>"
- "<body><h1>302 Moved Temporarily</h1></body>"
- "</html>";
-const char not_modified[] =
- "<html>"
- "<head><title>Not Modified</title></head>"
- "<body><h1>304 Not Modified</h1></body>"
- "</html>";
-const char bad_request[] =
- "<html>"
- "<head><title>Bad Request</title></head>"
- "<body><h1>400 Bad Request</h1></body>"
- "</html>";
-const char unauthorized[] =
- "<html>"
- "<head><title>Unauthorized</title></head>"
- "<body><h1>401 Unauthorized</h1></body>"
- "</html>";
-const char forbidden[] =
- "<html>"
- "<head><title>Forbidden</title></head>"
- "<body><h1>403 Forbidden</h1></body>"
- "</html>";
-const char not_found[] =
- "<html>"
- "<head><title>Not Found</title></head>"
- "<body><h1>404 Not Found</h1></body>"
- "</html>";
-const char internal_server_error[] =
- "<html>"
- "<head><title>Internal Server Error</title></head>"
- "<body><h1>500 Internal Server Error</h1></body>"
- "</html>";
-const char not_implemented[] =
- "<html>"
- "<head><title>Not Implemented</title></head>"
- "<body><h1>501 Not Implemented</h1></body>"
- "</html>";
-const char bad_gateway[] =
- "<html>"
- "<head><title>Bad Gateway</title></head>"
- "<body><h1>502 Bad Gateway</h1></body>"
- "</html>";
-const char service_unavailable[] =
- "<html>"
- "<head><title>Service Unavailable</title></head>"
- "<body><h1>503 Service Unavailable</h1></body>"
- "</html>";
-
-std::string to_string(reply::status_type status)
-{
- switch (status)
- {
- case reply::ok:
- return ok;
- case reply::created:
- return created;
- case reply::accepted:
- return accepted;
- case reply::no_content:
- return no_content;
- case reply::multiple_choices:
- return multiple_choices;
- case reply::moved_permanently:
- return moved_permanently;
- case reply::moved_temporarily:
- return moved_temporarily;
- case reply::not_modified:
- return not_modified;
- case reply::bad_request:
- return bad_request;
- case reply::unauthorized:
- return unauthorized;
- case reply::forbidden:
- return forbidden;
- case reply::not_found:
- return not_found;
- case reply::internal_server_error:
- return internal_server_error;
- case reply::not_implemented:
- return not_implemented;
- case reply::bad_gateway:
- return bad_gateway;
- case reply::service_unavailable:
- return service_unavailable;
- default:
- return internal_server_error;
- }
-}
-
-} // namespace stock_replies
-
-reply reply::stock_reply(reply::status_type status)
-{
- reply rep;
- rep.status = status;
- rep.content = stock_replies::to_string(status);
- rep.headers.resize(2);
- rep.headers[0].name = "Content-Length";
- rep.headers[0].value = boost::lexical_cast<std::string>(rep.content.size());
- rep.headers[1].name = "Content-Type";
- rep.headers[1].value = "text/html";
- return rep;
-}
-
-} // namespace server
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/reply.hpp b/3rdparty/asio/src/examples/cpp03/http/server/reply.hpp
deleted file mode 100644
index 5189ac4363e..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/reply.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-//
-// reply.hpp
-// ~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_REPLY_HPP
-#define HTTP_REPLY_HPP
-
-#include <string>
-#include <vector>
-#include <asio.hpp>
-#include "header.hpp"
-
-namespace http {
-namespace server {
-
-/// A reply to be sent to a client.
-struct reply
-{
- /// The status of the reply.
- enum status_type
- {
- ok = 200,
- created = 201,
- accepted = 202,
- no_content = 204,
- multiple_choices = 300,
- moved_permanently = 301,
- moved_temporarily = 302,
- not_modified = 304,
- bad_request = 400,
- unauthorized = 401,
- forbidden = 403,
- not_found = 404,
- internal_server_error = 500,
- not_implemented = 501,
- bad_gateway = 502,
- service_unavailable = 503
- } status;
-
- /// The headers to be included in the reply.
- std::vector<header> headers;
-
- /// The content to be sent in the reply.
- std::string content;
-
- /// Convert the reply into a vector of buffers. The buffers do not own the
- /// underlying memory blocks, therefore the reply object must remain valid and
- /// not be changed until the write operation has completed.
- std::vector<asio::const_buffer> to_buffers();
-
- /// Get a stock reply.
- static reply stock_reply(status_type status);
-};
-
-} // namespace server
-} // namespace http
-
-#endif // HTTP_REPLY_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/request.hpp b/3rdparty/asio/src/examples/cpp03/http/server/request.hpp
deleted file mode 100644
index 129a3990b3d..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/request.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// request.hpp
-// ~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_REQUEST_HPP
-#define HTTP_REQUEST_HPP
-
-#include <string>
-#include <vector>
-#include "header.hpp"
-
-namespace http {
-namespace server {
-
-/// A request received from a client.
-struct request
-{
- std::string method;
- std::string uri;
- int http_version_major;
- int http_version_minor;
- std::vector<header> headers;
-};
-
-} // namespace server
-} // namespace http
-
-#endif // HTTP_REQUEST_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/request_handler.cpp b/3rdparty/asio/src/examples/cpp03/http/server/request_handler.cpp
deleted file mode 100644
index 1201ef109d2..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/request_handler.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// request_handler.cpp
-// ~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "request_handler.hpp"
-#include <fstream>
-#include <sstream>
-#include <string>
-#include <boost/lexical_cast.hpp>
-#include "mime_types.hpp"
-#include "reply.hpp"
-#include "request.hpp"
-
-namespace http {
-namespace server {
-
-request_handler::request_handler(const std::string& doc_root)
- : doc_root_(doc_root)
-{
-}
-
-void request_handler::handle_request(const request& req, reply& rep)
-{
- // Decode url to path.
- std::string request_path;
- if (!url_decode(req.uri, request_path))
- {
- rep = reply::stock_reply(reply::bad_request);
- return;
- }
-
- // Request path must be absolute and not contain "..".
- if (request_path.empty() || request_path[0] != '/'
- || request_path.find("..") != std::string::npos)
- {
- rep = reply::stock_reply(reply::bad_request);
- return;
- }
-
- // If path ends in slash (i.e. is a directory) then add "index.html".
- if (request_path[request_path.size() - 1] == '/')
- {
- request_path += "index.html";
- }
-
- // Determine the file extension.
- std::size_t last_slash_pos = request_path.find_last_of("/");
- std::size_t last_dot_pos = request_path.find_last_of(".");
- std::string extension;
- if (last_dot_pos != std::string::npos && last_dot_pos > last_slash_pos)
- {
- extension = request_path.substr(last_dot_pos + 1);
- }
-
- // Open the file to send back.
- std::string full_path = doc_root_ + request_path;
- std::ifstream is(full_path.c_str(), std::ios::in | std::ios::binary);
- if (!is)
- {
- rep = reply::stock_reply(reply::not_found);
- return;
- }
-
- // Fill out the reply to be sent to the client.
- rep.status = reply::ok;
- char buf[512];
- while (is.read(buf, sizeof(buf)).gcount() > 0)
- rep.content.append(buf, is.gcount());
- rep.headers.resize(2);
- rep.headers[0].name = "Content-Length";
- rep.headers[0].value = boost::lexical_cast<std::string>(rep.content.size());
- rep.headers[1].name = "Content-Type";
- rep.headers[1].value = mime_types::extension_to_type(extension);
-}
-
-bool request_handler::url_decode(const std::string& in, std::string& out)
-{
- out.clear();
- out.reserve(in.size());
- for (std::size_t i = 0; i < in.size(); ++i)
- {
- if (in[i] == '%')
- {
- if (i + 3 <= in.size())
- {
- int value = 0;
- std::istringstream is(in.substr(i + 1, 2));
- if (is >> std::hex >> value)
- {
- out += static_cast<char>(value);
- i += 2;
- }
- else
- {
- return false;
- }
- }
- else
- {
- return false;
- }
- }
- else if (in[i] == '+')
- {
- out += ' ';
- }
- else
- {
- out += in[i];
- }
- }
- return true;
-}
-
-} // namespace server
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/request_handler.hpp b/3rdparty/asio/src/examples/cpp03/http/server/request_handler.hpp
deleted file mode 100644
index 56a16dd395a..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/request_handler.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// request_handler.hpp
-// ~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_REQUEST_HANDLER_HPP
-#define HTTP_REQUEST_HANDLER_HPP
-
-#include <string>
-#include <boost/noncopyable.hpp>
-
-namespace http {
-namespace server {
-
-struct reply;
-struct request;
-
-/// The common handler for all incoming requests.
-class request_handler
- : private boost::noncopyable
-{
-public:
- /// Construct with a directory containing files to be served.
- explicit request_handler(const std::string& doc_root);
-
- /// Handle a request and produce a reply.
- void handle_request(const request& req, reply& rep);
-
-private:
- /// The directory containing the files to be served.
- std::string doc_root_;
-
- /// Perform URL-decoding on a string. Returns false if the encoding was
- /// invalid.
- static bool url_decode(const std::string& in, std::string& out);
-};
-
-} // namespace server
-} // namespace http
-
-#endif // HTTP_REQUEST_HANDLER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/request_parser.cpp b/3rdparty/asio/src/examples/cpp03/http/server/request_parser.cpp
deleted file mode 100644
index 80644eea529..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/request_parser.cpp
+++ /dev/null
@@ -1,315 +0,0 @@
-//
-// request_parser.cpp
-// ~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "request_parser.hpp"
-#include "request.hpp"
-
-namespace http {
-namespace server {
-
-request_parser::request_parser()
- : state_(method_start)
-{
-}
-
-void request_parser::reset()
-{
- state_ = method_start;
-}
-
-boost::tribool request_parser::consume(request& req, char input)
-{
- switch (state_)
- {
- case method_start:
- if (!is_char(input) || is_ctl(input) || is_tspecial(input))
- {
- return false;
- }
- else
- {
- state_ = method;
- req.method.push_back(input);
- return boost::indeterminate;
- }
- case method:
- if (input == ' ')
- {
- state_ = uri;
- return boost::indeterminate;
- }
- else if (!is_char(input) || is_ctl(input) || is_tspecial(input))
- {
- return false;
- }
- else
- {
- req.method.push_back(input);
- return boost::indeterminate;
- }
- case uri:
- if (input == ' ')
- {
- state_ = http_version_h;
- return boost::indeterminate;
- }
- else if (is_ctl(input))
- {
- return false;
- }
- else
- {
- req.uri.push_back(input);
- return boost::indeterminate;
- }
- case http_version_h:
- if (input == 'H')
- {
- state_ = http_version_t_1;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_t_1:
- if (input == 'T')
- {
- state_ = http_version_t_2;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_t_2:
- if (input == 'T')
- {
- state_ = http_version_p;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_p:
- if (input == 'P')
- {
- state_ = http_version_slash;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_slash:
- if (input == '/')
- {
- req.http_version_major = 0;
- req.http_version_minor = 0;
- state_ = http_version_major_start;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_major_start:
- if (is_digit(input))
- {
- req.http_version_major = req.http_version_major * 10 + input - '0';
- state_ = http_version_major;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_major:
- if (input == '.')
- {
- state_ = http_version_minor_start;
- return boost::indeterminate;
- }
- else if (is_digit(input))
- {
- req.http_version_major = req.http_version_major * 10 + input - '0';
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_minor_start:
- if (is_digit(input))
- {
- req.http_version_minor = req.http_version_minor * 10 + input - '0';
- state_ = http_version_minor;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_minor:
- if (input == '\r')
- {
- state_ = expecting_newline_1;
- return boost::indeterminate;
- }
- else if (is_digit(input))
- {
- req.http_version_minor = req.http_version_minor * 10 + input - '0';
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case expecting_newline_1:
- if (input == '\n')
- {
- state_ = header_line_start;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case header_line_start:
- if (input == '\r')
- {
- state_ = expecting_newline_3;
- return boost::indeterminate;
- }
- else if (!req.headers.empty() && (input == ' ' || input == '\t'))
- {
- state_ = header_lws;
- return boost::indeterminate;
- }
- else if (!is_char(input) || is_ctl(input) || is_tspecial(input))
- {
- return false;
- }
- else
- {
- req.headers.push_back(header());
- req.headers.back().name.push_back(input);
- state_ = header_name;
- return boost::indeterminate;
- }
- case header_lws:
- if (input == '\r')
- {
- state_ = expecting_newline_2;
- return boost::indeterminate;
- }
- else if (input == ' ' || input == '\t')
- {
- return boost::indeterminate;
- }
- else if (is_ctl(input))
- {
- return false;
- }
- else
- {
- state_ = header_value;
- req.headers.back().value.push_back(input);
- return boost::indeterminate;
- }
- case header_name:
- if (input == ':')
- {
- state_ = space_before_header_value;
- return boost::indeterminate;
- }
- else if (!is_char(input) || is_ctl(input) || is_tspecial(input))
- {
- return false;
- }
- else
- {
- req.headers.back().name.push_back(input);
- return boost::indeterminate;
- }
- case space_before_header_value:
- if (input == ' ')
- {
- state_ = header_value;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case header_value:
- if (input == '\r')
- {
- state_ = expecting_newline_2;
- return boost::indeterminate;
- }
- else if (is_ctl(input))
- {
- return false;
- }
- else
- {
- req.headers.back().value.push_back(input);
- return boost::indeterminate;
- }
- case expecting_newline_2:
- if (input == '\n')
- {
- state_ = header_line_start;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case expecting_newline_3:
- return (input == '\n');
- default:
- return false;
- }
-}
-
-bool request_parser::is_char(int c)
-{
- return c >= 0 && c <= 127;
-}
-
-bool request_parser::is_ctl(int c)
-{
- return (c >= 0 && c <= 31) || (c == 127);
-}
-
-bool request_parser::is_tspecial(int c)
-{
- switch (c)
- {
- case '(': case ')': case '<': case '>': case '@':
- case ',': case ';': case ':': case '\\': case '"':
- case '/': case '[': case ']': case '?': case '=':
- case '{': case '}': case ' ': case '\t':
- return true;
- default:
- return false;
- }
-}
-
-bool request_parser::is_digit(int c)
-{
- return c >= '0' && c <= '9';
-}
-
-} // namespace server
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/request_parser.hpp b/3rdparty/asio/src/examples/cpp03/http/server/request_parser.hpp
deleted file mode 100644
index d7da53cf030..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/request_parser.hpp
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// request_parser.hpp
-// ~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_REQUEST_PARSER_HPP
-#define HTTP_REQUEST_PARSER_HPP
-
-#include <boost/logic/tribool.hpp>
-#include <boost/tuple/tuple.hpp>
-
-namespace http {
-namespace server {
-
-struct request;
-
-/// Parser for incoming requests.
-class request_parser
-{
-public:
- /// Construct ready to parse the request method.
- request_parser();
-
- /// Reset to initial parser state.
- void reset();
-
- /// Parse some data. The tribool return value is true when a complete request
- /// has been parsed, false if the data is invalid, indeterminate when more
- /// data is required. The InputIterator return value indicates how much of the
- /// input has been consumed.
- template <typename InputIterator>
- boost::tuple<boost::tribool, InputIterator> parse(request& req,
- InputIterator begin, InputIterator end)
- {
- while (begin != end)
- {
- boost::tribool result = consume(req, *begin++);
- if (result || !result)
- return boost::make_tuple(result, begin);
- }
- boost::tribool result = boost::indeterminate;
- return boost::make_tuple(result, begin);
- }
-
-private:
- /// Handle the next character of input.
- boost::tribool consume(request& req, char input);
-
- /// Check if a byte is an HTTP character.
- static bool is_char(int c);
-
- /// Check if a byte is an HTTP control character.
- static bool is_ctl(int c);
-
- /// Check if a byte is defined as an HTTP tspecial character.
- static bool is_tspecial(int c);
-
- /// Check if a byte is a digit.
- static bool is_digit(int c);
-
- /// The current state of the parser.
- enum state
- {
- method_start,
- method,
- uri,
- http_version_h,
- http_version_t_1,
- http_version_t_2,
- http_version_p,
- http_version_slash,
- http_version_major_start,
- http_version_major,
- http_version_minor_start,
- http_version_minor,
- expecting_newline_1,
- header_line_start,
- header_lws,
- header_name,
- space_before_header_value,
- header_value,
- expecting_newline_2,
- expecting_newline_3
- } state_;
-};
-
-} // namespace server
-} // namespace http
-
-#endif // HTTP_REQUEST_PARSER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/server.cpp b/3rdparty/asio/src/examples/cpp03/http/server/server.cpp
deleted file mode 100644
index 89e19d08d42..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/server.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-//
-// server.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "server.hpp"
-#include <boost/bind.hpp>
-#include <signal.h>
-
-namespace http {
-namespace server {
-
-server::server(const std::string& address, const std::string& port,
- const std::string& doc_root)
- : io_context_(),
- signals_(io_context_),
- acceptor_(io_context_),
- connection_manager_(),
- new_connection_(),
- request_handler_(doc_root)
-{
- // Register to handle the signals that indicate when the server should exit.
- // It is safe to register for the same signal multiple times in a program,
- // provided all registration for the specified signal is made through Asio.
- signals_.add(SIGINT);
- signals_.add(SIGTERM);
-#if defined(SIGQUIT)
- signals_.add(SIGQUIT);
-#endif // defined(SIGQUIT)
- signals_.async_wait(boost::bind(&server::handle_stop, this));
-
- // Open the acceptor with the option to reuse the address (i.e. SO_REUSEADDR).
- asio::ip::tcp::resolver resolver(io_context_);
- asio::ip::tcp::endpoint endpoint =
- *resolver.resolve(address, port).begin();
- acceptor_.open(endpoint.protocol());
- acceptor_.set_option(asio::ip::tcp::acceptor::reuse_address(true));
- acceptor_.bind(endpoint);
- acceptor_.listen();
-
- start_accept();
-}
-
-void server::run()
-{
- // The io_context::run() call will block until all asynchronous operations
- // have finished. While the server is running, there is always at least one
- // asynchronous operation outstanding: the asynchronous accept call waiting
- // for new incoming connections.
- io_context_.run();
-}
-
-void server::start_accept()
-{
- new_connection_.reset(new connection(io_context_,
- connection_manager_, request_handler_));
- acceptor_.async_accept(new_connection_->socket(),
- boost::bind(&server::handle_accept, this,
- asio::placeholders::error));
-}
-
-void server::handle_accept(const asio::error_code& e)
-{
- // Check whether the server was stopped by a signal before this completion
- // handler had a chance to run.
- if (!acceptor_.is_open())
- {
- return;
- }
-
- if (!e)
- {
- connection_manager_.start(new_connection_);
- }
-
- start_accept();
-}
-
-void server::handle_stop()
-{
- // The server is stopped by cancelling all outstanding asynchronous
- // operations. Once all operations have finished the io_context::run() call
- // will exit.
- acceptor_.close();
- connection_manager_.stop_all();
-}
-
-} // namespace server
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server/server.hpp b/3rdparty/asio/src/examples/cpp03/http/server/server.hpp
deleted file mode 100644
index 8b0b1a23296..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server/server.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-//
-// server.hpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER_HPP
-#define HTTP_SERVER_HPP
-
-#include <asio.hpp>
-#include <string>
-#include <boost/noncopyable.hpp>
-#include "connection.hpp"
-#include "connection_manager.hpp"
-#include "request_handler.hpp"
-
-namespace http {
-namespace server {
-
-/// The top-level class of the HTTP server.
-class server
- : private boost::noncopyable
-{
-public:
- /// Construct the server to listen on the specified TCP address and port, and
- /// serve up files from the given directory.
- explicit server(const std::string& address, const std::string& port,
- const std::string& doc_root);
-
- /// Run the server's io_context loop.
- void run();
-
-private:
- /// Initiate an asynchronous accept operation.
- void start_accept();
-
- /// Handle completion of an asynchronous accept operation.
- void handle_accept(const asio::error_code& e);
-
- /// Handle a request to stop the server.
- void handle_stop();
-
- /// The io_context used to perform asynchronous operations.
- asio::io_context io_context_;
-
- /// The signal_set is used to register for process termination notifications.
- asio::signal_set signals_;
-
- /// Acceptor used to listen for incoming connections.
- asio::ip::tcp::acceptor acceptor_;
-
- /// The connection manager which owns all live connections.
- connection_manager connection_manager_;
-
- /// The next connection to be accepted.
- connection_ptr new_connection_;
-
- /// The handler for all incoming requests.
- request_handler request_handler_;
-};
-
-} // namespace server
-} // namespace http
-
-#endif // HTTP_SERVER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/.gitignore b/3rdparty/asio/src/examples/cpp03/http/server2/.gitignore
deleted file mode 100644
index 0882fa6ced3..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*_server
-*_client
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/connection.cpp b/3rdparty/asio/src/examples/cpp03/http/server2/connection.cpp
deleted file mode 100644
index 81f4a102217..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/connection.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-//
-// connection.cpp
-// ~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "connection.hpp"
-#include <vector>
-#include <boost/bind.hpp>
-#include "request_handler.hpp"
-
-namespace http {
-namespace server2 {
-
-connection::connection(asio::io_context& io_context,
- request_handler& handler)
- : socket_(io_context),
- request_handler_(handler)
-{
-}
-
-asio::ip::tcp::socket& connection::socket()
-{
- return socket_;
-}
-
-void connection::start()
-{
- socket_.async_read_some(asio::buffer(buffer_),
- boost::bind(&connection::handle_read, shared_from_this(),
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
-}
-
-void connection::handle_read(const asio::error_code& e,
- std::size_t bytes_transferred)
-{
- if (!e)
- {
- boost::tribool result;
- boost::tie(result, boost::tuples::ignore) = request_parser_.parse(
- request_, buffer_.data(), buffer_.data() + bytes_transferred);
-
- if (result)
- {
- request_handler_.handle_request(request_, reply_);
- asio::async_write(socket_, reply_.to_buffers(),
- boost::bind(&connection::handle_write, shared_from_this(),
- asio::placeholders::error));
- }
- else if (!result)
- {
- reply_ = reply::stock_reply(reply::bad_request);
- asio::async_write(socket_, reply_.to_buffers(),
- boost::bind(&connection::handle_write, shared_from_this(),
- asio::placeholders::error));
- }
- else
- {
- socket_.async_read_some(asio::buffer(buffer_),
- boost::bind(&connection::handle_read, shared_from_this(),
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
- }
-
- // If an error occurs then no new asynchronous operations are started. This
- // means that all shared_ptr references to the connection object will
- // disappear and the object will be destroyed automatically after this
- // handler returns. The connection class's destructor closes the socket.
-}
-
-void connection::handle_write(const asio::error_code& e)
-{
- if (!e)
- {
- // Initiate graceful connection closure.
- asio::error_code ignored_ec;
- socket_.shutdown(asio::ip::tcp::socket::shutdown_both, ignored_ec);
- }
-
- // No new asynchronous operations are started. This means that all shared_ptr
- // references to the connection object will disappear and the object will be
- // destroyed automatically after this handler returns. The connection class's
- // destructor closes the socket.
-}
-
-} // namespace server2
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/connection.hpp b/3rdparty/asio/src/examples/cpp03/http/server2/connection.hpp
deleted file mode 100644
index 9c624a8a172..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/connection.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-//
-// connection.hpp
-// ~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER2_CONNECTION_HPP
-#define HTTP_SERVER2_CONNECTION_HPP
-
-#include <asio.hpp>
-#include <boost/array.hpp>
-#include <boost/noncopyable.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include "reply.hpp"
-#include "request.hpp"
-#include "request_handler.hpp"
-#include "request_parser.hpp"
-
-namespace http {
-namespace server2 {
-
-/// Represents a single connection from a client.
-class connection
- : public boost::enable_shared_from_this<connection>,
- private boost::noncopyable
-{
-public:
- /// Construct a connection with the given io_context.
- explicit connection(asio::io_context& io_context,
- request_handler& handler);
-
- /// Get the socket associated with the connection.
- asio::ip::tcp::socket& socket();
-
- /// Start the first asynchronous operation for the connection.
- void start();
-
-private:
- /// Handle completion of a read operation.
- void handle_read(const asio::error_code& e,
- std::size_t bytes_transferred);
-
- /// Handle completion of a write operation.
- void handle_write(const asio::error_code& e);
-
- /// Socket for the connection.
- asio::ip::tcp::socket socket_;
-
- /// The handler used to process the incoming request.
- request_handler& request_handler_;
-
- /// Buffer for incoming data.
- boost::array<char, 8192> buffer_;
-
- /// The incoming request.
- request request_;
-
- /// The parser for the incoming request.
- request_parser request_parser_;
-
- /// The reply to be sent back to the client.
- reply reply_;
-};
-
-typedef boost::shared_ptr<connection> connection_ptr;
-
-} // namespace server2
-} // namespace http
-
-#endif // HTTP_SERVER2_CONNECTION_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/header.hpp b/3rdparty/asio/src/examples/cpp03/http/server2/header.hpp
deleted file mode 100644
index 0e44c551409..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/header.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// header.hpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER2_HEADER_HPP
-#define HTTP_SERVER2_HEADER_HPP
-
-#include <string>
-
-namespace http {
-namespace server2 {
-
-struct header
-{
- std::string name;
- std::string value;
-};
-
-} // namespace server2
-} // namespace http
-
-#endif // HTTP_SERVER2_HEADER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/io_context_pool.cpp b/3rdparty/asio/src/examples/cpp03/http/server2/io_context_pool.cpp
deleted file mode 100644
index 049ac988615..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/io_context_pool.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-//
-// io_context_pool.cpp
-// ~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "server.hpp"
-#include <stdexcept>
-#include <boost/bind.hpp>
-#include <boost/shared_ptr.hpp>
-
-namespace http {
-namespace server2 {
-
-io_context_pool::io_context_pool(std::size_t pool_size)
- : next_io_context_(0)
-{
- if (pool_size == 0)
- throw std::runtime_error("io_context_pool size is 0");
-
- // Give all the io_contexts work to do so that their run() functions will not
- // exit until they are explicitly stopped.
- for (std::size_t i = 0; i < pool_size; ++i)
- {
- io_context_ptr io_context(new asio::io_context);
- io_contexts_.push_back(io_context);
- work_.push_back(asio::make_work_guard(*io_context));
- }
-}
-
-void io_context_pool::run()
-{
- // Create a pool of threads to run all of the io_contexts.
- std::vector<boost::shared_ptr<asio::thread> > threads;
- for (std::size_t i = 0; i < io_contexts_.size(); ++i)
- {
- boost::shared_ptr<asio::thread> thread(new asio::thread(
- boost::bind(&asio::io_context::run, io_contexts_[i])));
- threads.push_back(thread);
- }
-
- // Wait for all threads in the pool to exit.
- for (std::size_t i = 0; i < threads.size(); ++i)
- threads[i]->join();
-}
-
-void io_context_pool::stop()
-{
- // Explicitly stop all io_contexts.
- for (std::size_t i = 0; i < io_contexts_.size(); ++i)
- io_contexts_[i]->stop();
-}
-
-asio::io_context& io_context_pool::get_io_context()
-{
- // Use a round-robin scheme to choose the next io_context to use.
- asio::io_context& io_context = *io_contexts_[next_io_context_];
- ++next_io_context_;
- if (next_io_context_ == io_contexts_.size())
- next_io_context_ = 0;
- return io_context;
-}
-
-} // namespace server2
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/io_context_pool.hpp b/3rdparty/asio/src/examples/cpp03/http/server2/io_context_pool.hpp
deleted file mode 100644
index 6a573c539f6..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/io_context_pool.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// io_context_pool.hpp
-// ~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER2_IO_SERVICE_POOL_HPP
-#define HTTP_SERVER2_IO_SERVICE_POOL_HPP
-
-#include <asio.hpp>
-#include <vector>
-#include <boost/noncopyable.hpp>
-#include <boost/shared_ptr.hpp>
-
-namespace http {
-namespace server2 {
-
-/// A pool of io_context objects.
-class io_context_pool
- : private boost::noncopyable
-{
-public:
- /// Construct the io_context pool.
- explicit io_context_pool(std::size_t pool_size);
-
- /// Run all io_context objects in the pool.
- void run();
-
- /// Stop all io_context objects in the pool.
- void stop();
-
- /// Get an io_context to use.
- asio::io_context& get_io_context();
-
-private:
- typedef boost::shared_ptr<asio::io_context> io_context_ptr;
- typedef asio::executor_work_guard<
- asio::io_context::executor_type> io_context_work;
-
- /// The pool of io_contexts.
- std::vector<io_context_ptr> io_contexts_;
-
- /// The work that keeps the io_contexts running.
- std::vector<io_context_work> work_;
-
- /// The next io_context to use for a connection.
- std::size_t next_io_context_;
-};
-
-} // namespace server2
-} // namespace http
-
-#endif // HTTP_SERVER2_IO_SERVICE_POOL_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/main.cpp b/3rdparty/asio/src/examples/cpp03/http/server2/main.cpp
deleted file mode 100644
index 2d224c5bac1..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/main.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// main.cpp
-// ~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <string>
-#include <asio.hpp>
-#include <boost/bind.hpp>
-#include <boost/lexical_cast.hpp>
-#include "server.hpp"
-
-int main(int argc, char* argv[])
-{
- try
- {
- // Check command line arguments.
- if (argc != 5)
- {
- std::cerr << "Usage: http_server <address> <port> <threads> <doc_root>\n";
- std::cerr << " For IPv4, try:\n";
- std::cerr << " receiver 0.0.0.0 80 1 .\n";
- std::cerr << " For IPv6, try:\n";
- std::cerr << " receiver 0::0 80 1 .\n";
- return 1;
- }
-
- // Initialise the server.
- std::size_t num_threads = boost::lexical_cast<std::size_t>(argv[3]);
- http::server2::server s(argv[1], argv[2], argv[4], num_threads);
-
- // Run the server until stopped.
- s.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/mime_types.cpp b/3rdparty/asio/src/examples/cpp03/http/server2/mime_types.cpp
deleted file mode 100644
index 640f3aedc44..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/mime_types.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// mime_types.cpp
-// ~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "mime_types.hpp"
-
-namespace http {
-namespace server2 {
-namespace mime_types {
-
-struct mapping
-{
- const char* extension;
- const char* mime_type;
-} mappings[] =
-{
- { "gif", "image/gif" },
- { "htm", "text/html" },
- { "html", "text/html" },
- { "jpg", "image/jpeg" },
- { "png", "image/png" },
- { 0, 0 } // Marks end of list.
-};
-
-std::string extension_to_type(const std::string& extension)
-{
- for (mapping* m = mappings; m->extension; ++m)
- {
- if (m->extension == extension)
- {
- return m->mime_type;
- }
- }
-
- return "text/plain";
-}
-
-} // namespace mime_types
-} // namespace server2
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/mime_types.hpp b/3rdparty/asio/src/examples/cpp03/http/server2/mime_types.hpp
deleted file mode 100644
index 57d1412b7b1..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/mime_types.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-// mime_types.hpp
-// ~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER2_MIME_TYPES_HPP
-#define HTTP_SERVER2_MIME_TYPES_HPP
-
-#include <string>
-
-namespace http {
-namespace server2 {
-namespace mime_types {
-
-/// Convert a file extension into a MIME type.
-std::string extension_to_type(const std::string& extension);
-
-} // namespace mime_types
-} // namespace server2
-} // namespace http
-
-#endif // HTTP_SERVER2_MIME_TYPES_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/reply.cpp b/3rdparty/asio/src/examples/cpp03/http/server2/reply.cpp
deleted file mode 100644
index 958577b2ce4..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/reply.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-//
-// reply.cpp
-// ~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "reply.hpp"
-#include <string>
-#include <boost/lexical_cast.hpp>
-
-namespace http {
-namespace server2 {
-
-namespace status_strings {
-
-const std::string ok =
- "HTTP/1.0 200 OK\r\n";
-const std::string created =
- "HTTP/1.0 201 Created\r\n";
-const std::string accepted =
- "HTTP/1.0 202 Accepted\r\n";
-const std::string no_content =
- "HTTP/1.0 204 No Content\r\n";
-const std::string multiple_choices =
- "HTTP/1.0 300 Multiple Choices\r\n";
-const std::string moved_permanently =
- "HTTP/1.0 301 Moved Permanently\r\n";
-const std::string moved_temporarily =
- "HTTP/1.0 302 Moved Temporarily\r\n";
-const std::string not_modified =
- "HTTP/1.0 304 Not Modified\r\n";
-const std::string bad_request =
- "HTTP/1.0 400 Bad Request\r\n";
-const std::string unauthorized =
- "HTTP/1.0 401 Unauthorized\r\n";
-const std::string forbidden =
- "HTTP/1.0 403 Forbidden\r\n";
-const std::string not_found =
- "HTTP/1.0 404 Not Found\r\n";
-const std::string internal_server_error =
- "HTTP/1.0 500 Internal Server Error\r\n";
-const std::string not_implemented =
- "HTTP/1.0 501 Not Implemented\r\n";
-const std::string bad_gateway =
- "HTTP/1.0 502 Bad Gateway\r\n";
-const std::string service_unavailable =
- "HTTP/1.0 503 Service Unavailable\r\n";
-
-asio::const_buffer to_buffer(reply::status_type status)
-{
- switch (status)
- {
- case reply::ok:
- return asio::buffer(ok);
- case reply::created:
- return asio::buffer(created);
- case reply::accepted:
- return asio::buffer(accepted);
- case reply::no_content:
- return asio::buffer(no_content);
- case reply::multiple_choices:
- return asio::buffer(multiple_choices);
- case reply::moved_permanently:
- return asio::buffer(moved_permanently);
- case reply::moved_temporarily:
- return asio::buffer(moved_temporarily);
- case reply::not_modified:
- return asio::buffer(not_modified);
- case reply::bad_request:
- return asio::buffer(bad_request);
- case reply::unauthorized:
- return asio::buffer(unauthorized);
- case reply::forbidden:
- return asio::buffer(forbidden);
- case reply::not_found:
- return asio::buffer(not_found);
- case reply::internal_server_error:
- return asio::buffer(internal_server_error);
- case reply::not_implemented:
- return asio::buffer(not_implemented);
- case reply::bad_gateway:
- return asio::buffer(bad_gateway);
- case reply::service_unavailable:
- return asio::buffer(service_unavailable);
- default:
- return asio::buffer(internal_server_error);
- }
-}
-
-} // namespace status_strings
-
-namespace misc_strings {
-
-const char name_value_separator[] = { ':', ' ' };
-const char crlf[] = { '\r', '\n' };
-
-} // namespace misc_strings
-
-std::vector<asio::const_buffer> reply::to_buffers()
-{
- std::vector<asio::const_buffer> buffers;
- buffers.push_back(status_strings::to_buffer(status));
- for (std::size_t i = 0; i < headers.size(); ++i)
- {
- header& h = headers[i];
- buffers.push_back(asio::buffer(h.name));
- buffers.push_back(asio::buffer(misc_strings::name_value_separator));
- buffers.push_back(asio::buffer(h.value));
- buffers.push_back(asio::buffer(misc_strings::crlf));
- }
- buffers.push_back(asio::buffer(misc_strings::crlf));
- buffers.push_back(asio::buffer(content));
- return buffers;
-}
-
-namespace stock_replies {
-
-const char ok[] = "";
-const char created[] =
- "<html>"
- "<head><title>Created</title></head>"
- "<body><h1>201 Created</h1></body>"
- "</html>";
-const char accepted[] =
- "<html>"
- "<head><title>Accepted</title></head>"
- "<body><h1>202 Accepted</h1></body>"
- "</html>";
-const char no_content[] =
- "<html>"
- "<head><title>No Content</title></head>"
- "<body><h1>204 Content</h1></body>"
- "</html>";
-const char multiple_choices[] =
- "<html>"
- "<head><title>Multiple Choices</title></head>"
- "<body><h1>300 Multiple Choices</h1></body>"
- "</html>";
-const char moved_permanently[] =
- "<html>"
- "<head><title>Moved Permanently</title></head>"
- "<body><h1>301 Moved Permanently</h1></body>"
- "</html>";
-const char moved_temporarily[] =
- "<html>"
- "<head><title>Moved Temporarily</title></head>"
- "<body><h1>302 Moved Temporarily</h1></body>"
- "</html>";
-const char not_modified[] =
- "<html>"
- "<head><title>Not Modified</title></head>"
- "<body><h1>304 Not Modified</h1></body>"
- "</html>";
-const char bad_request[] =
- "<html>"
- "<head><title>Bad Request</title></head>"
- "<body><h1>400 Bad Request</h1></body>"
- "</html>";
-const char unauthorized[] =
- "<html>"
- "<head><title>Unauthorized</title></head>"
- "<body><h1>401 Unauthorized</h1></body>"
- "</html>";
-const char forbidden[] =
- "<html>"
- "<head><title>Forbidden</title></head>"
- "<body><h1>403 Forbidden</h1></body>"
- "</html>";
-const char not_found[] =
- "<html>"
- "<head><title>Not Found</title></head>"
- "<body><h1>404 Not Found</h1></body>"
- "</html>";
-const char internal_server_error[] =
- "<html>"
- "<head><title>Internal Server Error</title></head>"
- "<body><h1>500 Internal Server Error</h1></body>"
- "</html>";
-const char not_implemented[] =
- "<html>"
- "<head><title>Not Implemented</title></head>"
- "<body><h1>501 Not Implemented</h1></body>"
- "</html>";
-const char bad_gateway[] =
- "<html>"
- "<head><title>Bad Gateway</title></head>"
- "<body><h1>502 Bad Gateway</h1></body>"
- "</html>";
-const char service_unavailable[] =
- "<html>"
- "<head><title>Service Unavailable</title></head>"
- "<body><h1>503 Service Unavailable</h1></body>"
- "</html>";
-
-std::string to_string(reply::status_type status)
-{
- switch (status)
- {
- case reply::ok:
- return ok;
- case reply::created:
- return created;
- case reply::accepted:
- return accepted;
- case reply::no_content:
- return no_content;
- case reply::multiple_choices:
- return multiple_choices;
- case reply::moved_permanently:
- return moved_permanently;
- case reply::moved_temporarily:
- return moved_temporarily;
- case reply::not_modified:
- return not_modified;
- case reply::bad_request:
- return bad_request;
- case reply::unauthorized:
- return unauthorized;
- case reply::forbidden:
- return forbidden;
- case reply::not_found:
- return not_found;
- case reply::internal_server_error:
- return internal_server_error;
- case reply::not_implemented:
- return not_implemented;
- case reply::bad_gateway:
- return bad_gateway;
- case reply::service_unavailable:
- return service_unavailable;
- default:
- return internal_server_error;
- }
-}
-
-} // namespace stock_replies
-
-reply reply::stock_reply(reply::status_type status)
-{
- reply rep;
- rep.status = status;
- rep.content = stock_replies::to_string(status);
- rep.headers.resize(2);
- rep.headers[0].name = "Content-Length";
- rep.headers[0].value = boost::lexical_cast<std::string>(rep.content.size());
- rep.headers[1].name = "Content-Type";
- rep.headers[1].value = "text/html";
- return rep;
-}
-
-} // namespace server2
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/reply.hpp b/3rdparty/asio/src/examples/cpp03/http/server2/reply.hpp
deleted file mode 100644
index 17f11e7dde3..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/reply.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-//
-// reply.hpp
-// ~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER2_REPLY_HPP
-#define HTTP_SERVER2_REPLY_HPP
-
-#include <string>
-#include <vector>
-#include <asio.hpp>
-#include "header.hpp"
-
-namespace http {
-namespace server2 {
-
-/// A reply to be sent to a client.
-struct reply
-{
- /// The status of the reply.
- enum status_type
- {
- ok = 200,
- created = 201,
- accepted = 202,
- no_content = 204,
- multiple_choices = 300,
- moved_permanently = 301,
- moved_temporarily = 302,
- not_modified = 304,
- bad_request = 400,
- unauthorized = 401,
- forbidden = 403,
- not_found = 404,
- internal_server_error = 500,
- not_implemented = 501,
- bad_gateway = 502,
- service_unavailable = 503
- } status;
-
- /// The headers to be included in the reply.
- std::vector<header> headers;
-
- /// The content to be sent in the reply.
- std::string content;
-
- /// Convert the reply into a vector of buffers. The buffers do not own the
- /// underlying memory blocks, therefore the reply object must remain valid and
- /// not be changed until the write operation has completed.
- std::vector<asio::const_buffer> to_buffers();
-
- /// Get a stock reply.
- static reply stock_reply(status_type status);
-};
-
-} // namespace server2
-} // namespace http
-
-#endif // HTTP_SERVER2_REPLY_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/request.hpp b/3rdparty/asio/src/examples/cpp03/http/server2/request.hpp
deleted file mode 100644
index 39070ee2f84..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/request.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// request.hpp
-// ~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER2_REQUEST_HPP
-#define HTTP_SERVER2_REQUEST_HPP
-
-#include <string>
-#include <vector>
-#include "header.hpp"
-
-namespace http {
-namespace server2 {
-
-/// A request received from a client.
-struct request
-{
- std::string method;
- std::string uri;
- int http_version_major;
- int http_version_minor;
- std::vector<header> headers;
-};
-
-} // namespace server2
-} // namespace http
-
-#endif // HTTP_SERVER2_REQUEST_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/request_handler.cpp b/3rdparty/asio/src/examples/cpp03/http/server2/request_handler.cpp
deleted file mode 100644
index 9369c107166..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/request_handler.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// request_handler.cpp
-// ~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "request_handler.hpp"
-#include <fstream>
-#include <sstream>
-#include <string>
-#include <boost/lexical_cast.hpp>
-#include "mime_types.hpp"
-#include "reply.hpp"
-#include "request.hpp"
-
-namespace http {
-namespace server2 {
-
-request_handler::request_handler(const std::string& doc_root)
- : doc_root_(doc_root)
-{
-}
-
-void request_handler::handle_request(const request& req, reply& rep)
-{
- // Decode url to path.
- std::string request_path;
- if (!url_decode(req.uri, request_path))
- {
- rep = reply::stock_reply(reply::bad_request);
- return;
- }
-
- // Request path must be absolute and not contain "..".
- if (request_path.empty() || request_path[0] != '/'
- || request_path.find("..") != std::string::npos)
- {
- rep = reply::stock_reply(reply::bad_request);
- return;
- }
-
- // If path ends in slash (i.e. is a directory) then add "index.html".
- if (request_path[request_path.size() - 1] == '/')
- {
- request_path += "index.html";
- }
-
- // Determine the file extension.
- std::size_t last_slash_pos = request_path.find_last_of("/");
- std::size_t last_dot_pos = request_path.find_last_of(".");
- std::string extension;
- if (last_dot_pos != std::string::npos && last_dot_pos > last_slash_pos)
- {
- extension = request_path.substr(last_dot_pos + 1);
- }
-
- // Open the file to send back.
- std::string full_path = doc_root_ + request_path;
- std::ifstream is(full_path.c_str(), std::ios::in | std::ios::binary);
- if (!is)
- {
- rep = reply::stock_reply(reply::not_found);
- return;
- }
-
- // Fill out the reply to be sent to the client.
- rep.status = reply::ok;
- char buf[512];
- while (is.read(buf, sizeof(buf)).gcount() > 0)
- rep.content.append(buf, is.gcount());
- rep.headers.resize(2);
- rep.headers[0].name = "Content-Length";
- rep.headers[0].value = boost::lexical_cast<std::string>(rep.content.size());
- rep.headers[1].name = "Content-Type";
- rep.headers[1].value = mime_types::extension_to_type(extension);
-}
-
-bool request_handler::url_decode(const std::string& in, std::string& out)
-{
- out.clear();
- out.reserve(in.size());
- for (std::size_t i = 0; i < in.size(); ++i)
- {
- if (in[i] == '%')
- {
- if (i + 3 <= in.size())
- {
- int value = 0;
- std::istringstream is(in.substr(i + 1, 2));
- if (is >> std::hex >> value)
- {
- out += static_cast<char>(value);
- i += 2;
- }
- else
- {
- return false;
- }
- }
- else
- {
- return false;
- }
- }
- else if (in[i] == '+')
- {
- out += ' ';
- }
- else
- {
- out += in[i];
- }
- }
- return true;
-}
-
-} // namespace server2
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/request_handler.hpp b/3rdparty/asio/src/examples/cpp03/http/server2/request_handler.hpp
deleted file mode 100644
index 8d24686fa54..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/request_handler.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// request_handler.hpp
-// ~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER2_REQUEST_HANDLER_HPP
-#define HTTP_SERVER2_REQUEST_HANDLER_HPP
-
-#include <string>
-#include <boost/noncopyable.hpp>
-
-namespace http {
-namespace server2 {
-
-struct reply;
-struct request;
-
-/// The common handler for all incoming requests.
-class request_handler
- : private boost::noncopyable
-{
-public:
- /// Construct with a directory containing files to be served.
- explicit request_handler(const std::string& doc_root);
-
- /// Handle a request and produce a reply.
- void handle_request(const request& req, reply& rep);
-
-private:
- /// The directory containing the files to be served.
- std::string doc_root_;
-
- /// Perform URL-decoding on a string. Returns false if the encoding was
- /// invalid.
- static bool url_decode(const std::string& in, std::string& out);
-};
-
-} // namespace server2
-} // namespace http
-
-#endif // HTTP_SERVER2_REQUEST_HANDLER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/request_parser.cpp b/3rdparty/asio/src/examples/cpp03/http/server2/request_parser.cpp
deleted file mode 100644
index ae80b20f784..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/request_parser.cpp
+++ /dev/null
@@ -1,315 +0,0 @@
-//
-// request_parser.cpp
-// ~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "request_parser.hpp"
-#include "request.hpp"
-
-namespace http {
-namespace server2 {
-
-request_parser::request_parser()
- : state_(method_start)
-{
-}
-
-void request_parser::reset()
-{
- state_ = method_start;
-}
-
-boost::tribool request_parser::consume(request& req, char input)
-{
- switch (state_)
- {
- case method_start:
- if (!is_char(input) || is_ctl(input) || is_tspecial(input))
- {
- return false;
- }
- else
- {
- state_ = method;
- req.method.push_back(input);
- return boost::indeterminate;
- }
- case method:
- if (input == ' ')
- {
- state_ = uri;
- return boost::indeterminate;
- }
- else if (!is_char(input) || is_ctl(input) || is_tspecial(input))
- {
- return false;
- }
- else
- {
- req.method.push_back(input);
- return boost::indeterminate;
- }
- case uri:
- if (input == ' ')
- {
- state_ = http_version_h;
- return boost::indeterminate;
- }
- else if (is_ctl(input))
- {
- return false;
- }
- else
- {
- req.uri.push_back(input);
- return boost::indeterminate;
- }
- case http_version_h:
- if (input == 'H')
- {
- state_ = http_version_t_1;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_t_1:
- if (input == 'T')
- {
- state_ = http_version_t_2;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_t_2:
- if (input == 'T')
- {
- state_ = http_version_p;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_p:
- if (input == 'P')
- {
- state_ = http_version_slash;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_slash:
- if (input == '/')
- {
- req.http_version_major = 0;
- req.http_version_minor = 0;
- state_ = http_version_major_start;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_major_start:
- if (is_digit(input))
- {
- req.http_version_major = req.http_version_major * 10 + input - '0';
- state_ = http_version_major;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_major:
- if (input == '.')
- {
- state_ = http_version_minor_start;
- return boost::indeterminate;
- }
- else if (is_digit(input))
- {
- req.http_version_major = req.http_version_major * 10 + input - '0';
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_minor_start:
- if (is_digit(input))
- {
- req.http_version_minor = req.http_version_minor * 10 + input - '0';
- state_ = http_version_minor;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_minor:
- if (input == '\r')
- {
- state_ = expecting_newline_1;
- return boost::indeterminate;
- }
- else if (is_digit(input))
- {
- req.http_version_minor = req.http_version_minor * 10 + input - '0';
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case expecting_newline_1:
- if (input == '\n')
- {
- state_ = header_line_start;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case header_line_start:
- if (input == '\r')
- {
- state_ = expecting_newline_3;
- return boost::indeterminate;
- }
- else if (!req.headers.empty() && (input == ' ' || input == '\t'))
- {
- state_ = header_lws;
- return boost::indeterminate;
- }
- else if (!is_char(input) || is_ctl(input) || is_tspecial(input))
- {
- return false;
- }
- else
- {
- req.headers.push_back(header());
- req.headers.back().name.push_back(input);
- state_ = header_name;
- return boost::indeterminate;
- }
- case header_lws:
- if (input == '\r')
- {
- state_ = expecting_newline_2;
- return boost::indeterminate;
- }
- else if (input == ' ' || input == '\t')
- {
- return boost::indeterminate;
- }
- else if (is_ctl(input))
- {
- return false;
- }
- else
- {
- state_ = header_value;
- req.headers.back().value.push_back(input);
- return boost::indeterminate;
- }
- case header_name:
- if (input == ':')
- {
- state_ = space_before_header_value;
- return boost::indeterminate;
- }
- else if (!is_char(input) || is_ctl(input) || is_tspecial(input))
- {
- return false;
- }
- else
- {
- req.headers.back().name.push_back(input);
- return boost::indeterminate;
- }
- case space_before_header_value:
- if (input == ' ')
- {
- state_ = header_value;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case header_value:
- if (input == '\r')
- {
- state_ = expecting_newline_2;
- return boost::indeterminate;
- }
- else if (is_ctl(input))
- {
- return false;
- }
- else
- {
- req.headers.back().value.push_back(input);
- return boost::indeterminate;
- }
- case expecting_newline_2:
- if (input == '\n')
- {
- state_ = header_line_start;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case expecting_newline_3:
- return (input == '\n');
- default:
- return false;
- }
-}
-
-bool request_parser::is_char(int c)
-{
- return c >= 0 && c <= 127;
-}
-
-bool request_parser::is_ctl(int c)
-{
- return (c >= 0 && c <= 31) || (c == 127);
-}
-
-bool request_parser::is_tspecial(int c)
-{
- switch (c)
- {
- case '(': case ')': case '<': case '>': case '@':
- case ',': case ';': case ':': case '\\': case '"':
- case '/': case '[': case ']': case '?': case '=':
- case '{': case '}': case ' ': case '\t':
- return true;
- default:
- return false;
- }
-}
-
-bool request_parser::is_digit(int c)
-{
- return c >= '0' && c <= '9';
-}
-
-} // namespace server2
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/request_parser.hpp b/3rdparty/asio/src/examples/cpp03/http/server2/request_parser.hpp
deleted file mode 100644
index 133a6492058..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/request_parser.hpp
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// request_parser.hpp
-// ~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER2_REQUEST_PARSER_HPP
-#define HTTP_SERVER2_REQUEST_PARSER_HPP
-
-#include <boost/logic/tribool.hpp>
-#include <boost/tuple/tuple.hpp>
-
-namespace http {
-namespace server2 {
-
-struct request;
-
-/// Parser for incoming requests.
-class request_parser
-{
-public:
- /// Construct ready to parse the request method.
- request_parser();
-
- /// Reset to initial parser state.
- void reset();
-
- /// Parse some data. The tribool return value is true when a complete request
- /// has been parsed, false if the data is invalid, indeterminate when more
- /// data is required. The InputIterator return value indicates how much of the
- /// input has been consumed.
- template <typename InputIterator>
- boost::tuple<boost::tribool, InputIterator> parse(request& req,
- InputIterator begin, InputIterator end)
- {
- while (begin != end)
- {
- boost::tribool result = consume(req, *begin++);
- if (result || !result)
- return boost::make_tuple(result, begin);
- }
- boost::tribool result = boost::indeterminate;
- return boost::make_tuple(result, begin);
- }
-
-private:
- /// Handle the next character of input.
- boost::tribool consume(request& req, char input);
-
- /// Check if a byte is an HTTP character.
- static bool is_char(int c);
-
- /// Check if a byte is an HTTP control character.
- static bool is_ctl(int c);
-
- /// Check if a byte is defined as an HTTP tspecial character.
- static bool is_tspecial(int c);
-
- /// Check if a byte is a digit.
- static bool is_digit(int c);
-
- /// The current state of the parser.
- enum state
- {
- method_start,
- method,
- uri,
- http_version_h,
- http_version_t_1,
- http_version_t_2,
- http_version_p,
- http_version_slash,
- http_version_major_start,
- http_version_major,
- http_version_minor_start,
- http_version_minor,
- expecting_newline_1,
- header_line_start,
- header_lws,
- header_name,
- space_before_header_value,
- header_value,
- expecting_newline_2,
- expecting_newline_3
- } state_;
-};
-
-} // namespace server2
-} // namespace http
-
-#endif // HTTP_SERVER2_REQUEST_PARSER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/server.cpp b/3rdparty/asio/src/examples/cpp03/http/server2/server.cpp
deleted file mode 100644
index 75d3a48aa84..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/server.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-//
-// server.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "server.hpp"
-#include <boost/bind.hpp>
-
-namespace http {
-namespace server2 {
-
-server::server(const std::string& address, const std::string& port,
- const std::string& doc_root, std::size_t io_context_pool_size)
- : io_context_pool_(io_context_pool_size),
- signals_(io_context_pool_.get_io_context()),
- acceptor_(io_context_pool_.get_io_context()),
- new_connection_(),
- request_handler_(doc_root)
-{
- // Register to handle the signals that indicate when the server should exit.
- // It is safe to register for the same signal multiple times in a program,
- // provided all registration for the specified signal is made through Asio.
- signals_.add(SIGINT);
- signals_.add(SIGTERM);
-#if defined(SIGQUIT)
- signals_.add(SIGQUIT);
-#endif // defined(SIGQUIT)
- signals_.async_wait(boost::bind(&server::handle_stop, this));
-
- // Open the acceptor with the option to reuse the address (i.e. SO_REUSEADDR).
- asio::ip::tcp::resolver resolver(acceptor_.get_executor().context());
- asio::ip::tcp::endpoint endpoint =
- *resolver.resolve(address, port).begin();
- acceptor_.open(endpoint.protocol());
- acceptor_.set_option(asio::ip::tcp::acceptor::reuse_address(true));
- acceptor_.bind(endpoint);
- acceptor_.listen();
-
- start_accept();
-}
-
-void server::run()
-{
- io_context_pool_.run();
-}
-
-void server::start_accept()
-{
- new_connection_.reset(new connection(
- io_context_pool_.get_io_context(), request_handler_));
- acceptor_.async_accept(new_connection_->socket(),
- boost::bind(&server::handle_accept, this,
- asio::placeholders::error));
-}
-
-void server::handle_accept(const asio::error_code& e)
-{
- if (!e)
- {
- new_connection_->start();
- }
-
- start_accept();
-}
-
-void server::handle_stop()
-{
- io_context_pool_.stop();
-}
-
-} // namespace server2
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/server.hpp b/3rdparty/asio/src/examples/cpp03/http/server2/server.hpp
deleted file mode 100644
index 6a742a8220a..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server2/server.hpp
+++ /dev/null
@@ -1,68 +0,0 @@
-//
-// server.hpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER2_SERVER_HPP
-#define HTTP_SERVER2_SERVER_HPP
-
-#include <asio.hpp>
-#include <string>
-#include <vector>
-#include <boost/noncopyable.hpp>
-#include <boost/shared_ptr.hpp>
-#include "connection.hpp"
-#include "io_context_pool.hpp"
-#include "request_handler.hpp"
-
-namespace http {
-namespace server2 {
-
-/// The top-level class of the HTTP server.
-class server
- : private boost::noncopyable
-{
-public:
- /// Construct the server to listen on the specified TCP address and port, and
- /// serve up files from the given directory.
- explicit server(const std::string& address, const std::string& port,
- const std::string& doc_root, std::size_t io_context_pool_size);
-
- /// Run the server's io_context loop.
- void run();
-
-private:
- /// Initiate an asynchronous accept operation.
- void start_accept();
-
- /// Handle completion of an asynchronous accept operation.
- void handle_accept(const asio::error_code& e);
-
- /// Handle a request to stop the server.
- void handle_stop();
-
- /// The pool of io_context objects used to perform asynchronous operations.
- io_context_pool io_context_pool_;
-
- /// The signal_set is used to register for process termination notifications.
- asio::signal_set signals_;
-
- /// Acceptor used to listen for incoming connections.
- asio::ip::tcp::acceptor acceptor_;
-
- /// The next connection to be accepted.
- connection_ptr new_connection_;
-
- /// The handler for all incoming requests.
- request_handler request_handler_;
-};
-
-} // namespace server2
-} // namespace http
-
-#endif // HTTP_SERVER2_SERVER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/.gitignore b/3rdparty/asio/src/examples/cpp03/http/server3/.gitignore
deleted file mode 100644
index 0882fa6ced3..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*_server
-*_client
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/connection.cpp b/3rdparty/asio/src/examples/cpp03/http/server3/connection.cpp
deleted file mode 100644
index 5db960a9109..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/connection.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-//
-// connection.cpp
-// ~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "connection.hpp"
-#include <vector>
-#include <boost/bind.hpp>
-#include "request_handler.hpp"
-
-namespace http {
-namespace server3 {
-
-connection::connection(asio::io_context& io_context,
- request_handler& handler)
- : strand_(io_context),
- socket_(io_context),
- request_handler_(handler)
-{
-}
-
-asio::ip::tcp::socket& connection::socket()
-{
- return socket_;
-}
-
-void connection::start()
-{
- socket_.async_read_some(asio::buffer(buffer_),
- asio::bind_executor(strand_,
- boost::bind(&connection::handle_read, shared_from_this(),
- asio::placeholders::error,
- asio::placeholders::bytes_transferred)));
-}
-
-void connection::handle_read(const asio::error_code& e,
- std::size_t bytes_transferred)
-{
- if (!e)
- {
- boost::tribool result;
- boost::tie(result, boost::tuples::ignore) = request_parser_.parse(
- request_, buffer_.data(), buffer_.data() + bytes_transferred);
-
- if (result)
- {
- request_handler_.handle_request(request_, reply_);
- asio::async_write(socket_, reply_.to_buffers(),
- asio::bind_executor(strand_,
- boost::bind(&connection::handle_write, shared_from_this(),
- asio::placeholders::error)));
- }
- else if (!result)
- {
- reply_ = reply::stock_reply(reply::bad_request);
- asio::async_write(socket_, reply_.to_buffers(),
- asio::bind_executor(strand_,
- boost::bind(&connection::handle_write, shared_from_this(),
- asio::placeholders::error)));
- }
- else
- {
- socket_.async_read_some(asio::buffer(buffer_),
- asio::bind_executor(strand_,
- boost::bind(&connection::handle_read, shared_from_this(),
- asio::placeholders::error,
- asio::placeholders::bytes_transferred)));
- }
- }
-
- // If an error occurs then no new asynchronous operations are started. This
- // means that all shared_ptr references to the connection object will
- // disappear and the object will be destroyed automatically after this
- // handler returns. The connection class's destructor closes the socket.
-}
-
-void connection::handle_write(const asio::error_code& e)
-{
- if (!e)
- {
- // Initiate graceful connection closure.
- asio::error_code ignored_ec;
- socket_.shutdown(asio::ip::tcp::socket::shutdown_both, ignored_ec);
- }
-
- // No new asynchronous operations are started. This means that all shared_ptr
- // references to the connection object will disappear and the object will be
- // destroyed automatically after this handler returns. The connection class's
- // destructor closes the socket.
-}
-
-} // namespace server3
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/connection.hpp b/3rdparty/asio/src/examples/cpp03/http/server3/connection.hpp
deleted file mode 100644
index 2aac1a5c7ae..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/connection.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-//
-// connection.hpp
-// ~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER3_CONNECTION_HPP
-#define HTTP_SERVER3_CONNECTION_HPP
-
-#include <asio.hpp>
-#include <boost/array.hpp>
-#include <boost/noncopyable.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include "reply.hpp"
-#include "request.hpp"
-#include "request_handler.hpp"
-#include "request_parser.hpp"
-
-namespace http {
-namespace server3 {
-
-/// Represents a single connection from a client.
-class connection
- : public boost::enable_shared_from_this<connection>,
- private boost::noncopyable
-{
-public:
- /// Construct a connection with the given io_context.
- explicit connection(asio::io_context& io_context,
- request_handler& handler);
-
- /// Get the socket associated with the connection.
- asio::ip::tcp::socket& socket();
-
- /// Start the first asynchronous operation for the connection.
- void start();
-
-private:
- /// Handle completion of a read operation.
- void handle_read(const asio::error_code& e,
- std::size_t bytes_transferred);
-
- /// Handle completion of a write operation.
- void handle_write(const asio::error_code& e);
-
- /// Strand to ensure the connection's handlers are not called concurrently.
- asio::io_context::strand strand_;
-
- /// Socket for the connection.
- asio::ip::tcp::socket socket_;
-
- /// The handler used to process the incoming request.
- request_handler& request_handler_;
-
- /// Buffer for incoming data.
- boost::array<char, 8192> buffer_;
-
- /// The incoming request.
- request request_;
-
- /// The parser for the incoming request.
- request_parser request_parser_;
-
- /// The reply to be sent back to the client.
- reply reply_;
-};
-
-typedef boost::shared_ptr<connection> connection_ptr;
-
-} // namespace server3
-} // namespace http
-
-#endif // HTTP_SERVER3_CONNECTION_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/header.hpp b/3rdparty/asio/src/examples/cpp03/http/server3/header.hpp
deleted file mode 100644
index 207c6290784..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/header.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// header.hpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER3_HEADER_HPP
-#define HTTP_SERVER3_HEADER_HPP
-
-#include <string>
-
-namespace http {
-namespace server3 {
-
-struct header
-{
- std::string name;
- std::string value;
-};
-
-} // namespace server3
-} // namespace http
-
-#endif // HTTP_SERVER3_HEADER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/main.cpp b/3rdparty/asio/src/examples/cpp03/http/server3/main.cpp
deleted file mode 100644
index 367efad729f..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/main.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// main.cpp
-// ~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <string>
-#include <asio.hpp>
-#include <boost/bind.hpp>
-#include <boost/lexical_cast.hpp>
-#include "server.hpp"
-
-int main(int argc, char* argv[])
-{
- try
- {
- // Check command line arguments.
- if (argc != 5)
- {
- std::cerr << "Usage: http_server <address> <port> <threads> <doc_root>\n";
- std::cerr << " For IPv4, try:\n";
- std::cerr << " receiver 0.0.0.0 80 1 .\n";
- std::cerr << " For IPv6, try:\n";
- std::cerr << " receiver 0::0 80 1 .\n";
- return 1;
- }
-
- // Initialise the server.
- std::size_t num_threads = boost::lexical_cast<std::size_t>(argv[3]);
- http::server3::server s(argv[1], argv[2], argv[4], num_threads);
-
- // Run the server until stopped.
- s.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/mime_types.cpp b/3rdparty/asio/src/examples/cpp03/http/server3/mime_types.cpp
deleted file mode 100644
index 0b0c66e3ce4..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/mime_types.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// mime_types.cpp
-// ~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "mime_types.hpp"
-
-namespace http {
-namespace server3 {
-namespace mime_types {
-
-struct mapping
-{
- const char* extension;
- const char* mime_type;
-} mappings[] =
-{
- { "gif", "image/gif" },
- { "htm", "text/html" },
- { "html", "text/html" },
- { "jpg", "image/jpeg" },
- { "png", "image/png" },
- { 0, 0 } // Marks end of list.
-};
-
-std::string extension_to_type(const std::string& extension)
-{
- for (mapping* m = mappings; m->extension; ++m)
- {
- if (m->extension == extension)
- {
- return m->mime_type;
- }
- }
-
- return "text/plain";
-}
-
-} // namespace mime_types
-} // namespace server3
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/mime_types.hpp b/3rdparty/asio/src/examples/cpp03/http/server3/mime_types.hpp
deleted file mode 100644
index 502766aa5ab..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/mime_types.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-// mime_types.hpp
-// ~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER3_MIME_TYPES_HPP
-#define HTTP_SERVER3_MIME_TYPES_HPP
-
-#include <string>
-
-namespace http {
-namespace server3 {
-namespace mime_types {
-
-/// Convert a file extension into a MIME type.
-std::string extension_to_type(const std::string& extension);
-
-} // namespace mime_types
-} // namespace server3
-} // namespace http
-
-#endif // HTTP_SERVER3_MIME_TYPES_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/reply.cpp b/3rdparty/asio/src/examples/cpp03/http/server3/reply.cpp
deleted file mode 100644
index 79790a1df77..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/reply.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-//
-// reply.cpp
-// ~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "reply.hpp"
-#include <string>
-#include <boost/lexical_cast.hpp>
-
-namespace http {
-namespace server3 {
-
-namespace status_strings {
-
-const std::string ok =
- "HTTP/1.0 200 OK\r\n";
-const std::string created =
- "HTTP/1.0 201 Created\r\n";
-const std::string accepted =
- "HTTP/1.0 202 Accepted\r\n";
-const std::string no_content =
- "HTTP/1.0 204 No Content\r\n";
-const std::string multiple_choices =
- "HTTP/1.0 300 Multiple Choices\r\n";
-const std::string moved_permanently =
- "HTTP/1.0 301 Moved Permanently\r\n";
-const std::string moved_temporarily =
- "HTTP/1.0 302 Moved Temporarily\r\n";
-const std::string not_modified =
- "HTTP/1.0 304 Not Modified\r\n";
-const std::string bad_request =
- "HTTP/1.0 400 Bad Request\r\n";
-const std::string unauthorized =
- "HTTP/1.0 401 Unauthorized\r\n";
-const std::string forbidden =
- "HTTP/1.0 403 Forbidden\r\n";
-const std::string not_found =
- "HTTP/1.0 404 Not Found\r\n";
-const std::string internal_server_error =
- "HTTP/1.0 500 Internal Server Error\r\n";
-const std::string not_implemented =
- "HTTP/1.0 501 Not Implemented\r\n";
-const std::string bad_gateway =
- "HTTP/1.0 502 Bad Gateway\r\n";
-const std::string service_unavailable =
- "HTTP/1.0 503 Service Unavailable\r\n";
-
-asio::const_buffer to_buffer(reply::status_type status)
-{
- switch (status)
- {
- case reply::ok:
- return asio::buffer(ok);
- case reply::created:
- return asio::buffer(created);
- case reply::accepted:
- return asio::buffer(accepted);
- case reply::no_content:
- return asio::buffer(no_content);
- case reply::multiple_choices:
- return asio::buffer(multiple_choices);
- case reply::moved_permanently:
- return asio::buffer(moved_permanently);
- case reply::moved_temporarily:
- return asio::buffer(moved_temporarily);
- case reply::not_modified:
- return asio::buffer(not_modified);
- case reply::bad_request:
- return asio::buffer(bad_request);
- case reply::unauthorized:
- return asio::buffer(unauthorized);
- case reply::forbidden:
- return asio::buffer(forbidden);
- case reply::not_found:
- return asio::buffer(not_found);
- case reply::internal_server_error:
- return asio::buffer(internal_server_error);
- case reply::not_implemented:
- return asio::buffer(not_implemented);
- case reply::bad_gateway:
- return asio::buffer(bad_gateway);
- case reply::service_unavailable:
- return asio::buffer(service_unavailable);
- default:
- return asio::buffer(internal_server_error);
- }
-}
-
-} // namespace status_strings
-
-namespace misc_strings {
-
-const char name_value_separator[] = { ':', ' ' };
-const char crlf[] = { '\r', '\n' };
-
-} // namespace misc_strings
-
-std::vector<asio::const_buffer> reply::to_buffers()
-{
- std::vector<asio::const_buffer> buffers;
- buffers.push_back(status_strings::to_buffer(status));
- for (std::size_t i = 0; i < headers.size(); ++i)
- {
- header& h = headers[i];
- buffers.push_back(asio::buffer(h.name));
- buffers.push_back(asio::buffer(misc_strings::name_value_separator));
- buffers.push_back(asio::buffer(h.value));
- buffers.push_back(asio::buffer(misc_strings::crlf));
- }
- buffers.push_back(asio::buffer(misc_strings::crlf));
- buffers.push_back(asio::buffer(content));
- return buffers;
-}
-
-namespace stock_replies {
-
-const char ok[] = "";
-const char created[] =
- "<html>"
- "<head><title>Created</title></head>"
- "<body><h1>201 Created</h1></body>"
- "</html>";
-const char accepted[] =
- "<html>"
- "<head><title>Accepted</title></head>"
- "<body><h1>202 Accepted</h1></body>"
- "</html>";
-const char no_content[] =
- "<html>"
- "<head><title>No Content</title></head>"
- "<body><h1>204 Content</h1></body>"
- "</html>";
-const char multiple_choices[] =
- "<html>"
- "<head><title>Multiple Choices</title></head>"
- "<body><h1>300 Multiple Choices</h1></body>"
- "</html>";
-const char moved_permanently[] =
- "<html>"
- "<head><title>Moved Permanently</title></head>"
- "<body><h1>301 Moved Permanently</h1></body>"
- "</html>";
-const char moved_temporarily[] =
- "<html>"
- "<head><title>Moved Temporarily</title></head>"
- "<body><h1>302 Moved Temporarily</h1></body>"
- "</html>";
-const char not_modified[] =
- "<html>"
- "<head><title>Not Modified</title></head>"
- "<body><h1>304 Not Modified</h1></body>"
- "</html>";
-const char bad_request[] =
- "<html>"
- "<head><title>Bad Request</title></head>"
- "<body><h1>400 Bad Request</h1></body>"
- "</html>";
-const char unauthorized[] =
- "<html>"
- "<head><title>Unauthorized</title></head>"
- "<body><h1>401 Unauthorized</h1></body>"
- "</html>";
-const char forbidden[] =
- "<html>"
- "<head><title>Forbidden</title></head>"
- "<body><h1>403 Forbidden</h1></body>"
- "</html>";
-const char not_found[] =
- "<html>"
- "<head><title>Not Found</title></head>"
- "<body><h1>404 Not Found</h1></body>"
- "</html>";
-const char internal_server_error[] =
- "<html>"
- "<head><title>Internal Server Error</title></head>"
- "<body><h1>500 Internal Server Error</h1></body>"
- "</html>";
-const char not_implemented[] =
- "<html>"
- "<head><title>Not Implemented</title></head>"
- "<body><h1>501 Not Implemented</h1></body>"
- "</html>";
-const char bad_gateway[] =
- "<html>"
- "<head><title>Bad Gateway</title></head>"
- "<body><h1>502 Bad Gateway</h1></body>"
- "</html>";
-const char service_unavailable[] =
- "<html>"
- "<head><title>Service Unavailable</title></head>"
- "<body><h1>503 Service Unavailable</h1></body>"
- "</html>";
-
-std::string to_string(reply::status_type status)
-{
- switch (status)
- {
- case reply::ok:
- return ok;
- case reply::created:
- return created;
- case reply::accepted:
- return accepted;
- case reply::no_content:
- return no_content;
- case reply::multiple_choices:
- return multiple_choices;
- case reply::moved_permanently:
- return moved_permanently;
- case reply::moved_temporarily:
- return moved_temporarily;
- case reply::not_modified:
- return not_modified;
- case reply::bad_request:
- return bad_request;
- case reply::unauthorized:
- return unauthorized;
- case reply::forbidden:
- return forbidden;
- case reply::not_found:
- return not_found;
- case reply::internal_server_error:
- return internal_server_error;
- case reply::not_implemented:
- return not_implemented;
- case reply::bad_gateway:
- return bad_gateway;
- case reply::service_unavailable:
- return service_unavailable;
- default:
- return internal_server_error;
- }
-}
-
-} // namespace stock_replies
-
-reply reply::stock_reply(reply::status_type status)
-{
- reply rep;
- rep.status = status;
- rep.content = stock_replies::to_string(status);
- rep.headers.resize(2);
- rep.headers[0].name = "Content-Length";
- rep.headers[0].value = boost::lexical_cast<std::string>(rep.content.size());
- rep.headers[1].name = "Content-Type";
- rep.headers[1].value = "text/html";
- return rep;
-}
-
-} // namespace server3
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/reply.hpp b/3rdparty/asio/src/examples/cpp03/http/server3/reply.hpp
deleted file mode 100644
index 9b057ca351d..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/reply.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-//
-// reply.hpp
-// ~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER3_REPLY_HPP
-#define HTTP_SERVER3_REPLY_HPP
-
-#include <string>
-#include <vector>
-#include <asio.hpp>
-#include "header.hpp"
-
-namespace http {
-namespace server3 {
-
-/// A reply to be sent to a client.
-struct reply
-{
- /// The status of the reply.
- enum status_type
- {
- ok = 200,
- created = 201,
- accepted = 202,
- no_content = 204,
- multiple_choices = 300,
- moved_permanently = 301,
- moved_temporarily = 302,
- not_modified = 304,
- bad_request = 400,
- unauthorized = 401,
- forbidden = 403,
- not_found = 404,
- internal_server_error = 500,
- not_implemented = 501,
- bad_gateway = 502,
- service_unavailable = 503
- } status;
-
- /// The headers to be included in the reply.
- std::vector<header> headers;
-
- /// The content to be sent in the reply.
- std::string content;
-
- /// Convert the reply into a vector of buffers. The buffers do not own the
- /// underlying memory blocks, therefore the reply object must remain valid and
- /// not be changed until the write operation has completed.
- std::vector<asio::const_buffer> to_buffers();
-
- /// Get a stock reply.
- static reply stock_reply(status_type status);
-};
-
-} // namespace server3
-} // namespace http
-
-#endif // HTTP_SERVER3_REPLY_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/request.hpp b/3rdparty/asio/src/examples/cpp03/http/server3/request.hpp
deleted file mode 100644
index a5b34e03f8a..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/request.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// request.hpp
-// ~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER3_REQUEST_HPP
-#define HTTP_SERVER3_REQUEST_HPP
-
-#include <string>
-#include <vector>
-#include "header.hpp"
-
-namespace http {
-namespace server3 {
-
-/// A request received from a client.
-struct request
-{
- std::string method;
- std::string uri;
- int http_version_major;
- int http_version_minor;
- std::vector<header> headers;
-};
-
-} // namespace server3
-} // namespace http
-
-#endif // HTTP_SERVER3_REQUEST_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/request_handler.cpp b/3rdparty/asio/src/examples/cpp03/http/server3/request_handler.cpp
deleted file mode 100644
index 9feb1cf1e3c..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/request_handler.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// request_handler.cpp
-// ~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "request_handler.hpp"
-#include <fstream>
-#include <sstream>
-#include <string>
-#include <boost/lexical_cast.hpp>
-#include "mime_types.hpp"
-#include "reply.hpp"
-#include "request.hpp"
-
-namespace http {
-namespace server3 {
-
-request_handler::request_handler(const std::string& doc_root)
- : doc_root_(doc_root)
-{
-}
-
-void request_handler::handle_request(const request& req, reply& rep)
-{
- // Decode url to path.
- std::string request_path;
- if (!url_decode(req.uri, request_path))
- {
- rep = reply::stock_reply(reply::bad_request);
- return;
- }
-
- // Request path must be absolute and not contain "..".
- if (request_path.empty() || request_path[0] != '/'
- || request_path.find("..") != std::string::npos)
- {
- rep = reply::stock_reply(reply::bad_request);
- return;
- }
-
- // If path ends in slash (i.e. is a directory) then add "index.html".
- if (request_path[request_path.size() - 1] == '/')
- {
- request_path += "index.html";
- }
-
- // Determine the file extension.
- std::size_t last_slash_pos = request_path.find_last_of("/");
- std::size_t last_dot_pos = request_path.find_last_of(".");
- std::string extension;
- if (last_dot_pos != std::string::npos && last_dot_pos > last_slash_pos)
- {
- extension = request_path.substr(last_dot_pos + 1);
- }
-
- // Open the file to send back.
- std::string full_path = doc_root_ + request_path;
- std::ifstream is(full_path.c_str(), std::ios::in | std::ios::binary);
- if (!is)
- {
- rep = reply::stock_reply(reply::not_found);
- return;
- }
-
- // Fill out the reply to be sent to the client.
- rep.status = reply::ok;
- char buf[512];
- while (is.read(buf, sizeof(buf)).gcount() > 0)
- rep.content.append(buf, is.gcount());
- rep.headers.resize(2);
- rep.headers[0].name = "Content-Length";
- rep.headers[0].value = boost::lexical_cast<std::string>(rep.content.size());
- rep.headers[1].name = "Content-Type";
- rep.headers[1].value = mime_types::extension_to_type(extension);
-}
-
-bool request_handler::url_decode(const std::string& in, std::string& out)
-{
- out.clear();
- out.reserve(in.size());
- for (std::size_t i = 0; i < in.size(); ++i)
- {
- if (in[i] == '%')
- {
- if (i + 3 <= in.size())
- {
- int value = 0;
- std::istringstream is(in.substr(i + 1, 2));
- if (is >> std::hex >> value)
- {
- out += static_cast<char>(value);
- i += 2;
- }
- else
- {
- return false;
- }
- }
- else
- {
- return false;
- }
- }
- else if (in[i] == '+')
- {
- out += ' ';
- }
- else
- {
- out += in[i];
- }
- }
- return true;
-}
-
-} // namespace server3
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/request_handler.hpp b/3rdparty/asio/src/examples/cpp03/http/server3/request_handler.hpp
deleted file mode 100644
index bb94cad0d1d..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/request_handler.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// request_handler.hpp
-// ~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER3_REQUEST_HANDLER_HPP
-#define HTTP_SERVER3_REQUEST_HANDLER_HPP
-
-#include <string>
-#include <boost/noncopyable.hpp>
-
-namespace http {
-namespace server3 {
-
-struct reply;
-struct request;
-
-/// The common handler for all incoming requests.
-class request_handler
- : private boost::noncopyable
-{
-public:
- /// Construct with a directory containing files to be served.
- explicit request_handler(const std::string& doc_root);
-
- /// Handle a request and produce a reply.
- void handle_request(const request& req, reply& rep);
-
-private:
- /// The directory containing the files to be served.
- std::string doc_root_;
-
- /// Perform URL-decoding on a string. Returns false if the encoding was
- /// invalid.
- static bool url_decode(const std::string& in, std::string& out);
-};
-
-} // namespace server3
-} // namespace http
-
-#endif // HTTP_SERVER3_REQUEST_HANDLER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/request_parser.cpp b/3rdparty/asio/src/examples/cpp03/http/server3/request_parser.cpp
deleted file mode 100644
index 98f91286fe8..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/request_parser.cpp
+++ /dev/null
@@ -1,315 +0,0 @@
-//
-// request_parser.cpp
-// ~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "request_parser.hpp"
-#include "request.hpp"
-
-namespace http {
-namespace server3 {
-
-request_parser::request_parser()
- : state_(method_start)
-{
-}
-
-void request_parser::reset()
-{
- state_ = method_start;
-}
-
-boost::tribool request_parser::consume(request& req, char input)
-{
- switch (state_)
- {
- case method_start:
- if (!is_char(input) || is_ctl(input) || is_tspecial(input))
- {
- return false;
- }
- else
- {
- state_ = method;
- req.method.push_back(input);
- return boost::indeterminate;
- }
- case method:
- if (input == ' ')
- {
- state_ = uri;
- return boost::indeterminate;
- }
- else if (!is_char(input) || is_ctl(input) || is_tspecial(input))
- {
- return false;
- }
- else
- {
- req.method.push_back(input);
- return boost::indeterminate;
- }
- case uri:
- if (input == ' ')
- {
- state_ = http_version_h;
- return boost::indeterminate;
- }
- else if (is_ctl(input))
- {
- return false;
- }
- else
- {
- req.uri.push_back(input);
- return boost::indeterminate;
- }
- case http_version_h:
- if (input == 'H')
- {
- state_ = http_version_t_1;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_t_1:
- if (input == 'T')
- {
- state_ = http_version_t_2;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_t_2:
- if (input == 'T')
- {
- state_ = http_version_p;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_p:
- if (input == 'P')
- {
- state_ = http_version_slash;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_slash:
- if (input == '/')
- {
- req.http_version_major = 0;
- req.http_version_minor = 0;
- state_ = http_version_major_start;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_major_start:
- if (is_digit(input))
- {
- req.http_version_major = req.http_version_major * 10 + input - '0';
- state_ = http_version_major;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_major:
- if (input == '.')
- {
- state_ = http_version_minor_start;
- return boost::indeterminate;
- }
- else if (is_digit(input))
- {
- req.http_version_major = req.http_version_major * 10 + input - '0';
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_minor_start:
- if (is_digit(input))
- {
- req.http_version_minor = req.http_version_minor * 10 + input - '0';
- state_ = http_version_minor;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case http_version_minor:
- if (input == '\r')
- {
- state_ = expecting_newline_1;
- return boost::indeterminate;
- }
- else if (is_digit(input))
- {
- req.http_version_minor = req.http_version_minor * 10 + input - '0';
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case expecting_newline_1:
- if (input == '\n')
- {
- state_ = header_line_start;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case header_line_start:
- if (input == '\r')
- {
- state_ = expecting_newline_3;
- return boost::indeterminate;
- }
- else if (!req.headers.empty() && (input == ' ' || input == '\t'))
- {
- state_ = header_lws;
- return boost::indeterminate;
- }
- else if (!is_char(input) || is_ctl(input) || is_tspecial(input))
- {
- return false;
- }
- else
- {
- req.headers.push_back(header());
- req.headers.back().name.push_back(input);
- state_ = header_name;
- return boost::indeterminate;
- }
- case header_lws:
- if (input == '\r')
- {
- state_ = expecting_newline_2;
- return boost::indeterminate;
- }
- else if (input == ' ' || input == '\t')
- {
- return boost::indeterminate;
- }
- else if (is_ctl(input))
- {
- return false;
- }
- else
- {
- state_ = header_value;
- req.headers.back().value.push_back(input);
- return boost::indeterminate;
- }
- case header_name:
- if (input == ':')
- {
- state_ = space_before_header_value;
- return boost::indeterminate;
- }
- else if (!is_char(input) || is_ctl(input) || is_tspecial(input))
- {
- return false;
- }
- else
- {
- req.headers.back().name.push_back(input);
- return boost::indeterminate;
- }
- case space_before_header_value:
- if (input == ' ')
- {
- state_ = header_value;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case header_value:
- if (input == '\r')
- {
- state_ = expecting_newline_2;
- return boost::indeterminate;
- }
- else if (is_ctl(input))
- {
- return false;
- }
- else
- {
- req.headers.back().value.push_back(input);
- return boost::indeterminate;
- }
- case expecting_newline_2:
- if (input == '\n')
- {
- state_ = header_line_start;
- return boost::indeterminate;
- }
- else
- {
- return false;
- }
- case expecting_newline_3:
- return (input == '\n');
- default:
- return false;
- }
-}
-
-bool request_parser::is_char(int c)
-{
- return c >= 0 && c <= 127;
-}
-
-bool request_parser::is_ctl(int c)
-{
- return (c >= 0 && c <= 31) || (c == 127);
-}
-
-bool request_parser::is_tspecial(int c)
-{
- switch (c)
- {
- case '(': case ')': case '<': case '>': case '@':
- case ',': case ';': case ':': case '\\': case '"':
- case '/': case '[': case ']': case '?': case '=':
- case '{': case '}': case ' ': case '\t':
- return true;
- default:
- return false;
- }
-}
-
-bool request_parser::is_digit(int c)
-{
- return c >= '0' && c <= '9';
-}
-
-} // namespace server3
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/request_parser.hpp b/3rdparty/asio/src/examples/cpp03/http/server3/request_parser.hpp
deleted file mode 100644
index b680eee037b..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/request_parser.hpp
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// request_parser.hpp
-// ~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER3_REQUEST_PARSER_HPP
-#define HTTP_SERVER3_REQUEST_PARSER_HPP
-
-#include <boost/logic/tribool.hpp>
-#include <boost/tuple/tuple.hpp>
-
-namespace http {
-namespace server3 {
-
-struct request;
-
-/// Parser for incoming requests.
-class request_parser
-{
-public:
- /// Construct ready to parse the request method.
- request_parser();
-
- /// Reset to initial parser state.
- void reset();
-
- /// Parse some data. The tribool return value is true when a complete request
- /// has been parsed, false if the data is invalid, indeterminate when more
- /// data is required. The InputIterator return value indicates how much of the
- /// input has been consumed.
- template <typename InputIterator>
- boost::tuple<boost::tribool, InputIterator> parse(request& req,
- InputIterator begin, InputIterator end)
- {
- while (begin != end)
- {
- boost::tribool result = consume(req, *begin++);
- if (result || !result)
- return boost::make_tuple(result, begin);
- }
- boost::tribool result = boost::indeterminate;
- return boost::make_tuple(result, begin);
- }
-
-private:
- /// Handle the next character of input.
- boost::tribool consume(request& req, char input);
-
- /// Check if a byte is an HTTP character.
- static bool is_char(int c);
-
- /// Check if a byte is an HTTP control character.
- static bool is_ctl(int c);
-
- /// Check if a byte is defined as an HTTP tspecial character.
- static bool is_tspecial(int c);
-
- /// Check if a byte is a digit.
- static bool is_digit(int c);
-
- /// The current state of the parser.
- enum state
- {
- method_start,
- method,
- uri,
- http_version_h,
- http_version_t_1,
- http_version_t_2,
- http_version_p,
- http_version_slash,
- http_version_major_start,
- http_version_major,
- http_version_minor_start,
- http_version_minor,
- expecting_newline_1,
- header_line_start,
- header_lws,
- header_name,
- space_before_header_value,
- header_value,
- expecting_newline_2,
- expecting_newline_3
- } state_;
-};
-
-} // namespace server3
-} // namespace http
-
-#endif // HTTP_SERVER3_REQUEST_PARSER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/server.cpp b/3rdparty/asio/src/examples/cpp03/http/server3/server.cpp
deleted file mode 100644
index 2a78bc9719e..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/server.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// server.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "server.hpp"
-#include <boost/bind.hpp>
-#include <boost/shared_ptr.hpp>
-#include <vector>
-
-namespace http {
-namespace server3 {
-
-server::server(const std::string& address, const std::string& port,
- const std::string& doc_root, std::size_t thread_pool_size)
- : thread_pool_size_(thread_pool_size),
- signals_(io_context_),
- acceptor_(io_context_),
- new_connection_(),
- request_handler_(doc_root)
-{
- // Register to handle the signals that indicate when the server should exit.
- // It is safe to register for the same signal multiple times in a program,
- // provided all registration for the specified signal is made through Asio.
- signals_.add(SIGINT);
- signals_.add(SIGTERM);
-#if defined(SIGQUIT)
- signals_.add(SIGQUIT);
-#endif // defined(SIGQUIT)
- signals_.async_wait(boost::bind(&server::handle_stop, this));
-
- // Open the acceptor with the option to reuse the address (i.e. SO_REUSEADDR).
- asio::ip::tcp::resolver resolver(io_context_);
- asio::ip::tcp::endpoint endpoint =
- *resolver.resolve(address, port).begin();
- acceptor_.open(endpoint.protocol());
- acceptor_.set_option(asio::ip::tcp::acceptor::reuse_address(true));
- acceptor_.bind(endpoint);
- acceptor_.listen();
-
- start_accept();
-}
-
-void server::run()
-{
- // Create a pool of threads to run all of the io_contexts.
- std::vector<boost::shared_ptr<asio::thread> > threads;
- for (std::size_t i = 0; i < thread_pool_size_; ++i)
- {
- boost::shared_ptr<asio::thread> thread(new asio::thread(
- boost::bind(&asio::io_context::run, &io_context_)));
- threads.push_back(thread);
- }
-
- // Wait for all threads in the pool to exit.
- for (std::size_t i = 0; i < threads.size(); ++i)
- threads[i]->join();
-}
-
-void server::start_accept()
-{
- new_connection_.reset(new connection(io_context_, request_handler_));
- acceptor_.async_accept(new_connection_->socket(),
- boost::bind(&server::handle_accept, this,
- asio::placeholders::error));
-}
-
-void server::handle_accept(const asio::error_code& e)
-{
- if (!e)
- {
- new_connection_->start();
- }
-
- start_accept();
-}
-
-void server::handle_stop()
-{
- io_context_.stop();
-}
-
-} // namespace server3
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server3/server.hpp b/3rdparty/asio/src/examples/cpp03/http/server3/server.hpp
deleted file mode 100644
index c58c2433f65..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server3/server.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// server.hpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER3_SERVER_HPP
-#define HTTP_SERVER3_SERVER_HPP
-
-#include <asio.hpp>
-#include <string>
-#include <vector>
-#include <boost/noncopyable.hpp>
-#include <boost/shared_ptr.hpp>
-#include "connection.hpp"
-#include "request_handler.hpp"
-
-namespace http {
-namespace server3 {
-
-/// The top-level class of the HTTP server.
-class server
- : private boost::noncopyable
-{
-public:
- /// Construct the server to listen on the specified TCP address and port, and
- /// serve up files from the given directory.
- explicit server(const std::string& address, const std::string& port,
- const std::string& doc_root, std::size_t thread_pool_size);
-
- /// Run the server's io_context loop.
- void run();
-
-private:
- /// Initiate an asynchronous accept operation.
- void start_accept();
-
- /// Handle completion of an asynchronous accept operation.
- void handle_accept(const asio::error_code& e);
-
- /// Handle a request to stop the server.
- void handle_stop();
-
- /// The number of threads that will call io_context::run().
- std::size_t thread_pool_size_;
-
- /// The io_context used to perform asynchronous operations.
- asio::io_context io_context_;
-
- /// The signal_set is used to register for process termination notifications.
- asio::signal_set signals_;
-
- /// Acceptor used to listen for incoming connections.
- asio::ip::tcp::acceptor acceptor_;
-
- /// The next connection to be accepted.
- connection_ptr new_connection_;
-
- /// The handler for all incoming requests.
- request_handler request_handler_;
-};
-
-} // namespace server3
-} // namespace http
-
-#endif // HTTP_SERVER3_SERVER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server4/.gitignore b/3rdparty/asio/src/examples/cpp03/http/server4/.gitignore
deleted file mode 100644
index 0882fa6ced3..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server4/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*_server
-*_client
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/http/server4/file_handler.cpp b/3rdparty/asio/src/examples/cpp03/http/server4/file_handler.cpp
deleted file mode 100644
index a4ac912b155..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server4/file_handler.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// file_handler.cpp
-// ~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "file_handler.hpp"
-#include <fstream>
-#include <sstream>
-#include <string>
-#include <boost/lexical_cast.hpp>
-#include "mime_types.hpp"
-#include "reply.hpp"
-#include "request.hpp"
-
-namespace http {
-namespace server4 {
-
-file_handler::file_handler(const std::string& doc_root)
- : doc_root_(doc_root)
-{
-}
-
-void file_handler::operator()(const request& req, reply& rep)
-{
- // Decode url to path.
- std::string request_path;
- if (!url_decode(req.uri, request_path))
- {
- rep = reply::stock_reply(reply::bad_request);
- return;
- }
-
- // Request path must be absolute and not contain "..".
- if (request_path.empty() || request_path[0] != '/'
- || request_path.find("..") != std::string::npos)
- {
- rep = reply::stock_reply(reply::bad_request);
- return;
- }
-
- // If path ends in slash (i.e. is a directory) then add "index.html".
- if (request_path[request_path.size() - 1] == '/')
- {
- request_path += "index.html";
- }
-
- // Determine the file extension.
- std::size_t last_slash_pos = request_path.find_last_of("/");
- std::size_t last_dot_pos = request_path.find_last_of(".");
- std::string extension;
- if (last_dot_pos != std::string::npos && last_dot_pos > last_slash_pos)
- {
- extension = request_path.substr(last_dot_pos + 1);
- }
-
- // Open the file to send back.
- std::string full_path = doc_root_ + request_path;
- std::ifstream is(full_path.c_str(), std::ios::in | std::ios::binary);
- if (!is)
- {
- rep = reply::stock_reply(reply::not_found);
- return;
- }
-
- // Fill out the reply to be sent to the client.
- rep.status = reply::ok;
- char buf[512];
- while (is.read(buf, sizeof(buf)).gcount() > 0)
- rep.content.append(buf, is.gcount());
- rep.headers.resize(2);
- rep.headers[0].name = "Content-Length";
- rep.headers[0].value = boost::lexical_cast<std::string>(rep.content.size());
- rep.headers[1].name = "Content-Type";
- rep.headers[1].value = mime_types::extension_to_type(extension);
-}
-
-bool file_handler::url_decode(const std::string& in, std::string& out)
-{
- out.clear();
- out.reserve(in.size());
- for (std::size_t i = 0; i < in.size(); ++i)
- {
- if (in[i] == '%')
- {
- if (i + 3 <= in.size())
- {
- int value = 0;
- std::istringstream is(in.substr(i + 1, 2));
- if (is >> std::hex >> value)
- {
- out += static_cast<char>(value);
- i += 2;
- }
- else
- {
- return false;
- }
- }
- else
- {
- return false;
- }
- }
- else if (in[i] == '+')
- {
- out += ' ';
- }
- else
- {
- out += in[i];
- }
- }
- return true;
-}
-
-} // namespace server4
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server4/file_handler.hpp b/3rdparty/asio/src/examples/cpp03/http/server4/file_handler.hpp
deleted file mode 100644
index 22055dbcb1b..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server4/file_handler.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// file_handler.hpp
-// ~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER4_FILE_HANDLER_HPP
-#define HTTP_SERVER4_FILE_HANDLER_HPP
-
-#include <string>
-
-namespace http {
-namespace server4 {
-
-struct reply;
-struct request;
-
-/// The common handler for all incoming requests.
-class file_handler
-{
-public:
- /// Construct with a directory containing files to be served.
- explicit file_handler(const std::string& doc_root);
-
- /// Handle a request and produce a reply.
- void operator()(const request& req, reply& rep);
-
-private:
- /// The directory containing the files to be served.
- std::string doc_root_;
-
- /// Perform URL-decoding on a string. Returns false if the encoding was
- /// invalid.
- static bool url_decode(const std::string& in, std::string& out);
-};
-
-} // namespace server4
-} // namespace http
-
-#endif // HTTP_SERVER4_FILE_HANDLER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server4/header.hpp b/3rdparty/asio/src/examples/cpp03/http/server4/header.hpp
deleted file mode 100644
index 9c9b89cca06..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server4/header.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// header.hpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER4_HEADER_HPP
-#define HTTP_SERVER4_HEADER_HPP
-
-#include <string>
-
-namespace http {
-namespace server4 {
-
-struct header
-{
- std::string name;
- std::string value;
-};
-
-} // namespace server4
-} // namespace http
-
-#endif // HTTP_SERVER4_HEADER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server4/main.cpp b/3rdparty/asio/src/examples/cpp03/http/server4/main.cpp
deleted file mode 100644
index 0ebe535ad17..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server4/main.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-// main.cpp
-// ~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <asio.hpp>
-#include <boost/bind.hpp>
-#include <signal.h>
-#include "server.hpp"
-#include "file_handler.hpp"
-
-int main(int argc, char* argv[])
-{
- try
- {
- // Check command line arguments.
- if (argc != 4)
- {
- std::cerr << "Usage: http_server <address> <port> <doc_root>\n";
- std::cerr << " For IPv4, try:\n";
- std::cerr << " receiver 0.0.0.0 80 .\n";
- std::cerr << " For IPv6, try:\n";
- std::cerr << " receiver 0::0 80 .\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- // Launch the initial server coroutine.
- http::server4::server(io_context, argv[1], argv[2],
- http::server4::file_handler(argv[3]))();
-
- // Wait for signals indicating time to shut down.
- asio::signal_set signals(io_context);
- signals.add(SIGINT);
- signals.add(SIGTERM);
-#if defined(SIGQUIT)
- signals.add(SIGQUIT);
-#endif // defined(SIGQUIT)
- signals.async_wait(boost::bind(
- &asio::io_context::stop, &io_context));
-
- // Run the server.
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/http/server4/mime_types.cpp b/3rdparty/asio/src/examples/cpp03/http/server4/mime_types.cpp
deleted file mode 100644
index 903dffca59e..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server4/mime_types.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// mime_types.cpp
-// ~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "mime_types.hpp"
-
-namespace http {
-namespace server4 {
-namespace mime_types {
-
-struct mapping
-{
- const char* extension;
- const char* mime_type;
-} mappings[] =
-{
- { "gif", "image/gif" },
- { "htm", "text/html" },
- { "html", "text/html" },
- { "jpg", "image/jpeg" },
- { "png", "image/png" },
- { 0, 0 } // Marks end of list.
-};
-
-std::string extension_to_type(const std::string& extension)
-{
- for (mapping* m = mappings; m->extension; ++m)
- {
- if (m->extension == extension)
- {
- return m->mime_type;
- }
- }
-
- return "text/plain";
-}
-
-} // namespace mime_types
-} // namespace server4
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server4/mime_types.hpp b/3rdparty/asio/src/examples/cpp03/http/server4/mime_types.hpp
deleted file mode 100644
index f702c6f859b..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server4/mime_types.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-// mime_types.hpp
-// ~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER4_MIME_TYPES_HPP
-#define HTTP_SERVER4_MIME_TYPES_HPP
-
-#include <string>
-
-namespace http {
-namespace server4 {
-namespace mime_types {
-
-/// Convert a file extension into a MIME type.
-std::string extension_to_type(const std::string& extension);
-
-} // namespace mime_types
-} // namespace server4
-} // namespace http
-
-#endif // HTTP_SERVER4_MIME_TYPES_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server4/reply.cpp b/3rdparty/asio/src/examples/cpp03/http/server4/reply.cpp
deleted file mode 100644
index f508a46765f..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server4/reply.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-//
-// reply.cpp
-// ~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "reply.hpp"
-#include <string>
-#include <boost/lexical_cast.hpp>
-
-namespace http {
-namespace server4 {
-
-namespace status_strings {
-
-const std::string ok =
- "HTTP/1.0 200 OK\r\n";
-const std::string created =
- "HTTP/1.0 201 Created\r\n";
-const std::string accepted =
- "HTTP/1.0 202 Accepted\r\n";
-const std::string no_content =
- "HTTP/1.0 204 No Content\r\n";
-const std::string multiple_choices =
- "HTTP/1.0 300 Multiple Choices\r\n";
-const std::string moved_permanently =
- "HTTP/1.0 301 Moved Permanently\r\n";
-const std::string moved_temporarily =
- "HTTP/1.0 302 Moved Temporarily\r\n";
-const std::string not_modified =
- "HTTP/1.0 304 Not Modified\r\n";
-const std::string bad_request =
- "HTTP/1.0 400 Bad Request\r\n";
-const std::string unauthorized =
- "HTTP/1.0 401 Unauthorized\r\n";
-const std::string forbidden =
- "HTTP/1.0 403 Forbidden\r\n";
-const std::string not_found =
- "HTTP/1.0 404 Not Found\r\n";
-const std::string internal_server_error =
- "HTTP/1.0 500 Internal Server Error\r\n";
-const std::string not_implemented =
- "HTTP/1.0 501 Not Implemented\r\n";
-const std::string bad_gateway =
- "HTTP/1.0 502 Bad Gateway\r\n";
-const std::string service_unavailable =
- "HTTP/1.0 503 Service Unavailable\r\n";
-
-asio::const_buffer to_buffer(reply::status_type status)
-{
- switch (status)
- {
- case reply::ok:
- return asio::buffer(ok);
- case reply::created:
- return asio::buffer(created);
- case reply::accepted:
- return asio::buffer(accepted);
- case reply::no_content:
- return asio::buffer(no_content);
- case reply::multiple_choices:
- return asio::buffer(multiple_choices);
- case reply::moved_permanently:
- return asio::buffer(moved_permanently);
- case reply::moved_temporarily:
- return asio::buffer(moved_temporarily);
- case reply::not_modified:
- return asio::buffer(not_modified);
- case reply::bad_request:
- return asio::buffer(bad_request);
- case reply::unauthorized:
- return asio::buffer(unauthorized);
- case reply::forbidden:
- return asio::buffer(forbidden);
- case reply::not_found:
- return asio::buffer(not_found);
- case reply::internal_server_error:
- return asio::buffer(internal_server_error);
- case reply::not_implemented:
- return asio::buffer(not_implemented);
- case reply::bad_gateway:
- return asio::buffer(bad_gateway);
- case reply::service_unavailable:
- return asio::buffer(service_unavailable);
- default:
- return asio::buffer(internal_server_error);
- }
-}
-
-} // namespace status_strings
-
-namespace misc_strings {
-
-const char name_value_separator[] = { ':', ' ' };
-const char crlf[] = { '\r', '\n' };
-
-} // namespace misc_strings
-
-std::vector<asio::const_buffer> reply::to_buffers()
-{
- std::vector<asio::const_buffer> buffers;
- buffers.push_back(status_strings::to_buffer(status));
- for (std::size_t i = 0; i < headers.size(); ++i)
- {
- header& h = headers[i];
- buffers.push_back(asio::buffer(h.name));
- buffers.push_back(asio::buffer(misc_strings::name_value_separator));
- buffers.push_back(asio::buffer(h.value));
- buffers.push_back(asio::buffer(misc_strings::crlf));
- }
- buffers.push_back(asio::buffer(misc_strings::crlf));
- buffers.push_back(asio::buffer(content));
- return buffers;
-}
-
-namespace stock_replies {
-
-const char ok[] = "";
-const char created[] =
- "<html>"
- "<head><title>Created</title></head>"
- "<body><h1>201 Created</h1></body>"
- "</html>";
-const char accepted[] =
- "<html>"
- "<head><title>Accepted</title></head>"
- "<body><h1>202 Accepted</h1></body>"
- "</html>";
-const char no_content[] =
- "<html>"
- "<head><title>No Content</title></head>"
- "<body><h1>204 Content</h1></body>"
- "</html>";
-const char multiple_choices[] =
- "<html>"
- "<head><title>Multiple Choices</title></head>"
- "<body><h1>300 Multiple Choices</h1></body>"
- "</html>";
-const char moved_permanently[] =
- "<html>"
- "<head><title>Moved Permanently</title></head>"
- "<body><h1>301 Moved Permanently</h1></body>"
- "</html>";
-const char moved_temporarily[] =
- "<html>"
- "<head><title>Moved Temporarily</title></head>"
- "<body><h1>302 Moved Temporarily</h1></body>"
- "</html>";
-const char not_modified[] =
- "<html>"
- "<head><title>Not Modified</title></head>"
- "<body><h1>304 Not Modified</h1></body>"
- "</html>";
-const char bad_request[] =
- "<html>"
- "<head><title>Bad Request</title></head>"
- "<body><h1>400 Bad Request</h1></body>"
- "</html>";
-const char unauthorized[] =
- "<html>"
- "<head><title>Unauthorized</title></head>"
- "<body><h1>401 Unauthorized</h1></body>"
- "</html>";
-const char forbidden[] =
- "<html>"
- "<head><title>Forbidden</title></head>"
- "<body><h1>403 Forbidden</h1></body>"
- "</html>";
-const char not_found[] =
- "<html>"
- "<head><title>Not Found</title></head>"
- "<body><h1>404 Not Found</h1></body>"
- "</html>";
-const char internal_server_error[] =
- "<html>"
- "<head><title>Internal Server Error</title></head>"
- "<body><h1>500 Internal Server Error</h1></body>"
- "</html>";
-const char not_implemented[] =
- "<html>"
- "<head><title>Not Implemented</title></head>"
- "<body><h1>501 Not Implemented</h1></body>"
- "</html>";
-const char bad_gateway[] =
- "<html>"
- "<head><title>Bad Gateway</title></head>"
- "<body><h1>502 Bad Gateway</h1></body>"
- "</html>";
-const char service_unavailable[] =
- "<html>"
- "<head><title>Service Unavailable</title></head>"
- "<body><h1>503 Service Unavailable</h1></body>"
- "</html>";
-
-std::string to_string(reply::status_type status)
-{
- switch (status)
- {
- case reply::ok:
- return ok;
- case reply::created:
- return created;
- case reply::accepted:
- return accepted;
- case reply::no_content:
- return no_content;
- case reply::multiple_choices:
- return multiple_choices;
- case reply::moved_permanently:
- return moved_permanently;
- case reply::moved_temporarily:
- return moved_temporarily;
- case reply::not_modified:
- return not_modified;
- case reply::bad_request:
- return bad_request;
- case reply::unauthorized:
- return unauthorized;
- case reply::forbidden:
- return forbidden;
- case reply::not_found:
- return not_found;
- case reply::internal_server_error:
- return internal_server_error;
- case reply::not_implemented:
- return not_implemented;
- case reply::bad_gateway:
- return bad_gateway;
- case reply::service_unavailable:
- return service_unavailable;
- default:
- return internal_server_error;
- }
-}
-
-} // namespace stock_replies
-
-reply reply::stock_reply(reply::status_type status)
-{
- reply rep;
- rep.status = status;
- rep.content = stock_replies::to_string(status);
- rep.headers.resize(2);
- rep.headers[0].name = "Content-Length";
- rep.headers[0].value = boost::lexical_cast<std::string>(rep.content.size());
- rep.headers[1].name = "Content-Type";
- rep.headers[1].value = "text/html";
- return rep;
-}
-
-} // namespace server4
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server4/reply.hpp b/3rdparty/asio/src/examples/cpp03/http/server4/reply.hpp
deleted file mode 100644
index 02743a549be..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server4/reply.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-//
-// reply.hpp
-// ~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER4_REPLY_HPP
-#define HTTP_SERVER4_REPLY_HPP
-
-#include <string>
-#include <vector>
-#include <asio.hpp>
-#include "header.hpp"
-
-namespace http {
-namespace server4 {
-
-/// A reply to be sent to a client.
-struct reply
-{
- /// The status of the reply.
- enum status_type
- {
- ok = 200,
- created = 201,
- accepted = 202,
- no_content = 204,
- multiple_choices = 300,
- moved_permanently = 301,
- moved_temporarily = 302,
- not_modified = 304,
- bad_request = 400,
- unauthorized = 401,
- forbidden = 403,
- not_found = 404,
- internal_server_error = 500,
- not_implemented = 501,
- bad_gateway = 502,
- service_unavailable = 503
- } status;
-
- /// The headers to be included in the reply.
- std::vector<header> headers;
-
- /// The content to be sent in the reply.
- std::string content;
-
- /// Convert the reply into a vector of buffers. The buffers do not own the
- /// underlying memory blocks, therefore the reply object must remain valid and
- /// not be changed until the write operation has completed.
- std::vector<asio::const_buffer> to_buffers();
-
- /// Get a stock reply.
- static reply stock_reply(status_type status);
-};
-
-} // namespace server4
-} // namespace http
-
-#endif // HTTP_SERVER4_REPLY_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server4/request.hpp b/3rdparty/asio/src/examples/cpp03/http/server4/request.hpp
deleted file mode 100644
index 43947d7f09e..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server4/request.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// request.hpp
-// ~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER4_REQUEST_HPP
-#define HTTP_SERVER4_REQUEST_HPP
-
-#include <string>
-#include <vector>
-#include "header.hpp"
-
-namespace http {
-namespace server4 {
-
-/// A request received from a client.
-struct request
-{
- /// The request method, e.g. "GET", "POST".
- std::string method;
-
- /// The requested URI, such as a path to a file.
- std::string uri;
-
- /// Major version number, usually 1.
- int http_version_major;
-
- /// Minor version number, usually 0 or 1.
- int http_version_minor;
-
- /// The headers included with the request.
- std::vector<header> headers;
-
- /// The optional content sent with the request.
- std::string content;
-};
-
-} // namespace server4
-} // namespace http
-
-#endif // HTTP_SERVER4_REQUEST_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server4/request_parser.cpp b/3rdparty/asio/src/examples/cpp03/http/server4/request_parser.cpp
deleted file mode 100644
index 0ec31ad3939..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server4/request_parser.cpp
+++ /dev/null
@@ -1,226 +0,0 @@
-//
-// request_parser.cpp
-// ~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "request_parser.hpp"
-#include <algorithm>
-#include <cctype>
-#include <boost/lexical_cast.hpp>
-#include "request.hpp"
-
-namespace http {
-namespace server4 {
-
-// Enable the pseudo-keywords reenter, yield and fork.
-#include <asio/yield.hpp>
-
-std::string request_parser::content_length_name_ = "Content-Length";
-
-boost::tribool request_parser::consume(request& req, char c)
-{
- reenter (this)
- {
- req.method.clear();
- req.uri.clear();
- req.http_version_major = 0;
- req.http_version_minor = 0;
- req.headers.clear();
- req.content.clear();
- content_length_ = 0;
-
- // Request method.
- while (is_char(c) && !is_ctl(c) && !is_tspecial(c) && c != ' ')
- {
- req.method.push_back(c);
- yield return boost::indeterminate;
- }
- if (req.method.empty())
- return false;
-
- // Space.
- if (c != ' ') return false;
- yield return boost::indeterminate;
-
- // URI.
- while (!is_ctl(c) && c != ' ')
- {
- req.uri.push_back(c);
- yield return boost::indeterminate;
- }
- if (req.uri.empty()) return false;
-
- // Space.
- if (c != ' ') return false;
- yield return boost::indeterminate;
-
- // HTTP protocol identifier.
- if (c != 'H') return false;
- yield return boost::indeterminate;
- if (c != 'T') return false;
- yield return boost::indeterminate;
- if (c != 'T') return false;
- yield return boost::indeterminate;
- if (c != 'P') return false;
- yield return boost::indeterminate;
-
- // Slash.
- if (c != '/') return false;
- yield return boost::indeterminate;
-
- // Major version number.
- if (!is_digit(c)) return false;
- while (is_digit(c))
- {
- req.http_version_major = req.http_version_major * 10 + c - '0';
- yield return boost::indeterminate;
- }
-
- // Dot.
- if (c != '.') return false;
- yield return boost::indeterminate;
-
- // Minor version number.
- if (!is_digit(c)) return false;
- while (is_digit(c))
- {
- req.http_version_minor = req.http_version_minor * 10 + c - '0';
- yield return boost::indeterminate;
- }
-
- // CRLF.
- if (c != '\r') return false;
- yield return boost::indeterminate;
- if (c != '\n') return false;
- yield return boost::indeterminate;
-
- // Headers.
- while ((is_char(c) && !is_ctl(c) && !is_tspecial(c) && c != '\r')
- || (c == ' ' || c == '\t'))
- {
- if (c == ' ' || c == '\t')
- {
- // Leading whitespace. Must be continuation of previous header's value.
- if (req.headers.empty()) return false;
- while (c == ' ' || c == '\t')
- yield return boost::indeterminate;
- }
- else
- {
- // Start the next header.
- req.headers.push_back(header());
-
- // Header name.
- while (is_char(c) && !is_ctl(c) && !is_tspecial(c) && c != ':')
- {
- req.headers.back().name.push_back(c);
- yield return boost::indeterminate;
- }
-
- // Colon and space separates the header name from the header value.
- if (c != ':') return false;
- yield return boost::indeterminate;
- if (c != ' ') return false;
- yield return boost::indeterminate;
- }
-
- // Header value.
- while (is_char(c) && !is_ctl(c) && c != '\r')
- {
- req.headers.back().value.push_back(c);
- yield return boost::indeterminate;
- }
-
- // CRLF.
- if (c != '\r') return false;
- yield return boost::indeterminate;
- if (c != '\n') return false;
- yield return boost::indeterminate;
- }
-
- // CRLF.
- if (c != '\r') return false;
- yield return boost::indeterminate;
- if (c != '\n') return false;
-
- // Check for optional Content-Length header.
- for (std::size_t i = 0; i < req.headers.size(); ++i)
- {
- if (headers_equal(req.headers[i].name, content_length_name_))
- {
- try
- {
- content_length_ =
- boost::lexical_cast<std::size_t>(req.headers[i].value);
- }
- catch (boost::bad_lexical_cast&)
- {
- return false;
- }
- }
- }
-
- // Content.
- while (req.content.size() < content_length_)
- {
- yield return boost::indeterminate;
- req.content.push_back(c);
- }
- }
-
- return true;
-}
-
-// Disable the pseudo-keywords reenter, yield and fork.
-#include <asio/unyield.hpp>
-
-bool request_parser::is_char(int c)
-{
- return c >= 0 && c <= 127;
-}
-
-bool request_parser::is_ctl(int c)
-{
- return (c >= 0 && c <= 31) || (c == 127);
-}
-
-bool request_parser::is_tspecial(int c)
-{
- switch (c)
- {
- case '(': case ')': case '<': case '>': case '@':
- case ',': case ';': case ':': case '\\': case '"':
- case '/': case '[': case ']': case '?': case '=':
- case '{': case '}': case ' ': case '\t':
- return true;
- default:
- return false;
- }
-}
-
-bool request_parser::is_digit(int c)
-{
- return c >= '0' && c <= '9';
-}
-
-bool request_parser::tolower_compare(char a, char b)
-{
- return std::tolower(a) == std::tolower(b);
-}
-
-bool request_parser::headers_equal(const std::string& a, const std::string& b)
-{
- if (a.length() != b.length())
- return false;
-
- return std::equal(a.begin(), a.end(), b.begin(),
- &request_parser::tolower_compare);
-}
-
-} // namespace server4
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server4/request_parser.hpp b/3rdparty/asio/src/examples/cpp03/http/server4/request_parser.hpp
deleted file mode 100644
index a61356e36a6..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server4/request_parser.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-//
-// request_parser.hpp
-// ~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER4_REQUEST_PARSER_HPP
-#define HTTP_SERVER4_REQUEST_PARSER_HPP
-
-#include <string>
-#include <boost/logic/tribool.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <asio/coroutine.hpp>
-
-namespace http {
-namespace server4 {
-
-struct request;
-
-/// Parser for incoming requests.
-class request_parser : asio::coroutine
-{
-public:
- /// Parse some data. The tribool return value is true when a complete request
- /// has been parsed, false if the data is invalid, indeterminate when more
- /// data is required. The InputIterator return value indicates how much of the
- /// input has been consumed.
- template <typename InputIterator>
- boost::tuple<boost::tribool, InputIterator> parse(request& req,
- InputIterator begin, InputIterator end)
- {
- while (begin != end)
- {
- boost::tribool result = consume(req, *begin++);
- if (result || !result)
- return boost::make_tuple(result, begin);
- }
- boost::tribool result = boost::indeterminate;
- return boost::make_tuple(result, begin);
- }
-
-private:
- /// The name of the content length header.
- static std::string content_length_name_;
-
- /// Content length as decoded from headers. Defaults to 0.
- std::size_t content_length_;
-
- /// Handle the next character of input.
- boost::tribool consume(request& req, char input);
-
- /// Check if a byte is an HTTP character.
- static bool is_char(int c);
-
- /// Check if a byte is an HTTP control character.
- static bool is_ctl(int c);
-
- /// Check if a byte is defined as an HTTP tspecial character.
- static bool is_tspecial(int c);
-
- /// Check if a byte is a digit.
- static bool is_digit(int c);
-
- /// Check if two characters are equal, without regard to case.
- static bool tolower_compare(char a, char b);
-
- /// Check whether the two request header names match.
- bool headers_equal(const std::string& a, const std::string& b);
-};
-
-} // namespace server4
-} // namespace http
-
-#endif // HTTP_SERVER4_REQUEST_PARSER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/http/server4/server.cpp b/3rdparty/asio/src/examples/cpp03/http/server4/server.cpp
deleted file mode 100644
index 04d81a984b6..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server4/server.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// server.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "server.hpp"
-#include "request.hpp"
-#include "reply.hpp"
-
-namespace http {
-namespace server4 {
-
-server::server(asio::io_context& io_context,
- const std::string& address, const std::string& port,
- boost::function<void(const request&, reply&)> request_handler)
- : request_handler_(request_handler)
-{
- tcp::resolver resolver(io_context);
- asio::ip::tcp::endpoint endpoint =
- *resolver.resolve(address, port).begin();
- acceptor_.reset(new tcp::acceptor(io_context, endpoint));
-}
-
-// Enable the pseudo-keywords reenter, yield and fork.
-#include <asio/yield.hpp>
-
-void server::operator()(asio::error_code ec, std::size_t length)
-{
- // In this example we keep the error handling code in one place by
- // hoisting it outside the coroutine. An alternative approach would be to
- // check the value of ec after each yield for an asynchronous operation.
- if (!ec)
- {
- // On reentering a coroutine, control jumps to the location of the last
- // yield or fork. The argument to the "reenter" pseudo-keyword can be a
- // pointer or reference to an object of type coroutine.
- reenter (this)
- {
- // Loop to accept incoming connections.
- do
- {
- // Create a new socket for the next incoming connection.
- socket_.reset(new tcp::socket(acceptor_->get_executor().context()));
-
- // Accept a new connection. The "yield" pseudo-keyword saves the current
- // line number and exits the coroutine's "reenter" block. We use the
- // server coroutine as the completion handler for the async_accept
- // operation. When the asynchronous operation completes, the io_context
- // invokes the function call operator, we "reenter" the coroutine, and
- // then control resumes at the following line.
- yield acceptor_->async_accept(*socket_, *this);
-
- // We "fork" by cloning a new server coroutine to handle the connection.
- // After forking we have a parent coroutine and a child coroutine. Both
- // parent and child continue execution at the following line. They can
- // be distinguished using the functions coroutine::is_parent() and
- // coroutine::is_child().
- fork server(*this)();
-
- // The parent continues looping to accept the next incoming connection.
- // The child exits the loop and processes the connection.
- } while (is_parent());
-
- // Create the objects needed to receive a request on the connection.
- buffer_.reset(new boost::array<char, 8192>);
- request_.reset(new request);
-
- // Loop until a complete request (or an invalid one) has been received.
- do
- {
- // Receive some more data. When control resumes at the following line,
- // the ec and length parameters reflect the result of the asynchronous
- // operation.
- yield socket_->async_read_some(asio::buffer(*buffer_), *this);
-
- // Parse the data we just received.
- boost::tie(valid_request_, boost::tuples::ignore)
- = request_parser_.parse(*request_,
- buffer_->data(), buffer_->data() + length);
-
- // An indeterminate result means we need more data, so keep looping.
- } while (boost::indeterminate(valid_request_));
-
- // Create the reply object that will be sent back to the client.
- reply_.reset(new reply);
-
- if (valid_request_)
- {
- // A valid request was received. Call the user-supplied function object
- // to process the request and compose a reply.
- request_handler_(*request_, *reply_);
- }
- else
- {
- // The request was invalid.
- *reply_ = reply::stock_reply(reply::bad_request);
- }
-
- // Send the reply back to the client.
- yield asio::async_write(*socket_, reply_->to_buffers(), *this);
-
- // Initiate graceful connection closure.
- socket_->shutdown(tcp::socket::shutdown_both, ec);
- }
- }
-
- // If an error occurs then the coroutine is not reentered. Consequently, no
- // new asynchronous operations are started. This means that all shared_ptr
- // references will disappear and the resources associated with the coroutine
- // will be destroyed automatically after this function call returns.
-}
-
-// Disable the pseudo-keywords reenter, yield and fork.
-#include <asio/unyield.hpp>
-
-} // namespace server4
-} // namespace http
diff --git a/3rdparty/asio/src/examples/cpp03/http/server4/server.hpp b/3rdparty/asio/src/examples/cpp03/http/server4/server.hpp
deleted file mode 100644
index 580ece5e097..00000000000
--- a/3rdparty/asio/src/examples/cpp03/http/server4/server.hpp
+++ /dev/null
@@ -1,73 +0,0 @@
-//
-// server.hpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef HTTP_SERVER4_SERVER_HPP
-#define HTTP_SERVER4_SERVER_HPP
-
-#include <asio.hpp>
-#include <string>
-#include <boost/array.hpp>
-#include <boost/function.hpp>
-#include <boost/shared_ptr.hpp>
-#include "request_parser.hpp"
-
-namespace http {
-namespace server4 {
-
-struct request;
-struct reply;
-
-/// The top-level coroutine of the HTTP server.
-class server : asio::coroutine
-{
-public:
- /// Construct the server to listen on the specified TCP address and port, and
- /// serve up files from the given directory.
- explicit server(asio::io_context& io_context,
- const std::string& address, const std::string& port,
- boost::function<void(const request&, reply&)> request_handler);
-
- /// Perform work associated with the server.
- void operator()(
- asio::error_code ec = asio::error_code(),
- std::size_t length = 0);
-
-private:
- typedef asio::ip::tcp tcp;
-
- /// The user-supplied handler for all incoming requests.
- boost::function<void(const request&, reply&)> request_handler_;
-
- /// Acceptor used to listen for incoming connections.
- boost::shared_ptr<tcp::acceptor> acceptor_;
-
- /// The current connection from a client.
- boost::shared_ptr<tcp::socket> socket_;
-
- /// Buffer for incoming data.
- boost::shared_ptr<boost::array<char, 8192> > buffer_;
-
- /// The incoming request.
- boost::shared_ptr<request> request_;
-
- /// Whether the request is valid or not.
- boost::tribool valid_request_;
-
- /// The parser for the incoming request.
- request_parser request_parser_;
-
- /// The reply to be sent back to the client.
- boost::shared_ptr<reply> reply_;
-};
-
-} // namespace server4
-} // namespace http
-
-#endif // HTTP_SERVER4_SERVER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/icmp/.gitignore b/3rdparty/asio/src/examples/cpp03/icmp/.gitignore
deleted file mode 100644
index 62ea912e2e4..00000000000
--- a/3rdparty/asio/src/examples/cpp03/icmp/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-ping
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/icmp/icmp_header.hpp b/3rdparty/asio/src/examples/cpp03/icmp/icmp_header.hpp
deleted file mode 100644
index 3b7b4bf5032..00000000000
--- a/3rdparty/asio/src/examples/cpp03/icmp/icmp_header.hpp
+++ /dev/null
@@ -1,94 +0,0 @@
-//
-// icmp_header.hpp
-// ~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef ICMP_HEADER_HPP
-#define ICMP_HEADER_HPP
-
-#include <istream>
-#include <ostream>
-#include <algorithm>
-
-// ICMP header for both IPv4 and IPv6.
-//
-// The wire format of an ICMP header is:
-//
-// 0 8 16 31
-// +---------------+---------------+------------------------------+ ---
-// | | | | ^
-// | type | code | checksum | |
-// | | | | |
-// +---------------+---------------+------------------------------+ 8 bytes
-// | | | |
-// | identifier | sequence number | |
-// | | | v
-// +-------------------------------+------------------------------+ ---
-
-class icmp_header
-{
-public:
- enum { echo_reply = 0, destination_unreachable = 3, source_quench = 4,
- redirect = 5, echo_request = 8, time_exceeded = 11, parameter_problem = 12,
- timestamp_request = 13, timestamp_reply = 14, info_request = 15,
- info_reply = 16, address_request = 17, address_reply = 18 };
-
- icmp_header() { std::fill(rep_, rep_ + sizeof(rep_), 0); }
-
- unsigned char type() const { return rep_[0]; }
- unsigned char code() const { return rep_[1]; }
- unsigned short checksum() const { return decode(2, 3); }
- unsigned short identifier() const { return decode(4, 5); }
- unsigned short sequence_number() const { return decode(6, 7); }
-
- void type(unsigned char n) { rep_[0] = n; }
- void code(unsigned char n) { rep_[1] = n; }
- void checksum(unsigned short n) { encode(2, 3, n); }
- void identifier(unsigned short n) { encode(4, 5, n); }
- void sequence_number(unsigned short n) { encode(6, 7, n); }
-
- friend std::istream& operator>>(std::istream& is, icmp_header& header)
- { return is.read(reinterpret_cast<char*>(header.rep_), 8); }
-
- friend std::ostream& operator<<(std::ostream& os, const icmp_header& header)
- { return os.write(reinterpret_cast<const char*>(header.rep_), 8); }
-
-private:
- unsigned short decode(int a, int b) const
- { return (rep_[a] << 8) + rep_[b]; }
-
- void encode(int a, int b, unsigned short n)
- {
- rep_[a] = static_cast<unsigned char>(n >> 8);
- rep_[b] = static_cast<unsigned char>(n & 0xFF);
- }
-
- unsigned char rep_[8];
-};
-
-template <typename Iterator>
-void compute_checksum(icmp_header& header,
- Iterator body_begin, Iterator body_end)
-{
- unsigned int sum = (header.type() << 8) + header.code()
- + header.identifier() + header.sequence_number();
-
- Iterator body_iter = body_begin;
- while (body_iter != body_end)
- {
- sum += (static_cast<unsigned char>(*body_iter++) << 8);
- if (body_iter != body_end)
- sum += static_cast<unsigned char>(*body_iter++);
- }
-
- sum = (sum >> 16) + (sum & 0xFFFF);
- sum += (sum >> 16);
- header.checksum(static_cast<unsigned short>(~sum));
-}
-
-#endif // ICMP_HEADER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/icmp/ipv4_header.hpp b/3rdparty/asio/src/examples/cpp03/icmp/ipv4_header.hpp
deleted file mode 100644
index 6785fd74d6c..00000000000
--- a/3rdparty/asio/src/examples/cpp03/icmp/ipv4_header.hpp
+++ /dev/null
@@ -1,102 +0,0 @@
-//
-// ipv4_header.hpp
-// ~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef IPV4_HEADER_HPP
-#define IPV4_HEADER_HPP
-
-#include <algorithm>
-#include <asio/ip/address_v4.hpp>
-
-// Packet header for IPv4.
-//
-// The wire format of an IPv4 header is:
-//
-// 0 8 16 31
-// +-------+-------+---------------+------------------------------+ ---
-// | | | | | ^
-// |version|header | type of | total length in bytes | |
-// | (4) | length| service | | |
-// +-------+-------+---------------+-+-+-+------------------------+ |
-// | | | | | | |
-// | identification |0|D|M| fragment offset | |
-// | | |F|F| | |
-// +---------------+---------------+-+-+-+------------------------+ |
-// | | | | |
-// | time to live | protocol | header checksum | 20 bytes
-// | | | | |
-// +---------------+---------------+------------------------------+ |
-// | | |
-// | source IPv4 address | |
-// | | |
-// +--------------------------------------------------------------+ |
-// | | |
-// | destination IPv4 address | |
-// | | v
-// +--------------------------------------------------------------+ ---
-// | | ^
-// | | |
-// / options (if any) / 0 - 40
-// / / bytes
-// | | |
-// | | v
-// +--------------------------------------------------------------+ ---
-
-class ipv4_header
-{
-public:
- ipv4_header() { std::fill(rep_, rep_ + sizeof(rep_), 0); }
-
- unsigned char version() const { return (rep_[0] >> 4) & 0xF; }
- unsigned short header_length() const { return (rep_[0] & 0xF) * 4; }
- unsigned char type_of_service() const { return rep_[1]; }
- unsigned short total_length() const { return decode(2, 3); }
- unsigned short identification() const { return decode(4, 5); }
- bool dont_fragment() const { return (rep_[6] & 0x40) != 0; }
- bool more_fragments() const { return (rep_[6] & 0x20) != 0; }
- unsigned short fragment_offset() const { return decode(6, 7) & 0x1FFF; }
- unsigned int time_to_live() const { return rep_[8]; }
- unsigned char protocol() const { return rep_[9]; }
- unsigned short header_checksum() const { return decode(10, 11); }
-
- asio::ip::address_v4 source_address() const
- {
- asio::ip::address_v4::bytes_type bytes
- = { { rep_[12], rep_[13], rep_[14], rep_[15] } };
- return asio::ip::address_v4(bytes);
- }
-
- asio::ip::address_v4 destination_address() const
- {
- asio::ip::address_v4::bytes_type bytes
- = { { rep_[16], rep_[17], rep_[18], rep_[19] } };
- return asio::ip::address_v4(bytes);
- }
-
- friend std::istream& operator>>(std::istream& is, ipv4_header& header)
- {
- is.read(reinterpret_cast<char*>(header.rep_), 20);
- if (header.version() != 4)
- is.setstate(std::ios::failbit);
- std::streamsize options_length = header.header_length() - 20;
- if (options_length < 0 || options_length > 40)
- is.setstate(std::ios::failbit);
- else
- is.read(reinterpret_cast<char*>(header.rep_) + 20, options_length);
- return is;
- }
-
-private:
- unsigned short decode(int a, int b) const
- { return (rep_[a] << 8) + rep_[b]; }
-
- unsigned char rep_[60];
-};
-
-#endif // IPV4_HEADER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/icmp/ping.cpp b/3rdparty/asio/src/examples/cpp03/icmp/ping.cpp
deleted file mode 100644
index 3a1d278415d..00000000000
--- a/3rdparty/asio/src/examples/cpp03/icmp/ping.cpp
+++ /dev/null
@@ -1,161 +0,0 @@
-//
-// ping.cpp
-// ~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <asio.hpp>
-#include <boost/bind.hpp>
-#include <istream>
-#include <iostream>
-#include <ostream>
-
-#include "icmp_header.hpp"
-#include "ipv4_header.hpp"
-
-using asio::ip::icmp;
-using asio::deadline_timer;
-namespace posix_time = boost::posix_time;
-
-class pinger
-{
-public:
- pinger(asio::io_context& io_context, const char* destination)
- : resolver_(io_context), socket_(io_context, icmp::v4()),
- timer_(io_context), sequence_number_(0), num_replies_(0)
- {
- destination_ = *resolver_.resolve(icmp::v4(), destination, "").begin();
-
- start_send();
- start_receive();
- }
-
-private:
- void start_send()
- {
- std::string body("\"Hello!\" from Asio ping.");
-
- // Create an ICMP header for an echo request.
- icmp_header echo_request;
- echo_request.type(icmp_header::echo_request);
- echo_request.code(0);
- echo_request.identifier(get_identifier());
- echo_request.sequence_number(++sequence_number_);
- compute_checksum(echo_request, body.begin(), body.end());
-
- // Encode the request packet.
- asio::streambuf request_buffer;
- std::ostream os(&request_buffer);
- os << echo_request << body;
-
- // Send the request.
- time_sent_ = posix_time::microsec_clock::universal_time();
- socket_.send_to(request_buffer.data(), destination_);
-
- // Wait up to five seconds for a reply.
- num_replies_ = 0;
- timer_.expires_at(time_sent_ + posix_time::seconds(5));
- timer_.async_wait(boost::bind(&pinger::handle_timeout, this));
- }
-
- void handle_timeout()
- {
- if (num_replies_ == 0)
- std::cout << "Request timed out" << std::endl;
-
- // Requests must be sent no less than one second apart.
- timer_.expires_at(time_sent_ + posix_time::seconds(1));
- timer_.async_wait(boost::bind(&pinger::start_send, this));
- }
-
- void start_receive()
- {
- // Discard any data already in the buffer.
- reply_buffer_.consume(reply_buffer_.size());
-
- // Wait for a reply. We prepare the buffer to receive up to 64KB.
- socket_.async_receive(reply_buffer_.prepare(65536),
- boost::bind(&pinger::handle_receive, this, _2));
- }
-
- void handle_receive(std::size_t length)
- {
- // The actual number of bytes received is committed to the buffer so that we
- // can extract it using a std::istream object.
- reply_buffer_.commit(length);
-
- // Decode the reply packet.
- std::istream is(&reply_buffer_);
- ipv4_header ipv4_hdr;
- icmp_header icmp_hdr;
- is >> ipv4_hdr >> icmp_hdr;
-
- // We can receive all ICMP packets received by the host, so we need to
- // filter out only the echo replies that match the our identifier and
- // expected sequence number.
- if (is && icmp_hdr.type() == icmp_header::echo_reply
- && icmp_hdr.identifier() == get_identifier()
- && icmp_hdr.sequence_number() == sequence_number_)
- {
- // If this is the first reply, interrupt the five second timeout.
- if (num_replies_++ == 0)
- timer_.cancel();
-
- // Print out some information about the reply packet.
- posix_time::ptime now = posix_time::microsec_clock::universal_time();
- std::cout << length - ipv4_hdr.header_length()
- << " bytes from " << ipv4_hdr.source_address()
- << ": icmp_seq=" << icmp_hdr.sequence_number()
- << ", ttl=" << ipv4_hdr.time_to_live()
- << ", time=" << (now - time_sent_).total_milliseconds() << " ms"
- << std::endl;
- }
-
- start_receive();
- }
-
- static unsigned short get_identifier()
- {
-#if defined(ASIO_WINDOWS)
- return static_cast<unsigned short>(::GetCurrentProcessId());
-#else
- return static_cast<unsigned short>(::getpid());
-#endif
- }
-
- icmp::resolver resolver_;
- icmp::endpoint destination_;
- icmp::socket socket_;
- deadline_timer timer_;
- unsigned short sequence_number_;
- posix_time::ptime time_sent_;
- asio::streambuf reply_buffer_;
- std::size_t num_replies_;
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: ping <host>" << std::endl;
-#if !defined(ASIO_WINDOWS)
- std::cerr << "(You may need to run this program as root.)" << std::endl;
-#endif
- return 1;
- }
-
- asio::io_context io_context;
- pinger p(io_context, argv[1]);
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << std::endl;
- }
-}
diff --git a/3rdparty/asio/src/examples/cpp03/invocation/.gitignore b/3rdparty/asio/src/examples/cpp03/invocation/.gitignore
deleted file mode 100644
index e5876b7811a..00000000000
--- a/3rdparty/asio/src/examples/cpp03/invocation/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-prioritised_handlers
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/invocation/prioritised_handlers.cpp b/3rdparty/asio/src/examples/cpp03/invocation/prioritised_handlers.cpp
deleted file mode 100644
index 73897946966..00000000000
--- a/3rdparty/asio/src/examples/cpp03/invocation/prioritised_handlers.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-//
-// prioritised_handlers.cpp
-// ~~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "asio.hpp"
-#include <boost/function.hpp>
-#include <iostream>
-#include <queue>
-
-using asio::ip::tcp;
-
-class handler_priority_queue
-{
-public:
- void add(int priority, boost::function<void()> function)
- {
- handlers_.push(queued_handler(priority, function));
- }
-
- void execute_all()
- {
- while (!handlers_.empty())
- {
- queued_handler handler = handlers_.top();
- handler.execute();
- handlers_.pop();
- }
- }
-
- // A generic wrapper class for handlers to allow the invocation to be hooked.
- template <typename Handler>
- class wrapped_handler
- {
- public:
- wrapped_handler(handler_priority_queue& q, int p, Handler h)
- : queue_(q), priority_(p), handler_(h)
- {
- }
-
- void operator()()
- {
- handler_();
- }
-
- template <typename Arg1>
- void operator()(Arg1 arg1)
- {
- handler_(arg1);
- }
-
- template <typename Arg1, typename Arg2>
- void operator()(Arg1 arg1, Arg2 arg2)
- {
- handler_(arg1, arg2);
- }
-
- //private:
- handler_priority_queue& queue_;
- int priority_;
- Handler handler_;
- };
-
- template <typename Handler>
- wrapped_handler<Handler> wrap(int priority, Handler handler)
- {
- return wrapped_handler<Handler>(*this, priority, handler);
- }
-
-private:
- class queued_handler
- {
- public:
- queued_handler(int p, boost::function<void()> f)
- : priority_(p), function_(f)
- {
- }
-
- void execute()
- {
- function_();
- }
-
- friend bool operator<(const queued_handler& a,
- const queued_handler& b)
- {
- return a.priority_ < b.priority_;
- }
-
- private:
- int priority_;
- boost::function<void()> function_;
- };
-
- std::priority_queue<queued_handler> handlers_;
-};
-
-// Custom invocation hook for wrapped handlers.
-template <typename Function, typename Handler>
-void asio_handler_invoke(Function f,
- handler_priority_queue::wrapped_handler<Handler>* h)
-{
- h->queue_.add(h->priority_, f);
-}
-
-//----------------------------------------------------------------------
-
-void high_priority_handler(const asio::error_code& /*ec*/)
-{
- std::cout << "High priority handler\n";
-}
-
-void middle_priority_handler(const asio::error_code& /*ec*/)
-{
- std::cout << "Middle priority handler\n";
-}
-
-void low_priority_handler()
-{
- std::cout << "Low priority handler\n";
-}
-
-int main()
-{
- asio::io_context io_context;
-
- handler_priority_queue pri_queue;
-
- // Post a completion handler to be run immediately.
- asio::post(io_context, pri_queue.wrap(0, low_priority_handler));
-
- // Start an asynchronous accept that will complete immediately.
- tcp::endpoint endpoint(asio::ip::address_v4::loopback(), 0);
- tcp::acceptor acceptor(io_context, endpoint);
- tcp::socket server_socket(io_context);
- acceptor.async_accept(server_socket,
- pri_queue.wrap(100, high_priority_handler));
- tcp::socket client_socket(io_context);
- client_socket.connect(acceptor.local_endpoint());
-
- // Set a deadline timer to expire immediately.
- asio::deadline_timer timer(io_context);
- timer.expires_at(boost::posix_time::neg_infin);
- timer.async_wait(pri_queue.wrap(42, middle_priority_handler));
-
- while (io_context.run_one())
- {
- // The custom invocation hook adds the handlers to the priority queue
- // rather than executing them from within the poll_one() call.
- while (io_context.poll_one())
- ;
-
- pri_queue.execute_all();
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/iostreams/.gitignore b/3rdparty/asio/src/examples/cpp03/iostreams/.gitignore
deleted file mode 100644
index bc2b4f8f7fe..00000000000
--- a/3rdparty/asio/src/examples/cpp03/iostreams/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*_client
-*_server
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/iostreams/daytime_client.cpp b/3rdparty/asio/src/examples/cpp03/iostreams/daytime_client.cpp
deleted file mode 100644
index 4d0f68ca989..00000000000
--- a/3rdparty/asio/src/examples/cpp03/iostreams/daytime_client.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// daytime_client.cpp
-// ~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <string>
-#include <asio.hpp>
-
-using asio::ip::tcp;
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: daytime_client <host>" << std::endl;
- return 1;
- }
-
- tcp::iostream s(argv[1], "daytime");
- if (!s)
- {
- std::cout << "Unable to connect: " << s.error().message() << std::endl;
- return 1;
- }
-
- std::string line;
- std::getline(s, line);
- std::cout << line << std::endl;
- }
- catch (std::exception& e)
- {
- std::cout << "Exception: " << e.what() << std::endl;
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/iostreams/daytime_server.cpp b/3rdparty/asio/src/examples/cpp03/iostreams/daytime_server.cpp
deleted file mode 100644
index ed3f94b0505..00000000000
--- a/3rdparty/asio/src/examples/cpp03/iostreams/daytime_server.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// daytime_server.cpp
-// ~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <ctime>
-#include <iostream>
-#include <string>
-#include <asio.hpp>
-
-using asio::ip::tcp;
-
-std::string make_daytime_string()
-{
- using namespace std; // For time_t, time and ctime;
- time_t now = time(0);
- return ctime(&now);
-}
-
-int main()
-{
- try
- {
- asio::io_context io_context;
-
- tcp::endpoint endpoint(tcp::v4(), 13);
- tcp::acceptor acceptor(io_context, endpoint);
-
- for (;;)
- {
- tcp::iostream stream;
- asio::error_code ec;
- acceptor.accept(stream.socket(), ec);
- if (!ec)
- {
- stream << make_daytime_string();
- }
- }
- }
- catch (std::exception& e)
- {
- std::cerr << e.what() << std::endl;
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/iostreams/http_client.cpp b/3rdparty/asio/src/examples/cpp03/iostreams/http_client.cpp
deleted file mode 100644
index 247df0f37e4..00000000000
--- a/3rdparty/asio/src/examples/cpp03/iostreams/http_client.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-//
-// http_client.cpp
-// ~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <istream>
-#include <ostream>
-#include <string>
-#include <asio/ip/tcp.hpp>
-
-using asio::ip::tcp;
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 3)
- {
- std::cout << "Usage: http_client <server> <path>\n";
- std::cout << "Example:\n";
- std::cout << " http_client www.boost.org /LICENSE_1_0.txt\n";
- return 1;
- }
-
- asio::ip::tcp::iostream s;
-
- // The entire sequence of I/O operations must complete within 60 seconds.
- // If an expiry occurs, the socket is automatically closed and the stream
- // becomes bad.
- s.expires_after(boost::posix_time::seconds(60));
-
- // Establish a connection to the server.
- s.connect(argv[1], "http");
- if (!s)
- {
- std::cout << "Unable to connect: " << s.error().message() << "\n";
- return 1;
- }
-
- // Send the request. We specify the "Connection: close" header so that the
- // server will close the socket after transmitting the response. This will
- // allow us to treat all data up until the EOF as the content.
- s << "GET " << argv[2] << " HTTP/1.0\r\n";
- s << "Host: " << argv[1] << "\r\n";
- s << "Accept: */*\r\n";
- s << "Connection: close\r\n\r\n";
-
- // By default, the stream is tied with itself. This means that the stream
- // automatically flush the buffered output before attempting a read. It is
- // not necessary not explicitly flush the stream at this point.
-
- // Check that response is OK.
- std::string http_version;
- s >> http_version;
- unsigned int status_code;
- s >> status_code;
- std::string status_message;
- std::getline(s, status_message);
- if (!s || http_version.substr(0, 5) != "HTTP/")
- {
- std::cout << "Invalid response\n";
- return 1;
- }
- if (status_code != 200)
- {
- std::cout << "Response returned with status code " << status_code << "\n";
- return 1;
- }
-
- // Process the response headers, which are terminated by a blank line.
- std::string header;
- while (std::getline(s, header) && header != "\r")
- std::cout << header << "\n";
- std::cout << "\n";
-
- // Write the remaining data to output.
- std::cout << s.rdbuf();
- }
- catch (std::exception& e)
- {
- std::cout << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/local/.gitignore b/3rdparty/asio/src/examples/cpp03/local/.gitignore
deleted file mode 100644
index 688277b48d0..00000000000
--- a/3rdparty/asio/src/examples/cpp03/local/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-connect_pair
-stream_server
-stream_client
-iostream_client
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/local/connect_pair.cpp b/3rdparty/asio/src/examples/cpp03/local/connect_pair.cpp
deleted file mode 100644
index 92e0ae866d5..00000000000
--- a/3rdparty/asio/src/examples/cpp03/local/connect_pair.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-//
-// connect_pair.cpp
-// ~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <string>
-#include <cctype>
-#include <asio.hpp>
-#include <boost/array.hpp>
-#include <boost/bind.hpp>
-
-#if defined(ASIO_HAS_LOCAL_SOCKETS)
-
-using asio::local::stream_protocol;
-
-class uppercase_filter
-{
-public:
- uppercase_filter(asio::io_context& io_context)
- : socket_(io_context)
- {
- }
-
- stream_protocol::socket& socket()
- {
- return socket_;
- }
-
- void start()
- {
- // Wait for request.
- socket_.async_read_some(asio::buffer(data_),
- boost::bind(&uppercase_filter::handle_read,
- this, asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
-
-private:
- void handle_read(const asio::error_code& ec, std::size_t size)
- {
- if (!ec)
- {
- // Compute result.
- for (std::size_t i = 0; i < size; ++i)
- data_[i] = std::toupper(data_[i]);
-
- // Send result.
- asio::async_write(socket_, asio::buffer(data_, size),
- boost::bind(&uppercase_filter::handle_write,
- this, asio::placeholders::error));
- }
- else
- {
- throw asio::system_error(ec);
- }
- }
-
- void handle_write(const asio::error_code& ec)
- {
- if (!ec)
- {
- // Wait for request.
- socket_.async_read_some(asio::buffer(data_),
- boost::bind(&uppercase_filter::handle_read,
- this, asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
- else
- {
- throw asio::system_error(ec);
- }
- }
-
- stream_protocol::socket socket_;
- boost::array<char, 512> data_;
-};
-
-void run(asio::io_context* io_context)
-{
- try
- {
- io_context->run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception in thread: " << e.what() << "\n";
- std::exit(1);
- }
-}
-
-int main()
-{
- try
- {
- asio::io_context io_context;
-
- // Create filter and establish a connection to it.
- uppercase_filter filter(io_context);
- stream_protocol::socket socket(io_context);
- asio::local::connect_pair(socket, filter.socket());
- filter.start();
-
- // The io_context runs in a background thread to perform filtering.
- asio::thread thread(boost::bind(run, &io_context));
-
- for (;;)
- {
- // Collect request from user.
- std::cout << "Enter a string: ";
- std::string request;
- std::getline(std::cin, request);
-
- // Send request to filter.
- asio::write(socket, asio::buffer(request));
-
- // Wait for reply from filter.
- std::vector<char> reply(request.size());
- asio::read(socket, asio::buffer(reply));
-
- // Show reply to user.
- std::cout << "Result: ";
- std::cout.write(&reply[0], request.size());
- std::cout << std::endl;
- }
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- std::exit(1);
- }
-}
-
-#else // defined(ASIO_HAS_LOCAL_SOCKETS)
-# error Local sockets not available on this platform.
-#endif // defined(ASIO_HAS_LOCAL_SOCKETS)
diff --git a/3rdparty/asio/src/examples/cpp03/local/iostream_client.cpp b/3rdparty/asio/src/examples/cpp03/local/iostream_client.cpp
deleted file mode 100644
index d28d29e88c1..00000000000
--- a/3rdparty/asio/src/examples/cpp03/local/iostream_client.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-//
-// stream_client.cpp
-// ~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <cstring>
-#include <iostream>
-#include "asio.hpp"
-
-#if defined(ASIO_HAS_LOCAL_SOCKETS)
-
-using asio::local::stream_protocol;
-
-enum { max_length = 1024 };
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: iostream_client <file>\n";
- return 1;
- }
-
- stream_protocol::endpoint ep(argv[1]);
- stream_protocol::iostream s(ep);
- if (!s)
- {
- std::cerr << "Unable to connect: " << s.error().message() << std::endl;
- return 1;
- }
-
- using namespace std; // For strlen.
- std::cout << "Enter message: ";
- char request[max_length];
- std::cin.getline(request, max_length);
- size_t length = strlen(request);
- s << request;
-
- char reply[max_length];
- s.read(reply, length);
- std::cout << "Reply is: ";
- std::cout.write(reply, length);
- std::cout << "\n";
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
-
-#else // defined(ASIO_HAS_LOCAL_SOCKETS)
-# error Local sockets not available on this platform.
-#endif // defined(ASIO_HAS_LOCAL_SOCKETS)
diff --git a/3rdparty/asio/src/examples/cpp03/local/stream_client.cpp b/3rdparty/asio/src/examples/cpp03/local/stream_client.cpp
deleted file mode 100644
index 6374f8fb534..00000000000
--- a/3rdparty/asio/src/examples/cpp03/local/stream_client.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// stream_client.cpp
-// ~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <cstdlib>
-#include <cstring>
-#include <iostream>
-#include "asio.hpp"
-
-#if defined(ASIO_HAS_LOCAL_SOCKETS)
-
-using asio::local::stream_protocol;
-
-enum { max_length = 1024 };
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: stream_client <file>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- stream_protocol::socket s(io_context);
- s.connect(stream_protocol::endpoint(argv[1]));
-
- using namespace std; // For strlen.
- std::cout << "Enter message: ";
- char request[max_length];
- std::cin.getline(request, max_length);
- size_t request_length = strlen(request);
- asio::write(s, asio::buffer(request, request_length));
-
- char reply[max_length];
- size_t reply_length = asio::read(s,
- asio::buffer(reply, request_length));
- std::cout << "Reply is: ";
- std::cout.write(reply, reply_length);
- std::cout << "\n";
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
-
-#else // defined(ASIO_HAS_LOCAL_SOCKETS)
-# error Local sockets not available on this platform.
-#endif // defined(ASIO_HAS_LOCAL_SOCKETS)
diff --git a/3rdparty/asio/src/examples/cpp03/local/stream_server.cpp b/3rdparty/asio/src/examples/cpp03/local/stream_server.cpp
deleted file mode 100644
index 0bfe2788cae..00000000000
--- a/3rdparty/asio/src/examples/cpp03/local/stream_server.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-//
-// stream_server.cpp
-// ~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <cstdio>
-#include <iostream>
-#include <boost/array.hpp>
-#include <boost/bind.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include <boost/shared_ptr.hpp>
-#include "asio.hpp"
-
-#if defined(ASIO_HAS_LOCAL_SOCKETS)
-
-using asio::local::stream_protocol;
-
-class session
- : public boost::enable_shared_from_this<session>
-{
-public:
- session(asio::io_context& io_context)
- : socket_(io_context)
- {
- }
-
- stream_protocol::socket& socket()
- {
- return socket_;
- }
-
- void start()
- {
- socket_.async_read_some(asio::buffer(data_),
- boost::bind(&session::handle_read,
- shared_from_this(),
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
-
- void handle_read(const asio::error_code& error,
- size_t bytes_transferred)
- {
- if (!error)
- {
- asio::async_write(socket_,
- asio::buffer(data_, bytes_transferred),
- boost::bind(&session::handle_write,
- shared_from_this(),
- asio::placeholders::error));
- }
- }
-
- void handle_write(const asio::error_code& error)
- {
- if (!error)
- {
- socket_.async_read_some(asio::buffer(data_),
- boost::bind(&session::handle_read,
- shared_from_this(),
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
- }
-
-private:
- // The socket used to communicate with the client.
- stream_protocol::socket socket_;
-
- // Buffer used to store data received from the client.
- boost::array<char, 1024> data_;
-};
-
-typedef boost::shared_ptr<session> session_ptr;
-
-class server
-{
-public:
- server(asio::io_context& io_context, const std::string& file)
- : io_context_(io_context),
- acceptor_(io_context, stream_protocol::endpoint(file))
- {
- session_ptr new_session(new session(io_context_));
- acceptor_.async_accept(new_session->socket(),
- boost::bind(&server::handle_accept, this, new_session,
- asio::placeholders::error));
- }
-
- void handle_accept(session_ptr new_session,
- const asio::error_code& error)
- {
- if (!error)
- {
- new_session->start();
- }
-
- new_session.reset(new session(io_context_));
- acceptor_.async_accept(new_session->socket(),
- boost::bind(&server::handle_accept, this, new_session,
- asio::placeholders::error));
- }
-
-private:
- asio::io_context& io_context_;
- stream_protocol::acceptor acceptor_;
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: stream_server <file>\n";
- std::cerr << "*** WARNING: existing file is removed ***\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- std::remove(argv[1]);
- server s(io_context, argv[1]);
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
-
-#else // defined(ASIO_HAS_LOCAL_SOCKETS)
-# error Local sockets not available on this platform.
-#endif // defined(ASIO_HAS_LOCAL_SOCKETS)
diff --git a/3rdparty/asio/src/examples/cpp03/multicast/.gitignore b/3rdparty/asio/src/examples/cpp03/multicast/.gitignore
deleted file mode 100644
index 0c30ebdd7df..00000000000
--- a/3rdparty/asio/src/examples/cpp03/multicast/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.dirstamp
-receiver
-sender
-*.o
-*.obj
-*.exe
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/multicast/receiver.cpp b/3rdparty/asio/src/examples/cpp03/multicast/receiver.cpp
deleted file mode 100644
index 5937050b0a8..00000000000
--- a/3rdparty/asio/src/examples/cpp03/multicast/receiver.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-//
-// receiver.cpp
-// ~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <string>
-#include "asio.hpp"
-#include "boost/bind.hpp"
-
-const short multicast_port = 30001;
-
-class receiver
-{
-public:
- receiver(asio::io_context& io_context,
- const asio::ip::address& listen_address,
- const asio::ip::address& multicast_address)
- : socket_(io_context)
- {
- // Create the socket so that multiple may be bound to the same address.
- asio::ip::udp::endpoint listen_endpoint(
- listen_address, multicast_port);
- socket_.open(listen_endpoint.protocol());
- socket_.set_option(asio::ip::udp::socket::reuse_address(true));
- socket_.bind(listen_endpoint);
-
- // Join the multicast group.
- socket_.set_option(
- asio::ip::multicast::join_group(multicast_address));
-
- socket_.async_receive_from(
- asio::buffer(data_, max_length), sender_endpoint_,
- boost::bind(&receiver::handle_receive_from, this,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
-
- void handle_receive_from(const asio::error_code& error,
- size_t bytes_recvd)
- {
- if (!error)
- {
- std::cout.write(data_, bytes_recvd);
- std::cout << std::endl;
-
- socket_.async_receive_from(
- asio::buffer(data_, max_length), sender_endpoint_,
- boost::bind(&receiver::handle_receive_from, this,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
- }
-
-private:
- asio::ip::udp::socket socket_;
- asio::ip::udp::endpoint sender_endpoint_;
- enum { max_length = 1024 };
- char data_[max_length];
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 3)
- {
- std::cerr << "Usage: receiver <listen_address> <multicast_address>\n";
- std::cerr << " For IPv4, try:\n";
- std::cerr << " receiver 0.0.0.0 239.255.0.1\n";
- std::cerr << " For IPv6, try:\n";
- std::cerr << " receiver 0::0 ff31::8000:1234\n";
- return 1;
- }
-
- asio::io_context io_context;
- receiver r(io_context,
- asio::ip::make_address(argv[1]),
- asio::ip::make_address(argv[2]));
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/multicast/sender.cpp b/3rdparty/asio/src/examples/cpp03/multicast/sender.cpp
deleted file mode 100644
index 995f05aa48e..00000000000
--- a/3rdparty/asio/src/examples/cpp03/multicast/sender.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-//
-// sender.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <sstream>
-#include <string>
-#include "asio.hpp"
-#include "boost/bind.hpp"
-#include "boost/date_time/posix_time/posix_time_types.hpp"
-
-const short multicast_port = 30001;
-const int max_message_count = 10;
-
-class sender
-{
-public:
- sender(asio::io_context& io_context,
- const asio::ip::address& multicast_address)
- : endpoint_(multicast_address, multicast_port),
- socket_(io_context, endpoint_.protocol()),
- timer_(io_context),
- message_count_(0)
- {
- std::ostringstream os;
- os << "Message " << message_count_++;
- message_ = os.str();
-
- socket_.async_send_to(
- asio::buffer(message_), endpoint_,
- boost::bind(&sender::handle_send_to, this,
- asio::placeholders::error));
- }
-
- void handle_send_to(const asio::error_code& error)
- {
- if (!error && message_count_ < max_message_count)
- {
- timer_.expires_from_now(boost::posix_time::seconds(1));
- timer_.async_wait(
- boost::bind(&sender::handle_timeout, this,
- asio::placeholders::error));
- }
- }
-
- void handle_timeout(const asio::error_code& error)
- {
- if (!error)
- {
- std::ostringstream os;
- os << "Message " << message_count_++;
- message_ = os.str();
-
- socket_.async_send_to(
- asio::buffer(message_), endpoint_,
- boost::bind(&sender::handle_send_to, this,
- asio::placeholders::error));
- }
- }
-
-private:
- asio::ip::udp::endpoint endpoint_;
- asio::ip::udp::socket socket_;
- asio::deadline_timer timer_;
- int message_count_;
- std::string message_;
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: sender <multicast_address>\n";
- std::cerr << " For IPv4, try:\n";
- std::cerr << " sender 239.255.0.1\n";
- std::cerr << " For IPv6, try:\n";
- std::cerr << " sender ff31::8000:1234\n";
- return 1;
- }
-
- asio::io_context io_context;
- sender s(io_context, asio::ip::make_address(argv[1]));
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/nonblocking/.gitignore b/3rdparty/asio/src/examples/cpp03/nonblocking/.gitignore
deleted file mode 100644
index 760e0dcebb4..00000000000
--- a/3rdparty/asio/src/examples/cpp03/nonblocking/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-third_party_lib
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/nonblocking/third_party_lib.cpp b/3rdparty/asio/src/examples/cpp03/nonblocking/third_party_lib.cpp
deleted file mode 100644
index 8ec06f6034d..00000000000
--- a/3rdparty/asio/src/examples/cpp03/nonblocking/third_party_lib.cpp
+++ /dev/null
@@ -1,240 +0,0 @@
-//
-// third_party_lib.cpp
-// ~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <asio.hpp>
-#include <boost/array.hpp>
-#include <boost/bind.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include <iostream>
-
-using asio::ip::tcp;
-
-namespace third_party_lib {
-
-// Simulation of a third party library that wants to perform read and write
-// operations directly on a socket. It needs to be polled to determine whether
-// it requires a read or write operation, and notified when the socket is ready
-// for reading or writing.
-class session
-{
-public:
- session(tcp::socket& socket)
- : socket_(socket),
- state_(reading)
- {
- }
-
- // Returns true if the third party library wants to be notified when the
- // socket is ready for reading.
- bool want_read() const
- {
- return state_ == reading;
- }
-
- // Notify that third party library that it should perform its read operation.
- void do_read(asio::error_code& ec)
- {
- if (std::size_t len = socket_.read_some(asio::buffer(data_), ec))
- {
- write_buffer_ = asio::buffer(data_, len);
- state_ = writing;
- }
- }
-
- // Returns true if the third party library wants to be notified when the
- // socket is ready for writing.
- bool want_write() const
- {
- return state_ == writing;
- }
-
- // Notify that third party library that it should perform its write operation.
- void do_write(asio::error_code& ec)
- {
- if (std::size_t len = socket_.write_some(
- asio::buffer(write_buffer_), ec))
- {
- write_buffer_ = write_buffer_ + len;
- state_ = asio::buffer_size(write_buffer_) > 0 ? writing : reading;
- }
- }
-
-private:
- tcp::socket& socket_;
- enum { reading, writing } state_;
- boost::array<char, 128> data_;
- asio::const_buffer write_buffer_;
-};
-
-} // namespace third_party_lib
-
-// The glue between asio's sockets and the third party library.
-class connection
- : public boost::enable_shared_from_this<connection>
-{
-public:
- typedef boost::shared_ptr<connection> pointer;
-
- static pointer create(asio::io_context& io_context)
- {
- return pointer(new connection(io_context));
- }
-
- tcp::socket& socket()
- {
- return socket_;
- }
-
- void start()
- {
- // Put the socket into non-blocking mode.
- socket_.non_blocking(true);
-
- start_operations();
- }
-
-private:
- connection(asio::io_context& io_context)
- : socket_(io_context),
- session_impl_(socket_),
- read_in_progress_(false),
- write_in_progress_(false)
- {
- }
-
- void start_operations()
- {
- // Start a read operation if the third party library wants one.
- if (session_impl_.want_read() && !read_in_progress_)
- {
- read_in_progress_ = true;
- socket_.async_wait(tcp::socket::wait_read,
- boost::bind(&connection::handle_read,
- shared_from_this(),
- asio::placeholders::error));
- }
-
- // Start a write operation if the third party library wants one.
- if (session_impl_.want_write() && !write_in_progress_)
- {
- write_in_progress_ = true;
- socket_.async_wait(tcp::socket::wait_write,
- boost::bind(&connection::handle_write,
- shared_from_this(),
- asio::placeholders::error));
- }
- }
-
- void handle_read(asio::error_code ec)
- {
- read_in_progress_ = false;
-
- // Notify third party library that it can perform a read.
- if (!ec)
- session_impl_.do_read(ec);
-
- // The third party library successfully performed a read on the socket.
- // Start new read or write operations based on what it now wants.
- if (!ec || ec == asio::error::would_block)
- start_operations();
-
- // Otherwise, an error occurred. Closing the socket cancels any outstanding
- // asynchronous read or write operations. The connection object will be
- // destroyed automatically once those outstanding operations complete.
- else
- socket_.close();
- }
-
- void handle_write(asio::error_code ec)
- {
- write_in_progress_ = false;
-
- // Notify third party library that it can perform a write.
- if (!ec)
- session_impl_.do_write(ec);
-
- // The third party library successfully performed a write on the socket.
- // Start new read or write operations based on what it now wants.
- if (!ec || ec == asio::error::would_block)
- start_operations();
-
- // Otherwise, an error occurred. Closing the socket cancels any outstanding
- // asynchronous read or write operations. The connection object will be
- // destroyed automatically once those outstanding operations complete.
- else
- socket_.close();
- }
-
-private:
- tcp::socket socket_;
- third_party_lib::session session_impl_;
- bool read_in_progress_;
- bool write_in_progress_;
-};
-
-class server
-{
-public:
- server(asio::io_context& io_context, unsigned short port)
- : acceptor_(io_context, tcp::endpoint(tcp::v4(), port))
- {
- start_accept();
- }
-
-private:
- void start_accept()
- {
- connection::pointer new_connection =
- connection::create(acceptor_.get_executor().context());
-
- acceptor_.async_accept(new_connection->socket(),
- boost::bind(&server::handle_accept, this, new_connection,
- asio::placeholders::error));
- }
-
- void handle_accept(connection::pointer new_connection,
- const asio::error_code& error)
- {
- if (!error)
- {
- new_connection->start();
- }
-
- start_accept();
- }
-
- tcp::acceptor acceptor_;
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: third_party_lib <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- using namespace std; // For atoi.
- server s(io_context, atoi(argv[1]));
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/porthopper/.gitignore b/3rdparty/asio/src/examples/cpp03/porthopper/.gitignore
deleted file mode 100644
index 692ea7e7e65..00000000000
--- a/3rdparty/asio/src/examples/cpp03/porthopper/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-client
-server
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/porthopper/client.cpp b/3rdparty/asio/src/examples/cpp03/porthopper/client.cpp
deleted file mode 100644
index 15d8e4803c1..00000000000
--- a/3rdparty/asio/src/examples/cpp03/porthopper/client.cpp
+++ /dev/null
@@ -1,192 +0,0 @@
-//
-// client.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <asio.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/lambda/bind.hpp>
-#include <boost/lambda/if.hpp>
-#include <boost/shared_ptr.hpp>
-#include <algorithm>
-#include <cstdlib>
-#include <exception>
-#include <iostream>
-#include <string>
-#include "protocol.hpp"
-
-using namespace boost;
-using asio::ip::tcp;
-using asio::ip::udp;
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 3)
- {
- std::cerr << "Usage: client <host> <port>\n";
- return 1;
- }
- using namespace std; // For atoi.
- std::string host_name = argv[1];
- std::string port = argv[2];
-
- asio::io_context io_context;
-
- // Determine the location of the server.
- tcp::resolver resolver(io_context);
- tcp::endpoint remote_endpoint = *resolver.resolve(host_name, port).begin();
-
- // Establish the control connection to the server.
- tcp::socket control_socket(io_context);
- control_socket.connect(remote_endpoint);
-
- // Create a datagram socket to receive data from the server.
- boost::shared_ptr<udp::socket> data_socket(
- new udp::socket(io_context, udp::endpoint(udp::v4(), 0)));
-
- // Determine what port we will receive data on.
- udp::endpoint data_endpoint = data_socket->local_endpoint();
-
- // Ask the server to start sending us data.
- control_request start = control_request::start(data_endpoint.port());
- asio::write(control_socket, start.to_buffers());
-
- unsigned long last_frame_number = 0;
- for (;;)
- {
- // Receive 50 messages on the current data socket.
- for (int i = 0; i < 50; ++i)
- {
- // Receive a frame from the server.
- frame f;
- data_socket->receive(f.to_buffers(), 0);
- if (f.number() > last_frame_number)
- {
- last_frame_number = f.number();
- std::cout << "\n" << f.payload();
- }
- }
-
- // Time to switch to a new socket. To ensure seamless handover we will
- // continue to receive packets using the old socket until data arrives on
- // the new one.
- std::cout << " Starting renegotiation";
-
- // Create the new data socket.
- boost::shared_ptr<udp::socket> new_data_socket(
- new udp::socket(io_context, udp::endpoint(udp::v4(), 0)));
-
- // Determine the new port we will use to receive data.
- udp::endpoint new_data_endpoint = new_data_socket->local_endpoint();
-
- // Ask the server to switch over to the new port.
- control_request change = control_request::change(
- data_endpoint.port(), new_data_endpoint.port());
- asio::error_code control_result;
- asio::async_write(control_socket, change.to_buffers(),
- (
- lambda::var(control_result) = lambda::_1
- ));
-
- // Try to receive a frame from the server on the new data socket. If we
- // successfully receive a frame on this new data socket we can consider
- // the renegotation complete. In that case we will close the old data
- // socket, which will cause any outstanding receive operation on it to be
- // cancelled.
- frame f1;
- asio::error_code new_data_socket_result;
- new_data_socket->async_receive(f1.to_buffers(),
- (
- // Note: lambda::_1 is the first argument to the callback handler,
- // which in this case is the error code for the operation.
- lambda::var(new_data_socket_result) = lambda::_1,
- lambda::if_(!lambda::_1)
- [
- // We have successfully received a frame on the new data socket,
- // so we can close the old data socket. This will cancel any
- // outstanding receive operation on the old data socket.
- lambda::var(data_socket) = boost::shared_ptr<udp::socket>()
- ]
- ));
-
- // This loop will continue until we have successfully completed the
- // renegotiation (i.e. received a frame on the new data socket), or some
- // unrecoverable error occurs.
- bool done = false;
- while (!done)
- {
- // Even though we're performing a renegotation, we want to continue
- // receiving data as smoothly as possible. Therefore we will continue to
- // try to receive a frame from the server on the old data socket. If we
- // receive a frame on this socket we will interrupt the io_context,
- // print the frame, and resume waiting for the other operations to
- // complete.
- frame f2;
- done = true; // Let's be optimistic.
- if (data_socket) // Might have been closed by new_data_socket's handler.
- {
- data_socket->async_receive(f2.to_buffers(), 0,
- (
- lambda::if_(!lambda::_1)
- [
- // We have successfully received a frame on the old data
- // socket. Stop the io_context so that we can print it.
- lambda::bind(&asio::io_context::stop, &io_context),
- lambda::var(done) = false
- ]
- ));
- }
-
- // Run the operations in parallel. This will block until all operations
- // have finished, or until the io_context is interrupted. (No threads!)
- io_context.restart();
- io_context.run();
-
- // If the io_context.run() was interrupted then we have received a frame
- // on the old data socket. We need to keep waiting for the renegotation
- // operations to complete.
- if (!done)
- {
- if (f2.number() > last_frame_number)
- {
- last_frame_number = f2.number();
- std::cout << "\n" << f2.payload();
- }
- }
- }
-
- // Since the loop has finished, we have either successfully completed
- // the renegotation, or an error has occurred. First we'll check for
- // errors.
- if (control_result)
- throw asio::system_error(control_result);
- if (new_data_socket_result)
- throw asio::system_error(new_data_socket_result);
-
- // If we get here it means we have successfully started receiving data on
- // the new data socket. This new data socket will be used from now on
- // (until the next time we renegotiate).
- std::cout << " Renegotiation complete";
- data_socket = new_data_socket;
- data_endpoint = new_data_endpoint;
- if (f1.number() > last_frame_number)
- {
- last_frame_number = f1.number();
- std::cout << "\n" << f1.payload();
- }
- }
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << std::endl;
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/porthopper/protocol.hpp b/3rdparty/asio/src/examples/cpp03/porthopper/protocol.hpp
deleted file mode 100644
index c79bc6b49f4..00000000000
--- a/3rdparty/asio/src/examples/cpp03/porthopper/protocol.hpp
+++ /dev/null
@@ -1,156 +0,0 @@
-//
-// protocol.hpp
-// ~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef PORTHOPPER_PROTOCOL_HPP
-#define PORTHOPPER_PROTOCOL_HPP
-
-#include <boost/array.hpp>
-#include <asio.hpp>
-#include <cstring>
-#include <iomanip>
-#include <string>
-#include <strstream>
-
-// This request is sent by the client to the server over a TCP connection.
-// The client uses it to perform three functions:
-// - To request that data start being sent to a given port.
-// - To request that data is no longer sent to a given port.
-// - To change the target port to another.
-class control_request
-{
-public:
- // Construct an empty request. Used when receiving.
- control_request()
- {
- }
-
- // Create a request to start sending data to a given port.
- static const control_request start(unsigned short port)
- {
- return control_request(0, port);
- }
-
- // Create a request to stop sending data to a given port.
- static const control_request stop(unsigned short port)
- {
- return control_request(port, 0);
- }
-
- // Create a request to change the port that data is sent to.
- static const control_request change(
- unsigned short old_port, unsigned short new_port)
- {
- return control_request(old_port, new_port);
- }
-
- // Get the old port. Returns 0 for start requests.
- unsigned short old_port() const
- {
- std::istrstream is(data_, encoded_port_size);
- unsigned short port = 0;
- is >> std::setw(encoded_port_size) >> std::hex >> port;
- return port;
- }
-
- // Get the new port. Returns 0 for stop requests.
- unsigned short new_port() const
- {
- std::istrstream is(data_ + encoded_port_size, encoded_port_size);
- unsigned short port = 0;
- is >> std::setw(encoded_port_size) >> std::hex >> port;
- return port;
- }
-
- // Obtain buffers for reading from or writing to a socket.
- boost::array<asio::mutable_buffer, 1> to_buffers()
- {
- boost::array<asio::mutable_buffer, 1> buffers
- = { { asio::buffer(data_) } };
- return buffers;
- }
-
-private:
- // Construct with specified old and new ports.
- control_request(unsigned short old_port_number,
- unsigned short new_port_number)
- {
- std::ostrstream os(data_, control_request_size);
- os << std::setw(encoded_port_size) << std::hex << old_port_number;
- os << std::setw(encoded_port_size) << std::hex << new_port_number;
- }
-
- // The length in bytes of a control_request and its components.
- enum
- {
- encoded_port_size = 4, // 16-bit port in hex.
- control_request_size = encoded_port_size * 2
- };
-
- // The encoded request data.
- char data_[control_request_size];
-};
-
-// This frame is sent from the server to subscribed clients over UDP.
-class frame
-{
-public:
- // The maximum allowable length of the payload.
- enum { payload_size = 32 };
-
- // Construct an empty frame. Used when receiving.
- frame()
- {
- }
-
- // Construct a frame with specified frame number and payload.
- frame(unsigned long frame_number, const std::string& payload_data)
- {
- std::ostrstream os(data_, frame_size);
- os << std::setw(encoded_number_size) << std::hex << frame_number;
- os << std::setw(payload_size)
- << std::setfill(' ') << payload_data.substr(0, payload_size);
- }
-
- // Get the frame number.
- unsigned long number() const
- {
- std::istrstream is(data_, encoded_number_size);
- unsigned long frame_number = 0;
- is >> std::setw(encoded_number_size) >> std::hex >> frame_number;
- return frame_number;
- }
-
- // Get the payload data.
- const std::string payload() const
- {
- return std::string(data_ + encoded_number_size, payload_size);
- }
-
- // Obtain buffers for reading from or writing to a socket.
- boost::array<asio::mutable_buffer, 1> to_buffers()
- {
- boost::array<asio::mutable_buffer, 1> buffers
- = { { asio::buffer(data_) } };
- return buffers;
- }
-
-private:
- // The length in bytes of a frame and its components.
- enum
- {
- encoded_number_size = 8, // Frame number in hex.
- frame_size = encoded_number_size + payload_size
- };
-
- // The encoded frame data.
- char data_[frame_size];
-};
-
-#endif // PORTHOPPER_PROTOCOL_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/porthopper/server.cpp b/3rdparty/asio/src/examples/cpp03/porthopper/server.cpp
deleted file mode 100644
index b98a7d4b24d..00000000000
--- a/3rdparty/asio/src/examples/cpp03/porthopper/server.cpp
+++ /dev/null
@@ -1,189 +0,0 @@
-//
-// server.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <asio.hpp>
-#include <boost/bind.hpp>
-#include <boost/shared_ptr.hpp>
-#include <cmath>
-#include <cstdlib>
-#include <exception>
-#include <iostream>
-#include <set>
-#include "protocol.hpp"
-
-using asio::ip::tcp;
-using asio::ip::udp;
-
-typedef boost::shared_ptr<tcp::socket> tcp_socket_ptr;
-typedef boost::shared_ptr<asio::deadline_timer> timer_ptr;
-typedef boost::shared_ptr<control_request> control_request_ptr;
-
-class server
-{
-public:
- // Construct the server to wait for incoming control connections.
- server(asio::io_context& io_context, unsigned short port)
- : acceptor_(io_context, tcp::endpoint(tcp::v4(), port)),
- timer_(io_context),
- udp_socket_(io_context, udp::endpoint(udp::v4(), 0)),
- next_frame_number_(1)
- {
- // Start waiting for a new control connection.
- tcp_socket_ptr new_socket(
- new tcp::socket(acceptor_.get_executor().context()));
- acceptor_.async_accept(*new_socket,
- boost::bind(&server::handle_accept, this,
- asio::placeholders::error, new_socket));
-
- // Start the timer used to generate outgoing frames.
- timer_.expires_from_now(boost::posix_time::milliseconds(100));
- timer_.async_wait(boost::bind(&server::handle_timer, this));
- }
-
- // Handle a new control connection.
- void handle_accept(const asio::error_code& ec, tcp_socket_ptr socket)
- {
- if (!ec)
- {
- // Start receiving control requests on the connection.
- control_request_ptr request(new control_request);
- asio::async_read(*socket, request->to_buffers(),
- boost::bind(&server::handle_control_request, this,
- asio::placeholders::error, socket, request));
- }
-
- // Start waiting for a new control connection.
- tcp_socket_ptr new_socket(
- new tcp::socket(acceptor_.get_executor().context()));
- acceptor_.async_accept(*new_socket,
- boost::bind(&server::handle_accept, this,
- asio::placeholders::error, new_socket));
- }
-
- // Handle a new control request.
- void handle_control_request(const asio::error_code& ec,
- tcp_socket_ptr socket, control_request_ptr request)
- {
- if (!ec)
- {
- // Delay handling of the control request to simulate network latency.
- timer_ptr delay_timer(
- new asio::deadline_timer(acceptor_.get_executor().context()));
- delay_timer->expires_from_now(boost::posix_time::seconds(2));
- delay_timer->async_wait(
- boost::bind(&server::handle_control_request_timer, this,
- socket, request, delay_timer));
- }
- }
-
- void handle_control_request_timer(tcp_socket_ptr socket,
- control_request_ptr request, timer_ptr /*delay_timer*/)
- {
- // Determine what address this client is connected from, since
- // subscriptions must be stored on the server as a complete endpoint, not
- // just a port. We use the non-throwing overload of remote_endpoint() since
- // it may fail if the socket is no longer connected.
- asio::error_code ec;
- tcp::endpoint remote_endpoint = socket->remote_endpoint(ec);
- if (!ec)
- {
- // Remove old port subscription, if any.
- if (unsigned short old_port = request->old_port())
- {
- udp::endpoint old_endpoint(remote_endpoint.address(), old_port);
- subscribers_.erase(old_endpoint);
- std::cout << "Removing subscription " << old_endpoint << std::endl;
- }
-
- // Add new port subscription, if any.
- if (unsigned short new_port = request->new_port())
- {
- udp::endpoint new_endpoint(remote_endpoint.address(), new_port);
- subscribers_.insert(new_endpoint);
- std::cout << "Adding subscription " << new_endpoint << std::endl;
- }
- }
-
- // Wait for next control request on this connection.
- asio::async_read(*socket, request->to_buffers(),
- boost::bind(&server::handle_control_request, this,
- asio::placeholders::error, socket, request));
- }
-
- // Every time the timer fires we will generate a new frame and send it to all
- // subscribers.
- void handle_timer()
- {
- // Generate payload.
- double x = next_frame_number_ * 0.2;
- double y = std::sin(x);
- int char_index = static_cast<int>((y + 1.0) * (frame::payload_size / 2));
- std::string payload;
- for (int i = 0; i < frame::payload_size; ++i)
- payload += (i == char_index ? '*' : '.');
-
- // Create the frame to be sent to all subscribers.
- frame f(next_frame_number_++, payload);
-
- // Send frame to all subscribers. We can use synchronous calls here since
- // UDP send operations typically do not block.
- std::set<udp::endpoint>::iterator j;
- for (j = subscribers_.begin(); j != subscribers_.end(); ++j)
- {
- asio::error_code ec;
- udp_socket_.send_to(f.to_buffers(), *j, 0, ec);
- }
-
- // Wait for next timeout.
- timer_.expires_from_now(boost::posix_time::milliseconds(100));
- timer_.async_wait(boost::bind(&server::handle_timer, this));
- }
-
-private:
- // The acceptor used to accept incoming control connections.
- tcp::acceptor acceptor_;
-
- // The timer used for generating data.
- asio::deadline_timer timer_;
-
- // The socket used to send data to subscribers.
- udp::socket udp_socket_;
-
- // The next frame number.
- unsigned long next_frame_number_;
-
- // The set of endpoints that are subscribed.
- std::set<udp::endpoint> subscribers_;
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: server <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- using namespace std; // For atoi.
- server s(io_context, atoi(argv[1]));
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << std::endl;
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/serialization/.gitignore b/3rdparty/asio/src/examples/cpp03/serialization/.gitignore
deleted file mode 100644
index 692ea7e7e65..00000000000
--- a/3rdparty/asio/src/examples/cpp03/serialization/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-client
-server
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/serialization/client.cpp b/3rdparty/asio/src/examples/cpp03/serialization/client.cpp
deleted file mode 100644
index 8b83de284f4..00000000000
--- a/3rdparty/asio/src/examples/cpp03/serialization/client.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-//
-// client.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <asio.hpp>
-#include <boost/bind.hpp>
-#include <iostream>
-#include <vector>
-#include "connection.hpp" // Must come before boost/serialization headers.
-#include <boost/serialization/vector.hpp>
-#include "stock.hpp"
-
-namespace s11n_example {
-
-/// Downloads stock quote information from a server.
-class client
-{
-public:
- /// Constructor starts the asynchronous connect operation.
- client(asio::io_context& io_context,
- const std::string& host, const std::string& service)
- : connection_(io_context)
- {
- // Resolve the host name into an IP address.
- asio::ip::tcp::resolver resolver(io_context);
- asio::ip::tcp::resolver::query query(host, service);
- asio::ip::tcp::resolver::iterator endpoint_iterator =
- resolver.resolve(query);
-
- // Start an asynchronous connect operation.
- asio::async_connect(connection_.socket(), endpoint_iterator,
- boost::bind(&client::handle_connect, this,
- asio::placeholders::error));
- }
-
- /// Handle completion of a connect operation.
- void handle_connect(const asio::error_code& e)
- {
- if (!e)
- {
- // Successfully established connection. Start operation to read the list
- // of stocks. The connection::async_read() function will automatically
- // decode the data that is read from the underlying socket.
- connection_.async_read(stocks_,
- boost::bind(&client::handle_read, this,
- asio::placeholders::error));
- }
- else
- {
- // An error occurred. Log it and return. Since we are not starting a new
- // operation the io_context will run out of work to do and the client will
- // exit.
- std::cerr << e.message() << std::endl;
- }
- }
-
- /// Handle completion of a read operation.
- void handle_read(const asio::error_code& e)
- {
- if (!e)
- {
- // Print out the data that was received.
- for (std::size_t i = 0; i < stocks_.size(); ++i)
- {
- std::cout << "Stock number " << i << "\n";
- std::cout << " code: " << stocks_[i].code << "\n";
- std::cout << " name: " << stocks_[i].name << "\n";
- std::cout << " open_price: " << stocks_[i].open_price << "\n";
- std::cout << " high_price: " << stocks_[i].high_price << "\n";
- std::cout << " low_price: " << stocks_[i].low_price << "\n";
- std::cout << " last_price: " << stocks_[i].last_price << "\n";
- std::cout << " buy_price: " << stocks_[i].buy_price << "\n";
- std::cout << " buy_quantity: " << stocks_[i].buy_quantity << "\n";
- std::cout << " sell_price: " << stocks_[i].sell_price << "\n";
- std::cout << " sell_quantity: " << stocks_[i].sell_quantity << "\n";
- }
- }
- else
- {
- // An error occurred.
- std::cerr << e.message() << std::endl;
- }
-
- // Since we are not starting a new operation the io_context will run out of
- // work to do and the client will exit.
- }
-
-private:
- /// The connection to the server.
- connection connection_;
-
- /// The data received from the server.
- std::vector<stock> stocks_;
-};
-
-} // namespace s11n_example
-
-int main(int argc, char* argv[])
-{
- try
- {
- // Check command line arguments.
- if (argc != 3)
- {
- std::cerr << "Usage: client <host> <port>" << std::endl;
- return 1;
- }
-
- asio::io_context io_context;
- s11n_example::client client(io_context, argv[1], argv[2]);
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << e.what() << std::endl;
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/serialization/connection.hpp b/3rdparty/asio/src/examples/cpp03/serialization/connection.hpp
deleted file mode 100644
index a1fa2a19e8e..00000000000
--- a/3rdparty/asio/src/examples/cpp03/serialization/connection.hpp
+++ /dev/null
@@ -1,188 +0,0 @@
-//
-// connection.hpp
-// ~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef SERIALIZATION_CONNECTION_HPP
-#define SERIALIZATION_CONNECTION_HPP
-
-#include <asio.hpp>
-#include <boost/archive/text_iarchive.hpp>
-#include <boost/archive/text_oarchive.hpp>
-#include <boost/bind.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <iomanip>
-#include <string>
-#include <sstream>
-#include <vector>
-
-namespace s11n_example {
-
-/// The connection class provides serialization primitives on top of a socket.
-/**
- * Each message sent using this class consists of:
- * @li An 8-byte header containing the length of the serialized data in
- * hexadecimal.
- * @li The serialized data.
- */
-class connection
-{
-public:
- /// Constructor.
- connection(asio::io_context& io_context)
- : socket_(io_context)
- {
- }
-
- /// Get the underlying socket. Used for making a connection or for accepting
- /// an incoming connection.
- asio::ip::tcp::socket& socket()
- {
- return socket_;
- }
-
- /// Asynchronously write a data structure to the socket.
- template <typename T, typename Handler>
- void async_write(const T& t, Handler handler)
- {
- // Serialize the data first so we know how large it is.
- std::ostringstream archive_stream;
- boost::archive::text_oarchive archive(archive_stream);
- archive << t;
- outbound_data_ = archive_stream.str();
-
- // Format the header.
- std::ostringstream header_stream;
- header_stream << std::setw(header_length)
- << std::hex << outbound_data_.size();
- if (!header_stream || header_stream.str().size() != header_length)
- {
- // Something went wrong, inform the caller.
- asio::error_code error(asio::error::invalid_argument);
- socket_.get_io_context().post(boost::bind(handler, error));
- return;
- }
- outbound_header_ = header_stream.str();
-
- // Write the serialized data to the socket. We use "gather-write" to send
- // both the header and the data in a single write operation.
- std::vector<asio::const_buffer> buffers;
- buffers.push_back(asio::buffer(outbound_header_));
- buffers.push_back(asio::buffer(outbound_data_));
- asio::async_write(socket_, buffers, handler);
- }
-
- /// Asynchronously read a data structure from the socket.
- template <typename T, typename Handler>
- void async_read(T& t, Handler handler)
- {
- // Issue a read operation to read exactly the number of bytes in a header.
- void (connection::*f)(
- const asio::error_code&,
- T&, boost::tuple<Handler>)
- = &connection::handle_read_header<T, Handler>;
- asio::async_read(socket_, asio::buffer(inbound_header_),
- boost::bind(f,
- this, asio::placeholders::error, boost::ref(t),
- boost::make_tuple(handler)));
- }
-
- /// Handle a completed read of a message header. The handler is passed using
- /// a tuple since boost::bind seems to have trouble binding a function object
- /// created using boost::bind as a parameter.
- template <typename T, typename Handler>
- void handle_read_header(const asio::error_code& e,
- T& t, boost::tuple<Handler> handler)
- {
- if (e)
- {
- boost::get<0>(handler)(e);
- }
- else
- {
- // Determine the length of the serialized data.
- std::istringstream is(std::string(inbound_header_, header_length));
- std::size_t inbound_data_size = 0;
- if (!(is >> std::hex >> inbound_data_size))
- {
- // Header doesn't seem to be valid. Inform the caller.
- asio::error_code error(asio::error::invalid_argument);
- boost::get<0>(handler)(error);
- return;
- }
-
- // Start an asynchronous call to receive the data.
- inbound_data_.resize(inbound_data_size);
- void (connection::*f)(
- const asio::error_code&,
- T&, boost::tuple<Handler>)
- = &connection::handle_read_data<T, Handler>;
- asio::async_read(socket_, asio::buffer(inbound_data_),
- boost::bind(f, this,
- asio::placeholders::error, boost::ref(t), handler));
- }
- }
-
- /// Handle a completed read of message data.
- template <typename T, typename Handler>
- void handle_read_data(const asio::error_code& e,
- T& t, boost::tuple<Handler> handler)
- {
- if (e)
- {
- boost::get<0>(handler)(e);
- }
- else
- {
- // Extract the data structure from the data just received.
- try
- {
- std::string archive_data(&inbound_data_[0], inbound_data_.size());
- std::istringstream archive_stream(archive_data);
- boost::archive::text_iarchive archive(archive_stream);
- archive >> t;
- }
- catch (std::exception& e)
- {
- // Unable to decode data.
- asio::error_code error(asio::error::invalid_argument);
- boost::get<0>(handler)(error);
- return;
- }
-
- // Inform caller that data has been received ok.
- boost::get<0>(handler)(e);
- }
- }
-
-private:
- /// The underlying socket.
- asio::ip::tcp::socket socket_;
-
- /// The size of a fixed length header.
- enum { header_length = 8 };
-
- /// Holds an outbound header.
- std::string outbound_header_;
-
- /// Holds the outbound data.
- std::string outbound_data_;
-
- /// Holds an inbound header.
- char inbound_header_[header_length];
-
- /// Holds the inbound data.
- std::vector<char> inbound_data_;
-};
-
-typedef boost::shared_ptr<connection> connection_ptr;
-
-} // namespace s11n_example
-
-#endif // SERIALIZATION_CONNECTION_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/serialization/server.cpp b/3rdparty/asio/src/examples/cpp03/serialization/server.cpp
deleted file mode 100644
index b81b1a424da..00000000000
--- a/3rdparty/asio/src/examples/cpp03/serialization/server.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-//
-// server.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <asio.hpp>
-#include <boost/bind.hpp>
-#include <boost/lexical_cast.hpp>
-#include <iostream>
-#include <vector>
-#include "connection.hpp" // Must come before boost/serialization headers.
-#include <boost/serialization/vector.hpp>
-#include "stock.hpp"
-
-namespace s11n_example {
-
-/// Serves stock quote information to any client that connects to it.
-class server
-{
-public:
- /// Constructor opens the acceptor and starts waiting for the first incoming
- /// connection.
- server(asio::io_context& io_context, unsigned short port)
- : acceptor_(io_context,
- asio::ip::tcp::endpoint(asio::ip::tcp::v4(), port))
- {
- // Create the data to be sent to each client.
- stock s;
- s.code = "ABC";
- s.name = "A Big Company";
- s.open_price = 4.56;
- s.high_price = 5.12;
- s.low_price = 4.33;
- s.last_price = 4.98;
- s.buy_price = 4.96;
- s.buy_quantity = 1000;
- s.sell_price = 4.99;
- s.sell_quantity = 2000;
- stocks_.push_back(s);
- s.code = "DEF";
- s.name = "Developer Entertainment Firm";
- s.open_price = 20.24;
- s.high_price = 22.88;
- s.low_price = 19.50;
- s.last_price = 19.76;
- s.buy_price = 19.72;
- s.buy_quantity = 34000;
- s.sell_price = 19.85;
- s.sell_quantity = 45000;
- stocks_.push_back(s);
-
- // Start an accept operation for a new connection.
- connection_ptr new_conn(new connection(acceptor_.get_io_context()));
- acceptor_.async_accept(new_conn->socket(),
- boost::bind(&server::handle_accept, this,
- asio::placeholders::error, new_conn));
- }
-
- /// Handle completion of a accept operation.
- void handle_accept(const asio::error_code& e, connection_ptr conn)
- {
- if (!e)
- {
- // Successfully accepted a new connection. Send the list of stocks to the
- // client. The connection::async_write() function will automatically
- // serialize the data structure for us.
- conn->async_write(stocks_,
- boost::bind(&server::handle_write, this,
- asio::placeholders::error, conn));
- }
-
- // Start an accept operation for a new connection.
- connection_ptr new_conn(new connection(acceptor_.get_io_context()));
- acceptor_.async_accept(new_conn->socket(),
- boost::bind(&server::handle_accept, this,
- asio::placeholders::error, new_conn));
- }
-
- /// Handle completion of a write operation.
- void handle_write(const asio::error_code& e, connection_ptr conn)
- {
- // Nothing to do. The socket will be closed automatically when the last
- // reference to the connection object goes away.
- }
-
-private:
- /// The acceptor object used to accept incoming socket connections.
- asio::ip::tcp::acceptor acceptor_;
-
- /// The data to be sent to each client.
- std::vector<stock> stocks_;
-};
-
-} // namespace s11n_example
-
-int main(int argc, char* argv[])
-{
- try
- {
- // Check command line arguments.
- if (argc != 2)
- {
- std::cerr << "Usage: server <port>" << std::endl;
- return 1;
- }
- unsigned short port = boost::lexical_cast<unsigned short>(argv[1]);
-
- asio::io_context io_context;
- s11n_example::server server(io_context, port);
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << e.what() << std::endl;
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/serialization/stock.hpp b/3rdparty/asio/src/examples/cpp03/serialization/stock.hpp
deleted file mode 100644
index 1acbca5a7a6..00000000000
--- a/3rdparty/asio/src/examples/cpp03/serialization/stock.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-// stock.hpp
-// ~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef SERIALIZATION_STOCK_HPP
-#define SERIALIZATION_STOCK_HPP
-
-#include <string>
-
-namespace s11n_example {
-
-/// Structure to hold information about a single stock.
-struct stock
-{
- std::string code;
- std::string name;
- double open_price;
- double high_price;
- double low_price;
- double last_price;
- double buy_price;
- int buy_quantity;
- double sell_price;
- int sell_quantity;
-
- template <typename Archive>
- void serialize(Archive& ar, const unsigned int version)
- {
- ar & code;
- ar & name;
- ar & open_price;
- ar & high_price;
- ar & low_price;
- ar & last_price;
- ar & buy_price;
- ar & buy_quantity;
- ar & sell_price;
- ar & sell_quantity;
- }
-};
-
-} // namespace s11n_example
-
-#endif // SERIALIZATION_STOCK_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/services/.gitignore b/3rdparty/asio/src/examples/cpp03/services/.gitignore
deleted file mode 100644
index 701b1b85834..00000000000
--- a/3rdparty/asio/src/examples/cpp03/services/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*_client
-*.ilk
-*.manifest
-*.pdb
-*.tds
-log.txt
diff --git a/3rdparty/asio/src/examples/cpp03/services/basic_logger.hpp b/3rdparty/asio/src/examples/cpp03/services/basic_logger.hpp
deleted file mode 100644
index 876086a2ecf..00000000000
--- a/3rdparty/asio/src/examples/cpp03/services/basic_logger.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-//
-// basic_logger.hpp
-// ~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef SERVICES_BASIC_LOGGER_HPP
-#define SERVICES_BASIC_LOGGER_HPP
-
-#include <asio.hpp>
-#include <boost/noncopyable.hpp>
-#include <string>
-
-namespace services {
-
-/// Class to provide simple logging functionality. Use the services::logger
-/// typedef.
-template <typename Service>
-class basic_logger
- : private boost::noncopyable
-{
-public:
- /// The type of the service that will be used to provide timer operations.
- typedef Service service_type;
-
- /// The native implementation type of the timer.
- typedef typename service_type::impl_type impl_type;
-
- /// Constructor.
- /**
- * This constructor creates a logger.
- *
- * @param io_context The io_context object used to locate the logger service.
- *
- * @param identifier An identifier for this logger.
- */
- explicit basic_logger(asio::io_context& io_context,
- const std::string& identifier)
- : service_(asio::use_service<Service>(io_context)),
- impl_(service_.null())
- {
- service_.create(impl_, identifier);
- }
-
- /// Destructor.
- ~basic_logger()
- {
- service_.destroy(impl_);
- }
-
- /// Get the io_context associated with the object.
- asio::io_context& get_io_context()
- {
- return service_.get_io_context();
- }
-
- /// Set the output file for all logger instances.
- void use_file(const std::string& file)
- {
- service_.use_file(impl_, file);
- }
-
- /// Log a message.
- void log(const std::string& message)
- {
- service_.log(impl_, message);
- }
-
-private:
- /// The backend service implementation.
- service_type& service_;
-
- /// The underlying native implementation.
- impl_type impl_;
-};
-
-} // namespace services
-
-#endif // SERVICES_BASIC_LOGGER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/services/daytime_client.cpp b/3rdparty/asio/src/examples/cpp03/services/daytime_client.cpp
deleted file mode 100644
index e0a6af9df6f..00000000000
--- a/3rdparty/asio/src/examples/cpp03/services/daytime_client.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-//
-// daytime_client.cpp
-// ~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <asio.hpp>
-#include <boost/bind.hpp>
-#include <iostream>
-#include "logger.hpp"
-
-using asio::ip::tcp;
-
-char read_buffer[1024];
-
-void read_handler(const asio::error_code& e,
- std::size_t bytes_transferred, tcp::socket* s)
-{
- if (!e)
- {
- std::cout.write(read_buffer, bytes_transferred);
-
- s->async_read_some(asio::buffer(read_buffer),
- boost::bind(read_handler, asio::placeholders::error,
- asio::placeholders::bytes_transferred, s));
- }
- else
- {
- services::logger logger(s->get_executor().context(), "read_handler");
-
- std::string msg = "Read error: ";
- msg += e.message();
- logger.log(msg);
- }
-}
-
-void connect_handler(const asio::error_code& e, tcp::socket* s)
-{
- services::logger logger(s->get_executor().context(), "connect_handler");
-
- if (!e)
- {
- logger.log("Connection established");
-
- s->async_read_some(asio::buffer(read_buffer),
- boost::bind(read_handler, asio::placeholders::error,
- asio::placeholders::bytes_transferred, s));
- }
- else
- {
- std::string msg = "Unable to establish connection: ";
- msg += e.message();
- logger.log(msg);
- }
-}
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: daytime_client <host>" << std::endl;
- return 1;
- }
-
- asio::io_context io_context;
-
- // Set the name of the file that all logger instances will use.
- services::logger logger(io_context, "");
- logger.use_file("log.txt");
-
- // Resolve the address corresponding to the given host.
- tcp::resolver resolver(io_context);
- tcp::resolver::results_type endpoints =
- resolver.resolve(argv[1], "daytime");
-
- // Start an asynchronous connect.
- tcp::socket socket(io_context);
- asio::async_connect(socket, endpoints,
- boost::bind(connect_handler,
- asio::placeholders::error, &socket));
-
- // Run the io_context until all operations have finished.
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << e.what() << std::endl;
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/services/logger.hpp b/3rdparty/asio/src/examples/cpp03/services/logger.hpp
deleted file mode 100644
index 41d17e6de10..00000000000
--- a/3rdparty/asio/src/examples/cpp03/services/logger.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// logger.hpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef SERVICES_LOGGER_HPP
-#define SERVICES_LOGGER_HPP
-
-#include "basic_logger.hpp"
-#include "logger_service.hpp"
-
-namespace services {
-
-/// Typedef for typical logger usage.
-typedef basic_logger<logger_service> logger;
-
-} // namespace services
-
-#endif // SERVICES_LOGGER_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/services/logger_service.cpp b/3rdparty/asio/src/examples/cpp03/services/logger_service.cpp
deleted file mode 100644
index c3543e47f5a..00000000000
--- a/3rdparty/asio/src/examples/cpp03/services/logger_service.cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-// logger_service.cpp
-// ~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "logger_service.hpp"
-
-namespace services {
-
-asio::io_context::id logger_service::id;
-
-} // namespace services
diff --git a/3rdparty/asio/src/examples/cpp03/services/logger_service.hpp b/3rdparty/asio/src/examples/cpp03/services/logger_service.hpp
deleted file mode 100644
index 9f175dffba3..00000000000
--- a/3rdparty/asio/src/examples/cpp03/services/logger_service.hpp
+++ /dev/null
@@ -1,145 +0,0 @@
-//
-// logger_service.hpp
-// ~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef SERVICES_LOGGER_SERVICE_HPP
-#define SERVICES_LOGGER_SERVICE_HPP
-
-#include <asio.hpp>
-#include <boost/bind.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
-#include <boost/noncopyable.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <fstream>
-#include <sstream>
-#include <string>
-
-namespace services {
-
-/// Service implementation for the logger.
-class logger_service
- : public asio::io_context::service
-{
-public:
- /// The unique service identifier.
- static asio::io_context::id id;
-
- /// The backend implementation of a logger.
- struct logger_impl
- {
- explicit logger_impl(const std::string& ident) : identifier(ident) {}
- std::string identifier;
- };
-
- /// The type for an implementation of the logger.
- typedef logger_impl* impl_type;
-
- /// Constructor creates a thread to run a private io_context.
- logger_service(asio::io_context& io_context)
- : asio::io_context::service(io_context),
- work_io_context_(),
- work_(asio::make_work_guard(work_io_context_)),
- work_thread_(new asio::thread(
- boost::bind(&asio::io_context::run, &work_io_context_)))
- {
- }
-
- /// Destructor shuts down the private io_context.
- ~logger_service()
- {
- /// Indicate that we have finished with the private io_context. Its
- /// io_context::run() function will exit once all other work has completed.
- work_.reset();
- if (work_thread_)
- work_thread_->join();
- }
-
- /// Destroy all user-defined handler objects owned by the service.
- void shutdown_service()
- {
- }
-
- /// Return a null logger implementation.
- impl_type null() const
- {
- return 0;
- }
-
- /// Create a new logger implementation.
- void create(impl_type& impl, const std::string& identifier)
- {
- impl = new logger_impl(identifier);
- }
-
- /// Destroy a logger implementation.
- void destroy(impl_type& impl)
- {
- delete impl;
- impl = null();
- }
-
- /// Set the output file for the logger. The current implementation sets the
- /// output file for all logger instances, and so the impl parameter is not
- /// actually needed. It is retained here to illustrate how service functions
- /// are typically defined.
- void use_file(impl_type& /*impl*/, const std::string& file)
- {
- // Pass the work of opening the file to the background thread.
- asio::post(work_io_context_, boost::bind(
- &logger_service::use_file_impl, this, file));
- }
-
- /// Log a message.
- void log(impl_type& impl, const std::string& message)
- {
- // Format the text to be logged.
- std::ostringstream os;
- os << impl->identifier << ": " << message;
-
- // Pass the work of opening the file to the background thread.
- asio::post(work_io_context_, boost::bind(
- &logger_service::log_impl, this, os.str()));
- }
-
-private:
- /// Helper function used to open the output file from within the private
- /// io_context's thread.
- void use_file_impl(const std::string& file)
- {
- ofstream_.close();
- ofstream_.clear();
- ofstream_.open(file.c_str());
- }
-
- /// Helper function used to log a message from within the private io_context's
- /// thread.
- void log_impl(const std::string& text)
- {
- ofstream_ << text << std::endl;
- }
-
- /// Private io_context used for performing logging operations.
- asio::io_context work_io_context_;
-
- /// Work for the private io_context to perform. If we do not give the
- /// io_context some work to do then the io_context::run() function will exit
- /// immediately.
- asio::executor_work_guard<
- asio::io_context::executor_type> work_;
-
- /// Thread used for running the work io_context's run loop.
- boost::scoped_ptr<asio::thread> work_thread_;
-
- /// The file to which log messages will be written.
- std::ofstream ofstream_;
-};
-
-} // namespace services
-
-#endif // SERVICES_LOGGER_SERVICE_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/socks4/.gitignore b/3rdparty/asio/src/examples/cpp03/socks4/.gitignore
deleted file mode 100644
index e11e0de344e..00000000000
--- a/3rdparty/asio/src/examples/cpp03/socks4/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-sync_client
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/socks4/socks4.hpp b/3rdparty/asio/src/examples/cpp03/socks4/socks4.hpp
deleted file mode 100644
index c5558756558..00000000000
--- a/3rdparty/asio/src/examples/cpp03/socks4/socks4.hpp
+++ /dev/null
@@ -1,144 +0,0 @@
-//
-// socks4.hpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef SOCKS4_HPP
-#define SOCKS4_HPP
-
-#include <string>
-#include <asio.hpp>
-#include <boost/array.hpp>
-
-namespace socks4 {
-
-const unsigned char version = 0x04;
-
-class request
-{
-public:
- enum command_type
- {
- connect = 0x01,
- bind = 0x02
- };
-
- request(command_type cmd, const asio::ip::tcp::endpoint& endpoint,
- const std::string& user_id)
- : version_(version),
- command_(cmd),
- user_id_(user_id),
- null_byte_(0)
- {
- // Only IPv4 is supported by the SOCKS 4 protocol.
- if (endpoint.protocol() != asio::ip::tcp::v4())
- {
- throw asio::system_error(
- asio::error::address_family_not_supported);
- }
-
- // Convert port number to network byte order.
- unsigned short port = endpoint.port();
- port_high_byte_ = (port >> 8) & 0xff;
- port_low_byte_ = port & 0xff;
-
- // Save IP address in network byte order.
- address_ = endpoint.address().to_v4().to_bytes();
- }
-
- boost::array<asio::const_buffer, 7> buffers() const
- {
- boost::array<asio::const_buffer, 7> bufs =
- {
- {
- asio::buffer(&version_, 1),
- asio::buffer(&command_, 1),
- asio::buffer(&port_high_byte_, 1),
- asio::buffer(&port_low_byte_, 1),
- asio::buffer(address_),
- asio::buffer(user_id_),
- asio::buffer(&null_byte_, 1)
- }
- };
- return bufs;
- }
-
-private:
- unsigned char version_;
- unsigned char command_;
- unsigned char port_high_byte_;
- unsigned char port_low_byte_;
- asio::ip::address_v4::bytes_type address_;
- std::string user_id_;
- unsigned char null_byte_;
-};
-
-class reply
-{
-public:
- enum status_type
- {
- request_granted = 0x5a,
- request_failed = 0x5b,
- request_failed_no_identd = 0x5c,
- request_failed_bad_user_id = 0x5d
- };
-
- reply()
- : null_byte_(0),
- status_()
- {
- }
-
- boost::array<asio::mutable_buffer, 5> buffers()
- {
- boost::array<asio::mutable_buffer, 5> bufs =
- {
- {
- asio::buffer(&null_byte_, 1),
- asio::buffer(&status_, 1),
- asio::buffer(&port_high_byte_, 1),
- asio::buffer(&port_low_byte_, 1),
- asio::buffer(address_)
- }
- };
- return bufs;
- }
-
- bool success() const
- {
- return null_byte_ == 0 && status_ == request_granted;
- }
-
- unsigned char status() const
- {
- return status_;
- }
-
- asio::ip::tcp::endpoint endpoint() const
- {
- unsigned short port = port_high_byte_;
- port = (port << 8) & 0xff00;
- port = port | port_low_byte_;
-
- asio::ip::address_v4 address(address_);
-
- return asio::ip::tcp::endpoint(address, port);
- }
-
-private:
- unsigned char null_byte_;
- unsigned char status_;
- unsigned char port_high_byte_;
- unsigned char port_low_byte_;
- asio::ip::address_v4::bytes_type address_;
-};
-
-} // namespace socks4
-
-#endif // SOCKS4_HPP
diff --git a/3rdparty/asio/src/examples/cpp03/socks4/sync_client.cpp b/3rdparty/asio/src/examples/cpp03/socks4/sync_client.cpp
deleted file mode 100644
index 7b82564ab53..00000000000
--- a/3rdparty/asio/src/examples/cpp03/socks4/sync_client.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-//
-// sync_client.cpp
-// ~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <iomanip>
-#include <ostream>
-#include <string>
-#include <asio.hpp>
-#include <boost/array.hpp>
-#include "socks4.hpp"
-
-using asio::ip::tcp;
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 4)
- {
- std::cout << "Usage: sync_client <socks4server> <socks4port> <user>\n";
- std::cout << "Examples:\n";
- std::cout << " sync_client 127.0.0.1 1080 chris\n";
- std::cout << " sync_client localhost socks chris\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- // Get a list of endpoints corresponding to the SOCKS 4 server name.
- tcp::resolver resolver(io_context);
- tcp::resolver::results_type endpoints = resolver.resolve(argv[1], argv[2]);
-
- // Try each endpoint until we successfully establish a connection to the
- // SOCKS 4 server.
- tcp::socket socket(io_context);
- asio::connect(socket, endpoints);
-
- // Get an endpoint for the Boost website. This will be passed to the SOCKS
- // 4 server. Explicitly specify IPv4 since SOCKS 4 does not support IPv6.
- tcp::endpoint http_endpoint =
- *resolver.resolve(tcp::v4(), "www.boost.org", "http").begin();
-
- // Send the request to the SOCKS 4 server.
- socks4::request socks_request(
- socks4::request::connect, http_endpoint, argv[3]);
- asio::write(socket, socks_request.buffers());
-
- // Receive a response from the SOCKS 4 server.
- socks4::reply socks_reply;
- asio::read(socket, socks_reply.buffers());
-
- // Check whether we successfully negotiated with the SOCKS 4 server.
- if (!socks_reply.success())
- {
- std::cout << "Connection failed.\n";
- std::cout << "status = 0x" << std::hex << socks_reply.status();
- return 1;
- }
-
- // Form the HTTP request. We specify the "Connection: close" header so that
- // the server will close the socket after transmitting the response. This
- // will allow us to treat all data up until the EOF as the response.
- std::string request =
- "GET / HTTP/1.0\r\n"
- "Host: www.boost.org\r\n"
- "Accept: */*\r\n"
- "Connection: close\r\n\r\n";
-
- // Send the HTTP request.
- asio::write(socket, asio::buffer(request));
-
- // Read until EOF, writing data to output as we go.
- boost::array<char, 512> response;
- asio::error_code error;
- while (std::size_t s = socket.read_some(
- asio::buffer(response), error))
- std::cout.write(response.data(), s);
- if (error != asio::error::eof)
- throw asio::system_error(error);
- }
- catch (std::exception& e)
- {
- std::cout << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/spawn/.gitignore b/3rdparty/asio/src/examples/cpp03/spawn/.gitignore
deleted file mode 100644
index 6b8a121e099..00000000000
--- a/3rdparty/asio/src/examples/cpp03/spawn/.gitignore
+++ /dev/null
@@ -1,12 +0,0 @@
-.deps
-.dirstamp
-parallel_grep
-*.o
-*.obj
-*.exe
-*_server
-*_client
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/spawn/echo_server.cpp b/3rdparty/asio/src/examples/cpp03/spawn/echo_server.cpp
deleted file mode 100644
index 415f6da8f33..00000000000
--- a/3rdparty/asio/src/examples/cpp03/spawn/echo_server.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// echo_server.cpp
-// ~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <asio/deadline_timer.hpp>
-#include <asio/io_context.hpp>
-#include <asio/ip/tcp.hpp>
-#include <asio/spawn.hpp>
-#include <asio/write.hpp>
-#include <boost/bind.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include <iostream>
-
-using asio::ip::tcp;
-
-class session : public boost::enable_shared_from_this<session>
-{
-public:
- explicit session(asio::io_context& io_context)
- : strand_(io_context),
- socket_(io_context),
- timer_(io_context)
- {
- }
-
- tcp::socket& socket()
- {
- return socket_;
- }
-
- void go()
- {
- asio::spawn(strand_,
- boost::bind(&session::echo,
- shared_from_this(), _1));
- asio::spawn(strand_,
- boost::bind(&session::timeout,
- shared_from_this(), _1));
- }
-
-private:
- void echo(asio::yield_context yield)
- {
- try
- {
- char data[128];
- for (;;)
- {
- timer_.expires_from_now(boost::posix_time::seconds(10));
- std::size_t n = socket_.async_read_some(asio::buffer(data), yield);
- asio::async_write(socket_, asio::buffer(data, n), yield);
- }
- }
- catch (std::exception& e)
- {
- socket_.close();
- timer_.cancel();
- }
- }
-
- void timeout(asio::yield_context yield)
- {
- while (socket_.is_open())
- {
- asio::error_code ignored_ec;
- timer_.async_wait(yield[ignored_ec]);
- if (timer_.expires_from_now() <= boost::posix_time::seconds(0))
- socket_.close();
- }
- }
-
- asio::io_context::strand strand_;
- tcp::socket socket_;
- asio::deadline_timer timer_;
-};
-
-void do_accept(asio::io_context& io_context,
- unsigned short port, asio::yield_context yield)
-{
- tcp::acceptor acceptor(io_context, tcp::endpoint(tcp::v4(), port));
-
- for (;;)
- {
- asio::error_code ec;
- boost::shared_ptr<session> new_session(new session(io_context));
- acceptor.async_accept(new_session->socket(), yield[ec]);
- if (!ec) new_session->go();
- }
-}
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: echo_server <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- asio::spawn(io_context,
- boost::bind(do_accept,
- boost::ref(io_context), atoi(argv[1]), _1));
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/spawn/parallel_grep.cpp b/3rdparty/asio/src/examples/cpp03/spawn/parallel_grep.cpp
deleted file mode 100644
index d742f196d78..00000000000
--- a/3rdparty/asio/src/examples/cpp03/spawn/parallel_grep.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// parallel_grep.cpp
-// ~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <asio/dispatch.hpp>
-#include <asio/post.hpp>
-#include <asio/spawn.hpp>
-#include <asio/strand.hpp>
-#include <asio/thread_pool.hpp>
-#include <boost/bind.hpp>
-#include <fstream>
-#include <iostream>
-#include <string>
-
-using asio::dispatch;
-using asio::spawn;
-using asio::strand;
-using asio::thread_pool;
-using asio::yield_context;
-
-void print_match(std::string input_file, std::string line)
-{
- std::cout << input_file << ':' << line << std::endl;
-}
-
-void search_file(std::string search_string, std::string input_file,
- strand<thread_pool::executor_type> output_strand, yield_context yield)
-{
- std::ifstream is(input_file.c_str());
- std::string line;
- std::size_t line_num = 0;
- while (std::getline(is, line))
- {
- // If we find a match, send a message to the output.
- if (line.find(search_string) != std::string::npos)
- {
- dispatch(output_strand, boost::bind(&print_match, input_file, line));
- }
-
- // Every so often we yield control to another coroutine.
- if (++line_num % 10 == 0)
- post(yield);
- }
-}
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc < 2)
- {
- std::cerr << "Usage: parallel_grep <string> <files...>\n";
- return 1;
- }
-
- // We use a fixed size pool of threads for reading the input files. The
- // number of threads is automatically determined based on the number of
- // CPUs available in the system.
- thread_pool pool;
-
- // To prevent the output from being garbled, we use a strand to synchronise
- // printing.
- strand<thread_pool::executor_type> output_strand(pool.get_executor());
-
- // Spawn a new coroutine for each file specified on the command line.
- std::string search_string = argv[1];
- for (int argn = 2; argn < argc; ++argn)
- {
- std::string input_file = argv[argn];
- spawn(pool, boost::bind(&search_file,
- search_string, input_file, output_strand, _1));
- }
-
- // Join the thread pool to wait for all the spawned tasks to complete.
- pool.join();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/ssl/.gitignore b/3rdparty/asio/src/examples/cpp03/ssl/.gitignore
deleted file mode 100644
index a67811253d9..00000000000
--- a/3rdparty/asio/src/examples/cpp03/ssl/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-server
-client
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/ssl/README b/3rdparty/asio/src/examples/cpp03/ssl/README
deleted file mode 100644
index 8d94105be5b..00000000000
--- a/3rdparty/asio/src/examples/cpp03/ssl/README
+++ /dev/null
@@ -1,8 +0,0 @@
-The passphrase for both the CA and server private keys is "test".
-
-
--------------------------------------------------------------------------------
-Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-
-Distributed under the Boost Software License, Version 1.0. (See accompanying
-file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
diff --git a/3rdparty/asio/src/examples/cpp03/ssl/ca.pem b/3rdparty/asio/src/examples/cpp03/ssl/ca.pem
deleted file mode 100644
index 1ee5f2ca43b..00000000000
--- a/3rdparty/asio/src/examples/cpp03/ssl/ca.pem
+++ /dev/null
@@ -1,49 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDlzCCAn+gAwIBAgIJAMJYU3U6A0IRMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNV
-BAYTAkFVMQwwCgYDVQQIEwNOU1cxDzANBgNVBAcTBlN5ZG5leTENMAsGA1UEChME
-YXNpbzAeFw0xNTExMTgyMjMzNDhaFw0yMDExMTYyMjMzNDhaMDsxCzAJBgNVBAYT
-AkFVMQwwCgYDVQQIEwNOU1cxDzANBgNVBAcTBlN5ZG5leTENMAsGA1UEChMEYXNp
-bzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMcRJocHdVMdLUJ/pypY
-QVSTC0t3IIgjwjazrK3kAaoIMvzPmDFxEXWcDx+nyz8kQ/E38Ir/ef2BCNGci5hu
-wkfMSuMoW9l2N4hx3QCcF46tTDEZztFxWAH7QbE2wYMlMgKZSxWimNfq0YjxEEXb
-QM0lGPLFh7Xoko29H0F3LKaaQV9u/vop3Hs0h12HeWlY4PiLp7QQTNGqbWcXycA0
-NZ/fyismireyEvPAgo6L8iXuAi7g0TVKVNlrticGGjMcMq6IMvxzEpSMkuMQ5rWj
-pZjWOoBjSYBuXdblcBRvXhOr2Ws8jJLMZfehKq9q1reQfoGV6xMnbwmumSXbWRWT
-0vkCAwEAAaOBnTCBmjAdBgNVHQ4EFgQUK/Zv/AVtfIeucJw8VEtux1dhI1YwawYD
-VR0jBGQwYoAUK/Zv/AVtfIeucJw8VEtux1dhI1ahP6Q9MDsxCzAJBgNVBAYTAkFV
-MQwwCgYDVQQIEwNOU1cxDzANBgNVBAcTBlN5ZG5leTENMAsGA1UEChMEYXNpb4IJ
-AMJYU3U6A0IRMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBABLYXimq
-v/HLyIJi7Xn8AJUsICj8LKF/J24nwwiF+ibf7UkoChJURs4nN78bod/lpDVPTEVl
-gTBdV/vBJs416sCEFfsGjqB9OBYj4gb0VaJDsQd0+NMvXp0faKv2y9wgScxG9/cg
-aM7eRmyfMn1qjb6tpNxVOPpe/nFi8Vx/1orejBRaZr4zF5TkoPepfwLWQeXDUIdE
-+QHZ60jZAkR5RXTVU4u3kOKcJs839pmJYyxM4H2VxpR18vy4/YdIVWkREIUM2OgT
-5iznIQIIgR56QRGP85uef+I6n0BHzrBk6du69bkQFxrFjLVGlal4bIQqSg4KGWgx
-dEdymMWzmMxpO9s=
------END CERTIFICATE-----
------BEGIN RSA PRIVATE KEY-----
-MIIEpgIBAAKCAQEAxxEmhwd1Ux0tQn+nKlhBVJMLS3cgiCPCNrOsreQBqggy/M+Y
-MXERdZwPH6fLPyRD8Tfwiv95/YEI0ZyLmG7CR8xK4yhb2XY3iHHdAJwXjq1MMRnO
-0XFYAftBsTbBgyUyAplLFaKY1+rRiPEQRdtAzSUY8sWHteiSjb0fQXcspppBX27+
-+incezSHXYd5aVjg+IuntBBM0aptZxfJwDQ1n9/KKyaKt7IS88CCjovyJe4CLuDR
-NUpU2Wu2JwYaMxwyrogy/HMSlIyS4xDmtaOlmNY6gGNJgG5d1uVwFG9eE6vZazyM
-ksxl96Eqr2rWt5B+gZXrEydvCa6ZJdtZFZPS+QIDAQABAoIBAQCOma+SvPoDzvvU
-DiPOxqgOEMPfjHfGbm86xl0luBalGfiEd6WbjVanfGKtF4MWOUFec+chez+FJMEP
-fufVC0qrKiJfNVMOpYvEd2SMgkSx1VymM8me6WXVDYsSipn2+1cm228ZEYAR9Emj
-oqQ4loaGLlP/3RaJbhBF7ruMJvXaZZQ4fZy74Z4tyRaaE1B659ua7Rjne7eNhQE8
-cR7cQDkxsNNN3LTbfLRwEc/gcDXWgLe5JlR/K4ZrdKc3lyivm+Uew3ubKs+fgkyY
-kHmuI3RJGIjpnsZW0/So+pHm3b/fo6lmlhTXtNNd+tkkKn2K9ttbXT3Sc13Pc+4w
-c4MLyUpdAoGBAOxTtGDpeF6U4s+GPuOCzHCwKQyzfOyCL/UTZv1UJX7Kn1FYycJH
-eOjtBRtS661cGkGd1MPfjdX2VV84AmBGDUmRqJ2KfTI1NjLAEJ115ANTpmSTm3lF
-UYncgbzl6aflLpjE1mgY+JTJykYeN5jhhO0r2bsdY7S+zaMCSI5NLuznAoGBANej
-aMtqLg2qKoq+fUkNBHHLXelR5dBXFnKgSrTj++H4yeW9pYbl8bK3gTF3I5+dSjHW
-DdC4+X09iPqY7p8vm8Gq/vgO8Bu+EnKNVr80PJSj7AzFGd6mk/CVrAzoY2XJWbAp
-YFwpo1WfHjS5wBfQzBlXY7kWVB7fj32kk14PYmUfAoGBAJXfd7NGHPoOfdCSGGv8
-VV7ZuQ6+/WiYH4XS6iuaI7VHFsZmAn3dCcbeGbD8Y04r7NLUH0yhB7g7YmTihk87
-3c1cPIy8eS1QJbEFsQPK8fFSKWH7YkwEM/O0DesX+5hodaaYnkiiHXNujYLuQuAH
-lV87wfcyajsEDjFkj1L/i9TdAoGBAKYfRUQv8HqmdU+doHb+iEYCHb75UMpHzQtR
-YTwpxoo3V5Kdnz9lNeYwaF7rIY59ZgMunEYHumw5U6V625nW228/hF0lZOR6cUu+
-hu2WGHWKMvdDgMJ+IcpeA8WN4cUwcN+9gHZ/vUzg4CxOTSYLvLBpGnIkOXnvUGPC
-vaTgxTSRAoGBAOHcuZ9hcUrPuVI1HVkjQQLu5mLZ3tz6linEbe/RCdJMK8JrRX4w
-ubB7gFclMYGbLlDNAJVYkydJaCy/2NAI3rfsOda+VmDqGx6z4BbSGceHhomyU1Oo
-1H7YaXsuzDkzl23HRsyp0pKJpTdghZdbVsGF8vAB8ygK3ehM233neSln
------END RSA PRIVATE KEY-----
diff --git a/3rdparty/asio/src/examples/cpp03/ssl/client.cpp b/3rdparty/asio/src/examples/cpp03/ssl/client.cpp
deleted file mode 100644
index 02a3ce8b3ca..00000000000
--- a/3rdparty/asio/src/examples/cpp03/ssl/client.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-//
-// client.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <cstdlib>
-#include <iostream>
-#include <boost/bind.hpp>
-#include "asio.hpp"
-#include "asio/ssl.hpp"
-
-enum { max_length = 1024 };
-
-class client
-{
-public:
- client(asio::io_context& io_context,
- asio::ssl::context& context,
- asio::ip::tcp::resolver::results_type endpoints)
- : socket_(io_context, context)
- {
- socket_.set_verify_mode(asio::ssl::verify_peer);
- socket_.set_verify_callback(
- boost::bind(&client::verify_certificate, this, _1, _2));
-
- asio::async_connect(socket_.lowest_layer(), endpoints,
- boost::bind(&client::handle_connect, this,
- asio::placeholders::error));
- }
-
- bool verify_certificate(bool preverified,
- asio::ssl::verify_context& ctx)
- {
- // The verify callback can be used to check whether the certificate that is
- // being presented is valid for the peer. For example, RFC 2818 describes
- // the steps involved in doing this for HTTPS. Consult the OpenSSL
- // documentation for more details. Note that the callback is called once
- // for each certificate in the certificate chain, starting from the root
- // certificate authority.
-
- // In this example we will simply print the certificate's subject name.
- char subject_name[256];
- X509* cert = X509_STORE_CTX_get_current_cert(ctx.native_handle());
- X509_NAME_oneline(X509_get_subject_name(cert), subject_name, 256);
- std::cout << "Verifying " << subject_name << "\n";
-
- return preverified;
- }
-
- void handle_connect(const asio::error_code& error)
- {
- if (!error)
- {
- socket_.async_handshake(asio::ssl::stream_base::client,
- boost::bind(&client::handle_handshake, this,
- asio::placeholders::error));
- }
- else
- {
- std::cout << "Connect failed: " << error.message() << "\n";
- }
- }
-
- void handle_handshake(const asio::error_code& error)
- {
- if (!error)
- {
- std::cout << "Enter message: ";
- std::cin.getline(request_, max_length);
- size_t request_length = strlen(request_);
-
- asio::async_write(socket_,
- asio::buffer(request_, request_length),
- boost::bind(&client::handle_write, this,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
- else
- {
- std::cout << "Handshake failed: " << error.message() << "\n";
- }
- }
-
- void handle_write(const asio::error_code& error,
- size_t bytes_transferred)
- {
- if (!error)
- {
- asio::async_read(socket_,
- asio::buffer(reply_, bytes_transferred),
- boost::bind(&client::handle_read, this,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
- else
- {
- std::cout << "Write failed: " << error.message() << "\n";
- }
- }
-
- void handle_read(const asio::error_code& error,
- size_t bytes_transferred)
- {
- if (!error)
- {
- std::cout << "Reply: ";
- std::cout.write(reply_, bytes_transferred);
- std::cout << "\n";
- }
- else
- {
- std::cout << "Read failed: " << error.message() << "\n";
- }
- }
-
-private:
- asio::ssl::stream<asio::ip::tcp::socket> socket_;
- char request_[max_length];
- char reply_[max_length];
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 3)
- {
- std::cerr << "Usage: client <host> <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- asio::ip::tcp::resolver resolver(io_context);
- asio::ip::tcp::resolver::results_type endpoints =
- resolver.resolve(argv[1], argv[2]);
-
- asio::ssl::context ctx(asio::ssl::context::sslv23);
- ctx.load_verify_file("ca.pem");
-
- client c(io_context, ctx, endpoints);
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/ssl/dh2048.pem b/3rdparty/asio/src/examples/cpp03/ssl/dh2048.pem
deleted file mode 100644
index 07250cca62f..00000000000
--- a/3rdparty/asio/src/examples/cpp03/ssl/dh2048.pem
+++ /dev/null
@@ -1,8 +0,0 @@
------BEGIN DH PARAMETERS-----
-MIIBCAKCAQEAyNnxZSYc6J89mDNnqOH8bnwBiAJxcaUS3PkIEcwW8D9o2BlNq6EO
-XKMIbdfwPFZi80GMpNu3YP2A2B42sAHmb7w7ZA92QDv3JjqzR0QuS/CkMv4CEjha
-QBFwBDDWnnHBSj4w/t54ii0SH34mWcjBItI2eMtnM9J6fnvNiWqJxdt4iA4mZjZD
-qZTjIRyjgKAevzkqAlBqQRoVUUgu+9Cf29wXjVl3bE+0VU5CdFeyT+Y9yunz88mq
-rGyx1uPt+zbIfxuNLH+coY67y1ht7iZEL5WLd3wGCycRT+lYy2AL/rxGBPxStFIT
-2bOkQao6sAfb4UdGEUlwHUXZrAV51oM30wIBAg==
------END DH PARAMETERS-----
diff --git a/3rdparty/asio/src/examples/cpp03/ssl/server.cpp b/3rdparty/asio/src/examples/cpp03/ssl/server.cpp
deleted file mode 100644
index ad3d73a2c44..00000000000
--- a/3rdparty/asio/src/examples/cpp03/ssl/server.cpp
+++ /dev/null
@@ -1,170 +0,0 @@
-//
-// server.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <cstdlib>
-#include <iostream>
-#include <boost/bind.hpp>
-#include "asio.hpp"
-#include "asio/ssl.hpp"
-
-typedef asio::ssl::stream<asio::ip::tcp::socket> ssl_socket;
-
-class session
-{
-public:
- session(asio::io_context& io_context,
- asio::ssl::context& context)
- : socket_(io_context, context)
- {
- }
-
- ssl_socket::lowest_layer_type& socket()
- {
- return socket_.lowest_layer();
- }
-
- void start()
- {
- socket_.async_handshake(asio::ssl::stream_base::server,
- boost::bind(&session::handle_handshake, this,
- asio::placeholders::error));
- }
-
- void handle_handshake(const asio::error_code& error)
- {
- if (!error)
- {
- socket_.async_read_some(asio::buffer(data_, max_length),
- boost::bind(&session::handle_read, this,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
- else
- {
- delete this;
- }
- }
-
- void handle_read(const asio::error_code& error,
- size_t bytes_transferred)
- {
- if (!error)
- {
- asio::async_write(socket_,
- asio::buffer(data_, bytes_transferred),
- boost::bind(&session::handle_write, this,
- asio::placeholders::error));
- }
- else
- {
- delete this;
- }
- }
-
- void handle_write(const asio::error_code& error)
- {
- if (!error)
- {
- socket_.async_read_some(asio::buffer(data_, max_length),
- boost::bind(&session::handle_read, this,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
- else
- {
- delete this;
- }
- }
-
-private:
- ssl_socket socket_;
- enum { max_length = 1024 };
- char data_[max_length];
-};
-
-class server
-{
-public:
- server(asio::io_context& io_context, unsigned short port)
- : io_context_(io_context),
- acceptor_(io_context,
- asio::ip::tcp::endpoint(asio::ip::tcp::v4(), port)),
- context_(asio::ssl::context::sslv23)
- {
- context_.set_options(
- asio::ssl::context::default_workarounds
- | asio::ssl::context::no_sslv2
- | asio::ssl::context::single_dh_use);
- context_.set_password_callback(boost::bind(&server::get_password, this));
- context_.use_certificate_chain_file("server.pem");
- context_.use_private_key_file("server.pem", asio::ssl::context::pem);
- context_.use_tmp_dh_file("dh2048.pem");
-
- start_accept();
- }
-
- std::string get_password() const
- {
- return "test";
- }
-
- void start_accept()
- {
- session* new_session = new session(io_context_, context_);
- acceptor_.async_accept(new_session->socket(),
- boost::bind(&server::handle_accept, this, new_session,
- asio::placeholders::error));
- }
-
- void handle_accept(session* new_session,
- const asio::error_code& error)
- {
- if (!error)
- {
- new_session->start();
- }
- else
- {
- delete new_session;
- }
-
- start_accept();
- }
-
-private:
- asio::io_context& io_context_;
- asio::ip::tcp::acceptor acceptor_;
- asio::ssl::context context_;
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: server <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- using namespace std; // For atoi.
- server s(io_context, atoi(argv[1]));
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/ssl/server.pem b/3rdparty/asio/src/examples/cpp03/ssl/server.pem
deleted file mode 100644
index 37ea6e26715..00000000000
--- a/3rdparty/asio/src/examples/cpp03/ssl/server.pem
+++ /dev/null
@@ -1,71 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDAzCCAesCCQD9QcRiWk0y9TANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJB
-VTEMMAoGA1UECBMDTlNXMQ8wDQYDVQQHEwZTeWRuZXkxDTALBgNVBAoTBGFzaW8w
-HhcNMTUxMTE4MjIzNzMxWhcNMjAxMTE2MjIzNzMxWjBMMQswCQYDVQQGEwJBVTEM
-MAoGA1UECBMDTlNXMQ8wDQYDVQQHEwZTeWRuZXkxDTALBgNVBAoTBGFzaW8xDzAN
-BgNVBAsTBnNlcnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALr0
-+NXSklsGJR7HYHP/H4V5+KpYrmFKva/K7iiqi+XyWEjGnj+/iImJW26phhg9GouN
-JJxdrP7/0LwpMsEC/9v09dMNAEewtYhPgD4kiUH/E/79wVmayMZZZGrpF9Rw+wWv
-q58y3L1wKge3qilX6slVDdNhqU3vBiMKEJfsjE4PKcEVjPCjVJG2562eHK9FxyjQ
-DykyH61lQKBQOiElilPQKzAO7U36yTvs+chWuUfK47B8EC+PJ5KcLEppli4ljlwE
-w01HnGxwvjDLobKm2jL6CWi3aYGWudyTsNAd7YC5C7psktBypQLBcfp7uUrrR5Bb
-PEjFHJUWIlyoYvm2OjMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAtceVW6tixFsB
-ZRhjL5aRCcbx2iMwEXd54lcP6BWe1qOcDPHoSYI1zvvGzohbEvBfqUv78S9MtzaT
-gMe5rIU9M1ZM09PyaM6ZutGpKHE8L4qcOslTt41GQFsSqPFdcbgSV20MvBzjGayR
-AI/WV0avW3oasdetJPZCR7bRbCbMbWTgclUfv5F25ENcR+BhNuilfL15owL0s4sS
-Wb4jOOHhXV9iXeS2dH0snFqv4BmQ9ZoA7zbM9lG3EU5DuxHESYkCnzJyEqqY3vWv
-PFRViCxLp5LQLmkTQ3dglVQA4x6ZaonaewdPtdhjkLUuIqDvQx5+kIaOELbSws+c
-bREYlnGrFw==
------END CERTIFICATE-----
------BEGIN RSA PRIVATE KEY-----
-Proc-Type: 4,ENCRYPTED
-DEK-Info: AES-256-CBC,D459676347D389E9135496D8AAFA7953
-
-wbrjxr9NHur8kgxDsgXOY9qFGKpONIQLxkuahUrDD/H+s/l7ugsLWOPsOXbjNL/7
-QYUBAx85HKm9D8BQ5g78Y82qfArap3/3IIuysDfQDh4fQodhVtmGTFiCOvudlGEp
-lq1niQRLThlxeRoFphH8KKiOTO9a/d8tdL7zRmiFwnVnhK4014mgVmgcSefA1AF5
-RbJAeMclUKddG6ltQK00ptg84CDXiMWQXFBGGmQ1av2lyFzC+xLP+qDqZAYTM9lZ
-NFRo2oEZP1ozfOVNSbXTanJgZ0DSSmhGE1PcVrHSeE/v+k1kPh3oVKi9GV51kIDC
-Zd9f/XltuDOzy1Ybn6gRy4nzNpzcwjSCIHEdSD5nxU5JfHfQ3OtnsEab7qf989iP
-s2LbCSp5uGTMvfesMIkixIZAQp2FeahZTAgU2Vx+wi5Kks68rOqeywEfzACL/Um5
-7XZu8gDs4MgRRWnxK1BbJDPifICLvSJZvgB9FKX/hk4FHFF+MtcrkalehCuLooDV
-3rfHNvRSbg7J97XQ3QC+k9ZDaumpy6n+LhaVv7BIJRBnBBtZ5Eg3DmPg6flqaHAU
-Y/8d82wb/pCmbvR3B1/Ebgs84DPJ+uZnY9M5Iwx19oqlVSR2ts/Tx619LGAm+BiQ
-7YDoC4CFmpAA8Uw0xnUbNgx94NdNmlnLeLtS50b0XlWpHKbVzmVbNYEjY6NHMlLt
-aqxWHTYTa7g/c1bg2/nxF1Lbfu5VSTROGBUuer1c3yzVuyBrjcX92Jp4BJH78qOp
-N6lY6MnH4HYRXHjzlt/S0ZzO0faPPe18Q8SWvnDVuE3fYzzL772B56d2t8eodc+/
-t6M3qJ60eXdsmgYOaPRLRUovN2xT2UUr0+biuguHyqfaVfcEU/adw+b9oUVE+5Nw
-nZHI5qhPnhLxChyZqbBl68zMUyKlfff4OyLvRGpfcHwBw6DTGjduB+DDsqqkcIB9
-2VL6nps7ZVCwMPI18siUd6cttEOf6ZXrVqHg9wfDvJOlh2NNKNLxSAFubHc90Jlj
-KejrWenXo2w6YkSUeTV4t4cWu7U8rXIkTJXDl1S6NO8DWqNDo5KjgJ2SK5NlSOJ7
-jgECn390ooneJOxxytPVQO2xppXQZZS65RHrvhB+ss5xUknly9q+ICyt6xTR9nqA
-PKkeSE6qVY0J4JgFXpkgQxgwMnjSED3LKr3jlz28pr5cC6tsc5SSlekHjT2fcSrX
-uccaVahaJRigf+q+4XzmJtdwbZU+YWGZRVMlQLA5yzPHQHDYkPpOeYU4WReND8S4
-TZRkPHaxOZ2lKQwJB93V8Vbt2MvwRy392452a33S4TcQLaWzoOljXjmZjrp2rvRz
-prBaNe8LnO4V8Oliv+H+E0UWiWFDuI+HBy4X4O9plsbw/gk64Phl9qLiBwaX/AIR
-66FXvC/czABo9oSt2jekcMtJofYr8Gr2bsJlt5ZX+GEOxz4jMv7xvz5/L3W7jVav
-pHGIv4xfN9FrXzL47O7UuUF9xZg4Rp/fxwpgEDNZmX/3DnP0ewZQUcgUX0pdqNGQ
-YVqJXcRF7KqG2NSQFuwPESZQnxU0WzSgRyUae7xg1WKfSuN8NVAzKhOgeqlD2IAo
------END RSA PRIVATE KEY-----
------BEGIN CERTIFICATE-----
-MIIDlzCCAn+gAwIBAgIJAMJYU3U6A0IRMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNV
-BAYTAkFVMQwwCgYDVQQIEwNOU1cxDzANBgNVBAcTBlN5ZG5leTENMAsGA1UEChME
-YXNpbzAeFw0xNTExMTgyMjMzNDhaFw0yMDExMTYyMjMzNDhaMDsxCzAJBgNVBAYT
-AkFVMQwwCgYDVQQIEwNOU1cxDzANBgNVBAcTBlN5ZG5leTENMAsGA1UEChMEYXNp
-bzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMcRJocHdVMdLUJ/pypY
-QVSTC0t3IIgjwjazrK3kAaoIMvzPmDFxEXWcDx+nyz8kQ/E38Ir/ef2BCNGci5hu
-wkfMSuMoW9l2N4hx3QCcF46tTDEZztFxWAH7QbE2wYMlMgKZSxWimNfq0YjxEEXb
-QM0lGPLFh7Xoko29H0F3LKaaQV9u/vop3Hs0h12HeWlY4PiLp7QQTNGqbWcXycA0
-NZ/fyismireyEvPAgo6L8iXuAi7g0TVKVNlrticGGjMcMq6IMvxzEpSMkuMQ5rWj
-pZjWOoBjSYBuXdblcBRvXhOr2Ws8jJLMZfehKq9q1reQfoGV6xMnbwmumSXbWRWT
-0vkCAwEAAaOBnTCBmjAdBgNVHQ4EFgQUK/Zv/AVtfIeucJw8VEtux1dhI1YwawYD
-VR0jBGQwYoAUK/Zv/AVtfIeucJw8VEtux1dhI1ahP6Q9MDsxCzAJBgNVBAYTAkFV
-MQwwCgYDVQQIEwNOU1cxDzANBgNVBAcTBlN5ZG5leTENMAsGA1UEChMEYXNpb4IJ
-AMJYU3U6A0IRMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBABLYXimq
-v/HLyIJi7Xn8AJUsICj8LKF/J24nwwiF+ibf7UkoChJURs4nN78bod/lpDVPTEVl
-gTBdV/vBJs416sCEFfsGjqB9OBYj4gb0VaJDsQd0+NMvXp0faKv2y9wgScxG9/cg
-aM7eRmyfMn1qjb6tpNxVOPpe/nFi8Vx/1orejBRaZr4zF5TkoPepfwLWQeXDUIdE
-+QHZ60jZAkR5RXTVU4u3kOKcJs839pmJYyxM4H2VxpR18vy4/YdIVWkREIUM2OgT
-5iznIQIIgR56QRGP85uef+I6n0BHzrBk6du69bkQFxrFjLVGlal4bIQqSg4KGWgx
-dEdymMWzmMxpO9s=
------END CERTIFICATE-----
diff --git a/3rdparty/asio/src/examples/cpp03/timeouts/.gitignore b/3rdparty/asio/src/examples/cpp03/timeouts/.gitignore
deleted file mode 100644
index dda7f39c3c2..00000000000
--- a/3rdparty/asio/src/examples/cpp03/timeouts/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*_client
-server
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/timeouts/async_tcp_client.cpp b/3rdparty/asio/src/examples/cpp03/timeouts/async_tcp_client.cpp
deleted file mode 100644
index 98b90e9a1b3..00000000000
--- a/3rdparty/asio/src/examples/cpp03/timeouts/async_tcp_client.cpp
+++ /dev/null
@@ -1,308 +0,0 @@
-//
-// async_tcp_client.cpp
-// ~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "asio/deadline_timer.hpp"
-#include "asio/io_context.hpp"
-#include "asio/ip/tcp.hpp"
-#include "asio/read_until.hpp"
-#include "asio/streambuf.hpp"
-#include "asio/write.hpp"
-#include <boost/bind.hpp>
-#include <iostream>
-
-using asio::deadline_timer;
-using asio::ip::tcp;
-
-//
-// This class manages socket timeouts by applying the concept of a deadline.
-// Some asynchronous operations are given deadlines by which they must complete.
-// Deadlines are enforced by an "actor" that persists for the lifetime of the
-// client object:
-//
-// +----------------+
-// | |
-// | check_deadline |<---+
-// | | |
-// +----------------+ | async_wait()
-// | |
-// +---------+
-//
-// If the deadline actor determines that the deadline has expired, the socket
-// is closed and any outstanding operations are consequently cancelled.
-//
-// Connection establishment involves trying each endpoint in turn until a
-// connection is successful, or the available endpoints are exhausted. If the
-// deadline actor closes the socket, the connect actor is woken up and moves to
-// the next endpoint.
-//
-// +---------------+
-// | |
-// | start_connect |<---+
-// | | |
-// +---------------+ |
-// | |
-// async_- | +----------------+
-// connect() | | |
-// +--->| handle_connect |
-// | |
-// +----------------+
-// :
-// Once a connection is :
-// made, the connect :
-// actor forks in two - :
-// :
-// an actor for reading : and an actor for
-// inbound messages: : sending heartbeats:
-// :
-// +------------+ : +-------------+
-// | |<- - - - -+- - - - ->| |
-// | start_read | | start_write |<---+
-// | |<---+ | | |
-// +------------+ | +-------------+ | async_wait()
-// | | | |
-// async_- | +-------------+ async_- | +--------------+
-// read_- | | | write() | | |
-// until() +--->| handle_read | +--->| handle_write |
-// | | | |
-// +-------------+ +--------------+
-//
-// The input actor reads messages from the socket, where messages are delimited
-// by the newline character. The deadline for a complete message is 30 seconds.
-//
-// The heartbeat actor sends a heartbeat (a message that consists of a single
-// newline character) every 10 seconds. In this example, no deadline is applied
-// message sending.
-//
-class client
-{
-public:
- client(asio::io_context& io_context)
- : stopped_(false),
- socket_(io_context),
- deadline_(io_context),
- heartbeat_timer_(io_context)
- {
- }
-
- // Called by the user of the client class to initiate the connection process.
- // The endpoints will have been obtained using a tcp::resolver.
- void start(tcp::resolver::results_type endpoints)
- {
- // Start the connect actor.
- endpoints_ = endpoints;
- start_connect(endpoints_.begin());
-
- // Start the deadline actor. You will note that we're not setting any
- // particular deadline here. Instead, the connect and input actors will
- // update the deadline prior to each asynchronous operation.
- deadline_.async_wait(boost::bind(&client::check_deadline, this));
- }
-
- // This function terminates all the actors to shut down the connection. It
- // may be called by the user of the client class, or by the class itself in
- // response to graceful termination or an unrecoverable error.
- void stop()
- {
- stopped_ = true;
- asio::error_code ignored_ec;
- socket_.close(ignored_ec);
- deadline_.cancel();
- heartbeat_timer_.cancel();
- }
-
-private:
- void start_connect(tcp::resolver::results_type::iterator endpoint_iter)
- {
- if (endpoint_iter != endpoints_.end())
- {
- std::cout << "Trying " << endpoint_iter->endpoint() << "...\n";
-
- // Set a deadline for the connect operation.
- deadline_.expires_from_now(boost::posix_time::seconds(60));
-
- // Start the asynchronous connect operation.
- socket_.async_connect(endpoint_iter->endpoint(),
- boost::bind(&client::handle_connect,
- this, _1, endpoint_iter));
- }
- else
- {
- // There are no more endpoints to try. Shut down the client.
- stop();
- }
- }
-
- void handle_connect(const asio::error_code& ec,
- tcp::resolver::results_type::iterator endpoint_iter)
- {
- if (stopped_)
- return;
-
- // The async_connect() function automatically opens the socket at the start
- // of the asynchronous operation. If the socket is closed at this time then
- // the timeout handler must have run first.
- if (!socket_.is_open())
- {
- std::cout << "Connect timed out\n";
-
- // Try the next available endpoint.
- start_connect(++endpoint_iter);
- }
-
- // Check if the connect operation failed before the deadline expired.
- else if (ec)
- {
- std::cout << "Connect error: " << ec.message() << "\n";
-
- // We need to close the socket used in the previous connection attempt
- // before starting a new one.
- socket_.close();
-
- // Try the next available endpoint.
- start_connect(++endpoint_iter);
- }
-
- // Otherwise we have successfully established a connection.
- else
- {
- std::cout << "Connected to " << endpoint_iter->endpoint() << "\n";
-
- // Start the input actor.
- start_read();
-
- // Start the heartbeat actor.
- start_write();
- }
- }
-
- void start_read()
- {
- // Set a deadline for the read operation.
- deadline_.expires_from_now(boost::posix_time::seconds(30));
-
- // Start an asynchronous operation to read a newline-delimited message.
- asio::async_read_until(socket_, input_buffer_, '\n',
- boost::bind(&client::handle_read, this, _1));
- }
-
- void handle_read(const asio::error_code& ec)
- {
- if (stopped_)
- return;
-
- if (!ec)
- {
- // Extract the newline-delimited message from the buffer.
- std::string line;
- std::istream is(&input_buffer_);
- std::getline(is, line);
-
- // Empty messages are heartbeats and so ignored.
- if (!line.empty())
- {
- std::cout << "Received: " << line << "\n";
- }
-
- start_read();
- }
- else
- {
- std::cout << "Error on receive: " << ec.message() << "\n";
-
- stop();
- }
- }
-
- void start_write()
- {
- if (stopped_)
- return;
-
- // Start an asynchronous operation to send a heartbeat message.
- asio::async_write(socket_, asio::buffer("\n", 1),
- boost::bind(&client::handle_write, this, _1));
- }
-
- void handle_write(const asio::error_code& ec)
- {
- if (stopped_)
- return;
-
- if (!ec)
- {
- // Wait 10 seconds before sending the next heartbeat.
- heartbeat_timer_.expires_from_now(boost::posix_time::seconds(10));
- heartbeat_timer_.async_wait(boost::bind(&client::start_write, this));
- }
- else
- {
- std::cout << "Error on heartbeat: " << ec.message() << "\n";
-
- stop();
- }
- }
-
- void check_deadline()
- {
- if (stopped_)
- return;
-
- // Check whether the deadline has passed. We compare the deadline against
- // the current time since a new asynchronous operation may have moved the
- // deadline before this actor had a chance to run.
- if (deadline_.expires_at() <= deadline_timer::traits_type::now())
- {
- // The deadline has passed. The socket is closed so that any outstanding
- // asynchronous operations are cancelled.
- socket_.close();
-
- // There is no longer an active deadline. The expiry is set to positive
- // infinity so that the actor takes no action until a new deadline is set.
- deadline_.expires_at(boost::posix_time::pos_infin);
- }
-
- // Put the actor back to sleep.
- deadline_.async_wait(boost::bind(&client::check_deadline, this));
- }
-
-private:
- bool stopped_;
- tcp::resolver::results_type endpoints_;
- tcp::socket socket_;
- asio::streambuf input_buffer_;
- deadline_timer deadline_;
- deadline_timer heartbeat_timer_;
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 3)
- {
- std::cerr << "Usage: client <host> <port>\n";
- return 1;
- }
-
- asio::io_context io_context;
- tcp::resolver r(io_context);
- client c(io_context);
-
- c.start(r.resolve(argv[1], argv[2]));
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/timeouts/blocking_tcp_client.cpp b/3rdparty/asio/src/examples/cpp03/timeouts/blocking_tcp_client.cpp
deleted file mode 100644
index 69d467af1bb..00000000000
--- a/3rdparty/asio/src/examples/cpp03/timeouts/blocking_tcp_client.cpp
+++ /dev/null
@@ -1,242 +0,0 @@
-//
-// blocking_tcp_client.cpp
-// ~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "asio/connect.hpp"
-#include "asio/deadline_timer.hpp"
-#include "asio/io_context.hpp"
-#include "asio/ip/tcp.hpp"
-#include "asio/read_until.hpp"
-#include "asio/streambuf.hpp"
-#include "asio/system_error.hpp"
-#include "asio/write.hpp"
-#include "asio/thread.hpp"
-#include <cstdlib>
-#include <iostream>
-#include <string>
-#include <boost/lambda/bind.hpp>
-#include <boost/lambda/lambda.hpp>
-
-using asio::deadline_timer;
-using asio::ip::tcp;
-using boost::lambda::bind;
-using boost::lambda::var;
-using boost::lambda::_1;
-
-//----------------------------------------------------------------------
-
-//
-// This class manages socket timeouts by applying the concept of a deadline.
-// Each asynchronous operation is given a deadline by which it must complete.
-// Deadlines are enforced by an "actor" that persists for the lifetime of the
-// client object:
-//
-// +----------------+
-// | |
-// | check_deadline |<---+
-// | | |
-// +----------------+ | async_wait()
-// | |
-// +---------+
-//
-// If the actor determines that the deadline has expired, the socket is closed
-// and any outstanding operations are consequently cancelled. The socket
-// operations themselves use boost::lambda function objects as completion
-// handlers. For a given socket operation, the client object runs the
-// io_context to block thread execution until the actor completes.
-//
-class client
-{
-public:
- client()
- : socket_(io_context_),
- deadline_(io_context_)
- {
- // No deadline is required until the first socket operation is started. We
- // set the deadline to positive infinity so that the actor takes no action
- // until a specific deadline is set.
- deadline_.expires_at(boost::posix_time::pos_infin);
-
- // Start the persistent actor that checks for deadline expiry.
- check_deadline();
- }
-
- void connect(const std::string& host, const std::string& service,
- boost::posix_time::time_duration timeout)
- {
- // Resolve the host name and service to a list of endpoints.
- tcp::resolver::results_type endpoints =
- tcp::resolver(io_context_).resolve(host, service);
-
- // Set a deadline for the asynchronous operation. As a host name may
- // resolve to multiple endpoints, this function uses the composed operation
- // async_connect. The deadline applies to the entire operation, rather than
- // individual connection attempts.
- deadline_.expires_from_now(timeout);
-
- // Set up the variable that receives the result of the asynchronous
- // operation. The error code is set to would_block to signal that the
- // operation is incomplete. Asio guarantees that its asynchronous
- // operations will never fail with would_block, so any other value in
- // ec indicates completion.
- asio::error_code ec = asio::error::would_block;
-
- // Start the asynchronous operation itself. The boost::lambda function
- // object is used as a callback and will update the ec variable when the
- // operation completes. The blocking_udp_client.cpp example shows how you
- // can use boost::bind rather than boost::lambda.
- asio::async_connect(socket_, endpoints, var(ec) = _1);
-
- // Block until the asynchronous operation has completed.
- do io_context_.run_one(); while (ec == asio::error::would_block);
-
- // Determine whether a connection was successfully established. The
- // deadline actor may have had a chance to run and close our socket, even
- // though the connect operation notionally succeeded. Therefore we must
- // check whether the socket is still open before deciding if we succeeded
- // or failed.
- if (ec || !socket_.is_open())
- throw asio::system_error(
- ec ? ec : asio::error::operation_aborted);
- }
-
- std::string read_line(boost::posix_time::time_duration timeout)
- {
- // Set a deadline for the asynchronous operation. Since this function uses
- // a composed operation (async_read_until), the deadline applies to the
- // entire operation, rather than individual reads from the socket.
- deadline_.expires_from_now(timeout);
-
- // Set up the variable that receives the result of the asynchronous
- // operation. The error code is set to would_block to signal that the
- // operation is incomplete. Asio guarantees that its asynchronous
- // operations will never fail with would_block, so any other value in
- // ec indicates completion.
- asio::error_code ec = asio::error::would_block;
-
- // Start the asynchronous operation itself. The boost::lambda function
- // object is used as a callback and will update the ec variable when the
- // operation completes. The blocking_udp_client.cpp example shows how you
- // can use boost::bind rather than boost::lambda.
- asio::async_read_until(socket_, input_buffer_, '\n', var(ec) = _1);
-
- // Block until the asynchronous operation has completed.
- do io_context_.run_one(); while (ec == asio::error::would_block);
-
- if (ec)
- throw asio::system_error(ec);
-
- std::string line;
- std::istream is(&input_buffer_);
- std::getline(is, line);
- return line;
- }
-
- void write_line(const std::string& line,
- boost::posix_time::time_duration timeout)
- {
- std::string data = line + "\n";
-
- // Set a deadline for the asynchronous operation. Since this function uses
- // a composed operation (async_write), the deadline applies to the entire
- // operation, rather than individual writes to the socket.
- deadline_.expires_from_now(timeout);
-
- // Set up the variable that receives the result of the asynchronous
- // operation. The error code is set to would_block to signal that the
- // operation is incomplete. Asio guarantees that its asynchronous
- // operations will never fail with would_block, so any other value in
- // ec indicates completion.
- asio::error_code ec = asio::error::would_block;
-
- // Start the asynchronous operation itself. The boost::lambda function
- // object is used as a callback and will update the ec variable when the
- // operation completes. The blocking_udp_client.cpp example shows how you
- // can use boost::bind rather than boost::lambda.
- asio::async_write(socket_, asio::buffer(data), var(ec) = _1);
-
- // Block until the asynchronous operation has completed.
- do io_context_.run_one(); while (ec == asio::error::would_block);
-
- if (ec)
- throw asio::system_error(ec);
- }
-
-private:
- void check_deadline()
- {
- // Check whether the deadline has passed. We compare the deadline against
- // the current time since a new asynchronous operation may have moved the
- // deadline before this actor had a chance to run.
- if (deadline_.expires_at() <= deadline_timer::traits_type::now())
- {
- // The deadline has passed. The socket is closed so that any outstanding
- // asynchronous operations are cancelled. This allows the blocked
- // connect(), read_line() or write_line() functions to return.
- asio::error_code ignored_ec;
- socket_.close(ignored_ec);
-
- // There is no longer an active deadline. The expiry is set to positive
- // infinity so that the actor takes no action until a new deadline is set.
- deadline_.expires_at(boost::posix_time::pos_infin);
- }
-
- // Put the actor back to sleep.
- deadline_.async_wait(bind(&client::check_deadline, this));
- }
-
- asio::io_context io_context_;
- tcp::socket socket_;
- deadline_timer deadline_;
- asio::streambuf input_buffer_;
-};
-
-//----------------------------------------------------------------------
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 4)
- {
- std::cerr << "Usage: blocking_tcp <host> <port> <message>\n";
- return 1;
- }
-
- client c;
- c.connect(argv[1], argv[2], boost::posix_time::seconds(10));
-
- boost::posix_time::ptime time_sent =
- boost::posix_time::microsec_clock::universal_time();
-
- c.write_line(argv[3], boost::posix_time::seconds(10));
-
- for (;;)
- {
- std::string line = c.read_line(boost::posix_time::seconds(10));
-
- // Keep going until we get back the line that was sent.
- if (line == argv[3])
- break;
- }
-
- boost::posix_time::ptime time_received =
- boost::posix_time::microsec_clock::universal_time();
-
- std::cout << "Round trip time: ";
- std::cout << (time_received - time_sent).total_microseconds();
- std::cout << " microseconds\n";
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/timeouts/blocking_udp_client.cpp b/3rdparty/asio/src/examples/cpp03/timeouts/blocking_udp_client.cpp
deleted file mode 100644
index fd2da7640b8..00000000000
--- a/3rdparty/asio/src/examples/cpp03/timeouts/blocking_udp_client.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-//
-// blocking_udp_client.cpp
-// ~~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include "asio/deadline_timer.hpp"
-#include "asio/io_context.hpp"
-#include "asio/ip/udp.hpp"
-#include <cstdlib>
-#include <boost/bind.hpp>
-#include <boost/date_time/posix_time/posix_time_types.hpp>
-#include <iostream>
-
-using asio::deadline_timer;
-using asio::ip::udp;
-
-//----------------------------------------------------------------------
-
-//
-// This class manages socket timeouts by applying the concept of a deadline.
-// Each asynchronous operation is given a deadline by which it must complete.
-// Deadlines are enforced by an "actor" that persists for the lifetime of the
-// client object:
-//
-// +----------------+
-// | |
-// | check_deadline |<---+
-// | | |
-// +----------------+ | async_wait()
-// | |
-// +---------+
-//
-// If the actor determines that the deadline has expired, any outstanding
-// socket operations are cancelled. The socket operations themselves are
-// implemented as transient actors:
-//
-// +---------------+
-// | |
-// | receive |
-// | |
-// +---------------+
-// |
-// async_- | +----------------+
-// receive() | | |
-// +--->| handle_receive |
-// | |
-// +----------------+
-//
-// The client object runs the io_context to block thread execution until the
-// actor completes.
-//
-class client
-{
-public:
- client(const udp::endpoint& listen_endpoint)
- : socket_(io_context_, listen_endpoint),
- deadline_(io_context_)
- {
- // No deadline is required until the first socket operation is started. We
- // set the deadline to positive infinity so that the actor takes no action
- // until a specific deadline is set.
- deadline_.expires_at(boost::posix_time::pos_infin);
-
- // Start the persistent actor that checks for deadline expiry.
- check_deadline();
- }
-
- std::size_t receive(const asio::mutable_buffer& buffer,
- boost::posix_time::time_duration timeout, asio::error_code& ec)
- {
- // Set a deadline for the asynchronous operation.
- deadline_.expires_from_now(timeout);
-
- // Set up the variables that receive the result of the asynchronous
- // operation. The error code is set to would_block to signal that the
- // operation is incomplete. Asio guarantees that its asynchronous
- // operations will never fail with would_block, so any other value in
- // ec indicates completion.
- ec = asio::error::would_block;
- std::size_t length = 0;
-
- // Start the asynchronous operation itself. The handle_receive function
- // used as a callback will update the ec and length variables.
- socket_.async_receive(asio::buffer(buffer),
- boost::bind(&client::handle_receive, _1, _2, &ec, &length));
-
- // Block until the asynchronous operation has completed.
- do io_context_.run_one(); while (ec == asio::error::would_block);
-
- return length;
- }
-
-private:
- void check_deadline()
- {
- // Check whether the deadline has passed. We compare the deadline against
- // the current time since a new asynchronous operation may have moved the
- // deadline before this actor had a chance to run.
- if (deadline_.expires_at() <= deadline_timer::traits_type::now())
- {
- // The deadline has passed. The outstanding asynchronous operation needs
- // to be cancelled so that the blocked receive() function will return.
- //
- // Please note that cancel() has portability issues on some versions of
- // Microsoft Windows, and it may be necessary to use close() instead.
- // Consult the documentation for cancel() for further information.
- socket_.cancel();
-
- // There is no longer an active deadline. The expiry is set to positive
- // infinity so that the actor takes no action until a new deadline is set.
- deadline_.expires_at(boost::posix_time::pos_infin);
- }
-
- // Put the actor back to sleep.
- deadline_.async_wait(boost::bind(&client::check_deadline, this));
- }
-
- static void handle_receive(
- const asio::error_code& ec, std::size_t length,
- asio::error_code* out_ec, std::size_t* out_length)
- {
- *out_ec = ec;
- *out_length = length;
- }
-
-private:
- asio::io_context io_context_;
- udp::socket socket_;
- deadline_timer deadline_;
-};
-
-//----------------------------------------------------------------------
-
-int main(int argc, char* argv[])
-{
- try
- {
- using namespace std; // For atoi.
-
- if (argc != 3)
- {
- std::cerr << "Usage: blocking_udp_timeout <listen_addr> <listen_port>\n";
- return 1;
- }
-
- udp::endpoint listen_endpoint(
- asio::ip::make_address(argv[1]),
- std::atoi(argv[2]));
-
- client c(listen_endpoint);
-
- for (;;)
- {
- char data[1024];
- asio::error_code ec;
- std::size_t n = c.receive(asio::buffer(data),
- boost::posix_time::seconds(10), ec);
-
- if (ec)
- {
- std::cout << "Receive error: " << ec.message() << "\n";
- }
- else
- {
- std::cout << "Received: ";
- std::cout.write(data, n);
- std::cout << "\n";
- }
- }
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/timeouts/server.cpp b/3rdparty/asio/src/examples/cpp03/timeouts/server.cpp
deleted file mode 100644
index 212cd90d820..00000000000
--- a/3rdparty/asio/src/examples/cpp03/timeouts/server.cpp
+++ /dev/null
@@ -1,427 +0,0 @@
-//
-// server.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <algorithm>
-#include <cstdlib>
-#include <deque>
-#include <iostream>
-#include <set>
-#include <boost/bind.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include "asio/deadline_timer.hpp"
-#include "asio/io_context.hpp"
-#include "asio/ip/tcp.hpp"
-#include "asio/ip/udp.hpp"
-#include "asio/read_until.hpp"
-#include "asio/streambuf.hpp"
-#include "asio/write.hpp"
-
-using asio::deadline_timer;
-using asio::ip::tcp;
-using asio::ip::udp;
-
-//----------------------------------------------------------------------
-
-class subscriber
-{
-public:
- virtual ~subscriber() {}
- virtual void deliver(const std::string& msg) = 0;
-};
-
-typedef boost::shared_ptr<subscriber> subscriber_ptr;
-
-//----------------------------------------------------------------------
-
-class channel
-{
-public:
- void join(subscriber_ptr subscriber)
- {
- subscribers_.insert(subscriber);
- }
-
- void leave(subscriber_ptr subscriber)
- {
- subscribers_.erase(subscriber);
- }
-
- void deliver(const std::string& msg)
- {
- std::for_each(subscribers_.begin(), subscribers_.end(),
- boost::bind(&subscriber::deliver, _1, boost::ref(msg)));
- }
-
-private:
- std::set<subscriber_ptr> subscribers_;
-};
-
-//----------------------------------------------------------------------
-
-//
-// This class manages socket timeouts by applying the concept of a deadline.
-// Some asynchronous operations are given deadlines by which they must complete.
-// Deadlines are enforced by two "actors" that persist for the lifetime of the
-// session object, one for input and one for output:
-//
-// +----------------+ +----------------+
-// | | | |
-// | check_deadline |<---+ | check_deadline |<---+
-// | | | async_wait() | | | async_wait()
-// +----------------+ | on input +----------------+ | on output
-// | | deadline | | deadline
-// +---------+ +---------+
-//
-// If either deadline actor determines that the corresponding deadline has
-// expired, the socket is closed and any outstanding operations are cancelled.
-//
-// The input actor reads messages from the socket, where messages are delimited
-// by the newline character:
-//
-// +------------+
-// | |
-// | start_read |<---+
-// | | |
-// +------------+ |
-// | |
-// async_- | +-------------+
-// read_- | | |
-// until() +--->| handle_read |
-// | |
-// +-------------+
-//
-// The deadline for receiving a complete message is 30 seconds. If a non-empty
-// message is received, it is delivered to all subscribers. If a heartbeat (a
-// message that consists of a single newline character) is received, a heartbeat
-// is enqueued for the client, provided there are no other messages waiting to
-// be sent.
-//
-// The output actor is responsible for sending messages to the client:
-//
-// +--------------+
-// | |<---------------------+
-// | await_output | |
-// | |<---+ |
-// +--------------+ | |
-// | | | async_wait() |
-// | +--------+ |
-// V |
-// +-------------+ +--------------+
-// | | async_write() | |
-// | start_write |-------------->| handle_write |
-// | | | |
-// +-------------+ +--------------+
-//
-// The output actor first waits for an output message to be enqueued. It does
-// this by using a deadline_timer as an asynchronous condition variable. The
-// deadline_timer will be signalled whenever the output queue is non-empty.
-//
-// Once a message is available, it is sent to the client. The deadline for
-// sending a complete message is 30 seconds. After the message is successfully
-// sent, the output actor again waits for the output queue to become non-empty.
-//
-class tcp_session
- : public subscriber,
- public boost::enable_shared_from_this<tcp_session>
-{
-public:
- tcp_session(asio::io_context& io_context, channel& ch)
- : channel_(ch),
- socket_(io_context),
- input_deadline_(io_context),
- non_empty_output_queue_(io_context),
- output_deadline_(io_context)
- {
- input_deadline_.expires_at(boost::posix_time::pos_infin);
- output_deadline_.expires_at(boost::posix_time::pos_infin);
-
- // The non_empty_output_queue_ deadline_timer is set to pos_infin whenever
- // the output queue is empty. This ensures that the output actor stays
- // asleep until a message is put into the queue.
- non_empty_output_queue_.expires_at(boost::posix_time::pos_infin);
- }
-
- tcp::socket& socket()
- {
- return socket_;
- }
-
- // Called by the server object to initiate the four actors.
- void start()
- {
- channel_.join(shared_from_this());
-
- start_read();
-
- input_deadline_.async_wait(
- boost::bind(&tcp_session::check_deadline,
- shared_from_this(), &input_deadline_));
-
- await_output();
-
- output_deadline_.async_wait(
- boost::bind(&tcp_session::check_deadline,
- shared_from_this(), &output_deadline_));
- }
-
-private:
- void stop()
- {
- channel_.leave(shared_from_this());
-
- asio::error_code ignored_ec;
- socket_.close(ignored_ec);
- input_deadline_.cancel();
- non_empty_output_queue_.cancel();
- output_deadline_.cancel();
- }
-
- bool stopped() const
- {
- return !socket_.is_open();
- }
-
- void deliver(const std::string& msg)
- {
- output_queue_.push_back(msg + "\n");
-
- // Signal that the output queue contains messages. Modifying the expiry
- // will wake the output actor, if it is waiting on the timer.
- non_empty_output_queue_.expires_at(boost::posix_time::neg_infin);
- }
-
- void start_read()
- {
- // Set a deadline for the read operation.
- input_deadline_.expires_from_now(boost::posix_time::seconds(30));
-
- // Start an asynchronous operation to read a newline-delimited message.
- asio::async_read_until(socket_, input_buffer_, '\n',
- boost::bind(&tcp_session::handle_read, shared_from_this(), _1));
- }
-
- void handle_read(const asio::error_code& ec)
- {
- if (stopped())
- return;
-
- if (!ec)
- {
- // Extract the newline-delimited message from the buffer.
- std::string msg;
- std::istream is(&input_buffer_);
- std::getline(is, msg);
-
- if (!msg.empty())
- {
- channel_.deliver(msg);
- }
- else
- {
- // We received a heartbeat message from the client. If there's nothing
- // else being sent or ready to be sent, send a heartbeat right back.
- if (output_queue_.empty())
- {
- output_queue_.push_back("\n");
-
- // Signal that the output queue contains messages. Modifying the
- // expiry will wake the output actor, if it is waiting on the timer.
- non_empty_output_queue_.expires_at(boost::posix_time::neg_infin);
- }
- }
-
- start_read();
- }
- else
- {
- stop();
- }
- }
-
- void await_output()
- {
- if (stopped())
- return;
-
- if (output_queue_.empty())
- {
- // There are no messages that are ready to be sent. The actor goes to
- // sleep by waiting on the non_empty_output_queue_ timer. When a new
- // message is added, the timer will be modified and the actor will wake.
- non_empty_output_queue_.expires_at(boost::posix_time::pos_infin);
- non_empty_output_queue_.async_wait(
- boost::bind(&tcp_session::await_output, shared_from_this()));
- }
- else
- {
- start_write();
- }
- }
-
- void start_write()
- {
- // Set a deadline for the write operation.
- output_deadline_.expires_from_now(boost::posix_time::seconds(30));
-
- // Start an asynchronous operation to send a message.
- asio::async_write(socket_,
- asio::buffer(output_queue_.front()),
- boost::bind(&tcp_session::handle_write, shared_from_this(), _1));
- }
-
- void handle_write(const asio::error_code& ec)
- {
- if (stopped())
- return;
-
- if (!ec)
- {
- output_queue_.pop_front();
-
- await_output();
- }
- else
- {
- stop();
- }
- }
-
- void check_deadline(deadline_timer* deadline)
- {
- if (stopped())
- return;
-
- // Check whether the deadline has passed. We compare the deadline against
- // the current time since a new asynchronous operation may have moved the
- // deadline before this actor had a chance to run.
- if (deadline->expires_at() <= deadline_timer::traits_type::now())
- {
- // The deadline has passed. Stop the session. The other actors will
- // terminate as soon as possible.
- stop();
- }
- else
- {
- // Put the actor back to sleep.
- deadline->async_wait(
- boost::bind(&tcp_session::check_deadline,
- shared_from_this(), deadline));
- }
- }
-
- channel& channel_;
- tcp::socket socket_;
- asio::streambuf input_buffer_;
- deadline_timer input_deadline_;
- std::deque<std::string> output_queue_;
- deadline_timer non_empty_output_queue_;
- deadline_timer output_deadline_;
-};
-
-typedef boost::shared_ptr<tcp_session> tcp_session_ptr;
-
-//----------------------------------------------------------------------
-
-class udp_broadcaster
- : public subscriber
-{
-public:
- udp_broadcaster(asio::io_context& io_context,
- const udp::endpoint& broadcast_endpoint)
- : socket_(io_context)
- {
- socket_.connect(broadcast_endpoint);
- }
-
-private:
- void deliver(const std::string& msg)
- {
- asio::error_code ignored_ec;
- socket_.send(asio::buffer(msg), 0, ignored_ec);
- }
-
- udp::socket socket_;
-};
-
-//----------------------------------------------------------------------
-
-class server
-{
-public:
- server(asio::io_context& io_context,
- const tcp::endpoint& listen_endpoint,
- const udp::endpoint& broadcast_endpoint)
- : io_context_(io_context),
- acceptor_(io_context, listen_endpoint)
- {
- subscriber_ptr bc(new udp_broadcaster(io_context_, broadcast_endpoint));
- channel_.join(bc);
-
- start_accept();
- }
-
- void start_accept()
- {
- tcp_session_ptr new_session(new tcp_session(io_context_, channel_));
-
- acceptor_.async_accept(new_session->socket(),
- boost::bind(&server::handle_accept, this, new_session, _1));
- }
-
- void handle_accept(tcp_session_ptr session,
- const asio::error_code& ec)
- {
- if (!ec)
- {
- session->start();
- }
-
- start_accept();
- }
-
-private:
- asio::io_context& io_context_;
- tcp::acceptor acceptor_;
- channel channel_;
-};
-
-//----------------------------------------------------------------------
-
-int main(int argc, char* argv[])
-{
- try
- {
- using namespace std; // For atoi.
-
- if (argc != 4)
- {
- std::cerr << "Usage: server <listen_port> <bcast_address> <bcast_port>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- tcp::endpoint listen_endpoint(tcp::v4(), atoi(argv[1]));
-
- udp::endpoint broadcast_endpoint(
- asio::ip::make_address(argv[2]), atoi(argv[3]));
-
- server s(io_context, listen_endpoint, broadcast_endpoint);
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/timers/.gitignore b/3rdparty/asio/src/examples/cpp03/timers/.gitignore
deleted file mode 100644
index a3fe695226f..00000000000
--- a/3rdparty/asio/src/examples/cpp03/timers/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*timer
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/timers/tick_count_timer.cpp b/3rdparty/asio/src/examples/cpp03/timers/tick_count_timer.cpp
deleted file mode 100644
index 8b98cfd2a54..00000000000
--- a/3rdparty/asio/src/examples/cpp03/timers/tick_count_timer.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-//
-// tick_count_timer.cpp
-// ~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <asio.hpp>
-#include <ctime>
-#include <iostream>
-
-#if defined(WIN32)
-# include <windows.h>
-#else
-# error This example is for Windows only!
-#endif
-
-struct tick_count_traits
-{
- // The time type. This type has no constructor that takes a DWORD to ensure
- // that the timer can only be used with relative times.
- class time_type
- {
- public:
- time_type() : ticks_(0) {}
- private:
- friend struct tick_count_traits;
- DWORD ticks_;
- };
-
- // The duration type. According to the TimeTraits requirements, the duration
- // must be a signed type. This means we can't handle durations larger than
- // 2^31.
- class duration_type
- {
- public:
- duration_type() : ticks_(0) {}
- duration_type(LONG ticks) : ticks_(ticks) {}
- private:
- friend struct tick_count_traits;
- LONG ticks_;
- };
-
- // Get the current time.
- static time_type now()
- {
- time_type result;
- result.ticks_ = ::GetTickCount();
- return result;
- }
-
- // Add a duration to a time.
- static time_type add(const time_type& t, const duration_type& d)
- {
- time_type result;
- result.ticks_ = t.ticks_ + d.ticks_;
- return result;
- }
-
- // Subtract one time from another.
- static duration_type subtract(const time_type& t1, const time_type& t2)
- {
- // DWORD tick count values can wrap (see less_than() below). We'll convert
- // to a duration by taking the absolute difference and adding the sign
- // based on which is the "lesser" absolute time.
- return duration_type(less_than(t1, t2)
- ? -static_cast<LONG>(t2.ticks_ - t1.ticks_)
- : static_cast<LONG>(t1.ticks_ - t2.ticks_));
- }
-
- // Test whether one time is less than another.
- static bool less_than(const time_type& t1, const time_type& t2)
- {
- // DWORD tick count values wrap periodically, so we'll use a heuristic that
- // says that if subtracting t1 from t2 yields a value smaller than 2^31,
- // then t1 is probably less than t2. This means that we can't handle
- // durations larger than 2^31, which shouldn't be a problem in practice.
- return (t2.ticks_ - t1.ticks_) < static_cast<DWORD>(1 << 31);
- }
-
- // Convert to POSIX duration type.
- static boost::posix_time::time_duration to_posix_duration(
- const duration_type& d)
- {
- return boost::posix_time::milliseconds(d.ticks_);
- }
-};
-
-typedef asio::basic_deadline_timer<
- DWORD, tick_count_traits> tick_count_timer;
-
-void handle_timeout(const asio::error_code&)
-{
- std::cout << "handle_timeout\n";
-}
-
-int main()
-{
- try
- {
- asio::io_context io_context;
-
- tick_count_timer timer(io_context, 5000);
- std::cout << "Starting synchronous wait\n";
- timer.wait();
- std::cout << "Finished synchronous wait\n";
-
- timer.expires_from_now(5000);
- std::cout << "Starting asynchronous wait\n";
- timer.async_wait(&handle_timeout);
- io_context.run();
- std::cout << "Finished asynchronous wait\n";
- }
- catch (std::exception& e)
- {
- std::cout << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/timers/time_t_timer.cpp b/3rdparty/asio/src/examples/cpp03/timers/time_t_timer.cpp
deleted file mode 100644
index 8a434e9b20c..00000000000
--- a/3rdparty/asio/src/examples/cpp03/timers/time_t_timer.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-//
-// time_t_timer.cpp
-// ~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <asio.hpp>
-#include <ctime>
-#include <iostream>
-
-struct time_t_traits
-{
- // The time type.
- typedef std::time_t time_type;
-
- // The duration type.
- struct duration_type
- {
- duration_type() : value(0) {}
- duration_type(std::time_t v) : value(v) {}
- std::time_t value;
- };
-
- // Get the current time.
- static time_type now()
- {
- return std::time(0);
- }
-
- // Add a duration to a time.
- static time_type add(const time_type& t, const duration_type& d)
- {
- return t + d.value;
- }
-
- // Subtract one time from another.
- static duration_type subtract(const time_type& t1, const time_type& t2)
- {
- return duration_type(t1 - t2);
- }
-
- // Test whether one time is less than another.
- static bool less_than(const time_type& t1, const time_type& t2)
- {
- return t1 < t2;
- }
-
- // Convert to POSIX duration type.
- static boost::posix_time::time_duration to_posix_duration(
- const duration_type& d)
- {
- return boost::posix_time::seconds(d.value);
- }
-};
-
-typedef asio::basic_deadline_timer<
- std::time_t, time_t_traits> time_t_timer;
-
-void handle_timeout(const asio::error_code&)
-{
- std::cout << "handle_timeout\n";
-}
-
-int main()
-{
- try
- {
- asio::io_context io_context;
-
- time_t_timer timer(io_context);
-
- timer.expires_from_now(5);
- std::cout << "Starting synchronous wait\n";
- timer.wait();
- std::cout << "Finished synchronous wait\n";
-
- timer.expires_from_now(5);
- std::cout << "Starting asynchronous wait\n";
- timer.async_wait(&handle_timeout);
- io_context.run();
- std::cout << "Finished asynchronous wait\n";
- }
- catch (std::exception& e)
- {
- std::cout << "Exception: " << e.what() << "\n";
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/daytime1/.gitignore b/3rdparty/asio/src/examples/cpp03/tutorial/daytime1/.gitignore
deleted file mode 100644
index 2926eaf9bf6..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/daytime1/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-client
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/daytime1/client.cpp b/3rdparty/asio/src/examples/cpp03/tutorial/daytime1/client.cpp
deleted file mode 100644
index 9784d48a6fb..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/daytime1/client.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// client.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <boost/array.hpp>
-#include <asio.hpp>
-
-using asio::ip::tcp;
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: client <host>" << std::endl;
- return 1;
- }
-
- asio::io_context io_context;
-
- tcp::resolver resolver(io_context);
- tcp::resolver::results_type endpoints =
- resolver.resolve(argv[1], "daytime");
-
- tcp::socket socket(io_context);
- asio::connect(socket, endpoints);
-
- for (;;)
- {
- boost::array<char, 128> buf;
- asio::error_code error;
-
- size_t len = socket.read_some(asio::buffer(buf), error);
-
- if (error == asio::error::eof)
- break; // Connection closed cleanly by peer.
- else if (error)
- throw asio::system_error(error); // Some other error.
-
- std::cout.write(buf.data(), len);
- }
- }
- catch (std::exception& e)
- {
- std::cerr << e.what() << std::endl;
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/daytime2/.gitignore b/3rdparty/asio/src/examples/cpp03/tutorial/daytime2/.gitignore
deleted file mode 100644
index 7f06efb3296..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/daytime2/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-server
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/daytime2/server.cpp b/3rdparty/asio/src/examples/cpp03/tutorial/daytime2/server.cpp
deleted file mode 100644
index f662ed246c4..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/daytime2/server.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-// server.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <ctime>
-#include <iostream>
-#include <string>
-#include <asio.hpp>
-
-using asio::ip::tcp;
-
-std::string make_daytime_string()
-{
- using namespace std; // For time_t, time and ctime;
- time_t now = time(0);
- return ctime(&now);
-}
-
-int main()
-{
- try
- {
- asio::io_context io_context;
-
- tcp::acceptor acceptor(io_context, tcp::endpoint(tcp::v4(), 13));
-
- for (;;)
- {
- tcp::socket socket(io_context);
- acceptor.accept(socket);
-
- std::string message = make_daytime_string();
-
- asio::error_code ignored_error;
- asio::write(socket, asio::buffer(message), ignored_error);
- }
- }
- catch (std::exception& e)
- {
- std::cerr << e.what() << std::endl;
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/daytime3/.gitignore b/3rdparty/asio/src/examples/cpp03/tutorial/daytime3/.gitignore
deleted file mode 100644
index 7f06efb3296..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/daytime3/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-server
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/daytime3/server.cpp b/3rdparty/asio/src/examples/cpp03/tutorial/daytime3/server.cpp
deleted file mode 100644
index cb2c9480594..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/daytime3/server.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-//
-// server.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <ctime>
-#include <iostream>
-#include <string>
-#include <boost/bind.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include <asio.hpp>
-
-using asio::ip::tcp;
-
-std::string make_daytime_string()
-{
- using namespace std; // For time_t, time and ctime;
- time_t now = time(0);
- return ctime(&now);
-}
-
-class tcp_connection
- : public boost::enable_shared_from_this<tcp_connection>
-{
-public:
- typedef boost::shared_ptr<tcp_connection> pointer;
-
- static pointer create(asio::io_context& io_context)
- {
- return pointer(new tcp_connection(io_context));
- }
-
- tcp::socket& socket()
- {
- return socket_;
- }
-
- void start()
- {
- message_ = make_daytime_string();
-
- asio::async_write(socket_, asio::buffer(message_),
- boost::bind(&tcp_connection::handle_write, shared_from_this(),
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
-
-private:
- tcp_connection(asio::io_context& io_context)
- : socket_(io_context)
- {
- }
-
- void handle_write(const asio::error_code& /*error*/,
- size_t /*bytes_transferred*/)
- {
- }
-
- tcp::socket socket_;
- std::string message_;
-};
-
-class tcp_server
-{
-public:
- tcp_server(asio::io_context& io_context)
- : acceptor_(io_context, tcp::endpoint(tcp::v4(), 13))
- {
- start_accept();
- }
-
-private:
- void start_accept()
- {
- tcp_connection::pointer new_connection =
- tcp_connection::create(acceptor_.get_executor().context());
-
- acceptor_.async_accept(new_connection->socket(),
- boost::bind(&tcp_server::handle_accept, this, new_connection,
- asio::placeholders::error));
- }
-
- void handle_accept(tcp_connection::pointer new_connection,
- const asio::error_code& error)
- {
- if (!error)
- {
- new_connection->start();
- }
-
- start_accept();
- }
-
- tcp::acceptor acceptor_;
-};
-
-int main()
-{
- try
- {
- asio::io_context io_context;
- tcp_server server(io_context);
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << e.what() << std::endl;
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/daytime4/.gitignore b/3rdparty/asio/src/examples/cpp03/tutorial/daytime4/.gitignore
deleted file mode 100644
index 2926eaf9bf6..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/daytime4/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-client
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/daytime4/client.cpp b/3rdparty/asio/src/examples/cpp03/tutorial/daytime4/client.cpp
deleted file mode 100644
index da3b651d56d..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/daytime4/client.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// client.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <boost/array.hpp>
-#include <asio.hpp>
-
-using asio::ip::udp;
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 2)
- {
- std::cerr << "Usage: client <host>" << std::endl;
- return 1;
- }
-
- asio::io_context io_context;
-
- udp::resolver resolver(io_context);
- udp::endpoint receiver_endpoint =
- *resolver.resolve(udp::v4(), argv[1], "daytime").begin();
-
- udp::socket socket(io_context);
- socket.open(udp::v4());
-
- boost::array<char, 1> send_buf = {{ 0 }};
- socket.send_to(asio::buffer(send_buf), receiver_endpoint);
-
- boost::array<char, 128> recv_buf;
- udp::endpoint sender_endpoint;
- size_t len = socket.receive_from(
- asio::buffer(recv_buf), sender_endpoint);
-
- std::cout.write(recv_buf.data(), len);
- }
- catch (std::exception& e)
- {
- std::cerr << e.what() << std::endl;
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/daytime5/.gitignore b/3rdparty/asio/src/examples/cpp03/tutorial/daytime5/.gitignore
deleted file mode 100644
index 7f06efb3296..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/daytime5/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-server
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/daytime5/server.cpp b/3rdparty/asio/src/examples/cpp03/tutorial/daytime5/server.cpp
deleted file mode 100644
index fdf452562d2..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/daytime5/server.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-// server.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <ctime>
-#include <iostream>
-#include <string>
-#include <boost/array.hpp>
-#include <asio.hpp>
-
-using asio::ip::udp;
-
-std::string make_daytime_string()
-{
- using namespace std; // For time_t, time and ctime;
- time_t now = time(0);
- return ctime(&now);
-}
-
-int main()
-{
- try
- {
- asio::io_context io_context;
-
- udp::socket socket(io_context, udp::endpoint(udp::v4(), 13));
-
- for (;;)
- {
- boost::array<char, 1> recv_buf;
- udp::endpoint remote_endpoint;
- asio::error_code error;
- socket.receive_from(asio::buffer(recv_buf),
- remote_endpoint, 0, error);
-
- if (error && error != asio::error::message_size)
- throw asio::system_error(error);
-
- std::string message = make_daytime_string();
-
- asio::error_code ignored_error;
- socket.send_to(asio::buffer(message),
- remote_endpoint, 0, ignored_error);
- }
- }
- catch (std::exception& e)
- {
- std::cerr << e.what() << std::endl;
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/daytime6/.gitignore b/3rdparty/asio/src/examples/cpp03/tutorial/daytime6/.gitignore
deleted file mode 100644
index 7f06efb3296..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/daytime6/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-server
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/daytime6/server.cpp b/3rdparty/asio/src/examples/cpp03/tutorial/daytime6/server.cpp
deleted file mode 100644
index d67045ff990..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/daytime6/server.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// server.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <ctime>
-#include <iostream>
-#include <string>
-#include <boost/array.hpp>
-#include <boost/bind.hpp>
-#include <boost/shared_ptr.hpp>
-#include <asio.hpp>
-
-using asio::ip::udp;
-
-std::string make_daytime_string()
-{
- using namespace std; // For time_t, time and ctime;
- time_t now = time(0);
- return ctime(&now);
-}
-
-class udp_server
-{
-public:
- udp_server(asio::io_context& io_context)
- : socket_(io_context, udp::endpoint(udp::v4(), 13))
- {
- start_receive();
- }
-
-private:
- void start_receive()
- {
- socket_.async_receive_from(
- asio::buffer(recv_buffer_), remote_endpoint_,
- boost::bind(&udp_server::handle_receive, this,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
-
- void handle_receive(const asio::error_code& error,
- std::size_t /*bytes_transferred*/)
- {
- if (!error || error == asio::error::message_size)
- {
- boost::shared_ptr<std::string> message(
- new std::string(make_daytime_string()));
-
- socket_.async_send_to(asio::buffer(*message), remote_endpoint_,
- boost::bind(&udp_server::handle_send, this, message,
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
-
- start_receive();
- }
- }
-
- void handle_send(boost::shared_ptr<std::string> /*message*/,
- const asio::error_code& /*error*/,
- std::size_t /*bytes_transferred*/)
- {
- }
-
- udp::socket socket_;
- udp::endpoint remote_endpoint_;
- boost::array<char, 1> recv_buffer_;
-};
-
-int main()
-{
- try
- {
- asio::io_context io_context;
- udp_server server(io_context);
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << e.what() << std::endl;
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/daytime7/.gitignore b/3rdparty/asio/src/examples/cpp03/tutorial/daytime7/.gitignore
deleted file mode 100644
index 7f06efb3296..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/daytime7/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-server
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/daytime7/server.cpp b/3rdparty/asio/src/examples/cpp03/tutorial/daytime7/server.cpp
deleted file mode 100644
index b9dc60558c9..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/daytime7/server.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-//
-// server.cpp
-// ~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <ctime>
-#include <iostream>
-#include <string>
-#include <boost/array.hpp>
-#include <boost/bind.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include <asio.hpp>
-
-using asio::ip::tcp;
-using asio::ip::udp;
-
-std::string make_daytime_string()
-{
- using namespace std; // For time_t, time and ctime;
- time_t now = time(0);
- return ctime(&now);
-}
-
-class tcp_connection
- : public boost::enable_shared_from_this<tcp_connection>
-{
-public:
- typedef boost::shared_ptr<tcp_connection> pointer;
-
- static pointer create(asio::io_context& io_context)
- {
- return pointer(new tcp_connection(io_context));
- }
-
- tcp::socket& socket()
- {
- return socket_;
- }
-
- void start()
- {
- message_ = make_daytime_string();
-
- asio::async_write(socket_, asio::buffer(message_),
- boost::bind(&tcp_connection::handle_write, shared_from_this()));
- }
-
-private:
- tcp_connection(asio::io_context& io_context)
- : socket_(io_context)
- {
- }
-
- void handle_write()
- {
- }
-
- tcp::socket socket_;
- std::string message_;
-};
-
-class tcp_server
-{
-public:
- tcp_server(asio::io_context& io_context)
- : acceptor_(io_context, tcp::endpoint(tcp::v4(), 13))
- {
- start_accept();
- }
-
-private:
- void start_accept()
- {
- tcp_connection::pointer new_connection =
- tcp_connection::create(acceptor_.get_executor().context());
-
- acceptor_.async_accept(new_connection->socket(),
- boost::bind(&tcp_server::handle_accept, this, new_connection,
- asio::placeholders::error));
- }
-
- void handle_accept(tcp_connection::pointer new_connection,
- const asio::error_code& error)
- {
- if (!error)
- {
- new_connection->start();
- }
-
- start_accept();
- }
-
- tcp::acceptor acceptor_;
-};
-
-class udp_server
-{
-public:
- udp_server(asio::io_context& io_context)
- : socket_(io_context, udp::endpoint(udp::v4(), 13))
- {
- start_receive();
- }
-
-private:
- void start_receive()
- {
- socket_.async_receive_from(
- asio::buffer(recv_buffer_), remote_endpoint_,
- boost::bind(&udp_server::handle_receive, this,
- asio::placeholders::error));
- }
-
- void handle_receive(const asio::error_code& error)
- {
- if (!error || error == asio::error::message_size)
- {
- boost::shared_ptr<std::string> message(
- new std::string(make_daytime_string()));
-
- socket_.async_send_to(asio::buffer(*message), remote_endpoint_,
- boost::bind(&udp_server::handle_send, this, message));
-
- start_receive();
- }
- }
-
- void handle_send(boost::shared_ptr<std::string> /*message*/)
- {
- }
-
- udp::socket socket_;
- udp::endpoint remote_endpoint_;
- boost::array<char, 1> recv_buffer_;
-};
-
-int main()
-{
- try
- {
- asio::io_context io_context;
- tcp_server server1(io_context);
- udp_server server2(io_context);
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << e.what() << std::endl;
- }
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/daytime_dox.txt b/3rdparty/asio/src/examples/cpp03/tutorial/daytime_dox.txt
deleted file mode 100644
index 1bf591a43a8..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/daytime_dox.txt
+++ /dev/null
@@ -1,502 +0,0 @@
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-/**
-\page tutdaytime1 Daytime.1 - A synchronous TCP daytime client
-
-This tutorial program shows how to use asio to implement a client application
-with TCP.
-
-\dontinclude daytime1/client.cpp
-\skip #include
-
-We start by including the necessary header files.
-
-\until asio.hpp
-
-The purpose of this application is to access a daytime service,
-so we need the user to specify the server.
-
-\until }
-
-All programs that use asio need to have at least one asio::io_service
-object.
-
-\until asio::io_service
-
-We need to turn the server name that was specified as a parameter to the
-application, into a TCP endpoint. To do this we use an
-asio::ip::tcp::resolver object.
-
-\until tcp::resolver
-
-A resolver takes a query object and turns it into a list of endpoints. We
-construct a query using the name of the server, specified in <tt>argv[1]</tt>,
-and the name of the service, in this case <tt>"daytime"</tt>.
-
-\until tcp::resolver::query
-
-The list of endpoints is returned using an iterator of type
-asio::ip::tcp::resolver::iterator. (Note that a default constructed
-asio::ip::tcp::resolver::iterator object can be used as an end iterator.)
-
-\until tcp::resolver::iterator
-
-Now we create and connect the socket. The list of endpoints obtained above may
-contain both IPv4 and IPv6 endpoints, so we need to try each of them until we
-find one that works. This keeps the client program independent of a specific IP
-version. The asio::connect() function does this for us automatically.
-
-\until asio::connect
-
-The connection is open. All we need to do now is read the response from the
-daytime service.
-
-We use a <tt>boost::array</tt> to hold the received data. The asio::buffer()
-function automatically determines the size of the array to help prevent buffer
-overruns. Instead of a <tt>boost::array</tt>, we could have used a <tt>char
-[]</tt> or <tt>std::vector</tt>.
-
-\until read_some
-
-When the server closes the connection, the asio::ip::tcp::socket::read_some()
-function will exit with the asio::error::eof error, which is how we know to
-exit the loop.
-
-\until }
-
-Finally, handle any exceptions that may have been thrown.
-
-\until }
-\until }
-
-See the \ref tutdaytime1src "full source listing" \n
-Return to the \ref index "tutorial index" \n
-Next: \ref tutdaytime2
-
-*/
-
-/**
-\page tutdaytime1src Source listing for Daytime.1
-\include daytime1/client.cpp
-Return to \ref tutdaytime1
-*/
-
-/**
-\page tutdaytime2 Daytime.2 - A synchronous TCP daytime server
-
-This tutorial program shows how to use asio to implement a server application
-with TCP.
-
-\dontinclude daytime2/server.cpp
-\skip #include
-
-\until using
-
-We define the function <tt>make_daytime_string()</tt> to create the string to
-be sent back to the client. This function will be reused in all of our daytime
-server applications.
-
-\until asio::io_service
-
-A asio::ip::tcp::acceptor object needs to be created to listen
-for new connections. It is initialised to listen on TCP port 13, for IP version 4.
-
-\until tcp::acceptor
-
-This is an iterative server, which means that it will handle one
-connection at a time. Create a socket that will represent the connection to the
-client, and then wait for a connection.
-
-\until acceptor.accept
-
-A client is accessing our service. Determine the current time
-and transfer this information to the client.
-
-\until }
-\until }
-
-Finally, handle any exceptions.
-
-\until }
-\until }
-
-See the \ref tutdaytime2src "full source listing" \n
-Return to the \ref index "tutorial index" \n
-Previous: \ref tutdaytime1 \n
-Next: \ref tutdaytime3
-
-*/
-
-/**
-\page tutdaytime2src Source listing for Daytime.2
-\include daytime2/server.cpp
-Return to \ref tutdaytime2
-*/
-
-/**
-\page tutdaytime3 Daytime.3 - An asynchronous TCP daytime server
-
-\section tutdaytime3funcmain The main() function
-
-\dontinclude daytime3/server.cpp
-\skip int main()
-\until try
-\until {
-
-We need to create a server object to accept incoming client connections. The
-asio::io_service object provides I/O services, such as sockets, that the
-server object will use.
-
-\until tcp_server
-
-Run the asio::io_service object so that it will perform asynchronous operations
-on your behalf.
-
-\until return 0;
-\until }
-
-\section tutdaytime3classtcp_server The tcp_server class
-
-\dontinclude daytime3/server.cpp
-\skip class tcp_server
-\until public:
-
-The constructor initialises an acceptor to listen on TCP port 13.
-
-\until private:
-
-The function <tt>start_accept()</tt> creates a socket and initiates an
-asynchronous accept operation to wait for a new connection.
-
-\until }
-
-The function <tt>handle_accept()</tt> is called when the asynchronous accept
-operation initiated by <tt>start_accept()</tt> finishes. It services the client
-request, and then calls <tt>start_accept()</tt> to initiate the next accept
-operation.
-
-\until }
-\until }
-
-\section tutdaytime3classtcp_connection The tcp_connection class
-
-We will use <tt>shared_ptr</tt> and <tt>enable_shared_from_this</tt> because we
-want to keep the <tt>tcp_connection</tt> object alive as long as there is an
-operation that refers to it.
-
-\dontinclude daytime3/server.cpp
-\skip class tcp_connection
-\until shared_ptr
-\until }
-\until }
-
-In the function <tt>start()</tt>, we call asio::async_write() to serve the data
-to the client. Note that we are using asio::async_write(), rather than
-asio::ip::tcp::socket::async_write_some(), to ensure that the entire block of
-data is sent.
-
-\until {
-
-The data to be sent is stored in the class member <tt>message_</tt> as we need
-to keep the data valid until the asynchronous operation is complete.
-
-\until message_
-
-When initiating the asynchronous operation, and if using \ref boost_bind, you
-must specify only the arguments that match the handler's parameter list. In
-this program, both of the argument placeholders (asio::placeholders::error and
-asio::placeholders::bytes_transferred) could potentially have been removed,
-since they are not being used in <tt>handle_write()</tt>.
-
-\until placeholders::bytes_transferred
-
-Any further actions for this client connection are now the responsibility of
-<tt>handle_write()</tt>.
-
-\until };
-
-\section tutdaytime3remunused Removing unused handler parameters
-
-You may have noticed that the <tt>error</tt>, and <tt>bytes_transferred</tt>
-parameters are not used in the body of the <tt>handle_write()</tt> function. If
-parameters are not needed, it is possible to remove them from the function so
-that it looks like:
-
-\code
- void handle_write()
- {
- }
-\endcode
-
-The asio::async_write() call used to initiate the call can then be changed to
-just:
-
-\code
- asio::async_write(socket_, asio::buffer(message_),
- boost::bind(&tcp_connection::handle_write, shared_from_this()));
-\endcode
-
-See the \ref tutdaytime3src "full source listing" \n
-Return to the \ref index "tutorial index" \n
-Previous: \ref tutdaytime2 \n
-Next: \ref tutdaytime4
-
-*/
-
-/**
-\page tutdaytime3src Source listing for Daytime.3
-\include daytime3/server.cpp
-Return to \ref tutdaytime3
-*/
-
-/**
-\page tutdaytime4 Daytime.4 - A synchronous UDP daytime client
-
-This tutorial program shows how to use asio to implement a client application
-with UDP.
-
-\dontinclude daytime4/client.cpp
-\skip #include
-\until using asio::ip::udp;
-
-The start of the application is essentially the same as for the TCP daytime
-client.
-
-\until asio::io_service
-
-We use an asio::ip::udp::resolver object to find the correct remote endpoint to
-use based on the host and service names. The query is restricted to return only
-IPv4 endpoints by the asio::ip::udp::v4() argument.
-
-\until udp::v4
-
-The asio::ip::udp::resolver::resolve() function is guaranteed to return at
-least one endpoint in the list if it does not fail. This means it is safe to
-dereference the return value directly.
-
-\until udp::endpoint
-
-Since UDP is datagram-oriented, we will not be using a stream socket. Create an
-asio::ip::udp::socket and initiate contact with the remote endpoint.
-
-\until receiver_endpoint
-
-Now we need to be ready to accept whatever the server sends back to us. The
-endpoint on our side that receives the server's response will be initialised by
-asio::ip::udp::socket::receive_from().
-
-\until }
-
-Finally, handle any exceptions that may have been thrown.
-
-\until }
-\until }
-See the \ref tutdaytime4src "full source listing" \n
-Return to the \ref index "tutorial index" \n
-Previous: \ref tutdaytime3 \n
-Next: \ref tutdaytime5
-
-*/
-
-/**
-\page tutdaytime4src Source listing for Daytime.4
-\include daytime4/client.cpp
-Return to \ref tutdaytime4
-*/
-
-/**
-\page tutdaytime5 Daytime.5 - A synchronous UDP daytime server
-
-This tutorial program shows how to use asio to implement a server application
-with UDP.
-
-\dontinclude daytime5/server.cpp
-\skip int main()
-\until asio::io_service
-
-Create an asio::ip::udp::socket object to receive requests on UDP port 13.
-
-\until udp::socket
-
-Wait for a client to initiate contact with us. The remote_endpoint object will
-be populated by asio::ip::udp::socket::receive_from().
-
-\until throw
-
-Determine what we are going to send back to the client.
-
-\until std::string message
-
-Send the response to the remote_endpoint.
-
-\until }
-\until }
-
-Finally, handle any exceptions.
-
-\until }
-\until }
-
-See the \ref tutdaytime5src "full source listing" \n
-Return to the \ref index "tutorial index" \n
-Previous: \ref tutdaytime4 \n
-Next: \ref tutdaytime6
-
-*/
-
-/**
-\page tutdaytime5src Source listing for Daytime.5
-\include daytime5/server.cpp
-Return to \ref tutdaytime5
-*/
-
-/**
-\page tutdaytime6 Daytime.6 - An asynchronous UDP daytime server
-
-\section tutdaytime6funcmain The main() function
-
-\dontinclude daytime6/server.cpp
-\skip int main()
-\until try
-\until {
-
-Create a server object to accept incoming client requests, and run
-the asio::io_service object.
-
-\until return 0;
-\until }
-
-\section tutdaytime6classudp_server The udp_server class
-
-\dontinclude daytime6/server.cpp
-\skip class udp_server
-\until public:
-
-The constructor initialises a socket to listen on UDP port 13.
-
-\until private:
-\until {
-
-The function asio::ip::udp::socket::async_receive_from() will cause the
-application to listen in the background for a new request. When such a request
-is received, the asio::io_service object will invoke the
-<tt>handle_receive()</tt> function with two arguments: a value of type
-asio::error_code indicating whether the operation succeeded or failed, and a
-<tt>size_t</tt> value <tt>bytes_transferred</tt> specifying the number of bytes
-received.
-
-\until }
-
-The function <tt>handle_receive()</tt> will service the client request.
-
-\until {
-
-The <tt>error</tt> parameter contains the result of the asynchronous operation.
-Since we only provide the 1-byte <tt>recv_buffer_</tt> to contain the client's
-request, the asio::io_service object would return an error if the client sent
-anything larger. We can ignore such an error if it comes up.
-
-\until {
-
-Determine what we are going to send.
-
-\until make_daytime_string()
-
-We now call asio::ip::udp::socket::async_send_to() to serve the data to the
-client.
-
-\until asio::placeholders::bytes_transferred
-
-When initiating the asynchronous operation, and if using \ref boost_bind, you
-must specify only the arguments that match the handler's parameter list. In
-this program, both of the argument placeholders (asio::placeholders::error and
-asio::placeholders::bytes_transferred) could potentially have been removed.
-
-Start listening for the next client request.
-
-\until start_receive
-
-Any further actions for this client request are now the responsibility of
-<tt>handle_send()</tt>.
-
-\until }
-\until }
-
-The function <tt>handle_send()</tt> is invoked after the service request has
-been completed.
-
-\until }
-\until }
-
-See the \ref tutdaytime6src "full source listing" \n
-Return to the \ref index "tutorial index" \n
-Previous: \ref tutdaytime5 \n
-Next: \ref tutdaytime7
-
-*/
-
-/**
-\page tutdaytime6src Source listing for Daytime.6
-\include daytime6/server.cpp
-Return to \ref tutdaytime6
-*/
-
-/**
-\page tutdaytime7 Daytime.7 - A combined TCP/UDP asynchronous server
-
-This tutorial program shows how to combine the two asynchronous servers that we
-have just written, into a single server application.
-
-\section tutdaytime7funcmain The main() function
-
-\dontinclude daytime7/server.cpp
-\skip int main()
-\until asio::io_service
-
-We will begin by creating a server object to accept a TCP client connection.
-
-\until tcp_server
-
-We also need a server object to accept a UDP client request.
-
-\until udp_server
-
-We have created two lots of work for the asio::io_service object to do.
-
-\until return 0;
-\until }
-
-\section tutdaytime7classtcp The tcp_connection and tcp_server classes
-
-The following two classes are taken from \ref tutdaytime3 "Daytime.3".
-
-\dontinclude daytime7/server.cpp
-\skip class tcp_connection
-\until };
-\until };
-
-\section tutdaytime7classudp The udp_server class
-
-Similarly, this next class is taken from the
-\ref tutdaytime6 "previous tutorial step".
-
-\dontinclude daytime7/server.cpp
-\skip class udp_server
-\until };
-
-See the \ref tutdaytime7src "full source listing" \n
-Return to the \ref index "tutorial index" \n
-Previous: \ref tutdaytime6
-
-*/
-
-/**
-\page tutdaytime7src Source listing for Daytime.7
-\include daytime7/server.cpp
-Return to \ref tutdaytime7
-*/
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/index_dox.txt b/3rdparty/asio/src/examples/cpp03/tutorial/index_dox.txt
deleted file mode 100644
index 7d3bd1a2912..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/index_dox.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-/**
-\mainpage asio Tutorial
-
-\section tuttimer Basic Skills
-
-The tutorial programs in this first section introduce the fundamental concepts
-required to use the asio toolkit. Before plunging into the complex world of
-network programming, these tutorial programs illustrate the basic skills using
-simple asynchronous timers.
-
-\li \ref tuttimer1
-\li \ref tuttimer2
-\li \ref tuttimer3
-\li \ref tuttimer4
-\li \ref tuttimer5
-
-\section tutdaytime Introduction to Sockets
-
-The tutorial programs in this section show how to use asio to develop simple
-client and server programs. These tutorial programs are based around the <a
-href="http://www.ietf.org/rfc/rfc867.txt">daytime</a> protocol, which supports
-both TCP and UDP.
-
-The first three tutorial programs implement the daytime protocol using TCP.
-
-\li \ref tutdaytime1
-\li \ref tutdaytime2
-\li \ref tutdaytime3
-
-The next three tutorial programs implement the daytime protocol using UDP.
-
-\li \ref tutdaytime4
-\li \ref tutdaytime5
-\li \ref tutdaytime6
-
-The last tutorial program in this section demonstrates how asio allows the TCP
-and UDP servers to be easily combined into a single program.
-
-\li \ref tutdaytime7
-
-*/
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/timer1/.gitignore b/3rdparty/asio/src/examples/cpp03/tutorial/timer1/.gitignore
deleted file mode 100644
index 1d47ca67c43..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/timer1/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-timer
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/timer1/timer.cpp b/3rdparty/asio/src/examples/cpp03/tutorial/timer1/timer.cpp
deleted file mode 100644
index 79ddf918261..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/timer1/timer.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// timer.cpp
-// ~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <asio.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
-
-int main()
-{
- asio::io_context io;
-
- asio::deadline_timer t(io, boost::posix_time::seconds(5));
- t.wait();
-
- std::cout << "Hello, world!" << std::endl;
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/timer2/.gitignore b/3rdparty/asio/src/examples/cpp03/tutorial/timer2/.gitignore
deleted file mode 100644
index 1d47ca67c43..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/timer2/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-timer
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/timer2/timer.cpp b/3rdparty/asio/src/examples/cpp03/tutorial/timer2/timer.cpp
deleted file mode 100644
index 3275c22c2f6..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/timer2/timer.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// timer.cpp
-// ~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <asio.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
-
-void print(const asio::error_code& /*e*/)
-{
- std::cout << "Hello, world!" << std::endl;
-}
-
-int main()
-{
- asio::io_context io;
-
- asio::deadline_timer t(io, boost::posix_time::seconds(5));
- t.async_wait(&print);
-
- io.run();
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/timer3/.gitignore b/3rdparty/asio/src/examples/cpp03/tutorial/timer3/.gitignore
deleted file mode 100644
index 1d47ca67c43..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/timer3/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-timer
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/timer3/timer.cpp b/3rdparty/asio/src/examples/cpp03/tutorial/timer3/timer.cpp
deleted file mode 100644
index dfbf7d660a0..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/timer3/timer.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// timer.cpp
-// ~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <asio.hpp>
-#include <boost/bind.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
-
-void print(const asio::error_code& /*e*/,
- asio::deadline_timer* t, int* count)
-{
- if (*count < 5)
- {
- std::cout << *count << std::endl;
- ++(*count);
-
- t->expires_at(t->expires_at() + boost::posix_time::seconds(1));
- t->async_wait(boost::bind(print,
- asio::placeholders::error, t, count));
- }
-}
-
-int main()
-{
- asio::io_context io;
-
- int count = 0;
- asio::deadline_timer t(io, boost::posix_time::seconds(1));
- t.async_wait(boost::bind(print,
- asio::placeholders::error, &t, &count));
-
- io.run();
-
- std::cout << "Final count is " << count << std::endl;
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/timer4/.gitignore b/3rdparty/asio/src/examples/cpp03/tutorial/timer4/.gitignore
deleted file mode 100644
index 1d47ca67c43..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/timer4/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-timer
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/timer4/timer.cpp b/3rdparty/asio/src/examples/cpp03/tutorial/timer4/timer.cpp
deleted file mode 100644
index cbea70d26fa..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/timer4/timer.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-//
-// timer.cpp
-// ~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <asio.hpp>
-#include <boost/bind.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
-
-class printer
-{
-public:
- printer(asio::io_context& io)
- : timer_(io, boost::posix_time::seconds(1)),
- count_(0)
- {
- timer_.async_wait(boost::bind(&printer::print, this));
- }
-
- ~printer()
- {
- std::cout << "Final count is " << count_ << std::endl;
- }
-
- void print()
- {
- if (count_ < 5)
- {
- std::cout << count_ << std::endl;
- ++count_;
-
- timer_.expires_at(timer_.expires_at() + boost::posix_time::seconds(1));
- timer_.async_wait(boost::bind(&printer::print, this));
- }
- }
-
-private:
- asio::deadline_timer timer_;
- int count_;
-};
-
-int main()
-{
- asio::io_context io;
- printer p(io);
- io.run();
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/timer5/.gitignore b/3rdparty/asio/src/examples/cpp03/tutorial/timer5/.gitignore
deleted file mode 100644
index 1d47ca67c43..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/timer5/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-timer
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/timer5/timer.cpp b/3rdparty/asio/src/examples/cpp03/tutorial/timer5/timer.cpp
deleted file mode 100644
index a798e85aacf..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/timer5/timer.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-//
-// timer.cpp
-// ~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <iostream>
-#include <asio.hpp>
-#include <boost/bind.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
-
-class printer
-{
-public:
- printer(asio::io_context& io)
- : strand_(io),
- timer1_(io, boost::posix_time::seconds(1)),
- timer2_(io, boost::posix_time::seconds(1)),
- count_(0)
- {
- timer1_.async_wait(asio::bind_executor(strand_,
- boost::bind(&printer::print1, this)));
-
- timer2_.async_wait(asio::bind_executor(strand_,
- boost::bind(&printer::print2, this)));
- }
-
- ~printer()
- {
- std::cout << "Final count is " << count_ << std::endl;
- }
-
- void print1()
- {
- if (count_ < 10)
- {
- std::cout << "Timer 1: " << count_ << std::endl;
- ++count_;
-
- timer1_.expires_at(timer1_.expires_at() + boost::posix_time::seconds(1));
-
- timer1_.async_wait(asio::bind_executor(strand_,
- boost::bind(&printer::print1, this)));
- }
- }
-
- void print2()
- {
- if (count_ < 10)
- {
- std::cout << "Timer 2: " << count_ << std::endl;
- ++count_;
-
- timer2_.expires_at(timer2_.expires_at() + boost::posix_time::seconds(1));
-
- timer2_.async_wait(asio::bind_executor(strand_,
- boost::bind(&printer::print2, this)));
- }
- }
-
-private:
- asio::io_context::strand strand_;
- asio::deadline_timer timer1_;
- asio::deadline_timer timer2_;
- int count_;
-};
-
-int main()
-{
- asio::io_context io;
- printer p(io);
- asio::thread t(boost::bind(&asio::io_context::run, &io));
- io.run();
- t.join();
-
- return 0;
-}
diff --git a/3rdparty/asio/src/examples/cpp03/tutorial/timer_dox.txt b/3rdparty/asio/src/examples/cpp03/tutorial/timer_dox.txt
deleted file mode 100644
index 7c5a0a099a6..00000000000
--- a/3rdparty/asio/src/examples/cpp03/tutorial/timer_dox.txt
+++ /dev/null
@@ -1,383 +0,0 @@
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-/**
-\page tuttimer1 Timer.1 - Using a timer synchronously
-
-This tutorial program introduces asio by showing how to perform a blocking
-wait on a timer.
-
-\dontinclude timer1/timer.cpp
-\skip #include
-
-We start by including the necessary header files.
-
-All of the asio classes can be used by simply including the <tt>"asio.hpp"</tt>
-header file.
-
-\until asio.hpp
-
-Since this example uses timers, we need to include the appropriate
-Boost.Date_Time header file for manipulating times.
-
-\until posix_time.hpp
-
-All programs that use asio need to have at least one asio::io_service object.
-This class provides access to I/O functionality. We declare an object of this
-type first thing in the main function.
-
-\until asio::io_service
-
-Next we declare an object of type asio::deadline_timer. The core asio classes
-that provide I/O functionality (or as in this case timer functionality) always
-take a reference to an io_service as their first constructor argument. The
-second argument to the constructor sets the timer to expire 5 seconds from now.
-
-\until asio::deadline_timer
-
-In this simple example we perform a blocking wait on the timer.
-That is, the call to asio::deadline_timer::wait() will not return until the
-timer has expired, 5 seconds after it was created (i.e. <b>not</b> from when the
-wait starts).
-
-A deadline timer is always in one of two states: "expired" or "not expired". If
-the asio::deadline_timer::wait() function is called on an expired timer, it
-will return immediately.
-
-\until wait
-
-Finally we print the obligatory <tt>"Hello, world!"</tt>
-message to show when the timer has expired.
-
-\until }
-
-See the \ref tuttimer1src "full source listing" \n
-Return to the \ref index "tutorial index" \n
-Next: \ref tuttimer2
-
-*/
-
-/**
-\page tuttimer1src Source listing for Timer.1
-\include timer1/timer.cpp
-Return to \ref tuttimer1
-*/
-
-/**
-\page tuttimer2 Timer.2 - Using a timer asynchronously
-
-This tutorial program demonstrates how to use asio's asynchronous callback
-functionality by modifying the program from tutorial Timer.1 to perform an
-asynchronous wait on the timer.
-
-\dontinclude timer2/timer.cpp
-\skip #include
-
-\until posix_time.hpp
-
-Using asio's asynchronous functionality means having a callback
-function that will be called when an asynchronous operation completes. In this
-program we define a function called <tt>print</tt> to be called when the
-asynchronous wait finishes.
-
-\until asio::deadline_timer
-
-Next, instead of doing a blocking wait as in tutorial Timer.1,
-we call the asio::deadline_timer::async_wait() function to perform an
-asynchronous wait. When calling this function we pass the <tt>print</tt>
-callback handler that was defined above.
-
-\skipline async_wait
-
-Finally, we must call the asio::io_service::run() member function
-on the io_service object.
-
-The asio library provides a guarantee that callback handlers will <b>only</b>
-be called from threads that are currently calling asio::io_service::run().
-Therefore unless the asio::io_service::run() function is called the callback for
-the asynchronous wait completion will never be invoked.
-
-The asio::io_service::run() function will also continue to run while there is
-still "work" to do. In this example, the work is the asynchronous wait on the
-timer, so the call will not return until the timer has expired and the
-callback has completed.
-
-It is important to remember to give the io_service some work to do before
-calling asio::io_service::run(). For example, if we had omitted the above call
-to asio::deadline_timer::async_wait(), the io_service would not have had any
-work to do, and consequently asio::io_service::run() would have returned
-immediately.
-
-\skip run
-\until }
-
-See the \ref tuttimer2src "full source listing" \n
-Return to the \ref index "tutorial index" \n
-Previous: \ref tuttimer1 \n
-Next: \ref tuttimer3
-
-*/
-
-/**
-\page tuttimer2src Source listing for Timer.2
-\include timer2/timer.cpp
-Return to \ref tuttimer2
-*/
-
-/**
-\page tuttimer3 Timer.3 - Binding arguments to a handler
-
-In this tutorial we will modify the program from tutorial Timer.2 so that the
-timer fires once a second. This will show how to pass additional parameters to
-your handler function.
-
-\dontinclude timer3/timer.cpp
-\skip #include
-
-\until posix_time.hpp
-
-To implement a repeating timer using asio you need to change
-the timer's expiry time in your callback function, and to then start a new
-asynchronous wait. Obviously this means that the callback function will need
-to be able to access the timer object. To this end we add two new parameters
-to the <tt>print</tt> function:
-
-\li A pointer to a timer object.
-
-\li A counter so that we can stop the program when the timer fires for the
-sixth time.
-
-\until {
-
-As mentioned above, this tutorial program uses a counter to
-stop running when the timer fires for the sixth time. However you will observe
-that there is no explicit call to ask the io_service to stop. Recall that in
-tutorial Timer.2 we learnt that the asio::io_service::run() function completes
-when there is no more "work" to do. By not starting a new asynchronous wait on
-the timer when <tt>count</tt> reaches 5, the io_service will run out of work and
-stop running.
-
-\until ++
-
-Next we move the expiry time for the timer along by one second
-from the previous expiry time. By calculating the new expiry time relative to
-the old, we can ensure that the timer does not drift away from the
-whole-second mark due to any delays in processing the handler.
-
-\until expires_at
-
-Then we start a new asynchronous wait on the timer. As you can
-see, the \ref boost_bind function is used to associate the extra parameters
-with your callback handler. The asio::deadline_timer::async_wait() function
-expects a handler function (or function object) with the signature
-<tt>void(const asio::error_code&)</tt>. Binding the additional parameters
-converts your <tt>print</tt> function into a function object that matches the
-signature correctly.
-
-See the <a href="http://www.boost.org/libs/bind/bind.html">Boost.Bind
-documentation</a> for more information on how to use \ref boost_bind.
-
-In this example, the asio::placeholders::error argument to \ref boost_bind is a
-named placeholder for the error object passed to the handler. When initiating
-the asynchronous operation, and if using \ref boost_bind, you must specify only
-the arguments that match the handler's parameter list. In tutorial Timer.4 you
-will see that this placeholder may be elided if the parameter is not needed by
-the callback handler.
-
-\until asio::io_service
-
-A new <tt>count</tt> variable is added so that we can stop the
-program when the timer fires for the sixth time.
-
-\until asio::deadline_timer
-
-As in Step 4, when making the call to
-asio::deadline_timer::async_wait() from <tt>main</tt> we bind the additional
-parameters needed for the <tt>print</tt> function.
-
-\until run
-
-Finally, just to prove that the <tt>count</tt> variable was
-being used in the <tt>print</tt> handler function, we will print out its new
-value.
-
-\until }
-
-See the \ref tuttimer3src "full source listing" \n
-Return to the \ref index "tutorial index" \n
-Previous: \ref tuttimer2 \n
-Next: \ref tuttimer4
-
-*/
-
-/**
-\page tuttimer3src Source listing for Timer.3
-\include timer3/timer.cpp
-Return to \ref tuttimer3
-*/
-
-/**
-\page tuttimer4 Timer.4 - Using a member function as a handler
-
-In this tutorial we will see how to use a class member function as a callback
-handler. The program should execute identically to the tutorial program from
-tutorial Timer.3.
-
-\dontinclude timer4/timer.cpp
-\skip #include
-
-\until posix_time.hpp
-
-Instead of defining a free function <tt>print</tt> as the
-callback handler, as we did in the earlier tutorial programs, we now define a
-class called <tt>printer</tt>.
-
-\until public
-
-The constructor of this class will take a reference to the
-io_service object and use it when initialising the <tt>timer_</tt> member. The
-counter used to shut down the program is now also a member of the class.
-
-\until {
-
-The \ref boost_bind function works just as well with class
-member functions as with free functions. Since all non-static class member
-functions have an implicit <tt>this</tt> parameter, we need to bind
-<tt>this</tt> to the function. As in tutorial Timer.3, \ref boost_bind
-converts our callback handler (now a member function) into a function object
-that can be invoked as though it has the signature <tt>void(const
-asio::error_code&)</tt>.
-
-You will note that the asio::placeholders::error placeholder is not specified
-here, as the <tt>print</tt> member function does not accept an error object as
-a parameter.
-
-\until }
-
-In the class destructor we will print out the final value of
-the counter.
-
-\until }
-
-The <tt>print</tt> member function is very similar to the
-<tt>print</tt> function from tutorial Timer.3, except that it now operates on
-the class data members instead of having the timer and counter passed in as
-parameters.
-
-\until };
-
-The <tt>main</tt> function is much simpler than before, as it
-now declares a local <tt>printer</tt> object before running the io_service as
-normal.
-
-\until }
-
-See the \ref tuttimer4src "full source listing" \n
-Return to the \ref index "tutorial index" \n
-Previous: \ref tuttimer3 \n
-Next: \ref tuttimer5 \n
-
-*/
-
-/**
-\page tuttimer4src Source listing for Timer.4
-\include timer4/timer.cpp
-Return to \ref tuttimer4
-*/
-
-/**
-\page tuttimer5 Timer.5 - Synchronising handlers in multithreaded programs
-
-This tutorial demonstrates the use of the asio::io_service::strand class to
-synchronise callback handlers in a multithreaded program.
-
-The previous four tutorials avoided the issue of handler synchronisation by
-calling the asio::io_service::run() function from one thread only. As you
-already know, the asio library provides a guarantee that callback handlers will
-<b>only</b> be called from threads that are currently calling
-asio::io_service::run(). Consequently, calling asio::io_service::run() from
-only one thread ensures that callback handlers cannot run concurrently.
-
-The single threaded approach is usually the best place to start when
-developing applications using asio. The downside is the limitations it places
-on programs, particularly servers, including:
-
-<ul>
-<li>Poor responsiveness when handlers can take a long time to complete.</li>
-<li>An inability to scale on multiprocessor systems.</li>
-</ul>
-
-If you find yourself running into these limitations, an alternative approach
-is to have a pool of threads calling asio::io_service::run(). However, as this
-allows handlers to execute concurrently, we need a method of synchronisation
-when handlers might be accessing a shared, thread-unsafe resource.
-
-\dontinclude timer5/timer.cpp
-\skip #include
-
-\until posix_time.hpp
-
-We start by defining a class called <tt>printer</tt>, similar
-to the class in the previous tutorial. This class will extend the previous
-tutorial by running two timers in parallel.
-
-\until public
-
-In addition to initialising a pair of asio::deadline_timer members, the
-constructor initialises the <tt>strand_</tt> member, an object of type
-asio::io_service::strand.
-
-An asio::io_service::strand is an executor that guarantees that, for those
-handlers that are dispatched through it, an executing handler will be allowed
-to complete before the next one is started. This is guaranteed irrespective of
-the number of threads that are calling asio::io_service::run(). Of course, the
-handlers may still execute concurrently with other handlers that were
-<b>not</b> dispatched through an asio::io_service::strand, or were dispatched
-through a different asio::io_service::strand object.
-
-\until {
-
-When initiating the asynchronous operations, each callback handler is "bound"
-to an asio::io_service::strand object. The
-asio::io_service::strand::bind_executor() function returns a new handler that
-automatically dispatches its contained handler through the
-asio::io_service::strand object. By binding the handlers to the same
-asio::io_service::strand, we are ensuring that they cannot execute
-concurrently.
-
-\until }
-\until }
-
-In a multithreaded program, the handlers for asynchronous
-operations should be synchronised if they access shared resources. In this
-tutorial, the shared resources used by the handlers (<tt>print1</tt> and
-<tt>print2</tt>) are <tt>std::cout</tt> and the <tt>count_</tt> data member.
-
-\until };
-
-The <tt>main</tt> function now causes asio::io_service::run() to
-be called from two threads: the main thread and one additional thread. This is
-accomplished using an asio::thread object.
-
-Just as it would with a call from a single thread, concurrent calls to
-asio::io_service::run() will continue to execute while there is "work" left to
-do. The background thread will not exit until all asynchronous operations have
-completed.
-
-\until }
-
-See the \ref tuttimer5src "full source listing" \n
-Return to the \ref index "tutorial index" \n
-Previous: \ref tuttimer4 \n
-
-*/
-
-/**
-\page tuttimer5src Source listing for Timer.5
-\include timer5/timer.cpp
-Return to \ref tuttimer5
-*/
diff --git a/3rdparty/asio/src/examples/cpp03/windows/.gitignore b/3rdparty/asio/src/examples/cpp03/windows/.gitignore
deleted file mode 100644
index 180ba886e58..00000000000
--- a/3rdparty/asio/src/examples/cpp03/windows/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-.deps
-.dirstamp
-*.o
-*.obj
-*.exe
-server
-*.ilk
-*.manifest
-*.pdb
-*.tds
diff --git a/3rdparty/asio/src/examples/cpp03/windows/transmit_file.cpp b/3rdparty/asio/src/examples/cpp03/windows/transmit_file.cpp
deleted file mode 100644
index 8ca9e1790fc..00000000000
--- a/3rdparty/asio/src/examples/cpp03/windows/transmit_file.cpp
+++ /dev/null
@@ -1,171 +0,0 @@
-//
-// transmit_file.cpp
-// ~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#include <ctime>
-#include <iostream>
-#include <string>
-#include <boost/bind.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include "asio.hpp"
-
-#if defined(ASIO_HAS_WINDOWS_OVERLAPPED_PTR)
-
-using asio::ip::tcp;
-using asio::windows::overlapped_ptr;
-using asio::windows::random_access_handle;
-
-// A wrapper for the TransmitFile overlapped I/O operation.
-template <typename Handler>
-void transmit_file(tcp::socket& socket,
- random_access_handle& file, Handler handler)
-{
- // Construct an OVERLAPPED-derived object to contain the handler.
- overlapped_ptr overlapped(socket.get_executor().context(), handler);
-
- // Initiate the TransmitFile operation.
- BOOL ok = ::TransmitFile(socket.native_handle(),
- file.native_handle(), 0, 0, overlapped.get(), 0, 0);
- DWORD last_error = ::GetLastError();
-
- // Check if the operation completed immediately.
- if (!ok && last_error != ERROR_IO_PENDING)
- {
- // The operation completed immediately, so a completion notification needs
- // to be posted. When complete() is called, ownership of the OVERLAPPED-
- // derived object passes to the io_context.
- asio::error_code ec(last_error,
- asio::error::get_system_category());
- overlapped.complete(ec, 0);
- }
- else
- {
- // The operation was successfully initiated, so ownership of the
- // OVERLAPPED-derived object has passed to the io_context.
- overlapped.release();
- }
-}
-
-class connection
- : public boost::enable_shared_from_this<connection>
-{
-public:
- typedef boost::shared_ptr<connection> pointer;
-
- static pointer create(asio::io_context& io_context,
- const std::string& filename)
- {
- return pointer(new connection(io_context, filename));
- }
-
- tcp::socket& socket()
- {
- return socket_;
- }
-
- void start()
- {
- asio::error_code ec;
- file_.assign(::CreateFile(filename_.c_str(), GENERIC_READ, 0, 0,
- OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 0), ec);
- if (file_.is_open())
- {
- transmit_file(socket_, file_,
- boost::bind(&connection::handle_write, shared_from_this(),
- asio::placeholders::error,
- asio::placeholders::bytes_transferred));
- }
- }
-
-private:
- connection(asio::io_context& io_context, const std::string& filename)
- : socket_(io_context),
- filename_(filename),
- file_(io_context)
- {
- }
-
- void handle_write(const asio::error_code& /*error*/,
- size_t /*bytes_transferred*/)
- {
- asio::error_code ignored_ec;
- socket_.shutdown(tcp::socket::shutdown_both, ignored_ec);
- }
-
- tcp::socket socket_;
- std::string filename_;
- random_access_handle file_;
-};
-
-class server
-{
-public:
- server(asio::io_context& io_context,
- unsigned short port, const std::string& filename)
- : acceptor_(io_context, tcp::endpoint(tcp::v4(), port)),
- filename_(filename)
- {
- start_accept();
- }
-
-private:
- void start_accept()
- {
- connection::pointer new_connection =
- connection::create(acceptor_.get_executor().context(), filename_);
-
- acceptor_.async_accept(new_connection->socket(),
- boost::bind(&server::handle_accept, this, new_connection,
- asio::placeholders::error));
- }
-
- void handle_accept(connection::pointer new_connection,
- const asio::error_code& error)
- {
- if (!error)
- {
- new_connection->start();
- }
-
- start_accept();
- }
-
- tcp::acceptor acceptor_;
- std::string filename_;
-};
-
-int main(int argc, char* argv[])
-{
- try
- {
- if (argc != 3)
- {
- std::cerr << "Usage: transmit_file <port> <filename>\n";
- return 1;
- }
-
- asio::io_context io_context;
-
- using namespace std; // For atoi.
- server s(io_context, atoi(argv[1]), argv[2]);
-
- io_context.run();
- }
- catch (std::exception& e)
- {
- std::cerr << e.what() << std::endl;
- }
-
- return 0;
-}
-
-#else // defined(ASIO_HAS_WINDOWS_OVERLAPPED_PTR)
-# error Overlapped I/O not available on this platform
-#endif // defined(ASIO_HAS_WINDOWS_OVERLAPPED_PTR)