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

Sign up to get free protection for your applications and to get access to all the features.
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 +2837 -0
  43. data/lib/couchbase/protostellar/binary_collection.rb +55 -0
  44. data/lib/couchbase/protostellar/bucket.rb +51 -0
  45. data/lib/couchbase/protostellar/client.rb +99 -0
  46. data/lib/couchbase/protostellar/cluster.rb +163 -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 +33 -30
  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