couchbase 3.0.0.alpha.5-x86_64-linux → 3.5.1-x86_64-linux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1510) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +107 -13
  3. data/ext/extconf.rb +0 -47
  4. data/lib/active_support/cache/couchbase_store.rb +339 -0
  5. data/lib/couchbase/3.0/libcouchbase.so +0 -0
  6. data/lib/couchbase/3.1/libcouchbase.so +0 -0
  7. data/lib/couchbase/3.2/libcouchbase.so +0 -0
  8. data/lib/couchbase/3.3/libcouchbase.so +0 -0
  9. data/lib/couchbase/analytics_options.rb +2 -60
  10. data/lib/couchbase/authenticator.rb +40 -1
  11. data/lib/couchbase/binary_collection.rb +66 -27
  12. data/lib/couchbase/binary_collection_options.rb +1 -75
  13. data/lib/couchbase/bucket.rb +47 -42
  14. data/lib/couchbase/cluster.rb +310 -168
  15. data/lib/couchbase/cluster_registry.rb +49 -0
  16. data/lib/couchbase/collection.rb +482 -108
  17. data/lib/couchbase/collection_options.rb +219 -310
  18. data/lib/couchbase/config_profiles.rb +55 -0
  19. data/lib/couchbase/configuration.rb +56 -0
  20. data/lib/couchbase/datastructures/couchbase_list.rb +160 -0
  21. data/lib/couchbase/datastructures/couchbase_map.rb +194 -0
  22. data/lib/couchbase/datastructures/couchbase_queue.rb +134 -0
  23. data/lib/couchbase/datastructures/couchbase_set.rb +128 -0
  24. data/lib/couchbase/datastructures.rb +24 -0
  25. data/lib/couchbase/diagnostics.rb +181 -0
  26. data/lib/couchbase/errors.rb +218 -66
  27. data/lib/couchbase/json_transcoder.rb +12 -5
  28. data/lib/couchbase/key_value_scan.rb +117 -0
  29. data/lib/couchbase/libcouchbase.rb +6 -0
  30. data/lib/couchbase/logger.rb +85 -0
  31. data/lib/couchbase/management/analytics_index_manager.rb +923 -229
  32. data/lib/couchbase/management/bucket_manager.rb +298 -107
  33. data/lib/couchbase/management/collection_manager.rb +329 -61
  34. data/lib/couchbase/management/collection_query_index_manager.rb +222 -0
  35. data/lib/couchbase/management/query_index_manager.rb +462 -142
  36. data/lib/couchbase/management/scope_search_index_manager.rb +198 -0
  37. data/lib/couchbase/management/search_index_manager.rb +90 -30
  38. data/lib/couchbase/management/user_manager.rb +196 -51
  39. data/lib/couchbase/management/view_index_manager.rb +12 -6
  40. data/lib/couchbase/management.rb +29 -0
  41. data/lib/couchbase/mutation_state.rb +14 -1
  42. data/lib/couchbase/options.rb +2844 -0
  43. data/lib/couchbase/protostellar/binary_collection.rb +55 -0
  44. data/lib/couchbase/protostellar/bucket.rb +55 -0
  45. data/lib/couchbase/protostellar/client.rb +99 -0
  46. data/lib/couchbase/protostellar/cluster.rb +171 -0
  47. data/lib/couchbase/protostellar/collection.rb +152 -0
  48. data/lib/couchbase/protostellar/connect_options.rb +63 -0
  49. data/lib/couchbase/protostellar/error_handling.rb +203 -0
  50. data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_pb.rb +61 -0
  51. data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_services_pb.rb +35 -0
  52. data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_pb.rb +57 -0
  53. data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_services_pb.rb +36 -0
  54. data/lib/couchbase/protostellar/generated/admin/query/v1/query_pb.rb +61 -0
  55. data/lib/couchbase/protostellar/generated/admin/query/v1/query_services_pb.rb +37 -0
  56. data/lib/couchbase/protostellar/generated/admin/search/v1/search_pb.rb +72 -0
  57. data/lib/couchbase/protostellar/generated/admin/search/v1/search_services_pb.rb +44 -0
  58. data/lib/couchbase/protostellar/generated/analytics/v1/analytics_pb.rb +52 -0
  59. data/lib/couchbase/protostellar/generated/analytics/v1/analytics_services_pb.rb +30 -0
  60. data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_pb.rb +70 -0
  61. data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_services_pb.rb +36 -0
  62. data/lib/couchbase/protostellar/generated/kv/v1/kv_pb.rb +97 -0
  63. data/lib/couchbase/protostellar/generated/kv/v1/kv_services_pb.rb +46 -0
  64. data/lib/couchbase/protostellar/generated/query/v1/query_pb.rb +57 -0
  65. data/lib/couchbase/protostellar/generated/query/v1/query_services_pb.rb +30 -0
  66. data/lib/couchbase/protostellar/generated/routing/v1/routing_pb.rb +52 -0
  67. data/lib/couchbase/protostellar/generated/routing/v1/routing_services_pb.rb +30 -0
  68. data/lib/couchbase/protostellar/generated/search/v1/search_pb.rb +99 -0
  69. data/lib/couchbase/protostellar/generated/search/v1/search_services_pb.rb +30 -0
  70. data/lib/couchbase/protostellar/generated/transactions/v1/transactions_pb.rb +57 -0
  71. data/lib/couchbase/protostellar/generated/transactions/v1/transactions_services_pb.rb +36 -0
  72. data/lib/couchbase/protostellar/generated/view/v1/view_pb.rb +51 -0
  73. data/lib/couchbase/protostellar/generated/view/v1/view_services_pb.rb +30 -0
  74. data/lib/couchbase/protostellar/generated.rb +9 -0
  75. data/lib/couchbase/protostellar/management/bucket_manager.rb +67 -0
  76. data/lib/couchbase/protostellar/management/collection_manager.rb +94 -0
  77. data/lib/couchbase/protostellar/management/collection_query_index_manager.rb +124 -0
  78. data/lib/couchbase/protostellar/management/query_index_manager.rb +112 -0
  79. data/{Gemfile → lib/couchbase/protostellar/management.rb} +8 -8
  80. data/lib/couchbase/protostellar/request.rb +78 -0
  81. data/lib/couchbase/protostellar/request_behaviour.rb +42 -0
  82. data/lib/couchbase/protostellar/request_generator/admin/bucket.rb +124 -0
  83. data/lib/couchbase/protostellar/request_generator/admin/collection.rb +94 -0
  84. data/lib/couchbase/protostellar/request_generator/admin/query.rb +130 -0
  85. data/lib/couchbase/protostellar/request_generator/admin.rb +24 -0
  86. data/lib/couchbase/protostellar/request_generator/kv.rb +474 -0
  87. data/lib/couchbase/protostellar/request_generator/query.rb +133 -0
  88. data/lib/couchbase/protostellar/request_generator/search.rb +387 -0
  89. data/{bin/setup → lib/couchbase/protostellar/request_generator.rb} +12 -10
  90. data/lib/couchbase/protostellar/response_converter/admin/bucket.rb +55 -0
  91. data/lib/couchbase/protostellar/response_converter/admin/collection.rb +42 -0
  92. data/lib/couchbase/protostellar/response_converter/admin/query.rb +59 -0
  93. data/lib/couchbase/protostellar/response_converter/admin.rb +24 -0
  94. data/lib/couchbase/protostellar/response_converter/kv.rb +151 -0
  95. data/lib/couchbase/protostellar/response_converter/query.rb +84 -0
  96. data/lib/couchbase/protostellar/response_converter/search.rb +136 -0
  97. data/lib/couchbase/protostellar/response_converter.rb +26 -0
  98. data/lib/couchbase/protostellar/retry/action.rb +38 -0
  99. data/lib/couchbase/protostellar/retry/orchestrator.rb +60 -0
  100. data/lib/couchbase/protostellar/retry/reason.rb +67 -0
  101. data/lib/couchbase/protostellar/retry/strategies/best_effort.rb +49 -0
  102. data/lib/couchbase/protostellar/retry/strategies.rb +26 -0
  103. data/lib/couchbase/protostellar/retry.rb +28 -0
  104. data/lib/couchbase/protostellar/scope.rb +57 -0
  105. data/lib/couchbase/protostellar/timeout_defaults.rb +30 -0
  106. data/lib/couchbase/protostellar/timeouts.rb +83 -0
  107. data/lib/couchbase/{common_options.rb → protostellar.rb} +12 -12
  108. data/lib/couchbase/query_options.rb +7 -106
  109. data/lib/couchbase/railtie.rb +45 -0
  110. data/lib/couchbase/raw_binary_transcoder.rb +37 -0
  111. data/lib/couchbase/raw_json_transcoder.rb +38 -0
  112. data/lib/couchbase/raw_string_transcoder.rb +40 -0
  113. data/lib/couchbase/scope.rb +217 -10
  114. data/lib/couchbase/search_options.rb +1306 -1176
  115. data/lib/couchbase/subdoc.rb +35 -31
  116. data/lib/couchbase/transcoder_flags.rb +62 -0
  117. data/lib/couchbase/utils/generic_logger_adapter.rb +38 -0
  118. data/lib/couchbase/utils/stdlib_logger_adapter.rb +65 -0
  119. data/lib/couchbase/utils/time.rb +69 -0
  120. data/{bin/console → lib/couchbase/utils.rb} +7 -7
  121. data/lib/couchbase/version.rb +8 -3
  122. data/lib/couchbase/view_options.rb +5 -95
  123. data/lib/couchbase.rb +11 -1
  124. data/lib/rails/generators/couchbase/config/config_generator.rb +27 -0
  125. metadata +114 -1445
  126. data/.github/workflows/tests-6.0.3.yml +0 -52
  127. data/.github/workflows/tests-dev-preview.yml +0 -55
  128. data/.github/workflows/tests.yml +0 -50
  129. data/.gitignore +0 -20
  130. data/.gitmodules +0 -21
  131. data/.idea/.gitignore +0 -5
  132. data/.idea/dictionaries/gem_terms.xml +0 -18
  133. data/.idea/inspectionProfiles/Project_Default.xml +0 -8
  134. data/.idea/vcs.xml +0 -13
  135. data/.yardopts +0 -1
  136. data/Rakefile +0 -51
  137. data/bin/check-cluster +0 -31
  138. data/bin/fetch-stats +0 -19
  139. data/bin/init-cluster +0 -82
  140. data/bin/jenkins/build-extension +0 -35
  141. data/bin/jenkins/install-dependencies +0 -47
  142. data/bin/jenkins/test-with-cbdyncluster +0 -58
  143. data/couchbase.gemspec +0 -73
  144. data/examples/analytics.rb +0 -221
  145. data/examples/crud.rb +0 -20
  146. data/examples/managing_analytics_indexes.rb +0 -72
  147. data/examples/managing_buckets.rb +0 -47
  148. data/examples/managing_collections.rb +0 -58
  149. data/examples/managing_query_indexes.rb +0 -63
  150. data/examples/managing_search_indexes.rb +0 -62
  151. data/examples/managing_view_indexes.rb +0 -54
  152. data/examples/query.rb +0 -18
  153. data/examples/query_with_consistency.rb +0 -76
  154. data/examples/search.rb +0 -187
  155. data/examples/search_with_consistency.rb +0 -84
  156. data/examples/subdocument.rb +0 -51
  157. data/examples/view.rb +0 -50
  158. data/ext/.clang-format +0 -15
  159. data/ext/.clang-tidy +0 -22
  160. data/ext/.cmake-format.yaml +0 -8
  161. data/ext/.gitignore +0 -2
  162. data/ext/.idea/.name +0 -1
  163. data/ext/.idea/dictionaries/couchbase_terms.xml +0 -14
  164. data/ext/.idea/ext.iml +0 -2
  165. data/ext/.idea/misc.xml +0 -4
  166. data/ext/.idea/modules.xml +0 -8
  167. data/ext/.idea/vcs.xml +0 -12
  168. data/ext/CMakeLists.txt +0 -163
  169. data/ext/LICENSE.txt +0 -202
  170. data/ext/build_version.hxx.in +0 -26
  171. data/ext/couchbase/bucket.hxx +0 -95
  172. data/ext/couchbase/cbcrypto/cbcrypto.cc +0 -888
  173. data/ext/couchbase/cbcrypto/cbcrypto.h +0 -89
  174. data/ext/couchbase/cbsasl/client.cc +0 -48
  175. data/ext/couchbase/cbsasl/client.h +0 -127
  176. data/ext/couchbase/cbsasl/context.cc +0 -33
  177. data/ext/couchbase/cbsasl/context.h +0 -52
  178. data/ext/couchbase/cbsasl/error.h +0 -72
  179. data/ext/couchbase/cbsasl/mechanism.cc +0 -48
  180. data/ext/couchbase/cbsasl/mechanism.h +0 -55
  181. data/ext/couchbase/cbsasl/plain/plain.cc +0 -36
  182. data/ext/couchbase/cbsasl/plain/plain.h +0 -53
  183. data/ext/couchbase/cbsasl/scram-sha/scram-sha.cc +0 -390
  184. data/ext/couchbase/cbsasl/scram-sha/scram-sha.h +0 -185
  185. data/ext/couchbase/cbsasl/scram-sha/stringutils.cc +0 -81
  186. data/ext/couchbase/cbsasl/scram-sha/stringutils.h +0 -48
  187. data/ext/couchbase/cluster.hxx +0 -176
  188. data/ext/couchbase/collections_manifest.hxx +0 -88
  189. data/ext/couchbase/configuration.hxx +0 -256
  190. data/ext/couchbase/configuration_monitor.hxx +0 -93
  191. data/ext/couchbase/couchbase.cxx +0 -5449
  192. data/ext/couchbase/document_id.hxx +0 -38
  193. data/ext/couchbase/error_map.hxx +0 -61
  194. data/ext/couchbase/errors.hxx +0 -691
  195. data/ext/couchbase/io/dns_client.hxx +0 -215
  196. data/ext/couchbase/io/dns_codec.hxx +0 -207
  197. data/ext/couchbase/io/dns_config.hxx +0 -116
  198. data/ext/couchbase/io/dns_message.hxx +0 -555
  199. data/ext/couchbase/io/http_message.hxx +0 -38
  200. data/ext/couchbase/io/http_parser.hxx +0 -174
  201. data/ext/couchbase/io/http_session.hxx +0 -321
  202. data/ext/couchbase/io/http_session_manager.hxx +0 -127
  203. data/ext/couchbase/io/mcbp_message.hxx +0 -58
  204. data/ext/couchbase/io/mcbp_parser.hxx +0 -101
  205. data/ext/couchbase/io/mcbp_session.hxx +0 -931
  206. data/ext/couchbase/mutation_token.hxx +0 -38
  207. data/ext/couchbase/operations/analytics_dataset_create.hxx +0 -117
  208. data/ext/couchbase/operations/analytics_dataset_drop.hxx +0 -103
  209. data/ext/couchbase/operations/analytics_dataset_get_all.hxx +0 -107
  210. data/ext/couchbase/operations/analytics_dataverse_create.hxx +0 -104
  211. data/ext/couchbase/operations/analytics_dataverse_drop.hxx +0 -104
  212. data/ext/couchbase/operations/analytics_get_pending_mutations.hxx +0 -91
  213. data/ext/couchbase/operations/analytics_index_create.hxx +0 -128
  214. data/ext/couchbase/operations/analytics_index_drop.hxx +0 -110
  215. data/ext/couchbase/operations/analytics_index_get_all.hxx +0 -106
  216. data/ext/couchbase/operations/analytics_link_connect.hxx +0 -102
  217. data/ext/couchbase/operations/analytics_link_disconnect.hxx +0 -101
  218. data/ext/couchbase/operations/bucket_create.hxx +0 -139
  219. data/ext/couchbase/operations/bucket_drop.hxx +0 -66
  220. data/ext/couchbase/operations/bucket_flush.hxx +0 -66
  221. data/ext/couchbase/operations/bucket_get.hxx +0 -70
  222. data/ext/couchbase/operations/bucket_get_all.hxx +0 -63
  223. data/ext/couchbase/operations/bucket_settings.hxx +0 -111
  224. data/ext/couchbase/operations/bucket_update.hxx +0 -116
  225. data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +0 -61
  226. data/ext/couchbase/operations/collection_create.hxx +0 -91
  227. data/ext/couchbase/operations/collection_drop.hxx +0 -83
  228. data/ext/couchbase/operations/command.hxx +0 -163
  229. data/ext/couchbase/operations/design_document.hxx +0 -59
  230. data/ext/couchbase/operations/document_analytics.hxx +0 -292
  231. data/ext/couchbase/operations/document_decrement.hxx +0 -82
  232. data/ext/couchbase/operations/document_exists.hxx +0 -82
  233. data/ext/couchbase/operations/document_get.hxx +0 -64
  234. data/ext/couchbase/operations/document_get_and_lock.hxx +0 -66
  235. data/ext/couchbase/operations/document_get_and_touch.hxx +0 -66
  236. data/ext/couchbase/operations/document_get_projected.hxx +0 -244
  237. data/ext/couchbase/operations/document_increment.hxx +0 -84
  238. data/ext/couchbase/operations/document_insert.hxx +0 -76
  239. data/ext/couchbase/operations/document_lookup_in.hxx +0 -106
  240. data/ext/couchbase/operations/document_mutate_in.hxx +0 -139
  241. data/ext/couchbase/operations/document_query.hxx +0 -335
  242. data/ext/couchbase/operations/document_remove.hxx +0 -69
  243. data/ext/couchbase/operations/document_replace.hxx +0 -78
  244. data/ext/couchbase/operations/document_search.hxx +0 -356
  245. data/ext/couchbase/operations/document_touch.hxx +0 -62
  246. data/ext/couchbase/operations/document_unlock.hxx +0 -62
  247. data/ext/couchbase/operations/document_upsert.hxx +0 -76
  248. data/ext/couchbase/operations/document_view.hxx +0 -228
  249. data/ext/couchbase/operations/query_index_build_deferred.hxx +0 -86
  250. data/ext/couchbase/operations/query_index_create.hxx +0 -135
  251. data/ext/couchbase/operations/query_index_drop.hxx +0 -109
  252. data/ext/couchbase/operations/query_index_get_all.hxx +0 -107
  253. data/ext/couchbase/operations/scope_create.hxx +0 -82
  254. data/ext/couchbase/operations/scope_drop.hxx +0 -80
  255. data/ext/couchbase/operations/scope_get_all.hxx +0 -74
  256. data/ext/couchbase/operations/search_index.hxx +0 -79
  257. data/ext/couchbase/operations/search_index_analyze_document.hxx +0 -92
  258. data/ext/couchbase/operations/search_index_control_ingest.hxx +0 -80
  259. data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +0 -80
  260. data/ext/couchbase/operations/search_index_control_query.hxx +0 -80
  261. data/ext/couchbase/operations/search_index_drop.hxx +0 -77
  262. data/ext/couchbase/operations/search_index_get.hxx +0 -80
  263. data/ext/couchbase/operations/search_index_get_all.hxx +0 -82
  264. data/ext/couchbase/operations/search_index_get_documents_count.hxx +0 -81
  265. data/ext/couchbase/operations/search_index_upsert.hxx +0 -106
  266. data/ext/couchbase/operations/view_index_drop.hxx +0 -67
  267. data/ext/couchbase/operations/view_index_get.hxx +0 -90
  268. data/ext/couchbase/operations/view_index_get_all.hxx +0 -125
  269. data/ext/couchbase/operations/view_index_upsert.hxx +0 -87
  270. data/ext/couchbase/operations.hxx +0 -91
  271. data/ext/couchbase/platform/base64.cc +0 -234
  272. data/ext/couchbase/platform/base64.h +0 -47
  273. data/ext/couchbase/platform/random.cc +0 -119
  274. data/ext/couchbase/platform/random.h +0 -39
  275. data/ext/couchbase/platform/string_hex.cc +0 -99
  276. data/ext/couchbase/platform/string_hex.h +0 -50
  277. data/ext/couchbase/platform/uuid.cc +0 -96
  278. data/ext/couchbase/platform/uuid.h +0 -56
  279. data/ext/couchbase/protocol/client_opcode.hxx +0 -264
  280. data/ext/couchbase/protocol/client_request.hxx +0 -160
  281. data/ext/couchbase/protocol/client_response.hxx +0 -218
  282. data/ext/couchbase/protocol/cmd_cluster_map_change_notification.hxx +0 -81
  283. data/ext/couchbase/protocol/cmd_decrement.hxx +0 -187
  284. data/ext/couchbase/protocol/cmd_exists.hxx +0 -171
  285. data/ext/couchbase/protocol/cmd_get.hxx +0 -122
  286. data/ext/couchbase/protocol/cmd_get_and_lock.hxx +0 -142
  287. data/ext/couchbase/protocol/cmd_get_and_touch.hxx +0 -142
  288. data/ext/couchbase/protocol/cmd_get_cluster_config.hxx +0 -124
  289. data/ext/couchbase/protocol/cmd_get_collection_id.hxx +0 -117
  290. data/ext/couchbase/protocol/cmd_get_collections_manifest.hxx +0 -99
  291. data/ext/couchbase/protocol/cmd_get_error_map.hxx +0 -126
  292. data/ext/couchbase/protocol/cmd_hello.hxx +0 -156
  293. data/ext/couchbase/protocol/cmd_increment.hxx +0 -187
  294. data/ext/couchbase/protocol/cmd_info.hxx +0 -36
  295. data/ext/couchbase/protocol/cmd_insert.hxx +0 -172
  296. data/ext/couchbase/protocol/cmd_lookup_in.hxx +0 -219
  297. data/ext/couchbase/protocol/cmd_mutate_in.hxx +0 -365
  298. data/ext/couchbase/protocol/cmd_remove.hxx +0 -134
  299. data/ext/couchbase/protocol/cmd_replace.hxx +0 -172
  300. data/ext/couchbase/protocol/cmd_sasl_auth.hxx +0 -106
  301. data/ext/couchbase/protocol/cmd_sasl_list_mechs.hxx +0 -100
  302. data/ext/couchbase/protocol/cmd_sasl_step.hxx +0 -104
  303. data/ext/couchbase/protocol/cmd_select_bucket.hxx +0 -85
  304. data/ext/couchbase/protocol/cmd_touch.hxx +0 -102
  305. data/ext/couchbase/protocol/cmd_unlock.hxx +0 -95
  306. data/ext/couchbase/protocol/cmd_upsert.hxx +0 -172
  307. data/ext/couchbase/protocol/datatype.hxx +0 -48
  308. data/ext/couchbase/protocol/durability_level.hxx +0 -67
  309. data/ext/couchbase/protocol/frame_info_id.hxx +0 -187
  310. data/ext/couchbase/protocol/hello_feature.hxx +0 -255
  311. data/ext/couchbase/protocol/magic.hxx +0 -83
  312. data/ext/couchbase/protocol/server_opcode.hxx +0 -57
  313. data/ext/couchbase/protocol/server_request.hxx +0 -122
  314. data/ext/couchbase/protocol/status.hxx +0 -333
  315. data/ext/couchbase/protocol/unsigned_leb128.h +0 -195
  316. data/ext/couchbase/service_type.hxx +0 -60
  317. data/ext/couchbase/timeout_defaults.hxx +0 -34
  318. data/ext/couchbase/utils/byteswap.hxx +0 -33
  319. data/ext/couchbase/utils/connection_string.hxx +0 -231
  320. data/ext/couchbase/utils/crc32.hxx +0 -48
  321. data/ext/couchbase/utils/url_codec.hxx +0 -225
  322. data/ext/couchbase/version.hxx +0 -24
  323. data/ext/test/main.cxx +0 -58
  324. data/ext/third_party/asio/.appveyor.yml +0 -107
  325. data/ext/third_party/asio/.cirrus.yml +0 -16
  326. data/ext/third_party/asio/.gitignore +0 -3
  327. data/ext/third_party/asio/.travis.yml +0 -323
  328. data/ext/third_party/asio/asio/.gitignore +0 -23
  329. data/ext/third_party/asio/asio/COPYING +0 -4
  330. data/ext/third_party/asio/asio/INSTALL +0 -5
  331. data/ext/third_party/asio/asio/LICENSE_1_0.txt +0 -23
  332. data/ext/third_party/asio/asio/Makefile.am +0 -19
  333. data/ext/third_party/asio/asio/README +0 -4
  334. data/ext/third_party/asio/asio/asio.manifest +0 -4865
  335. data/ext/third_party/asio/asio/autogen.sh +0 -55
  336. data/ext/third_party/asio/asio/boost_asio.manifest +0 -5193
  337. data/ext/third_party/asio/asio/boostify.pl +0 -603
  338. data/ext/third_party/asio/asio/configure.ac +0 -182
  339. data/ext/third_party/asio/asio/include/.gitignore +0 -2
  340. data/ext/third_party/asio/asio/include/Makefile.am +0 -484
  341. data/ext/third_party/asio/asio/include/asio/associated_allocator.hpp +0 -131
  342. data/ext/third_party/asio/asio/include/asio/associated_executor.hpp +0 -149
  343. data/ext/third_party/asio/asio/include/asio/async_result.hpp +0 -589
  344. data/ext/third_party/asio/asio/include/asio/awaitable.hpp +0 -123
  345. data/ext/third_party/asio/asio/include/asio/basic_datagram_socket.hpp +0 -1210
  346. data/ext/third_party/asio/asio/include/asio/basic_deadline_timer.hpp +0 -693
  347. data/ext/third_party/asio/asio/include/asio/basic_io_object.hpp +0 -290
  348. data/ext/third_party/asio/asio/include/asio/basic_raw_socket.hpp +0 -1202
  349. data/ext/third_party/asio/asio/include/asio/basic_seq_packet_socket.hpp +0 -756
  350. data/ext/third_party/asio/asio/include/asio/basic_serial_port.hpp +0 -907
  351. data/ext/third_party/asio/asio/include/asio/basic_signal_set.hpp +0 -568
  352. data/ext/third_party/asio/asio/include/asio/basic_socket.hpp +0 -1894
  353. data/ext/third_party/asio/asio/include/asio/basic_socket_acceptor.hpp +0 -2495
  354. data/ext/third_party/asio/asio/include/asio/basic_socket_iostream.hpp +0 -407
  355. data/ext/third_party/asio/asio/include/asio/basic_socket_streambuf.hpp +0 -687
  356. data/ext/third_party/asio/asio/include/asio/basic_stream_socket.hpp +0 -1049
  357. data/ext/third_party/asio/asio/include/asio/basic_streambuf.hpp +0 -452
  358. data/ext/third_party/asio/asio/include/asio/basic_streambuf_fwd.hpp +0 -36
  359. data/ext/third_party/asio/asio/include/asio/basic_waitable_timer.hpp +0 -763
  360. data/ext/third_party/asio/asio/include/asio/bind_executor.hpp +0 -580
  361. data/ext/third_party/asio/asio/include/asio/buffer.hpp +0 -2494
  362. data/ext/third_party/asio/asio/include/asio/buffered_read_stream.hpp +0 -253
  363. data/ext/third_party/asio/asio/include/asio/buffered_read_stream_fwd.hpp +0 -25
  364. data/ext/third_party/asio/asio/include/asio/buffered_stream.hpp +0 -279
  365. data/ext/third_party/asio/asio/include/asio/buffered_stream_fwd.hpp +0 -25
  366. data/ext/third_party/asio/asio/include/asio/buffered_write_stream.hpp +0 -245
  367. data/ext/third_party/asio/asio/include/asio/buffered_write_stream_fwd.hpp +0 -25
  368. data/ext/third_party/asio/asio/include/asio/buffers_iterator.hpp +0 -521
  369. data/ext/third_party/asio/asio/include/asio/co_spawn.hpp +0 -100
  370. data/ext/third_party/asio/asio/include/asio/completion_condition.hpp +0 -218
  371. data/ext/third_party/asio/asio/include/asio/compose.hpp +0 -136
  372. data/ext/third_party/asio/asio/include/asio/connect.hpp +0 -1076
  373. data/ext/third_party/asio/asio/include/asio/coroutine.hpp +0 -328
  374. data/ext/third_party/asio/asio/include/asio/deadline_timer.hpp +0 -38
  375. data/ext/third_party/asio/asio/include/asio/defer.hpp +0 -127
  376. data/ext/third_party/asio/asio/include/asio/detached.hpp +0 -62
  377. data/ext/third_party/asio/asio/include/asio/detail/array.hpp +0 -38
  378. data/ext/third_party/asio/asio/include/asio/detail/array_fwd.hpp +0 -34
  379. data/ext/third_party/asio/asio/include/asio/detail/assert.hpp +0 -32
  380. data/ext/third_party/asio/asio/include/asio/detail/atomic_count.hpp +0 -45
  381. data/ext/third_party/asio/asio/include/asio/detail/base_from_completion_cond.hpp +0 -69
  382. data/ext/third_party/asio/asio/include/asio/detail/bind_handler.hpp +0 -816
  383. data/ext/third_party/asio/asio/include/asio/detail/buffer_resize_guard.hpp +0 -66
  384. data/ext/third_party/asio/asio/include/asio/detail/buffer_sequence_adapter.hpp +0 -544
  385. data/ext/third_party/asio/asio/include/asio/detail/buffered_stream_storage.hpp +0 -126
  386. data/ext/third_party/asio/asio/include/asio/detail/call_stack.hpp +0 -125
  387. data/ext/third_party/asio/asio/include/asio/detail/chrono.hpp +0 -66
  388. data/ext/third_party/asio/asio/include/asio/detail/chrono_time_traits.hpp +0 -190
  389. data/ext/third_party/asio/asio/include/asio/detail/completion_handler.hpp +0 -83
  390. data/ext/third_party/asio/asio/include/asio/detail/concurrency_hint.hpp +0 -94
  391. data/ext/third_party/asio/asio/include/asio/detail/conditionally_enabled_event.hpp +0 -112
  392. data/ext/third_party/asio/asio/include/asio/detail/conditionally_enabled_mutex.hpp +0 -149
  393. data/ext/third_party/asio/asio/include/asio/detail/config.hpp +0 -1499
  394. data/ext/third_party/asio/asio/include/asio/detail/consuming_buffers.hpp +0 -414
  395. data/ext/third_party/asio/asio/include/asio/detail/cstddef.hpp +0 -31
  396. data/ext/third_party/asio/asio/include/asio/detail/cstdint.hpp +0 -60
  397. data/ext/third_party/asio/asio/include/asio/detail/date_time_fwd.hpp +0 -34
  398. data/ext/third_party/asio/asio/include/asio/detail/deadline_timer_service.hpp +0 -280
  399. data/ext/third_party/asio/asio/include/asio/detail/dependent_type.hpp +0 -36
  400. data/ext/third_party/asio/asio/include/asio/detail/descriptor_ops.hpp +0 -121
  401. data/ext/third_party/asio/asio/include/asio/detail/descriptor_read_op.hpp +0 -130
  402. data/ext/third_party/asio/asio/include/asio/detail/descriptor_write_op.hpp +0 -130
  403. data/ext/third_party/asio/asio/include/asio/detail/dev_poll_reactor.hpp +0 -218
  404. data/ext/third_party/asio/asio/include/asio/detail/epoll_reactor.hpp +0 -266
  405. data/ext/third_party/asio/asio/include/asio/detail/event.hpp +0 -48
  406. data/ext/third_party/asio/asio/include/asio/detail/eventfd_select_interrupter.hpp +0 -83
  407. data/ext/third_party/asio/asio/include/asio/detail/executor_function.hpp +0 -104
  408. data/ext/third_party/asio/asio/include/asio/detail/executor_op.hpp +0 -84
  409. data/ext/third_party/asio/asio/include/asio/detail/fd_set_adapter.hpp +0 -39
  410. data/ext/third_party/asio/asio/include/asio/detail/fenced_block.hpp +0 -80
  411. data/ext/third_party/asio/asio/include/asio/detail/functional.hpp +0 -38
  412. data/ext/third_party/asio/asio/include/asio/detail/future.hpp +0 -33
  413. data/ext/third_party/asio/asio/include/asio/detail/gcc_arm_fenced_block.hpp +0 -91
  414. data/ext/third_party/asio/asio/include/asio/detail/gcc_hppa_fenced_block.hpp +0 -68
  415. data/ext/third_party/asio/asio/include/asio/detail/gcc_sync_fenced_block.hpp +0 -65
  416. data/ext/third_party/asio/asio/include/asio/detail/gcc_x86_fenced_block.hpp +0 -99
  417. data/ext/third_party/asio/asio/include/asio/detail/global.hpp +0 -52
  418. data/ext/third_party/asio/asio/include/asio/detail/handler_alloc_helpers.hpp +0 -242
  419. data/ext/third_party/asio/asio/include/asio/detail/handler_cont_helpers.hpp +0 -45
  420. data/ext/third_party/asio/asio/include/asio/detail/handler_invoke_helpers.hpp +0 -57
  421. data/ext/third_party/asio/asio/include/asio/detail/handler_tracking.hpp +0 -238
  422. data/ext/third_party/asio/asio/include/asio/detail/handler_type_requirements.hpp +0 -556
  423. data/ext/third_party/asio/asio/include/asio/detail/handler_work.hpp +0 -113
  424. data/ext/third_party/asio/asio/include/asio/detail/hash_map.hpp +0 -331
  425. data/ext/third_party/asio/asio/include/asio/detail/impl/buffer_sequence_adapter.ipp +0 -118
  426. data/ext/third_party/asio/asio/include/asio/detail/impl/descriptor_ops.ipp +0 -474
  427. data/ext/third_party/asio/asio/include/asio/detail/impl/dev_poll_reactor.hpp +0 -91
  428. data/ext/third_party/asio/asio/include/asio/detail/impl/dev_poll_reactor.ipp +0 -446
  429. data/ext/third_party/asio/asio/include/asio/detail/impl/epoll_reactor.hpp +0 -89
  430. data/ext/third_party/asio/asio/include/asio/detail/impl/epoll_reactor.ipp +0 -787
  431. data/ext/third_party/asio/asio/include/asio/detail/impl/eventfd_select_interrupter.ipp +0 -169
  432. data/ext/third_party/asio/asio/include/asio/detail/impl/handler_tracking.ipp +0 -358
  433. data/ext/third_party/asio/asio/include/asio/detail/impl/kqueue_reactor.hpp +0 -93
  434. data/ext/third_party/asio/asio/include/asio/detail/impl/kqueue_reactor.ipp +0 -570
  435. data/ext/third_party/asio/asio/include/asio/detail/impl/null_event.ipp +0 -74
  436. data/ext/third_party/asio/asio/include/asio/detail/impl/pipe_select_interrupter.ipp +0 -129
  437. data/ext/third_party/asio/asio/include/asio/detail/impl/posix_event.ipp +0 -59
  438. data/ext/third_party/asio/asio/include/asio/detail/impl/posix_mutex.ipp +0 -46
  439. data/ext/third_party/asio/asio/include/asio/detail/impl/posix_thread.ipp +0 -84
  440. data/ext/third_party/asio/asio/include/asio/detail/impl/posix_tss_ptr.ipp +0 -46
  441. data/ext/third_party/asio/asio/include/asio/detail/impl/reactive_descriptor_service.ipp +0 -223
  442. data/ext/third_party/asio/asio/include/asio/detail/impl/reactive_serial_port_service.ipp +0 -152
  443. data/ext/third_party/asio/asio/include/asio/detail/impl/reactive_socket_service_base.ipp +0 -300
  444. data/ext/third_party/asio/asio/include/asio/detail/impl/resolver_service_base.ipp +0 -158
  445. data/ext/third_party/asio/asio/include/asio/detail/impl/scheduler.ipp +0 -617
  446. data/ext/third_party/asio/asio/include/asio/detail/impl/select_reactor.hpp +0 -100
  447. data/ext/third_party/asio/asio/include/asio/detail/impl/select_reactor.ipp +0 -338
  448. data/ext/third_party/asio/asio/include/asio/detail/impl/service_registry.hpp +0 -94
  449. data/ext/third_party/asio/asio/include/asio/detail/impl/service_registry.ipp +0 -197
  450. data/ext/third_party/asio/asio/include/asio/detail/impl/signal_set_service.ipp +0 -667
  451. data/ext/third_party/asio/asio/include/asio/detail/impl/socket_ops.ipp +0 -3575
  452. data/ext/third_party/asio/asio/include/asio/detail/impl/socket_select_interrupter.ipp +0 -185
  453. data/ext/third_party/asio/asio/include/asio/detail/impl/strand_executor_service.hpp +0 -179
  454. data/ext/third_party/asio/asio/include/asio/detail/impl/strand_executor_service.ipp +0 -134
  455. data/ext/third_party/asio/asio/include/asio/detail/impl/strand_service.hpp +0 -118
  456. data/ext/third_party/asio/asio/include/asio/detail/impl/strand_service.ipp +0 -177
  457. data/ext/third_party/asio/asio/include/asio/detail/impl/throw_error.ipp +0 -60
  458. data/ext/third_party/asio/asio/include/asio/detail/impl/timer_queue_ptime.ipp +0 -91
  459. data/ext/third_party/asio/asio/include/asio/detail/impl/timer_queue_set.ipp +0 -101
  460. data/ext/third_party/asio/asio/include/asio/detail/impl/win_event.ipp +0 -76
  461. data/ext/third_party/asio/asio/include/asio/detail/impl/win_iocp_handle_service.ipp +0 -525
  462. data/ext/third_party/asio/asio/include/asio/detail/impl/win_iocp_io_context.hpp +0 -103
  463. data/ext/third_party/asio/asio/include/asio/detail/impl/win_iocp_io_context.ipp +0 -594
  464. data/ext/third_party/asio/asio/include/asio/detail/impl/win_iocp_serial_port_service.ipp +0 -192
  465. data/ext/third_party/asio/asio/include/asio/detail/impl/win_iocp_socket_service_base.ipp +0 -801
  466. data/ext/third_party/asio/asio/include/asio/detail/impl/win_mutex.ipp +0 -84
  467. data/ext/third_party/asio/asio/include/asio/detail/impl/win_object_handle_service.ipp +0 -448
  468. data/ext/third_party/asio/asio/include/asio/detail/impl/win_static_mutex.ipp +0 -136
  469. data/ext/third_party/asio/asio/include/asio/detail/impl/win_thread.ipp +0 -150
  470. data/ext/third_party/asio/asio/include/asio/detail/impl/win_tss_ptr.ipp +0 -57
  471. data/ext/third_party/asio/asio/include/asio/detail/impl/winrt_ssocket_service_base.ipp +0 -626
  472. data/ext/third_party/asio/asio/include/asio/detail/impl/winrt_timer_scheduler.hpp +0 -92
  473. data/ext/third_party/asio/asio/include/asio/detail/impl/winrt_timer_scheduler.ipp +0 -121
  474. data/ext/third_party/asio/asio/include/asio/detail/impl/winsock_init.ipp +0 -82
  475. data/ext/third_party/asio/asio/include/asio/detail/io_control.hpp +0 -84
  476. data/ext/third_party/asio/asio/include/asio/detail/io_object_executor.hpp +0 -167
  477. data/ext/third_party/asio/asio/include/asio/detail/io_object_impl.hpp +0 -193
  478. data/ext/third_party/asio/asio/include/asio/detail/is_buffer_sequence.hpp +0 -312
  479. data/ext/third_party/asio/asio/include/asio/detail/is_executor.hpp +0 -126
  480. data/ext/third_party/asio/asio/include/asio/detail/keyword_tss_ptr.hpp +0 -70
  481. data/ext/third_party/asio/asio/include/asio/detail/kqueue_reactor.hpp +0 -242
  482. data/ext/third_party/asio/asio/include/asio/detail/limits.hpp +0 -26
  483. data/ext/third_party/asio/asio/include/asio/detail/local_free_on_block_exit.hpp +0 -59
  484. data/ext/third_party/asio/asio/include/asio/detail/macos_fenced_block.hpp +0 -62
  485. data/ext/third_party/asio/asio/include/asio/detail/memory.hpp +0 -70
  486. data/ext/third_party/asio/asio/include/asio/detail/mutex.hpp +0 -48
  487. data/ext/third_party/asio/asio/include/asio/detail/non_const_lvalue.hpp +0 -54
  488. data/ext/third_party/asio/asio/include/asio/detail/noncopyable.hpp +0 -43
  489. data/ext/third_party/asio/asio/include/asio/detail/null_event.hpp +0 -100
  490. data/ext/third_party/asio/asio/include/asio/detail/null_fenced_block.hpp +0 -47
  491. data/ext/third_party/asio/asio/include/asio/detail/null_global.hpp +0 -59
  492. data/ext/third_party/asio/asio/include/asio/detail/null_mutex.hpp +0 -64
  493. data/ext/third_party/asio/asio/include/asio/detail/null_reactor.hpp +0 -68
  494. data/ext/third_party/asio/asio/include/asio/detail/null_signal_blocker.hpp +0 -69
  495. data/ext/third_party/asio/asio/include/asio/detail/null_socket_service.hpp +0 -519
  496. data/ext/third_party/asio/asio/include/asio/detail/null_static_mutex.hpp +0 -60
  497. data/ext/third_party/asio/asio/include/asio/detail/null_thread.hpp +0 -67
  498. data/ext/third_party/asio/asio/include/asio/detail/null_tss_ptr.hpp +0 -68
  499. data/ext/third_party/asio/asio/include/asio/detail/object_pool.hpp +0 -171
  500. data/ext/third_party/asio/asio/include/asio/detail/old_win_sdk_compat.hpp +0 -214
  501. data/ext/third_party/asio/asio/include/asio/detail/op_queue.hpp +0 -162
  502. data/ext/third_party/asio/asio/include/asio/detail/operation.hpp +0 -38
  503. data/ext/third_party/asio/asio/include/asio/detail/pipe_select_interrupter.hpp +0 -89
  504. data/ext/third_party/asio/asio/include/asio/detail/pop_options.hpp +0 -141
  505. data/ext/third_party/asio/asio/include/asio/detail/posix_event.hpp +0 -162
  506. data/ext/third_party/asio/asio/include/asio/detail/posix_fd_set_adapter.hpp +0 -118
  507. data/ext/third_party/asio/asio/include/asio/detail/posix_global.hpp +0 -80
  508. data/ext/third_party/asio/asio/include/asio/detail/posix_mutex.hpp +0 -76
  509. data/ext/third_party/asio/asio/include/asio/detail/posix_signal_blocker.hpp +0 -85
  510. data/ext/third_party/asio/asio/include/asio/detail/posix_static_mutex.hpp +0 -64
  511. data/ext/third_party/asio/asio/include/asio/detail/posix_thread.hpp +0 -109
  512. data/ext/third_party/asio/asio/include/asio/detail/posix_tss_ptr.hpp +0 -79
  513. data/ext/third_party/asio/asio/include/asio/detail/push_options.hpp +0 -185
  514. data/ext/third_party/asio/asio/include/asio/detail/reactive_descriptor_service.hpp +0 -391
  515. data/ext/third_party/asio/asio/include/asio/detail/reactive_null_buffers_op.hpp +0 -92
  516. data/ext/third_party/asio/asio/include/asio/detail/reactive_serial_port_service.hpp +0 -238
  517. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_accept_op.hpp +0 -230
  518. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_connect_op.hpp +0 -116
  519. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_recv_op.hpp +0 -137
  520. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_recvfrom_op.hpp +0 -142
  521. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_recvmsg_op.hpp +0 -135
  522. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_send_op.hpp +0 -136
  523. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_sendto_op.hpp +0 -134
  524. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_service.hpp +0 -505
  525. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_service_base.hpp +0 -518
  526. data/ext/third_party/asio/asio/include/asio/detail/reactive_wait_op.hpp +0 -92
  527. data/ext/third_party/asio/asio/include/asio/detail/reactor.hpp +0 -32
  528. data/ext/third_party/asio/asio/include/asio/detail/reactor_fwd.hpp +0 -40
  529. data/ext/third_party/asio/asio/include/asio/detail/reactor_op.hpp +0 -65
  530. data/ext/third_party/asio/asio/include/asio/detail/reactor_op_queue.hpp +0 -168
  531. data/ext/third_party/asio/asio/include/asio/detail/recycling_allocator.hpp +0 -106
  532. data/ext/third_party/asio/asio/include/asio/detail/regex_fwd.hpp +0 -35
  533. data/ext/third_party/asio/asio/include/asio/detail/resolve_endpoint_op.hpp +0 -138
  534. data/ext/third_party/asio/asio/include/asio/detail/resolve_op.hpp +0 -45
  535. data/ext/third_party/asio/asio/include/asio/detail/resolve_query_op.hpp +0 -148
  536. data/ext/third_party/asio/asio/include/asio/detail/resolver_service.hpp +0 -145
  537. data/ext/third_party/asio/asio/include/asio/detail/resolver_service_base.hpp +0 -143
  538. data/ext/third_party/asio/asio/include/asio/detail/scheduler.hpp +0 -224
  539. data/ext/third_party/asio/asio/include/asio/detail/scheduler_operation.hpp +0 -78
  540. data/ext/third_party/asio/asio/include/asio/detail/scheduler_thread_info.hpp +0 -40
  541. data/ext/third_party/asio/asio/include/asio/detail/scoped_lock.hpp +0 -101
  542. data/ext/third_party/asio/asio/include/asio/detail/scoped_ptr.hpp +0 -87
  543. data/ext/third_party/asio/asio/include/asio/detail/select_interrupter.hpp +0 -46
  544. data/ext/third_party/asio/asio/include/asio/detail/select_reactor.hpp +0 -238
  545. data/ext/third_party/asio/asio/include/asio/detail/service_registry.hpp +0 -164
  546. data/ext/third_party/asio/asio/include/asio/detail/signal_blocker.hpp +0 -44
  547. data/ext/third_party/asio/asio/include/asio/detail/signal_handler.hpp +0 -88
  548. data/ext/third_party/asio/asio/include/asio/detail/signal_init.hpp +0 -47
  549. data/ext/third_party/asio/asio/include/asio/detail/signal_op.hpp +0 -49
  550. data/ext/third_party/asio/asio/include/asio/detail/signal_set_service.hpp +0 -229
  551. data/ext/third_party/asio/asio/include/asio/detail/socket_holder.hpp +0 -98
  552. data/ext/third_party/asio/asio/include/asio/detail/socket_ops.hpp +0 -337
  553. data/ext/third_party/asio/asio/include/asio/detail/socket_option.hpp +0 -316
  554. data/ext/third_party/asio/asio/include/asio/detail/socket_select_interrupter.hpp +0 -91
  555. data/ext/third_party/asio/asio/include/asio/detail/socket_types.hpp +0 -416
  556. data/ext/third_party/asio/asio/include/asio/detail/solaris_fenced_block.hpp +0 -62
  557. data/ext/third_party/asio/asio/include/asio/detail/static_mutex.hpp +0 -52
  558. data/ext/third_party/asio/asio/include/asio/detail/std_event.hpp +0 -176
  559. data/ext/third_party/asio/asio/include/asio/detail/std_fenced_block.hpp +0 -62
  560. data/ext/third_party/asio/asio/include/asio/detail/std_global.hpp +0 -70
  561. data/ext/third_party/asio/asio/include/asio/detail/std_mutex.hpp +0 -73
  562. data/ext/third_party/asio/asio/include/asio/detail/std_static_mutex.hpp +0 -81
  563. data/ext/third_party/asio/asio/include/asio/detail/std_thread.hpp +0 -71
  564. data/ext/third_party/asio/asio/include/asio/detail/strand_executor_service.hpp +0 -142
  565. data/ext/third_party/asio/asio/include/asio/detail/strand_service.hpp +0 -142
  566. data/ext/third_party/asio/asio/include/asio/detail/string_view.hpp +0 -47
  567. data/ext/third_party/asio/asio/include/asio/detail/thread.hpp +0 -60
  568. data/ext/third_party/asio/asio/include/asio/detail/thread_context.hpp +0 -42
  569. data/ext/third_party/asio/asio/include/asio/detail/thread_group.hpp +0 -95
  570. data/ext/third_party/asio/asio/include/asio/detail/thread_info_base.hpp +0 -125
  571. data/ext/third_party/asio/asio/include/asio/detail/throw_error.hpp +0 -53
  572. data/ext/third_party/asio/asio/include/asio/detail/throw_exception.hpp +0 -51
  573. data/ext/third_party/asio/asio/include/asio/detail/timer_queue.hpp +0 -360
  574. data/ext/third_party/asio/asio/include/asio/detail/timer_queue_base.hpp +0 -68
  575. data/ext/third_party/asio/asio/include/asio/detail/timer_queue_ptime.hpp +0 -99
  576. data/ext/third_party/asio/asio/include/asio/detail/timer_queue_set.hpp +0 -66
  577. data/ext/third_party/asio/asio/include/asio/detail/timer_scheduler.hpp +0 -35
  578. data/ext/third_party/asio/asio/include/asio/detail/timer_scheduler_fwd.hpp +0 -40
  579. data/ext/third_party/asio/asio/include/asio/detail/tss_ptr.hpp +0 -69
  580. data/ext/third_party/asio/asio/include/asio/detail/type_traits.hpp +0 -89
  581. data/ext/third_party/asio/asio/include/asio/detail/variadic_templates.hpp +0 -151
  582. data/ext/third_party/asio/asio/include/asio/detail/wait_handler.hpp +0 -87
  583. data/ext/third_party/asio/asio/include/asio/detail/wait_op.hpp +0 -45
  584. data/ext/third_party/asio/asio/include/asio/detail/win_event.hpp +0 -151
  585. data/ext/third_party/asio/asio/include/asio/detail/win_fd_set_adapter.hpp +0 -149
  586. data/ext/third_party/asio/asio/include/asio/detail/win_fenced_block.hpp +0 -90
  587. data/ext/third_party/asio/asio/include/asio/detail/win_global.hpp +0 -71
  588. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_handle_read_op.hpp +0 -113
  589. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_handle_service.hpp +0 -335
  590. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_handle_write_op.hpp +0 -106
  591. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_io_context.hpp +0 -338
  592. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_null_buffers_op.hpp +0 -123
  593. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_operation.hpp +0 -96
  594. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_overlapped_op.hpp +0 -92
  595. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_overlapped_ptr.hpp +0 -159
  596. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_serial_port_service.hpp +0 -232
  597. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_accept_op.hpp +0 -308
  598. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_connect_op.hpp +0 -130
  599. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_recv_op.hpp +0 -120
  600. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_recvfrom_op.hpp +0 -129
  601. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_recvmsg_op.hpp +0 -121
  602. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_send_op.hpp +0 -114
  603. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_service.hpp +0 -581
  604. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_service_base.hpp +0 -600
  605. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_thread_info.hpp +0 -34
  606. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_wait_op.hpp +0 -123
  607. data/ext/third_party/asio/asio/include/asio/detail/win_mutex.hpp +0 -78
  608. data/ext/third_party/asio/asio/include/asio/detail/win_object_handle_service.hpp +0 -195
  609. data/ext/third_party/asio/asio/include/asio/detail/win_static_mutex.hpp +0 -74
  610. data/ext/third_party/asio/asio/include/asio/detail/win_thread.hpp +0 -147
  611. data/ext/third_party/asio/asio/include/asio/detail/win_tss_ptr.hpp +0 -79
  612. data/ext/third_party/asio/asio/include/asio/detail/winapp_thread.hpp +0 -124
  613. data/ext/third_party/asio/asio/include/asio/detail/wince_thread.hpp +0 -124
  614. data/ext/third_party/asio/asio/include/asio/detail/winrt_async_manager.hpp +0 -305
  615. data/ext/third_party/asio/asio/include/asio/detail/winrt_async_op.hpp +0 -65
  616. data/ext/third_party/asio/asio/include/asio/detail/winrt_resolve_op.hpp +0 -121
  617. data/ext/third_party/asio/asio/include/asio/detail/winrt_resolver_service.hpp +0 -212
  618. data/ext/third_party/asio/asio/include/asio/detail/winrt_socket_connect_op.hpp +0 -94
  619. data/ext/third_party/asio/asio/include/asio/detail/winrt_socket_recv_op.hpp +0 -115
  620. data/ext/third_party/asio/asio/include/asio/detail/winrt_socket_send_op.hpp +0 -106
  621. data/ext/third_party/asio/asio/include/asio/detail/winrt_ssocket_service.hpp +0 -250
  622. data/ext/third_party/asio/asio/include/asio/detail/winrt_ssocket_service_base.hpp +0 -362
  623. data/ext/third_party/asio/asio/include/asio/detail/winrt_timer_scheduler.hpp +0 -147
  624. data/ext/third_party/asio/asio/include/asio/detail/winrt_utils.hpp +0 -106
  625. data/ext/third_party/asio/asio/include/asio/detail/winsock_init.hpp +0 -128
  626. data/ext/third_party/asio/asio/include/asio/detail/work_dispatcher.hpp +0 -73
  627. data/ext/third_party/asio/asio/include/asio/detail/wrapped_handler.hpp +0 -291
  628. data/ext/third_party/asio/asio/include/asio/dispatch.hpp +0 -118
  629. data/ext/third_party/asio/asio/include/asio/error.hpp +0 -356
  630. data/ext/third_party/asio/asio/include/asio/error_code.hpp +0 -202
  631. data/ext/third_party/asio/asio/include/asio/execution_context.hpp +0 -412
  632. data/ext/third_party/asio/asio/include/asio/executor.hpp +0 -341
  633. data/ext/third_party/asio/asio/include/asio/executor_work_guard.hpp +0 -170
  634. data/ext/third_party/asio/asio/include/asio/generic/basic_endpoint.hpp +0 -193
  635. data/ext/third_party/asio/asio/include/asio/generic/datagram_protocol.hpp +0 -123
  636. data/ext/third_party/asio/asio/include/asio/generic/detail/endpoint.hpp +0 -133
  637. data/ext/third_party/asio/asio/include/asio/generic/detail/impl/endpoint.ipp +0 -110
  638. data/ext/third_party/asio/asio/include/asio/generic/raw_protocol.hpp +0 -121
  639. data/ext/third_party/asio/asio/include/asio/generic/seq_packet_protocol.hpp +0 -122
  640. data/ext/third_party/asio/asio/include/asio/generic/stream_protocol.hpp +0 -127
  641. data/ext/third_party/asio/asio/include/asio/handler_alloc_hook.hpp +0 -81
  642. data/ext/third_party/asio/asio/include/asio/handler_continuation_hook.hpp +0 -54
  643. data/ext/third_party/asio/asio/include/asio/handler_invoke_hook.hpp +0 -85
  644. data/ext/third_party/asio/asio/include/asio/high_resolution_timer.hpp +0 -44
  645. data/ext/third_party/asio/asio/include/asio/impl/awaitable.hpp +0 -422
  646. data/ext/third_party/asio/asio/include/asio/impl/buffered_read_stream.hpp +0 -491
  647. data/ext/third_party/asio/asio/include/asio/impl/buffered_write_stream.hpp +0 -471
  648. data/ext/third_party/asio/asio/include/asio/impl/co_spawn.hpp +0 -160
  649. data/ext/third_party/asio/asio/include/asio/impl/compose.hpp +0 -533
  650. data/ext/third_party/asio/asio/include/asio/impl/connect.hpp +0 -872
  651. data/ext/third_party/asio/asio/include/asio/impl/defer.hpp +0 -113
  652. data/ext/third_party/asio/asio/include/asio/impl/detached.hpp +0 -130
  653. data/ext/third_party/asio/asio/include/asio/impl/dispatch.hpp +0 -113
  654. data/ext/third_party/asio/asio/include/asio/impl/error.ipp +0 -128
  655. data/ext/third_party/asio/asio/include/asio/impl/error_code.ipp +0 -206
  656. data/ext/third_party/asio/asio/include/asio/impl/execution_context.hpp +0 -109
  657. data/ext/third_party/asio/asio/include/asio/impl/execution_context.ipp +0 -82
  658. data/ext/third_party/asio/asio/include/asio/impl/executor.hpp +0 -387
  659. data/ext/third_party/asio/asio/include/asio/impl/executor.ipp +0 -38
  660. data/ext/third_party/asio/asio/include/asio/impl/handler_alloc_hook.ipp +0 -52
  661. data/ext/third_party/asio/asio/include/asio/impl/io_context.hpp +0 -353
  662. data/ext/third_party/asio/asio/include/asio/impl/io_context.ipp +0 -175
  663. data/ext/third_party/asio/asio/include/asio/impl/post.hpp +0 -113
  664. data/ext/third_party/asio/asio/include/asio/impl/read.hpp +0 -1135
  665. data/ext/third_party/asio/asio/include/asio/impl/read_at.hpp +0 -699
  666. data/ext/third_party/asio/asio/include/asio/impl/read_until.hpp +0 -3150
  667. data/ext/third_party/asio/asio/include/asio/impl/redirect_error.hpp +0 -372
  668. data/ext/third_party/asio/asio/include/asio/impl/serial_port_base.hpp +0 -59
  669. data/ext/third_party/asio/asio/include/asio/impl/serial_port_base.ipp +0 -554
  670. data/ext/third_party/asio/asio/include/asio/impl/spawn.hpp +0 -490
  671. data/ext/third_party/asio/asio/include/asio/impl/src.cpp +0 -25
  672. data/ext/third_party/asio/asio/include/asio/impl/src.hpp +0 -82
  673. data/ext/third_party/asio/asio/include/asio/impl/system_context.hpp +0 -34
  674. data/ext/third_party/asio/asio/include/asio/impl/system_context.ipp +0 -80
  675. data/ext/third_party/asio/asio/include/asio/impl/system_executor.hpp +0 -85
  676. data/ext/third_party/asio/asio/include/asio/impl/thread_pool.hpp +0 -127
  677. data/ext/third_party/asio/asio/include/asio/impl/thread_pool.ipp +0 -87
  678. data/ext/third_party/asio/asio/include/asio/impl/use_awaitable.hpp +0 -276
  679. data/ext/third_party/asio/asio/include/asio/impl/use_future.hpp +0 -887
  680. data/ext/third_party/asio/asio/include/asio/impl/write.hpp +0 -1043
  681. data/ext/third_party/asio/asio/include/asio/impl/write_at.hpp +0 -624
  682. data/ext/third_party/asio/asio/include/asio/io_context.hpp +0 -872
  683. data/ext/third_party/asio/asio/include/asio/io_context_strand.hpp +0 -374
  684. data/ext/third_party/asio/asio/include/asio/io_service.hpp +0 -33
  685. data/ext/third_party/asio/asio/include/asio/io_service_strand.hpp +0 -20
  686. data/ext/third_party/asio/asio/include/asio/ip/address.hpp +0 -268
  687. data/ext/third_party/asio/asio/include/asio/ip/address_v4.hpp +0 -335
  688. data/ext/third_party/asio/asio/include/asio/ip/address_v4_iterator.hpp +0 -162
  689. data/ext/third_party/asio/asio/include/asio/ip/address_v4_range.hpp +0 -134
  690. data/ext/third_party/asio/asio/include/asio/ip/address_v6.hpp +0 -341
  691. data/ext/third_party/asio/asio/include/asio/ip/address_v6_iterator.hpp +0 -183
  692. data/ext/third_party/asio/asio/include/asio/ip/address_v6_range.hpp +0 -129
  693. data/ext/third_party/asio/asio/include/asio/ip/bad_address_cast.hpp +0 -53
  694. data/ext/third_party/asio/asio/include/asio/ip/basic_endpoint.hpp +0 -264
  695. data/ext/third_party/asio/asio/include/asio/ip/basic_resolver.hpp +0 -1030
  696. data/ext/third_party/asio/asio/include/asio/ip/basic_resolver_entry.hpp +0 -113
  697. data/ext/third_party/asio/asio/include/asio/ip/basic_resolver_iterator.hpp +0 -192
  698. data/ext/third_party/asio/asio/include/asio/ip/basic_resolver_query.hpp +0 -244
  699. data/ext/third_party/asio/asio/include/asio/ip/basic_resolver_results.hpp +0 -311
  700. data/ext/third_party/asio/asio/include/asio/ip/detail/endpoint.hpp +0 -141
  701. data/ext/third_party/asio/asio/include/asio/ip/detail/impl/endpoint.ipp +0 -199
  702. data/ext/third_party/asio/asio/include/asio/ip/detail/socket_option.hpp +0 -566
  703. data/ext/third_party/asio/asio/include/asio/ip/host_name.hpp +0 -42
  704. data/ext/third_party/asio/asio/include/asio/ip/icmp.hpp +0 -115
  705. data/ext/third_party/asio/asio/include/asio/ip/impl/address.hpp +0 -67
  706. data/ext/third_party/asio/asio/include/asio/ip/impl/address.ipp +0 -239
  707. data/ext/third_party/asio/asio/include/asio/ip/impl/address_v4.hpp +0 -67
  708. data/ext/third_party/asio/asio/include/asio/ip/impl/address_v4.ipp +0 -210
  709. data/ext/third_party/asio/asio/include/asio/ip/impl/address_v6.hpp +0 -67
  710. data/ext/third_party/asio/asio/include/asio/ip/impl/address_v6.ipp +0 -350
  711. data/ext/third_party/asio/asio/include/asio/ip/impl/basic_endpoint.hpp +0 -43
  712. data/ext/third_party/asio/asio/include/asio/ip/impl/host_name.ipp +0 -54
  713. data/ext/third_party/asio/asio/include/asio/ip/impl/network_v4.hpp +0 -54
  714. data/ext/third_party/asio/asio/include/asio/ip/impl/network_v4.ipp +0 -216
  715. data/ext/third_party/asio/asio/include/asio/ip/impl/network_v6.hpp +0 -53
  716. data/ext/third_party/asio/asio/include/asio/ip/impl/network_v6.ipp +0 -185
  717. data/ext/third_party/asio/asio/include/asio/ip/multicast.hpp +0 -191
  718. data/ext/third_party/asio/asio/include/asio/ip/network_v4.hpp +0 -261
  719. data/ext/third_party/asio/asio/include/asio/ip/network_v6.hpp +0 -235
  720. data/ext/third_party/asio/asio/include/asio/ip/resolver_base.hpp +0 -129
  721. data/ext/third_party/asio/asio/include/asio/ip/resolver_query_base.hpp +0 -43
  722. data/ext/third_party/asio/asio/include/asio/ip/tcp.hpp +0 -155
  723. data/ext/third_party/asio/asio/include/asio/ip/udp.hpp +0 -111
  724. data/ext/third_party/asio/asio/include/asio/ip/unicast.hpp +0 -70
  725. data/ext/third_party/asio/asio/include/asio/ip/v6_only.hpp +0 -69
  726. data/ext/third_party/asio/asio/include/asio/is_executor.hpp +0 -46
  727. data/ext/third_party/asio/asio/include/asio/is_read_buffered.hpp +0 -59
  728. data/ext/third_party/asio/asio/include/asio/is_write_buffered.hpp +0 -59
  729. data/ext/third_party/asio/asio/include/asio/local/basic_endpoint.hpp +0 -247
  730. data/ext/third_party/asio/asio/include/asio/local/connect_pair.hpp +0 -101
  731. data/ext/third_party/asio/asio/include/asio/local/datagram_protocol.hpp +0 -80
  732. data/ext/third_party/asio/asio/include/asio/local/detail/endpoint.hpp +0 -139
  733. data/ext/third_party/asio/asio/include/asio/local/detail/impl/endpoint.ipp +0 -136
  734. data/ext/third_party/asio/asio/include/asio/local/stream_protocol.hpp +0 -90
  735. data/ext/third_party/asio/asio/include/asio/packaged_task.hpp +0 -126
  736. data/ext/third_party/asio/asio/include/asio/placeholders.hpp +0 -151
  737. data/ext/third_party/asio/asio/include/asio/posix/basic_descriptor.hpp +0 -697
  738. data/ext/third_party/asio/asio/include/asio/posix/basic_stream_descriptor.hpp +0 -470
  739. data/ext/third_party/asio/asio/include/asio/posix/descriptor.hpp +0 -37
  740. data/ext/third_party/asio/asio/include/asio/posix/descriptor_base.hpp +0 -90
  741. data/ext/third_party/asio/asio/include/asio/posix/stream_descriptor.hpp +0 -37
  742. data/ext/third_party/asio/asio/include/asio/post.hpp +0 -123
  743. data/ext/third_party/asio/asio/include/asio/read.hpp +0 -1288
  744. data/ext/third_party/asio/asio/include/asio/read_at.hpp +0 -694
  745. data/ext/third_party/asio/asio/include/asio/read_until.hpp +0 -2863
  746. data/ext/third_party/asio/asio/include/asio/redirect_error.hpp +0 -66
  747. data/ext/third_party/asio/asio/include/asio/serial_port.hpp +0 -36
  748. data/ext/third_party/asio/asio/include/asio/serial_port_base.hpp +0 -167
  749. data/ext/third_party/asio/asio/include/asio/signal_set.hpp +0 -28
  750. data/ext/third_party/asio/asio/include/asio/socket_base.hpp +0 -559
  751. data/ext/third_party/asio/asio/include/asio/spawn.hpp +0 -336
  752. data/ext/third_party/asio/asio/include/asio/ssl/context.hpp +0 -761
  753. data/ext/third_party/asio/asio/include/asio/ssl/context_base.hpp +0 -209
  754. data/ext/third_party/asio/asio/include/asio/ssl/detail/buffered_handshake_op.hpp +0 -114
  755. data/ext/third_party/asio/asio/include/asio/ssl/detail/engine.hpp +0 -160
  756. data/ext/third_party/asio/asio/include/asio/ssl/detail/handshake_op.hpp +0 -62
  757. data/ext/third_party/asio/asio/include/asio/ssl/detail/impl/engine.ipp +0 -336
  758. data/ext/third_party/asio/asio/include/asio/ssl/detail/impl/openssl_init.ipp +0 -165
  759. data/ext/third_party/asio/asio/include/asio/ssl/detail/io.hpp +0 -381
  760. data/ext/third_party/asio/asio/include/asio/ssl/detail/openssl_init.hpp +0 -101
  761. data/ext/third_party/asio/asio/include/asio/ssl/detail/openssl_types.hpp +0 -34
  762. data/ext/third_party/asio/asio/include/asio/ssl/detail/password_callback.hpp +0 -66
  763. data/ext/third_party/asio/asio/include/asio/ssl/detail/read_op.hpp +0 -67
  764. data/ext/third_party/asio/asio/include/asio/ssl/detail/shutdown_op.hpp +0 -64
  765. data/ext/third_party/asio/asio/include/asio/ssl/detail/stream_core.hpp +0 -135
  766. data/ext/third_party/asio/asio/include/asio/ssl/detail/verify_callback.hpp +0 -62
  767. data/ext/third_party/asio/asio/include/asio/ssl/detail/write_op.hpp +0 -67
  768. data/ext/third_party/asio/asio/include/asio/ssl/error.hpp +0 -125
  769. data/ext/third_party/asio/asio/include/asio/ssl/host_name_verification.hpp +0 -90
  770. data/ext/third_party/asio/asio/include/asio/ssl/impl/context.hpp +0 -67
  771. data/ext/third_party/asio/asio/include/asio/ssl/impl/context.ipp +0 -1238
  772. data/ext/third_party/asio/asio/include/asio/ssl/impl/error.ipp +0 -102
  773. data/ext/third_party/asio/asio/include/asio/ssl/impl/host_name_verification.ipp +0 -73
  774. data/ext/third_party/asio/asio/include/asio/ssl/impl/rfc2818_verification.ipp +0 -164
  775. data/ext/third_party/asio/asio/include/asio/ssl/impl/src.hpp +0 -29
  776. data/ext/third_party/asio/asio/include/asio/ssl/rfc2818_verification.hpp +0 -98
  777. data/ext/third_party/asio/asio/include/asio/ssl/stream.hpp +0 -885
  778. data/ext/third_party/asio/asio/include/asio/ssl/stream_base.hpp +0 -52
  779. data/ext/third_party/asio/asio/include/asio/ssl/verify_context.hpp +0 -67
  780. data/ext/third_party/asio/asio/include/asio/ssl/verify_mode.hpp +0 -63
  781. data/ext/third_party/asio/asio/include/asio/ssl.hpp +0 -28
  782. data/ext/third_party/asio/asio/include/asio/steady_timer.hpp +0 -42
  783. data/ext/third_party/asio/asio/include/asio/strand.hpp +0 -314
  784. data/ext/third_party/asio/asio/include/asio/streambuf.hpp +0 -33
  785. data/ext/third_party/asio/asio/include/asio/system_context.hpp +0 -81
  786. data/ext/third_party/asio/asio/include/asio/system_error.hpp +0 -131
  787. data/ext/third_party/asio/asio/include/asio/system_executor.hpp +0 -129
  788. data/ext/third_party/asio/asio/include/asio/system_timer.hpp +0 -42
  789. data/ext/third_party/asio/asio/include/asio/this_coro.hpp +0 -45
  790. data/ext/third_party/asio/asio/include/asio/thread.hpp +0 -92
  791. data/ext/third_party/asio/asio/include/asio/thread_pool.hpp +0 -235
  792. data/ext/third_party/asio/asio/include/asio/time_traits.hpp +0 -86
  793. data/ext/third_party/asio/asio/include/asio/ts/buffer.hpp +0 -24
  794. data/ext/third_party/asio/asio/include/asio/ts/executor.hpp +0 -34
  795. data/ext/third_party/asio/asio/include/asio/ts/internet.hpp +0 -40
  796. data/ext/third_party/asio/asio/include/asio/ts/io_context.hpp +0 -20
  797. data/ext/third_party/asio/asio/include/asio/ts/net.hpp +0 -26
  798. data/ext/third_party/asio/asio/include/asio/ts/netfwd.hpp +0 -203
  799. data/ext/third_party/asio/asio/include/asio/ts/socket.hpp +0 -27
  800. data/ext/third_party/asio/asio/include/asio/ts/timer.hpp +0 -26
  801. data/ext/third_party/asio/asio/include/asio/unyield.hpp +0 -21
  802. data/ext/third_party/asio/asio/include/asio/use_awaitable.hpp +0 -110
  803. data/ext/third_party/asio/asio/include/asio/use_future.hpp +0 -160
  804. data/ext/third_party/asio/asio/include/asio/uses_executor.hpp +0 -71
  805. data/ext/third_party/asio/asio/include/asio/version.hpp +0 -23
  806. data/ext/third_party/asio/asio/include/asio/wait_traits.hpp +0 -56
  807. data/ext/third_party/asio/asio/include/asio/windows/basic_object_handle.hpp +0 -435
  808. data/ext/third_party/asio/asio/include/asio/windows/basic_overlapped_handle.hpp +0 -361
  809. data/ext/third_party/asio/asio/include/asio/windows/basic_random_access_handle.hpp +0 -490
  810. data/ext/third_party/asio/asio/include/asio/windows/basic_stream_handle.hpp +0 -474
  811. data/ext/third_party/asio/asio/include/asio/windows/object_handle.hpp +0 -38
  812. data/ext/third_party/asio/asio/include/asio/windows/overlapped_handle.hpp +0 -39
  813. data/ext/third_party/asio/asio/include/asio/windows/overlapped_ptr.hpp +0 -143
  814. data/ext/third_party/asio/asio/include/asio/windows/random_access_handle.hpp +0 -37
  815. data/ext/third_party/asio/asio/include/asio/windows/stream_handle.hpp +0 -37
  816. data/ext/third_party/asio/asio/include/asio/write.hpp +0 -1246
  817. data/ext/third_party/asio/asio/include/asio/write_at.hpp +0 -702
  818. data/ext/third_party/asio/asio/include/asio/yield.hpp +0 -23
  819. data/ext/third_party/asio/asio/include/asio.hpp +0 -147
  820. data/ext/third_party/asio/asio/release.pl +0 -440
  821. data/ext/third_party/asio/asio/src/.gitignore +0 -11
  822. data/ext/third_party/asio/asio/src/Makefile.am +0 -23
  823. data/ext/third_party/asio/asio/src/Makefile.mgw +0 -204
  824. data/ext/third_party/asio/asio/src/Makefile.msc +0 -497
  825. data/ext/third_party/asio/asio/src/asio.cpp +0 -11
  826. data/ext/third_party/asio/asio/src/asio_ssl.cpp +0 -11
  827. data/ext/third_party/asio/asio/src/doc/.gitignore +0 -5
  828. data/ext/third_party/asio/asio/src/doc/Jamfile.v2 +0 -62
  829. data/ext/third_party/asio/asio/src/doc/asio.png +0 -0
  830. data/ext/third_party/asio/asio/src/doc/asio.qbk +0 -127
  831. data/ext/third_party/asio/asio/src/doc/asioref.sty +0 -90
  832. data/ext/third_party/asio/asio/src/doc/asioref.xsl +0 -94
  833. data/ext/third_party/asio/asio/src/doc/boost_bind_dox.txt +0 -5
  834. data/ext/third_party/asio/asio/src/doc/doxy2qbk.pl +0 -22
  835. data/ext/third_party/asio/asio/src/doc/examples.qbk +0 -564
  836. data/ext/third_party/asio/asio/src/doc/history.qbk +0 -1794
  837. data/ext/third_party/asio/asio/src/doc/index.xml +0 -13
  838. data/ext/third_party/asio/asio/src/doc/makepdf.pl +0 -26
  839. data/ext/third_party/asio/asio/src/doc/net_ts.qbk +0 -479
  840. data/ext/third_party/asio/asio/src/doc/noncopyable_dox.txt +0 -3
  841. data/ext/third_party/asio/asio/src/doc/overview/allocation.qbk +0 -89
  842. data/ext/third_party/asio/asio/src/doc/overview/async.qbk +0 -185
  843. data/ext/third_party/asio/asio/src/doc/overview/async_op1.dot +0 -78
  844. data/ext/third_party/asio/asio/src/doc/overview/async_op1.png +0 -0
  845. data/ext/third_party/asio/asio/src/doc/overview/async_op2.dot +0 -78
  846. data/ext/third_party/asio/asio/src/doc/overview/async_op2.png +0 -0
  847. data/ext/third_party/asio/asio/src/doc/overview/basics.qbk +0 -106
  848. data/ext/third_party/asio/asio/src/doc/overview/bsd_sockets.qbk +0 -270
  849. data/ext/third_party/asio/asio/src/doc/overview/buffers.qbk +0 -163
  850. data/ext/third_party/asio/asio/src/doc/overview/concurrency_hint.qbk +0 -88
  851. data/ext/third_party/asio/asio/src/doc/overview/coroutine.qbk +0 -51
  852. data/ext/third_party/asio/asio/src/doc/overview/coroutines_ts.qbk +0 -97
  853. data/ext/third_party/asio/asio/src/doc/overview/cpp2011.qbk +0 -271
  854. data/ext/third_party/asio/asio/src/doc/overview/handler_tracking.qbk +0 -220
  855. data/ext/third_party/asio/asio/src/doc/overview/implementation.qbk +0 -305
  856. data/ext/third_party/asio/asio/src/doc/overview/iostreams.qbk +0 -72
  857. data/ext/third_party/asio/asio/src/doc/overview/line_based.qbk +0 -118
  858. data/ext/third_party/asio/asio/src/doc/overview/other_protocols.qbk +0 -94
  859. data/ext/third_party/asio/asio/src/doc/overview/posix.qbk +0 -152
  860. data/ext/third_party/asio/asio/src/doc/overview/proactor.dot +0 -100
  861. data/ext/third_party/asio/asio/src/doc/overview/proactor.png +0 -0
  862. data/ext/third_party/asio/asio/src/doc/overview/protocols.qbk +0 -149
  863. data/ext/third_party/asio/asio/src/doc/overview/rationale.qbk +0 -54
  864. data/ext/third_party/asio/asio/src/doc/overview/reactor.qbk +0 -44
  865. data/ext/third_party/asio/asio/src/doc/overview/serial_ports.qbk +0 -45
  866. data/ext/third_party/asio/asio/src/doc/overview/signals.qbk +0 -44
  867. data/ext/third_party/asio/asio/src/doc/overview/spawn.qbk +0 -102
  868. data/ext/third_party/asio/asio/src/doc/overview/ssl.qbk +0 -124
  869. data/ext/third_party/asio/asio/src/doc/overview/strands.qbk +0 -114
  870. data/ext/third_party/asio/asio/src/doc/overview/streams.qbk +0 -62
  871. data/ext/third_party/asio/asio/src/doc/overview/sync_op.dot +0 -67
  872. data/ext/third_party/asio/asio/src/doc/overview/sync_op.png +0 -0
  873. data/ext/third_party/asio/asio/src/doc/overview/threads.qbk +0 -67
  874. data/ext/third_party/asio/asio/src/doc/overview/timers.qbk +0 -52
  875. data/ext/third_party/asio/asio/src/doc/overview/windows.qbk +0 -126
  876. data/ext/third_party/asio/asio/src/doc/overview.qbk +0 -103
  877. data/ext/third_party/asio/asio/src/doc/project-root.jam +0 -1
  878. data/ext/third_party/asio/asio/src/doc/quickref.xml +0 -561
  879. data/ext/third_party/asio/asio/src/doc/reference.dox +0 -264
  880. data/ext/third_party/asio/asio/src/doc/reference.qbk +0 -125973
  881. data/ext/third_party/asio/asio/src/doc/reference.xsl +0 -1831
  882. data/ext/third_party/asio/asio/src/doc/release_checklist.htm +0 -68
  883. data/ext/third_party/asio/asio/src/doc/requirements/AcceptHandler.qbk +0 -72
  884. data/ext/third_party/asio/asio/src/doc/requirements/AcceptableProtocol.qbk +0 -25
  885. data/ext/third_party/asio/asio/src/doc/requirements/AsyncRandomAccessReadDevice.qbk +0 -56
  886. data/ext/third_party/asio/asio/src/doc/requirements/AsyncRandomAccessWriteDevice.qbk +0 -57
  887. data/ext/third_party/asio/asio/src/doc/requirements/AsyncReadStream.qbk +0 -50
  888. data/ext/third_party/asio/asio/src/doc/requirements/AsyncWriteStream.qbk +0 -48
  889. data/ext/third_party/asio/asio/src/doc/requirements/BufferedHandshakeHandler.qbk +0 -55
  890. data/ext/third_party/asio/asio/src/doc/requirements/CompletionCondition.qbk +0 -42
  891. data/ext/third_party/asio/asio/src/doc/requirements/CompletionHandler.qbk +0 -63
  892. data/ext/third_party/asio/asio/src/doc/requirements/ConnectCondition.qbk +0 -34
  893. data/ext/third_party/asio/asio/src/doc/requirements/ConnectHandler.qbk +0 -72
  894. data/ext/third_party/asio/asio/src/doc/requirements/ConstBufferSequence.qbk +0 -53
  895. data/ext/third_party/asio/asio/src/doc/requirements/DynamicBuffer.qbk +0 -16
  896. data/ext/third_party/asio/asio/src/doc/requirements/DynamicBuffer_v1.qbk +0 -93
  897. data/ext/third_party/asio/asio/src/doc/requirements/DynamicBuffer_v2.qbk +0 -94
  898. data/ext/third_party/asio/asio/src/doc/requirements/Endpoint.qbk +0 -97
  899. data/ext/third_party/asio/asio/src/doc/requirements/EndpointSequence.qbk +0 -30
  900. data/ext/third_party/asio/asio/src/doc/requirements/ExecutionContext.qbk +0 -36
  901. data/ext/third_party/asio/asio/src/doc/requirements/Executor.qbk +0 -141
  902. data/ext/third_party/asio/asio/src/doc/requirements/GettableSerialPortOption.qbk +0 -33
  903. data/ext/third_party/asio/asio/src/doc/requirements/GettableSocketOption.qbk +0 -67
  904. data/ext/third_party/asio/asio/src/doc/requirements/Handler.qbk +0 -64
  905. data/ext/third_party/asio/asio/src/doc/requirements/HandshakeHandler.qbk +0 -72
  906. data/ext/third_party/asio/asio/src/doc/requirements/InternetProtocol.qbk +0 -47
  907. data/ext/third_party/asio/asio/src/doc/requirements/IoControlCommand.qbk +0 -34
  908. data/ext/third_party/asio/asio/src/doc/requirements/IoObjectService.qbk +0 -62
  909. data/ext/third_party/asio/asio/src/doc/requirements/IteratorConnectHandler.qbk +0 -81
  910. data/ext/third_party/asio/asio/src/doc/requirements/LegacyCompletionHandler.qbk +0 -65
  911. data/ext/third_party/asio/asio/src/doc/requirements/MoveAcceptHandler.qbk +0 -61
  912. data/ext/third_party/asio/asio/src/doc/requirements/MutableBufferSequence.qbk +0 -54
  913. data/ext/third_party/asio/asio/src/doc/requirements/ProtoAllocator.qbk +0 -19
  914. data/ext/third_party/asio/asio/src/doc/requirements/Protocol.qbk +0 -56
  915. data/ext/third_party/asio/asio/src/doc/requirements/RangeConnectHandler.qbk +0 -82
  916. data/ext/third_party/asio/asio/src/doc/requirements/ReadHandler.qbk +0 -79
  917. data/ext/third_party/asio/asio/src/doc/requirements/ResolveHandler.qbk +0 -82
  918. data/ext/third_party/asio/asio/src/doc/requirements/Service.qbk +0 -40
  919. data/ext/third_party/asio/asio/src/doc/requirements/SettableSerialPortOption.qbk +0 -33
  920. data/ext/third_party/asio/asio/src/doc/requirements/SettableSocketOption.qbk +0 -54
  921. data/ext/third_party/asio/asio/src/doc/requirements/ShutdownHandler.qbk +0 -72
  922. data/ext/third_party/asio/asio/src/doc/requirements/SignalHandler.qbk +0 -79
  923. data/ext/third_party/asio/asio/src/doc/requirements/SyncRandomAccessReadDevice.qbk +0 -49
  924. data/ext/third_party/asio/asio/src/doc/requirements/SyncRandomAccessWriteDevice.qbk +0 -49
  925. data/ext/third_party/asio/asio/src/doc/requirements/SyncReadStream.qbk +0 -41
  926. data/ext/third_party/asio/asio/src/doc/requirements/SyncWriteStream.qbk +0 -39
  927. data/ext/third_party/asio/asio/src/doc/requirements/TimeTraits.qbk +0 -72
  928. data/ext/third_party/asio/asio/src/doc/requirements/WaitHandler.qbk +0 -72
  929. data/ext/third_party/asio/asio/src/doc/requirements/WaitTraits.qbk +0 -52
  930. data/ext/third_party/asio/asio/src/doc/requirements/WriteHandler.qbk +0 -79
  931. data/ext/third_party/asio/asio/src/doc/requirements/asynchronous_operations.qbk +0 -300
  932. data/ext/third_party/asio/asio/src/doc/requirements/asynchronous_socket_operations.qbk +0 -39
  933. data/ext/third_party/asio/asio/src/doc/requirements/read_write_operations.qbk +0 -34
  934. data/ext/third_party/asio/asio/src/doc/requirements/synchronous_socket_operations.qbk +0 -37
  935. data/ext/third_party/asio/asio/src/doc/std_exception_dox.txt +0 -7
  936. data/ext/third_party/asio/asio/src/doc/tutorial.dox +0 -226
  937. data/ext/third_party/asio/asio/src/doc/tutorial.qbk +0 -2387
  938. data/ext/third_party/asio/asio/src/doc/tutorial.xsl +0 -437
  939. data/ext/third_party/asio/asio/src/doc/using.qbk +0 -309
  940. data/ext/third_party/asio/asio/tsify.pl +0 -574
  941. data/ext/third_party/gsl/.clang-format +0 -34
  942. data/ext/third_party/gsl/.github/workflows/main.yml +0 -94
  943. data/ext/third_party/gsl/.gitignore +0 -16
  944. data/ext/third_party/gsl/.travis.yml +0 -551
  945. data/ext/third_party/gsl/CMakeLists.txt +0 -119
  946. data/ext/third_party/gsl/CMakeSettings.json +0 -18
  947. data/ext/third_party/gsl/CONTRIBUTING.md +0 -29
  948. data/ext/third_party/gsl/GSL.natvis +0 -98
  949. data/ext/third_party/gsl/LICENSE +0 -21
  950. data/ext/third_party/gsl/README.md +0 -124
  951. data/ext/third_party/gsl/ThirdPartyNotices.txt +0 -41
  952. data/ext/third_party/gsl/appveyor.yml +0 -128
  953. data/ext/third_party/gsl/include/gsl/gsl +0 -29
  954. data/ext/third_party/gsl/include/gsl/gsl_algorithm +0 -61
  955. data/ext/third_party/gsl/include/gsl/gsl_assert +0 -133
  956. data/ext/third_party/gsl/include/gsl/gsl_byte +0 -209
  957. data/ext/third_party/gsl/include/gsl/gsl_util +0 -171
  958. data/ext/third_party/gsl/include/gsl/multi_span +0 -2273
  959. data/ext/third_party/gsl/include/gsl/pointers +0 -301
  960. data/ext/third_party/gsl/include/gsl/span +0 -764
  961. data/ext/third_party/gsl/include/gsl/span_ext +0 -198
  962. data/ext/third_party/gsl/include/gsl/string_span +0 -716
  963. data/ext/third_party/http_parser/.gitignore +0 -30
  964. data/ext/third_party/http_parser/.mailmap +0 -8
  965. data/ext/third_party/http_parser/.travis.yml +0 -13
  966. data/ext/third_party/http_parser/AUTHORS +0 -68
  967. data/ext/third_party/http_parser/LICENSE-MIT +0 -19
  968. data/ext/third_party/http_parser/Makefile +0 -160
  969. data/ext/third_party/http_parser/README.md +0 -246
  970. data/ext/third_party/http_parser/bench.c +0 -128
  971. data/ext/third_party/http_parser/http_parser.c +0 -2568
  972. data/ext/third_party/http_parser/http_parser.gyp +0 -111
  973. data/ext/third_party/http_parser/http_parser.h +0 -447
  974. data/ext/third_party/http_parser/test.c +0 -4600
  975. data/ext/third_party/json/.appveyor.yml +0 -44
  976. data/ext/third_party/json/.clang-format +0 -84
  977. data/ext/third_party/json/.conan/build.py +0 -80
  978. data/ext/third_party/json/.conan/test_package/CMakeLists.txt +0 -12
  979. data/ext/third_party/json/.conan/test_package/conanfile.py +0 -24
  980. data/ext/third_party/json/.conan/test_package/test_package.cpp +0 -16
  981. data/ext/third_party/json/.gitignore +0 -3
  982. data/ext/third_party/json/.travis.yml +0 -173
  983. data/ext/third_party/json/CMakeLists.txt +0 -44
  984. data/ext/third_party/json/LICENSE +0 -21
  985. data/ext/third_party/json/LICENSE.double-conversion +0 -32
  986. data/ext/third_party/json/LICENSE.itoa +0 -19
  987. data/ext/third_party/json/LICENSE.ryu +0 -201
  988. data/ext/third_party/json/Makefile +0 -77
  989. data/ext/third_party/json/README.md +0 -149
  990. data/ext/third_party/json/conanfile.py +0 -28
  991. data/ext/third_party/json/include/tao/json/basic_value.hpp +0 -941
  992. data/ext/third_party/json/include/tao/json/binary.hpp +0 -103
  993. data/ext/third_party/json/include/tao/json/binary_view.hpp +0 -31
  994. data/ext/third_party/json/include/tao/json/binding/constant.hpp +0 -232
  995. data/ext/third_party/json/include/tao/json/binding/element.hpp +0 -182
  996. data/ext/third_party/json/include/tao/json/binding/factory.hpp +0 -250
  997. data/ext/third_party/json/include/tao/json/binding/for_nothing_value.hpp +0 -17
  998. data/ext/third_party/json/include/tao/json/binding/for_unknown_key.hpp +0 -17
  999. data/ext/third_party/json/include/tao/json/binding/inherit.hpp +0 -14
  1000. data/ext/third_party/json/include/tao/json/binding/internal/array.hpp +0 -103
  1001. data/ext/third_party/json/include/tao/json/binding/internal/inherit.hpp +0 -45
  1002. data/ext/third_party/json/include/tao/json/binding/internal/object.hpp +0 -267
  1003. data/ext/third_party/json/include/tao/json/binding/internal/type_key.hpp +0 -54
  1004. data/ext/third_party/json/include/tao/json/binding/member.hpp +0 -32
  1005. data/ext/third_party/json/include/tao/json/binding/member_kind.hpp +0 -17
  1006. data/ext/third_party/json/include/tao/json/binding/versions.hpp +0 -127
  1007. data/ext/third_party/json/include/tao/json/binding.hpp +0 -71
  1008. data/ext/third_party/json/include/tao/json/cbor/consume_file.hpp +0 -34
  1009. data/ext/third_party/json/include/tao/json/cbor/consume_string.hpp +0 -32
  1010. data/ext/third_party/json/include/tao/json/cbor/events/from_file.hpp +0 -27
  1011. data/ext/third_party/json/include/tao/json/cbor/events/from_input.hpp +0 -43
  1012. data/ext/third_party/json/include/tao/json/cbor/events/from_string.hpp +0 -37
  1013. data/ext/third_party/json/include/tao/json/cbor/events/to_stream.hpp +0 -161
  1014. data/ext/third_party/json/include/tao/json/cbor/events/to_string.hpp +0 -31
  1015. data/ext/third_party/json/include/tao/json/cbor/from_file.hpp +0 -33
  1016. data/ext/third_party/json/include/tao/json/cbor/from_input.hpp +0 -33
  1017. data/ext/third_party/json/include/tao/json/cbor/from_string.hpp +0 -32
  1018. data/ext/third_party/json/include/tao/json/cbor/internal/grammar.hpp +0 -417
  1019. data/ext/third_party/json/include/tao/json/cbor/internal/major.hpp +0 -28
  1020. data/ext/third_party/json/include/tao/json/cbor/parts_parser.hpp +0 -392
  1021. data/ext/third_party/json/include/tao/json/cbor/to_stream.hpp +0 -27
  1022. data/ext/third_party/json/include/tao/json/cbor/to_string.hpp +0 -28
  1023. data/ext/third_party/json/include/tao/json/cbor.hpp +0 -18
  1024. data/ext/third_party/json/include/tao/json/consume.hpp +0 -43
  1025. data/ext/third_party/json/include/tao/json/consume_file.hpp +0 -33
  1026. data/ext/third_party/json/include/tao/json/consume_string.hpp +0 -31
  1027. data/ext/third_party/json/include/tao/json/contrib/array_traits.hpp +0 -43
  1028. data/ext/third_party/json/include/tao/json/contrib/deque_traits.hpp +0 -41
  1029. data/ext/third_party/json/include/tao/json/contrib/diff.hpp +0 -106
  1030. data/ext/third_party/json/include/tao/json/contrib/get.hpp +0 -152
  1031. data/ext/third_party/json/include/tao/json/contrib/internal/array_traits.hpp +0 -92
  1032. data/ext/third_party/json/include/tao/json/contrib/internal/indirect_traits.hpp +0 -69
  1033. data/ext/third_party/json/include/tao/json/contrib/internal/object_traits.hpp +0 -105
  1034. data/ext/third_party/json/include/tao/json/contrib/internal/type_traits.hpp +0 -36
  1035. data/ext/third_party/json/include/tao/json/contrib/list_traits.hpp +0 -41
  1036. data/ext/third_party/json/include/tao/json/contrib/map_traits.hpp +0 -43
  1037. data/ext/third_party/json/include/tao/json/contrib/multimap_traits.hpp +0 -43
  1038. data/ext/third_party/json/include/tao/json/contrib/multiset_traits.hpp +0 -41
  1039. data/ext/third_party/json/include/tao/json/contrib/pair_traits.hpp +0 -21
  1040. data/ext/third_party/json/include/tao/json/contrib/patch.hpp +0 -105
  1041. data/ext/third_party/json/include/tao/json/contrib/pointer_traits.hpp +0 -59
  1042. data/ext/third_party/json/include/tao/json/contrib/position.hpp +0 -166
  1043. data/ext/third_party/json/include/tao/json/contrib/reference.hpp +0 -115
  1044. data/ext/third_party/json/include/tao/json/contrib/schema.hpp +0 -1851
  1045. data/ext/third_party/json/include/tao/json/contrib/set_traits.hpp +0 -41
  1046. data/ext/third_party/json/include/tao/json/contrib/shared_ptr_traits.hpp +0 -90
  1047. data/ext/third_party/json/include/tao/json/contrib/traits.hpp +0 -121
  1048. data/ext/third_party/json/include/tao/json/contrib/tuple_traits.hpp +0 -51
  1049. data/ext/third_party/json/include/tao/json/contrib/unique_ptr_traits.hpp +0 -89
  1050. data/ext/third_party/json/include/tao/json/contrib/unordered_map_traits.hpp +0 -43
  1051. data/ext/third_party/json/include/tao/json/contrib/unordered_set_traits.hpp +0 -41
  1052. data/ext/third_party/json/include/tao/json/contrib/vector_bool_traits.hpp +0 -45
  1053. data/ext/third_party/json/include/tao/json/contrib/vector_traits.hpp +0 -51
  1054. data/ext/third_party/json/include/tao/json/events/apply.hpp +0 -20
  1055. data/ext/third_party/json/include/tao/json/events/binary_to_base64.hpp +0 -26
  1056. data/ext/third_party/json/include/tao/json/events/binary_to_base64url.hpp +0 -28
  1057. data/ext/third_party/json/include/tao/json/events/binary_to_exception.hpp +0 -27
  1058. data/ext/third_party/json/include/tao/json/events/binary_to_hex.hpp +0 -26
  1059. data/ext/third_party/json/include/tao/json/events/compare.hpp +0 -265
  1060. data/ext/third_party/json/include/tao/json/events/debug.hpp +0 -145
  1061. data/ext/third_party/json/include/tao/json/events/discard.hpp +0 -43
  1062. data/ext/third_party/json/include/tao/json/events/from_file.hpp +0 -28
  1063. data/ext/third_party/json/include/tao/json/events/from_input.hpp +0 -45
  1064. data/ext/third_party/json/include/tao/json/events/from_stream.hpp +0 -33
  1065. data/ext/third_party/json/include/tao/json/events/from_string.hpp +0 -38
  1066. data/ext/third_party/json/include/tao/json/events/from_value.hpp +0 -202
  1067. data/ext/third_party/json/include/tao/json/events/hash.hpp +0 -174
  1068. data/ext/third_party/json/include/tao/json/events/invalid_string_to_binary.hpp +0 -50
  1069. data/ext/third_party/json/include/tao/json/events/invalid_string_to_exception.hpp +0 -49
  1070. data/ext/third_party/json/include/tao/json/events/invalid_string_to_hex.hpp +0 -48
  1071. data/ext/third_party/json/include/tao/json/events/key_camel_case_to_snake_case.hpp +0 -62
  1072. data/ext/third_party/json/include/tao/json/events/key_snake_case_to_camel_case.hpp +0 -57
  1073. data/ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp +0 -82
  1074. data/ext/third_party/json/include/tao/json/events/limit_value_count.hpp +0 -46
  1075. data/ext/third_party/json/include/tao/json/events/non_finite_to_exception.hpp +0 -31
  1076. data/ext/third_party/json/include/tao/json/events/non_finite_to_null.hpp +0 -32
  1077. data/ext/third_party/json/include/tao/json/events/non_finite_to_string.hpp +0 -40
  1078. data/ext/third_party/json/include/tao/json/events/prefer_signed.hpp +0 -32
  1079. data/ext/third_party/json/include/tao/json/events/prefer_unsigned.hpp +0 -32
  1080. data/ext/third_party/json/include/tao/json/events/produce.hpp +0 -22
  1081. data/ext/third_party/json/include/tao/json/events/ref.hpp +0 -111
  1082. data/ext/third_party/json/include/tao/json/events/statistics.hpp +0 -112
  1083. data/ext/third_party/json/include/tao/json/events/tee.hpp +0 -386
  1084. data/ext/third_party/json/include/tao/json/events/to_pretty_stream.hpp +0 -172
  1085. data/ext/third_party/json/include/tao/json/events/to_stream.hpp +0 -142
  1086. data/ext/third_party/json/include/tao/json/events/to_string.hpp +0 -33
  1087. data/ext/third_party/json/include/tao/json/events/to_value.hpp +0 -137
  1088. data/ext/third_party/json/include/tao/json/events/transformer.hpp +0 -70
  1089. data/ext/third_party/json/include/tao/json/events/validate_event_order.hpp +0 -411
  1090. data/ext/third_party/json/include/tao/json/events/validate_keys.hpp +0 -51
  1091. data/ext/third_party/json/include/tao/json/events/virtual_base.hpp +0 -192
  1092. data/ext/third_party/json/include/tao/json/events/virtual_ref.hpp +0 -170
  1093. data/ext/third_party/json/include/tao/json/events.hpp +0 -47
  1094. data/ext/third_party/json/include/tao/json/external/double.hpp +0 -1313
  1095. data/ext/third_party/json/include/tao/json/external/itoa.hpp +0 -149
  1096. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/analyze_cycles.hpp +0 -127
  1097. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/counted.hpp +0 -23
  1098. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/generic.hpp +0 -31
  1099. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/grammar_info.hpp +0 -32
  1100. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/insert_guard.hpp +0 -51
  1101. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/insert_rules.hpp +0 -25
  1102. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/rule_info.hpp +0 -29
  1103. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/rule_type.hpp +0 -21
  1104. data/ext/third_party/json/include/tao/json/external/pegtl/analyze.hpp +0 -21
  1105. data/ext/third_party/json/include/tao/json/external/pegtl/apply_mode.hpp +0 -19
  1106. data/ext/third_party/json/include/tao/json/external/pegtl/argv_input.hpp +0 -51
  1107. data/ext/third_party/json/include/tao/json/external/pegtl/ascii.hpp +0 -67
  1108. data/ext/third_party/json/include/tao/json/external/pegtl/buffer_input.hpp +0 -212
  1109. data/ext/third_party/json/include/tao/json/external/pegtl/change_action.hpp +0 -38
  1110. data/ext/third_party/json/include/tao/json/external/pegtl/change_action_and_state.hpp +0 -53
  1111. data/ext/third_party/json/include/tao/json/external/pegtl/change_action_and_states.hpp +0 -62
  1112. data/ext/third_party/json/include/tao/json/external/pegtl/change_control.hpp +0 -36
  1113. data/ext/third_party/json/include/tao/json/external/pegtl/change_state.hpp +0 -50
  1114. data/ext/third_party/json/include/tao/json/external/pegtl/change_states.hpp +0 -61
  1115. data/ext/third_party/json/include/tao/json/external/pegtl/config.hpp +0 -11
  1116. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/abnf.hpp +0 -35
  1117. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/alphabet.hpp +0 -67
  1118. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/counter.hpp +0 -54
  1119. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/http.hpp +0 -253
  1120. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/internal.hpp +0 -68
  1121. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/utf16.hpp +0 -200
  1122. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/utf32.hpp +0 -200
  1123. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/utf8.hpp +0 -105
  1124. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/if_then.hpp +0 -55
  1125. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/integer.hpp +0 -446
  1126. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/json.hpp +0 -88
  1127. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/json_pointer.hpp +0 -33
  1128. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/parse_tree.hpp +0 -561
  1129. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/parse_tree_to_dot.hpp +0 -104
  1130. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/raw_string.hpp +0 -225
  1131. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/remove_first_state.hpp +0 -86
  1132. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/rep_one_min_max.hpp +0 -62
  1133. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/rep_string.hpp +0 -44
  1134. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/to_string.hpp +0 -38
  1135. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/tracer.hpp +0 -158
  1136. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/unescape.hpp +0 -199
  1137. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/uri.hpp +0 -106
  1138. data/ext/third_party/json/include/tao/json/external/pegtl/cstream_input.hpp +0 -33
  1139. data/ext/third_party/json/include/tao/json/external/pegtl/disable_action.hpp +0 -35
  1140. data/ext/third_party/json/include/tao/json/external/pegtl/discard_input.hpp +0 -37
  1141. data/ext/third_party/json/include/tao/json/external/pegtl/discard_input_on_failure.hpp +0 -39
  1142. data/ext/third_party/json/include/tao/json/external/pegtl/discard_input_on_success.hpp +0 -39
  1143. data/ext/third_party/json/include/tao/json/external/pegtl/enable_action.hpp +0 -35
  1144. data/ext/third_party/json/include/tao/json/external/pegtl/eol.hpp +0 -37
  1145. data/ext/third_party/json/include/tao/json/external/pegtl/eol_pair.hpp +0 -18
  1146. data/ext/third_party/json/include/tao/json/external/pegtl/file_input.hpp +0 -44
  1147. data/ext/third_party/json/include/tao/json/external/pegtl/internal/action.hpp +0 -44
  1148. data/ext/third_party/json/include/tao/json/external/pegtl/internal/action_input.hpp +0 -107
  1149. data/ext/third_party/json/include/tao/json/external/pegtl/internal/alnum.hpp +0 -18
  1150. data/ext/third_party/json/include/tao/json/external/pegtl/internal/alpha.hpp +0 -18
  1151. data/ext/third_party/json/include/tao/json/external/pegtl/internal/always_false.hpp +0 -21
  1152. data/ext/third_party/json/include/tao/json/external/pegtl/internal/any.hpp +0 -58
  1153. data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply.hpp +0 -53
  1154. data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply0.hpp +0 -50
  1155. data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply0_single.hpp +0 -34
  1156. data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply_single.hpp +0 -34
  1157. data/ext/third_party/json/include/tao/json/external/pegtl/internal/at.hpp +0 -53
  1158. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bof.hpp +0 -31
  1159. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bol.hpp +0 -31
  1160. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bump.hpp +0 -45
  1161. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bump_help.hpp +0 -29
  1162. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bytes.hpp +0 -36
  1163. data/ext/third_party/json/include/tao/json/external/pegtl/internal/control.hpp +0 -44
  1164. data/ext/third_party/json/include/tao/json/external/pegtl/internal/cr_crlf_eol.hpp +0 -32
  1165. data/ext/third_party/json/include/tao/json/external/pegtl/internal/cr_eol.hpp +0 -32
  1166. data/ext/third_party/json/include/tao/json/external/pegtl/internal/crlf_eol.hpp +0 -32
  1167. data/ext/third_party/json/include/tao/json/external/pegtl/internal/cstream_reader.hpp +0 -49
  1168. data/ext/third_party/json/include/tao/json/external/pegtl/internal/cstring_reader.hpp +0 -40
  1169. data/ext/third_party/json/include/tao/json/external/pegtl/internal/demangle.hpp +0 -140
  1170. data/ext/third_party/json/include/tao/json/external/pegtl/internal/disable.hpp +0 -44
  1171. data/ext/third_party/json/include/tao/json/external/pegtl/internal/discard.hpp +0 -33
  1172. data/ext/third_party/json/include/tao/json/external/pegtl/internal/dusel_mode.hpp +0 -23
  1173. data/ext/third_party/json/include/tao/json/external/pegtl/internal/duseltronik.hpp +0 -187
  1174. data/ext/third_party/json/include/tao/json/external/pegtl/internal/enable.hpp +0 -44
  1175. data/ext/third_party/json/include/tao/json/external/pegtl/internal/endian.hpp +0 -62
  1176. data/ext/third_party/json/include/tao/json/external/pegtl/internal/endian_gcc.hpp +0 -206
  1177. data/ext/third_party/json/include/tao/json/external/pegtl/internal/endian_win.hpp +0 -106
  1178. data/ext/third_party/json/include/tao/json/external/pegtl/internal/eof.hpp +0 -31
  1179. data/ext/third_party/json/include/tao/json/external/pegtl/internal/eol.hpp +0 -31
  1180. data/ext/third_party/json/include/tao/json/external/pegtl/internal/eolf.hpp +0 -32
  1181. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_mapper_posix.hpp +0 -83
  1182. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_mapper_win32.hpp +0 -219
  1183. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_opener.hpp +0 -72
  1184. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_reader.hpp +0 -114
  1185. data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_apply.hpp +0 -25
  1186. data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_apply0.hpp +0 -25
  1187. data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_match.hpp +0 -56
  1188. data/ext/third_party/json/include/tao/json/external/pegtl/internal/identifier.hpp +0 -22
  1189. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_apply.hpp +0 -53
  1190. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_must.hpp +0 -48
  1191. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_must_else.hpp +0 -19
  1192. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_then_else.hpp +0 -51
  1193. data/ext/third_party/json/include/tao/json/external/pegtl/internal/input_pair.hpp +0 -29
  1194. data/ext/third_party/json/include/tao/json/external/pegtl/internal/istream_reader.hpp +0 -40
  1195. data/ext/third_party/json/include/tao/json/external/pegtl/internal/istring.hpp +0 -72
  1196. data/ext/third_party/json/include/tao/json/external/pegtl/internal/iterator.hpp +0 -52
  1197. data/ext/third_party/json/include/tao/json/external/pegtl/internal/lf_crlf_eol.hpp +0 -37
  1198. data/ext/third_party/json/include/tao/json/external/pegtl/internal/lf_eol.hpp +0 -32
  1199. data/ext/third_party/json/include/tao/json/external/pegtl/internal/list.hpp +0 -19
  1200. data/ext/third_party/json/include/tao/json/external/pegtl/internal/list_must.hpp +0 -20
  1201. data/ext/third_party/json/include/tao/json/external/pegtl/internal/list_tail.hpp +0 -20
  1202. data/ext/third_party/json/include/tao/json/external/pegtl/internal/list_tail_pad.hpp +0 -22
  1203. data/ext/third_party/json/include/tao/json/external/pegtl/internal/marker.hpp +0 -82
  1204. data/ext/third_party/json/include/tao/json/external/pegtl/internal/missing_apply.hpp +0 -25
  1205. data/ext/third_party/json/include/tao/json/external/pegtl/internal/missing_apply0.hpp +0 -23
  1206. data/ext/third_party/json/include/tao/json/external/pegtl/internal/must.hpp +0 -72
  1207. data/ext/third_party/json/include/tao/json/external/pegtl/internal/not_at.hpp +0 -53
  1208. data/ext/third_party/json/include/tao/json/external/pegtl/internal/one.hpp +0 -44
  1209. data/ext/third_party/json/include/tao/json/external/pegtl/internal/opt.hpp +0 -57
  1210. data/ext/third_party/json/include/tao/json/external/pegtl/internal/pad.hpp +0 -19
  1211. data/ext/third_party/json/include/tao/json/external/pegtl/internal/pad_opt.hpp +0 -20
  1212. data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_char.hpp +0 -32
  1213. data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_mask_uint.hpp +0 -54
  1214. data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_mask_uint8.hpp +0 -34
  1215. data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_uint.hpp +0 -45
  1216. data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_uint8.hpp +0 -33
  1217. data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_utf16.hpp +0 -54
  1218. data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_utf32.hpp +0 -43
  1219. data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_utf8.hpp +0 -90
  1220. data/ext/third_party/json/include/tao/json/external/pegtl/internal/pegtl_string.hpp +0 -90
  1221. data/ext/third_party/json/include/tao/json/external/pegtl/internal/plus.hpp +0 -53
  1222. data/ext/third_party/json/include/tao/json/external/pegtl/internal/raise.hpp +0 -53
  1223. data/ext/third_party/json/include/tao/json/external/pegtl/internal/range.hpp +0 -51
  1224. data/ext/third_party/json/include/tao/json/external/pegtl/internal/ranges.hpp +0 -93
  1225. data/ext/third_party/json/include/tao/json/external/pegtl/internal/read_uint.hpp +0 -77
  1226. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rematch.hpp +0 -69
  1227. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep.hpp +0 -66
  1228. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep_min.hpp +0 -20
  1229. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep_min_max.hpp +0 -79
  1230. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep_opt.hpp +0 -46
  1231. data/ext/third_party/json/include/tao/json/external/pegtl/internal/require.hpp +0 -42
  1232. data/ext/third_party/json/include/tao/json/external/pegtl/internal/result_on_found.hpp +0 -19
  1233. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rules.hpp +0 -61
  1234. data/ext/third_party/json/include/tao/json/external/pegtl/internal/seq.hpp +0 -73
  1235. data/ext/third_party/json/include/tao/json/external/pegtl/internal/skip_control.hpp +0 -25
  1236. data/ext/third_party/json/include/tao/json/external/pegtl/internal/sor.hpp +0 -60
  1237. data/ext/third_party/json/include/tao/json/external/pegtl/internal/star.hpp +0 -47
  1238. data/ext/third_party/json/include/tao/json/external/pegtl/internal/star_must.hpp +0 -19
  1239. data/ext/third_party/json/include/tao/json/external/pegtl/internal/state.hpp +0 -49
  1240. data/ext/third_party/json/include/tao/json/external/pegtl/internal/string.hpp +0 -58
  1241. data/ext/third_party/json/include/tao/json/external/pegtl/internal/trivial.hpp +0 -32
  1242. data/ext/third_party/json/include/tao/json/external/pegtl/internal/try_catch_type.hpp +0 -64
  1243. data/ext/third_party/json/include/tao/json/external/pegtl/internal/until.hpp +0 -84
  1244. data/ext/third_party/json/include/tao/json/external/pegtl/istream_input.hpp +0 -33
  1245. data/ext/third_party/json/include/tao/json/external/pegtl/match.hpp +0 -73
  1246. data/ext/third_party/json/include/tao/json/external/pegtl/memory_input.hpp +0 -381
  1247. data/ext/third_party/json/include/tao/json/external/pegtl/mmap_input.hpp +0 -79
  1248. data/ext/third_party/json/include/tao/json/external/pegtl/normal.hpp +0 -87
  1249. data/ext/third_party/json/include/tao/json/external/pegtl/nothing.hpp +0 -20
  1250. data/ext/third_party/json/include/tao/json/external/pegtl/parse.hpp +0 -53
  1251. data/ext/third_party/json/include/tao/json/external/pegtl/parse_error.hpp +0 -69
  1252. data/ext/third_party/json/include/tao/json/external/pegtl/position.hpp +0 -75
  1253. data/ext/third_party/json/include/tao/json/external/pegtl/read_input.hpp +0 -74
  1254. data/ext/third_party/json/include/tao/json/external/pegtl/require_apply.hpp +0 -16
  1255. data/ext/third_party/json/include/tao/json/external/pegtl/require_apply0.hpp +0 -16
  1256. data/ext/third_party/json/include/tao/json/external/pegtl/rewind_mode.hpp +0 -20
  1257. data/ext/third_party/json/include/tao/json/external/pegtl/rules.hpp +0 -67
  1258. data/ext/third_party/json/include/tao/json/external/pegtl/string_input.hpp +0 -66
  1259. data/ext/third_party/json/include/tao/json/external/pegtl/tracking_mode.hpp +0 -19
  1260. data/ext/third_party/json/include/tao/json/external/pegtl/uint16.hpp +0 -62
  1261. data/ext/third_party/json/include/tao/json/external/pegtl/uint32.hpp +0 -62
  1262. data/ext/third_party/json/include/tao/json/external/pegtl/uint64.hpp +0 -63
  1263. data/ext/third_party/json/include/tao/json/external/pegtl/uint8.hpp +0 -36
  1264. data/ext/third_party/json/include/tao/json/external/pegtl/utf16.hpp +0 -49
  1265. data/ext/third_party/json/include/tao/json/external/pegtl/utf32.hpp +0 -49
  1266. data/ext/third_party/json/include/tao/json/external/pegtl/utf8.hpp +0 -28
  1267. data/ext/third_party/json/include/tao/json/external/pegtl/version.hpp +0 -13
  1268. data/ext/third_party/json/include/tao/json/external/pegtl.hpp +0 -53
  1269. data/ext/third_party/json/include/tao/json/external/ryu.hpp +0 -1216
  1270. data/ext/third_party/json/include/tao/json/forward.hpp +0 -44
  1271. data/ext/third_party/json/include/tao/json/from_file.hpp +0 -32
  1272. data/ext/third_party/json/include/tao/json/from_input.hpp +0 -32
  1273. data/ext/third_party/json/include/tao/json/from_stream.hpp +0 -45
  1274. data/ext/third_party/json/include/tao/json/from_string.hpp +0 -41
  1275. data/ext/third_party/json/include/tao/json/internal/action.hpp +0 -268
  1276. data/ext/third_party/json/include/tao/json/internal/base64.hpp +0 -55
  1277. data/ext/third_party/json/include/tao/json/internal/base64url.hpp +0 -53
  1278. data/ext/third_party/json/include/tao/json/internal/endian.hpp +0 -60
  1279. data/ext/third_party/json/include/tao/json/internal/endian_gcc.hpp +0 -198
  1280. data/ext/third_party/json/include/tao/json/internal/endian_win.hpp +0 -103
  1281. data/ext/third_party/json/include/tao/json/internal/errors.hpp +0 -85
  1282. data/ext/third_party/json/include/tao/json/internal/escape.hpp +0 -77
  1283. data/ext/third_party/json/include/tao/json/internal/format.hpp +0 -59
  1284. data/ext/third_party/json/include/tao/json/internal/grammar.hpp +0 -229
  1285. data/ext/third_party/json/include/tao/json/internal/hexdump.hpp +0 -31
  1286. data/ext/third_party/json/include/tao/json/internal/identity.hpp +0 -22
  1287. data/ext/third_party/json/include/tao/json/internal/number_state.hpp +0 -80
  1288. data/ext/third_party/json/include/tao/json/internal/number_traits.hpp +0 -267
  1289. data/ext/third_party/json/include/tao/json/internal/pair.hpp +0 -42
  1290. data/ext/third_party/json/include/tao/json/internal/parse_util.hpp +0 -112
  1291. data/ext/third_party/json/include/tao/json/internal/sha256.hpp +0 -218
  1292. data/ext/third_party/json/include/tao/json/internal/single.hpp +0 -40
  1293. data/ext/third_party/json/include/tao/json/internal/string_t.hpp +0 -35
  1294. data/ext/third_party/json/include/tao/json/internal/type_traits.hpp +0 -113
  1295. data/ext/third_party/json/include/tao/json/internal/unescape_action.hpp +0 -24
  1296. data/ext/third_party/json/include/tao/json/internal/uri_fragment.hpp +0 -182
  1297. data/ext/third_party/json/include/tao/json/jaxn/consume_file.hpp +0 -34
  1298. data/ext/third_party/json/include/tao/json/jaxn/consume_string.hpp +0 -32
  1299. data/ext/third_party/json/include/tao/json/jaxn/events/from_file.hpp +0 -28
  1300. data/ext/third_party/json/include/tao/json/jaxn/events/from_input.hpp +0 -45
  1301. data/ext/third_party/json/include/tao/json/jaxn/events/from_stream.hpp +0 -33
  1302. data/ext/third_party/json/include/tao/json/jaxn/events/from_string.hpp +0 -39
  1303. data/ext/third_party/json/include/tao/json/jaxn/events/to_pretty_stream.hpp +0 -69
  1304. data/ext/third_party/json/include/tao/json/jaxn/events/to_stream.hpp +0 -67
  1305. data/ext/third_party/json/include/tao/json/jaxn/events/to_string.hpp +0 -33
  1306. data/ext/third_party/json/include/tao/json/jaxn/from_file.hpp +0 -33
  1307. data/ext/third_party/json/include/tao/json/jaxn/from_input.hpp +0 -33
  1308. data/ext/third_party/json/include/tao/json/jaxn/from_stream.hpp +0 -48
  1309. data/ext/third_party/json/include/tao/json/jaxn/from_string.hpp +0 -42
  1310. data/ext/third_party/json/include/tao/json/jaxn/internal/action.hpp +0 -355
  1311. data/ext/third_party/json/include/tao/json/jaxn/internal/bunescape_action.hpp +0 -114
  1312. data/ext/third_party/json/include/tao/json/jaxn/internal/errors.hpp +0 -108
  1313. data/ext/third_party/json/include/tao/json/jaxn/internal/grammar.hpp +0 -375
  1314. data/ext/third_party/json/include/tao/json/jaxn/internal/integer.hpp +0 -256
  1315. data/ext/third_party/json/include/tao/json/jaxn/internal/unescape_action.hpp +0 -28
  1316. data/ext/third_party/json/include/tao/json/jaxn/is_identifier.hpp +0 -27
  1317. data/ext/third_party/json/include/tao/json/jaxn/parts_parser.hpp +0 -263
  1318. data/ext/third_party/json/include/tao/json/jaxn/to_stream.hpp +0 -36
  1319. data/ext/third_party/json/include/tao/json/jaxn/to_string.hpp +0 -33
  1320. data/ext/third_party/json/include/tao/json/jaxn.hpp +0 -19
  1321. data/ext/third_party/json/include/tao/json/message_extension.hpp +0 -49
  1322. data/ext/third_party/json/include/tao/json/msgpack/consume_file.hpp +0 -34
  1323. data/ext/third_party/json/include/tao/json/msgpack/consume_string.hpp +0 -32
  1324. data/ext/third_party/json/include/tao/json/msgpack/events/from_file.hpp +0 -27
  1325. data/ext/third_party/json/include/tao/json/msgpack/events/from_input.hpp +0 -43
  1326. data/ext/third_party/json/include/tao/json/msgpack/events/from_string.hpp +0 -37
  1327. data/ext/third_party/json/include/tao/json/msgpack/events/to_stream.hpp +0 -214
  1328. data/ext/third_party/json/include/tao/json/msgpack/events/to_string.hpp +0 -31
  1329. data/ext/third_party/json/include/tao/json/msgpack/from_file.hpp +0 -33
  1330. data/ext/third_party/json/include/tao/json/msgpack/from_input.hpp +0 -33
  1331. data/ext/third_party/json/include/tao/json/msgpack/from_string.hpp +0 -32
  1332. data/ext/third_party/json/include/tao/json/msgpack/internal/format.hpp +0 -57
  1333. data/ext/third_party/json/include/tao/json/msgpack/internal/grammar.hpp +0 -249
  1334. data/ext/third_party/json/include/tao/json/msgpack/parts_parser.hpp +0 -311
  1335. data/ext/third_party/json/include/tao/json/msgpack/to_stream.hpp +0 -27
  1336. data/ext/third_party/json/include/tao/json/msgpack/to_string.hpp +0 -28
  1337. data/ext/third_party/json/include/tao/json/msgpack.hpp +0 -18
  1338. data/ext/third_party/json/include/tao/json/operators.hpp +0 -494
  1339. data/ext/third_party/json/include/tao/json/parts_parser.hpp +0 -306
  1340. data/ext/third_party/json/include/tao/json/pointer.hpp +0 -432
  1341. data/ext/third_party/json/include/tao/json/produce.hpp +0 -61
  1342. data/ext/third_party/json/include/tao/json/self_contained.hpp +0 -143
  1343. data/ext/third_party/json/include/tao/json/span.hpp +0 -568
  1344. data/ext/third_party/json/include/tao/json/stream.hpp +0 -38
  1345. data/ext/third_party/json/include/tao/json/to_stream.hpp +0 -42
  1346. data/ext/third_party/json/include/tao/json/to_string.hpp +0 -23
  1347. data/ext/third_party/json/include/tao/json/traits.hpp +0 -971
  1348. data/ext/third_party/json/include/tao/json/type.hpp +0 -112
  1349. data/ext/third_party/json/include/tao/json/ubjson/consume_file.hpp +0 -34
  1350. data/ext/third_party/json/include/tao/json/ubjson/consume_string.hpp +0 -32
  1351. data/ext/third_party/json/include/tao/json/ubjson/events/from_file.hpp +0 -27
  1352. data/ext/third_party/json/include/tao/json/ubjson/events/from_input.hpp +0 -43
  1353. data/ext/third_party/json/include/tao/json/ubjson/events/from_string.hpp +0 -37
  1354. data/ext/third_party/json/include/tao/json/ubjson/events/to_stream.hpp +0 -174
  1355. data/ext/third_party/json/include/tao/json/ubjson/events/to_string.hpp +0 -31
  1356. data/ext/third_party/json/include/tao/json/ubjson/from_file.hpp +0 -33
  1357. data/ext/third_party/json/include/tao/json/ubjson/from_input.hpp +0 -33
  1358. data/ext/third_party/json/include/tao/json/ubjson/from_string.hpp +0 -32
  1359. data/ext/third_party/json/include/tao/json/ubjson/internal/grammar.hpp +0 -413
  1360. data/ext/third_party/json/include/tao/json/ubjson/internal/marker.hpp +0 -46
  1361. data/ext/third_party/json/include/tao/json/ubjson/parts_parser.hpp +0 -393
  1362. data/ext/third_party/json/include/tao/json/ubjson/to_stream.hpp +0 -28
  1363. data/ext/third_party/json/include/tao/json/ubjson/to_string.hpp +0 -29
  1364. data/ext/third_party/json/include/tao/json/ubjson.hpp +0 -18
  1365. data/ext/third_party/json/include/tao/json/utf8.hpp +0 -57
  1366. data/ext/third_party/json/include/tao/json/value.hpp +0 -12
  1367. data/ext/third_party/json/include/tao/json.hpp +0 -45
  1368. data/ext/third_party/snappy/.appveyor.yml +0 -36
  1369. data/ext/third_party/snappy/.gitignore +0 -8
  1370. data/ext/third_party/snappy/.travis.yml +0 -98
  1371. data/ext/third_party/snappy/AUTHORS +0 -1
  1372. data/ext/third_party/snappy/CMakeLists.txt +0 -345
  1373. data/ext/third_party/snappy/CONTRIBUTING.md +0 -26
  1374. data/ext/third_party/snappy/COPYING +0 -54
  1375. data/ext/third_party/snappy/NEWS +0 -188
  1376. data/ext/third_party/snappy/README.md +0 -148
  1377. data/ext/third_party/snappy/cmake/SnappyConfig.cmake.in +0 -33
  1378. data/ext/third_party/snappy/cmake/config.h.in +0 -59
  1379. data/ext/third_party/snappy/docs/README.md +0 -72
  1380. data/ext/third_party/snappy/format_description.txt +0 -110
  1381. data/ext/third_party/snappy/framing_format.txt +0 -135
  1382. data/ext/third_party/snappy/snappy-c.cc +0 -90
  1383. data/ext/third_party/snappy/snappy-c.h +0 -138
  1384. data/ext/third_party/snappy/snappy-internal.h +0 -315
  1385. data/ext/third_party/snappy/snappy-sinksource.cc +0 -121
  1386. data/ext/third_party/snappy/snappy-sinksource.h +0 -182
  1387. data/ext/third_party/snappy/snappy-stubs-internal.cc +0 -42
  1388. data/ext/third_party/snappy/snappy-stubs-internal.h +0 -493
  1389. data/ext/third_party/snappy/snappy-stubs-public.h.in +0 -63
  1390. data/ext/third_party/snappy/snappy-test.cc +0 -613
  1391. data/ext/third_party/snappy/snappy-test.h +0 -526
  1392. data/ext/third_party/snappy/snappy.cc +0 -1770
  1393. data/ext/third_party/snappy/snappy.h +0 -209
  1394. data/ext/third_party/snappy/snappy_compress_fuzzer.cc +0 -60
  1395. data/ext/third_party/snappy/snappy_uncompress_fuzzer.cc +0 -58
  1396. data/ext/third_party/snappy/snappy_unittest.cc +0 -1512
  1397. data/ext/third_party/spdlog/.clang-format +0 -108
  1398. data/ext/third_party/spdlog/.clang-tidy +0 -54
  1399. data/ext/third_party/spdlog/.gitattributes +0 -1
  1400. data/ext/third_party/spdlog/.gitignore +0 -83
  1401. data/ext/third_party/spdlog/.travis.yml +0 -112
  1402. data/ext/third_party/spdlog/CMakeLists.txt +0 -324
  1403. data/ext/third_party/spdlog/INSTALL +0 -24
  1404. data/ext/third_party/spdlog/LICENSE +0 -26
  1405. data/ext/third_party/spdlog/README.md +0 -423
  1406. data/ext/third_party/spdlog/appveyor.yml +0 -51
  1407. data/ext/third_party/spdlog/cmake/ide.cmake +0 -18
  1408. data/ext/third_party/spdlog/cmake/pch.h.in +0 -258
  1409. data/ext/third_party/spdlog/cmake/spdlog.pc.in +0 -13
  1410. data/ext/third_party/spdlog/cmake/spdlogCPack.cmake +0 -46
  1411. data/ext/third_party/spdlog/cmake/spdlogConfig.cmake.in +0 -15
  1412. data/ext/third_party/spdlog/cmake/utils.cmake +0 -61
  1413. data/ext/third_party/spdlog/cmake/version.rc.in +0 -42
  1414. data/ext/third_party/spdlog/include/spdlog/async.h +0 -93
  1415. data/ext/third_party/spdlog/include/spdlog/async_logger-inl.h +0 -92
  1416. data/ext/third_party/spdlog/include/spdlog/async_logger.h +0 -68
  1417. data/ext/third_party/spdlog/include/spdlog/cfg/argv.h +0 -45
  1418. data/ext/third_party/spdlog/include/spdlog/cfg/env.h +0 -36
  1419. data/ext/third_party/spdlog/include/spdlog/cfg/helpers-inl.h +0 -103
  1420. data/ext/third_party/spdlog/include/spdlog/cfg/helpers.h +0 -28
  1421. data/ext/third_party/spdlog/include/spdlog/cfg/log_levels.h +0 -47
  1422. data/ext/third_party/spdlog/include/spdlog/common-inl.h +0 -76
  1423. data/ext/third_party/spdlog/include/spdlog/common.h +0 -246
  1424. data/ext/third_party/spdlog/include/spdlog/details/backtracer-inl.h +0 -69
  1425. data/ext/third_party/spdlog/include/spdlog/details/backtracer.h +0 -45
  1426. data/ext/third_party/spdlog/include/spdlog/details/circular_q.h +0 -141
  1427. data/ext/third_party/spdlog/include/spdlog/details/console_globals.h +0 -32
  1428. data/ext/third_party/spdlog/include/spdlog/details/file_helper-inl.h +0 -132
  1429. data/ext/third_party/spdlog/include/spdlog/details/file_helper.h +0 -59
  1430. data/ext/third_party/spdlog/include/spdlog/details/fmt_helper.h +0 -108
  1431. data/ext/third_party/spdlog/include/spdlog/details/log_msg-inl.h +0 -37
  1432. data/ext/third_party/spdlog/include/spdlog/details/log_msg.h +0 -36
  1433. data/ext/third_party/spdlog/include/spdlog/details/log_msg_buffer-inl.h +0 -58
  1434. data/ext/third_party/spdlog/include/spdlog/details/log_msg_buffer.h +0 -33
  1435. data/ext/third_party/spdlog/include/spdlog/details/mpmc_blocking_q.h +0 -120
  1436. data/ext/third_party/spdlog/include/spdlog/details/null_mutex.h +0 -49
  1437. data/ext/third_party/spdlog/include/spdlog/details/os-inl.h +0 -554
  1438. data/ext/third_party/spdlog/include/spdlog/details/os.h +0 -111
  1439. data/ext/third_party/spdlog/include/spdlog/details/periodic_worker-inl.h +0 -49
  1440. data/ext/third_party/spdlog/include/spdlog/details/periodic_worker.h +0 -40
  1441. data/ext/third_party/spdlog/include/spdlog/details/registry-inl.h +0 -299
  1442. data/ext/third_party/spdlog/include/spdlog/details/registry.h +0 -112
  1443. data/ext/third_party/spdlog/include/spdlog/details/synchronous_factory.h +0 -24
  1444. data/ext/third_party/spdlog/include/spdlog/details/tcp_client-windows.h +0 -175
  1445. data/ext/third_party/spdlog/include/spdlog/details/tcp_client.h +0 -145
  1446. data/ext/third_party/spdlog/include/spdlog/details/thread_pool-inl.h +0 -124
  1447. data/ext/third_party/spdlog/include/spdlog/details/thread_pool.h +0 -120
  1448. data/ext/third_party/spdlog/include/spdlog/details/windows_include.h +0 -11
  1449. data/ext/third_party/spdlog/include/spdlog/fmt/bin_to_hex.h +0 -216
  1450. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/LICENSE.rst +0 -27
  1451. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/chrono.h +0 -1119
  1452. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/color.h +0 -568
  1453. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/compile.h +0 -595
  1454. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/core.h +0 -1789
  1455. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/format-inl.h +0 -1403
  1456. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/format.h +0 -3648
  1457. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/locale.h +0 -78
  1458. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/ostream.h +0 -143
  1459. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/posix.h +0 -2
  1460. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/printf.h +0 -721
  1461. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/ranges.h +0 -387
  1462. data/ext/third_party/spdlog/include/spdlog/fmt/fmt.h +0 -25
  1463. data/ext/third_party/spdlog/include/spdlog/fmt/ostr.h +0 -20
  1464. data/ext/third_party/spdlog/include/spdlog/formatter.h +0 -18
  1465. data/ext/third_party/spdlog/include/spdlog/fwd.h +0 -14
  1466. data/ext/third_party/spdlog/include/spdlog/logger-inl.h +0 -253
  1467. data/ext/third_party/spdlog/include/spdlog/logger.h +0 -392
  1468. data/ext/third_party/spdlog/include/spdlog/pattern_formatter-inl.h +0 -1358
  1469. data/ext/third_party/spdlog/include/spdlog/pattern_formatter.h +0 -126
  1470. data/ext/third_party/spdlog/include/spdlog/sinks/android_sink.h +0 -119
  1471. data/ext/third_party/spdlog/include/spdlog/sinks/ansicolor_sink-inl.h +0 -143
  1472. data/ext/third_party/spdlog/include/spdlog/sinks/ansicolor_sink.h +0 -118
  1473. data/ext/third_party/spdlog/include/spdlog/sinks/base_sink-inl.h +0 -63
  1474. data/ext/third_party/spdlog/include/spdlog/sinks/base_sink.h +0 -52
  1475. data/ext/third_party/spdlog/include/spdlog/sinks/basic_file_sink-inl.h +0 -43
  1476. data/ext/third_party/spdlog/include/spdlog/sinks/basic_file_sink.h +0 -58
  1477. data/ext/third_party/spdlog/include/spdlog/sinks/daily_file_sink.h +0 -204
  1478. data/ext/third_party/spdlog/include/spdlog/sinks/dist_sink.h +0 -97
  1479. data/ext/third_party/spdlog/include/spdlog/sinks/dup_filter_sink.h +0 -90
  1480. data/ext/third_party/spdlog/include/spdlog/sinks/msvc_sink.h +0 -49
  1481. data/ext/third_party/spdlog/include/spdlog/sinks/null_sink.h +0 -44
  1482. data/ext/third_party/spdlog/include/spdlog/sinks/ostream_sink.h +0 -50
  1483. data/ext/third_party/spdlog/include/spdlog/sinks/ringbuffer_sink.h +0 -72
  1484. data/ext/third_party/spdlog/include/spdlog/sinks/rotating_file_sink-inl.h +0 -131
  1485. data/ext/third_party/spdlog/include/spdlog/sinks/rotating_file_sink.h +0 -78
  1486. data/ext/third_party/spdlog/include/spdlog/sinks/sink-inl.h +0 -25
  1487. data/ext/third_party/spdlog/include/spdlog/sinks/sink.h +0 -35
  1488. data/ext/third_party/spdlog/include/spdlog/sinks/stdout_color_sinks-inl.h +0 -38
  1489. data/ext/third_party/spdlog/include/spdlog/sinks/stdout_color_sinks.h +0 -45
  1490. data/ext/third_party/spdlog/include/spdlog/sinks/stdout_sinks-inl.h +0 -94
  1491. data/ext/third_party/spdlog/include/spdlog/sinks/stdout_sinks.h +0 -80
  1492. data/ext/third_party/spdlog/include/spdlog/sinks/syslog_sink.h +0 -109
  1493. data/ext/third_party/spdlog/include/spdlog/sinks/systemd_sink.h +0 -103
  1494. data/ext/third_party/spdlog/include/spdlog/sinks/tcp_sink.h +0 -81
  1495. data/ext/third_party/spdlog/include/spdlog/sinks/win_eventlog_sink.h +0 -266
  1496. data/ext/third_party/spdlog/include/spdlog/sinks/wincolor_sink-inl.h +0 -180
  1497. data/ext/third_party/spdlog/include/spdlog/sinks/wincolor_sink.h +0 -94
  1498. data/ext/third_party/spdlog/include/spdlog/spdlog-inl.h +0 -115
  1499. data/ext/third_party/spdlog/include/spdlog/spdlog.h +0 -340
  1500. data/ext/third_party/spdlog/include/spdlog/tweakme.h +0 -116
  1501. data/ext/third_party/spdlog/include/spdlog/version.h +0 -10
  1502. data/ext/third_party/spdlog/src/async.cpp +0 -13
  1503. data/ext/third_party/spdlog/src/cfg.cpp +0 -8
  1504. data/ext/third_party/spdlog/src/color_sinks.cpp +0 -51
  1505. data/ext/third_party/spdlog/src/file_sinks.cpp +0 -20
  1506. data/ext/third_party/spdlog/src/fmt.cpp +0 -189
  1507. data/ext/third_party/spdlog/src/spdlog.cpp +0 -26
  1508. data/ext/third_party/spdlog/src/stdout_sinks.cpp +0 -29
  1509. data/lib/couchbase/libcouchbase.so +0 -0
  1510. data/rbi/couchbase.rbi +0 -79
@@ -1,3575 +0,0 @@
1
- //
2
- // detail/impl/socket_ops.ipp
3
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~
4
- //
5
- // Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6
- //
7
- // Distributed under the Boost Software License, Version 1.0. (See accompanying
8
- // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9
- //
10
-
11
- #ifndef ASIO_DETAIL_SOCKET_OPS_IPP
12
- #define ASIO_DETAIL_SOCKET_OPS_IPP
13
-
14
- #if defined(_MSC_VER) && (_MSC_VER >= 1200)
15
- # pragma once
16
- #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17
-
18
- #include "asio/detail/config.hpp"
19
-
20
- #include <cctype>
21
- #include <cstdio>
22
- #include <cstdlib>
23
- #include <cstring>
24
- #include <cerrno>
25
- #include <new>
26
- #include "asio/detail/assert.hpp"
27
- #include "asio/detail/socket_ops.hpp"
28
- #include "asio/error.hpp"
29
-
30
- #if defined(ASIO_WINDOWS_RUNTIME)
31
- # include <codecvt>
32
- # include <locale>
33
- # include <string>
34
- #endif // defined(ASIO_WINDOWS_RUNTIME)
35
-
36
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__) \
37
- || defined(__MACH__) && defined(__APPLE__)
38
- # if defined(ASIO_HAS_PTHREADS)
39
- # include <pthread.h>
40
- # endif // defined(ASIO_HAS_PTHREADS)
41
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
42
- // || defined(__MACH__) && defined(__APPLE__)
43
-
44
- #include "asio/detail/push_options.hpp"
45
-
46
- namespace asio {
47
- namespace detail {
48
- namespace socket_ops {
49
-
50
- #if !defined(ASIO_WINDOWS_RUNTIME)
51
-
52
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
53
- struct msghdr { int msg_namelen; };
54
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
55
-
56
- #if defined(__hpux)
57
- // HP-UX doesn't declare these functions extern "C", so they are declared again
58
- // here to avoid linker errors about undefined symbols.
59
- extern "C" char* if_indextoname(unsigned int, char*);
60
- extern "C" unsigned int if_nametoindex(const char*);
61
- #endif // defined(__hpux)
62
-
63
- #endif // !defined(ASIO_WINDOWS_RUNTIME)
64
-
65
- inline void clear_last_error()
66
- {
67
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
68
- WSASetLastError(0);
69
- #else
70
- errno = 0;
71
- #endif
72
- }
73
-
74
- #if !defined(ASIO_WINDOWS_RUNTIME)
75
-
76
- template <typename ReturnType>
77
- inline ReturnType error_wrapper(ReturnType return_value,
78
- asio::error_code& ec)
79
- {
80
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
81
- ec = asio::error_code(WSAGetLastError(),
82
- asio::error::get_system_category());
83
- #else
84
- ec = asio::error_code(errno,
85
- asio::error::get_system_category());
86
- #endif
87
- return return_value;
88
- }
89
-
90
- template <typename SockLenType>
91
- inline socket_type call_accept(SockLenType msghdr::*,
92
- socket_type s, socket_addr_type* addr, std::size_t* addrlen)
93
- {
94
- SockLenType tmp_addrlen = addrlen ? (SockLenType)*addrlen : 0;
95
- socket_type result = ::accept(s, addr, addrlen ? &tmp_addrlen : 0);
96
- if (addrlen)
97
- *addrlen = (std::size_t)tmp_addrlen;
98
- return result;
99
- }
100
-
101
- socket_type accept(socket_type s, socket_addr_type* addr,
102
- std::size_t* addrlen, asio::error_code& ec)
103
- {
104
- if (s == invalid_socket)
105
- {
106
- ec = asio::error::bad_descriptor;
107
- return invalid_socket;
108
- }
109
-
110
- clear_last_error();
111
-
112
- socket_type new_s = error_wrapper(call_accept(
113
- &msghdr::msg_namelen, s, addr, addrlen), ec);
114
- if (new_s == invalid_socket)
115
- return new_s;
116
-
117
- #if defined(__MACH__) && defined(__APPLE__) || defined(__FreeBSD__)
118
- int optval = 1;
119
- int result = error_wrapper(::setsockopt(new_s,
120
- SOL_SOCKET, SO_NOSIGPIPE, &optval, sizeof(optval)), ec);
121
- if (result != 0)
122
- {
123
- ::close(new_s);
124
- return invalid_socket;
125
- }
126
- #endif
127
-
128
- ec = asio::error_code();
129
- return new_s;
130
- }
131
-
132
- socket_type sync_accept(socket_type s, state_type state,
133
- socket_addr_type* addr, std::size_t* addrlen, asio::error_code& ec)
134
- {
135
- // Accept a socket.
136
- for (;;)
137
- {
138
- // Try to complete the operation without blocking.
139
- socket_type new_socket = socket_ops::accept(s, addr, addrlen, ec);
140
-
141
- // Check if operation succeeded.
142
- if (new_socket != invalid_socket)
143
- return new_socket;
144
-
145
- // Operation failed.
146
- if (ec == asio::error::would_block
147
- || ec == asio::error::try_again)
148
- {
149
- if (state & user_set_non_blocking)
150
- return invalid_socket;
151
- // Fall through to retry operation.
152
- }
153
- else if (ec == asio::error::connection_aborted)
154
- {
155
- if (state & enable_connection_aborted)
156
- return invalid_socket;
157
- // Fall through to retry operation.
158
- }
159
- #if defined(EPROTO)
160
- else if (ec.value() == EPROTO)
161
- {
162
- if (state & enable_connection_aborted)
163
- return invalid_socket;
164
- // Fall through to retry operation.
165
- }
166
- #endif // defined(EPROTO)
167
- else
168
- return invalid_socket;
169
-
170
- // Wait for socket to become ready.
171
- if (socket_ops::poll_read(s, 0, -1, ec) < 0)
172
- return invalid_socket;
173
- }
174
- }
175
-
176
- #if defined(ASIO_HAS_IOCP)
177
-
178
- void complete_iocp_accept(socket_type s,
179
- void* output_buffer, DWORD address_length,
180
- socket_addr_type* addr, std::size_t* addrlen,
181
- socket_type new_socket, asio::error_code& ec)
182
- {
183
- // Map non-portable errors to their portable counterparts.
184
- if (ec.value() == ERROR_NETNAME_DELETED)
185
- ec = asio::error::connection_aborted;
186
-
187
- if (!ec)
188
- {
189
- // Get the address of the peer.
190
- if (addr && addrlen)
191
- {
192
- LPSOCKADDR local_addr = 0;
193
- int local_addr_length = 0;
194
- LPSOCKADDR remote_addr = 0;
195
- int remote_addr_length = 0;
196
- GetAcceptExSockaddrs(output_buffer, 0, address_length,
197
- address_length, &local_addr, &local_addr_length,
198
- &remote_addr, &remote_addr_length);
199
- if (static_cast<std::size_t>(remote_addr_length) > *addrlen)
200
- {
201
- ec = asio::error::invalid_argument;
202
- }
203
- else
204
- {
205
- using namespace std; // For memcpy.
206
- memcpy(addr, remote_addr, remote_addr_length);
207
- *addrlen = static_cast<std::size_t>(remote_addr_length);
208
- }
209
- }
210
-
211
- // Need to set the SO_UPDATE_ACCEPT_CONTEXT option so that getsockname
212
- // and getpeername will work on the accepted socket.
213
- SOCKET update_ctx_param = s;
214
- socket_ops::state_type state = 0;
215
- socket_ops::setsockopt(new_socket, state,
216
- SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT,
217
- &update_ctx_param, sizeof(SOCKET), ec);
218
- }
219
- }
220
-
221
- #else // defined(ASIO_HAS_IOCP)
222
-
223
- bool non_blocking_accept(socket_type s,
224
- state_type state, socket_addr_type* addr, std::size_t* addrlen,
225
- asio::error_code& ec, socket_type& new_socket)
226
- {
227
- for (;;)
228
- {
229
- // Accept the waiting connection.
230
- new_socket = socket_ops::accept(s, addr, addrlen, ec);
231
-
232
- // Check if operation succeeded.
233
- if (new_socket != invalid_socket)
234
- return true;
235
-
236
- // Retry operation if interrupted by signal.
237
- if (ec == asio::error::interrupted)
238
- continue;
239
-
240
- // Operation failed.
241
- if (ec == asio::error::would_block
242
- || ec == asio::error::try_again)
243
- {
244
- // Fall through to retry operation.
245
- }
246
- else if (ec == asio::error::connection_aborted)
247
- {
248
- if (state & enable_connection_aborted)
249
- return true;
250
- // Fall through to retry operation.
251
- }
252
- #if defined(EPROTO)
253
- else if (ec.value() == EPROTO)
254
- {
255
- if (state & enable_connection_aborted)
256
- return true;
257
- // Fall through to retry operation.
258
- }
259
- #endif // defined(EPROTO)
260
- else
261
- return true;
262
-
263
- return false;
264
- }
265
- }
266
-
267
- #endif // defined(ASIO_HAS_IOCP)
268
-
269
- template <typename SockLenType>
270
- inline int call_bind(SockLenType msghdr::*,
271
- socket_type s, const socket_addr_type* addr, std::size_t addrlen)
272
- {
273
- return ::bind(s, addr, (SockLenType)addrlen);
274
- }
275
-
276
- int bind(socket_type s, const socket_addr_type* addr,
277
- std::size_t addrlen, asio::error_code& ec)
278
- {
279
- if (s == invalid_socket)
280
- {
281
- ec = asio::error::bad_descriptor;
282
- return socket_error_retval;
283
- }
284
-
285
- clear_last_error();
286
- int result = error_wrapper(call_bind(
287
- &msghdr::msg_namelen, s, addr, addrlen), ec);
288
- if (result == 0)
289
- ec = asio::error_code();
290
- return result;
291
- }
292
-
293
- int close(socket_type s, state_type& state,
294
- bool destruction, asio::error_code& ec)
295
- {
296
- int result = 0;
297
- if (s != invalid_socket)
298
- {
299
- // We don't want the destructor to block, so set the socket to linger in
300
- // the background. If the user doesn't like this behaviour then they need
301
- // to explicitly close the socket.
302
- if (destruction && (state & user_set_linger))
303
- {
304
- ::linger opt;
305
- opt.l_onoff = 0;
306
- opt.l_linger = 0;
307
- asio::error_code ignored_ec;
308
- socket_ops::setsockopt(s, state, SOL_SOCKET,
309
- SO_LINGER, &opt, sizeof(opt), ignored_ec);
310
- }
311
-
312
- clear_last_error();
313
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
314
- result = error_wrapper(::closesocket(s), ec);
315
- #else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
316
- result = error_wrapper(::close(s), ec);
317
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
318
-
319
- if (result != 0
320
- && (ec == asio::error::would_block
321
- || ec == asio::error::try_again))
322
- {
323
- // According to UNIX Network Programming Vol. 1, it is possible for
324
- // close() to fail with EWOULDBLOCK under certain circumstances. What
325
- // isn't clear is the state of the descriptor after this error. The one
326
- // current OS where this behaviour is seen, Windows, says that the socket
327
- // remains open. Therefore we'll put the descriptor back into blocking
328
- // mode and have another attempt at closing it.
329
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
330
- ioctl_arg_type arg = 0;
331
- ::ioctlsocket(s, FIONBIO, &arg);
332
- #else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
333
- # if defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
334
- int flags = ::fcntl(s, F_GETFL, 0);
335
- if (flags >= 0)
336
- ::fcntl(s, F_SETFL, flags & ~O_NONBLOCK);
337
- # else // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
338
- ioctl_arg_type arg = 0;
339
- ::ioctl(s, FIONBIO, &arg);
340
- # endif // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
341
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
342
- state &= ~non_blocking;
343
-
344
- clear_last_error();
345
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
346
- result = error_wrapper(::closesocket(s), ec);
347
- #else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
348
- result = error_wrapper(::close(s), ec);
349
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
350
- }
351
- }
352
-
353
- if (result == 0)
354
- ec = asio::error_code();
355
- return result;
356
- }
357
-
358
- bool set_user_non_blocking(socket_type s,
359
- state_type& state, bool value, asio::error_code& ec)
360
- {
361
- if (s == invalid_socket)
362
- {
363
- ec = asio::error::bad_descriptor;
364
- return false;
365
- }
366
-
367
- clear_last_error();
368
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
369
- ioctl_arg_type arg = (value ? 1 : 0);
370
- int result = error_wrapper(::ioctlsocket(s, FIONBIO, &arg), ec);
371
- #elif defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
372
- int result = error_wrapper(::fcntl(s, F_GETFL, 0), ec);
373
- if (result >= 0)
374
- {
375
- clear_last_error();
376
- int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
377
- result = error_wrapper(::fcntl(s, F_SETFL, flag), ec);
378
- }
379
- #else
380
- ioctl_arg_type arg = (value ? 1 : 0);
381
- int result = error_wrapper(::ioctl(s, FIONBIO, &arg), ec);
382
- #endif
383
-
384
- if (result >= 0)
385
- {
386
- ec = asio::error_code();
387
- if (value)
388
- state |= user_set_non_blocking;
389
- else
390
- {
391
- // Clearing the user-set non-blocking mode always overrides any
392
- // internally-set non-blocking flag. Any subsequent asynchronous
393
- // operations will need to re-enable non-blocking I/O.
394
- state &= ~(user_set_non_blocking | internal_non_blocking);
395
- }
396
- return true;
397
- }
398
-
399
- return false;
400
- }
401
-
402
- bool set_internal_non_blocking(socket_type s,
403
- state_type& state, bool value, asio::error_code& ec)
404
- {
405
- if (s == invalid_socket)
406
- {
407
- ec = asio::error::bad_descriptor;
408
- return false;
409
- }
410
-
411
- if (!value && (state & user_set_non_blocking))
412
- {
413
- // It does not make sense to clear the internal non-blocking flag if the
414
- // user still wants non-blocking behaviour. Return an error and let the
415
- // caller figure out whether to update the user-set non-blocking flag.
416
- ec = asio::error::invalid_argument;
417
- return false;
418
- }
419
-
420
- clear_last_error();
421
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
422
- ioctl_arg_type arg = (value ? 1 : 0);
423
- int result = error_wrapper(::ioctlsocket(s, FIONBIO, &arg), ec);
424
- #elif defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
425
- int result = error_wrapper(::fcntl(s, F_GETFL, 0), ec);
426
- if (result >= 0)
427
- {
428
- clear_last_error();
429
- int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
430
- result = error_wrapper(::fcntl(s, F_SETFL, flag), ec);
431
- }
432
- #else
433
- ioctl_arg_type arg = (value ? 1 : 0);
434
- int result = error_wrapper(::ioctl(s, FIONBIO, &arg), ec);
435
- #endif
436
-
437
- if (result >= 0)
438
- {
439
- ec = asio::error_code();
440
- if (value)
441
- state |= internal_non_blocking;
442
- else
443
- state &= ~internal_non_blocking;
444
- return true;
445
- }
446
-
447
- return false;
448
- }
449
-
450
- int shutdown(socket_type s, int what, asio::error_code& ec)
451
- {
452
- if (s == invalid_socket)
453
- {
454
- ec = asio::error::bad_descriptor;
455
- return socket_error_retval;
456
- }
457
-
458
- clear_last_error();
459
- int result = error_wrapper(::shutdown(s, what), ec);
460
- if (result == 0)
461
- ec = asio::error_code();
462
- return result;
463
- }
464
-
465
- template <typename SockLenType>
466
- inline int call_connect(SockLenType msghdr::*,
467
- socket_type s, const socket_addr_type* addr, std::size_t addrlen)
468
- {
469
- return ::connect(s, addr, (SockLenType)addrlen);
470
- }
471
-
472
- int connect(socket_type s, const socket_addr_type* addr,
473
- std::size_t addrlen, asio::error_code& ec)
474
- {
475
- if (s == invalid_socket)
476
- {
477
- ec = asio::error::bad_descriptor;
478
- return socket_error_retval;
479
- }
480
-
481
- clear_last_error();
482
- int result = error_wrapper(call_connect(
483
- &msghdr::msg_namelen, s, addr, addrlen), ec);
484
- if (result == 0)
485
- ec = asio::error_code();
486
- #if defined(__linux__)
487
- else if (ec == asio::error::try_again)
488
- ec = asio::error::no_buffer_space;
489
- #endif // defined(__linux__)
490
- return result;
491
- }
492
-
493
- void sync_connect(socket_type s, const socket_addr_type* addr,
494
- std::size_t addrlen, asio::error_code& ec)
495
- {
496
- // Perform the connect operation.
497
- socket_ops::connect(s, addr, addrlen, ec);
498
- if (ec != asio::error::in_progress
499
- && ec != asio::error::would_block)
500
- {
501
- // The connect operation finished immediately.
502
- return;
503
- }
504
-
505
- // Wait for socket to become ready.
506
- if (socket_ops::poll_connect(s, -1, ec) < 0)
507
- return;
508
-
509
- // Get the error code from the connect operation.
510
- int connect_error = 0;
511
- size_t connect_error_len = sizeof(connect_error);
512
- if (socket_ops::getsockopt(s, 0, SOL_SOCKET, SO_ERROR,
513
- &connect_error, &connect_error_len, ec) == socket_error_retval)
514
- return;
515
-
516
- // Return the result of the connect operation.
517
- ec = asio::error_code(connect_error,
518
- asio::error::get_system_category());
519
- }
520
-
521
- #if defined(ASIO_HAS_IOCP)
522
-
523
- void complete_iocp_connect(socket_type s, asio::error_code& ec)
524
- {
525
- // Map non-portable errors to their portable counterparts.
526
- switch (ec.value())
527
- {
528
- case ERROR_CONNECTION_REFUSED:
529
- ec = asio::error::connection_refused;
530
- break;
531
- case ERROR_NETWORK_UNREACHABLE:
532
- ec = asio::error::network_unreachable;
533
- break;
534
- case ERROR_HOST_UNREACHABLE:
535
- ec = asio::error::host_unreachable;
536
- break;
537
- case ERROR_SEM_TIMEOUT:
538
- ec = asio::error::timed_out;
539
- break;
540
- default:
541
- break;
542
- }
543
-
544
- if (!ec)
545
- {
546
- // Need to set the SO_UPDATE_CONNECT_CONTEXT option so that getsockname
547
- // and getpeername will work on the connected socket.
548
- socket_ops::state_type state = 0;
549
- const int so_update_connect_context = 0x7010;
550
- socket_ops::setsockopt(s, state, SOL_SOCKET,
551
- so_update_connect_context, 0, 0, ec);
552
- }
553
- }
554
-
555
- #endif // defined(ASIO_HAS_IOCP)
556
-
557
- bool non_blocking_connect(socket_type s, asio::error_code& ec)
558
- {
559
- // Check if the connect operation has finished. This is required since we may
560
- // get spurious readiness notifications from the reactor.
561
- #if defined(ASIO_WINDOWS) \
562
- || defined(__CYGWIN__) \
563
- || defined(__SYMBIAN32__)
564
- fd_set write_fds;
565
- FD_ZERO(&write_fds);
566
- FD_SET(s, &write_fds);
567
- fd_set except_fds;
568
- FD_ZERO(&except_fds);
569
- FD_SET(s, &except_fds);
570
- timeval zero_timeout;
571
- zero_timeout.tv_sec = 0;
572
- zero_timeout.tv_usec = 0;
573
- int ready = ::select(s + 1, 0, &write_fds, &except_fds, &zero_timeout);
574
- #else // defined(ASIO_WINDOWS)
575
- // || defined(__CYGWIN__)
576
- // || defined(__SYMBIAN32__)
577
- pollfd fds;
578
- fds.fd = s;
579
- fds.events = POLLOUT;
580
- fds.revents = 0;
581
- int ready = ::poll(&fds, 1, 0);
582
- #endif // defined(ASIO_WINDOWS)
583
- // || defined(__CYGWIN__)
584
- // || defined(__SYMBIAN32__)
585
- if (ready == 0)
586
- {
587
- // The asynchronous connect operation is still in progress.
588
- return false;
589
- }
590
-
591
- // Get the error code from the connect operation.
592
- int connect_error = 0;
593
- size_t connect_error_len = sizeof(connect_error);
594
- if (socket_ops::getsockopt(s, 0, SOL_SOCKET, SO_ERROR,
595
- &connect_error, &connect_error_len, ec) == 0)
596
- {
597
- if (connect_error)
598
- {
599
- ec = asio::error_code(connect_error,
600
- asio::error::get_system_category());
601
- }
602
- else
603
- ec = asio::error_code();
604
- }
605
-
606
- return true;
607
- }
608
-
609
- int socketpair(int af, int type, int protocol,
610
- socket_type sv[2], asio::error_code& ec)
611
- {
612
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
613
- (void)(af);
614
- (void)(type);
615
- (void)(protocol);
616
- (void)(sv);
617
- ec = asio::error::operation_not_supported;
618
- return socket_error_retval;
619
- #else
620
- clear_last_error();
621
- int result = error_wrapper(::socketpair(af, type, protocol, sv), ec);
622
- if (result == 0)
623
- ec = asio::error_code();
624
- return result;
625
- #endif
626
- }
627
-
628
- bool sockatmark(socket_type s, asio::error_code& ec)
629
- {
630
- if (s == invalid_socket)
631
- {
632
- ec = asio::error::bad_descriptor;
633
- return false;
634
- }
635
-
636
- #if defined(SIOCATMARK)
637
- ioctl_arg_type value = 0;
638
- # if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
639
- int result = error_wrapper(::ioctlsocket(s, SIOCATMARK, &value), ec);
640
- # else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
641
- int result = error_wrapper(::ioctl(s, SIOCATMARK, &value), ec);
642
- # endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
643
- if (result == 0)
644
- ec = asio::error_code();
645
- # if defined(ENOTTY)
646
- if (ec.value() == ENOTTY)
647
- ec = asio::error::not_socket;
648
- # endif // defined(ENOTTY)
649
- #else // defined(SIOCATMARK)
650
- int value = error_wrapper(::sockatmark(s), ec);
651
- if (value != -1)
652
- ec = asio::error_code();
653
- #endif // defined(SIOCATMARK)
654
-
655
- return ec ? false : value != 0;
656
- }
657
-
658
- size_t available(socket_type s, asio::error_code& ec)
659
- {
660
- if (s == invalid_socket)
661
- {
662
- ec = asio::error::bad_descriptor;
663
- return 0;
664
- }
665
-
666
- ioctl_arg_type value = 0;
667
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
668
- int result = error_wrapper(::ioctlsocket(s, FIONREAD, &value), ec);
669
- #else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
670
- int result = error_wrapper(::ioctl(s, FIONREAD, &value), ec);
671
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
672
- if (result == 0)
673
- ec = asio::error_code();
674
- #if defined(ENOTTY)
675
- if (ec.value() == ENOTTY)
676
- ec = asio::error::not_socket;
677
- #endif // defined(ENOTTY)
678
-
679
- return ec ? static_cast<size_t>(0) : static_cast<size_t>(value);
680
- }
681
-
682
- int listen(socket_type s, int backlog, asio::error_code& ec)
683
- {
684
- if (s == invalid_socket)
685
- {
686
- ec = asio::error::bad_descriptor;
687
- return socket_error_retval;
688
- }
689
-
690
- clear_last_error();
691
- int result = error_wrapper(::listen(s, backlog), ec);
692
- if (result == 0)
693
- ec = asio::error_code();
694
- return result;
695
- }
696
-
697
- inline void init_buf_iov_base(void*& base, void* addr)
698
- {
699
- base = addr;
700
- }
701
-
702
- template <typename T>
703
- inline void init_buf_iov_base(T& base, void* addr)
704
- {
705
- base = static_cast<T>(addr);
706
- }
707
-
708
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
709
- typedef WSABUF buf;
710
- #else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
711
- typedef iovec buf;
712
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
713
-
714
- void init_buf(buf& b, void* data, size_t size)
715
- {
716
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
717
- b.buf = static_cast<char*>(data);
718
- b.len = static_cast<u_long>(size);
719
- #else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
720
- init_buf_iov_base(b.iov_base, data);
721
- b.iov_len = size;
722
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
723
- }
724
-
725
- void init_buf(buf& b, const void* data, size_t size)
726
- {
727
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
728
- b.buf = static_cast<char*>(const_cast<void*>(data));
729
- b.len = static_cast<u_long>(size);
730
- #else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
731
- init_buf_iov_base(b.iov_base, const_cast<void*>(data));
732
- b.iov_len = size;
733
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
734
- }
735
-
736
- inline void init_msghdr_msg_name(void*& name, socket_addr_type* addr)
737
- {
738
- name = addr;
739
- }
740
-
741
- inline void init_msghdr_msg_name(void*& name, const socket_addr_type* addr)
742
- {
743
- name = const_cast<socket_addr_type*>(addr);
744
- }
745
-
746
- template <typename T>
747
- inline void init_msghdr_msg_name(T& name, socket_addr_type* addr)
748
- {
749
- name = reinterpret_cast<T>(addr);
750
- }
751
-
752
- template <typename T>
753
- inline void init_msghdr_msg_name(T& name, const socket_addr_type* addr)
754
- {
755
- name = reinterpret_cast<T>(const_cast<socket_addr_type*>(addr));
756
- }
757
-
758
- signed_size_type recv(socket_type s, buf* bufs, size_t count,
759
- int flags, asio::error_code& ec)
760
- {
761
- clear_last_error();
762
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
763
- // Receive some data.
764
- DWORD recv_buf_count = static_cast<DWORD>(count);
765
- DWORD bytes_transferred = 0;
766
- DWORD recv_flags = flags;
767
- int result = error_wrapper(::WSARecv(s, bufs,
768
- recv_buf_count, &bytes_transferred, &recv_flags, 0, 0), ec);
769
- if (ec.value() == ERROR_NETNAME_DELETED)
770
- ec = asio::error::connection_reset;
771
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
772
- ec = asio::error::connection_refused;
773
- else if (ec.value() == WSAEMSGSIZE || ec.value() == ERROR_MORE_DATA)
774
- result = 0;
775
- if (result != 0)
776
- return socket_error_retval;
777
- ec = asio::error_code();
778
- return bytes_transferred;
779
- #else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
780
- msghdr msg = msghdr();
781
- msg.msg_iov = bufs;
782
- msg.msg_iovlen = static_cast<int>(count);
783
- signed_size_type result = error_wrapper(::recvmsg(s, &msg, flags), ec);
784
- if (result >= 0)
785
- ec = asio::error_code();
786
- return result;
787
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
788
- }
789
-
790
- size_t sync_recv(socket_type s, state_type state, buf* bufs,
791
- size_t count, int flags, bool all_empty, asio::error_code& ec)
792
- {
793
- if (s == invalid_socket)
794
- {
795
- ec = asio::error::bad_descriptor;
796
- return 0;
797
- }
798
-
799
- // A request to read 0 bytes on a stream is a no-op.
800
- if (all_empty && (state & stream_oriented))
801
- {
802
- ec = asio::error_code();
803
- return 0;
804
- }
805
-
806
- // Read some data.
807
- for (;;)
808
- {
809
- // Try to complete the operation without blocking.
810
- signed_size_type bytes = socket_ops::recv(s, bufs, count, flags, ec);
811
-
812
- // Check if operation succeeded.
813
- if (bytes > 0)
814
- return bytes;
815
-
816
- // Check for EOF.
817
- if ((state & stream_oriented) && bytes == 0)
818
- {
819
- ec = asio::error::eof;
820
- return 0;
821
- }
822
-
823
- // Operation failed.
824
- if ((state & user_set_non_blocking)
825
- || (ec != asio::error::would_block
826
- && ec != asio::error::try_again))
827
- return 0;
828
-
829
- // Wait for socket to become ready.
830
- if (socket_ops::poll_read(s, 0, -1, ec) < 0)
831
- return 0;
832
- }
833
- }
834
-
835
- #if defined(ASIO_HAS_IOCP)
836
-
837
- void complete_iocp_recv(state_type state,
838
- const weak_cancel_token_type& cancel_token, bool all_empty,
839
- asio::error_code& ec, size_t bytes_transferred)
840
- {
841
- // Map non-portable errors to their portable counterparts.
842
- if (ec.value() == ERROR_NETNAME_DELETED)
843
- {
844
- if (cancel_token.expired())
845
- ec = asio::error::operation_aborted;
846
- else
847
- ec = asio::error::connection_reset;
848
- }
849
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
850
- {
851
- ec = asio::error::connection_refused;
852
- }
853
- else if (ec.value() == WSAEMSGSIZE || ec.value() == ERROR_MORE_DATA)
854
- {
855
- ec.assign(0, ec.category());
856
- }
857
-
858
- // Check for connection closed.
859
- else if (!ec && bytes_transferred == 0
860
- && (state & stream_oriented) != 0
861
- && !all_empty)
862
- {
863
- ec = asio::error::eof;
864
- }
865
- }
866
-
867
- #else // defined(ASIO_HAS_IOCP)
868
-
869
- bool non_blocking_recv(socket_type s,
870
- buf* bufs, size_t count, int flags, bool is_stream,
871
- asio::error_code& ec, size_t& bytes_transferred)
872
- {
873
- for (;;)
874
- {
875
- // Read some data.
876
- signed_size_type bytes = socket_ops::recv(s, bufs, count, flags, ec);
877
-
878
- // Check for end of stream.
879
- if (is_stream && bytes == 0)
880
- {
881
- ec = asio::error::eof;
882
- return true;
883
- }
884
-
885
- // Retry operation if interrupted by signal.
886
- if (ec == asio::error::interrupted)
887
- continue;
888
-
889
- // Check if we need to run the operation again.
890
- if (ec == asio::error::would_block
891
- || ec == asio::error::try_again)
892
- return false;
893
-
894
- // Operation is complete.
895
- if (bytes >= 0)
896
- {
897
- ec = asio::error_code();
898
- bytes_transferred = bytes;
899
- }
900
- else
901
- bytes_transferred = 0;
902
-
903
- return true;
904
- }
905
- }
906
-
907
- #endif // defined(ASIO_HAS_IOCP)
908
-
909
- signed_size_type recvfrom(socket_type s, buf* bufs, size_t count,
910
- int flags, socket_addr_type* addr, std::size_t* addrlen,
911
- asio::error_code& ec)
912
- {
913
- clear_last_error();
914
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
915
- // Receive some data.
916
- DWORD recv_buf_count = static_cast<DWORD>(count);
917
- DWORD bytes_transferred = 0;
918
- DWORD recv_flags = flags;
919
- int tmp_addrlen = (int)*addrlen;
920
- int result = error_wrapper(::WSARecvFrom(s, bufs, recv_buf_count,
921
- &bytes_transferred, &recv_flags, addr, &tmp_addrlen, 0, 0), ec);
922
- *addrlen = (std::size_t)tmp_addrlen;
923
- if (ec.value() == ERROR_NETNAME_DELETED)
924
- ec = asio::error::connection_reset;
925
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
926
- ec = asio::error::connection_refused;
927
- else if (ec.value() == WSAEMSGSIZE || ec.value() == ERROR_MORE_DATA)
928
- result = 0;
929
- if (result != 0)
930
- return socket_error_retval;
931
- ec = asio::error_code();
932
- return bytes_transferred;
933
- #else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
934
- msghdr msg = msghdr();
935
- init_msghdr_msg_name(msg.msg_name, addr);
936
- msg.msg_namelen = static_cast<int>(*addrlen);
937
- msg.msg_iov = bufs;
938
- msg.msg_iovlen = static_cast<int>(count);
939
- signed_size_type result = error_wrapper(::recvmsg(s, &msg, flags), ec);
940
- *addrlen = msg.msg_namelen;
941
- if (result >= 0)
942
- ec = asio::error_code();
943
- return result;
944
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
945
- }
946
-
947
- size_t sync_recvfrom(socket_type s, state_type state, buf* bufs,
948
- size_t count, int flags, socket_addr_type* addr,
949
- std::size_t* addrlen, asio::error_code& ec)
950
- {
951
- if (s == invalid_socket)
952
- {
953
- ec = asio::error::bad_descriptor;
954
- return 0;
955
- }
956
-
957
- // Read some data.
958
- for (;;)
959
- {
960
- // Try to complete the operation without blocking.
961
- signed_size_type bytes = socket_ops::recvfrom(
962
- s, bufs, count, flags, addr, addrlen, ec);
963
-
964
- // Check if operation succeeded.
965
- if (bytes >= 0)
966
- return bytes;
967
-
968
- // Operation failed.
969
- if ((state & user_set_non_blocking)
970
- || (ec != asio::error::would_block
971
- && ec != asio::error::try_again))
972
- return 0;
973
-
974
- // Wait for socket to become ready.
975
- if (socket_ops::poll_read(s, 0, -1, ec) < 0)
976
- return 0;
977
- }
978
- }
979
-
980
- #if defined(ASIO_HAS_IOCP)
981
-
982
- void complete_iocp_recvfrom(
983
- const weak_cancel_token_type& cancel_token,
984
- asio::error_code& ec)
985
- {
986
- // Map non-portable errors to their portable counterparts.
987
- if (ec.value() == ERROR_NETNAME_DELETED)
988
- {
989
- if (cancel_token.expired())
990
- ec = asio::error::operation_aborted;
991
- else
992
- ec = asio::error::connection_reset;
993
- }
994
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
995
- {
996
- ec = asio::error::connection_refused;
997
- }
998
- else if (ec.value() == WSAEMSGSIZE || ec.value() == ERROR_MORE_DATA)
999
- {
1000
- ec.assign(0, ec.category());
1001
- }
1002
- }
1003
-
1004
- #else // defined(ASIO_HAS_IOCP)
1005
-
1006
- bool non_blocking_recvfrom(socket_type s,
1007
- buf* bufs, size_t count, int flags,
1008
- socket_addr_type* addr, std::size_t* addrlen,
1009
- asio::error_code& ec, size_t& bytes_transferred)
1010
- {
1011
- for (;;)
1012
- {
1013
- // Read some data.
1014
- signed_size_type bytes = socket_ops::recvfrom(
1015
- s, bufs, count, flags, addr, addrlen, ec);
1016
-
1017
- // Retry operation if interrupted by signal.
1018
- if (ec == asio::error::interrupted)
1019
- continue;
1020
-
1021
- // Check if we need to run the operation again.
1022
- if (ec == asio::error::would_block
1023
- || ec == asio::error::try_again)
1024
- return false;
1025
-
1026
- // Operation is complete.
1027
- if (bytes >= 0)
1028
- {
1029
- ec = asio::error_code();
1030
- bytes_transferred = bytes;
1031
- }
1032
- else
1033
- bytes_transferred = 0;
1034
-
1035
- return true;
1036
- }
1037
- }
1038
-
1039
- #endif // defined(ASIO_HAS_IOCP)
1040
-
1041
- signed_size_type recvmsg(socket_type s, buf* bufs, size_t count,
1042
- int in_flags, int& out_flags, asio::error_code& ec)
1043
- {
1044
- clear_last_error();
1045
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1046
- out_flags = 0;
1047
- return socket_ops::recv(s, bufs, count, in_flags, ec);
1048
- #else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1049
- msghdr msg = msghdr();
1050
- msg.msg_iov = bufs;
1051
- msg.msg_iovlen = static_cast<int>(count);
1052
- signed_size_type result = error_wrapper(::recvmsg(s, &msg, in_flags), ec);
1053
- if (result >= 0)
1054
- {
1055
- ec = asio::error_code();
1056
- out_flags = msg.msg_flags;
1057
- }
1058
- else
1059
- out_flags = 0;
1060
- return result;
1061
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1062
- }
1063
-
1064
- size_t sync_recvmsg(socket_type s, state_type state,
1065
- buf* bufs, size_t count, int in_flags, int& out_flags,
1066
- asio::error_code& ec)
1067
- {
1068
- if (s == invalid_socket)
1069
- {
1070
- ec = asio::error::bad_descriptor;
1071
- return 0;
1072
- }
1073
-
1074
- // Read some data.
1075
- for (;;)
1076
- {
1077
- // Try to complete the operation without blocking.
1078
- signed_size_type bytes = socket_ops::recvmsg(
1079
- s, bufs, count, in_flags, out_flags, ec);
1080
-
1081
- // Check if operation succeeded.
1082
- if (bytes >= 0)
1083
- return bytes;
1084
-
1085
- // Operation failed.
1086
- if ((state & user_set_non_blocking)
1087
- || (ec != asio::error::would_block
1088
- && ec != asio::error::try_again))
1089
- return 0;
1090
-
1091
- // Wait for socket to become ready.
1092
- if (socket_ops::poll_read(s, 0, -1, ec) < 0)
1093
- return 0;
1094
- }
1095
- }
1096
-
1097
- #if defined(ASIO_HAS_IOCP)
1098
-
1099
- void complete_iocp_recvmsg(
1100
- const weak_cancel_token_type& cancel_token,
1101
- asio::error_code& ec)
1102
- {
1103
- // Map non-portable errors to their portable counterparts.
1104
- if (ec.value() == ERROR_NETNAME_DELETED)
1105
- {
1106
- if (cancel_token.expired())
1107
- ec = asio::error::operation_aborted;
1108
- else
1109
- ec = asio::error::connection_reset;
1110
- }
1111
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
1112
- {
1113
- ec = asio::error::connection_refused;
1114
- }
1115
- else if (ec.value() == WSAEMSGSIZE || ec.value() == ERROR_MORE_DATA)
1116
- {
1117
- ec.assign(0, ec.category());
1118
- }
1119
- }
1120
-
1121
- #else // defined(ASIO_HAS_IOCP)
1122
-
1123
- bool non_blocking_recvmsg(socket_type s,
1124
- buf* bufs, size_t count, int in_flags, int& out_flags,
1125
- asio::error_code& ec, size_t& bytes_transferred)
1126
- {
1127
- for (;;)
1128
- {
1129
- // Read some data.
1130
- signed_size_type bytes = socket_ops::recvmsg(
1131
- s, bufs, count, in_flags, out_flags, ec);
1132
-
1133
- // Retry operation if interrupted by signal.
1134
- if (ec == asio::error::interrupted)
1135
- continue;
1136
-
1137
- // Check if we need to run the operation again.
1138
- if (ec == asio::error::would_block
1139
- || ec == asio::error::try_again)
1140
- return false;
1141
-
1142
- // Operation is complete.
1143
- if (bytes >= 0)
1144
- {
1145
- ec = asio::error_code();
1146
- bytes_transferred = bytes;
1147
- }
1148
- else
1149
- bytes_transferred = 0;
1150
-
1151
- return true;
1152
- }
1153
- }
1154
-
1155
- #endif // defined(ASIO_HAS_IOCP)
1156
-
1157
- signed_size_type send(socket_type s, const buf* bufs, size_t count,
1158
- int flags, asio::error_code& ec)
1159
- {
1160
- clear_last_error();
1161
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1162
- // Send the data.
1163
- DWORD send_buf_count = static_cast<DWORD>(count);
1164
- DWORD bytes_transferred = 0;
1165
- DWORD send_flags = flags;
1166
- int result = error_wrapper(::WSASend(s, const_cast<buf*>(bufs),
1167
- send_buf_count, &bytes_transferred, send_flags, 0, 0), ec);
1168
- if (ec.value() == ERROR_NETNAME_DELETED)
1169
- ec = asio::error::connection_reset;
1170
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
1171
- ec = asio::error::connection_refused;
1172
- if (result != 0)
1173
- return socket_error_retval;
1174
- ec = asio::error_code();
1175
- return bytes_transferred;
1176
- #else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1177
- msghdr msg = msghdr();
1178
- msg.msg_iov = const_cast<buf*>(bufs);
1179
- msg.msg_iovlen = static_cast<int>(count);
1180
- #if defined(__linux__)
1181
- flags |= MSG_NOSIGNAL;
1182
- #endif // defined(__linux__)
1183
- signed_size_type result = error_wrapper(::sendmsg(s, &msg, flags), ec);
1184
- if (result >= 0)
1185
- ec = asio::error_code();
1186
- return result;
1187
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1188
- }
1189
-
1190
- size_t sync_send(socket_type s, state_type state, const buf* bufs,
1191
- size_t count, int flags, bool all_empty, asio::error_code& ec)
1192
- {
1193
- if (s == invalid_socket)
1194
- {
1195
- ec = asio::error::bad_descriptor;
1196
- return 0;
1197
- }
1198
-
1199
- // A request to write 0 bytes to a stream is a no-op.
1200
- if (all_empty && (state & stream_oriented))
1201
- {
1202
- ec = asio::error_code();
1203
- return 0;
1204
- }
1205
-
1206
- // Read some data.
1207
- for (;;)
1208
- {
1209
- // Try to complete the operation without blocking.
1210
- signed_size_type bytes = socket_ops::send(s, bufs, count, flags, ec);
1211
-
1212
- // Check if operation succeeded.
1213
- if (bytes >= 0)
1214
- return bytes;
1215
-
1216
- // Operation failed.
1217
- if ((state & user_set_non_blocking)
1218
- || (ec != asio::error::would_block
1219
- && ec != asio::error::try_again))
1220
- return 0;
1221
-
1222
- // Wait for socket to become ready.
1223
- if (socket_ops::poll_write(s, 0, -1, ec) < 0)
1224
- return 0;
1225
- }
1226
- }
1227
-
1228
- #if defined(ASIO_HAS_IOCP)
1229
-
1230
- void complete_iocp_send(
1231
- const weak_cancel_token_type& cancel_token,
1232
- asio::error_code& ec)
1233
- {
1234
- // Map non-portable errors to their portable counterparts.
1235
- if (ec.value() == ERROR_NETNAME_DELETED)
1236
- {
1237
- if (cancel_token.expired())
1238
- ec = asio::error::operation_aborted;
1239
- else
1240
- ec = asio::error::connection_reset;
1241
- }
1242
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
1243
- {
1244
- ec = asio::error::connection_refused;
1245
- }
1246
- }
1247
-
1248
- #else // defined(ASIO_HAS_IOCP)
1249
-
1250
- bool non_blocking_send(socket_type s,
1251
- const buf* bufs, size_t count, int flags,
1252
- asio::error_code& ec, size_t& bytes_transferred)
1253
- {
1254
- for (;;)
1255
- {
1256
- // Write some data.
1257
- signed_size_type bytes = socket_ops::send(s, bufs, count, flags, ec);
1258
-
1259
- // Retry operation if interrupted by signal.
1260
- if (ec == asio::error::interrupted)
1261
- continue;
1262
-
1263
- // Check if we need to run the operation again.
1264
- if (ec == asio::error::would_block
1265
- || ec == asio::error::try_again)
1266
- return false;
1267
-
1268
- // Operation is complete.
1269
- if (bytes >= 0)
1270
- {
1271
- ec = asio::error_code();
1272
- bytes_transferred = bytes;
1273
- }
1274
- else
1275
- bytes_transferred = 0;
1276
-
1277
- return true;
1278
- }
1279
- }
1280
-
1281
- #endif // defined(ASIO_HAS_IOCP)
1282
-
1283
- signed_size_type sendto(socket_type s, const buf* bufs, size_t count,
1284
- int flags, const socket_addr_type* addr, std::size_t addrlen,
1285
- asio::error_code& ec)
1286
- {
1287
- clear_last_error();
1288
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1289
- // Send the data.
1290
- DWORD send_buf_count = static_cast<DWORD>(count);
1291
- DWORD bytes_transferred = 0;
1292
- int result = error_wrapper(::WSASendTo(s, const_cast<buf*>(bufs),
1293
- send_buf_count, &bytes_transferred, flags, addr,
1294
- static_cast<int>(addrlen), 0, 0), ec);
1295
- if (ec.value() == ERROR_NETNAME_DELETED)
1296
- ec = asio::error::connection_reset;
1297
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
1298
- ec = asio::error::connection_refused;
1299
- if (result != 0)
1300
- return socket_error_retval;
1301
- ec = asio::error_code();
1302
- return bytes_transferred;
1303
- #else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1304
- msghdr msg = msghdr();
1305
- init_msghdr_msg_name(msg.msg_name, addr);
1306
- msg.msg_namelen = static_cast<int>(addrlen);
1307
- msg.msg_iov = const_cast<buf*>(bufs);
1308
- msg.msg_iovlen = static_cast<int>(count);
1309
- #if defined(__linux__)
1310
- flags |= MSG_NOSIGNAL;
1311
- #endif // defined(__linux__)
1312
- signed_size_type result = error_wrapper(::sendmsg(s, &msg, flags), ec);
1313
- if (result >= 0)
1314
- ec = asio::error_code();
1315
- return result;
1316
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1317
- }
1318
-
1319
- size_t sync_sendto(socket_type s, state_type state, const buf* bufs,
1320
- size_t count, int flags, const socket_addr_type* addr,
1321
- std::size_t addrlen, asio::error_code& ec)
1322
- {
1323
- if (s == invalid_socket)
1324
- {
1325
- ec = asio::error::bad_descriptor;
1326
- return 0;
1327
- }
1328
-
1329
- // Write some data.
1330
- for (;;)
1331
- {
1332
- // Try to complete the operation without blocking.
1333
- signed_size_type bytes = socket_ops::sendto(
1334
- s, bufs, count, flags, addr, addrlen, ec);
1335
-
1336
- // Check if operation succeeded.
1337
- if (bytes >= 0)
1338
- return bytes;
1339
-
1340
- // Operation failed.
1341
- if ((state & user_set_non_blocking)
1342
- || (ec != asio::error::would_block
1343
- && ec != asio::error::try_again))
1344
- return 0;
1345
-
1346
- // Wait for socket to become ready.
1347
- if (socket_ops::poll_write(s, 0, -1, ec) < 0)
1348
- return 0;
1349
- }
1350
- }
1351
-
1352
- #if !defined(ASIO_HAS_IOCP)
1353
-
1354
- bool non_blocking_sendto(socket_type s,
1355
- const buf* bufs, size_t count, int flags,
1356
- const socket_addr_type* addr, std::size_t addrlen,
1357
- asio::error_code& ec, size_t& bytes_transferred)
1358
- {
1359
- for (;;)
1360
- {
1361
- // Write some data.
1362
- signed_size_type bytes = socket_ops::sendto(
1363
- s, bufs, count, flags, addr, addrlen, ec);
1364
-
1365
- // Retry operation if interrupted by signal.
1366
- if (ec == asio::error::interrupted)
1367
- continue;
1368
-
1369
- // Check if we need to run the operation again.
1370
- if (ec == asio::error::would_block
1371
- || ec == asio::error::try_again)
1372
- return false;
1373
-
1374
- // Operation is complete.
1375
- if (bytes >= 0)
1376
- {
1377
- ec = asio::error_code();
1378
- bytes_transferred = bytes;
1379
- }
1380
- else
1381
- bytes_transferred = 0;
1382
-
1383
- return true;
1384
- }
1385
- }
1386
-
1387
- #endif // !defined(ASIO_HAS_IOCP)
1388
-
1389
- socket_type socket(int af, int type, int protocol,
1390
- asio::error_code& ec)
1391
- {
1392
- clear_last_error();
1393
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1394
- socket_type s = error_wrapper(::WSASocketW(af, type, protocol, 0, 0,
1395
- WSA_FLAG_OVERLAPPED), ec);
1396
- if (s == invalid_socket)
1397
- return s;
1398
-
1399
- if (af == ASIO_OS_DEF(AF_INET6))
1400
- {
1401
- // Try to enable the POSIX default behaviour of having IPV6_V6ONLY set to
1402
- // false. This will only succeed on Windows Vista and later versions of
1403
- // Windows, where a dual-stack IPv4/v6 implementation is available.
1404
- DWORD optval = 0;
1405
- ::setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
1406
- reinterpret_cast<const char*>(&optval), sizeof(optval));
1407
- }
1408
-
1409
- ec = asio::error_code();
1410
-
1411
- return s;
1412
- #elif defined(__MACH__) && defined(__APPLE__) || defined(__FreeBSD__)
1413
- socket_type s = error_wrapper(::socket(af, type, protocol), ec);
1414
- if (s == invalid_socket)
1415
- return s;
1416
-
1417
- int optval = 1;
1418
- int result = error_wrapper(::setsockopt(s,
1419
- SOL_SOCKET, SO_NOSIGPIPE, &optval, sizeof(optval)), ec);
1420
- if (result != 0)
1421
- {
1422
- ::close(s);
1423
- return invalid_socket;
1424
- }
1425
-
1426
- return s;
1427
- #else
1428
- int s = error_wrapper(::socket(af, type, protocol), ec);
1429
- if (s >= 0)
1430
- ec = asio::error_code();
1431
- return s;
1432
- #endif
1433
- }
1434
-
1435
- template <typename SockLenType>
1436
- inline int call_setsockopt(SockLenType msghdr::*,
1437
- socket_type s, int level, int optname,
1438
- const void* optval, std::size_t optlen)
1439
- {
1440
- return ::setsockopt(s, level, optname,
1441
- (const char*)optval, (SockLenType)optlen);
1442
- }
1443
-
1444
- int setsockopt(socket_type s, state_type& state, int level, int optname,
1445
- const void* optval, std::size_t optlen, asio::error_code& ec)
1446
- {
1447
- if (s == invalid_socket)
1448
- {
1449
- ec = asio::error::bad_descriptor;
1450
- return socket_error_retval;
1451
- }
1452
-
1453
- if (level == custom_socket_option_level && optname == always_fail_option)
1454
- {
1455
- ec = asio::error::invalid_argument;
1456
- return socket_error_retval;
1457
- }
1458
-
1459
- if (level == custom_socket_option_level
1460
- && optname == enable_connection_aborted_option)
1461
- {
1462
- if (optlen != sizeof(int))
1463
- {
1464
- ec = asio::error::invalid_argument;
1465
- return socket_error_retval;
1466
- }
1467
-
1468
- if (*static_cast<const int*>(optval))
1469
- state |= enable_connection_aborted;
1470
- else
1471
- state &= ~enable_connection_aborted;
1472
- ec = asio::error_code();
1473
- return 0;
1474
- }
1475
-
1476
- if (level == SOL_SOCKET && optname == SO_LINGER)
1477
- state |= user_set_linger;
1478
-
1479
- #if defined(__BORLANDC__)
1480
- // Mysteriously, using the getsockopt and setsockopt functions directly with
1481
- // Borland C++ results in incorrect values being set and read. The bug can be
1482
- // worked around by using function addresses resolved with GetProcAddress.
1483
- if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
1484
- {
1485
- typedef int (WSAAPI *sso_t)(SOCKET, int, int, const char*, int);
1486
- if (sso_t sso = (sso_t)::GetProcAddress(winsock_module, "setsockopt"))
1487
- {
1488
- clear_last_error();
1489
- return error_wrapper(sso(s, level, optname,
1490
- reinterpret_cast<const char*>(optval),
1491
- static_cast<int>(optlen)), ec);
1492
- }
1493
- }
1494
- ec = asio::error::fault;
1495
- return socket_error_retval;
1496
- #else // defined(__BORLANDC__)
1497
- clear_last_error();
1498
- int result = error_wrapper(call_setsockopt(&msghdr::msg_namelen,
1499
- s, level, optname, optval, optlen), ec);
1500
- if (result == 0)
1501
- {
1502
- ec = asio::error_code();
1503
-
1504
- #if defined(__MACH__) && defined(__APPLE__) \
1505
- || defined(__NetBSD__) || defined(__FreeBSD__) \
1506
- || defined(__OpenBSD__) || defined(__QNX__)
1507
- // To implement portable behaviour for SO_REUSEADDR with UDP sockets we
1508
- // need to also set SO_REUSEPORT on BSD-based platforms.
1509
- if ((state & datagram_oriented)
1510
- && level == SOL_SOCKET && optname == SO_REUSEADDR)
1511
- {
1512
- call_setsockopt(&msghdr::msg_namelen, s,
1513
- SOL_SOCKET, SO_REUSEPORT, optval, optlen);
1514
- }
1515
- #endif
1516
- }
1517
-
1518
- return result;
1519
- #endif // defined(__BORLANDC__)
1520
- }
1521
-
1522
- template <typename SockLenType>
1523
- inline int call_getsockopt(SockLenType msghdr::*,
1524
- socket_type s, int level, int optname,
1525
- void* optval, std::size_t* optlen)
1526
- {
1527
- SockLenType tmp_optlen = (SockLenType)*optlen;
1528
- int result = ::getsockopt(s, level, optname, (char*)optval, &tmp_optlen);
1529
- *optlen = (std::size_t)tmp_optlen;
1530
- return result;
1531
- }
1532
-
1533
- int getsockopt(socket_type s, state_type state, int level, int optname,
1534
- void* optval, size_t* optlen, asio::error_code& ec)
1535
- {
1536
- if (s == invalid_socket)
1537
- {
1538
- ec = asio::error::bad_descriptor;
1539
- return socket_error_retval;
1540
- }
1541
-
1542
- if (level == custom_socket_option_level && optname == always_fail_option)
1543
- {
1544
- ec = asio::error::invalid_argument;
1545
- return socket_error_retval;
1546
- }
1547
-
1548
- if (level == custom_socket_option_level
1549
- && optname == enable_connection_aborted_option)
1550
- {
1551
- if (*optlen != sizeof(int))
1552
- {
1553
- ec = asio::error::invalid_argument;
1554
- return socket_error_retval;
1555
- }
1556
-
1557
- *static_cast<int*>(optval) = (state & enable_connection_aborted) ? 1 : 0;
1558
- ec = asio::error_code();
1559
- return 0;
1560
- }
1561
-
1562
- #if defined(__BORLANDC__)
1563
- // Mysteriously, using the getsockopt and setsockopt functions directly with
1564
- // Borland C++ results in incorrect values being set and read. The bug can be
1565
- // worked around by using function addresses resolved with GetProcAddress.
1566
- if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
1567
- {
1568
- typedef int (WSAAPI *gso_t)(SOCKET, int, int, char*, int*);
1569
- if (gso_t gso = (gso_t)::GetProcAddress(winsock_module, "getsockopt"))
1570
- {
1571
- clear_last_error();
1572
- int tmp_optlen = static_cast<int>(*optlen);
1573
- int result = error_wrapper(gso(s, level, optname,
1574
- reinterpret_cast<char*>(optval), &tmp_optlen), ec);
1575
- *optlen = static_cast<size_t>(tmp_optlen);
1576
- if (result != 0 && level == IPPROTO_IPV6 && optname == IPV6_V6ONLY
1577
- && ec.value() == WSAENOPROTOOPT && *optlen == sizeof(DWORD))
1578
- {
1579
- // Dual-stack IPv4/v6 sockets, and the IPV6_V6ONLY socket option, are
1580
- // only supported on Windows Vista and later. To simplify program logic
1581
- // we will fake success of getting this option and specify that the
1582
- // value is non-zero (i.e. true). This corresponds to the behavior of
1583
- // IPv6 sockets on Windows platforms pre-Vista.
1584
- *static_cast<DWORD*>(optval) = 1;
1585
- ec = asio::error_code();
1586
- }
1587
- return result;
1588
- }
1589
- }
1590
- ec = asio::error::fault;
1591
- return socket_error_retval;
1592
- #elif defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1593
- clear_last_error();
1594
- int result = error_wrapper(call_getsockopt(&msghdr::msg_namelen,
1595
- s, level, optname, optval, optlen), ec);
1596
- if (result != 0 && level == IPPROTO_IPV6 && optname == IPV6_V6ONLY
1597
- && ec.value() == WSAENOPROTOOPT && *optlen == sizeof(DWORD))
1598
- {
1599
- // Dual-stack IPv4/v6 sockets, and the IPV6_V6ONLY socket option, are only
1600
- // supported on Windows Vista and later. To simplify program logic we will
1601
- // fake success of getting this option and specify that the value is
1602
- // non-zero (i.e. true). This corresponds to the behavior of IPv6 sockets
1603
- // on Windows platforms pre-Vista.
1604
- *static_cast<DWORD*>(optval) = 1;
1605
- ec = asio::error_code();
1606
- }
1607
- if (result == 0)
1608
- ec = asio::error_code();
1609
- return result;
1610
- #else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1611
- clear_last_error();
1612
- int result = error_wrapper(call_getsockopt(&msghdr::msg_namelen,
1613
- s, level, optname, optval, optlen), ec);
1614
- #if defined(__linux__)
1615
- if (result == 0 && level == SOL_SOCKET && *optlen == sizeof(int)
1616
- && (optname == SO_SNDBUF || optname == SO_RCVBUF))
1617
- {
1618
- // On Linux, setting SO_SNDBUF or SO_RCVBUF to N actually causes the kernel
1619
- // to set the buffer size to N*2. Linux puts additional stuff into the
1620
- // buffers so that only about half is actually available to the application.
1621
- // The retrieved value is divided by 2 here to make it appear as though the
1622
- // correct value has been set.
1623
- *static_cast<int*>(optval) /= 2;
1624
- }
1625
- #endif // defined(__linux__)
1626
- if (result == 0)
1627
- ec = asio::error_code();
1628
- return result;
1629
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1630
- }
1631
-
1632
- template <typename SockLenType>
1633
- inline int call_getpeername(SockLenType msghdr::*,
1634
- socket_type s, socket_addr_type* addr, std::size_t* addrlen)
1635
- {
1636
- SockLenType tmp_addrlen = (SockLenType)*addrlen;
1637
- int result = ::getpeername(s, addr, &tmp_addrlen);
1638
- *addrlen = (std::size_t)tmp_addrlen;
1639
- return result;
1640
- }
1641
-
1642
- int getpeername(socket_type s, socket_addr_type* addr,
1643
- std::size_t* addrlen, bool cached, asio::error_code& ec)
1644
- {
1645
- if (s == invalid_socket)
1646
- {
1647
- ec = asio::error::bad_descriptor;
1648
- return socket_error_retval;
1649
- }
1650
-
1651
- #if defined(ASIO_WINDOWS) && !defined(ASIO_WINDOWS_APP) \
1652
- || defined(__CYGWIN__)
1653
- if (cached)
1654
- {
1655
- // Check if socket is still connected.
1656
- DWORD connect_time = 0;
1657
- size_t connect_time_len = sizeof(connect_time);
1658
- if (socket_ops::getsockopt(s, 0, SOL_SOCKET, SO_CONNECT_TIME,
1659
- &connect_time, &connect_time_len, ec) == socket_error_retval)
1660
- {
1661
- return socket_error_retval;
1662
- }
1663
- if (connect_time == 0xFFFFFFFF)
1664
- {
1665
- ec = asio::error::not_connected;
1666
- return socket_error_retval;
1667
- }
1668
-
1669
- // The cached value is still valid.
1670
- ec = asio::error_code();
1671
- return 0;
1672
- }
1673
- #else // defined(ASIO_WINDOWS) && !defined(ASIO_WINDOWS_APP)
1674
- // || defined(__CYGWIN__)
1675
- (void)cached;
1676
- #endif // defined(ASIO_WINDOWS) && !defined(ASIO_WINDOWS_APP)
1677
- // || defined(__CYGWIN__)
1678
-
1679
- clear_last_error();
1680
- int result = error_wrapper(call_getpeername(
1681
- &msghdr::msg_namelen, s, addr, addrlen), ec);
1682
- if (result == 0)
1683
- ec = asio::error_code();
1684
- return result;
1685
- }
1686
-
1687
- template <typename SockLenType>
1688
- inline int call_getsockname(SockLenType msghdr::*,
1689
- socket_type s, socket_addr_type* addr, std::size_t* addrlen)
1690
- {
1691
- SockLenType tmp_addrlen = (SockLenType)*addrlen;
1692
- int result = ::getsockname(s, addr, &tmp_addrlen);
1693
- *addrlen = (std::size_t)tmp_addrlen;
1694
- return result;
1695
- }
1696
-
1697
- int getsockname(socket_type s, socket_addr_type* addr,
1698
- std::size_t* addrlen, asio::error_code& ec)
1699
- {
1700
- if (s == invalid_socket)
1701
- {
1702
- ec = asio::error::bad_descriptor;
1703
- return socket_error_retval;
1704
- }
1705
-
1706
- clear_last_error();
1707
- int result = error_wrapper(call_getsockname(
1708
- &msghdr::msg_namelen, s, addr, addrlen), ec);
1709
- if (result == 0)
1710
- ec = asio::error_code();
1711
- return result;
1712
- }
1713
-
1714
- int ioctl(socket_type s, state_type& state, int cmd,
1715
- ioctl_arg_type* arg, asio::error_code& ec)
1716
- {
1717
- if (s == invalid_socket)
1718
- {
1719
- ec = asio::error::bad_descriptor;
1720
- return socket_error_retval;
1721
- }
1722
-
1723
- clear_last_error();
1724
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1725
- int result = error_wrapper(::ioctlsocket(s, cmd, arg), ec);
1726
- #elif defined(__MACH__) && defined(__APPLE__) \
1727
- || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
1728
- int result = error_wrapper(::ioctl(s,
1729
- static_cast<unsigned int>(cmd), arg), ec);
1730
- #else
1731
- int result = error_wrapper(::ioctl(s, cmd, arg), ec);
1732
- #endif
1733
- if (result >= 0)
1734
- {
1735
- ec = asio::error_code();
1736
-
1737
- // When updating the non-blocking mode we always perform the ioctl syscall,
1738
- // even if the flags would otherwise indicate that the socket is already in
1739
- // the correct state. This ensures that the underlying socket is put into
1740
- // the state that has been requested by the user. If the ioctl syscall was
1741
- // successful then we need to update the flags to match.
1742
- if (cmd == static_cast<int>(FIONBIO))
1743
- {
1744
- if (*arg)
1745
- {
1746
- state |= user_set_non_blocking;
1747
- }
1748
- else
1749
- {
1750
- // Clearing the non-blocking mode always overrides any internally-set
1751
- // non-blocking flag. Any subsequent asynchronous operations will need
1752
- // to re-enable non-blocking I/O.
1753
- state &= ~(user_set_non_blocking | internal_non_blocking);
1754
- }
1755
- }
1756
- }
1757
-
1758
- return result;
1759
- }
1760
-
1761
- int select(int nfds, fd_set* readfds, fd_set* writefds,
1762
- fd_set* exceptfds, timeval* timeout, asio::error_code& ec)
1763
- {
1764
- clear_last_error();
1765
- #if defined(__EMSCRIPTEN__)
1766
- exceptfds = 0;
1767
- #endif // defined(__EMSCRIPTEN__)
1768
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1769
- if (!readfds && !writefds && !exceptfds && timeout)
1770
- {
1771
- DWORD milliseconds = timeout->tv_sec * 1000 + timeout->tv_usec / 1000;
1772
- if (milliseconds == 0)
1773
- milliseconds = 1; // Force context switch.
1774
- ::Sleep(milliseconds);
1775
- ec = asio::error_code();
1776
- return 0;
1777
- }
1778
-
1779
- // The select() call allows timeout values measured in microseconds, but the
1780
- // system clock (as wrapped by boost::posix_time::microsec_clock) typically
1781
- // has a resolution of 10 milliseconds. This can lead to a spinning select
1782
- // reactor, meaning increased CPU usage, when waiting for the earliest
1783
- // scheduled timeout if it's less than 10 milliseconds away. To avoid a tight
1784
- // spin we'll use a minimum timeout of 1 millisecond.
1785
- if (timeout && timeout->tv_sec == 0
1786
- && timeout->tv_usec > 0 && timeout->tv_usec < 1000)
1787
- timeout->tv_usec = 1000;
1788
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
1789
-
1790
- #if defined(__hpux) && defined(__SELECT)
1791
- timespec ts;
1792
- ts.tv_sec = timeout ? timeout->tv_sec : 0;
1793
- ts.tv_nsec = timeout ? timeout->tv_usec * 1000 : 0;
1794
- return error_wrapper(::pselect(nfds, readfds,
1795
- writefds, exceptfds, timeout ? &ts : 0, 0), ec);
1796
- #else
1797
- int result = error_wrapper(::select(nfds, readfds,
1798
- writefds, exceptfds, timeout), ec);
1799
- if (result >= 0)
1800
- ec = asio::error_code();
1801
- return result;
1802
- #endif
1803
- }
1804
-
1805
- int poll_read(socket_type s, state_type state,
1806
- int msec, asio::error_code& ec)
1807
- {
1808
- if (s == invalid_socket)
1809
- {
1810
- ec = asio::error::bad_descriptor;
1811
- return socket_error_retval;
1812
- }
1813
-
1814
- #if defined(ASIO_WINDOWS) \
1815
- || defined(__CYGWIN__) \
1816
- || defined(__SYMBIAN32__)
1817
- fd_set fds;
1818
- FD_ZERO(&fds);
1819
- FD_SET(s, &fds);
1820
- timeval timeout_obj;
1821
- timeval* timeout;
1822
- if (state & user_set_non_blocking)
1823
- {
1824
- timeout_obj.tv_sec = 0;
1825
- timeout_obj.tv_usec = 0;
1826
- timeout = &timeout_obj;
1827
- }
1828
- else if (msec >= 0)
1829
- {
1830
- timeout_obj.tv_sec = msec / 1000;
1831
- timeout_obj.tv_usec = (msec % 1000) * 1000;
1832
- timeout = &timeout_obj;
1833
- }
1834
- else
1835
- timeout = 0;
1836
- clear_last_error();
1837
- int result = error_wrapper(::select(s + 1, &fds, 0, 0, timeout), ec);
1838
- #else // defined(ASIO_WINDOWS)
1839
- // || defined(__CYGWIN__)
1840
- // || defined(__SYMBIAN32__)
1841
- pollfd fds;
1842
- fds.fd = s;
1843
- fds.events = POLLIN;
1844
- fds.revents = 0;
1845
- int timeout = (state & user_set_non_blocking) ? 0 : msec;
1846
- clear_last_error();
1847
- int result = error_wrapper(::poll(&fds, 1, timeout), ec);
1848
- #endif // defined(ASIO_WINDOWS)
1849
- // || defined(__CYGWIN__)
1850
- // || defined(__SYMBIAN32__)
1851
- if (result == 0)
1852
- ec = (state & user_set_non_blocking)
1853
- ? asio::error::would_block : asio::error_code();
1854
- else if (result > 0)
1855
- ec = asio::error_code();
1856
- return result;
1857
- }
1858
-
1859
- int poll_write(socket_type s, state_type state,
1860
- int msec, asio::error_code& ec)
1861
- {
1862
- if (s == invalid_socket)
1863
- {
1864
- ec = asio::error::bad_descriptor;
1865
- return socket_error_retval;
1866
- }
1867
-
1868
- #if defined(ASIO_WINDOWS) \
1869
- || defined(__CYGWIN__) \
1870
- || defined(__SYMBIAN32__)
1871
- fd_set fds;
1872
- FD_ZERO(&fds);
1873
- FD_SET(s, &fds);
1874
- timeval timeout_obj;
1875
- timeval* timeout;
1876
- if (state & user_set_non_blocking)
1877
- {
1878
- timeout_obj.tv_sec = 0;
1879
- timeout_obj.tv_usec = 0;
1880
- timeout = &timeout_obj;
1881
- }
1882
- else if (msec >= 0)
1883
- {
1884
- timeout_obj.tv_sec = msec / 1000;
1885
- timeout_obj.tv_usec = (msec % 1000) * 1000;
1886
- timeout = &timeout_obj;
1887
- }
1888
- else
1889
- timeout = 0;
1890
- clear_last_error();
1891
- int result = error_wrapper(::select(s + 1, 0, &fds, 0, timeout), ec);
1892
- #else // defined(ASIO_WINDOWS)
1893
- // || defined(__CYGWIN__)
1894
- // || defined(__SYMBIAN32__)
1895
- pollfd fds;
1896
- fds.fd = s;
1897
- fds.events = POLLOUT;
1898
- fds.revents = 0;
1899
- int timeout = (state & user_set_non_blocking) ? 0 : msec;
1900
- clear_last_error();
1901
- int result = error_wrapper(::poll(&fds, 1, timeout), ec);
1902
- #endif // defined(ASIO_WINDOWS)
1903
- // || defined(__CYGWIN__)
1904
- // || defined(__SYMBIAN32__)
1905
- if (result == 0)
1906
- ec = (state & user_set_non_blocking)
1907
- ? asio::error::would_block : asio::error_code();
1908
- else if (result > 0)
1909
- ec = asio::error_code();
1910
- return result;
1911
- }
1912
-
1913
- int poll_error(socket_type s, state_type state,
1914
- int msec, asio::error_code& ec)
1915
- {
1916
- if (s == invalid_socket)
1917
- {
1918
- ec = asio::error::bad_descriptor;
1919
- return socket_error_retval;
1920
- }
1921
-
1922
- #if defined(ASIO_WINDOWS) \
1923
- || defined(__CYGWIN__) \
1924
- || defined(__SYMBIAN32__)
1925
- fd_set fds;
1926
- FD_ZERO(&fds);
1927
- FD_SET(s, &fds);
1928
- timeval timeout_obj;
1929
- timeval* timeout;
1930
- if (state & user_set_non_blocking)
1931
- {
1932
- timeout_obj.tv_sec = 0;
1933
- timeout_obj.tv_usec = 0;
1934
- timeout = &timeout_obj;
1935
- }
1936
- else if (msec >= 0)
1937
- {
1938
- timeout_obj.tv_sec = msec / 1000;
1939
- timeout_obj.tv_usec = (msec % 1000) * 1000;
1940
- timeout = &timeout_obj;
1941
- }
1942
- else
1943
- timeout = 0;
1944
- clear_last_error();
1945
- int result = error_wrapper(::select(s + 1, 0, 0, &fds, timeout), ec);
1946
- #else // defined(ASIO_WINDOWS)
1947
- // || defined(__CYGWIN__)
1948
- // || defined(__SYMBIAN32__)
1949
- pollfd fds;
1950
- fds.fd = s;
1951
- fds.events = POLLPRI | POLLERR | POLLHUP;
1952
- fds.revents = 0;
1953
- int timeout = (state & user_set_non_blocking) ? 0 : msec;
1954
- clear_last_error();
1955
- int result = error_wrapper(::poll(&fds, 1, timeout), ec);
1956
- #endif // defined(ASIO_WINDOWS)
1957
- // || defined(__CYGWIN__)
1958
- // || defined(__SYMBIAN32__)
1959
- if (result == 0)
1960
- ec = (state & user_set_non_blocking)
1961
- ? asio::error::would_block : asio::error_code();
1962
- else if (result > 0)
1963
- ec = asio::error_code();
1964
- return result;
1965
- }
1966
-
1967
- int poll_connect(socket_type s, int msec, asio::error_code& ec)
1968
- {
1969
- if (s == invalid_socket)
1970
- {
1971
- ec = asio::error::bad_descriptor;
1972
- return socket_error_retval;
1973
- }
1974
-
1975
- #if defined(ASIO_WINDOWS) \
1976
- || defined(__CYGWIN__) \
1977
- || defined(__SYMBIAN32__)
1978
- fd_set write_fds;
1979
- FD_ZERO(&write_fds);
1980
- FD_SET(s, &write_fds);
1981
- fd_set except_fds;
1982
- FD_ZERO(&except_fds);
1983
- FD_SET(s, &except_fds);
1984
- timeval timeout_obj;
1985
- timeval* timeout;
1986
- if (msec >= 0)
1987
- {
1988
- timeout_obj.tv_sec = msec / 1000;
1989
- timeout_obj.tv_usec = (msec % 1000) * 1000;
1990
- timeout = &timeout_obj;
1991
- }
1992
- else
1993
- timeout = 0;
1994
- clear_last_error();
1995
- int result = error_wrapper(::select(
1996
- s + 1, 0, &write_fds, &except_fds, timeout), ec);
1997
- if (result >= 0)
1998
- ec = asio::error_code();
1999
- return result;
2000
- #else // defined(ASIO_WINDOWS)
2001
- // || defined(__CYGWIN__)
2002
- // || defined(__SYMBIAN32__)
2003
- pollfd fds;
2004
- fds.fd = s;
2005
- fds.events = POLLOUT;
2006
- fds.revents = 0;
2007
- clear_last_error();
2008
- int result = error_wrapper(::poll(&fds, 1, msec), ec);
2009
- if (result >= 0)
2010
- ec = asio::error_code();
2011
- return result;
2012
- #endif // defined(ASIO_WINDOWS)
2013
- // || defined(__CYGWIN__)
2014
- // || defined(__SYMBIAN32__)
2015
- }
2016
-
2017
- #endif // !defined(ASIO_WINDOWS_RUNTIME)
2018
-
2019
- const char* inet_ntop(int af, const void* src, char* dest, size_t length,
2020
- unsigned long scope_id, asio::error_code& ec)
2021
- {
2022
- clear_last_error();
2023
- #if defined(ASIO_WINDOWS_RUNTIME)
2024
- using namespace std; // For sprintf.
2025
- const unsigned char* bytes = static_cast<const unsigned char*>(src);
2026
- if (af == ASIO_OS_DEF(AF_INET))
2027
- {
2028
- sprintf_s(dest, length, "%u.%u.%u.%u",
2029
- bytes[0], bytes[1], bytes[2], bytes[3]);
2030
- return dest;
2031
- }
2032
- else if (af == ASIO_OS_DEF(AF_INET6))
2033
- {
2034
- size_t n = 0, b = 0, z = 0;
2035
- while (n < length && b < 16)
2036
- {
2037
- if (bytes[b] == 0 && bytes[b + 1] == 0 && z == 0)
2038
- {
2039
- do b += 2; while (b < 16 && bytes[b] == 0 && bytes[b + 1] == 0);
2040
- n += sprintf_s(dest + n, length - n, ":%s", b < 16 ? "" : ":"), ++z;
2041
- }
2042
- else
2043
- {
2044
- n += sprintf_s(dest + n, length - n, "%s%x", b ? ":" : "",
2045
- (static_cast<u_long_type>(bytes[b]) << 8) | bytes[b + 1]);
2046
- b += 2;
2047
- }
2048
- }
2049
- if (scope_id)
2050
- n += sprintf_s(dest + n, length - n, "%%%lu", scope_id);
2051
- return dest;
2052
- }
2053
- else
2054
- {
2055
- ec = asio::error::address_family_not_supported;
2056
- return 0;
2057
- }
2058
- #elif defined(ASIO_WINDOWS) || defined(__CYGWIN__)
2059
- using namespace std; // For memcpy.
2060
-
2061
- if (af != ASIO_OS_DEF(AF_INET) && af != ASIO_OS_DEF(AF_INET6))
2062
- {
2063
- ec = asio::error::address_family_not_supported;
2064
- return 0;
2065
- }
2066
-
2067
- union
2068
- {
2069
- socket_addr_type base;
2070
- sockaddr_storage_type storage;
2071
- sockaddr_in4_type v4;
2072
- sockaddr_in6_type v6;
2073
- } address;
2074
- DWORD address_length;
2075
- if (af == ASIO_OS_DEF(AF_INET))
2076
- {
2077
- address_length = sizeof(sockaddr_in4_type);
2078
- address.v4.sin_family = ASIO_OS_DEF(AF_INET);
2079
- address.v4.sin_port = 0;
2080
- memcpy(&address.v4.sin_addr, src, sizeof(in4_addr_type));
2081
- }
2082
- else // AF_INET6
2083
- {
2084
- address_length = sizeof(sockaddr_in6_type);
2085
- address.v6.sin6_family = ASIO_OS_DEF(AF_INET6);
2086
- address.v6.sin6_port = 0;
2087
- address.v6.sin6_flowinfo = 0;
2088
- address.v6.sin6_scope_id = scope_id;
2089
- memcpy(&address.v6.sin6_addr, src, sizeof(in6_addr_type));
2090
- }
2091
-
2092
- DWORD string_length = static_cast<DWORD>(length);
2093
- #if defined(BOOST_NO_ANSI_APIS) || (defined(_MSC_VER) && (_MSC_VER >= 1800))
2094
- LPWSTR string_buffer = (LPWSTR)_alloca(length * sizeof(WCHAR));
2095
- int result = error_wrapper(::WSAAddressToStringW(&address.base,
2096
- address_length, 0, string_buffer, &string_length), ec);
2097
- ::WideCharToMultiByte(CP_ACP, 0, string_buffer, -1,
2098
- dest, static_cast<int>(length), 0, 0);
2099
- #else
2100
- int result = error_wrapper(::WSAAddressToStringA(
2101
- &address.base, address_length, 0, dest, &string_length), ec);
2102
- #endif
2103
-
2104
- // Windows may set error code on success.
2105
- if (result != socket_error_retval)
2106
- ec = asio::error_code();
2107
-
2108
- // Windows may not set an error code on failure.
2109
- else if (result == socket_error_retval && !ec)
2110
- ec = asio::error::invalid_argument;
2111
-
2112
- return result == socket_error_retval ? 0 : dest;
2113
- #else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
2114
- const char* result = error_wrapper(::inet_ntop(
2115
- af, src, dest, static_cast<int>(length)), ec);
2116
- if (result == 0 && !ec)
2117
- ec = asio::error::invalid_argument;
2118
- if (result != 0 && af == ASIO_OS_DEF(AF_INET6) && scope_id != 0)
2119
- {
2120
- using namespace std; // For strcat and sprintf.
2121
- char if_name[(IF_NAMESIZE > 21 ? IF_NAMESIZE : 21) + 1] = "%";
2122
- const in6_addr_type* ipv6_address = static_cast<const in6_addr_type*>(src);
2123
- bool is_link_local = ((ipv6_address->s6_addr[0] == 0xfe)
2124
- && ((ipv6_address->s6_addr[1] & 0xc0) == 0x80));
2125
- bool is_multicast_link_local = ((ipv6_address->s6_addr[0] == 0xff)
2126
- && ((ipv6_address->s6_addr[1] & 0x0f) == 0x02));
2127
- if ((!is_link_local && !is_multicast_link_local)
2128
- || if_indextoname(static_cast<unsigned>(scope_id), if_name + 1) == 0)
2129
- sprintf(if_name + 1, "%lu", scope_id);
2130
- strcat(dest, if_name);
2131
- }
2132
- return result;
2133
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
2134
- }
2135
-
2136
- int inet_pton(int af, const char* src, void* dest,
2137
- unsigned long* scope_id, asio::error_code& ec)
2138
- {
2139
- clear_last_error();
2140
- #if defined(ASIO_WINDOWS_RUNTIME)
2141
- using namespace std; // For sscanf.
2142
- unsigned char* bytes = static_cast<unsigned char*>(dest);
2143
- if (af == ASIO_OS_DEF(AF_INET))
2144
- {
2145
- unsigned int b0, b1, b2, b3;
2146
- if (sscanf_s(src, "%u.%u.%u.%u", &b0, &b1, &b2, &b3) != 4)
2147
- {
2148
- ec = asio::error::invalid_argument;
2149
- return -1;
2150
- }
2151
- if (b0 > 255 || b1 > 255 || b2 > 255 || b3 > 255)
2152
- {
2153
- ec = asio::error::invalid_argument;
2154
- return -1;
2155
- }
2156
- bytes[0] = static_cast<unsigned char>(b0);
2157
- bytes[1] = static_cast<unsigned char>(b1);
2158
- bytes[2] = static_cast<unsigned char>(b2);
2159
- bytes[3] = static_cast<unsigned char>(b3);
2160
- ec = asio::error_code();
2161
- return 1;
2162
- }
2163
- else if (af == ASIO_OS_DEF(AF_INET6))
2164
- {
2165
- unsigned char* bytes = static_cast<unsigned char*>(dest);
2166
- std::memset(bytes, 0, 16);
2167
- unsigned char back_bytes[16] = { 0 };
2168
- int num_front_bytes = 0, num_back_bytes = 0;
2169
- const char* p = src;
2170
-
2171
- enum { fword, fcolon, bword, scope, done } state = fword;
2172
- unsigned long current_word = 0;
2173
- while (state != done)
2174
- {
2175
- if (current_word > 0xFFFF)
2176
- {
2177
- ec = asio::error::invalid_argument;
2178
- return -1;
2179
- }
2180
-
2181
- switch (state)
2182
- {
2183
- case fword:
2184
- if (*p >= '0' && *p <= '9')
2185
- current_word = current_word * 16 + *p++ - '0';
2186
- else if (*p >= 'a' && *p <= 'f')
2187
- current_word = current_word * 16 + *p++ - 'a' + 10;
2188
- else if (*p >= 'A' && *p <= 'F')
2189
- current_word = current_word * 16 + *p++ - 'A' + 10;
2190
- else
2191
- {
2192
- if (num_front_bytes == 16)
2193
- {
2194
- ec = asio::error::invalid_argument;
2195
- return -1;
2196
- }
2197
-
2198
- bytes[num_front_bytes++] = (current_word >> 8) & 0xFF;
2199
- bytes[num_front_bytes++] = current_word & 0xFF;
2200
- current_word = 0;
2201
-
2202
- if (*p == ':')
2203
- state = fcolon, ++p;
2204
- else if (*p == '%')
2205
- state = scope, ++p;
2206
- else if (*p == 0)
2207
- state = done;
2208
- else
2209
- {
2210
- ec = asio::error::invalid_argument;
2211
- return -1;
2212
- }
2213
- }
2214
- break;
2215
-
2216
- case fcolon:
2217
- if (*p == ':')
2218
- state = bword, ++p;
2219
- else
2220
- state = fword;
2221
- break;
2222
-
2223
- case bword:
2224
- if (*p >= '0' && *p <= '9')
2225
- current_word = current_word * 16 + *p++ - '0';
2226
- else if (*p >= 'a' && *p <= 'f')
2227
- current_word = current_word * 16 + *p++ - 'a' + 10;
2228
- else if (*p >= 'A' && *p <= 'F')
2229
- current_word = current_word * 16 + *p++ - 'A' + 10;
2230
- else
2231
- {
2232
- if (num_front_bytes + num_back_bytes == 16)
2233
- {
2234
- ec = asio::error::invalid_argument;
2235
- return -1;
2236
- }
2237
-
2238
- back_bytes[num_back_bytes++] = (current_word >> 8) & 0xFF;
2239
- back_bytes[num_back_bytes++] = current_word & 0xFF;
2240
- current_word = 0;
2241
-
2242
- if (*p == ':')
2243
- state = bword, ++p;
2244
- else if (*p == '%')
2245
- state = scope, ++p;
2246
- else if (*p == 0)
2247
- state = done;
2248
- else
2249
- {
2250
- ec = asio::error::invalid_argument;
2251
- return -1;
2252
- }
2253
- }
2254
- break;
2255
-
2256
- case scope:
2257
- if (*p >= '0' && *p <= '9')
2258
- current_word = current_word * 10 + *p++ - '0';
2259
- else if (*p == 0)
2260
- *scope_id = current_word, state = done;
2261
- else
2262
- {
2263
- ec = asio::error::invalid_argument;
2264
- return -1;
2265
- }
2266
- break;
2267
-
2268
- default:
2269
- break;
2270
- }
2271
- }
2272
-
2273
- for (int i = 0; i < num_back_bytes; ++i)
2274
- bytes[16 - num_back_bytes + i] = back_bytes[i];
2275
-
2276
- ec = asio::error_code();
2277
- return 1;
2278
- }
2279
- else
2280
- {
2281
- ec = asio::error::address_family_not_supported;
2282
- return -1;
2283
- }
2284
- #elif defined(ASIO_WINDOWS) || defined(__CYGWIN__)
2285
- using namespace std; // For memcpy and strcmp.
2286
-
2287
- if (af != ASIO_OS_DEF(AF_INET) && af != ASIO_OS_DEF(AF_INET6))
2288
- {
2289
- ec = asio::error::address_family_not_supported;
2290
- return -1;
2291
- }
2292
-
2293
- union
2294
- {
2295
- socket_addr_type base;
2296
- sockaddr_storage_type storage;
2297
- sockaddr_in4_type v4;
2298
- sockaddr_in6_type v6;
2299
- } address;
2300
- int address_length = sizeof(sockaddr_storage_type);
2301
- #if defined(BOOST_NO_ANSI_APIS) || (defined(_MSC_VER) && (_MSC_VER >= 1800))
2302
- int num_wide_chars = static_cast<int>(strlen(src)) + 1;
2303
- LPWSTR wide_buffer = (LPWSTR)_alloca(num_wide_chars * sizeof(WCHAR));
2304
- ::MultiByteToWideChar(CP_ACP, 0, src, -1, wide_buffer, num_wide_chars);
2305
- int result = error_wrapper(::WSAStringToAddressW(
2306
- wide_buffer, af, 0, &address.base, &address_length), ec);
2307
- #else
2308
- int result = error_wrapper(::WSAStringToAddressA(
2309
- const_cast<char*>(src), af, 0, &address.base, &address_length), ec);
2310
- #endif
2311
-
2312
- if (af == ASIO_OS_DEF(AF_INET))
2313
- {
2314
- if (result != socket_error_retval)
2315
- {
2316
- memcpy(dest, &address.v4.sin_addr, sizeof(in4_addr_type));
2317
- ec = asio::error_code();
2318
- }
2319
- else if (strcmp(src, "255.255.255.255") == 0)
2320
- {
2321
- static_cast<in4_addr_type*>(dest)->s_addr = INADDR_NONE;
2322
- ec = asio::error_code();
2323
- }
2324
- }
2325
- else // AF_INET6
2326
- {
2327
- if (result != socket_error_retval)
2328
- {
2329
- memcpy(dest, &address.v6.sin6_addr, sizeof(in6_addr_type));
2330
- if (scope_id)
2331
- *scope_id = address.v6.sin6_scope_id;
2332
- ec = asio::error_code();
2333
- }
2334
- }
2335
-
2336
- // Windows may not set an error code on failure.
2337
- if (result == socket_error_retval && !ec)
2338
- ec = asio::error::invalid_argument;
2339
-
2340
- if (result != socket_error_retval)
2341
- ec = asio::error_code();
2342
-
2343
- return result == socket_error_retval ? -1 : 1;
2344
- #else // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
2345
- using namespace std; // For strchr, memcpy and atoi.
2346
-
2347
- // On some platforms, inet_pton fails if an address string contains a scope
2348
- // id. Detect and remove the scope id before passing the string to inet_pton.
2349
- const bool is_v6 = (af == ASIO_OS_DEF(AF_INET6));
2350
- const char* if_name = is_v6 ? strchr(src, '%') : 0;
2351
- char src_buf[max_addr_v6_str_len + 1];
2352
- const char* src_ptr = src;
2353
- if (if_name != 0)
2354
- {
2355
- if (if_name - src > max_addr_v6_str_len)
2356
- {
2357
- ec = asio::error::invalid_argument;
2358
- return 0;
2359
- }
2360
- memcpy(src_buf, src, if_name - src);
2361
- src_buf[if_name - src] = 0;
2362
- src_ptr = src_buf;
2363
- }
2364
-
2365
- int result = error_wrapper(::inet_pton(af, src_ptr, dest), ec);
2366
- if (result <= 0 && !ec)
2367
- ec = asio::error::invalid_argument;
2368
- if (result > 0 && is_v6 && scope_id)
2369
- {
2370
- using namespace std; // For strchr and atoi.
2371
- *scope_id = 0;
2372
- if (if_name != 0)
2373
- {
2374
- in6_addr_type* ipv6_address = static_cast<in6_addr_type*>(dest);
2375
- bool is_link_local = ((ipv6_address->s6_addr[0] == 0xfe)
2376
- && ((ipv6_address->s6_addr[1] & 0xc0) == 0x80));
2377
- bool is_multicast_link_local = ((ipv6_address->s6_addr[0] == 0xff)
2378
- && ((ipv6_address->s6_addr[1] & 0x0f) == 0x02));
2379
- if (is_link_local || is_multicast_link_local)
2380
- *scope_id = if_nametoindex(if_name + 1);
2381
- if (*scope_id == 0)
2382
- *scope_id = atoi(if_name + 1);
2383
- }
2384
- }
2385
- return result;
2386
- #endif // defined(ASIO_WINDOWS) || defined(__CYGWIN__)
2387
- }
2388
-
2389
- int gethostname(char* name, int namelen, asio::error_code& ec)
2390
- {
2391
- clear_last_error();
2392
- #if defined(ASIO_WINDOWS_RUNTIME)
2393
- try
2394
- {
2395
- using namespace Windows::Foundation::Collections;
2396
- using namespace Windows::Networking;
2397
- using namespace Windows::Networking::Connectivity;
2398
- IVectorView<HostName^>^ hostnames = NetworkInformation::GetHostNames();
2399
- for (unsigned i = 0; i < hostnames->Size; ++i)
2400
- {
2401
- HostName^ hostname = hostnames->GetAt(i);
2402
- if (hostname->Type == HostNameType::DomainName)
2403
- {
2404
- std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
2405
- std::string raw_name = converter.to_bytes(hostname->RawName->Data());
2406
- if (namelen > 0 && raw_name.size() < static_cast<std::size_t>(namelen))
2407
- {
2408
- strcpy_s(name, namelen, raw_name.c_str());
2409
- return 0;
2410
- }
2411
- }
2412
- }
2413
- return -1;
2414
- }
2415
- catch (Platform::Exception^ e)
2416
- {
2417
- ec = asio::error_code(e->HResult,
2418
- asio::system_category());
2419
- return -1;
2420
- }
2421
- #else // defined(ASIO_WINDOWS_RUNTIME)
2422
- int result = error_wrapper(::gethostname(name, namelen), ec);
2423
- # if defined(ASIO_WINDOWS)
2424
- if (result == 0)
2425
- ec = asio::error_code();
2426
- # endif // defined(ASIO_WINDOWS)
2427
- return result;
2428
- #endif // defined(ASIO_WINDOWS_RUNTIME)
2429
- }
2430
-
2431
- #if !defined(ASIO_WINDOWS_RUNTIME)
2432
-
2433
- #if !defined(ASIO_HAS_GETADDRINFO)
2434
-
2435
- // The following functions are only needed for emulation of getaddrinfo and
2436
- // getnameinfo.
2437
-
2438
- inline asio::error_code translate_netdb_error(int error)
2439
- {
2440
- switch (error)
2441
- {
2442
- case 0:
2443
- return asio::error_code();
2444
- case HOST_NOT_FOUND:
2445
- return asio::error::host_not_found;
2446
- case TRY_AGAIN:
2447
- return asio::error::host_not_found_try_again;
2448
- case NO_RECOVERY:
2449
- return asio::error::no_recovery;
2450
- case NO_DATA:
2451
- return asio::error::no_data;
2452
- default:
2453
- ASIO_ASSERT(false);
2454
- return asio::error::invalid_argument;
2455
- }
2456
- }
2457
-
2458
- inline hostent* gethostbyaddr(const char* addr, int length, int af,
2459
- hostent* result, char* buffer, int buflength, asio::error_code& ec)
2460
- {
2461
- clear_last_error();
2462
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
2463
- (void)(buffer);
2464
- (void)(buflength);
2465
- hostent* retval = error_wrapper(::gethostbyaddr(addr, length, af), ec);
2466
- if (!retval)
2467
- return 0;
2468
- ec = asio::error_code();
2469
- *result = *retval;
2470
- return retval;
2471
- #elif defined(__sun) || defined(__QNX__)
2472
- int error = 0;
2473
- hostent* retval = error_wrapper(::gethostbyaddr_r(addr, length, af, result,
2474
- buffer, buflength, &error), ec);
2475
- if (error)
2476
- ec = translate_netdb_error(error);
2477
- return retval;
2478
- #elif defined(__MACH__) && defined(__APPLE__)
2479
- (void)(buffer);
2480
- (void)(buflength);
2481
- int error = 0;
2482
- hostent* retval = error_wrapper(::getipnodebyaddr(
2483
- addr, length, af, &error), ec);
2484
- if (error)
2485
- ec = translate_netdb_error(error);
2486
- if (!retval)
2487
- return 0;
2488
- *result = *retval;
2489
- return retval;
2490
- #else
2491
- hostent* retval = 0;
2492
- int error = 0;
2493
- error_wrapper(::gethostbyaddr_r(addr, length, af, result, buffer,
2494
- buflength, &retval, &error), ec);
2495
- if (error)
2496
- ec = translate_netdb_error(error);
2497
- return retval;
2498
- #endif
2499
- }
2500
-
2501
- inline hostent* gethostbyname(const char* name, int af, struct hostent* result,
2502
- char* buffer, int buflength, int ai_flags, asio::error_code& ec)
2503
- {
2504
- clear_last_error();
2505
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
2506
- (void)(buffer);
2507
- (void)(buflength);
2508
- (void)(ai_flags);
2509
- if (af != ASIO_OS_DEF(AF_INET))
2510
- {
2511
- ec = asio::error::address_family_not_supported;
2512
- return 0;
2513
- }
2514
- hostent* retval = error_wrapper(::gethostbyname(name), ec);
2515
- if (!retval)
2516
- return 0;
2517
- ec = asio::error_code();
2518
- *result = *retval;
2519
- return result;
2520
- #elif defined(__sun) || defined(__QNX__)
2521
- (void)(ai_flags);
2522
- if (af != ASIO_OS_DEF(AF_INET))
2523
- {
2524
- ec = asio::error::address_family_not_supported;
2525
- return 0;
2526
- }
2527
- int error = 0;
2528
- hostent* retval = error_wrapper(::gethostbyname_r(name, result, buffer,
2529
- buflength, &error), ec);
2530
- if (error)
2531
- ec = translate_netdb_error(error);
2532
- return retval;
2533
- #elif defined(__MACH__) && defined(__APPLE__)
2534
- (void)(buffer);
2535
- (void)(buflength);
2536
- int error = 0;
2537
- hostent* retval = error_wrapper(::getipnodebyname(
2538
- name, af, ai_flags, &error), ec);
2539
- if (error)
2540
- ec = translate_netdb_error(error);
2541
- if (!retval)
2542
- return 0;
2543
- *result = *retval;
2544
- return retval;
2545
- #else
2546
- (void)(ai_flags);
2547
- if (af != ASIO_OS_DEF(AF_INET))
2548
- {
2549
- ec = asio::error::address_family_not_supported;
2550
- return 0;
2551
- }
2552
- hostent* retval = 0;
2553
- int error = 0;
2554
- error_wrapper(::gethostbyname_r(name, result,
2555
- buffer, buflength, &retval, &error), ec);
2556
- if (error)
2557
- ec = translate_netdb_error(error);
2558
- return retval;
2559
- #endif
2560
- }
2561
-
2562
- inline void freehostent(hostent* h)
2563
- {
2564
- #if defined(__MACH__) && defined(__APPLE__)
2565
- if (h)
2566
- ::freehostent(h);
2567
- #else
2568
- (void)(h);
2569
- #endif
2570
- }
2571
-
2572
- // Emulation of getaddrinfo based on implementation in:
2573
- // Stevens, W. R., UNIX Network Programming Vol. 1, 2nd Ed., Prentice-Hall 1998.
2574
-
2575
- struct gai_search
2576
- {
2577
- const char* host;
2578
- int family;
2579
- };
2580
-
2581
- inline int gai_nsearch(const char* host,
2582
- const addrinfo_type* hints, gai_search (&search)[2])
2583
- {
2584
- int search_count = 0;
2585
- if (host == 0 || host[0] == '\0')
2586
- {
2587
- if (hints->ai_flags & AI_PASSIVE)
2588
- {
2589
- // No host and AI_PASSIVE implies wildcard bind.
2590
- switch (hints->ai_family)
2591
- {
2592
- case ASIO_OS_DEF(AF_INET):
2593
- search[search_count].host = "0.0.0.0";
2594
- search[search_count].family = ASIO_OS_DEF(AF_INET);
2595
- ++search_count;
2596
- break;
2597
- case ASIO_OS_DEF(AF_INET6):
2598
- search[search_count].host = "0::0";
2599
- search[search_count].family = ASIO_OS_DEF(AF_INET6);
2600
- ++search_count;
2601
- break;
2602
- case ASIO_OS_DEF(AF_UNSPEC):
2603
- search[search_count].host = "0::0";
2604
- search[search_count].family = ASIO_OS_DEF(AF_INET6);
2605
- ++search_count;
2606
- search[search_count].host = "0.0.0.0";
2607
- search[search_count].family = ASIO_OS_DEF(AF_INET);
2608
- ++search_count;
2609
- break;
2610
- default:
2611
- break;
2612
- }
2613
- }
2614
- else
2615
- {
2616
- // No host and not AI_PASSIVE means connect to local host.
2617
- switch (hints->ai_family)
2618
- {
2619
- case ASIO_OS_DEF(AF_INET):
2620
- search[search_count].host = "localhost";
2621
- search[search_count].family = ASIO_OS_DEF(AF_INET);
2622
- ++search_count;
2623
- break;
2624
- case ASIO_OS_DEF(AF_INET6):
2625
- search[search_count].host = "localhost";
2626
- search[search_count].family = ASIO_OS_DEF(AF_INET6);
2627
- ++search_count;
2628
- break;
2629
- case ASIO_OS_DEF(AF_UNSPEC):
2630
- search[search_count].host = "localhost";
2631
- search[search_count].family = ASIO_OS_DEF(AF_INET6);
2632
- ++search_count;
2633
- search[search_count].host = "localhost";
2634
- search[search_count].family = ASIO_OS_DEF(AF_INET);
2635
- ++search_count;
2636
- break;
2637
- default:
2638
- break;
2639
- }
2640
- }
2641
- }
2642
- else
2643
- {
2644
- // Host is specified.
2645
- switch (hints->ai_family)
2646
- {
2647
- case ASIO_OS_DEF(AF_INET):
2648
- search[search_count].host = host;
2649
- search[search_count].family = ASIO_OS_DEF(AF_INET);
2650
- ++search_count;
2651
- break;
2652
- case ASIO_OS_DEF(AF_INET6):
2653
- search[search_count].host = host;
2654
- search[search_count].family = ASIO_OS_DEF(AF_INET6);
2655
- ++search_count;
2656
- break;
2657
- case ASIO_OS_DEF(AF_UNSPEC):
2658
- search[search_count].host = host;
2659
- search[search_count].family = ASIO_OS_DEF(AF_INET6);
2660
- ++search_count;
2661
- search[search_count].host = host;
2662
- search[search_count].family = ASIO_OS_DEF(AF_INET);
2663
- ++search_count;
2664
- break;
2665
- default:
2666
- break;
2667
- }
2668
- }
2669
- return search_count;
2670
- }
2671
-
2672
- template <typename T>
2673
- inline T* gai_alloc(std::size_t size = sizeof(T))
2674
- {
2675
- using namespace std;
2676
- T* p = static_cast<T*>(::operator new(size, std::nothrow));
2677
- if (p)
2678
- memset(p, 0, size);
2679
- return p;
2680
- }
2681
-
2682
- inline void gai_free(void* p)
2683
- {
2684
- ::operator delete(p);
2685
- }
2686
-
2687
- inline void gai_strcpy(char* target, const char* source, std::size_t max_size)
2688
- {
2689
- using namespace std;
2690
- #if defined(ASIO_HAS_SECURE_RTL)
2691
- strcpy_s(target, max_size, source);
2692
- #else // defined(ASIO_HAS_SECURE_RTL)
2693
- *target = 0;
2694
- if (max_size > 0)
2695
- strncat(target, source, max_size - 1);
2696
- #endif // defined(ASIO_HAS_SECURE_RTL)
2697
- }
2698
-
2699
- enum { gai_clone_flag = 1 << 30 };
2700
-
2701
- inline int gai_aistruct(addrinfo_type*** next, const addrinfo_type* hints,
2702
- const void* addr, int family)
2703
- {
2704
- using namespace std;
2705
-
2706
- addrinfo_type* ai = gai_alloc<addrinfo_type>();
2707
- if (ai == 0)
2708
- return EAI_MEMORY;
2709
-
2710
- ai->ai_next = 0;
2711
- **next = ai;
2712
- *next = &ai->ai_next;
2713
-
2714
- ai->ai_canonname = 0;
2715
- ai->ai_socktype = hints->ai_socktype;
2716
- if (ai->ai_socktype == 0)
2717
- ai->ai_flags |= gai_clone_flag;
2718
- ai->ai_protocol = hints->ai_protocol;
2719
- ai->ai_family = family;
2720
-
2721
- switch (ai->ai_family)
2722
- {
2723
- case ASIO_OS_DEF(AF_INET):
2724
- {
2725
- sockaddr_in4_type* sinptr = gai_alloc<sockaddr_in4_type>();
2726
- if (sinptr == 0)
2727
- return EAI_MEMORY;
2728
- sinptr->sin_family = ASIO_OS_DEF(AF_INET);
2729
- memcpy(&sinptr->sin_addr, addr, sizeof(in4_addr_type));
2730
- ai->ai_addr = reinterpret_cast<sockaddr*>(sinptr);
2731
- ai->ai_addrlen = sizeof(sockaddr_in4_type);
2732
- break;
2733
- }
2734
- case ASIO_OS_DEF(AF_INET6):
2735
- {
2736
- sockaddr_in6_type* sin6ptr = gai_alloc<sockaddr_in6_type>();
2737
- if (sin6ptr == 0)
2738
- return EAI_MEMORY;
2739
- sin6ptr->sin6_family = ASIO_OS_DEF(AF_INET6);
2740
- memcpy(&sin6ptr->sin6_addr, addr, sizeof(in6_addr_type));
2741
- ai->ai_addr = reinterpret_cast<sockaddr*>(sin6ptr);
2742
- ai->ai_addrlen = sizeof(sockaddr_in6_type);
2743
- break;
2744
- }
2745
- default:
2746
- break;
2747
- }
2748
-
2749
- return 0;
2750
- }
2751
-
2752
- inline addrinfo_type* gai_clone(addrinfo_type* ai)
2753
- {
2754
- using namespace std;
2755
-
2756
- addrinfo_type* new_ai = gai_alloc<addrinfo_type>();
2757
- if (new_ai == 0)
2758
- return new_ai;
2759
-
2760
- new_ai->ai_next = ai->ai_next;
2761
- ai->ai_next = new_ai;
2762
-
2763
- new_ai->ai_flags = 0;
2764
- new_ai->ai_family = ai->ai_family;
2765
- new_ai->ai_socktype = ai->ai_socktype;
2766
- new_ai->ai_protocol = ai->ai_protocol;
2767
- new_ai->ai_canonname = 0;
2768
- new_ai->ai_addrlen = ai->ai_addrlen;
2769
- new_ai->ai_addr = gai_alloc<sockaddr>(ai->ai_addrlen);
2770
- memcpy(new_ai->ai_addr, ai->ai_addr, ai->ai_addrlen);
2771
-
2772
- return new_ai;
2773
- }
2774
-
2775
- inline int gai_port(addrinfo_type* aihead, int port, int socktype)
2776
- {
2777
- int num_found = 0;
2778
-
2779
- for (addrinfo_type* ai = aihead; ai; ai = ai->ai_next)
2780
- {
2781
- if (ai->ai_flags & gai_clone_flag)
2782
- {
2783
- if (ai->ai_socktype != 0)
2784
- {
2785
- ai = gai_clone(ai);
2786
- if (ai == 0)
2787
- return -1;
2788
- // ai now points to newly cloned entry.
2789
- }
2790
- }
2791
- else if (ai->ai_socktype != socktype)
2792
- {
2793
- // Ignore if mismatch on socket type.
2794
- continue;
2795
- }
2796
-
2797
- ai->ai_socktype = socktype;
2798
-
2799
- switch (ai->ai_family)
2800
- {
2801
- case ASIO_OS_DEF(AF_INET):
2802
- {
2803
- sockaddr_in4_type* sinptr =
2804
- reinterpret_cast<sockaddr_in4_type*>(ai->ai_addr);
2805
- sinptr->sin_port = port;
2806
- ++num_found;
2807
- break;
2808
- }
2809
- case ASIO_OS_DEF(AF_INET6):
2810
- {
2811
- sockaddr_in6_type* sin6ptr =
2812
- reinterpret_cast<sockaddr_in6_type*>(ai->ai_addr);
2813
- sin6ptr->sin6_port = port;
2814
- ++num_found;
2815
- break;
2816
- }
2817
- default:
2818
- break;
2819
- }
2820
- }
2821
-
2822
- return num_found;
2823
- }
2824
-
2825
- inline int gai_serv(addrinfo_type* aihead,
2826
- const addrinfo_type* hints, const char* serv)
2827
- {
2828
- using namespace std;
2829
-
2830
- int num_found = 0;
2831
-
2832
- if (
2833
- #if defined(AI_NUMERICSERV)
2834
- (hints->ai_flags & AI_NUMERICSERV) ||
2835
- #endif
2836
- isdigit(static_cast<unsigned char>(serv[0])))
2837
- {
2838
- int port = htons(atoi(serv));
2839
- if (hints->ai_socktype)
2840
- {
2841
- // Caller specifies socket type.
2842
- int rc = gai_port(aihead, port, hints->ai_socktype);
2843
- if (rc < 0)
2844
- return EAI_MEMORY;
2845
- num_found += rc;
2846
- }
2847
- else
2848
- {
2849
- // Caller does not specify socket type.
2850
- int rc = gai_port(aihead, port, SOCK_STREAM);
2851
- if (rc < 0)
2852
- return EAI_MEMORY;
2853
- num_found += rc;
2854
- rc = gai_port(aihead, port, SOCK_DGRAM);
2855
- if (rc < 0)
2856
- return EAI_MEMORY;
2857
- num_found += rc;
2858
- }
2859
- }
2860
- else
2861
- {
2862
- // Try service name with TCP first, then UDP.
2863
- if (hints->ai_socktype == 0 || hints->ai_socktype == SOCK_STREAM)
2864
- {
2865
- servent* sptr = getservbyname(serv, "tcp");
2866
- if (sptr != 0)
2867
- {
2868
- int rc = gai_port(aihead, sptr->s_port, SOCK_STREAM);
2869
- if (rc < 0)
2870
- return EAI_MEMORY;
2871
- num_found += rc;
2872
- }
2873
- }
2874
- if (hints->ai_socktype == 0 || hints->ai_socktype == SOCK_DGRAM)
2875
- {
2876
- servent* sptr = getservbyname(serv, "udp");
2877
- if (sptr != 0)
2878
- {
2879
- int rc = gai_port(aihead, sptr->s_port, SOCK_DGRAM);
2880
- if (rc < 0)
2881
- return EAI_MEMORY;
2882
- num_found += rc;
2883
- }
2884
- }
2885
- }
2886
-
2887
- if (num_found == 0)
2888
- {
2889
- if (hints->ai_socktype == 0)
2890
- {
2891
- // All calls to getservbyname() failed.
2892
- return EAI_NONAME;
2893
- }
2894
- else
2895
- {
2896
- // Service not supported for socket type.
2897
- return EAI_SERVICE;
2898
- }
2899
- }
2900
-
2901
- return 0;
2902
- }
2903
-
2904
- inline int gai_echeck(const char* host, const char* service,
2905
- int flags, int family, int socktype, int protocol)
2906
- {
2907
- (void)(flags);
2908
- (void)(protocol);
2909
-
2910
- // Host or service must be specified.
2911
- if (host == 0 || host[0] == '\0')
2912
- if (service == 0 || service[0] == '\0')
2913
- return EAI_NONAME;
2914
-
2915
- // Check combination of family and socket type.
2916
- switch (family)
2917
- {
2918
- case ASIO_OS_DEF(AF_UNSPEC):
2919
- break;
2920
- case ASIO_OS_DEF(AF_INET):
2921
- case ASIO_OS_DEF(AF_INET6):
2922
- if (service != 0 && service[0] != '\0')
2923
- if (socktype != 0 && socktype != SOCK_STREAM && socktype != SOCK_DGRAM)
2924
- return EAI_SOCKTYPE;
2925
- break;
2926
- default:
2927
- return EAI_FAMILY;
2928
- }
2929
-
2930
- return 0;
2931
- }
2932
-
2933
- inline void freeaddrinfo_emulation(addrinfo_type* aihead)
2934
- {
2935
- addrinfo_type* ai = aihead;
2936
- while (ai)
2937
- {
2938
- gai_free(ai->ai_addr);
2939
- gai_free(ai->ai_canonname);
2940
- addrinfo_type* ainext = ai->ai_next;
2941
- gai_free(ai);
2942
- ai = ainext;
2943
- }
2944
- }
2945
-
2946
- inline int getaddrinfo_emulation(const char* host, const char* service,
2947
- const addrinfo_type* hintsp, addrinfo_type** result)
2948
- {
2949
- // Set up linked list of addrinfo structures.
2950
- addrinfo_type* aihead = 0;
2951
- addrinfo_type** ainext = &aihead;
2952
- char* canon = 0;
2953
-
2954
- // Supply default hints if not specified by caller.
2955
- addrinfo_type hints = addrinfo_type();
2956
- hints.ai_family = ASIO_OS_DEF(AF_UNSPEC);
2957
- if (hintsp)
2958
- hints = *hintsp;
2959
-
2960
- // If the resolution is not specifically for AF_INET6, remove the AI_V4MAPPED
2961
- // and AI_ALL flags.
2962
- #if defined(AI_V4MAPPED)
2963
- if (hints.ai_family != ASIO_OS_DEF(AF_INET6))
2964
- hints.ai_flags &= ~AI_V4MAPPED;
2965
- #endif
2966
- #if defined(AI_ALL)
2967
- if (hints.ai_family != ASIO_OS_DEF(AF_INET6))
2968
- hints.ai_flags &= ~AI_ALL;
2969
- #endif
2970
-
2971
- // Basic error checking.
2972
- int rc = gai_echeck(host, service, hints.ai_flags, hints.ai_family,
2973
- hints.ai_socktype, hints.ai_protocol);
2974
- if (rc != 0)
2975
- {
2976
- freeaddrinfo_emulation(aihead);
2977
- return rc;
2978
- }
2979
-
2980
- gai_search search[2];
2981
- int search_count = gai_nsearch(host, &hints, search);
2982
- for (gai_search* sptr = search; sptr < search + search_count; ++sptr)
2983
- {
2984
- // Check for IPv4 dotted decimal string.
2985
- in4_addr_type inaddr;
2986
- asio::error_code ec;
2987
- if (socket_ops::inet_pton(ASIO_OS_DEF(AF_INET),
2988
- sptr->host, &inaddr, 0, ec) == 1)
2989
- {
2990
- if (hints.ai_family != ASIO_OS_DEF(AF_UNSPEC)
2991
- && hints.ai_family != ASIO_OS_DEF(AF_INET))
2992
- {
2993
- freeaddrinfo_emulation(aihead);
2994
- gai_free(canon);
2995
- return EAI_FAMILY;
2996
- }
2997
- if (sptr->family == ASIO_OS_DEF(AF_INET))
2998
- {
2999
- rc = gai_aistruct(&ainext, &hints, &inaddr, ASIO_OS_DEF(AF_INET));
3000
- if (rc != 0)
3001
- {
3002
- freeaddrinfo_emulation(aihead);
3003
- gai_free(canon);
3004
- return rc;
3005
- }
3006
- }
3007
- continue;
3008
- }
3009
-
3010
- // Check for IPv6 hex string.
3011
- in6_addr_type in6addr;
3012
- if (socket_ops::inet_pton(ASIO_OS_DEF(AF_INET6),
3013
- sptr->host, &in6addr, 0, ec) == 1)
3014
- {
3015
- if (hints.ai_family != ASIO_OS_DEF(AF_UNSPEC)
3016
- && hints.ai_family != ASIO_OS_DEF(AF_INET6))
3017
- {
3018
- freeaddrinfo_emulation(aihead);
3019
- gai_free(canon);
3020
- return EAI_FAMILY;
3021
- }
3022
- if (sptr->family == ASIO_OS_DEF(AF_INET6))
3023
- {
3024
- rc = gai_aistruct(&ainext, &hints, &in6addr,
3025
- ASIO_OS_DEF(AF_INET6));
3026
- if (rc != 0)
3027
- {
3028
- freeaddrinfo_emulation(aihead);
3029
- gai_free(canon);
3030
- return rc;
3031
- }
3032
- }
3033
- continue;
3034
- }
3035
-
3036
- // Look up hostname.
3037
- hostent hent;
3038
- char hbuf[8192] = "";
3039
- hostent* hptr = socket_ops::gethostbyname(sptr->host,
3040
- sptr->family, &hent, hbuf, sizeof(hbuf), hints.ai_flags, ec);
3041
- if (hptr == 0)
3042
- {
3043
- if (search_count == 2)
3044
- {
3045
- // Failure is OK if there are multiple searches.
3046
- continue;
3047
- }
3048
- freeaddrinfo_emulation(aihead);
3049
- gai_free(canon);
3050
- if (ec == asio::error::host_not_found)
3051
- return EAI_NONAME;
3052
- if (ec == asio::error::host_not_found_try_again)
3053
- return EAI_AGAIN;
3054
- if (ec == asio::error::no_recovery)
3055
- return EAI_FAIL;
3056
- if (ec == asio::error::no_data)
3057
- return EAI_NONAME;
3058
- return EAI_NONAME;
3059
- }
3060
-
3061
- // Check for address family mismatch if one was specified.
3062
- if (hints.ai_family != ASIO_OS_DEF(AF_UNSPEC)
3063
- && hints.ai_family != hptr->h_addrtype)
3064
- {
3065
- freeaddrinfo_emulation(aihead);
3066
- gai_free(canon);
3067
- socket_ops::freehostent(hptr);
3068
- return EAI_FAMILY;
3069
- }
3070
-
3071
- // Save canonical name first time.
3072
- if (host != 0 && host[0] != '\0' && hptr->h_name && hptr->h_name[0]
3073
- && (hints.ai_flags & AI_CANONNAME) && canon == 0)
3074
- {
3075
- std::size_t canon_len = strlen(hptr->h_name) + 1;
3076
- canon = gai_alloc<char>(canon_len);
3077
- if (canon == 0)
3078
- {
3079
- freeaddrinfo_emulation(aihead);
3080
- socket_ops::freehostent(hptr);
3081
- return EAI_MEMORY;
3082
- }
3083
- gai_strcpy(canon, hptr->h_name, canon_len);
3084
- }
3085
-
3086
- // Create an addrinfo structure for each returned address.
3087
- for (char** ap = hptr->h_addr_list; *ap; ++ap)
3088
- {
3089
- rc = gai_aistruct(&ainext, &hints, *ap, hptr->h_addrtype);
3090
- if (rc != 0)
3091
- {
3092
- freeaddrinfo_emulation(aihead);
3093
- gai_free(canon);
3094
- socket_ops::freehostent(hptr);
3095
- return EAI_FAMILY;
3096
- }
3097
- }
3098
-
3099
- socket_ops::freehostent(hptr);
3100
- }
3101
-
3102
- // Check if we found anything.
3103
- if (aihead == 0)
3104
- {
3105
- gai_free(canon);
3106
- return EAI_NONAME;
3107
- }
3108
-
3109
- // Return canonical name in first entry.
3110
- if (host != 0 && host[0] != '\0' && (hints.ai_flags & AI_CANONNAME))
3111
- {
3112
- if (canon)
3113
- {
3114
- aihead->ai_canonname = canon;
3115
- canon = 0;
3116
- }
3117
- else
3118
- {
3119
- std::size_t canonname_len = strlen(search[0].host) + 1;
3120
- aihead->ai_canonname = gai_alloc<char>(canonname_len);
3121
- if (aihead->ai_canonname == 0)
3122
- {
3123
- freeaddrinfo_emulation(aihead);
3124
- return EAI_MEMORY;
3125
- }
3126
- gai_strcpy(aihead->ai_canonname, search[0].host, canonname_len);
3127
- }
3128
- }
3129
- gai_free(canon);
3130
-
3131
- // Process the service name.
3132
- if (service != 0 && service[0] != '\0')
3133
- {
3134
- rc = gai_serv(aihead, &hints, service);
3135
- if (rc != 0)
3136
- {
3137
- freeaddrinfo_emulation(aihead);
3138
- return rc;
3139
- }
3140
- }
3141
-
3142
- // Return result to caller.
3143
- *result = aihead;
3144
- return 0;
3145
- }
3146
-
3147
- inline asio::error_code getnameinfo_emulation(
3148
- const socket_addr_type* sa, std::size_t salen, char* host,
3149
- std::size_t hostlen, char* serv, std::size_t servlen, int flags,
3150
- asio::error_code& ec)
3151
- {
3152
- using namespace std;
3153
-
3154
- const char* addr;
3155
- size_t addr_len;
3156
- unsigned short port;
3157
- switch (sa->sa_family)
3158
- {
3159
- case ASIO_OS_DEF(AF_INET):
3160
- if (salen != sizeof(sockaddr_in4_type))
3161
- {
3162
- return ec = asio::error::invalid_argument;
3163
- }
3164
- addr = reinterpret_cast<const char*>(
3165
- &reinterpret_cast<const sockaddr_in4_type*>(sa)->sin_addr);
3166
- addr_len = sizeof(in4_addr_type);
3167
- port = reinterpret_cast<const sockaddr_in4_type*>(sa)->sin_port;
3168
- break;
3169
- case ASIO_OS_DEF(AF_INET6):
3170
- if (salen != sizeof(sockaddr_in6_type))
3171
- {
3172
- return ec = asio::error::invalid_argument;
3173
- }
3174
- addr = reinterpret_cast<const char*>(
3175
- &reinterpret_cast<const sockaddr_in6_type*>(sa)->sin6_addr);
3176
- addr_len = sizeof(in6_addr_type);
3177
- port = reinterpret_cast<const sockaddr_in6_type*>(sa)->sin6_port;
3178
- break;
3179
- default:
3180
- return ec = asio::error::address_family_not_supported;
3181
- }
3182
-
3183
- if (host && hostlen > 0)
3184
- {
3185
- if (flags & NI_NUMERICHOST)
3186
- {
3187
- if (socket_ops::inet_ntop(sa->sa_family, addr, host, hostlen, 0, ec) == 0)
3188
- {
3189
- return ec;
3190
- }
3191
- }
3192
- else
3193
- {
3194
- hostent hent;
3195
- char hbuf[8192] = "";
3196
- hostent* hptr = socket_ops::gethostbyaddr(addr,
3197
- static_cast<int>(addr_len), sa->sa_family,
3198
- &hent, hbuf, sizeof(hbuf), ec);
3199
- if (hptr && hptr->h_name && hptr->h_name[0] != '\0')
3200
- {
3201
- if (flags & NI_NOFQDN)
3202
- {
3203
- char* dot = strchr(hptr->h_name, '.');
3204
- if (dot)
3205
- {
3206
- *dot = 0;
3207
- }
3208
- }
3209
- gai_strcpy(host, hptr->h_name, hostlen);
3210
- socket_ops::freehostent(hptr);
3211
- }
3212
- else
3213
- {
3214
- socket_ops::freehostent(hptr);
3215
- if (flags & NI_NAMEREQD)
3216
- {
3217
- return ec = asio::error::host_not_found;
3218
- }
3219
- if (socket_ops::inet_ntop(sa->sa_family,
3220
- addr, host, hostlen, 0, ec) == 0)
3221
- {
3222
- return ec;
3223
- }
3224
- }
3225
- }
3226
- }
3227
-
3228
- if (serv && servlen > 0)
3229
- {
3230
- if (flags & NI_NUMERICSERV)
3231
- {
3232
- if (servlen < 6)
3233
- {
3234
- return ec = asio::error::no_buffer_space;
3235
- }
3236
- #if defined(ASIO_HAS_SECURE_RTL)
3237
- sprintf_s(serv, servlen, "%u", ntohs(port));
3238
- #else // defined(ASIO_HAS_SECURE_RTL)
3239
- sprintf(serv, "%u", ntohs(port));
3240
- #endif // defined(ASIO_HAS_SECURE_RTL)
3241
- }
3242
- else
3243
- {
3244
- #if defined(ASIO_HAS_PTHREADS)
3245
- static ::pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
3246
- ::pthread_mutex_lock(&mutex);
3247
- #endif // defined(ASIO_HAS_PTHREADS)
3248
- servent* sptr = ::getservbyport(port, (flags & NI_DGRAM) ? "udp" : 0);
3249
- if (sptr && sptr->s_name && sptr->s_name[0] != '\0')
3250
- {
3251
- gai_strcpy(serv, sptr->s_name, servlen);
3252
- }
3253
- else
3254
- {
3255
- if (servlen < 6)
3256
- {
3257
- return ec = asio::error::no_buffer_space;
3258
- }
3259
- #if defined(ASIO_HAS_SECURE_RTL)
3260
- sprintf_s(serv, servlen, "%u", ntohs(port));
3261
- #else // defined(ASIO_HAS_SECURE_RTL)
3262
- sprintf(serv, "%u", ntohs(port));
3263
- #endif // defined(ASIO_HAS_SECURE_RTL)
3264
- }
3265
- #if defined(ASIO_HAS_PTHREADS)
3266
- ::pthread_mutex_unlock(&mutex);
3267
- #endif // defined(ASIO_HAS_PTHREADS)
3268
- }
3269
- }
3270
-
3271
- ec = asio::error_code();
3272
- return ec;
3273
- }
3274
-
3275
- #endif // !defined(ASIO_HAS_GETADDRINFO)
3276
-
3277
- inline asio::error_code translate_addrinfo_error(int error)
3278
- {
3279
- switch (error)
3280
- {
3281
- case 0:
3282
- return asio::error_code();
3283
- case EAI_AGAIN:
3284
- return asio::error::host_not_found_try_again;
3285
- case EAI_BADFLAGS:
3286
- return asio::error::invalid_argument;
3287
- case EAI_FAIL:
3288
- return asio::error::no_recovery;
3289
- case EAI_FAMILY:
3290
- return asio::error::address_family_not_supported;
3291
- case EAI_MEMORY:
3292
- return asio::error::no_memory;
3293
- case EAI_NONAME:
3294
- #if defined(EAI_ADDRFAMILY)
3295
- case EAI_ADDRFAMILY:
3296
- #endif
3297
- #if defined(EAI_NODATA) && (EAI_NODATA != EAI_NONAME)
3298
- case EAI_NODATA:
3299
- #endif
3300
- return asio::error::host_not_found;
3301
- case EAI_SERVICE:
3302
- return asio::error::service_not_found;
3303
- case EAI_SOCKTYPE:
3304
- return asio::error::socket_type_not_supported;
3305
- default: // Possibly the non-portable EAI_SYSTEM.
3306
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
3307
- return asio::error_code(
3308
- WSAGetLastError(), asio::error::get_system_category());
3309
- #else
3310
- return asio::error_code(
3311
- errno, asio::error::get_system_category());
3312
- #endif
3313
- }
3314
- }
3315
-
3316
- asio::error_code getaddrinfo(const char* host,
3317
- const char* service, const addrinfo_type& hints,
3318
- addrinfo_type** result, asio::error_code& ec)
3319
- {
3320
- host = (host && *host) ? host : 0;
3321
- service = (service && *service) ? service : 0;
3322
- clear_last_error();
3323
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
3324
- # if defined(ASIO_HAS_GETADDRINFO)
3325
- // Building for Windows XP, Windows Server 2003, or later.
3326
- int error = ::getaddrinfo(host, service, &hints, result);
3327
- return ec = translate_addrinfo_error(error);
3328
- # else
3329
- // Building for Windows 2000 or earlier.
3330
- typedef int (WSAAPI *gai_t)(const char*,
3331
- const char*, const addrinfo_type*, addrinfo_type**);
3332
- if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
3333
- {
3334
- if (gai_t gai = (gai_t)::GetProcAddress(winsock_module, "getaddrinfo"))
3335
- {
3336
- int error = gai(host, service, &hints, result);
3337
- return ec = translate_addrinfo_error(error);
3338
- }
3339
- }
3340
- int error = getaddrinfo_emulation(host, service, &hints, result);
3341
- return ec = translate_addrinfo_error(error);
3342
- # endif
3343
- #elif !defined(ASIO_HAS_GETADDRINFO)
3344
- int error = getaddrinfo_emulation(host, service, &hints, result);
3345
- return ec = translate_addrinfo_error(error);
3346
- #else
3347
- int error = ::getaddrinfo(host, service, &hints, result);
3348
- #if defined(__MACH__) && defined(__APPLE__)
3349
- using namespace std; // For isdigit and atoi.
3350
- if (error == 0 && service && isdigit(static_cast<unsigned char>(service[0])))
3351
- {
3352
- u_short_type port = host_to_network_short(atoi(service));
3353
- for (addrinfo_type* ai = *result; ai; ai = ai->ai_next)
3354
- {
3355
- switch (ai->ai_family)
3356
- {
3357
- case ASIO_OS_DEF(AF_INET):
3358
- {
3359
- sockaddr_in4_type* sinptr =
3360
- reinterpret_cast<sockaddr_in4_type*>(ai->ai_addr);
3361
- if (sinptr->sin_port == 0)
3362
- sinptr->sin_port = port;
3363
- break;
3364
- }
3365
- case ASIO_OS_DEF(AF_INET6):
3366
- {
3367
- sockaddr_in6_type* sin6ptr =
3368
- reinterpret_cast<sockaddr_in6_type*>(ai->ai_addr);
3369
- if (sin6ptr->sin6_port == 0)
3370
- sin6ptr->sin6_port = port;
3371
- break;
3372
- }
3373
- default:
3374
- break;
3375
- }
3376
- }
3377
- }
3378
- #endif
3379
- return ec = translate_addrinfo_error(error);
3380
- #endif
3381
- }
3382
-
3383
- asio::error_code background_getaddrinfo(
3384
- const weak_cancel_token_type& cancel_token, const char* host,
3385
- const char* service, const addrinfo_type& hints,
3386
- addrinfo_type** result, asio::error_code& ec)
3387
- {
3388
- if (cancel_token.expired())
3389
- ec = asio::error::operation_aborted;
3390
- else
3391
- socket_ops::getaddrinfo(host, service, hints, result, ec);
3392
- return ec;
3393
- }
3394
-
3395
- void freeaddrinfo(addrinfo_type* ai)
3396
- {
3397
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
3398
- # if defined(ASIO_HAS_GETADDRINFO)
3399
- // Building for Windows XP, Windows Server 2003, or later.
3400
- ::freeaddrinfo(ai);
3401
- # else
3402
- // Building for Windows 2000 or earlier.
3403
- typedef int (WSAAPI *fai_t)(addrinfo_type*);
3404
- if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
3405
- {
3406
- if (fai_t fai = (fai_t)::GetProcAddress(winsock_module, "freeaddrinfo"))
3407
- {
3408
- fai(ai);
3409
- return;
3410
- }
3411
- }
3412
- freeaddrinfo_emulation(ai);
3413
- # endif
3414
- #elif !defined(ASIO_HAS_GETADDRINFO)
3415
- freeaddrinfo_emulation(ai);
3416
- #else
3417
- ::freeaddrinfo(ai);
3418
- #endif
3419
- }
3420
-
3421
- asio::error_code getnameinfo(const socket_addr_type* addr,
3422
- std::size_t addrlen, char* host, std::size_t hostlen,
3423
- char* serv, std::size_t servlen, int flags, asio::error_code& ec)
3424
- {
3425
- #if defined(ASIO_WINDOWS) || defined(__CYGWIN__)
3426
- # if defined(ASIO_HAS_GETADDRINFO)
3427
- // Building for Windows XP, Windows Server 2003, or later.
3428
- clear_last_error();
3429
- int error = ::getnameinfo(addr, static_cast<socklen_t>(addrlen),
3430
- host, static_cast<DWORD>(hostlen),
3431
- serv, static_cast<DWORD>(servlen), flags);
3432
- return ec = translate_addrinfo_error(error);
3433
- # else
3434
- // Building for Windows 2000 or earlier.
3435
- typedef int (WSAAPI *gni_t)(const socket_addr_type*,
3436
- int, char*, DWORD, char*, DWORD, int);
3437
- if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
3438
- {
3439
- if (gni_t gni = (gni_t)::GetProcAddress(winsock_module, "getnameinfo"))
3440
- {
3441
- clear_last_error();
3442
- int error = gni(addr, static_cast<int>(addrlen),
3443
- host, static_cast<DWORD>(hostlen),
3444
- serv, static_cast<DWORD>(servlen), flags);
3445
- return ec = translate_addrinfo_error(error);
3446
- }
3447
- }
3448
- clear_last_error();
3449
- return getnameinfo_emulation(addr, addrlen,
3450
- host, hostlen, serv, servlen, flags, ec);
3451
- # endif
3452
- #elif !defined(ASIO_HAS_GETADDRINFO)
3453
- using namespace std; // For memcpy.
3454
- sockaddr_storage_type tmp_addr;
3455
- memcpy(&tmp_addr, addr, addrlen);
3456
- addr = reinterpret_cast<socket_addr_type*>(&tmp_addr);
3457
- clear_last_error();
3458
- return getnameinfo_emulation(addr, addrlen,
3459
- host, hostlen, serv, servlen, flags, ec);
3460
- #else
3461
- clear_last_error();
3462
- int error = ::getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3463
- return ec = translate_addrinfo_error(error);
3464
- #endif
3465
- }
3466
-
3467
- asio::error_code sync_getnameinfo(
3468
- const socket_addr_type* addr, std::size_t addrlen,
3469
- char* host, std::size_t hostlen, char* serv,
3470
- std::size_t servlen, int sock_type, asio::error_code& ec)
3471
- {
3472
- // First try resolving with the service name. If that fails try resolving
3473
- // but allow the service to be returned as a number.
3474
- int flags = (sock_type == SOCK_DGRAM) ? NI_DGRAM : 0;
3475
- socket_ops::getnameinfo(addr, addrlen, host,
3476
- hostlen, serv, servlen, flags, ec);
3477
- if (ec)
3478
- {
3479
- socket_ops::getnameinfo(addr, addrlen, host, hostlen,
3480
- serv, servlen, flags | NI_NUMERICSERV, ec);
3481
- }
3482
-
3483
- return ec;
3484
- }
3485
-
3486
- asio::error_code background_getnameinfo(
3487
- const weak_cancel_token_type& cancel_token,
3488
- const socket_addr_type* addr, std::size_t addrlen,
3489
- char* host, std::size_t hostlen, char* serv,
3490
- std::size_t servlen, int sock_type, asio::error_code& ec)
3491
- {
3492
- if (cancel_token.expired())
3493
- {
3494
- ec = asio::error::operation_aborted;
3495
- }
3496
- else
3497
- {
3498
- // First try resolving with the service name. If that fails try resolving
3499
- // but allow the service to be returned as a number.
3500
- int flags = (sock_type == SOCK_DGRAM) ? NI_DGRAM : 0;
3501
- socket_ops::getnameinfo(addr, addrlen, host,
3502
- hostlen, serv, servlen, flags, ec);
3503
- if (ec)
3504
- {
3505
- socket_ops::getnameinfo(addr, addrlen, host, hostlen,
3506
- serv, servlen, flags | NI_NUMERICSERV, ec);
3507
- }
3508
- }
3509
-
3510
- return ec;
3511
- }
3512
-
3513
- #endif // !defined(ASIO_WINDOWS_RUNTIME)
3514
-
3515
- u_long_type network_to_host_long(u_long_type value)
3516
- {
3517
- #if defined(ASIO_WINDOWS_RUNTIME)
3518
- unsigned char* value_p = reinterpret_cast<unsigned char*>(&value);
3519
- u_long_type result = (static_cast<u_long_type>(value_p[0]) << 24)
3520
- | (static_cast<u_long_type>(value_p[1]) << 16)
3521
- | (static_cast<u_long_type>(value_p[2]) << 8)
3522
- | static_cast<u_long_type>(value_p[3]);
3523
- return result;
3524
- #else // defined(ASIO_WINDOWS_RUNTIME)
3525
- return ntohl(value);
3526
- #endif // defined(ASIO_WINDOWS_RUNTIME)
3527
- }
3528
-
3529
- u_long_type host_to_network_long(u_long_type value)
3530
- {
3531
- #if defined(ASIO_WINDOWS_RUNTIME)
3532
- u_long_type result;
3533
- unsigned char* result_p = reinterpret_cast<unsigned char*>(&result);
3534
- result_p[0] = static_cast<unsigned char>((value >> 24) & 0xFF);
3535
- result_p[1] = static_cast<unsigned char>((value >> 16) & 0xFF);
3536
- result_p[2] = static_cast<unsigned char>((value >> 8) & 0xFF);
3537
- result_p[3] = static_cast<unsigned char>(value & 0xFF);
3538
- return result;
3539
- #else // defined(ASIO_WINDOWS_RUNTIME)
3540
- return htonl(value);
3541
- #endif // defined(ASIO_WINDOWS_RUNTIME)
3542
- }
3543
-
3544
- u_short_type network_to_host_short(u_short_type value)
3545
- {
3546
- #if defined(ASIO_WINDOWS_RUNTIME)
3547
- unsigned char* value_p = reinterpret_cast<unsigned char*>(&value);
3548
- u_short_type result = (static_cast<u_short_type>(value_p[0]) << 8)
3549
- | static_cast<u_short_type>(value_p[1]);
3550
- return result;
3551
- #else // defined(ASIO_WINDOWS_RUNTIME)
3552
- return ntohs(value);
3553
- #endif // defined(ASIO_WINDOWS_RUNTIME)
3554
- }
3555
-
3556
- u_short_type host_to_network_short(u_short_type value)
3557
- {
3558
- #if defined(ASIO_WINDOWS_RUNTIME)
3559
- u_short_type result;
3560
- unsigned char* result_p = reinterpret_cast<unsigned char*>(&result);
3561
- result_p[0] = static_cast<unsigned char>((value >> 8) & 0xFF);
3562
- result_p[1] = static_cast<unsigned char>(value & 0xFF);
3563
- return result;
3564
- #else // defined(ASIO_WINDOWS_RUNTIME)
3565
- return htons(value);
3566
- #endif // defined(ASIO_WINDOWS_RUNTIME)
3567
- }
3568
-
3569
- } // namespace socket_ops
3570
- } // namespace detail
3571
- } // namespace asio
3572
-
3573
- #include "asio/detail/pop_options.hpp"
3574
-
3575
- #endif // ASIO_DETAIL_SOCKET_OPS_IPP