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,1149 @@
1
+ //
2
+ // impl/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_IMPL_READ_UNTIL_HPP
12
+ #define BOOST_ASIO_IMPL_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 <algorithm>
19
+ #include <string>
20
+ #include <vector>
21
+ #include <utility>
22
+ #include <boost/asio/buffer.hpp>
23
+ #include <boost/asio/buffers_iterator.hpp>
24
+ #include <boost/asio/detail/bind_handler.hpp>
25
+ #include <boost/asio/detail/handler_alloc_helpers.hpp>
26
+ #include <boost/asio/detail/handler_cont_helpers.hpp>
27
+ #include <boost/asio/detail/handler_invoke_helpers.hpp>
28
+ #include <boost/asio/detail/handler_type_requirements.hpp>
29
+ #include <boost/asio/detail/limits.hpp>
30
+ #include <boost/asio/detail/throw_error.hpp>
31
+
32
+ #include <boost/asio/detail/push_options.hpp>
33
+
34
+ namespace boost {
35
+ namespace asio {
36
+
37
+ template <typename SyncReadStream, typename Allocator>
38
+ inline std::size_t read_until(SyncReadStream& s,
39
+ boost::asio::basic_streambuf<Allocator>& b, char delim)
40
+ {
41
+ boost::system::error_code ec;
42
+ std::size_t bytes_transferred = read_until(s, b, delim, ec);
43
+ boost::asio::detail::throw_error(ec, "read_until");
44
+ return bytes_transferred;
45
+ }
46
+
47
+ template <typename SyncReadStream, typename Allocator>
48
+ std::size_t read_until(SyncReadStream& s,
49
+ boost::asio::basic_streambuf<Allocator>& b, char delim,
50
+ boost::system::error_code& ec)
51
+ {
52
+ std::size_t search_position = 0;
53
+ for (;;)
54
+ {
55
+ // Determine the range of the data to be searched.
56
+ typedef typename boost::asio::basic_streambuf<
57
+ Allocator>::const_buffers_type const_buffers_type;
58
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
59
+ const_buffers_type buffers = b.data();
60
+ iterator begin = iterator::begin(buffers);
61
+ iterator start_pos = begin + search_position;
62
+ iterator end = iterator::end(buffers);
63
+
64
+ // Look for a match.
65
+ iterator iter = std::find(start_pos, end, delim);
66
+ if (iter != end)
67
+ {
68
+ // Found a match. We're done.
69
+ ec = boost::system::error_code();
70
+ return iter - begin + 1;
71
+ }
72
+ else
73
+ {
74
+ // No match. Next search can start with the new data.
75
+ search_position = end - begin;
76
+ }
77
+
78
+ // Check if buffer is full.
79
+ if (b.size() == b.max_size())
80
+ {
81
+ ec = error::not_found;
82
+ return 0;
83
+ }
84
+
85
+ // Need more data.
86
+ std::size_t bytes_to_read = read_size_helper(b, 65536);
87
+ b.commit(s.read_some(b.prepare(bytes_to_read), ec));
88
+ if (ec)
89
+ return 0;
90
+ }
91
+ }
92
+
93
+ template <typename SyncReadStream, typename Allocator>
94
+ inline std::size_t read_until(SyncReadStream& s,
95
+ boost::asio::basic_streambuf<Allocator>& b, const std::string& delim)
96
+ {
97
+ boost::system::error_code ec;
98
+ std::size_t bytes_transferred = read_until(s, b, delim, ec);
99
+ boost::asio::detail::throw_error(ec, "read_until");
100
+ return bytes_transferred;
101
+ }
102
+
103
+ namespace detail
104
+ {
105
+ // Algorithm that finds a subsequence of equal values in a sequence. Returns
106
+ // (iterator,true) if a full match was found, in which case the iterator
107
+ // points to the beginning of the match. Returns (iterator,false) if a
108
+ // partial match was found at the end of the first sequence, in which case
109
+ // the iterator points to the beginning of the partial match. Returns
110
+ // (last1,false) if no full or partial match was found.
111
+ template <typename Iterator1, typename Iterator2>
112
+ std::pair<Iterator1, bool> partial_search(
113
+ Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2)
114
+ {
115
+ for (Iterator1 iter1 = first1; iter1 != last1; ++iter1)
116
+ {
117
+ Iterator1 test_iter1 = iter1;
118
+ Iterator2 test_iter2 = first2;
119
+ for (;; ++test_iter1, ++test_iter2)
120
+ {
121
+ if (test_iter2 == last2)
122
+ return std::make_pair(iter1, true);
123
+ if (test_iter1 == last1)
124
+ {
125
+ if (test_iter2 != first2)
126
+ return std::make_pair(iter1, false);
127
+ else
128
+ break;
129
+ }
130
+ if (*test_iter1 != *test_iter2)
131
+ break;
132
+ }
133
+ }
134
+ return std::make_pair(last1, false);
135
+ }
136
+ } // namespace detail
137
+
138
+ template <typename SyncReadStream, typename Allocator>
139
+ std::size_t read_until(SyncReadStream& s,
140
+ boost::asio::basic_streambuf<Allocator>& b, const std::string& delim,
141
+ boost::system::error_code& ec)
142
+ {
143
+ std::size_t search_position = 0;
144
+ for (;;)
145
+ {
146
+ // Determine the range of the data to be searched.
147
+ typedef typename boost::asio::basic_streambuf<
148
+ Allocator>::const_buffers_type const_buffers_type;
149
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
150
+ const_buffers_type buffers = b.data();
151
+ iterator begin = iterator::begin(buffers);
152
+ iterator start_pos = begin + search_position;
153
+ iterator end = iterator::end(buffers);
154
+
155
+ // Look for a match.
156
+ std::pair<iterator, bool> result = detail::partial_search(
157
+ start_pos, end, delim.begin(), delim.end());
158
+ if (result.first != end)
159
+ {
160
+ if (result.second)
161
+ {
162
+ // Full match. We're done.
163
+ ec = boost::system::error_code();
164
+ return result.first - begin + delim.length();
165
+ }
166
+ else
167
+ {
168
+ // Partial match. Next search needs to start from beginning of match.
169
+ search_position = result.first - begin;
170
+ }
171
+ }
172
+ else
173
+ {
174
+ // No match. Next search can start with the new data.
175
+ search_position = end - begin;
176
+ }
177
+
178
+ // Check if buffer is full.
179
+ if (b.size() == b.max_size())
180
+ {
181
+ ec = error::not_found;
182
+ return 0;
183
+ }
184
+
185
+ // Need more data.
186
+ std::size_t bytes_to_read = read_size_helper(b, 65536);
187
+ b.commit(s.read_some(b.prepare(bytes_to_read), ec));
188
+ if (ec)
189
+ return 0;
190
+ }
191
+ }
192
+
193
+ #if defined(BOOST_ASIO_HAS_BOOST_REGEX)
194
+
195
+ template <typename SyncReadStream, typename Allocator>
196
+ inline std::size_t read_until(SyncReadStream& s,
197
+ boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr)
198
+ {
199
+ boost::system::error_code ec;
200
+ std::size_t bytes_transferred = read_until(s, b, expr, ec);
201
+ boost::asio::detail::throw_error(ec, "read_until");
202
+ return bytes_transferred;
203
+ }
204
+
205
+ template <typename SyncReadStream, typename Allocator>
206
+ std::size_t read_until(SyncReadStream& s,
207
+ boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
208
+ boost::system::error_code& ec)
209
+ {
210
+ std::size_t search_position = 0;
211
+ for (;;)
212
+ {
213
+ // Determine the range of the data to be searched.
214
+ typedef typename boost::asio::basic_streambuf<
215
+ Allocator>::const_buffers_type const_buffers_type;
216
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
217
+ const_buffers_type buffers = b.data();
218
+ iterator begin = iterator::begin(buffers);
219
+ iterator start_pos = begin + search_position;
220
+ iterator end = iterator::end(buffers);
221
+
222
+ // Look for a match.
223
+ boost::match_results<iterator,
224
+ typename std::vector<boost::sub_match<iterator> >::allocator_type>
225
+ match_results;
226
+ if (regex_search(start_pos, end, match_results, expr,
227
+ boost::match_default | boost::match_partial))
228
+ {
229
+ if (match_results[0].matched)
230
+ {
231
+ // Full match. We're done.
232
+ ec = boost::system::error_code();
233
+ return match_results[0].second - begin;
234
+ }
235
+ else
236
+ {
237
+ // Partial match. Next search needs to start from beginning of match.
238
+ search_position = match_results[0].first - begin;
239
+ }
240
+ }
241
+ else
242
+ {
243
+ // No match. Next search can start with the new data.
244
+ search_position = end - begin;
245
+ }
246
+
247
+ // Check if buffer is full.
248
+ if (b.size() == b.max_size())
249
+ {
250
+ ec = error::not_found;
251
+ return 0;
252
+ }
253
+
254
+ // Need more data.
255
+ std::size_t bytes_to_read = read_size_helper(b, 65536);
256
+ b.commit(s.read_some(b.prepare(bytes_to_read), ec));
257
+ if (ec)
258
+ return 0;
259
+ }
260
+ }
261
+
262
+ #endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
263
+
264
+ template <typename SyncReadStream, typename Allocator, typename MatchCondition>
265
+ std::size_t read_until(SyncReadStream& s,
266
+ boost::asio::basic_streambuf<Allocator>& b,
267
+ MatchCondition match_condition, boost::system::error_code& ec,
268
+ typename enable_if<is_match_condition<MatchCondition>::value>::type*)
269
+ {
270
+ std::size_t search_position = 0;
271
+ for (;;)
272
+ {
273
+ // Determine the range of the data to be searched.
274
+ typedef typename boost::asio::basic_streambuf<
275
+ Allocator>::const_buffers_type const_buffers_type;
276
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
277
+ const_buffers_type buffers = b.data();
278
+ iterator begin = iterator::begin(buffers);
279
+ iterator start_pos = begin + search_position;
280
+ iterator end = iterator::end(buffers);
281
+
282
+ // Look for a match.
283
+ std::pair<iterator, bool> result = match_condition(start_pos, end);
284
+ if (result.second)
285
+ {
286
+ // Full match. We're done.
287
+ ec = boost::system::error_code();
288
+ return result.first - begin;
289
+ }
290
+ else if (result.first != end)
291
+ {
292
+ // Partial match. Next search needs to start from beginning of match.
293
+ search_position = result.first - begin;
294
+ }
295
+ else
296
+ {
297
+ // No match. Next search can start with the new data.
298
+ search_position = end - begin;
299
+ }
300
+
301
+ // Check if buffer is full.
302
+ if (b.size() == b.max_size())
303
+ {
304
+ ec = error::not_found;
305
+ return 0;
306
+ }
307
+
308
+ // Need more data.
309
+ std::size_t bytes_to_read = read_size_helper(b, 65536);
310
+ b.commit(s.read_some(b.prepare(bytes_to_read), ec));
311
+ if (ec)
312
+ return 0;
313
+ }
314
+ }
315
+
316
+ template <typename SyncReadStream, typename Allocator, typename MatchCondition>
317
+ inline std::size_t read_until(SyncReadStream& s,
318
+ boost::asio::basic_streambuf<Allocator>& b, MatchCondition match_condition,
319
+ typename enable_if<is_match_condition<MatchCondition>::value>::type*)
320
+ {
321
+ boost::system::error_code ec;
322
+ std::size_t bytes_transferred = read_until(s, b, match_condition, ec);
323
+ boost::asio::detail::throw_error(ec, "read_until");
324
+ return bytes_transferred;
325
+ }
326
+
327
+ namespace detail
328
+ {
329
+ template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
330
+ class read_until_delim_op
331
+ {
332
+ public:
333
+ read_until_delim_op(AsyncReadStream& stream,
334
+ boost::asio::basic_streambuf<Allocator>& streambuf,
335
+ char delim, ReadHandler& handler)
336
+ : stream_(stream),
337
+ streambuf_(streambuf),
338
+ delim_(delim),
339
+ start_(0),
340
+ search_position_(0),
341
+ handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
342
+ {
343
+ }
344
+
345
+ #if defined(BOOST_ASIO_HAS_MOVE)
346
+ read_until_delim_op(const read_until_delim_op& other)
347
+ : stream_(other.stream_),
348
+ streambuf_(other.streambuf_),
349
+ delim_(other.delim_),
350
+ start_(other.start_),
351
+ search_position_(other.search_position_),
352
+ handler_(other.handler_)
353
+ {
354
+ }
355
+
356
+ read_until_delim_op(read_until_delim_op&& other)
357
+ : stream_(other.stream_),
358
+ streambuf_(other.streambuf_),
359
+ delim_(other.delim_),
360
+ start_(other.start_),
361
+ search_position_(other.search_position_),
362
+ handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
363
+ {
364
+ }
365
+ #endif // defined(BOOST_ASIO_HAS_MOVE)
366
+
367
+ void operator()(const boost::system::error_code& ec,
368
+ std::size_t bytes_transferred, int start = 0)
369
+ {
370
+ const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
371
+ std::size_t bytes_to_read;
372
+ switch (start_ = start)
373
+ {
374
+ case 1:
375
+ for (;;)
376
+ {
377
+ {
378
+ // Determine the range of the data to be searched.
379
+ typedef typename boost::asio::basic_streambuf<
380
+ Allocator>::const_buffers_type const_buffers_type;
381
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
382
+ const_buffers_type buffers = streambuf_.data();
383
+ iterator begin = iterator::begin(buffers);
384
+ iterator start_pos = begin + search_position_;
385
+ iterator end = iterator::end(buffers);
386
+
387
+ // Look for a match.
388
+ iterator iter = std::find(start_pos, end, delim_);
389
+ if (iter != end)
390
+ {
391
+ // Found a match. We're done.
392
+ search_position_ = iter - begin + 1;
393
+ bytes_to_read = 0;
394
+ }
395
+
396
+ // No match yet. Check if buffer is full.
397
+ else if (streambuf_.size() == streambuf_.max_size())
398
+ {
399
+ search_position_ = not_found;
400
+ bytes_to_read = 0;
401
+ }
402
+
403
+ // Need to read some more data.
404
+ else
405
+ {
406
+ // Next search can start with the new data.
407
+ search_position_ = end - begin;
408
+ bytes_to_read = read_size_helper(streambuf_, 65536);
409
+ }
410
+ }
411
+
412
+ // Check if we're done.
413
+ if (!start && bytes_to_read == 0)
414
+ break;
415
+
416
+ // Start a new asynchronous read operation to obtain more data.
417
+ stream_.async_read_some(streambuf_.prepare(bytes_to_read),
418
+ BOOST_ASIO_MOVE_CAST(read_until_delim_op)(*this));
419
+ return; default:
420
+ streambuf_.commit(bytes_transferred);
421
+ if (ec || bytes_transferred == 0)
422
+ break;
423
+ }
424
+
425
+ const boost::system::error_code result_ec =
426
+ (search_position_ == not_found)
427
+ ? error::not_found : ec;
428
+
429
+ const std::size_t result_n =
430
+ (ec || search_position_ == not_found)
431
+ ? 0 : search_position_;
432
+
433
+ handler_(result_ec, result_n);
434
+ }
435
+ }
436
+
437
+ //private:
438
+ AsyncReadStream& stream_;
439
+ boost::asio::basic_streambuf<Allocator>& streambuf_;
440
+ char delim_;
441
+ int start_;
442
+ std::size_t search_position_;
443
+ ReadHandler handler_;
444
+ };
445
+
446
+ template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
447
+ inline void* asio_handler_allocate(std::size_t size,
448
+ read_until_delim_op<AsyncReadStream,
449
+ Allocator, ReadHandler>* this_handler)
450
+ {
451
+ return boost_asio_handler_alloc_helpers::allocate(
452
+ size, this_handler->handler_);
453
+ }
454
+
455
+ template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
456
+ inline void asio_handler_deallocate(void* pointer, std::size_t size,
457
+ read_until_delim_op<AsyncReadStream,
458
+ Allocator, ReadHandler>* this_handler)
459
+ {
460
+ boost_asio_handler_alloc_helpers::deallocate(
461
+ pointer, size, this_handler->handler_);
462
+ }
463
+
464
+ template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
465
+ inline bool asio_handler_is_continuation(
466
+ read_until_delim_op<AsyncReadStream,
467
+ Allocator, ReadHandler>* this_handler)
468
+ {
469
+ return this_handler->start_ == 0 ? true
470
+ : boost_asio_handler_cont_helpers::is_continuation(
471
+ this_handler->handler_);
472
+ }
473
+
474
+ template <typename Function, typename AsyncReadStream, typename Allocator,
475
+ typename ReadHandler>
476
+ inline void asio_handler_invoke(Function& function,
477
+ read_until_delim_op<AsyncReadStream,
478
+ Allocator, ReadHandler>* this_handler)
479
+ {
480
+ boost_asio_handler_invoke_helpers::invoke(
481
+ function, this_handler->handler_);
482
+ }
483
+
484
+ template <typename Function, typename AsyncReadStream, typename Allocator,
485
+ typename ReadHandler>
486
+ inline void asio_handler_invoke(const Function& function,
487
+ read_until_delim_op<AsyncReadStream,
488
+ Allocator, ReadHandler>* this_handler)
489
+ {
490
+ boost_asio_handler_invoke_helpers::invoke(
491
+ function, this_handler->handler_);
492
+ }
493
+ } // namespace detail
494
+
495
+ template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
496
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
497
+ void (boost::system::error_code, std::size_t))
498
+ async_read_until(AsyncReadStream& s,
499
+ boost::asio::basic_streambuf<Allocator>& b, char delim,
500
+ BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
501
+ {
502
+ // If you get an error on the following line it means that your handler does
503
+ // not meet the documented type requirements for a ReadHandler.
504
+ BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
505
+
506
+ detail::async_result_init<
507
+ ReadHandler, void (boost::system::error_code, std::size_t)> init(
508
+ BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
509
+
510
+ detail::read_until_delim_op<AsyncReadStream,
511
+ Allocator, BOOST_ASIO_HANDLER_TYPE(ReadHandler,
512
+ void (boost::system::error_code, std::size_t))>(
513
+ s, b, delim, init.handler)(
514
+ boost::system::error_code(), 0, 1);
515
+
516
+ return init.result.get();
517
+ }
518
+
519
+ namespace detail
520
+ {
521
+ template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
522
+ class read_until_delim_string_op
523
+ {
524
+ public:
525
+ read_until_delim_string_op(AsyncReadStream& stream,
526
+ boost::asio::basic_streambuf<Allocator>& streambuf,
527
+ const std::string& delim, ReadHandler& handler)
528
+ : stream_(stream),
529
+ streambuf_(streambuf),
530
+ delim_(delim),
531
+ start_(0),
532
+ search_position_(0),
533
+ handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
534
+ {
535
+ }
536
+
537
+ #if defined(BOOST_ASIO_HAS_MOVE)
538
+ read_until_delim_string_op(const read_until_delim_string_op& other)
539
+ : stream_(other.stream_),
540
+ streambuf_(other.streambuf_),
541
+ delim_(other.delim_),
542
+ start_(other.start_),
543
+ search_position_(other.search_position_),
544
+ handler_(other.handler_)
545
+ {
546
+ }
547
+
548
+ read_until_delim_string_op(read_until_delim_string_op&& other)
549
+ : stream_(other.stream_),
550
+ streambuf_(other.streambuf_),
551
+ delim_(BOOST_ASIO_MOVE_CAST(std::string)(other.delim_)),
552
+ start_(other.start_),
553
+ search_position_(other.search_position_),
554
+ handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
555
+ {
556
+ }
557
+ #endif // defined(BOOST_ASIO_HAS_MOVE)
558
+
559
+ void operator()(const boost::system::error_code& ec,
560
+ std::size_t bytes_transferred, int start = 0)
561
+ {
562
+ const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
563
+ std::size_t bytes_to_read;
564
+ switch (start_ = start)
565
+ {
566
+ case 1:
567
+ for (;;)
568
+ {
569
+ {
570
+ // Determine the range of the data to be searched.
571
+ typedef typename boost::asio::basic_streambuf<
572
+ Allocator>::const_buffers_type const_buffers_type;
573
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
574
+ const_buffers_type buffers = streambuf_.data();
575
+ iterator begin = iterator::begin(buffers);
576
+ iterator start_pos = begin + search_position_;
577
+ iterator end = iterator::end(buffers);
578
+
579
+ // Look for a match.
580
+ std::pair<iterator, bool> result = detail::partial_search(
581
+ start_pos, end, delim_.begin(), delim_.end());
582
+ if (result.first != end && result.second)
583
+ {
584
+ // Full match. We're done.
585
+ search_position_ = result.first - begin + delim_.length();
586
+ bytes_to_read = 0;
587
+ }
588
+
589
+ // No match yet. Check if buffer is full.
590
+ else if (streambuf_.size() == streambuf_.max_size())
591
+ {
592
+ search_position_ = not_found;
593
+ bytes_to_read = 0;
594
+ }
595
+
596
+ // Need to read some more data.
597
+ else
598
+ {
599
+ if (result.first != end)
600
+ {
601
+ // Partial match. Next search needs to start from beginning of
602
+ // match.
603
+ search_position_ = result.first - begin;
604
+ }
605
+ else
606
+ {
607
+ // Next search can start with the new data.
608
+ search_position_ = end - begin;
609
+ }
610
+
611
+ bytes_to_read = read_size_helper(streambuf_, 65536);
612
+ }
613
+ }
614
+
615
+ // Check if we're done.
616
+ if (!start && bytes_to_read == 0)
617
+ break;
618
+
619
+ // Start a new asynchronous read operation to obtain more data.
620
+ stream_.async_read_some(streambuf_.prepare(bytes_to_read),
621
+ BOOST_ASIO_MOVE_CAST(read_until_delim_string_op)(*this));
622
+ return; default:
623
+ streambuf_.commit(bytes_transferred);
624
+ if (ec || bytes_transferred == 0)
625
+ break;
626
+ }
627
+
628
+ const boost::system::error_code result_ec =
629
+ (search_position_ == not_found)
630
+ ? error::not_found : ec;
631
+
632
+ const std::size_t result_n =
633
+ (ec || search_position_ == not_found)
634
+ ? 0 : search_position_;
635
+
636
+ handler_(result_ec, result_n);
637
+ }
638
+ }
639
+
640
+ //private:
641
+ AsyncReadStream& stream_;
642
+ boost::asio::basic_streambuf<Allocator>& streambuf_;
643
+ std::string delim_;
644
+ int start_;
645
+ std::size_t search_position_;
646
+ ReadHandler handler_;
647
+ };
648
+
649
+ template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
650
+ inline void* asio_handler_allocate(std::size_t size,
651
+ read_until_delim_string_op<AsyncReadStream,
652
+ Allocator, ReadHandler>* this_handler)
653
+ {
654
+ return boost_asio_handler_alloc_helpers::allocate(
655
+ size, this_handler->handler_);
656
+ }
657
+
658
+ template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
659
+ inline void asio_handler_deallocate(void* pointer, std::size_t size,
660
+ read_until_delim_string_op<AsyncReadStream,
661
+ Allocator, ReadHandler>* this_handler)
662
+ {
663
+ boost_asio_handler_alloc_helpers::deallocate(
664
+ pointer, size, this_handler->handler_);
665
+ }
666
+
667
+ template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
668
+ inline bool asio_handler_is_continuation(
669
+ read_until_delim_string_op<AsyncReadStream,
670
+ Allocator, ReadHandler>* this_handler)
671
+ {
672
+ return this_handler->start_ == 0 ? true
673
+ : boost_asio_handler_cont_helpers::is_continuation(
674
+ this_handler->handler_);
675
+ }
676
+
677
+ template <typename Function, typename AsyncReadStream,
678
+ typename Allocator, typename ReadHandler>
679
+ inline void asio_handler_invoke(Function& function,
680
+ read_until_delim_string_op<AsyncReadStream,
681
+ Allocator, ReadHandler>* this_handler)
682
+ {
683
+ boost_asio_handler_invoke_helpers::invoke(
684
+ function, this_handler->handler_);
685
+ }
686
+
687
+ template <typename Function, typename AsyncReadStream,
688
+ typename Allocator, typename ReadHandler>
689
+ inline void asio_handler_invoke(const Function& function,
690
+ read_until_delim_string_op<AsyncReadStream,
691
+ Allocator, ReadHandler>* this_handler)
692
+ {
693
+ boost_asio_handler_invoke_helpers::invoke(
694
+ function, this_handler->handler_);
695
+ }
696
+ } // namespace detail
697
+
698
+ template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
699
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
700
+ void (boost::system::error_code, std::size_t))
701
+ async_read_until(AsyncReadStream& s,
702
+ boost::asio::basic_streambuf<Allocator>& b, const std::string& delim,
703
+ BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
704
+ {
705
+ // If you get an error on the following line it means that your handler does
706
+ // not meet the documented type requirements for a ReadHandler.
707
+ BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
708
+
709
+ detail::async_result_init<
710
+ ReadHandler, void (boost::system::error_code, std::size_t)> init(
711
+ BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
712
+
713
+ detail::read_until_delim_string_op<AsyncReadStream,
714
+ Allocator, BOOST_ASIO_HANDLER_TYPE(ReadHandler,
715
+ void (boost::system::error_code, std::size_t))>(
716
+ s, b, delim, init.handler)(
717
+ boost::system::error_code(), 0, 1);
718
+
719
+ return init.result.get();
720
+ }
721
+
722
+ #if defined(BOOST_ASIO_HAS_BOOST_REGEX)
723
+
724
+ namespace detail
725
+ {
726
+ template <typename AsyncReadStream, typename Allocator,
727
+ typename RegEx, typename ReadHandler>
728
+ class read_until_expr_op
729
+ {
730
+ public:
731
+ read_until_expr_op(AsyncReadStream& stream,
732
+ boost::asio::basic_streambuf<Allocator>& streambuf,
733
+ const boost::regex& expr, ReadHandler& handler)
734
+ : stream_(stream),
735
+ streambuf_(streambuf),
736
+ expr_(expr),
737
+ start_(0),
738
+ search_position_(0),
739
+ handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
740
+ {
741
+ }
742
+
743
+ #if defined(BOOST_ASIO_HAS_MOVE)
744
+ read_until_expr_op(const read_until_expr_op& other)
745
+ : stream_(other.stream_),
746
+ streambuf_(other.streambuf_),
747
+ expr_(other.expr_),
748
+ start_(other.start_),
749
+ search_position_(other.search_position_),
750
+ handler_(other.handler_)
751
+ {
752
+ }
753
+
754
+ read_until_expr_op(read_until_expr_op&& other)
755
+ : stream_(other.stream_),
756
+ streambuf_(other.streambuf_),
757
+ expr_(other.expr_),
758
+ start_(other.start_),
759
+ search_position_(other.search_position_),
760
+ handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
761
+ {
762
+ }
763
+ #endif // defined(BOOST_ASIO_HAS_MOVE)
764
+
765
+ void operator()(const boost::system::error_code& ec,
766
+ std::size_t bytes_transferred, int start = 0)
767
+ {
768
+ const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
769
+ std::size_t bytes_to_read;
770
+ switch (start_ = start)
771
+ {
772
+ case 1:
773
+ for (;;)
774
+ {
775
+ {
776
+ // Determine the range of the data to be searched.
777
+ typedef typename boost::asio::basic_streambuf<
778
+ Allocator>::const_buffers_type const_buffers_type;
779
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
780
+ const_buffers_type buffers = streambuf_.data();
781
+ iterator begin = iterator::begin(buffers);
782
+ iterator start_pos = begin + search_position_;
783
+ iterator end = iterator::end(buffers);
784
+
785
+ // Look for a match.
786
+ boost::match_results<iterator,
787
+ typename std::vector<boost::sub_match<iterator> >::allocator_type>
788
+ match_results;
789
+ bool match = regex_search(start_pos, end, match_results, expr_,
790
+ boost::match_default | boost::match_partial);
791
+ if (match && match_results[0].matched)
792
+ {
793
+ // Full match. We're done.
794
+ search_position_ = match_results[0].second - begin;
795
+ bytes_to_read = 0;
796
+ }
797
+
798
+ // No match yet. Check if buffer is full.
799
+ else if (streambuf_.size() == streambuf_.max_size())
800
+ {
801
+ search_position_ = not_found;
802
+ bytes_to_read = 0;
803
+ }
804
+
805
+ // Need to read some more data.
806
+ else
807
+ {
808
+ if (match)
809
+ {
810
+ // Partial match. Next search needs to start from beginning of
811
+ // match.
812
+ search_position_ = match_results[0].first - begin;
813
+ }
814
+ else
815
+ {
816
+ // Next search can start with the new data.
817
+ search_position_ = end - begin;
818
+ }
819
+
820
+ bytes_to_read = read_size_helper(streambuf_, 65536);
821
+ }
822
+ }
823
+
824
+ // Check if we're done.
825
+ if (!start && bytes_to_read == 0)
826
+ break;
827
+
828
+ // Start a new asynchronous read operation to obtain more data.
829
+ stream_.async_read_some(streambuf_.prepare(bytes_to_read),
830
+ BOOST_ASIO_MOVE_CAST(read_until_expr_op)(*this));
831
+ return; default:
832
+ streambuf_.commit(bytes_transferred);
833
+ if (ec || bytes_transferred == 0)
834
+ break;
835
+ }
836
+
837
+ const boost::system::error_code result_ec =
838
+ (search_position_ == not_found)
839
+ ? error::not_found : ec;
840
+
841
+ const std::size_t result_n =
842
+ (ec || search_position_ == not_found)
843
+ ? 0 : search_position_;
844
+
845
+ handler_(result_ec, result_n);
846
+ }
847
+ }
848
+
849
+ //private:
850
+ AsyncReadStream& stream_;
851
+ boost::asio::basic_streambuf<Allocator>& streambuf_;
852
+ RegEx expr_;
853
+ int start_;
854
+ std::size_t search_position_;
855
+ ReadHandler handler_;
856
+ };
857
+
858
+ template <typename AsyncReadStream, typename Allocator,
859
+ typename RegEx, typename ReadHandler>
860
+ inline void* asio_handler_allocate(std::size_t size,
861
+ read_until_expr_op<AsyncReadStream,
862
+ Allocator, RegEx, ReadHandler>* this_handler)
863
+ {
864
+ return boost_asio_handler_alloc_helpers::allocate(
865
+ size, this_handler->handler_);
866
+ }
867
+
868
+ template <typename AsyncReadStream, typename Allocator,
869
+ typename RegEx, typename ReadHandler>
870
+ inline void asio_handler_deallocate(void* pointer, std::size_t size,
871
+ read_until_expr_op<AsyncReadStream,
872
+ Allocator, RegEx, ReadHandler>* this_handler)
873
+ {
874
+ boost_asio_handler_alloc_helpers::deallocate(
875
+ pointer, size, this_handler->handler_);
876
+ }
877
+
878
+ template <typename AsyncReadStream, typename Allocator,
879
+ typename RegEx, typename ReadHandler>
880
+ inline bool asio_handler_is_continuation(
881
+ read_until_expr_op<AsyncReadStream,
882
+ Allocator, RegEx, ReadHandler>* this_handler)
883
+ {
884
+ return this_handler->start_ == 0 ? true
885
+ : boost_asio_handler_cont_helpers::is_continuation(
886
+ this_handler->handler_);
887
+ }
888
+
889
+ template <typename Function, typename AsyncReadStream, typename Allocator,
890
+ typename RegEx, typename ReadHandler>
891
+ inline void asio_handler_invoke(Function& function,
892
+ read_until_expr_op<AsyncReadStream,
893
+ Allocator, RegEx, ReadHandler>* this_handler)
894
+ {
895
+ boost_asio_handler_invoke_helpers::invoke(
896
+ function, this_handler->handler_);
897
+ }
898
+
899
+ template <typename Function, typename AsyncReadStream, typename Allocator,
900
+ typename RegEx, typename ReadHandler>
901
+ inline void asio_handler_invoke(const Function& function,
902
+ read_until_expr_op<AsyncReadStream,
903
+ Allocator, RegEx, ReadHandler>* this_handler)
904
+ {
905
+ boost_asio_handler_invoke_helpers::invoke(
906
+ function, this_handler->handler_);
907
+ }
908
+ } // namespace detail
909
+
910
+ template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
911
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
912
+ void (boost::system::error_code, std::size_t))
913
+ async_read_until(AsyncReadStream& s,
914
+ boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
915
+ BOOST_ASIO_MOVE_ARG(ReadHandler) handler)
916
+ {
917
+ // If you get an error on the following line it means that your handler does
918
+ // not meet the documented type requirements for a ReadHandler.
919
+ BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
920
+
921
+ detail::async_result_init<
922
+ ReadHandler, void (boost::system::error_code, std::size_t)> init(
923
+ BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
924
+
925
+ detail::read_until_expr_op<AsyncReadStream, Allocator,
926
+ boost::regex, BOOST_ASIO_HANDLER_TYPE(ReadHandler,
927
+ void (boost::system::error_code, std::size_t))>(
928
+ s, b, expr, init.handler)(
929
+ boost::system::error_code(), 0, 1);
930
+
931
+ return init.result.get();
932
+ }
933
+
934
+ #endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
935
+
936
+ namespace detail
937
+ {
938
+ template <typename AsyncReadStream, typename Allocator,
939
+ typename MatchCondition, typename ReadHandler>
940
+ class read_until_match_op
941
+ {
942
+ public:
943
+ read_until_match_op(AsyncReadStream& stream,
944
+ boost::asio::basic_streambuf<Allocator>& streambuf,
945
+ MatchCondition match_condition, ReadHandler& handler)
946
+ : stream_(stream),
947
+ streambuf_(streambuf),
948
+ match_condition_(match_condition),
949
+ start_(0),
950
+ search_position_(0),
951
+ handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler))
952
+ {
953
+ }
954
+
955
+ #if defined(BOOST_ASIO_HAS_MOVE)
956
+ read_until_match_op(const read_until_match_op& other)
957
+ : stream_(other.stream_),
958
+ streambuf_(other.streambuf_),
959
+ match_condition_(other.match_condition_),
960
+ start_(other.start_),
961
+ search_position_(other.search_position_),
962
+ handler_(other.handler_)
963
+ {
964
+ }
965
+
966
+ read_until_match_op(read_until_match_op&& other)
967
+ : stream_(other.stream_),
968
+ streambuf_(other.streambuf_),
969
+ match_condition_(other.match_condition_),
970
+ start_(other.start_),
971
+ search_position_(other.search_position_),
972
+ handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_))
973
+ {
974
+ }
975
+ #endif // defined(BOOST_ASIO_HAS_MOVE)
976
+
977
+ void operator()(const boost::system::error_code& ec,
978
+ std::size_t bytes_transferred, int start = 0)
979
+ {
980
+ const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
981
+ std::size_t bytes_to_read;
982
+ switch (start_ = start)
983
+ {
984
+ case 1:
985
+ for (;;)
986
+ {
987
+ {
988
+ // Determine the range of the data to be searched.
989
+ typedef typename boost::asio::basic_streambuf<
990
+ Allocator>::const_buffers_type const_buffers_type;
991
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
992
+ const_buffers_type buffers = streambuf_.data();
993
+ iterator begin = iterator::begin(buffers);
994
+ iterator start_pos = begin + search_position_;
995
+ iterator end = iterator::end(buffers);
996
+
997
+ // Look for a match.
998
+ std::pair<iterator, bool> result = match_condition_(start_pos, end);
999
+ if (result.second)
1000
+ {
1001
+ // Full match. We're done.
1002
+ search_position_ = result.first - begin;
1003
+ bytes_to_read = 0;
1004
+ }
1005
+
1006
+ // No match yet. Check if buffer is full.
1007
+ else if (streambuf_.size() == streambuf_.max_size())
1008
+ {
1009
+ search_position_ = not_found;
1010
+ bytes_to_read = 0;
1011
+ }
1012
+
1013
+ // Need to read some more data.
1014
+ else
1015
+ {
1016
+ if (result.first != end)
1017
+ {
1018
+ // Partial match. Next search needs to start from beginning of
1019
+ // match.
1020
+ search_position_ = result.first - begin;
1021
+ }
1022
+ else
1023
+ {
1024
+ // Next search can start with the new data.
1025
+ search_position_ = end - begin;
1026
+ }
1027
+
1028
+ bytes_to_read = read_size_helper(streambuf_, 65536);
1029
+ }
1030
+ }
1031
+
1032
+ // Check if we're done.
1033
+ if (!start && bytes_to_read == 0)
1034
+ break;
1035
+
1036
+ // Start a new asynchronous read operation to obtain more data.
1037
+ stream_.async_read_some(streambuf_.prepare(bytes_to_read),
1038
+ BOOST_ASIO_MOVE_CAST(read_until_match_op)(*this));
1039
+ return; default:
1040
+ streambuf_.commit(bytes_transferred);
1041
+ if (ec || bytes_transferred == 0)
1042
+ break;
1043
+ }
1044
+
1045
+ const boost::system::error_code result_ec =
1046
+ (search_position_ == not_found)
1047
+ ? error::not_found : ec;
1048
+
1049
+ const std::size_t result_n =
1050
+ (ec || search_position_ == not_found)
1051
+ ? 0 : search_position_;
1052
+
1053
+ handler_(result_ec, result_n);
1054
+ }
1055
+ }
1056
+
1057
+ //private:
1058
+ AsyncReadStream& stream_;
1059
+ boost::asio::basic_streambuf<Allocator>& streambuf_;
1060
+ MatchCondition match_condition_;
1061
+ int start_;
1062
+ std::size_t search_position_;
1063
+ ReadHandler handler_;
1064
+ };
1065
+
1066
+ template <typename AsyncReadStream, typename Allocator,
1067
+ typename MatchCondition, typename ReadHandler>
1068
+ inline void* asio_handler_allocate(std::size_t size,
1069
+ read_until_match_op<AsyncReadStream,
1070
+ Allocator, MatchCondition, ReadHandler>* this_handler)
1071
+ {
1072
+ return boost_asio_handler_alloc_helpers::allocate(
1073
+ size, this_handler->handler_);
1074
+ }
1075
+
1076
+ template <typename AsyncReadStream, typename Allocator,
1077
+ typename MatchCondition, typename ReadHandler>
1078
+ inline void asio_handler_deallocate(void* pointer, std::size_t size,
1079
+ read_until_match_op<AsyncReadStream,
1080
+ Allocator, MatchCondition, ReadHandler>* this_handler)
1081
+ {
1082
+ boost_asio_handler_alloc_helpers::deallocate(
1083
+ pointer, size, this_handler->handler_);
1084
+ }
1085
+
1086
+ template <typename AsyncReadStream, typename Allocator,
1087
+ typename MatchCondition, typename ReadHandler>
1088
+ inline bool asio_handler_is_continuation(
1089
+ read_until_match_op<AsyncReadStream,
1090
+ Allocator, MatchCondition, ReadHandler>* this_handler)
1091
+ {
1092
+ return this_handler->start_ == 0 ? true
1093
+ : boost_asio_handler_cont_helpers::is_continuation(
1094
+ this_handler->handler_);
1095
+ }
1096
+
1097
+ template <typename Function, typename AsyncReadStream, typename Allocator,
1098
+ typename MatchCondition, typename ReadHandler>
1099
+ inline void asio_handler_invoke(Function& function,
1100
+ read_until_match_op<AsyncReadStream,
1101
+ Allocator, MatchCondition, ReadHandler>* this_handler)
1102
+ {
1103
+ boost_asio_handler_invoke_helpers::invoke(
1104
+ function, this_handler->handler_);
1105
+ }
1106
+
1107
+ template <typename Function, typename AsyncReadStream, typename Allocator,
1108
+ typename MatchCondition, typename ReadHandler>
1109
+ inline void asio_handler_invoke(const Function& function,
1110
+ read_until_match_op<AsyncReadStream,
1111
+ Allocator, MatchCondition, ReadHandler>* this_handler)
1112
+ {
1113
+ boost_asio_handler_invoke_helpers::invoke(
1114
+ function, this_handler->handler_);
1115
+ }
1116
+ } // namespace detail
1117
+
1118
+ template <typename AsyncReadStream, typename Allocator,
1119
+ typename MatchCondition, typename ReadHandler>
1120
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
1121
+ void (boost::system::error_code, std::size_t))
1122
+ async_read_until(AsyncReadStream& s,
1123
+ boost::asio::basic_streambuf<Allocator>& b,
1124
+ MatchCondition match_condition, BOOST_ASIO_MOVE_ARG(ReadHandler) handler,
1125
+ typename enable_if<is_match_condition<MatchCondition>::value>::type*)
1126
+ {
1127
+ // If you get an error on the following line it means that your handler does
1128
+ // not meet the documented type requirements for a ReadHandler.
1129
+ BOOST_ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
1130
+
1131
+ detail::async_result_init<
1132
+ ReadHandler, void (boost::system::error_code, std::size_t)> init(
1133
+ BOOST_ASIO_MOVE_CAST(ReadHandler)(handler));
1134
+
1135
+ detail::read_until_match_op<AsyncReadStream, Allocator,
1136
+ MatchCondition, BOOST_ASIO_HANDLER_TYPE(ReadHandler,
1137
+ void (boost::system::error_code, std::size_t))>(
1138
+ s, b, match_condition, init.handler)(
1139
+ boost::system::error_code(), 0, 1);
1140
+
1141
+ return init.result.get();
1142
+ }
1143
+
1144
+ } // namespace asio
1145
+ } // namespace boost
1146
+
1147
+ #include <boost/asio/detail/pop_options.hpp>
1148
+
1149
+ #endif // BOOST_ASIO_IMPL_READ_UNTIL_HPP