grpc 1.43.1 → 1.44.0.pre2

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

Potentially problematic release.


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

Files changed (382) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +84 -64
  3. data/include/grpc/grpc_security.h +10 -0
  4. data/include/grpc/impl/codegen/compression_types.h +0 -2
  5. data/include/grpc/impl/codegen/grpc_types.h +6 -0
  6. data/src/core/ext/filters/client_channel/backend_metric.h +1 -1
  7. data/src/core/ext/filters/client_channel/client_channel.cc +62 -68
  8. data/src/core/ext/filters/client_channel/client_channel.h +8 -8
  9. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  10. data/src/core/ext/filters/client_channel/config_selector.h +4 -4
  11. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -14
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  16. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +3 -7
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +31 -32
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +43 -29
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +6 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +120 -68
  26. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +60 -48
  27. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
  28. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
  29. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -5
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +19 -15
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +14 -12
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +3 -2
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +50 -105
  35. data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
  36. data/src/core/ext/filters/client_channel/lb_policy.h +19 -3
  37. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -3
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +207 -81
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +23 -38
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +118 -207
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +25 -32
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  45. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +82 -73
  46. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +10 -10
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
  48. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -5
  49. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  50. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +157 -67
  51. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  52. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
  53. data/src/core/ext/filters/client_channel/retry_filter.cc +37 -64
  54. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  55. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  56. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
  57. data/src/core/ext/filters/client_channel/subchannel.cc +12 -16
  58. data/src/core/ext/filters/client_channel/subchannel.h +2 -3
  59. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +37 -48
  60. data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -8
  61. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  62. data/src/core/ext/filters/http/client/http_client_filter.cc +51 -122
  63. data/src/core/ext/filters/http/client_authority_filter.cc +8 -24
  64. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +42 -140
  65. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
  66. data/src/core/ext/filters/http/server/http_server_filter.cc +50 -135
  67. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  68. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  69. data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
  70. data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
  71. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
  72. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
  73. data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -2
  74. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +11 -6
  75. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +1 -1
  76. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +1 -1
  77. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +89 -29
  78. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
  79. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +45 -186
  80. data/src/core/ext/transport/chttp2/transport/frame_data.cc +0 -1
  81. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +341 -279
  82. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +69 -159
  83. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
  84. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
  85. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +19 -32
  86. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -1
  87. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +94 -1
  88. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -24
  89. data/src/core/ext/transport/chttp2/transport/internal.h +0 -33
  90. data/src/core/ext/transport/chttp2/transport/parsing.cc +0 -6
  91. data/src/core/ext/transport/chttp2/transport/writing.cc +47 -116
  92. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  93. data/src/core/ext/transport/inproc/inproc_transport.cc +11 -63
  94. data/src/core/ext/transport/inproc/inproc_transport.h +0 -3
  95. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
  96. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
  97. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
  98. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  99. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
  100. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  101. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  102. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  103. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
  104. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
  105. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
  106. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
  107. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  108. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  109. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
  110. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
  111. data/src/core/ext/xds/upb_utils.h +65 -0
  112. data/src/core/ext/xds/xds_api.cc +81 -3458
  113. data/src/core/ext/xds/xds_api.h +56 -611
  114. data/src/core/ext/xds/xds_bootstrap.cc +189 -125
  115. data/src/core/ext/xds/xds_bootstrap.h +20 -15
  116. data/src/core/ext/xds/xds_certificate_provider.h +1 -0
  117. data/src/core/ext/xds/xds_channel_creds.cc +108 -0
  118. data/src/core/ext/xds/xds_channel_creds.h +50 -0
  119. data/src/core/ext/xds/xds_client.cc +584 -994
  120. data/src/core/ext/xds/xds_client.h +78 -135
  121. data/src/core/ext/xds/xds_cluster.cc +451 -0
  122. data/src/core/ext/xds/xds_cluster.h +111 -0
  123. data/src/core/ext/xds/xds_common_types.cc +388 -0
  124. data/src/core/ext/xds/xds_common_types.h +110 -0
  125. data/src/core/ext/xds/xds_endpoint.cc +364 -0
  126. data/src/core/ext/xds/xds_endpoint.h +135 -0
  127. data/src/core/ext/xds/xds_http_filters.cc +5 -0
  128. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  129. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  130. data/src/core/ext/xds/xds_listener.cc +1036 -0
  131. data/src/core/ext/xds/xds_listener.h +220 -0
  132. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
  133. data/src/core/ext/xds/xds_resource_type.h +98 -0
  134. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  135. data/src/core/ext/xds/xds_route_config.cc +993 -0
  136. data/src/core/ext/xds/xds_route_config.h +215 -0
  137. data/src/core/ext/xds/xds_routing.cc +11 -8
  138. data/src/core/ext/xds/xds_routing.h +8 -5
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +159 -99
  140. data/src/core/lib/address_utils/parse_address.cc +20 -0
  141. data/src/core/lib/address_utils/parse_address.h +5 -0
  142. data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
  143. data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
  144. data/src/core/lib/backoff/backoff.cc +4 -30
  145. data/src/core/lib/backoff/backoff.h +3 -3
  146. data/src/core/lib/channel/channel_args.cc +0 -1
  147. data/src/core/lib/channel/channel_stack.cc +8 -0
  148. data/src/core/lib/channel/channel_stack.h +1 -1
  149. data/src/core/lib/channel/channel_stack_builder.cc +5 -9
  150. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  151. data/src/core/lib/channel/channelz.cc +1 -0
  152. data/src/core/lib/compression/compression.cc +19 -111
  153. data/src/core/lib/compression/compression_internal.cc +142 -202
  154. data/src/core/lib/compression/compression_internal.h +64 -69
  155. data/src/core/lib/compression/message_compress.cc +11 -11
  156. data/src/core/lib/compression/message_compress.h +2 -2
  157. data/src/core/lib/gpr/useful.h +4 -0
  158. data/src/core/lib/gprpp/bitset.h +7 -0
  159. data/src/core/lib/gprpp/chunked_vector.h +45 -3
  160. data/src/core/lib/gprpp/status_helper.cc +20 -28
  161. data/src/core/lib/gprpp/status_helper.h +6 -19
  162. data/src/core/lib/gprpp/table.h +11 -0
  163. data/src/core/lib/http/httpcli.cc +37 -46
  164. data/src/core/lib/http/httpcli.h +3 -15
  165. data/src/core/lib/iomgr/call_combiner.cc +15 -4
  166. data/src/core/lib/iomgr/closure.h +29 -9
  167. data/src/core/lib/iomgr/combiner.cc +25 -3
  168. data/src/core/lib/iomgr/error.cc +2 -0
  169. data/src/core/lib/iomgr/error.h +3 -0
  170. data/src/core/lib/iomgr/event_engine/iomgr.cc +3 -2
  171. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
  172. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
  173. data/src/core/lib/iomgr/event_engine/resolver.cc +66 -48
  174. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  175. data/src/core/lib/iomgr/exec_ctx.cc +22 -9
  176. data/src/core/lib/iomgr/executor.cc +10 -1
  177. data/src/core/lib/iomgr/fork_posix.cc +3 -2
  178. data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
  179. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  180. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  181. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  182. data/src/core/lib/iomgr/port.h +2 -2
  183. data/src/core/lib/iomgr/resolve_address.cc +5 -24
  184. data/src/core/lib/iomgr/resolve_address.h +47 -44
  185. data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
  186. data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
  187. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  188. data/src/core/lib/iomgr/resolve_address_posix.cc +82 -66
  189. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  190. data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
  191. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  192. data/src/core/lib/iomgr/resolved_address.h +39 -0
  193. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
  194. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
  195. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  196. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  197. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  198. data/src/core/lib/matchers/matchers.cc +1 -1
  199. data/src/core/lib/promise/activity.h +49 -20
  200. data/src/core/lib/promise/detail/status.h +5 -0
  201. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  202. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  203. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +10 -5
  204. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +3 -2
  205. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +4 -5
  206. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
  207. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +4 -4
  208. data/src/core/lib/resource_quota/api.h +0 -1
  209. data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
  210. data/src/core/lib/{gprpp → resource_quota}/arena.h +24 -13
  211. data/src/core/lib/security/authorization/evaluate_args.cc +30 -15
  212. data/src/core/lib/security/authorization/evaluate_args.h +1 -0
  213. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  214. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  215. data/src/core/lib/security/authorization/matchers.cc +227 -0
  216. data/src/core/lib/security/authorization/matchers.h +211 -0
  217. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  218. data/src/core/lib/security/authorization/rbac_policy.h +170 -0
  219. data/src/core/lib/security/context/security_context.cc +4 -2
  220. data/src/core/lib/security/context/security_context.h +1 -1
  221. data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -5
  222. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
  223. data/src/core/lib/security/credentials/credentials.h +10 -20
  224. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +6 -9
  225. data/src/core/lib/security/credentials/external/external_account_credentials.cc +7 -9
  226. data/src/core/lib/security/credentials/external/external_account_credentials.h +2 -7
  227. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -3
  228. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  229. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
  230. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -5
  231. data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
  232. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
  233. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
  234. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +16 -28
  235. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
  236. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +6 -13
  237. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +44 -57
  238. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
  239. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
  240. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
  241. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
  242. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +6 -0
  243. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +7 -0
  244. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  245. data/src/core/lib/security/security_connector/security_connector.cc +0 -4
  246. data/src/core/lib/security/security_connector/security_connector.h +5 -1
  247. data/src/core/lib/security/security_connector/ssl_utils.cc +14 -24
  248. data/src/core/lib/security/security_connector/ssl_utils.h +5 -14
  249. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +2 -3
  250. data/src/core/lib/security/transport/auth_filters.h +7 -0
  251. data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
  252. data/src/core/lib/security/transport/server_auth_filter.cc +40 -35
  253. data/src/core/{ext → lib}/service_config/service_config.cc +2 -2
  254. data/src/core/{ext → lib}/service_config/service_config.h +4 -4
  255. data/src/core/{ext → lib}/service_config/service_config_call_data.h +5 -5
  256. data/src/core/{ext → lib}/service_config/service_config_parser.cc +1 -1
  257. data/src/core/{ext → lib}/service_config/service_config_parser.h +3 -3
  258. data/src/core/lib/slice/slice.cc +3 -1
  259. data/src/core/lib/slice/slice.h +43 -13
  260. data/src/core/lib/slice/slice_intern.cc +3 -101
  261. data/src/core/lib/slice/slice_internal.h +1 -2
  262. data/src/core/lib/slice/slice_refcount.h +4 -13
  263. data/src/core/lib/slice/slice_refcount_base.h +0 -16
  264. data/src/core/lib/surface/call.cc +140 -382
  265. data/src/core/lib/surface/call.h +4 -4
  266. data/src/core/lib/surface/channel.cc +42 -44
  267. data/src/core/lib/surface/channel.h +4 -4
  268. data/src/core/lib/surface/init.cc +0 -2
  269. data/src/core/lib/surface/lame_client.cc +0 -1
  270. data/src/core/lib/surface/server.cc +12 -29
  271. data/src/core/lib/surface/server.h +2 -2
  272. data/src/core/lib/surface/version.cc +2 -2
  273. data/src/core/lib/transport/error_utils.h +14 -0
  274. data/src/core/lib/transport/metadata_batch.h +799 -717
  275. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  276. data/src/core/lib/transport/parsed_metadata.h +95 -92
  277. data/src/core/lib/transport/timeout_encoding.cc +200 -66
  278. data/src/core/lib/transport/timeout_encoding.h +40 -10
  279. data/src/core/lib/transport/transport.h +1 -1
  280. data/src/core/lib/transport/transport_op_string.cc +6 -39
  281. data/src/core/lib/uri/uri_parser.cc +223 -53
  282. data/src/core/lib/uri/uri_parser.h +36 -23
  283. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -3
  284. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  285. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  286. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -5
  287. data/src/core/tsi/ssl_transport_security.cc +53 -13
  288. data/src/core/tsi/ssl_transport_security.h +18 -6
  289. data/src/ruby/ext/grpc/extconf.rb +10 -3
  290. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  291. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  292. data/src/ruby/lib/grpc/version.rb +1 -1
  293. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  294. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  295. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  296. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  297. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  298. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  299. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  300. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  301. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  302. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  303. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  304. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  305. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  306. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  307. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  308. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  309. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  310. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  311. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  312. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  313. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  314. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  315. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  316. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  317. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  318. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  319. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  320. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  321. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  322. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  323. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  324. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  325. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  326. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  327. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  328. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  329. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  330. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  331. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  332. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  333. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  334. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  335. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  336. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  337. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  338. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  339. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  340. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  341. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  342. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  343. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  344. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  345. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  346. data/third_party/boringssl-with-bazel/src/crypto/mem.c +1 -1
  347. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  348. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  349. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  350. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  351. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  352. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  353. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -0
  354. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  355. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +9 -4
  356. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  357. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +23 -2
  358. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  359. data/third_party/xxhash/xxhash.h +607 -352
  360. metadata +149 -77
  361. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  362. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  363. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  364. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  365. data/src/core/lib/compression/compression_args.cc +0 -140
  366. data/src/core/lib/compression/compression_args.h +0 -58
  367. data/src/core/lib/compression/stream_compression.cc +0 -81
  368. data/src/core/lib/compression/stream_compression.h +0 -117
  369. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  370. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  371. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  372. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  373. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  374. data/src/core/lib/slice/static_slice.cc +0 -377
  375. data/src/core/lib/slice/static_slice.h +0 -300
  376. data/src/core/lib/transport/metadata.cc +0 -714
  377. data/src/core/lib/transport/metadata.h +0 -449
  378. data/src/core/lib/transport/metadata_batch.cc +0 -99
  379. data/src/core/lib/transport/static_metadata.cc +0 -1032
  380. data/src/core/lib/transport/static_metadata.h +0 -322
  381. data/src/core/lib/transport/status_metadata.cc +0 -63
  382. data/src/core/lib/transport/status_metadata.h +0 -48
@@ -37,30 +37,89 @@
37
37
  #include "src/core/lib/iomgr/executor.h"
38
38
  #include "src/core/lib/iomgr/iomgr_internal.h"
39
39
  #include "src/core/lib/iomgr/resolve_address.h"
40
+ #include "src/core/lib/iomgr/resolve_address_posix.h"
40
41
  #include "src/core/lib/iomgr/sockaddr.h"
41
42
  #include "src/core/lib/iomgr/unix_sockets_posix.h"
43
+ #include "src/core/lib/transport/error_utils.h"
44
+
45
+ namespace grpc_core {
46
+ namespace {
47
+
48
+ class NativeDNSRequest : public DNSResolver::Request {
49
+ public:
50
+ NativeDNSRequest(
51
+ absl::string_view name, absl::string_view default_port,
52
+ std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
53
+ on_done)
54
+ : name_(name), default_port_(default_port), on_done_(std::move(on_done)) {
55
+ GRPC_CLOSURE_INIT(&request_closure_, DoRequestThread, this, nullptr);
56
+ }
57
+
58
+ // Starts the resolution
59
+ void Start() override {
60
+ Ref().release(); // ref held by callback
61
+ Executor::Run(&request_closure_, GRPC_ERROR_NONE, ExecutorType::RESOLVER);
62
+ }
63
+
64
+ // This is a no-op for the native resolver. Note
65
+ // that no I/O polling is required for the resolution to finish.
66
+ void Orphan() override { Unref(); }
67
+
68
+ private:
69
+ // Callback to be passed to grpc Executor to asynch-ify
70
+ // ResolveNameBlocking
71
+ static void DoRequestThread(void* rp, grpc_error_handle /*error*/) {
72
+ NativeDNSRequest* r = static_cast<NativeDNSRequest*>(rp);
73
+ auto result =
74
+ GetDNSResolver()->ResolveNameBlocking(r->name_, r->default_port_);
75
+ // running inline is safe since we've already been scheduled on the executor
76
+ r->on_done_(std::move(result));
77
+ r->Unref();
78
+ }
79
+
80
+ const std::string name_;
81
+ const std::string default_port_;
82
+ const std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
83
+ on_done_;
84
+ grpc_closure request_closure_;
85
+ };
42
86
 
43
- static grpc_error_handle posix_blocking_resolve_address(
44
- const char* name, const char* default_port,
45
- grpc_resolved_addresses** addresses) {
46
- grpc_core::ExecCtx exec_ctx;
87
+ } // namespace
88
+
89
+ NativeDNSResolver* NativeDNSResolver::GetOrCreate() {
90
+ static NativeDNSResolver* instance = new NativeDNSResolver();
91
+ return instance;
92
+ }
93
+
94
+ OrphanablePtr<DNSResolver::Request> NativeDNSResolver::ResolveName(
95
+ absl::string_view name, absl::string_view default_port,
96
+ grpc_pollset_set* /* interested_parties */,
97
+ std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
98
+ on_done) {
99
+ return MakeOrphanable<NativeDNSRequest>(name, default_port,
100
+ std::move(on_done));
101
+ }
102
+
103
+ absl::StatusOr<std::vector<grpc_resolved_address>>
104
+ NativeDNSResolver::ResolveNameBlocking(absl::string_view name,
105
+ absl::string_view default_port) {
106
+ ExecCtx exec_ctx;
47
107
  struct addrinfo hints;
48
108
  struct addrinfo *result = nullptr, *resp;
49
109
  int s;
50
110
  size_t i;
51
111
  grpc_error_handle err;
52
-
112
+ std::vector<grpc_resolved_address> addresses;
53
113
  std::string host;
54
114
  std::string port;
55
- /* parse name, splitting it into host and port parts */
56
- grpc_core::SplitHostPort(name, &host, &port);
115
+ // parse name, splitting it into host and port parts
116
+ SplitHostPort(name, &host, &port);
57
117
  if (host.empty()) {
58
118
  err = grpc_error_set_str(
59
119
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("unparseable host:port"),
60
120
  GRPC_ERROR_STR_TARGET_ADDRESS, name);
61
121
  goto done;
62
122
  }
63
-
64
123
  if (port.empty()) {
65
124
  if (default_port == nullptr) {
66
125
  err = grpc_error_set_str(
@@ -68,21 +127,18 @@ static grpc_error_handle posix_blocking_resolve_address(
68
127
  GRPC_ERROR_STR_TARGET_ADDRESS, name);
69
128
  goto done;
70
129
  }
71
- port = default_port;
130
+ port = std::string(default_port);
72
131
  }
73
-
74
- /* Call getaddrinfo */
132
+ // Call getaddrinfo
75
133
  memset(&hints, 0, sizeof(hints));
76
134
  hints.ai_family = AF_UNSPEC; /* ipv4 or ipv6 */
77
135
  hints.ai_socktype = SOCK_STREAM; /* stream socket */
78
136
  hints.ai_flags = AI_PASSIVE; /* for wildcard IP address */
79
-
80
137
  GRPC_SCHEDULING_START_BLOCKING_REGION;
81
138
  s = getaddrinfo(host.c_str(), port.c_str(), &hints, &result);
82
139
  GRPC_SCHEDULING_END_BLOCKING_REGION;
83
-
84
140
  if (s != 0) {
85
- /* Retry if well-known service name is recognized */
141
+ // Retry if well-known service name is recognized
86
142
  const char* svc[][2] = {{"http", "80"}, {"https", "443"}};
87
143
  for (i = 0; i < GPR_ARRAY_SIZE(svc); i++) {
88
144
  if (port == svc[i][0]) {
@@ -93,7 +149,6 @@ static grpc_error_handle posix_blocking_resolve_address(
93
149
  }
94
150
  }
95
151
  }
96
-
97
152
  if (s != 0) {
98
153
  err = grpc_error_set_str(
99
154
  grpc_error_set_str(
@@ -106,65 +161,26 @@ static grpc_error_handle posix_blocking_resolve_address(
106
161
  GRPC_ERROR_STR_TARGET_ADDRESS, name);
107
162
  goto done;
108
163
  }
109
-
110
- /* Success path: set addrs non-NULL, fill it in */
111
- *addresses = static_cast<grpc_resolved_addresses*>(
112
- gpr_malloc(sizeof(grpc_resolved_addresses)));
113
- (*addresses)->naddrs = 0;
114
- for (resp = result; resp != nullptr; resp = resp->ai_next) {
115
- (*addresses)->naddrs++;
116
- }
117
- (*addresses)->addrs = static_cast<grpc_resolved_address*>(
118
- gpr_malloc(sizeof(grpc_resolved_address) * (*addresses)->naddrs));
119
- i = 0;
164
+ // Success path: fill in addrs
120
165
  for (resp = result; resp != nullptr; resp = resp->ai_next) {
121
- memcpy(&(*addresses)->addrs[i].addr, resp->ai_addr, resp->ai_addrlen);
122
- (*addresses)->addrs[i].len = resp->ai_addrlen;
123
- i++;
166
+ grpc_resolved_address addr;
167
+ memcpy(&addr.addr, resp->ai_addr, resp->ai_addrlen);
168
+ addr.len = resp->ai_addrlen;
169
+ addresses.push_back(addr);
124
170
  }
125
171
  err = GRPC_ERROR_NONE;
126
-
127
172
  done:
128
173
  if (result) {
129
174
  freeaddrinfo(result);
130
175
  }
131
- return err;
132
- }
133
-
134
- struct request {
135
- char* name;
136
- char* default_port;
137
- grpc_closure* on_done;
138
- grpc_resolved_addresses** addrs_out;
139
- grpc_closure request_closure;
140
- void* arg;
141
- };
142
- /* Callback to be passed to grpc Executor to asynch-ify
143
- * grpc_blocking_resolve_address */
144
- static void do_request_thread(void* rp, grpc_error_handle /*error*/) {
145
- request* r = static_cast<request*>(rp);
146
- grpc_core::ExecCtx::Run(
147
- DEBUG_LOCATION, r->on_done,
148
- grpc_blocking_resolve_address(r->name, r->default_port, r->addrs_out));
149
- gpr_free(r->name);
150
- gpr_free(r->default_port);
151
- gpr_free(r);
176
+ if (err == GRPC_ERROR_NONE) {
177
+ return addresses;
178
+ }
179
+ auto error_result = grpc_error_to_absl_status(err);
180
+ GRPC_ERROR_UNREF(err);
181
+ return error_result;
152
182
  }
153
183
 
154
- static void posix_resolve_address(const char* name, const char* default_port,
155
- grpc_pollset_set* /*interested_parties*/,
156
- grpc_closure* on_done,
157
- grpc_resolved_addresses** addrs) {
158
- request* r = static_cast<request*>(gpr_malloc(sizeof(request)));
159
- GRPC_CLOSURE_INIT(&r->request_closure, do_request_thread, r, nullptr);
160
- r->name = gpr_strdup(name);
161
- r->default_port = gpr_strdup(default_port);
162
- r->on_done = on_done;
163
- r->addrs_out = addrs;
164
- grpc_core::Executor::Run(&r->request_closure, GRPC_ERROR_NONE,
165
- grpc_core::ExecutorType::RESOLVER);
166
- }
184
+ } // namespace grpc_core
167
185
 
168
- grpc_address_resolver_vtable grpc_posix_resolver_vtable = {
169
- posix_resolve_address, posix_blocking_resolve_address};
170
186
  #endif
@@ -0,0 +1,47 @@
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #ifndef GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_POSIX_H
18
+ #define GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_POSIX_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include <functional>
23
+
24
+ #include "src/core/lib/iomgr/port.h"
25
+ #include "src/core/lib/iomgr/resolve_address.h"
26
+
27
+ namespace grpc_core {
28
+
29
+ // A DNS resolver which uses the native platform's getaddrinfo API.
30
+ class NativeDNSResolver : public DNSResolver {
31
+ public:
32
+ // Gets the singleton instance, creating it first if it doesn't exist
33
+ static NativeDNSResolver* GetOrCreate();
34
+
35
+ OrphanablePtr<DNSResolver::Request> ResolveName(
36
+ absl::string_view name, absl::string_view default_port,
37
+ grpc_pollset_set* interested_parties,
38
+ std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
39
+ on_done) override;
40
+
41
+ absl::StatusOr<std::vector<grpc_resolved_address>> ResolveNameBlocking(
42
+ absl::string_view name, absl::string_view default_port) override;
43
+ };
44
+
45
+ } // namespace grpc_core
46
+
47
+ #endif // GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_POSIX_H
@@ -1,20 +1,18 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #include <grpc/support/port_platform.h>
20
18
 
@@ -43,29 +41,83 @@
43
41
  #include "src/core/lib/iomgr/executor.h"
44
42
  #include "src/core/lib/iomgr/iomgr_internal.h"
45
43
  #include "src/core/lib/iomgr/resolve_address.h"
44
+ #include "src/core/lib/iomgr/resolve_address_windows.h"
46
45
  #include "src/core/lib/iomgr/sockaddr.h"
46
+ #include "src/core/lib/transport/error_utils.h"
47
+
48
+ namespace grpc_core {
49
+ namespace {
50
+
51
+ class NativeDNSRequest : public DNSResolver::Request {
52
+ public:
53
+ NativeDNSRequest(
54
+ absl::string_view name, absl::string_view default_port,
55
+ std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
56
+ on_done)
57
+ : name_(name), default_port_(default_port), on_done_(std::move(on_done)) {
58
+ GRPC_CLOSURE_INIT(&request_closure_, DoRequestThread, this, nullptr);
59
+ }
60
+
61
+ // Starts the resolution
62
+ void Start() override {
63
+ Ref().release(); // ref held by callback
64
+ Executor::Run(&request_closure_, GRPC_ERROR_NONE, ExecutorType::RESOLVER);
65
+ }
66
+
67
+ // This is a no-op for the native resolver. Note
68
+ // that no I/O polling is required for the resolution to finish.
69
+ void Orphan() override { Unref(); }
70
+
71
+ private:
72
+ // Callback to be passed to grpc Executor to asynch-ify
73
+ // ResolveNameBlocking
74
+ static void DoRequestThread(void* rp, grpc_error_handle /*error*/) {
75
+ NativeDNSRequest* r = static_cast<NativeDNSRequest*>(rp);
76
+ auto result =
77
+ GetDNSResolver()->ResolveNameBlocking(r->name_, r->default_port_);
78
+ // running inline is safe since we've already been scheduled on the executor
79
+ r->on_done_(std::move(result));
80
+ r->Unref();
81
+ }
47
82
 
48
- struct request {
49
- char* name;
50
- char* default_port;
51
- grpc_closure request_closure;
52
- grpc_closure* on_done;
53
- grpc_resolved_addresses** addresses;
83
+ const std::string name_;
84
+ const std::string default_port_;
85
+ const std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
86
+ on_done_;
87
+ grpc_closure request_closure_;
54
88
  };
55
- static grpc_error_handle windows_blocking_resolve_address(
56
- const char* name, const char* default_port,
57
- grpc_resolved_addresses** addresses) {
58
- grpc_core::ExecCtx exec_ctx;
89
+
90
+ } // namespace
91
+
92
+ NativeDNSResolver* NativeDNSResolver::GetOrCreate() {
93
+ static NativeDNSResolver* instance = new NativeDNSResolver();
94
+ return instance;
95
+ }
96
+
97
+ OrphanablePtr<DNSResolver::Request> NativeDNSResolver::ResolveName(
98
+ absl::string_view name, absl::string_view default_port,
99
+ grpc_pollset_set* /* interested_parties */,
100
+ std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
101
+ on_done) {
102
+ return MakeOrphanable<NativeDNSRequest>(name, default_port,
103
+ std::move(on_done));
104
+ }
105
+
106
+ absl::StatusOr<std::vector<grpc_resolved_address>>
107
+ NativeDNSResolver::ResolveNameBlocking(absl::string_view name,
108
+ absl::string_view default_port) {
109
+ ExecCtx exec_ctx;
59
110
  struct addrinfo hints;
60
111
  struct addrinfo *result = NULL, *resp;
61
112
  int s;
62
113
  size_t i;
63
114
  grpc_error_handle error = GRPC_ERROR_NONE;
115
+ std::vector<grpc_resolved_address> addresses;
64
116
 
65
- /* parse name, splitting it into host and port parts */
117
+ // parse name, splitting it into host and port parts
66
118
  std::string host;
67
119
  std::string port;
68
- grpc_core::SplitHostPort(name, &host, &port);
120
+ SplitHostPort(name, &host, &port);
69
121
  if (host.empty()) {
70
122
  error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
71
123
  absl::StrFormat("unparseable host:port: '%s'", name));
@@ -77,10 +129,10 @@ static grpc_error_handle windows_blocking_resolve_address(
77
129
  absl::StrFormat("no port in name '%s'", name));
78
130
  goto done;
79
131
  }
80
- port = default_port;
132
+ port = std::string(default_port);
81
133
  }
82
134
 
83
- /* Call getaddrinfo */
135
+ // Call getaddrinfo
84
136
  memset(&hints, 0, sizeof(hints));
85
137
  hints.ai_family = AF_UNSPEC; /* ipv4 or ipv6 */
86
138
  hints.ai_socktype = SOCK_STREAM; /* stream socket */
@@ -94,59 +146,26 @@ static grpc_error_handle windows_blocking_resolve_address(
94
146
  goto done;
95
147
  }
96
148
 
97
- /* Success path: set addrs non-NULL, fill it in */
98
- (*addresses) =
99
- (grpc_resolved_addresses*)gpr_malloc(sizeof(grpc_resolved_addresses));
100
- (*addresses)->naddrs = 0;
101
- for (resp = result; resp != NULL; resp = resp->ai_next) {
102
- (*addresses)->naddrs++;
103
- }
104
- (*addresses)->addrs = (grpc_resolved_address*)gpr_malloc(
105
- sizeof(grpc_resolved_address) * (*addresses)->naddrs);
106
- i = 0;
149
+ // Success path: set addrs non-NULL, fill it in
107
150
  for (resp = result; resp != NULL; resp = resp->ai_next) {
108
- memcpy(&(*addresses)->addrs[i].addr, resp->ai_addr, resp->ai_addrlen);
109
- (*addresses)->addrs[i].len = resp->ai_addrlen;
110
- i++;
151
+ grpc_resolved_address addr;
152
+ memcpy(&addr.addr, resp->ai_addr, resp->ai_addrlen);
153
+ addr.len = resp->ai_addrlen;
154
+ addresses.push_back(addr);
111
155
  }
112
156
 
113
157
  done:
114
158
  if (result) {
115
159
  freeaddrinfo(result);
116
160
  }
117
- return error;
118
- }
119
-
120
- /* Callback to be passed to grpc_executor to asynch-ify
121
- * grpc_blocking_resolve_address */
122
- static void do_request_thread(void* rp, grpc_error_handle error) {
123
- request* r = (request*)rp;
124
161
  if (error == GRPC_ERROR_NONE) {
125
- error =
126
- grpc_blocking_resolve_address(r->name, r->default_port, r->addresses);
127
- } else {
128
- GRPC_ERROR_REF(error);
162
+ return addresses;
129
163
  }
130
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, r->on_done, error);
131
- gpr_free(r->name);
132
- gpr_free(r->default_port);
133
- gpr_free(r);
164
+ auto error_result = grpc_error_to_absl_status(error);
165
+ GRPC_ERROR_UNREF(error);
166
+ return error_result;
134
167
  }
135
168
 
136
- static void windows_resolve_address(const char* name, const char* default_port,
137
- grpc_pollset_set* interested_parties,
138
- grpc_closure* on_done,
139
- grpc_resolved_addresses** addresses) {
140
- request* r = (request*)gpr_malloc(sizeof(request));
141
- GRPC_CLOSURE_INIT(&r->request_closure, do_request_thread, r, nullptr);
142
- r->name = gpr_strdup(name);
143
- r->default_port = gpr_strdup(default_port);
144
- r->on_done = on_done;
145
- r->addresses = addresses;
146
- grpc_core::Executor::Run(&r->request_closure, GRPC_ERROR_NONE,
147
- grpc_core::ExecutorType::RESOLVER);
148
- }
169
+ } // namespace grpc_core
149
170
 
150
- grpc_address_resolver_vtable grpc_windows_resolver_vtable = {
151
- windows_resolve_address, windows_blocking_resolve_address};
152
171
  #endif
@@ -0,0 +1,47 @@
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #ifndef GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_WINDOWS_H
18
+ #define GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_WINDOWS_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include <functional>
23
+
24
+ #include "src/core/lib/iomgr/port.h"
25
+ #include "src/core/lib/iomgr/resolve_address.h"
26
+
27
+ namespace grpc_core {
28
+
29
+ // A DNS resolver which uses the native platform's getaddrinfo API.
30
+ class NativeDNSResolver : public DNSResolver {
31
+ public:
32
+ // Gets the singleton instance, creating it first if it doesn't exist
33
+ static NativeDNSResolver* GetOrCreate();
34
+
35
+ OrphanablePtr<DNSResolver::Request> ResolveName(
36
+ absl::string_view name, absl::string_view default_port,
37
+ grpc_pollset_set* interested_parties,
38
+ std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
39
+ on_done) override;
40
+
41
+ absl::StatusOr<std::vector<grpc_resolved_address>> ResolveNameBlocking(
42
+ absl::string_view name, absl::string_view default_port) override;
43
+ };
44
+
45
+ } // namespace grpc_core
46
+
47
+ #endif // GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_WINDOWS_H
@@ -0,0 +1,39 @@
1
+ // Copyright 2021 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_CORE_LIB_IOMGR_RESOLVED_ADDRESS_H
16
+ #define GRPC_CORE_LIB_IOMGR_RESOLVED_ADDRESS_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include <stddef.h>
21
+
22
+ #include "src/core/lib/iomgr/port.h"
23
+
24
+ #ifdef GRPC_WINSOCK_SOCKET
25
+ #include <ws2tcpip.h>
26
+ #endif
27
+
28
+ #if defined(GRPC_POSIX_SOCKET) || defined(GRPC_CFSTREAM)
29
+ #include <sys/socket.h>
30
+ #endif
31
+
32
+ #define GRPC_MAX_SOCKADDR_SIZE 128
33
+
34
+ struct grpc_resolved_address {
35
+ char addr[GRPC_MAX_SOCKADDR_SIZE];
36
+ socklen_t len;
37
+ };
38
+
39
+ #endif /* GRPC_CORE_LIB_IOMGR_RESOLVED_ADDRESS_H */
@@ -26,6 +26,7 @@
26
26
  #include <limits.h>
27
27
  #include <stdio.h>
28
28
  #include <string.h>
29
+ #include <sys/socket.h>
29
30
 
30
31
  #include <string>
31
32
 
@@ -26,6 +26,7 @@
26
26
  #include <ifaddrs.h>
27
27
  #include <stddef.h>
28
28
  #include <string.h>
29
+ #include <sys/socket.h>
29
30
 
30
31
  #include <string>
31
32
 
@@ -35,29 +35,35 @@
35
35
  #include "src/core/lib/gpr/useful.h"
36
36
  #include "src/core/lib/iomgr/sockaddr.h"
37
37
  #include "src/core/lib/iomgr/unix_sockets_posix.h"
38
+ #include "src/core/lib/transport/error_utils.h"
38
39
 
39
40
  void grpc_create_socketpair_if_unix(int sv[2]) {
40
41
  GPR_ASSERT(socketpair(AF_UNIX, SOCK_STREAM, 0, sv) == 0);
41
42
  }
42
43
 
43
- grpc_error_handle grpc_resolve_unix_domain_address(
44
- absl::string_view name, grpc_resolved_addresses** addresses) {
45
- *addresses = static_cast<grpc_resolved_addresses*>(
46
- gpr_malloc(sizeof(grpc_resolved_addresses)));
47
- (*addresses)->naddrs = 1;
48
- (*addresses)->addrs = static_cast<grpc_resolved_address*>(
49
- gpr_malloc(sizeof(grpc_resolved_address)));
50
- return grpc_core::UnixSockaddrPopulate(name, (*addresses)->addrs);
44
+ absl::StatusOr<std::vector<grpc_resolved_address>>
45
+ grpc_resolve_unix_domain_address(absl::string_view name) {
46
+ grpc_resolved_address addr;
47
+ grpc_error_handle error = grpc_core::UnixSockaddrPopulate(name, &addr);
48
+ if (error == GRPC_ERROR_NONE) {
49
+ return std::vector<grpc_resolved_address>({addr});
50
+ }
51
+ auto result = grpc_error_to_absl_status(error);
52
+ GRPC_ERROR_UNREF(error);
53
+ return result;
51
54
  }
52
55
 
53
- grpc_error_handle grpc_resolve_unix_abstract_domain_address(
54
- const absl::string_view name, grpc_resolved_addresses** addresses) {
55
- *addresses = static_cast<grpc_resolved_addresses*>(
56
- gpr_malloc(sizeof(grpc_resolved_addresses)));
57
- (*addresses)->naddrs = 1;
58
- (*addresses)->addrs = static_cast<grpc_resolved_address*>(
59
- gpr_malloc(sizeof(grpc_resolved_address)));
60
- return grpc_core::UnixAbstractSockaddrPopulate(name, (*addresses)->addrs);
56
+ absl::StatusOr<std::vector<grpc_resolved_address>>
57
+ grpc_resolve_unix_abstract_domain_address(const absl::string_view name) {
58
+ grpc_resolved_address addr;
59
+ grpc_error_handle error =
60
+ grpc_core::UnixAbstractSockaddrPopulate(name, &addr);
61
+ if (error == GRPC_ERROR_NONE) {
62
+ return std::vector<grpc_resolved_address>({addr});
63
+ }
64
+ auto result = grpc_error_to_absl_status(error);
65
+ GRPC_ERROR_UNREF(error);
66
+ return result;
61
67
  }
62
68
 
63
69
  int grpc_is_unix_socket(const grpc_resolved_address* resolved_addr) {
@@ -87,22 +93,4 @@ void grpc_unlink_if_unix_domain_socket(
87
93
  }
88
94
  }
89
95
 
90
- std::string grpc_sockaddr_to_uri_unix_if_possible(
91
- const grpc_resolved_address* resolved_addr) {
92
- const grpc_sockaddr* addr =
93
- reinterpret_cast<const grpc_sockaddr*>(resolved_addr->addr);
94
- if (addr->sa_family != AF_UNIX) {
95
- return "";
96
- }
97
- const auto* unix_addr = reinterpret_cast<const struct sockaddr_un*>(addr);
98
- if (unix_addr->sun_path[0] == '\0' && unix_addr->sun_path[1] != '\0') {
99
- return absl::StrCat(
100
- "unix-abstract:",
101
- absl::string_view(
102
- unix_addr->sun_path + 1,
103
- resolved_addr->len - sizeof(unix_addr->sun_family) - 1));
104
- }
105
- return absl::StrCat("unix:", unix_addr->sun_path);
106
- }
107
-
108
96
  #endif
@@ -32,18 +32,15 @@
32
32
 
33
33
  void grpc_create_socketpair_if_unix(int sv[2]);
34
34
 
35
- grpc_error_handle grpc_resolve_unix_domain_address(
36
- absl::string_view name, grpc_resolved_addresses** addresses);
35
+ absl::StatusOr<std::vector<grpc_resolved_address>>
36
+ grpc_resolve_unix_domain_address(absl::string_view name);
37
37
 
38
- grpc_error_handle grpc_resolve_unix_abstract_domain_address(
39
- absl::string_view name, grpc_resolved_addresses** addresses);
38
+ absl::StatusOr<std::vector<grpc_resolved_address>>
39
+ grpc_resolve_unix_abstract_domain_address(absl::string_view name);
40
40
 
41
41
  int grpc_is_unix_socket(const grpc_resolved_address* resolved_addr);
42
42
 
43
43
  void grpc_unlink_if_unix_domain_socket(
44
44
  const grpc_resolved_address* resolved_addr);
45
45
 
46
- std::string grpc_sockaddr_to_uri_unix_if_possible(
47
- const grpc_resolved_address* resolved_addr);
48
-
49
46
  #endif /* GRPC_CORE_LIB_IOMGR_UNIX_SOCKETS_POSIX_H */