passenger 5.1.12 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (824) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +18 -1
  3. data/Rakefile +4 -1
  4. data/build/agent.rb +2 -2
  5. data/build/apache2.rb +17 -10
  6. data/build/basics.rb +18 -4
  7. data/build/common_library.rb +7 -3
  8. data/build/cxx_tests.rb +2 -7
  9. data/build/misc.rb +3 -1
  10. data/build/nginx.rb +11 -5
  11. data/build/oxt_tests.rb +0 -3
  12. data/build/packaging.rb +3 -2
  13. data/build/schema_printer.rb +103 -0
  14. data/build/support/cplusplus.rb +2 -2
  15. data/build/support/cxx_dependency_map.rb +2575 -868
  16. data/dev/ci/lib/functions.sh +1 -1
  17. data/dev/ci/lib/set-container-envvars.sh +1 -1
  18. data/dev/ci/lib/setup-container.sh +1 -1
  19. data/dev/ci/run-tests-natively +1 -1
  20. data/dev/ci/run-tests-with-docker +1 -1
  21. data/dev/ci/scripts/debug-console-wrapper.sh +1 -1
  22. data/dev/ci/scripts/docker-entrypoint-stage2.sh +1 -1
  23. data/dev/ci/scripts/docker-entrypoint.sh +1 -1
  24. data/dev/ci/scripts/inituidgid +1 -1
  25. data/dev/ci/scripts/run-tests-natively-stage2.sh +1 -1
  26. data/dev/ci/scripts/setup-host-natively.sh +1 -1
  27. data/dev/ci/setup-host +1 -1
  28. data/dev/ci/tests/apache2/run +1 -1
  29. data/dev/ci/tests/apache2/setup +1 -1
  30. data/dev/ci/tests/cxx/run +1 -1
  31. data/dev/ci/tests/cxx/setup +1 -1
  32. data/dev/ci/tests/debian/Jenkinsfile +0 -1
  33. data/dev/ci/tests/debian/run +1 -1
  34. data/dev/ci/tests/nginx-dynamic/run +1 -1
  35. data/dev/ci/tests/nginx-dynamic/setup +1 -1
  36. data/dev/ci/tests/nginx/run +1 -1
  37. data/dev/ci/tests/nginx/setup +1 -1
  38. data/dev/ci/tests/nodejs/run +1 -1
  39. data/dev/ci/tests/nodejs/setup +1 -1
  40. data/dev/ci/tests/rpm/run +1 -1
  41. data/dev/ci/tests/ruby/run +1 -1
  42. data/dev/ci/tests/ruby/setup +1 -1
  43. data/dev/ci/tests/source-packaging/run +1 -1
  44. data/dev/ci/tests/source-packaging/setup +1 -1
  45. data/dev/ci/tests/standalone/run +1 -1
  46. data/dev/ci/tests/standalone/setup +1 -1
  47. data/dev/configkit-schemas/index.json +1708 -0
  48. data/dev/configkit-schemas/update_schema_inline_comments.rb +118 -0
  49. data/dev/copy_boost_headers +13 -1
  50. data/dev/index_cxx_dependencies.rb +20 -7
  51. data/dev/vagrant/provision.sh +1 -1
  52. data/resources/mime.types +1 -0
  53. data/resources/templates/standalone/http.erb +1 -6
  54. data/src/agent/Core/AdminPanelConnector.h +550 -0
  55. data/src/agent/Core/ApiServer.h +159 -97
  56. data/src/agent/Core/ApplicationPool/Group.h +2 -0
  57. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +3 -2
  58. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +109 -0
  59. data/src/agent/Core/ApplicationPool/Implementation.cpp +5 -3
  60. data/src/agent/Core/ApplicationPool/Options.h +5 -6
  61. data/src/agent/Core/ApplicationPool/Pool.h +59 -2
  62. data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +3 -3
  63. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +2 -2
  64. data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +6 -0
  65. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +129 -0
  66. data/src/agent/Core/Config.h +475 -0
  67. data/src/agent/Core/ConfigChange.cpp +349 -0
  68. data/src/agent/Core/ConfigChange.h +54 -0
  69. data/src/agent/Core/Controller.h +35 -3
  70. data/src/agent/Core/Controller/CheckoutSession.cpp +1 -1
  71. data/src/agent/Core/Controller/Config.cpp +0 -2
  72. data/src/agent/Core/Controller/Config.h +168 -104
  73. data/src/agent/Core/Controller/ForwardResponse.cpp +1 -1
  74. data/src/agent/Core/Controller/InitRequest.cpp +14 -15
  75. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +34 -44
  76. data/src/agent/Core/Controller/Request.h +0 -1
  77. data/src/agent/Core/CoreMain.cpp +236 -349
  78. data/src/agent/Core/OptionParser.h +75 -89
  79. data/src/agent/Core/SecurityUpdateChecker.h +263 -100
  80. data/src/agent/Core/SpawningKit/Config.h +6 -2
  81. data/src/agent/Core/SpawningKit/Spawner.h +0 -45
  82. data/src/agent/Core/SpawningKit/UserSwitchingRules.h +1 -0
  83. data/src/agent/Shared/ApiAccountUtils.h +318 -0
  84. data/src/agent/Shared/ApiServerUtils.h +3 -104
  85. data/src/agent/Shared/Fundamentals/Initialization.cpp +81 -44
  86. data/src/agent/Shared/Fundamentals/Initialization.h +12 -7
  87. data/src/agent/TempDirToucher/TempDirToucherMain.cpp +21 -0
  88. data/src/agent/Watchdog/AgentWatcher.cpp +1 -1
  89. data/src/agent/Watchdog/ApiServer.h +100 -14
  90. data/src/agent/Watchdog/Config.h +340 -0
  91. data/src/agent/Watchdog/CoreWatcher.cpp +27 -13
  92. data/src/agent/Watchdog/InstanceDirToucher.cpp +1 -1
  93. data/src/agent/Watchdog/WatchdogMain.cpp +190 -206
  94. data/src/apache2_module/Bucket.cpp +4 -0
  95. data/src/apache2_module/Bucket.h +7 -3
  96. data/src/apache2_module/CBindings.cpp +49 -0
  97. data/src/apache2_module/Config.cpp +242 -0
  98. data/src/apache2_module/Config.h +109 -0
  99. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +485 -0
  100. data/src/apache2_module/{ConfigurationCommands.cpp.cxxcodebuilder → ConfigGeneral/AutoGeneratedDefinitions.cpp.cxxcodebuilder} +29 -15
  101. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +298 -0
  102. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp.cxxcodebuilder +171 -0
  103. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +854 -0
  104. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp.cxxcodebuilder +188 -0
  105. data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +610 -0
  106. data/src/apache2_module/ConfigGeneral/SetterFuncs.h +65 -0
  107. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +174 -0
  108. data/src/apache2_module/{MergeDirConfig.cpp.cxxcodebuilder → DirConfig/AutoGeneratedCreateFunction.cpp.cxxcodebuilder} +54 -32
  109. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +113 -0
  110. data/src/apache2_module/{SetHeaders.cpp.cxxcodebuilder → DirConfig/AutoGeneratedHeaderSerialization.cpp.cxxcodebuilder} +34 -23
  111. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +426 -0
  112. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp.cxxcodebuilder +165 -0
  113. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +269 -0
  114. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp.cxxcodebuilder +148 -0
  115. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +534 -0
  116. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +230 -0
  117. data/src/apache2_module/DirectoryMapper.h +19 -16
  118. data/src/apache2_module/Hooks.cpp +124 -138
  119. data/src/apache2_module/Hooks.h +9 -14
  120. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp +263 -0
  121. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp.cxxcodebuilder +152 -0
  122. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +299 -0
  123. data/src/apache2_module/{ConfigurationFields.hpp.cxxcodebuilder → ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder} +105 -18
  124. data/src/apache2_module/Utils.h +215 -0
  125. data/src/apache2_module/mod_passenger.c +16 -8
  126. data/src/cxx_supportlib/AppTypes.h +2 -0
  127. data/src/cxx_supportlib/ConfigKit/ConfigKit.h +1 -1
  128. data/src/cxx_supportlib/ConfigKit/DummyTranslator.h +8 -8
  129. data/src/cxx_supportlib/ConfigKit/IN_PRACTICE.md +7 -41
  130. data/src/cxx_supportlib/ConfigKit/PrefixTranslator.h +12 -66
  131. data/src/cxx_supportlib/ConfigKit/Schema.h +62 -11
  132. data/src/cxx_supportlib/ConfigKit/{ValidationUtils.h → SchemaUtils.h} +12 -3
  133. data/src/cxx_supportlib/ConfigKit/Store.h +17 -9
  134. data/src/cxx_supportlib/ConfigKit/SubComponentUtils.h +2 -1
  135. data/src/cxx_supportlib/ConfigKit/TableTranslator.h +13 -70
  136. data/src/cxx_supportlib/ConfigKit/Translator.h +125 -0
  137. data/src/cxx_supportlib/Constants.h +1 -3
  138. data/src/cxx_supportlib/FileTools/FileManip.cpp +297 -0
  139. data/src/cxx_supportlib/FileTools/FileManip.h +162 -0
  140. data/src/cxx_supportlib/{Utils → FileTools}/LargeFiles.cpp +6 -3
  141. data/src/cxx_supportlib/{Utils → FileTools}/LargeFiles.h +7 -5
  142. data/src/cxx_supportlib/FileTools/PathManip.cpp +240 -0
  143. data/src/cxx_supportlib/FileTools/PathManip.h +91 -0
  144. data/src/cxx_supportlib/FileTools/PathManipCBindings.cpp +62 -0
  145. data/src/{apache2_module/Configuration.h → cxx_supportlib/FileTools/PathManipCBindings.h} +12 -19
  146. data/src/cxx_supportlib/Hooks.h +19 -16
  147. data/src/cxx_supportlib/InstanceDirectory.h +11 -0
  148. data/src/cxx_supportlib/JsonTools/Autocast.h +79 -0
  149. data/src/cxx_supportlib/JsonTools/CBindings.cpp +364 -0
  150. data/src/cxx_supportlib/JsonTools/CBindings.h +101 -0
  151. data/src/cxx_supportlib/LoggingKit/Config.h +13 -0
  152. data/src/cxx_supportlib/LoggingKit/Context.h +5 -2
  153. data/src/cxx_supportlib/LoggingKit/Forward.h +0 -1
  154. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +12 -4
  155. data/src/cxx_supportlib/ResourceLocator.h +15 -0
  156. data/src/cxx_supportlib/ServerKit/Config.h +156 -0
  157. data/src/cxx_supportlib/ServerKit/Context.h +59 -38
  158. data/src/cxx_supportlib/ServerKit/FileBufferedChannel.h +3 -2
  159. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +2 -2
  160. data/src/cxx_supportlib/ServerKit/HttpServer.h +16 -2
  161. data/src/cxx_supportlib/ServerKit/Server.h +32 -15
  162. data/src/cxx_supportlib/Utils.cpp +0 -441
  163. data/src/cxx_supportlib/Utils.h +0 -158
  164. data/src/cxx_supportlib/Utils/Curl.h +1 -0
  165. data/src/cxx_supportlib/Utils/ProcessMetricsCollector.h +1 -0
  166. data/src/cxx_supportlib/Utils/StrIntUtilsNoStrictAliasing.cpp +2 -0
  167. data/src/cxx_supportlib/Utils/VariantMap.h +31 -0
  168. data/src/cxx_supportlib/WatchdogLauncher.cpp +7 -79
  169. data/src/cxx_supportlib/WatchdogLauncher.h +50 -53
  170. data/src/cxx_supportlib/WebSocketCommandReverseServer.h +981 -0
  171. data/src/cxx_supportlib/oxt/macros.hpp +9 -0
  172. data/src/cxx_supportlib/vendor-copy/websocketpp/COPYING +145 -0
  173. data/src/cxx_supportlib/vendor-copy/websocketpp/changelog.md +342 -0
  174. data/src/cxx_supportlib/vendor-copy/websocketpp/readme.md +49 -0
  175. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/base64/base64.hpp +178 -0
  176. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/client.hpp +33 -0
  177. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/close.hpp +342 -0
  178. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/asio.hpp +131 -0
  179. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/asio_ssl.hpp +39 -0
  180. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/chrono.hpp +68 -0
  181. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/connection_hdl.hpp +52 -0
  182. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/cpp11.hpp +162 -0
  183. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/functional.hpp +105 -0
  184. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/md5.hpp +448 -0
  185. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/memory.hpp +89 -0
  186. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/network.hpp +106 -0
  187. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/platforms.hpp +46 -0
  188. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/random.hpp +82 -0
  189. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/regex.hpp +59 -0
  190. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/stdint.hpp +73 -0
  191. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/system_error.hpp +84 -0
  192. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/thread.hpp +84 -0
  193. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/time.hpp +56 -0
  194. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/type_traits.hpp +65 -0
  195. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/concurrency/basic.hpp +46 -0
  196. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/concurrency/none.hpp +80 -0
  197. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/asio.hpp +77 -0
  198. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/asio_client.hpp +77 -0
  199. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/asio_no_tls.hpp +73 -0
  200. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/asio_no_tls_client.hpp +73 -0
  201. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/boost_config.hpp +72 -0
  202. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/core.hpp +285 -0
  203. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/core_client.hpp +294 -0
  204. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/debug.hpp +286 -0
  205. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/debug_asio.hpp +77 -0
  206. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/debug_asio_no_tls.hpp +73 -0
  207. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/minimal_client.hpp +72 -0
  208. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/minimal_server.hpp +312 -0
  209. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/connection.hpp +1651 -0
  210. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/connection_base.hpp +38 -0
  211. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/endpoint.hpp +700 -0
  212. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/endpoint_base.hpp +38 -0
  213. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/error.hpp +277 -0
  214. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/extensions/extension.hpp +102 -0
  215. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/extensions/permessage_deflate/disabled.hpp +128 -0
  216. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/extensions/permessage_deflate/enabled.hpp +752 -0
  217. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/frame.hpp +861 -0
  218. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/constants.hpp +308 -0
  219. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/impl/parser.hpp +196 -0
  220. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/impl/request.hpp +191 -0
  221. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/impl/response.hpp +266 -0
  222. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/parser.hpp +619 -0
  223. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/request.hpp +124 -0
  224. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/response.hpp +188 -0
  225. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/impl/connection_impl.hpp +2372 -0
  226. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/impl/endpoint_impl.hpp +269 -0
  227. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/impl/utilities_impl.hpp +87 -0
  228. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/logger/basic.hpp +199 -0
  229. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/logger/levels.hpp +203 -0
  230. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/logger/stub.hpp +119 -0
  231. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/logger/syslog.hpp +146 -0
  232. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/message_buffer/alloc.hpp +105 -0
  233. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/message_buffer/message.hpp +340 -0
  234. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/message_buffer/pool.hpp +229 -0
  235. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/base.hpp +299 -0
  236. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/hybi00.hpp +462 -0
  237. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/hybi07.hpp +78 -0
  238. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/hybi08.hpp +83 -0
  239. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/hybi13.hpp +1056 -0
  240. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/processor.hpp +407 -0
  241. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/random/none.hpp +60 -0
  242. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/random/random_device.hpp +80 -0
  243. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/roles/client_endpoint.hpp +173 -0
  244. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/roles/server_endpoint.hpp +190 -0
  245. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/server.hpp +33 -0
  246. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/sha1/sha1.hpp +189 -0
  247. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/base.hpp +232 -0
  248. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/connection.hpp +1204 -0
  249. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/endpoint.hpp +1147 -0
  250. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/security/base.hpp +159 -0
  251. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/security/none.hpp +370 -0
  252. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/security/tls.hpp +484 -0
  253. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/base/connection.hpp +238 -0
  254. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/base/endpoint.hpp +77 -0
  255. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/debug/base.hpp +104 -0
  256. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/debug/connection.hpp +412 -0
  257. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/debug/endpoint.hpp +140 -0
  258. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/iostream/base.hpp +133 -0
  259. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/iostream/connection.hpp +714 -0
  260. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/iostream/endpoint.hpp +222 -0
  261. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/stub/base.hpp +95 -0
  262. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/stub/connection.hpp +286 -0
  263. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/stub/endpoint.hpp +140 -0
  264. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/uri.hpp +355 -0
  265. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/utf8_validator.hpp +154 -0
  266. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/utilities.hpp +182 -0
  267. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/version.hpp +61 -0
  268. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +121 -0
  269. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +96 -0
  270. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +951 -0
  271. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +520 -0
  272. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_io_object.hpp +258 -0
  273. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +942 -0
  274. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +567 -0
  275. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +697 -0
  276. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +386 -0
  277. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +1519 -0
  278. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +1137 -0
  279. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_iostream.hpp +288 -0
  280. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_streambuf.hpp +569 -0
  281. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +854 -0
  282. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf.hpp +371 -0
  283. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf_fwd.hpp +35 -0
  284. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +521 -0
  285. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2241 -0
  286. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream.hpp +246 -0
  287. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream_fwd.hpp +27 -0
  288. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream.hpp +260 -0
  289. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream_fwd.hpp +27 -0
  290. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream.hpp +238 -0
  291. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream_fwd.hpp +27 -0
  292. data/src/cxx_supportlib/vendor-modified/boost/asio/buffers_iterator.hpp +483 -0
  293. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +220 -0
  294. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +825 -0
  295. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +330 -0
  296. data/src/cxx_supportlib/vendor-modified/boost/asio/datagram_socket_service.hpp +438 -0
  297. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer.hpp +40 -0
  298. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer_service.hpp +173 -0
  299. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/addressof.hpp +40 -0
  300. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array.hpp +40 -0
  301. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array_fwd.hpp +34 -0
  302. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/assert.hpp +32 -0
  303. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/atomic_count.hpp +47 -0
  304. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_completion_cond.hpp +70 -0
  305. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +491 -0
  306. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_resize_guard.hpp +68 -0
  307. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_sequence_adapter.hpp +385 -0
  308. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +128 -0
  309. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/call_stack.hpp +127 -0
  310. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono_time_traits.hpp +192 -0
  311. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_handler.hpp +83 -0
  312. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +1050 -0
  313. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/consuming_buffers.hpp +294 -0
  314. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstdint.hpp +48 -0
  315. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/date_time_fwd.hpp +34 -0
  316. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +229 -0
  317. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dependent_type.hpp +38 -0
  318. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_ops.hpp +119 -0
  319. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_read_op.hpp +121 -0
  320. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_write_op.hpp +121 -0
  321. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +208 -0
  322. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +244 -0
  323. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/event.hpp +50 -0
  324. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/eventfd_select_interrupter.hpp +85 -0
  325. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fd_set_adapter.hpp +41 -0
  326. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fenced_block.hpp +82 -0
  327. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/function.hpp +40 -0
  328. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_arm_fenced_block.hpp +91 -0
  329. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_hppa_fenced_block.hpp +68 -0
  330. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_sync_fenced_block.hpp +65 -0
  331. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_x86_fenced_block.hpp +99 -0
  332. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +82 -0
  333. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_cont_helpers.hpp +45 -0
  334. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_invoke_helpers.hpp +57 -0
  335. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_tracking.hpp +161 -0
  336. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +480 -0
  337. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/hash_map.hpp +333 -0
  338. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/buffer_sequence_adapter.ipp +120 -0
  339. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +453 -0
  340. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +80 -0
  341. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +432 -0
  342. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +78 -0
  343. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +688 -0
  344. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/eventfd_select_interrupter.ipp +167 -0
  345. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +307 -0
  346. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +82 -0
  347. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +498 -0
  348. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/pipe_select_interrupter.ipp +126 -0
  349. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_event.ipp +49 -0
  350. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_mutex.ipp +48 -0
  351. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_thread.ipp +76 -0
  352. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_tss_ptr.ipp +48 -0
  353. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +210 -0
  354. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_serial_port_service.ipp +153 -0
  355. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +269 -0
  356. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/resolver_service_base.ipp +132 -0
  357. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +89 -0
  358. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +315 -0
  359. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.hpp +90 -0
  360. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.ipp +190 -0
  361. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/signal_set_service.ipp +649 -0
  362. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +3470 -0
  363. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +178 -0
  364. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.hpp +120 -0
  365. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.ipp +178 -0
  366. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/task_io_service.hpp +80 -0
  367. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/task_io_service.ipp +476 -0
  368. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/throw_error.ipp +47 -0
  369. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +86 -0
  370. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_set.ipp +103 -0
  371. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_control.hpp +136 -0
  372. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/keyword_tss_ptr.hpp +72 -0
  373. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +222 -0
  374. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/limits.hpp +26 -0
  375. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/local_free_on_block_exit.hpp +61 -0
  376. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/macos_fenced_block.hpp +63 -0
  377. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +31 -0
  378. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/mutex.hpp +50 -0
  379. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/noncopyable.hpp +45 -0
  380. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_event.hpp +90 -0
  381. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_fenced_block.hpp +47 -0
  382. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_mutex.hpp +66 -0
  383. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_reactor.hpp +69 -0
  384. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_signal_blocker.hpp +71 -0
  385. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_socket_service.hpp +500 -0
  386. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_static_mutex.hpp +62 -0
  387. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_thread.hpp +63 -0
  388. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_tss_ptr.hpp +70 -0
  389. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/object_pool.hpp +148 -0
  390. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/old_win_sdk_compat.hpp +216 -0
  391. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/op_queue.hpp +158 -0
  392. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/operation.hpp +40 -0
  393. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pipe_select_interrupter.hpp +91 -0
  394. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +131 -0
  395. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_event.hpp +128 -0
  396. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_fd_set_adapter.hpp +120 -0
  397. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_mutex.hpp +78 -0
  398. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_signal_blocker.hpp +87 -0
  399. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_static_mutex.hpp +66 -0
  400. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_thread.hpp +107 -0
  401. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_tss_ptr.hpp +81 -0
  402. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +166 -0
  403. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +324 -0
  404. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_null_buffers_op.hpp +90 -0
  405. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_serial_port_service.hpp +236 -0
  406. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_accept_op.hpp +138 -0
  407. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_connect_op.hpp +108 -0
  408. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recv_op.hpp +125 -0
  409. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvfrom_op.hpp +135 -0
  410. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvmsg_op.hpp +127 -0
  411. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +122 -0
  412. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_sendto_op.hpp +125 -0
  413. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +460 -0
  414. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +452 -0
  415. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor.hpp +32 -0
  416. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_fwd.hpp +42 -0
  417. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +63 -0
  418. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +170 -0
  419. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/regex_fwd.hpp +35 -0
  420. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +123 -0
  421. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_op.hpp +133 -0
  422. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service.hpp +131 -0
  423. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service_base.hpp +131 -0
  424. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_lock.hpp +103 -0
  425. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_ptr.hpp +81 -0
  426. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_interrupter.hpp +48 -0
  427. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +221 -0
  428. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/service_registry.hpp +146 -0
  429. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/shared_ptr.hpp +40 -0
  430. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_blocker.hpp +46 -0
  431. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_handler.hpp +84 -0
  432. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_init.hpp +49 -0
  433. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_op.hpp +51 -0
  434. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_set_service.hpp +218 -0
  435. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_holder.hpp +100 -0
  436. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_ops.hpp +336 -0
  437. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_option.hpp +318 -0
  438. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_select_interrupter.hpp +93 -0
  439. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_types.hpp +410 -0
  440. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/solaris_fenced_block.hpp +63 -0
  441. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/static_mutex.hpp +54 -0
  442. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_event.hpp +178 -0
  443. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_fenced_block.hpp +64 -0
  444. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_mutex.hpp +75 -0
  445. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_static_mutex.hpp +83 -0
  446. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_thread.hpp +67 -0
  447. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_service.hpp +144 -0
  448. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/task_io_service.hpp +203 -0
  449. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/task_io_service_operation.hpp +78 -0
  450. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/task_io_service_thread_info.hpp +42 -0
  451. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread.hpp +58 -0
  452. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +93 -0
  453. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_error.hpp +55 -0
  454. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_exception.hpp +53 -0
  455. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +333 -0
  456. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_base.hpp +70 -0
  457. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +95 -0
  458. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_set.hpp +68 -0
  459. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler.hpp +35 -0
  460. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler_fwd.hpp +42 -0
  461. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/tss_ptr.hpp +71 -0
  462. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/type_traits.hpp +60 -0
  463. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/variadic_templates.hpp +63 -0
  464. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_handler.hpp +85 -0
  465. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +47 -0
  466. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/weak_ptr.hpp +40 -0
  467. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/win_iocp_serial_port_service.hpp +230 -0
  468. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/winsock_init.hpp +130 -0
  469. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +293 -0
  470. data/src/cxx_supportlib/vendor-modified/boost/asio/error.hpp +345 -0
  471. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/basic_endpoint.hpp +195 -0
  472. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/datagram_protocol.hpp +125 -0
  473. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/endpoint.hpp +135 -0
  474. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/impl/endpoint.ipp +111 -0
  475. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/raw_protocol.hpp +123 -0
  476. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/seq_packet_protocol.hpp +124 -0
  477. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/stream_protocol.hpp +129 -0
  478. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_alloc_hook.hpp +83 -0
  479. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_continuation_hook.hpp +56 -0
  480. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_invoke_hook.hpp +87 -0
  481. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_type.hpp +114 -0
  482. data/src/cxx_supportlib/vendor-modified/boost/asio/high_resolution_timer.hpp +65 -0
  483. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +360 -0
  484. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +340 -0
  485. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +432 -0
  486. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/error.ipp +130 -0
  487. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +79 -0
  488. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_service.hpp +156 -0
  489. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_service.ipp +157 -0
  490. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +755 -0
  491. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +812 -0
  492. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +1149 -0
  493. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.hpp +61 -0
  494. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.ipp +556 -0
  495. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +355 -0
  496. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.cpp +25 -0
  497. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +73 -0
  498. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +179 -0
  499. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +767 -0
  500. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +827 -0
  501. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service.hpp +772 -0
  502. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address.hpp +202 -0
  503. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4.hpp +243 -0
  504. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6.hpp +248 -0
  505. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_endpoint.hpp +265 -0
  506. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +270 -0
  507. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_entry.hpp +96 -0
  508. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_iterator.hpp +262 -0
  509. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_query.hpp +246 -0
  510. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/endpoint.hpp +141 -0
  511. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/impl/endpoint.ipp +206 -0
  512. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +571 -0
  513. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/host_name.hpp +44 -0
  514. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/icmp.hpp +117 -0
  515. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.hpp +55 -0
  516. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.ipp +228 -0
  517. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.hpp +55 -0
  518. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.ipp +180 -0
  519. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.hpp +55 -0
  520. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +300 -0
  521. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/basic_endpoint.hpp +57 -0
  522. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/host_name.ipp +56 -0
  523. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/multicast.hpp +193 -0
  524. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_query_base.hpp +132 -0
  525. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_service.hpp +178 -0
  526. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/tcp.hpp +157 -0
  527. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/udp.hpp +113 -0
  528. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/unicast.hpp +72 -0
  529. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/v6_only.hpp +71 -0
  530. data/src/cxx_supportlib/vendor-modified/boost/asio/is_read_buffered.hpp +61 -0
  531. data/src/cxx_supportlib/vendor-modified/boost/asio/is_write_buffered.hpp +61 -0
  532. data/src/cxx_supportlib/vendor-modified/boost/asio/local/basic_endpoint.hpp +241 -0
  533. data/src/cxx_supportlib/vendor-modified/boost/asio/local/connect_pair.hpp +106 -0
  534. data/src/cxx_supportlib/vendor-modified/boost/asio/local/datagram_protocol.hpp +82 -0
  535. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/endpoint.hpp +135 -0
  536. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +130 -0
  537. data/src/cxx_supportlib/vendor-modified/boost/asio/local/stream_protocol.hpp +92 -0
  538. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +125 -0
  539. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +492 -0
  540. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +364 -0
  541. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor_base.hpp +99 -0
  542. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor.hpp +39 -0
  543. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor_service.hpp +262 -0
  544. data/src/cxx_supportlib/vendor-modified/boost/asio/raw_socket_service.hpp +438 -0
  545. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +633 -0
  546. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +666 -0
  547. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +925 -0
  548. data/src/cxx_supportlib/vendor-modified/boost/asio/seq_packet_socket_service.hpp +386 -0
  549. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port.hpp +38 -0
  550. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_base.hpp +169 -0
  551. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_service.hpp +255 -0
  552. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set.hpp +30 -0
  553. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set_service.hpp +136 -0
  554. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_acceptor_service.hpp +308 -0
  555. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_base.hpp +522 -0
  556. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +267 -0
  557. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl.hpp +30 -0
  558. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/basic_context.hpp +42 -0
  559. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context.hpp +789 -0
  560. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +194 -0
  561. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_service.hpp +42 -0
  562. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +112 -0
  563. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +166 -0
  564. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +70 -0
  565. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +327 -0
  566. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +166 -0
  567. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +351 -0
  568. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_init.hpp +103 -0
  569. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_types.hpp +30 -0
  570. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/password_callback.hpp +74 -0
  571. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +75 -0
  572. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +62 -0
  573. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +128 -0
  574. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/verify_callback.hpp +70 -0
  575. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +75 -0
  576. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/error.hpp +115 -0
  577. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.hpp +73 -0
  578. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +1177 -0
  579. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/error.ipp +102 -0
  580. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/rfc2818_verification.ipp +168 -0
  581. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/src.hpp +28 -0
  582. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/basic_context.hpp +436 -0
  583. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/context_service.hpp +176 -0
  584. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/detail/openssl_context_service.hpp +396 -0
  585. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/detail/openssl_operation.hpp +526 -0
  586. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/detail/openssl_stream_service.hpp +573 -0
  587. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/stream.hpp +503 -0
  588. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/stream_service.hpp +186 -0
  589. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/rfc2818_verification.hpp +102 -0
  590. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +758 -0
  591. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_base.hpp +54 -0
  592. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_service.hpp +42 -0
  593. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_context.hpp +75 -0
  594. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_mode.hpp +65 -0
  595. data/src/cxx_supportlib/vendor-modified/boost/asio/steady_timer.hpp +63 -0
  596. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +254 -0
  597. data/src/cxx_supportlib/vendor-modified/boost/asio/stream_socket_service.hpp +382 -0
  598. data/src/cxx_supportlib/vendor-modified/boost/asio/streambuf.hpp +35 -0
  599. data/src/cxx_supportlib/vendor-modified/boost/asio/system_timer.hpp +59 -0
  600. data/src/cxx_supportlib/vendor-modified/boost/asio/time_traits.hpp +88 -0
  601. data/src/cxx_supportlib/vendor-modified/boost/asio/unyield.hpp +21 -0
  602. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +94 -0
  603. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +23 -0
  604. data/src/cxx_supportlib/vendor-modified/boost/asio/wait_traits.hpp +43 -0
  605. data/src/cxx_supportlib/vendor-modified/boost/asio/waitable_timer_service.hpp +170 -0
  606. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_handle.hpp +283 -0
  607. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +180 -0
  608. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +378 -0
  609. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +361 -0
  610. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle.hpp +40 -0
  611. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle_service.hpp +179 -0
  612. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_ptr.hpp +118 -0
  613. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle.hpp +39 -0
  614. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle_service.hpp +222 -0
  615. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle.hpp +39 -0
  616. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle_service.hpp +220 -0
  617. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +620 -0
  618. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +672 -0
  619. data/src/cxx_supportlib/vendor-modified/boost/asio/yield.hpp +23 -0
  620. data/src/cxx_supportlib/vendor-modified/boost/chrono.hpp +20 -0
  621. data/src/cxx_supportlib/vendor-modified/boost/chrono/chrono.hpp +15 -0
  622. data/src/cxx_supportlib/vendor-modified/boost/chrono/chrono_io.hpp +34 -0
  623. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/chrono.hpp +46 -0
  624. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +242 -0
  625. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp +356 -0
  626. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/thread_clock.hpp +92 -0
  627. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/chrono.hpp +121 -0
  628. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp +354 -0
  629. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/thread_clock.hpp +92 -0
  630. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/process_cpu_clocks.hpp +46 -0
  631. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/thread_clock.hpp +46 -0
  632. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/no_warning/signed_unsigned_cmp.hpp +54 -0
  633. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/scan_keyword.hpp +163 -0
  634. data/src/cxx_supportlib/vendor-modified/boost/chrono/floor.hpp +36 -0
  635. data/src/cxx_supportlib/vendor-modified/boost/chrono/include.hpp +23 -0
  636. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_get.hpp +593 -0
  637. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +295 -0
  638. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_put.hpp +317 -0
  639. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_style.hpp +35 -0
  640. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_units.hpp +1003 -0
  641. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/ios_base_state.hpp +152 -0
  642. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_get.hpp +330 -0
  643. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +1243 -0
  644. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_put.hpp +261 -0
  645. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_units.hpp +260 -0
  646. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/timezone.hpp +30 -0
  647. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/utility/ios_base_state_ptr.hpp +437 -0
  648. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/utility/manip_base.hpp +101 -0
  649. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/utility/to_string.hpp +50 -0
  650. data/src/cxx_supportlib/vendor-modified/boost/chrono/io_v1/chrono_io.hpp +637 -0
  651. data/src/cxx_supportlib/vendor-modified/boost/chrono/process_cpu_clocks.hpp +525 -0
  652. data/src/cxx_supportlib/vendor-modified/boost/chrono/round.hpp +59 -0
  653. data/src/cxx_supportlib/vendor-modified/boost/chrono/thread_clock.hpp +75 -0
  654. data/src/cxx_supportlib/vendor-modified/boost/chrono/typeof/boost/chrono/chrono.hpp +32 -0
  655. data/src/cxx_supportlib/vendor-modified/boost/chrono/typeof/boost/ratio.hpp +24 -0
  656. data/src/cxx_supportlib/vendor-modified/boost/detail/atomic_count.hpp +21 -0
  657. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor.hpp +16 -0
  658. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +460 -0
  659. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_log2.hpp +112 -0
  660. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_mask.hpp +126 -0
  661. data/src/cxx_supportlib/vendor-modified/boost/integer/static_min_max.hpp +51 -0
  662. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/chrono.cpp +15 -0
  663. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/process_cpu_clocks.cpp +18 -0
  664. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/thread_clock.cpp +19 -0
  665. data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +250 -0
  666. data/src/cxx_supportlib/vendor-modified/boost/pointer_cast.hpp +121 -0
  667. data/src/cxx_supportlib/vendor-modified/boost/random.hpp +91 -0
  668. data/src/cxx_supportlib/vendor-modified/boost/random/additive_combine.hpp +283 -0
  669. data/src/cxx_supportlib/vendor-modified/boost/random/bernoulli_distribution.hpp +197 -0
  670. data/src/cxx_supportlib/vendor-modified/boost/random/beta_distribution.hpp +184 -0
  671. data/src/cxx_supportlib/vendor-modified/boost/random/binomial_distribution.hpp +434 -0
  672. data/src/cxx_supportlib/vendor-modified/boost/random/cauchy_distribution.hpp +214 -0
  673. data/src/cxx_supportlib/vendor-modified/boost/random/chi_squared_distribution.hpp +209 -0
  674. data/src/cxx_supportlib/vendor-modified/boost/random/detail/auto_link.hpp +40 -0
  675. data/src/cxx_supportlib/vendor-modified/boost/random/detail/config.hpp +18 -0
  676. data/src/cxx_supportlib/vendor-modified/boost/random/detail/const_mod.hpp +216 -0
  677. data/src/cxx_supportlib/vendor-modified/boost/random/detail/disable_warnings.hpp +29 -0
  678. data/src/cxx_supportlib/vendor-modified/boost/random/detail/enable_warnings.hpp +22 -0
  679. data/src/cxx_supportlib/vendor-modified/boost/random/detail/generator_bits.hpp +36 -0
  680. data/src/cxx_supportlib/vendor-modified/boost/random/detail/generator_seed_seq.hpp +40 -0
  681. data/src/cxx_supportlib/vendor-modified/boost/random/detail/int_float_pair.hpp +121 -0
  682. data/src/cxx_supportlib/vendor-modified/boost/random/detail/integer_log2.hpp +84 -0
  683. data/src/cxx_supportlib/vendor-modified/boost/random/detail/iterator_mixin.hpp +45 -0
  684. data/src/cxx_supportlib/vendor-modified/boost/random/detail/large_arithmetic.hpp +122 -0
  685. data/src/cxx_supportlib/vendor-modified/boost/random/detail/operators.hpp +84 -0
  686. data/src/cxx_supportlib/vendor-modified/boost/random/detail/polynomial.hpp +384 -0
  687. data/src/cxx_supportlib/vendor-modified/boost/random/detail/ptr_helper.hpp +67 -0
  688. data/src/cxx_supportlib/vendor-modified/boost/random/detail/seed.hpp +115 -0
  689. data/src/cxx_supportlib/vendor-modified/boost/random/detail/seed_impl.hpp +398 -0
  690. data/src/cxx_supportlib/vendor-modified/boost/random/detail/signed_unsigned_tools.hpp +89 -0
  691. data/src/cxx_supportlib/vendor-modified/boost/random/detail/uniform_int_float.hpp +76 -0
  692. data/src/cxx_supportlib/vendor-modified/boost/random/detail/vector_io.hpp +75 -0
  693. data/src/cxx_supportlib/vendor-modified/boost/random/discard_block.hpp +241 -0
  694. data/src/cxx_supportlib/vendor-modified/boost/random/discrete_distribution.hpp +636 -0
  695. data/src/cxx_supportlib/vendor-modified/boost/random/exponential_distribution.hpp +386 -0
  696. data/src/cxx_supportlib/vendor-modified/boost/random/extreme_value_distribution.hpp +177 -0
  697. data/src/cxx_supportlib/vendor-modified/boost/random/fisher_f_distribution.hpp +183 -0
  698. data/src/cxx_supportlib/vendor-modified/boost/random/gamma_distribution.hpp +292 -0
  699. data/src/cxx_supportlib/vendor-modified/boost/random/generate_canonical.hpp +96 -0
  700. data/src/cxx_supportlib/vendor-modified/boost/random/geometric_distribution.hpp +267 -0
  701. data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +883 -0
  702. data/src/cxx_supportlib/vendor-modified/boost/random/independent_bits.hpp +271 -0
  703. data/src/cxx_supportlib/vendor-modified/boost/random/inversive_congruential.hpp +267 -0
  704. data/src/cxx_supportlib/vendor-modified/boost/random/lagged_fibonacci.hpp +537 -0
  705. data/src/cxx_supportlib/vendor-modified/boost/random/laplace_distribution.hpp +175 -0
  706. data/src/cxx_supportlib/vendor-modified/boost/random/linear_congruential.hpp +466 -0
  707. data/src/cxx_supportlib/vendor-modified/boost/random/linear_feedback_shift.hpp +217 -0
  708. data/src/cxx_supportlib/vendor-modified/boost/random/lognormal_distribution.hpp +254 -0
  709. data/src/cxx_supportlib/vendor-modified/boost/random/mersenne_twister.hpp +682 -0
  710. data/src/cxx_supportlib/vendor-modified/boost/random/negative_binomial_distribution.hpp +220 -0
  711. data/src/cxx_supportlib/vendor-modified/boost/random/non_central_chi_squared_distribution.hpp +221 -0
  712. data/src/cxx_supportlib/vendor-modified/boost/random/normal_distribution.hpp +374 -0
  713. data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_constant_distribution.hpp +466 -0
  714. data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_linear_distribution.hpp +531 -0
  715. data/src/cxx_supportlib/vendor-modified/boost/random/poisson_distribution.hpp +360 -0
  716. data/src/cxx_supportlib/vendor-modified/boost/random/random_device.hpp +143 -0
  717. data/src/cxx_supportlib/vendor-modified/boost/random/random_number_generator.hpp +73 -0
  718. data/src/cxx_supportlib/vendor-modified/boost/random/ranlux.hpp +99 -0
  719. data/src/cxx_supportlib/vendor-modified/boost/random/seed_seq.hpp +118 -0
  720. data/src/cxx_supportlib/vendor-modified/boost/random/shuffle_order.hpp +269 -0
  721. data/src/cxx_supportlib/vendor-modified/boost/random/shuffle_output.hpp +51 -0
  722. data/src/cxx_supportlib/vendor-modified/boost/random/student_t_distribution.hpp +180 -0
  723. data/src/cxx_supportlib/vendor-modified/boost/random/subtract_with_carry.hpp +613 -0
  724. data/src/cxx_supportlib/vendor-modified/boost/random/taus88.hpp +45 -0
  725. data/src/cxx_supportlib/vendor-modified/boost/random/traits.hpp +107 -0
  726. data/src/cxx_supportlib/vendor-modified/boost/random/triangle_distribution.hpp +232 -0
  727. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_01.hpp +257 -0
  728. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_int.hpp +99 -0
  729. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_int_distribution.hpp +419 -0
  730. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_on_sphere.hpp +284 -0
  731. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_real.hpp +82 -0
  732. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_real_distribution.hpp +241 -0
  733. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_smallint.hpp +307 -0
  734. data/src/cxx_supportlib/vendor-modified/boost/random/variate_generator.hpp +122 -0
  735. data/src/cxx_supportlib/vendor-modified/boost/random/weibull_distribution.hpp +177 -0
  736. data/src/cxx_supportlib/vendor-modified/boost/random/xor_combine.hpp +208 -0
  737. data/src/cxx_supportlib/vendor-modified/boost/ratio.hpp +14 -0
  738. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/ratio_io.hpp +1342 -0
  739. data/src/cxx_supportlib/vendor-modified/boost/ratio/include.hpp +16 -0
  740. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/abs.hpp +30 -0
  741. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/arithmetic.hpp +22 -0
  742. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/comparison.hpp +19 -0
  743. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/divides.hpp +30 -0
  744. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/equal_to.hpp +30 -0
  745. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/gcd.hpp +30 -0
  746. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater.hpp +30 -0
  747. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater_equal.hpp +30 -0
  748. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/lcm.hpp +30 -0
  749. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less.hpp +30 -0
  750. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less_equal.hpp +30 -0
  751. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/minus.hpp +30 -0
  752. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/negate.hpp +30 -0
  753. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/not_equal_to.hpp +30 -0
  754. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/numeric_cast.hpp +31 -0
  755. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/plus.hpp +30 -0
  756. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_c_tag.hpp +25 -0
  757. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_constant.hpp +15 -0
  758. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/sign.hpp +30 -0
  759. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/times.hpp +30 -0
  760. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_io.hpp +1076 -0
  761. data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +1002 -0
  762. data/src/cxx_supportlib/vendor-modified/modp_b64.cpp +11 -0
  763. data/src/helper-scripts/rack-preloader.rb +1 -1
  764. data/src/nginx_module/{ConfigurationCommands.c → ConfigGeneral/AutoGeneratedDefinitions.c} +351 -134
  765. data/src/nginx_module/{ConfigurationCommands.c.cxxcodebuilder → ConfigGeneral/AutoGeneratedDefinitions.c.cxxcodebuilder} +14 -25
  766. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +396 -0
  767. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c.cxxcodebuilder +160 -0
  768. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +831 -0
  769. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c.cxxcodebuilder +168 -0
  770. data/src/nginx_module/ConfigGeneral/ManifestGeneration.c +887 -0
  771. data/src/nginx_module/ConfigGeneral/ManifestGeneration.h +100 -0
  772. data/src/nginx_module/Configuration.c +165 -621
  773. data/src/nginx_module/Configuration.h +43 -33
  774. data/src/nginx_module/ContentHandler.c +46 -40
  775. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +282 -0
  776. data/src/nginx_module/{CreateLocationConfig.c.cxxcodebuilder → LocationConfig/AutoGeneratedCreateFunction.c.cxxcodebuilder} +43 -17
  777. data/src/nginx_module/{CacheLocationConfig.c → LocationConfig/AutoGeneratedHeaderSerialization.c} +148 -180
  778. data/src/nginx_module/{CacheLocationConfig.c.cxxcodebuilder → LocationConfig/AutoGeneratedHeaderSerialization.c.cxxcodebuilder} +13 -11
  779. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +595 -0
  780. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c.cxxcodebuilder +190 -0
  781. data/src/nginx_module/{MergeLocationConfig.c → LocationConfig/AutoGeneratedMergeFunction.c} +32 -42
  782. data/src/nginx_module/{MergeLocationConfig.c.cxxcodebuilder → LocationConfig/AutoGeneratedMergeFunction.c.cxxcodebuilder} +18 -11
  783. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +220 -0
  784. data/src/nginx_module/{LocationConfig.h.cxxcodebuilder → LocationConfig/AutoGeneratedStruct.h.cxxcodebuilder} +70 -48
  785. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +163 -0
  786. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c.cxxcodebuilder +125 -0
  787. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +303 -0
  788. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c.cxxcodebuilder +173 -0
  789. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +133 -0
  790. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h.cxxcodebuilder +154 -0
  791. data/src/nginx_module/config +13 -4
  792. data/src/nginx_module/ngx_http_passenger_module.c +154 -84
  793. data/src/ruby_supportlib/phusion_passenger.rb +2 -2
  794. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +613 -131
  795. data/src/ruby_supportlib/phusion_passenger/apache2/config_utils.rb +52 -0
  796. data/src/ruby_supportlib/phusion_passenger/common_library.rb +18 -4
  797. data/src/ruby_supportlib/phusion_passenger/config/main.rb +2 -0
  798. data/src/ruby_supportlib/phusion_passenger/config/system_properties_command.rb +104 -0
  799. data/src/ruby_supportlib/phusion_passenger/constants.rb +0 -2
  800. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +470 -138
  801. data/src/ruby_supportlib/phusion_passenger/packaging.rb +1 -0
  802. data/src/ruby_supportlib/phusion_passenger/platform_info.rb +17 -0
  803. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +11 -1
  804. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +7 -7
  805. data/src/ruby_supportlib/phusion_passenger/platform_info/networking.rb +293 -0
  806. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +8 -54
  807. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +1 -5
  808. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +4 -7
  809. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller.rb +1 -1
  810. data/src/schema_printer/SchemaPrinterMain.cpp +78 -0
  811. data/src/schema_printer/SchemaPrinterMain.cpp.cxxcodebuilder +116 -0
  812. metadata +671 -30
  813. data/src/apache2_module/Configuration.cpp +0 -737
  814. data/src/apache2_module/Configuration.hpp +0 -274
  815. data/src/apache2_module/ConfigurationCommands.cpp +0 -199
  816. data/src/apache2_module/ConfigurationFields.hpp +0 -187
  817. data/src/apache2_module/ConfigurationSetters.cpp +0 -436
  818. data/src/apache2_module/ConfigurationSetters.cpp.cxxcodebuilder +0 -144
  819. data/src/apache2_module/CreateDirConfig.cpp +0 -68
  820. data/src/apache2_module/CreateDirConfig.cpp.cxxcodebuilder +0 -81
  821. data/src/apache2_module/MergeDirConfig.cpp +0 -155
  822. data/src/apache2_module/SetHeaders.cpp +0 -111
  823. data/src/nginx_module/CreateLocationConfig.c +0 -100
  824. data/src/nginx_module/LocationConfig.h +0 -95
@@ -0,0 +1,925 @@
1
+ //
2
+ // read_until.hpp
3
+ // ~~~~~~~~~~~~~~
4
+ //
5
+ // Copyright (c) 2003-2017 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6
+ //
7
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
8
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9
+ //
10
+
11
+ #ifndef BOOST_ASIO_READ_UNTIL_HPP
12
+ #define BOOST_ASIO_READ_UNTIL_HPP
13
+
14
+ #if defined(_MSC_VER) && (_MSC_VER >= 1200)
15
+ # pragma once
16
+ #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17
+
18
+ #include <boost/asio/detail/config.hpp>
19
+
20
+ #if !defined(BOOST_ASIO_NO_IOSTREAM)
21
+
22
+ #include <cstddef>
23
+ #include <string>
24
+ #include <boost/asio/async_result.hpp>
25
+ #include <boost/asio/basic_streambuf.hpp>
26
+ #include <boost/asio/detail/regex_fwd.hpp>
27
+ #include <boost/asio/detail/type_traits.hpp>
28
+ #include <boost/asio/error.hpp>
29
+
30
+ #include <boost/asio/detail/push_options.hpp>
31
+
32
+ namespace boost {
33
+ namespace asio {
34
+
35
+ namespace detail
36
+ {
37
+ char (&has_result_type_helper(...))[2];
38
+
39
+ template <typename T>
40
+ char has_result_type_helper(T*, typename T::result_type* = 0);
41
+
42
+ template <typename T>
43
+ struct has_result_type
44
+ {
45
+ enum { value = (sizeof((has_result_type_helper)((T*)(0))) == 1) };
46
+ };
47
+ } // namespace detail
48
+
49
+ /// Type trait used to determine whether a type can be used as a match condition
50
+ /// function with read_until and async_read_until.
51
+ template <typename T>
52
+ struct is_match_condition
53
+ {
54
+ #if defined(GENERATING_DOCUMENTATION)
55
+ /// The value member is true if the type may be used as a match condition.
56
+ static const bool value;
57
+ #else
58
+ enum
59
+ {
60
+ value = boost::asio::is_function<
61
+ typename boost::asio::remove_pointer<T>::type>::value
62
+ || detail::has_result_type<T>::value
63
+ };
64
+ #endif
65
+ };
66
+
67
+ /**
68
+ * @defgroup read_until boost::asio::read_until
69
+ *
70
+ * @brief Read data into a streambuf until it contains a delimiter, matches a
71
+ * regular expression, or a function object indicates a match.
72
+ */
73
+ /*@{*/
74
+
75
+ /// Read data into a streambuf until it contains a specified delimiter.
76
+ /**
77
+ * This function is used to read data into the specified streambuf until the
78
+ * streambuf's get area contains the specified delimiter. The call will block
79
+ * until one of the following conditions is true:
80
+ *
81
+ * @li The get area of the streambuf contains the specified delimiter.
82
+ *
83
+ * @li An error occurred.
84
+ *
85
+ * This operation is implemented in terms of zero or more calls to the stream's
86
+ * read_some function. If the streambuf's get area already contains the
87
+ * delimiter, the function returns immediately.
88
+ *
89
+ * @param s The stream from which the data is to be read. The type must support
90
+ * the SyncReadStream concept.
91
+ *
92
+ * @param b A streambuf object into which the data will be read.
93
+ *
94
+ * @param delim The delimiter character.
95
+ *
96
+ * @returns The number of bytes in the streambuf's get area up to and including
97
+ * the delimiter.
98
+ *
99
+ * @throws boost::system::system_error Thrown on failure.
100
+ *
101
+ * @note After a successful read_until operation, the streambuf may contain
102
+ * additional data beyond the delimiter. An application will typically leave
103
+ * that data in the streambuf for a subsequent read_until operation to examine.
104
+ *
105
+ * @par Example
106
+ * To read data into a streambuf until a newline is encountered:
107
+ * @code boost::asio::streambuf b;
108
+ * boost::asio::read_until(s, b, '\n');
109
+ * std::istream is(&b);
110
+ * std::string line;
111
+ * std::getline(is, line); @endcode
112
+ * After the @c read_until operation completes successfully, the buffer @c b
113
+ * contains the delimiter:
114
+ * @code { 'a', 'b', ..., 'c', '\n', 'd', 'e', ... } @endcode
115
+ * The call to @c std::getline then extracts the data up to and including the
116
+ * delimiter, so that the string @c line contains:
117
+ * @code { 'a', 'b', ..., 'c', '\n' } @endcode
118
+ * The remaining data is left in the buffer @c b as follows:
119
+ * @code { 'd', 'e', ... } @endcode
120
+ * This data may be the start of a new line, to be extracted by a subsequent
121
+ * @c read_until operation.
122
+ */
123
+ template <typename SyncReadStream, typename Allocator>
124
+ std::size_t read_until(SyncReadStream& s,
125
+ boost::asio::basic_streambuf<Allocator>& b, char delim);
126
+
127
+ /// Read data into a streambuf until it contains a specified delimiter.
128
+ /**
129
+ * This function is used to read data into the specified streambuf until the
130
+ * streambuf's get area contains the specified delimiter. The call will block
131
+ * until one of the following conditions is true:
132
+ *
133
+ * @li The get area of the streambuf contains the specified delimiter.
134
+ *
135
+ * @li An error occurred.
136
+ *
137
+ * This operation is implemented in terms of zero or more calls to the stream's
138
+ * read_some function. If the streambuf's get area already contains the
139
+ * delimiter, the function returns immediately.
140
+ *
141
+ * @param s The stream from which the data is to be read. The type must support
142
+ * the SyncReadStream concept.
143
+ *
144
+ * @param b A streambuf object into which the data will be read.
145
+ *
146
+ * @param delim The delimiter character.
147
+ *
148
+ * @param ec Set to indicate what error occurred, if any.
149
+ *
150
+ * @returns The number of bytes in the streambuf's get area up to and including
151
+ * the delimiter. Returns 0 if an error occurred.
152
+ *
153
+ * @note After a successful read_until operation, the streambuf may contain
154
+ * additional data beyond the delimiter. An application will typically leave
155
+ * that data in the streambuf for a subsequent read_until operation to examine.
156
+ */
157
+ template <typename SyncReadStream, typename Allocator>
158
+ std::size_t read_until(SyncReadStream& s,
159
+ boost::asio::basic_streambuf<Allocator>& b, char delim,
160
+ boost::system::error_code& ec);
161
+
162
+ /// Read data into a streambuf until it contains a specified delimiter.
163
+ /**
164
+ * This function is used to read data into the specified streambuf until the
165
+ * streambuf's get area contains the specified delimiter. The call will block
166
+ * until one of the following conditions is true:
167
+ *
168
+ * @li The get area of the streambuf contains the specified delimiter.
169
+ *
170
+ * @li An error occurred.
171
+ *
172
+ * This operation is implemented in terms of zero or more calls to the stream's
173
+ * read_some function. If the streambuf's get area already contains the
174
+ * delimiter, the function returns immediately.
175
+ *
176
+ * @param s The stream from which the data is to be read. The type must support
177
+ * the SyncReadStream concept.
178
+ *
179
+ * @param b A streambuf object into which the data will be read.
180
+ *
181
+ * @param delim The delimiter string.
182
+ *
183
+ * @returns The number of bytes in the streambuf's get area up to and including
184
+ * the delimiter.
185
+ *
186
+ * @throws boost::system::system_error Thrown on failure.
187
+ *
188
+ * @note After a successful read_until operation, the streambuf may contain
189
+ * additional data beyond the delimiter. An application will typically leave
190
+ * that data in the streambuf for a subsequent read_until operation to examine.
191
+ *
192
+ * @par Example
193
+ * To read data into a streambuf until a newline is encountered:
194
+ * @code boost::asio::streambuf b;
195
+ * boost::asio::read_until(s, b, "\r\n");
196
+ * std::istream is(&b);
197
+ * std::string line;
198
+ * std::getline(is, line); @endcode
199
+ * After the @c read_until operation completes successfully, the buffer @c b
200
+ * contains the delimiter:
201
+ * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
202
+ * The call to @c std::getline then extracts the data up to and including the
203
+ * delimiter, so that the string @c line contains:
204
+ * @code { 'a', 'b', ..., 'c', '\r', '\n' } @endcode
205
+ * The remaining data is left in the buffer @c b as follows:
206
+ * @code { 'd', 'e', ... } @endcode
207
+ * This data may be the start of a new line, to be extracted by a subsequent
208
+ * @c read_until operation.
209
+ */
210
+ template <typename SyncReadStream, typename Allocator>
211
+ std::size_t read_until(SyncReadStream& s,
212
+ boost::asio::basic_streambuf<Allocator>& b, const std::string& delim);
213
+
214
+ /// Read data into a streambuf until it contains a specified delimiter.
215
+ /**
216
+ * This function is used to read data into the specified streambuf until the
217
+ * streambuf's get area contains the specified delimiter. The call will block
218
+ * until one of the following conditions is true:
219
+ *
220
+ * @li The get area of the streambuf contains the specified delimiter.
221
+ *
222
+ * @li An error occurred.
223
+ *
224
+ * This operation is implemented in terms of zero or more calls to the stream's
225
+ * read_some function. If the streambuf's get area already contains the
226
+ * delimiter, the function returns immediately.
227
+ *
228
+ * @param s The stream from which the data is to be read. The type must support
229
+ * the SyncReadStream concept.
230
+ *
231
+ * @param b A streambuf object into which the data will be read.
232
+ *
233
+ * @param delim The delimiter string.
234
+ *
235
+ * @param ec Set to indicate what error occurred, if any.
236
+ *
237
+ * @returns The number of bytes in the streambuf's get area up to and including
238
+ * the delimiter. Returns 0 if an error occurred.
239
+ *
240
+ * @note After a successful read_until operation, the streambuf may contain
241
+ * additional data beyond the delimiter. An application will typically leave
242
+ * that data in the streambuf for a subsequent read_until operation to examine.
243
+ */
244
+ template <typename SyncReadStream, typename Allocator>
245
+ std::size_t read_until(SyncReadStream& s,
246
+ boost::asio::basic_streambuf<Allocator>& b, const std::string& delim,
247
+ boost::system::error_code& ec);
248
+
249
+ #if defined(BOOST_ASIO_HAS_BOOST_REGEX) \
250
+ || defined(GENERATING_DOCUMENTATION)
251
+
252
+ /// Read data into a streambuf until some part of the data it contains matches
253
+ /// a regular expression.
254
+ /**
255
+ * This function is used to read data into the specified streambuf until the
256
+ * streambuf's get area contains some data that matches a regular expression.
257
+ * The call will block until one of the following conditions is true:
258
+ *
259
+ * @li A substring of the streambuf's get area matches the regular expression.
260
+ *
261
+ * @li An error occurred.
262
+ *
263
+ * This operation is implemented in terms of zero or more calls to the stream's
264
+ * read_some function. If the streambuf's get area already contains data that
265
+ * matches the regular expression, the function returns immediately.
266
+ *
267
+ * @param s The stream from which the data is to be read. The type must support
268
+ * the SyncReadStream concept.
269
+ *
270
+ * @param b A streambuf object into which the data will be read.
271
+ *
272
+ * @param expr The regular expression.
273
+ *
274
+ * @returns The number of bytes in the streambuf's get area up to and including
275
+ * the substring that matches the regular expression.
276
+ *
277
+ * @throws boost::system::system_error Thrown on failure.
278
+ *
279
+ * @note After a successful read_until operation, the streambuf may contain
280
+ * additional data beyond that which matched the regular expression. An
281
+ * application will typically leave that data in the streambuf for a subsequent
282
+ * read_until operation to examine.
283
+ *
284
+ * @par Example
285
+ * To read data into a streambuf until a CR-LF sequence is encountered:
286
+ * @code boost::asio::streambuf b;
287
+ * boost::asio::read_until(s, b, boost::regex("\r\n"));
288
+ * std::istream is(&b);
289
+ * std::string line;
290
+ * std::getline(is, line); @endcode
291
+ * After the @c read_until operation completes successfully, the buffer @c b
292
+ * contains the data which matched the regular expression:
293
+ * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
294
+ * The call to @c std::getline then extracts the data up to and including the
295
+ * match, so that the string @c line contains:
296
+ * @code { 'a', 'b', ..., 'c', '\r', '\n' } @endcode
297
+ * The remaining data is left in the buffer @c b as follows:
298
+ * @code { 'd', 'e', ... } @endcode
299
+ * This data may be the start of a new line, to be extracted by a subsequent
300
+ * @c read_until operation.
301
+ */
302
+ template <typename SyncReadStream, typename Allocator>
303
+ std::size_t read_until(SyncReadStream& s,
304
+ boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr);
305
+
306
+ /// Read data into a streambuf until some part of the data it contains matches
307
+ /// a regular expression.
308
+ /**
309
+ * This function is used to read data into the specified streambuf until the
310
+ * streambuf's get area contains some data that matches a regular expression.
311
+ * The call will block until one of the following conditions is true:
312
+ *
313
+ * @li A substring of the streambuf's get area matches the regular expression.
314
+ *
315
+ * @li An error occurred.
316
+ *
317
+ * This operation is implemented in terms of zero or more calls to the stream's
318
+ * read_some function. If the streambuf's get area already contains data that
319
+ * matches the regular expression, the function returns immediately.
320
+ *
321
+ * @param s The stream from which the data is to be read. The type must support
322
+ * the SyncReadStream concept.
323
+ *
324
+ * @param b A streambuf object into which the data will be read.
325
+ *
326
+ * @param expr The regular expression.
327
+ *
328
+ * @param ec Set to indicate what error occurred, if any.
329
+ *
330
+ * @returns The number of bytes in the streambuf's get area up to and including
331
+ * the substring that matches the regular expression. Returns 0 if an error
332
+ * occurred.
333
+ *
334
+ * @note After a successful read_until operation, the streambuf may contain
335
+ * additional data beyond that which matched the regular expression. An
336
+ * application will typically leave that data in the streambuf for a subsequent
337
+ * read_until operation to examine.
338
+ */
339
+ template <typename SyncReadStream, typename Allocator>
340
+ std::size_t read_until(SyncReadStream& s,
341
+ boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
342
+ boost::system::error_code& ec);
343
+
344
+ #endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
345
+ // || defined(GENERATING_DOCUMENTATION)
346
+
347
+ /// Read data into a streambuf until a function object indicates a match.
348
+ /**
349
+ * This function is used to read data into the specified streambuf until a
350
+ * user-defined match condition function object, when applied to the data
351
+ * contained in the streambuf, indicates a successful match. The call will
352
+ * block until one of the following conditions is true:
353
+ *
354
+ * @li The match condition function object returns a std::pair where the second
355
+ * element evaluates to true.
356
+ *
357
+ * @li An error occurred.
358
+ *
359
+ * This operation is implemented in terms of zero or more calls to the stream's
360
+ * read_some function. If the match condition function object already indicates
361
+ * a match, the function returns immediately.
362
+ *
363
+ * @param s The stream from which the data is to be read. The type must support
364
+ * the SyncReadStream concept.
365
+ *
366
+ * @param b A streambuf object into which the data will be read.
367
+ *
368
+ * @param match_condition The function object to be called to determine whether
369
+ * a match exists. The signature of the function object must be:
370
+ * @code pair<iterator, bool> match_condition(iterator begin, iterator end);
371
+ * @endcode
372
+ * where @c iterator represents the type:
373
+ * @code buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
374
+ * @endcode
375
+ * The iterator parameters @c begin and @c end define the range of bytes to be
376
+ * scanned to determine whether there is a match. The @c first member of the
377
+ * return value is an iterator marking one-past-the-end of the bytes that have
378
+ * been consumed by the match function. This iterator is used to calculate the
379
+ * @c begin parameter for any subsequent invocation of the match condition. The
380
+ * @c second member of the return value is true if a match has been found, false
381
+ * otherwise.
382
+ *
383
+ * @returns The number of bytes in the streambuf's get area that have been fully
384
+ * consumed by the match function.
385
+ *
386
+ * @throws boost::system::system_error Thrown on failure.
387
+ *
388
+ * @note After a successful read_until operation, the streambuf may contain
389
+ * additional data beyond that which matched the function object. An application
390
+ * will typically leave that data in the streambuf for a subsequent
391
+ *
392
+ * @note The default implementation of the @c is_match_condition type trait
393
+ * evaluates to true for function pointers and function objects with a
394
+ * @c result_type typedef. It must be specialised for other user-defined
395
+ * function objects.
396
+ *
397
+ * @par Examples
398
+ * To read data into a streambuf until whitespace is encountered:
399
+ * @code typedef boost::asio::buffers_iterator<
400
+ * boost::asio::streambuf::const_buffers_type> iterator;
401
+ *
402
+ * std::pair<iterator, bool>
403
+ * match_whitespace(iterator begin, iterator end)
404
+ * {
405
+ * iterator i = begin;
406
+ * while (i != end)
407
+ * if (std::isspace(*i++))
408
+ * return std::make_pair(i, true);
409
+ * return std::make_pair(i, false);
410
+ * }
411
+ * ...
412
+ * boost::asio::streambuf b;
413
+ * boost::asio::read_until(s, b, match_whitespace);
414
+ * @endcode
415
+ *
416
+ * To read data into a streambuf until a matching character is found:
417
+ * @code class match_char
418
+ * {
419
+ * public:
420
+ * explicit match_char(char c) : c_(c) {}
421
+ *
422
+ * template <typename Iterator>
423
+ * std::pair<Iterator, bool> operator()(
424
+ * Iterator begin, Iterator end) const
425
+ * {
426
+ * Iterator i = begin;
427
+ * while (i != end)
428
+ * if (c_ == *i++)
429
+ * return std::make_pair(i, true);
430
+ * return std::make_pair(i, false);
431
+ * }
432
+ *
433
+ * private:
434
+ * char c_;
435
+ * };
436
+ *
437
+ * namespace asio {
438
+ * template <> struct is_match_condition<match_char>
439
+ * : public boost::true_type {};
440
+ * } // namespace asio
441
+ * ...
442
+ * boost::asio::streambuf b;
443
+ * boost::asio::read_until(s, b, match_char('a'));
444
+ * @endcode
445
+ */
446
+ template <typename SyncReadStream, typename Allocator, typename MatchCondition>
447
+ std::size_t read_until(SyncReadStream& s,
448
+ boost::asio::basic_streambuf<Allocator>& b, MatchCondition match_condition,
449
+ typename enable_if<is_match_condition<MatchCondition>::value>::type* = 0);
450
+
451
+ /// Read data into a streambuf until a function object indicates a match.
452
+ /**
453
+ * This function is used to read data into the specified streambuf until a
454
+ * user-defined match condition function object, when applied to the data
455
+ * contained in the streambuf, indicates a successful match. The call will
456
+ * block until one of the following conditions is true:
457
+ *
458
+ * @li The match condition function object returns a std::pair where the second
459
+ * element evaluates to true.
460
+ *
461
+ * @li An error occurred.
462
+ *
463
+ * This operation is implemented in terms of zero or more calls to the stream's
464
+ * read_some function. If the match condition function object already indicates
465
+ * a match, the function returns immediately.
466
+ *
467
+ * @param s The stream from which the data is to be read. The type must support
468
+ * the SyncReadStream concept.
469
+ *
470
+ * @param b A streambuf object into which the data will be read.
471
+ *
472
+ * @param match_condition The function object to be called to determine whether
473
+ * a match exists. The signature of the function object must be:
474
+ * @code pair<iterator, bool> match_condition(iterator begin, iterator end);
475
+ * @endcode
476
+ * where @c iterator represents the type:
477
+ * @code buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
478
+ * @endcode
479
+ * The iterator parameters @c begin and @c end define the range of bytes to be
480
+ * scanned to determine whether there is a match. The @c first member of the
481
+ * return value is an iterator marking one-past-the-end of the bytes that have
482
+ * been consumed by the match function. This iterator is used to calculate the
483
+ * @c begin parameter for any subsequent invocation of the match condition. The
484
+ * @c second member of the return value is true if a match has been found, false
485
+ * otherwise.
486
+ *
487
+ * @param ec Set to indicate what error occurred, if any.
488
+ *
489
+ * @returns The number of bytes in the streambuf's get area that have been fully
490
+ * consumed by the match function. Returns 0 if an error occurred.
491
+ *
492
+ * @note After a successful read_until operation, the streambuf may contain
493
+ * additional data beyond that which matched the function object. An application
494
+ * will typically leave that data in the streambuf for a subsequent
495
+ *
496
+ * @note The default implementation of the @c is_match_condition type trait
497
+ * evaluates to true for function pointers and function objects with a
498
+ * @c result_type typedef. It must be specialised for other user-defined
499
+ * function objects.
500
+ */
501
+ template <typename SyncReadStream, typename Allocator, typename MatchCondition>
502
+ std::size_t read_until(SyncReadStream& s,
503
+ boost::asio::basic_streambuf<Allocator>& b,
504
+ MatchCondition match_condition, boost::system::error_code& ec,
505
+ typename enable_if<is_match_condition<MatchCondition>::value>::type* = 0);
506
+
507
+ /*@}*/
508
+ /**
509
+ * @defgroup async_read_until boost::asio::async_read_until
510
+ *
511
+ * @brief Start an asynchronous operation to read data into a streambuf until it
512
+ * contains a delimiter, matches a regular expression, or a function object
513
+ * indicates a match.
514
+ */
515
+ /*@{*/
516
+
517
+ /// Start an asynchronous operation to read data into a streambuf until it
518
+ /// contains a specified delimiter.
519
+ /**
520
+ * This function is used to asynchronously read data into the specified
521
+ * streambuf until the streambuf's get area contains the specified delimiter.
522
+ * The function call always returns immediately. The asynchronous operation
523
+ * will continue until one of the following conditions is true:
524
+ *
525
+ * @li The get area of the streambuf contains the specified delimiter.
526
+ *
527
+ * @li An error occurred.
528
+ *
529
+ * This operation is implemented in terms of zero or more calls to the stream's
530
+ * async_read_some function, and is known as a <em>composed operation</em>. If
531
+ * the streambuf's get area already contains the delimiter, this asynchronous
532
+ * operation completes immediately. The program must ensure that the stream
533
+ * performs no other read operations (such as async_read, async_read_until, the
534
+ * stream's async_read_some function, or any other composed operations that
535
+ * perform reads) until this operation completes.
536
+ *
537
+ * @param s The stream from which the data is to be read. The type must support
538
+ * the AsyncReadStream concept.
539
+ *
540
+ * @param b A streambuf object into which the data will be read. Ownership of
541
+ * the streambuf is retained by the caller, which must guarantee that it remains
542
+ * valid until the handler is called.
543
+ *
544
+ * @param delim The delimiter character.
545
+ *
546
+ * @param handler The handler to be called when the read operation completes.
547
+ * Copies will be made of the handler as required. The function signature of the
548
+ * handler must be:
549
+ * @code void handler(
550
+ * // Result of operation.
551
+ * const boost::system::error_code& error,
552
+ *
553
+ * // The number of bytes in the streambuf's get
554
+ * // area up to and including the delimiter.
555
+ * // 0 if an error occurred.
556
+ * std::size_t bytes_transferred
557
+ * ); @endcode
558
+ * Regardless of whether the asynchronous operation completes immediately or
559
+ * not, the handler will not be invoked from within this function. Invocation of
560
+ * the handler will be performed in a manner equivalent to using
561
+ * boost::asio::io_service::post().
562
+ *
563
+ * @note After a successful async_read_until operation, the streambuf may
564
+ * contain additional data beyond the delimiter. An application will typically
565
+ * leave that data in the streambuf for a subsequent async_read_until operation
566
+ * to examine.
567
+ *
568
+ * @par Example
569
+ * To asynchronously read data into a streambuf until a newline is encountered:
570
+ * @code boost::asio::streambuf b;
571
+ * ...
572
+ * void handler(const boost::system::error_code& e, std::size_t size)
573
+ * {
574
+ * if (!e)
575
+ * {
576
+ * std::istream is(&b);
577
+ * std::string line;
578
+ * std::getline(is, line);
579
+ * ...
580
+ * }
581
+ * }
582
+ * ...
583
+ * boost::asio::async_read_until(s, b, '\n', handler); @endcode
584
+ * After the @c async_read_until operation completes successfully, the buffer
585
+ * @c b contains the delimiter:
586
+ * @code { 'a', 'b', ..., 'c', '\n', 'd', 'e', ... } @endcode
587
+ * The call to @c std::getline then extracts the data up to and including the
588
+ * delimiter, so that the string @c line contains:
589
+ * @code { 'a', 'b', ..., 'c', '\n' } @endcode
590
+ * The remaining data is left in the buffer @c b as follows:
591
+ * @code { 'd', 'e', ... } @endcode
592
+ * This data may be the start of a new line, to be extracted by a subsequent
593
+ * @c async_read_until operation.
594
+ */
595
+ template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
596
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
597
+ void (boost::system::error_code, std::size_t))
598
+ async_read_until(AsyncReadStream& s,
599
+ boost::asio::basic_streambuf<Allocator>& b,
600
+ char delim, BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
601
+
602
+ /// Start an asynchronous operation to read data into a streambuf until it
603
+ /// contains a specified delimiter.
604
+ /**
605
+ * This function is used to asynchronously read data into the specified
606
+ * streambuf until the streambuf's get area contains the specified delimiter.
607
+ * The function call always returns immediately. The asynchronous operation
608
+ * will continue until one of the following conditions is true:
609
+ *
610
+ * @li The get area of the streambuf contains the specified delimiter.
611
+ *
612
+ * @li An error occurred.
613
+ *
614
+ * This operation is implemented in terms of zero or more calls to the stream's
615
+ * async_read_some function, and is known as a <em>composed operation</em>. If
616
+ * the streambuf's get area already contains the delimiter, this asynchronous
617
+ * operation completes immediately. The program must ensure that the stream
618
+ * performs no other read operations (such as async_read, async_read_until, the
619
+ * stream's async_read_some function, or any other composed operations that
620
+ * perform reads) until this operation completes.
621
+ *
622
+ * @param s The stream from which the data is to be read. The type must support
623
+ * the AsyncReadStream concept.
624
+ *
625
+ * @param b A streambuf object into which the data will be read. Ownership of
626
+ * the streambuf is retained by the caller, which must guarantee that it remains
627
+ * valid until the handler is called.
628
+ *
629
+ * @param delim The delimiter string.
630
+ *
631
+ * @param handler The handler to be called when the read operation completes.
632
+ * Copies will be made of the handler as required. The function signature of the
633
+ * handler must be:
634
+ * @code void handler(
635
+ * // Result of operation.
636
+ * const boost::system::error_code& error,
637
+ *
638
+ * // The number of bytes in the streambuf's get
639
+ * // area up to and including the delimiter.
640
+ * // 0 if an error occurred.
641
+ * std::size_t bytes_transferred
642
+ * ); @endcode
643
+ * Regardless of whether the asynchronous operation completes immediately or
644
+ * not, the handler will not be invoked from within this function. Invocation of
645
+ * the handler will be performed in a manner equivalent to using
646
+ * boost::asio::io_service::post().
647
+ *
648
+ * @note After a successful async_read_until operation, the streambuf may
649
+ * contain additional data beyond the delimiter. An application will typically
650
+ * leave that data in the streambuf for a subsequent async_read_until operation
651
+ * to examine.
652
+ *
653
+ * @par Example
654
+ * To asynchronously read data into a streambuf until a newline is encountered:
655
+ * @code boost::asio::streambuf b;
656
+ * ...
657
+ * void handler(const boost::system::error_code& e, std::size_t size)
658
+ * {
659
+ * if (!e)
660
+ * {
661
+ * std::istream is(&b);
662
+ * std::string line;
663
+ * std::getline(is, line);
664
+ * ...
665
+ * }
666
+ * }
667
+ * ...
668
+ * boost::asio::async_read_until(s, b, "\r\n", handler); @endcode
669
+ * After the @c async_read_until operation completes successfully, the buffer
670
+ * @c b contains the delimiter:
671
+ * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
672
+ * The call to @c std::getline then extracts the data up to and including the
673
+ * delimiter, so that the string @c line contains:
674
+ * @code { 'a', 'b', ..., 'c', '\r', '\n' } @endcode
675
+ * The remaining data is left in the buffer @c b as follows:
676
+ * @code { 'd', 'e', ... } @endcode
677
+ * This data may be the start of a new line, to be extracted by a subsequent
678
+ * @c async_read_until operation.
679
+ */
680
+ template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
681
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
682
+ void (boost::system::error_code, std::size_t))
683
+ async_read_until(AsyncReadStream& s,
684
+ boost::asio::basic_streambuf<Allocator>& b, const std::string& delim,
685
+ BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
686
+
687
+ #if defined(BOOST_ASIO_HAS_BOOST_REGEX) \
688
+ || defined(GENERATING_DOCUMENTATION)
689
+
690
+ /// Start an asynchronous operation to read data into a streambuf until some
691
+ /// part of its data matches a regular expression.
692
+ /**
693
+ * This function is used to asynchronously read data into the specified
694
+ * streambuf until the streambuf's get area contains some data that matches a
695
+ * regular expression. The function call always returns immediately. The
696
+ * asynchronous operation will continue until one of the following conditions
697
+ * is true:
698
+ *
699
+ * @li A substring of the streambuf's get area matches the regular expression.
700
+ *
701
+ * @li An error occurred.
702
+ *
703
+ * This operation is implemented in terms of zero or more calls to the stream's
704
+ * async_read_some function, and is known as a <em>composed operation</em>. If
705
+ * the streambuf's get area already contains data that matches the regular
706
+ * expression, this asynchronous operation completes immediately. The program
707
+ * must ensure that the stream performs no other read operations (such as
708
+ * async_read, async_read_until, the stream's async_read_some function, or any
709
+ * other composed operations that perform reads) until this operation
710
+ * completes.
711
+ *
712
+ * @param s The stream from which the data is to be read. The type must support
713
+ * the AsyncReadStream concept.
714
+ *
715
+ * @param b A streambuf object into which the data will be read. Ownership of
716
+ * the streambuf is retained by the caller, which must guarantee that it remains
717
+ * valid until the handler is called.
718
+ *
719
+ * @param expr The regular expression.
720
+ *
721
+ * @param handler The handler to be called when the read operation completes.
722
+ * Copies will be made of the handler as required. The function signature of the
723
+ * handler must be:
724
+ * @code void handler(
725
+ * // Result of operation.
726
+ * const boost::system::error_code& error,
727
+ *
728
+ * // The number of bytes in the streambuf's get
729
+ * // area up to and including the substring
730
+ * // that matches the regular. expression.
731
+ * // 0 if an error occurred.
732
+ * std::size_t bytes_transferred
733
+ * ); @endcode
734
+ * Regardless of whether the asynchronous operation completes immediately or
735
+ * not, the handler will not be invoked from within this function. Invocation of
736
+ * the handler will be performed in a manner equivalent to using
737
+ * boost::asio::io_service::post().
738
+ *
739
+ * @note After a successful async_read_until operation, the streambuf may
740
+ * contain additional data beyond that which matched the regular expression. An
741
+ * application will typically leave that data in the streambuf for a subsequent
742
+ * async_read_until operation to examine.
743
+ *
744
+ * @par Example
745
+ * To asynchronously read data into a streambuf until a CR-LF sequence is
746
+ * encountered:
747
+ * @code boost::asio::streambuf b;
748
+ * ...
749
+ * void handler(const boost::system::error_code& e, std::size_t size)
750
+ * {
751
+ * if (!e)
752
+ * {
753
+ * std::istream is(&b);
754
+ * std::string line;
755
+ * std::getline(is, line);
756
+ * ...
757
+ * }
758
+ * }
759
+ * ...
760
+ * boost::asio::async_read_until(s, b, boost::regex("\r\n"), handler); @endcode
761
+ * After the @c async_read_until operation completes successfully, the buffer
762
+ * @c b contains the data which matched the regular expression:
763
+ * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
764
+ * The call to @c std::getline then extracts the data up to and including the
765
+ * match, so that the string @c line contains:
766
+ * @code { 'a', 'b', ..., 'c', '\r', '\n' } @endcode
767
+ * The remaining data is left in the buffer @c b as follows:
768
+ * @code { 'd', 'e', ... } @endcode
769
+ * This data may be the start of a new line, to be extracted by a subsequent
770
+ * @c async_read_until operation.
771
+ */
772
+ template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
773
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
774
+ void (boost::system::error_code, std::size_t))
775
+ async_read_until(AsyncReadStream& s,
776
+ boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
777
+ BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
778
+
779
+ #endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
780
+ // || defined(GENERATING_DOCUMENTATION)
781
+
782
+ /// Start an asynchronous operation to read data into a streambuf until a
783
+ /// function object indicates a match.
784
+ /**
785
+ * This function is used to asynchronously read data into the specified
786
+ * streambuf until a user-defined match condition function object, when applied
787
+ * to the data contained in the streambuf, indicates a successful match. The
788
+ * function call always returns immediately. The asynchronous operation will
789
+ * continue until one of the following conditions is true:
790
+ *
791
+ * @li The match condition function object returns a std::pair where the second
792
+ * element evaluates to true.
793
+ *
794
+ * @li An error occurred.
795
+ *
796
+ * This operation is implemented in terms of zero or more calls to the stream's
797
+ * async_read_some function, and is known as a <em>composed operation</em>. If
798
+ * the match condition function object already indicates a match, this
799
+ * asynchronous operation completes immediately. The program must ensure that
800
+ * the stream performs no other read operations (such as async_read,
801
+ * async_read_until, the stream's async_read_some function, or any other
802
+ * composed operations that perform reads) until this operation completes.
803
+ *
804
+ * @param s The stream from which the data is to be read. The type must support
805
+ * the AsyncReadStream concept.
806
+ *
807
+ * @param b A streambuf object into which the data will be read.
808
+ *
809
+ * @param match_condition The function object to be called to determine whether
810
+ * a match exists. The signature of the function object must be:
811
+ * @code pair<iterator, bool> match_condition(iterator begin, iterator end);
812
+ * @endcode
813
+ * where @c iterator represents the type:
814
+ * @code buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
815
+ * @endcode
816
+ * The iterator parameters @c begin and @c end define the range of bytes to be
817
+ * scanned to determine whether there is a match. The @c first member of the
818
+ * return value is an iterator marking one-past-the-end of the bytes that have
819
+ * been consumed by the match function. This iterator is used to calculate the
820
+ * @c begin parameter for any subsequent invocation of the match condition. The
821
+ * @c second member of the return value is true if a match has been found, false
822
+ * otherwise.
823
+ *
824
+ * @param handler The handler to be called when the read operation completes.
825
+ * Copies will be made of the handler as required. The function signature of the
826
+ * handler must be:
827
+ * @code void handler(
828
+ * // Result of operation.
829
+ * const boost::system::error_code& error,
830
+ *
831
+ * // The number of bytes in the streambuf's get
832
+ * // area that have been fully consumed by the
833
+ * // match function. O if an error occurred.
834
+ * std::size_t bytes_transferred
835
+ * ); @endcode
836
+ * Regardless of whether the asynchronous operation completes immediately or
837
+ * not, the handler will not be invoked from within this function. Invocation of
838
+ * the handler will be performed in a manner equivalent to using
839
+ * boost::asio::io_service::post().
840
+ *
841
+ * @note After a successful async_read_until operation, the streambuf may
842
+ * contain additional data beyond that which matched the function object. An
843
+ * application will typically leave that data in the streambuf for a subsequent
844
+ * async_read_until operation to examine.
845
+ *
846
+ * @note The default implementation of the @c is_match_condition type trait
847
+ * evaluates to true for function pointers and function objects with a
848
+ * @c result_type typedef. It must be specialised for other user-defined
849
+ * function objects.
850
+ *
851
+ * @par Examples
852
+ * To asynchronously read data into a streambuf until whitespace is encountered:
853
+ * @code typedef boost::asio::buffers_iterator<
854
+ * boost::asio::streambuf::const_buffers_type> iterator;
855
+ *
856
+ * std::pair<iterator, bool>
857
+ * match_whitespace(iterator begin, iterator end)
858
+ * {
859
+ * iterator i = begin;
860
+ * while (i != end)
861
+ * if (std::isspace(*i++))
862
+ * return std::make_pair(i, true);
863
+ * return std::make_pair(i, false);
864
+ * }
865
+ * ...
866
+ * void handler(const boost::system::error_code& e, std::size_t size);
867
+ * ...
868
+ * boost::asio::streambuf b;
869
+ * boost::asio::async_read_until(s, b, match_whitespace, handler);
870
+ * @endcode
871
+ *
872
+ * To asynchronously read data into a streambuf until a matching character is
873
+ * found:
874
+ * @code class match_char
875
+ * {
876
+ * public:
877
+ * explicit match_char(char c) : c_(c) {}
878
+ *
879
+ * template <typename Iterator>
880
+ * std::pair<Iterator, bool> operator()(
881
+ * Iterator begin, Iterator end) const
882
+ * {
883
+ * Iterator i = begin;
884
+ * while (i != end)
885
+ * if (c_ == *i++)
886
+ * return std::make_pair(i, true);
887
+ * return std::make_pair(i, false);
888
+ * }
889
+ *
890
+ * private:
891
+ * char c_;
892
+ * };
893
+ *
894
+ * namespace asio {
895
+ * template <> struct is_match_condition<match_char>
896
+ * : public boost::true_type {};
897
+ * } // namespace asio
898
+ * ...
899
+ * void handler(const boost::system::error_code& e, std::size_t size);
900
+ * ...
901
+ * boost::asio::streambuf b;
902
+ * boost::asio::async_read_until(s, b, match_char('a'), handler);
903
+ * @endcode
904
+ */
905
+ template <typename AsyncReadStream, typename Allocator,
906
+ typename MatchCondition, typename ReadHandler>
907
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
908
+ void (boost::system::error_code, std::size_t))
909
+ async_read_until(AsyncReadStream& s,
910
+ boost::asio::basic_streambuf<Allocator>& b,
911
+ MatchCondition match_condition, BOOST_ASIO_MOVE_ARG(ReadHandler) handler,
912
+ typename enable_if<is_match_condition<MatchCondition>::value>::type* = 0);
913
+
914
+ /*@}*/
915
+
916
+ } // namespace asio
917
+ } // namespace boost
918
+
919
+ #include <boost/asio/detail/pop_options.hpp>
920
+
921
+ #include <boost/asio/impl/read_until.hpp>
922
+
923
+ #endif // !defined(BOOST_ASIO_NO_IOSTREAM)
924
+
925
+ #endif // BOOST_ASIO_READ_UNTIL_HPP