grpc 1.30.2 → 1.31.0.pre1

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 (317) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +560 -619
  3. data/include/grpc/grpc_security_constants.h +3 -0
  4. data/include/grpc/impl/codegen/grpc_types.h +7 -5
  5. data/include/grpc/impl/codegen/port_platform.h +0 -32
  6. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
  7. data/src/core/ext/filters/client_channel/client_channel.cc +406 -265
  8. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  9. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  10. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  11. data/src/core/ext/filters/client_channel/health/health_check_client.cc +2 -0
  12. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
  13. data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
  14. data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +39 -23
  16. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
  17. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +376 -68
  18. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
  19. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
  20. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
  22. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
  23. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
  24. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -48
  25. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  26. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +21 -18
  27. data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
  28. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
  29. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +33 -28
  30. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
  31. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  32. data/src/core/ext/filters/client_channel/subchannel.cc +1 -1
  33. data/src/core/ext/filters/client_channel/xds/xds_api.cc +327 -123
  34. data/src/core/ext/filters/client_channel/xds/xds_api.h +72 -7
  35. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +12 -23
  36. data/src/core/ext/filters/client_channel/xds/xds_client.cc +112 -33
  37. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +10 -10
  38. data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
  39. data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
  40. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
  41. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  42. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
  43. data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
  44. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +383 -347
  45. data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
  46. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
  47. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
  48. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
  49. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +19 -4
  50. data/src/core/ext/transport/chttp2/transport/flow_control.cc +22 -27
  51. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  52. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  53. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  54. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  55. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  56. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
  57. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  59. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  60. data/src/core/ext/transport/chttp2/transport/internal.h +13 -0
  61. data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
  62. data/src/core/ext/transport/chttp2/transport/writing.cc +9 -14
  63. data/src/core/ext/transport/inproc/inproc_transport.cc +35 -15
  64. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  65. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  66. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -1
  67. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +80 -69
  68. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +24 -23
  69. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +66 -56
  70. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
  71. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +2 -2
  72. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +317 -311
  73. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
  74. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
  75. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
  76. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
  77. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +9 -8
  78. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +1 -1
  79. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +163 -169
  80. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
  81. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +4 -5
  82. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
  83. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +137 -117
  84. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
  85. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +105 -87
  86. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +12 -13
  87. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -1
  88. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
  89. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
  90. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -1
  91. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
  92. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
  93. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +49 -42
  94. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
  95. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
  96. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +81 -65
  97. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
  98. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +1 -1
  99. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
  100. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
  101. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
  102. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
  103. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
  104. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +7 -7
  105. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +648 -696
  106. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
  107. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
  108. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -1
  109. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
  110. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +234 -199
  111. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
  112. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +13 -13
  113. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
  114. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +20 -18
  115. data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
  116. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +18 -17
  117. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
  118. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
  119. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
  120. data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
  121. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
  122. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
  123. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  124. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  125. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  126. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  127. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +3 -3
  128. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
  129. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  130. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  131. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  132. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
  133. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  134. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  135. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  136. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  137. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  138. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  139. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  140. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  141. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  142. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  143. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  144. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  145. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
  146. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  147. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  148. data/src/core/ext/upb-generated/validate/validate.upb.h +536 -535
  149. data/src/core/lib/channel/channel_trace.cc +2 -6
  150. data/src/core/lib/channel/channelz.cc +5 -15
  151. data/src/core/lib/gpr/log_linux.cc +6 -8
  152. data/src/core/lib/gpr/log_posix.cc +6 -8
  153. data/src/core/lib/gpr/string.cc +10 -9
  154. data/src/core/lib/gpr/string.h +4 -2
  155. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  156. data/src/core/lib/http/httpcli.cc +13 -10
  157. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  158. data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
  159. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  160. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  161. data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
  162. data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
  163. data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
  164. data/src/core/lib/iomgr/ev_posix.cc +2 -0
  165. data/src/core/lib/iomgr/iomgr.cc +10 -0
  166. data/src/core/lib/iomgr/iomgr.h +10 -0
  167. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  168. data/src/core/lib/iomgr/port.h +1 -21
  169. data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
  170. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
  171. data/src/core/lib/iomgr/resource_quota.cc +34 -31
  172. data/src/core/lib/iomgr/sockaddr_utils.cc +7 -5
  173. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  174. data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
  175. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  176. data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
  177. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  178. data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
  179. data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
  180. data/src/core/lib/iomgr/tcp_custom.cc +1 -1
  181. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  182. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  183. data/src/core/lib/iomgr/tcp_server.h +7 -5
  184. data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
  185. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
  186. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  187. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
  188. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
  189. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  190. data/src/core/lib/iomgr/timer_generic.cc +13 -12
  191. data/src/core/lib/iomgr/udp_server.cc +24 -23
  192. data/src/core/lib/iomgr/udp_server.h +5 -2
  193. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  194. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  195. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  196. data/src/core/lib/json/json_reader.cc +20 -21
  197. data/src/core/lib/security/credentials/credentials.h +5 -3
  198. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  199. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -9
  200. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  201. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
  202. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
  203. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  204. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  205. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
  206. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +10 -10
  207. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  208. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  209. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
  210. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
  211. data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
  212. data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
  213. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
  214. data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
  215. data/src/core/lib/security/util/json_util.cc +12 -13
  216. data/src/core/lib/slice/slice.cc +38 -1
  217. data/src/core/lib/slice/slice_internal.h +1 -0
  218. data/src/core/lib/surface/call.cc +40 -41
  219. data/src/core/lib/surface/completion_queue.cc +271 -14
  220. data/src/core/lib/surface/completion_queue.h +8 -0
  221. data/src/core/lib/surface/init.cc +2 -0
  222. data/src/core/lib/surface/server.cc +565 -632
  223. data/src/core/lib/surface/server.h +34 -12
  224. data/src/core/lib/surface/version.cc +2 -2
  225. data/src/core/lib/transport/transport.h +6 -0
  226. data/src/core/lib/uri/uri_parser.cc +8 -15
  227. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  228. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
  229. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -0
  230. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  231. data/src/core/tsi/ssl_transport_security.cc +102 -11
  232. data/src/core/tsi/ssl_transport_security.h +14 -2
  233. data/src/core/tsi/transport_security_interface.h +5 -0
  234. data/src/ruby/ext/grpc/extconf.rb +5 -2
  235. data/src/ruby/ext/grpc/rb_call.c +3 -2
  236. data/src/ruby/ext/grpc/rb_call.h +4 -0
  237. data/src/ruby/ext/grpc/rb_call_credentials.c +54 -10
  238. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  239. data/src/ruby/lib/grpc/version.rb +1 -1
  240. data/third_party/boringssl-with-bazel/err_data.c +89 -83
  241. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  242. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  243. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  244. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  245. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  246. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  247. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  248. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  249. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  250. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  251. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  252. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  253. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  254. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  255. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  265. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
  266. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  267. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  268. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
  269. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
  270. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
  271. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  272. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  273. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  274. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  275. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  276. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  277. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
  278. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  279. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
  280. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  281. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  282. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  283. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  284. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  286. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  287. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  288. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
  289. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  290. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +33 -16
  291. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
  292. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +789 -715
  293. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
  294. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
  295. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
  296. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
  297. data/third_party/boringssl-with-bazel/src/ssl/internal.h +17 -14
  298. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
  299. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +28 -0
  300. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
  301. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  302. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
  303. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
  304. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +12 -9
  305. data/third_party/upb/upb/decode.c +467 -504
  306. data/third_party/upb/upb/encode.c +163 -121
  307. data/third_party/upb/upb/msg.c +130 -64
  308. data/third_party/upb/upb/msg.h +418 -14
  309. data/third_party/upb/upb/port_def.inc +35 -6
  310. data/third_party/upb/upb/port_undef.inc +8 -1
  311. data/third_party/upb/upb/table.c +53 -75
  312. data/third_party/upb/upb/table.int.h +11 -43
  313. data/third_party/upb/upb/upb.c +148 -124
  314. data/third_party/upb/upb/upb.h +65 -147
  315. data/third_party/upb/upb/upb.hpp +86 -0
  316. metadata +40 -37
  317. data/third_party/upb/upb/generated_util.h +0 -105
@@ -24,11 +24,13 @@
24
24
  #include <inttypes.h>
25
25
  #include <string.h>
26
26
 
27
+ #include <string>
28
+
29
+ #include "absl/strings/str_cat.h"
27
30
  #include "absl/strings/str_format.h"
28
31
 
29
32
  #include <grpc/support/alloc.h>
30
33
  #include <grpc/support/log.h>
31
- #include <grpc/support/string_util.h>
32
34
 
33
35
  #include "src/core/lib/gpr/string.h"
34
36
  #include "src/core/lib/gprpp/host_port.h"
@@ -212,8 +214,8 @@ void grpc_string_to_sockaddr(grpc_resolved_address* out, char* addr, int port) {
212
214
  grpc_sockaddr_set_port(out, port);
213
215
  }
214
216
 
215
- char* grpc_sockaddr_to_uri(const grpc_resolved_address* resolved_addr) {
216
- if (resolved_addr->len == 0) return nullptr;
217
+ std::string grpc_sockaddr_to_uri(const grpc_resolved_address* resolved_addr) {
218
+ if (resolved_addr->len == 0) return "";
217
219
  grpc_resolved_address addr_normalized;
218
220
  if (grpc_sockaddr_is_v4mapped(resolved_addr, &addr_normalized)) {
219
221
  resolved_addr = &addr_normalized;
@@ -224,9 +226,9 @@ char* grpc_sockaddr_to_uri(const grpc_resolved_address* resolved_addr) {
224
226
  }
225
227
  std::string path =
226
228
  grpc_sockaddr_to_string(resolved_addr, false /* normalize */);
227
- char* uri_str = nullptr;
229
+ std::string uri_str;
228
230
  if (scheme != nullptr) {
229
- gpr_asprintf(&uri_str, "%s:%s", scheme, path.c_str());
231
+ uri_str = absl::StrCat(scheme, ":", path);
230
232
  }
231
233
  return uri_str;
232
234
  }
@@ -69,7 +69,7 @@ std::string grpc_sockaddr_to_string(const grpc_resolved_address* addr,
69
69
  void grpc_string_to_sockaddr(grpc_resolved_address* out, char* addr, int port);
70
70
 
71
71
  /* Returns the URI string corresponding to \a addr */
72
- char* grpc_sockaddr_to_uri(const grpc_resolved_address* addr);
72
+ std::string grpc_sockaddr_to_uri(const grpc_resolved_address* addr);
73
73
 
74
74
  /* Returns the URI scheme corresponding to \a addr */
75
75
  const char* grpc_sockaddr_get_uri_scheme(const grpc_resolved_address* addr);
@@ -260,6 +260,27 @@ static int g_default_server_tcp_user_timeout_ms =
260
260
  static bool g_default_client_tcp_user_timeout_enabled = false;
261
261
  static bool g_default_server_tcp_user_timeout_enabled = true;
262
262
 
263
+ #if GPR_LINUX == 1
264
+ // For Linux, it will be detected to support TCP_USER_TIMEOUT
265
+ #ifndef TCP_USER_TIMEOUT
266
+ #define TCP_USER_TIMEOUT 18
267
+ #endif
268
+ #define SOCKET_SUPPORTS_TCP_USER_TIMEOUT_DEFAULT 0
269
+ #else
270
+ // For non-Linux, TCP_USER_TIMEOUT will be used if TCP_USER_TIMEOUT is defined.
271
+ #ifdef TCP_USER_TIMEOUT
272
+ #define SOCKET_SUPPORTS_TCP_USER_TIMEOUT_DEFAULT 0
273
+ #else
274
+ #define TCP_USER_TIMEOUT 0
275
+ #define SOCKET_SUPPORTS_TCP_USER_TIMEOUT_DEFAULT -1
276
+ #endif // TCP_USER_TIMEOUT
277
+ #endif // GPR_LINUX == 1
278
+
279
+ // Whether the socket supports TCP_USER_TIMEOUT option.
280
+ // (0: don't know, 1: support, -1: not support)
281
+ static std::atomic<int> g_socket_supports_tcp_user_timeout(
282
+ SOCKET_SUPPORTS_TCP_USER_TIMEOUT_DEFAULT);
283
+
263
284
  void config_default_tcp_user_timeout(bool enable, int timeout, bool is_client) {
264
285
  if (is_client) {
265
286
  g_default_client_tcp_user_timeout_enabled = enable;
@@ -281,68 +302,87 @@ grpc_error* grpc_set_socket_tcp_user_timeout(
281
302
  (void)fd;
282
303
  (void)channel_args;
283
304
  (void)is_client;
284
- #ifdef GRPC_HAVE_TCP_USER_TIMEOUT
285
- bool enable;
286
- int timeout;
287
- if (is_client) {
288
- enable = g_default_client_tcp_user_timeout_enabled;
289
- timeout = g_default_client_tcp_user_timeout_ms;
290
- } else {
291
- enable = g_default_server_tcp_user_timeout_enabled;
292
- timeout = g_default_server_tcp_user_timeout_ms;
293
- }
294
- if (channel_args) {
295
- for (unsigned int i = 0; i < channel_args->num_args; i++) {
296
- if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_KEEPALIVE_TIME_MS)) {
297
- const int value = grpc_channel_arg_get_integer(
298
- &channel_args->args[i], grpc_integer_options{0, 1, INT_MAX});
299
- /* Continue using default if value is 0 */
300
- if (value == 0) {
301
- continue;
305
+ extern grpc_core::TraceFlag grpc_tcp_trace;
306
+ if (g_socket_supports_tcp_user_timeout.load() >= 0) {
307
+ bool enable;
308
+ int timeout;
309
+ if (is_client) {
310
+ enable = g_default_client_tcp_user_timeout_enabled;
311
+ timeout = g_default_client_tcp_user_timeout_ms;
312
+ } else {
313
+ enable = g_default_server_tcp_user_timeout_enabled;
314
+ timeout = g_default_server_tcp_user_timeout_ms;
315
+ }
316
+ if (channel_args) {
317
+ for (unsigned int i = 0; i < channel_args->num_args; i++) {
318
+ if (0 ==
319
+ strcmp(channel_args->args[i].key, GRPC_ARG_KEEPALIVE_TIME_MS)) {
320
+ const int value = grpc_channel_arg_get_integer(
321
+ &channel_args->args[i], grpc_integer_options{0, 1, INT_MAX});
322
+ /* Continue using default if value is 0 */
323
+ if (value == 0) {
324
+ continue;
325
+ }
326
+ /* Disable if value is INT_MAX */
327
+ enable = value != INT_MAX;
328
+ } else if (0 == strcmp(channel_args->args[i].key,
329
+ GRPC_ARG_KEEPALIVE_TIMEOUT_MS)) {
330
+ const int value = grpc_channel_arg_get_integer(
331
+ &channel_args->args[i], grpc_integer_options{0, 1, INT_MAX});
332
+ /* Continue using default if value is 0 */
333
+ if (value == 0) {
334
+ continue;
335
+ }
336
+ timeout = value;
302
337
  }
303
- /* Disable if value is INT_MAX */
304
- enable = value != INT_MAX;
305
- } else if (0 == strcmp(channel_args->args[i].key,
306
- GRPC_ARG_KEEPALIVE_TIMEOUT_MS)) {
307
- const int value = grpc_channel_arg_get_integer(
308
- &channel_args->args[i], grpc_integer_options{0, 1, INT_MAX});
309
- /* Continue using default if value is 0 */
310
- if (value == 0) {
311
- continue;
338
+ }
339
+ }
340
+ if (enable) {
341
+ int newval;
342
+ socklen_t len = sizeof(newval);
343
+ // If this is the first time to use TCP_USER_TIMEOUT, try to check
344
+ // if it is available.
345
+ if (g_socket_supports_tcp_user_timeout.load() == 0) {
346
+ if (0 != getsockopt(fd, IPPROTO_TCP, TCP_USER_TIMEOUT, &newval, &len)) {
347
+ gpr_log(GPR_INFO,
348
+ "TCP_USER_TIMEOUT is not available. TCP_USER_TIMEOUT won't "
349
+ "be used thereafter");
350
+ g_socket_supports_tcp_user_timeout.store(-1);
351
+ } else {
352
+ gpr_log(GPR_INFO,
353
+ "TCP_USER_TIMEOUT is available. TCP_USER_TIMEOUT will be "
354
+ "used thereafter");
355
+ g_socket_supports_tcp_user_timeout.store(1);
356
+ }
357
+ }
358
+ if (g_socket_supports_tcp_user_timeout.load() > 0) {
359
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
360
+ gpr_log(GPR_INFO, "Enabling TCP_USER_TIMEOUT with a timeout of %d ms",
361
+ timeout);
362
+ }
363
+ if (0 != setsockopt(fd, IPPROTO_TCP, TCP_USER_TIMEOUT, &timeout,
364
+ sizeof(timeout))) {
365
+ gpr_log(GPR_ERROR, "setsockopt(TCP_USER_TIMEOUT) %s",
366
+ strerror(errno));
367
+ return GRPC_ERROR_NONE;
368
+ }
369
+ if (0 != getsockopt(fd, IPPROTO_TCP, TCP_USER_TIMEOUT, &newval, &len)) {
370
+ gpr_log(GPR_ERROR, "getsockopt(TCP_USER_TIMEOUT) %s",
371
+ strerror(errno));
372
+ return GRPC_ERROR_NONE;
373
+ }
374
+ if (newval != timeout) {
375
+ /* Do not fail on failing to set TCP_USER_TIMEOUT for now. */
376
+ gpr_log(GPR_ERROR, "Failed to set TCP_USER_TIMEOUT");
377
+ return GRPC_ERROR_NONE;
312
378
  }
313
- timeout = value;
314
379
  }
315
380
  }
316
- }
317
- if (enable) {
318
- extern grpc_core::TraceFlag grpc_tcp_trace;
381
+ } else {
319
382
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
320
- gpr_log(GPR_INFO, "Enabling TCP_USER_TIMEOUT with a timeout of %d ms",
321
- timeout);
322
- }
323
- int newval;
324
- socklen_t len = sizeof(newval);
325
- if (0 != setsockopt(fd, IPPROTO_TCP, TCP_USER_TIMEOUT, &timeout,
326
- sizeof(timeout))) {
327
- gpr_log(GPR_ERROR, "setsockopt(TCP_USER_TIMEOUT) %s", strerror(errno));
328
- return GRPC_ERROR_NONE;
383
+ gpr_log(GPR_INFO, "TCP_USER_TIMEOUT not supported for this platform");
329
384
  }
330
- if (0 != getsockopt(fd, IPPROTO_TCP, TCP_USER_TIMEOUT, &newval, &len)) {
331
- gpr_log(GPR_ERROR, "getsockopt(TCP_USER_TIMEOUT) %s", strerror(errno));
332
- return GRPC_ERROR_NONE;
333
- }
334
- if (newval != timeout) {
335
- /* Do not fail on failing to set TCP_USER_TIMEOUT for now. */
336
- gpr_log(GPR_ERROR, "Failed to set TCP_USER_TIMEOUT");
337
- return GRPC_ERROR_NONE;
338
- }
339
- }
340
- #else
341
- extern grpc_core::TraceFlag grpc_tcp_trace;
342
- if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
343
- gpr_log(GPR_INFO, "TCP_USER_TIMEOUT not supported for this platform");
344
385
  }
345
- #endif /* GRPC_HAVE_TCP_USER_TIMEOUT */
346
386
  return GRPC_ERROR_NONE;
347
387
  }
348
388
 
@@ -27,10 +27,11 @@
27
27
  // must be included after winsock2.h
28
28
  #include <mswsock.h>
29
29
 
30
+ #include "absl/strings/str_format.h"
31
+
30
32
  #include <grpc/support/alloc.h>
31
33
  #include <grpc/support/log.h>
32
34
  #include <grpc/support/log_windows.h>
33
- #include <grpc/support/string_util.h>
34
35
 
35
36
  #include "src/core/lib/iomgr/iocp_windows.h"
36
37
  #include "src/core/lib/iomgr/iomgr_internal.h"
@@ -42,14 +43,12 @@
42
43
  static DWORD s_wsa_socket_flags;
43
44
 
44
45
  grpc_winsocket* grpc_winsocket_create(SOCKET socket, const char* name) {
45
- char* final_name;
46
46
  grpc_winsocket* r = (grpc_winsocket*)gpr_malloc(sizeof(grpc_winsocket));
47
47
  memset(r, 0, sizeof(grpc_winsocket));
48
48
  r->socket = socket;
49
49
  gpr_mu_init(&r->state_mu);
50
- gpr_asprintf(&final_name, "%s:socket=0x%p", name, r);
51
- grpc_iomgr_register_object(&r->iomgr_object, final_name);
52
- gpr_free(final_name);
50
+ grpc_iomgr_register_object(
51
+ &r->iomgr_object, absl::StrFormat("%s:socket=0x%p", name, r).c_str());
53
52
  grpc_iocp_add_socket(r);
54
53
  return r;
55
54
  }
@@ -46,7 +46,7 @@
46
46
 
47
47
  extern grpc_core::TraceFlag grpc_tcp_trace;
48
48
 
49
- typedef struct CFStreamConnect {
49
+ struct CFStreamConnect {
50
50
  gpr_mu mu;
51
51
  gpr_refcount refcount;
52
52
 
@@ -65,9 +65,9 @@ typedef struct CFStreamConnect {
65
65
  grpc_closure* closure;
66
66
  grpc_endpoint** endpoint;
67
67
  int refs;
68
- char* addr_name;
68
+ std::string addr_name;
69
69
  grpc_resource_quota* resource_quota;
70
- } CFStreamConnect;
70
+ };
71
71
 
72
72
  static void CFStreamConnectCleanup(CFStreamConnect* connect) {
73
73
  grpc_resource_quota_unref_internal(connect->resource_quota);
@@ -75,8 +75,7 @@ static void CFStreamConnectCleanup(CFStreamConnect* connect) {
75
75
  CFRelease(connect->read_stream);
76
76
  CFRelease(connect->write_stream);
77
77
  gpr_mu_destroy(&connect->mu);
78
- gpr_free(connect->addr_name);
79
- gpr_free(connect);
78
+ delete connect;
80
79
  }
81
80
 
82
81
  static void OnAlarm(void* arg, grpc_error* error) {
@@ -130,8 +129,9 @@ static void OnOpen(void* arg, grpc_error* error) {
130
129
  }
131
130
  if (error == GRPC_ERROR_NONE) {
132
131
  *endpoint = grpc_cfstream_endpoint_create(
133
- connect->read_stream, connect->write_stream, connect->addr_name,
134
- connect->resource_quota, connect->stream_handle);
132
+ connect->read_stream, connect->write_stream,
133
+ connect->addr_name.c_str(), connect->resource_quota,
134
+ connect->stream_handle);
135
135
  }
136
136
  } else {
137
137
  GRPC_ERROR_REF(error);
@@ -157,9 +157,7 @@ static void CFStreamClientConnect(grpc_closure* closure, grpc_endpoint** ep,
157
157
  const grpc_channel_args* channel_args,
158
158
  const grpc_resolved_address* resolved_addr,
159
159
  grpc_millis deadline) {
160
- CFStreamConnect* connect;
161
-
162
- connect = (CFStreamConnect*)gpr_zalloc(sizeof(CFStreamConnect));
160
+ CFStreamConnect* connect = new CFStreamConnect();
163
161
  connect->closure = closure;
164
162
  connect->endpoint = ep;
165
163
  connect->addr_name = grpc_sockaddr_to_uri(resolved_addr);
@@ -170,7 +168,7 @@ static void CFStreamClientConnect(grpc_closure* closure, grpc_endpoint** ep,
170
168
 
171
169
  if (grpc_tcp_trace.enabled()) {
172
170
  gpr_log(GPR_DEBUG, "CLIENT_CONNECT: %p, %s: asynchronously connecting",
173
- connect, connect->addr_name);
171
+ connect, connect->addr_name.c_str());
174
172
  }
175
173
 
176
174
  grpc_resource_quota* resource_quota = grpc_resource_quota_create(NULL);
@@ -42,15 +42,14 @@ struct grpc_custom_tcp_connect {
42
42
  grpc_closure* closure;
43
43
  grpc_endpoint** endpoint;
44
44
  int refs;
45
- char* addr_name;
45
+ std::string addr_name;
46
46
  grpc_resource_quota* resource_quota;
47
47
  };
48
48
 
49
49
  static void custom_tcp_connect_cleanup(grpc_custom_tcp_connect* connect) {
50
50
  grpc_custom_socket* socket = connect->socket;
51
51
  grpc_resource_quota_unref_internal(connect->resource_quota);
52
- gpr_free(connect->addr_name);
53
- gpr_free(connect);
52
+ delete connect;
54
53
  socket->refs--;
55
54
  if (socket->refs == 0) {
56
55
  grpc_custom_socket_vtable->destroy(socket);
@@ -67,7 +66,7 @@ static void on_alarm(void* acp, grpc_error* error) {
67
66
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
68
67
  const char* str = grpc_error_string(error);
69
68
  gpr_log(GPR_INFO, "CLIENT_CONNECT: %s: on_alarm: error=%s",
70
- connect->addr_name, str);
69
+ connect->addr_name.c_str(), str);
71
70
  }
72
71
  if (error == GRPC_ERROR_NONE) {
73
72
  /* error == NONE implies that the timer ran out, and wasn't cancelled. If
@@ -89,7 +88,7 @@ static void custom_connect_callback_internal(grpc_custom_socket* socket,
89
88
  grpc_timer_cancel(&connect->alarm);
90
89
  if (error == GRPC_ERROR_NONE) {
91
90
  *connect->endpoint = custom_tcp_endpoint_create(
92
- socket, connect->resource_quota, connect->addr_name);
91
+ socket, connect->resource_quota, connect->addr_name.c_str());
93
92
  }
94
93
  done = (--connect->refs == 0);
95
94
  if (done) {
@@ -120,7 +119,6 @@ static void tcp_connect(grpc_closure* closure, grpc_endpoint** ep,
120
119
  GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
121
120
  (void)channel_args;
122
121
  (void)interested_parties;
123
- grpc_custom_tcp_connect* connect;
124
122
  grpc_resource_quota* resource_quota = grpc_resource_quota_create(nullptr);
125
123
  if (channel_args != nullptr) {
126
124
  for (size_t i = 0; i < channel_args->num_args; i++) {
@@ -135,8 +133,7 @@ static void tcp_connect(grpc_closure* closure, grpc_endpoint** ep,
135
133
  (grpc_custom_socket*)gpr_malloc(sizeof(grpc_custom_socket));
136
134
  socket->refs = 2;
137
135
  grpc_custom_socket_vtable->init(socket, GRPC_AF_UNSPEC);
138
- connect =
139
- (grpc_custom_tcp_connect*)gpr_malloc(sizeof(grpc_custom_tcp_connect));
136
+ grpc_custom_tcp_connect* connect = new grpc_custom_tcp_connect();
140
137
  connect->closure = closure;
141
138
  connect->endpoint = ep;
142
139
  connect->addr_name = grpc_sockaddr_to_uri(resolved_addr);
@@ -149,7 +146,7 @@ static void tcp_connect(grpc_closure* closure, grpc_endpoint** ep,
149
146
 
150
147
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
151
148
  gpr_log(GPR_INFO, "CLIENT_CONNECT: %p %s: asynchronously connecting",
152
- socket, connect->addr_name);
149
+ socket, connect->addr_name.c_str());
153
150
  }
154
151
 
155
152
  GRPC_CLOSURE_INIT(&connect->on_alarm, on_alarm, socket,
@@ -29,9 +29,10 @@
29
29
  #include <string.h>
30
30
  #include <unistd.h>
31
31
 
32
+ #include "absl/strings/str_cat.h"
33
+
32
34
  #include <grpc/support/alloc.h>
33
35
  #include <grpc/support/log.h>
34
- #include <grpc/support/string_util.h>
35
36
  #include <grpc/support/time.h>
36
37
 
37
38
  #include "src/core/lib/channel/channel_args.h"
@@ -57,11 +58,12 @@ struct async_connect {
57
58
  int refs;
58
59
  grpc_closure write_closure;
59
60
  grpc_pollset_set* interested_parties;
60
- char* addr_str;
61
+ std::string addr_str;
61
62
  grpc_endpoint** ep;
62
63
  grpc_closure* closure;
63
64
  grpc_channel_args* channel_args;
64
65
  };
66
+
65
67
  static grpc_error* prepare_socket(const grpc_resolved_address* addr, int fd,
66
68
  const grpc_channel_args* channel_args) {
67
69
  grpc_error* err = GRPC_ERROR_NONE;
@@ -102,8 +104,8 @@ static void tc_on_alarm(void* acp, grpc_error* error) {
102
104
  async_connect* ac = static_cast<async_connect*>(acp);
103
105
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
104
106
  const char* str = grpc_error_string(error);
105
- gpr_log(GPR_INFO, "CLIENT_CONNECT: %s: on_alarm: error=%s", ac->addr_str,
106
- str);
107
+ gpr_log(GPR_INFO, "CLIENT_CONNECT: %s: on_alarm: error=%s",
108
+ ac->addr_str.c_str(), str);
107
109
  }
108
110
  gpr_mu_lock(&ac->mu);
109
111
  if (ac->fd != nullptr) {
@@ -114,9 +116,8 @@ static void tc_on_alarm(void* acp, grpc_error* error) {
114
116
  gpr_mu_unlock(&ac->mu);
115
117
  if (done) {
116
118
  gpr_mu_destroy(&ac->mu);
117
- gpr_free(ac->addr_str);
118
119
  grpc_channel_args_destroy(ac->channel_args);
119
- gpr_free(ac);
120
+ delete ac;
120
121
  }
121
122
  }
122
123
 
@@ -139,8 +140,8 @@ static void on_writable(void* acp, grpc_error* error) {
139
140
 
140
141
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
141
142
  const char* str = grpc_error_string(error);
142
- gpr_log(GPR_INFO, "CLIENT_CONNECT: %s: on_writable: error=%s", ac->addr_str,
143
- str);
143
+ gpr_log(GPR_INFO, "CLIENT_CONNECT: %s: on_writable: error=%s",
144
+ ac->addr_str.c_str(), str);
144
145
  }
145
146
 
146
147
  gpr_mu_lock(&ac->mu);
@@ -172,7 +173,8 @@ static void on_writable(void* acp, grpc_error* error) {
172
173
  switch (so_error) {
173
174
  case 0:
174
175
  grpc_pollset_set_del_fd(ac->interested_parties, fd);
175
- *ep = grpc_tcp_client_create_from_fd(fd, ac->channel_args, ac->addr_str);
176
+ *ep = grpc_tcp_client_create_from_fd(fd, ac->channel_args,
177
+ ac->addr_str.c_str());
176
178
  fd = nullptr;
177
179
  break;
178
180
  case ENOBUFS:
@@ -214,19 +216,17 @@ finish:
214
216
  done = (--ac->refs == 0);
215
217
  // Create a copy of the data from "ac" to be accessed after the unlock, as
216
218
  // "ac" and its contents may be deallocated by the time they are read.
217
- const grpc_slice addr_str_slice = grpc_slice_from_copied_string(ac->addr_str);
219
+ const grpc_slice addr_str_slice = grpc_slice_from_cpp_string(ac->addr_str);
218
220
  gpr_mu_unlock(&ac->mu);
219
221
  if (error != GRPC_ERROR_NONE) {
220
- char* error_descr;
221
222
  grpc_slice str;
222
223
  bool ret = grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION, &str);
223
224
  GPR_ASSERT(ret);
224
- char* desc = grpc_slice_to_c_string(str);
225
- gpr_asprintf(&error_descr, "Failed to connect to remote host: %s", desc);
226
- error = grpc_error_set_str(error, GRPC_ERROR_STR_DESCRIPTION,
227
- grpc_slice_from_copied_string(error_descr));
228
- gpr_free(error_descr);
229
- gpr_free(desc);
225
+ std::string description = absl::StrCat("Failed to connect to remote host: ",
226
+ grpc_core::StringViewFromSlice(str));
227
+ error =
228
+ grpc_error_set_str(error, GRPC_ERROR_STR_DESCRIPTION,
229
+ grpc_slice_from_cpp_string(std::move(description)));
230
230
  error = grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS,
231
231
  addr_str_slice /* takes ownership */);
232
232
  } else {
@@ -236,9 +236,8 @@ finish:
236
236
  // This is safe even outside the lock, because "done", the sentinel, is
237
237
  // populated *inside* the lock.
238
238
  gpr_mu_destroy(&ac->mu);
239
- gpr_free(ac->addr_str);
240
239
  grpc_channel_args_destroy(ac->channel_args);
241
- gpr_free(ac);
240
+ delete ac;
242
241
  }
243
242
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, error);
244
243
  }
@@ -279,33 +278,25 @@ void grpc_tcp_client_create_from_prepared_fd(
279
278
  const grpc_channel_args* channel_args, const grpc_resolved_address* addr,
280
279
  grpc_millis deadline, grpc_endpoint** ep) {
281
280
  int err;
282
- async_connect* ac;
283
281
  do {
284
282
  err = connect(fd, reinterpret_cast<const grpc_sockaddr*>(addr->addr),
285
283
  addr->len);
286
284
  } while (err < 0 && errno == EINTR);
287
285
 
288
- char* name;
289
- char* addr_str;
290
- addr_str = grpc_sockaddr_to_uri(addr);
291
- gpr_asprintf(&name, "tcp-client:%s", addr_str);
292
- grpc_fd* fdobj = grpc_fd_create(fd, name, true);
293
- gpr_free(name);
294
- gpr_free(addr_str);
286
+ std::string name = absl::StrCat("tcp-client:", grpc_sockaddr_to_uri(addr));
287
+ grpc_fd* fdobj = grpc_fd_create(fd, name.c_str(), true);
295
288
 
296
289
  if (err >= 0) {
297
- char* addr_str = grpc_sockaddr_to_uri(addr);
298
- *ep = grpc_tcp_client_create_from_fd(fdobj, channel_args, addr_str);
299
- gpr_free(addr_str);
290
+ *ep = grpc_tcp_client_create_from_fd(fdobj, channel_args,
291
+ grpc_sockaddr_to_uri(addr).c_str());
300
292
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, GRPC_ERROR_NONE);
301
293
  return;
302
294
  }
303
295
  if (errno != EWOULDBLOCK && errno != EINPROGRESS) {
304
296
  grpc_error* error = GRPC_OS_ERROR(errno, "connect");
305
- char* addr_str = grpc_sockaddr_to_uri(addr);
306
- error = grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS,
307
- grpc_slice_from_copied_string(addr_str));
308
- gpr_free(addr_str);
297
+ error = grpc_error_set_str(
298
+ error, GRPC_ERROR_STR_TARGET_ADDRESS,
299
+ grpc_slice_from_cpp_string(grpc_sockaddr_to_uri(addr)));
309
300
  grpc_fd_orphan(fdobj, nullptr, nullptr, "tcp_client_connect_error");
310
301
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, error);
311
302
  return;
@@ -313,7 +304,7 @@ void grpc_tcp_client_create_from_prepared_fd(
313
304
 
314
305
  grpc_pollset_set_add_fd(interested_parties, fdobj);
315
306
 
316
- ac = static_cast<async_connect*>(gpr_malloc(sizeof(async_connect)));
307
+ async_connect* ac = new async_connect();
317
308
  ac->closure = closure;
318
309
  ac->ep = ep;
319
310
  ac->fd = fdobj;
@@ -327,7 +318,7 @@ void grpc_tcp_client_create_from_prepared_fd(
327
318
 
328
319
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
329
320
  gpr_log(GPR_INFO, "CLIENT_CONNECT: %s: asynchronously connecting fd %p",
330
- ac->addr_str, fdobj);
321
+ ac->addr_str.c_str(), fdobj);
331
322
  }
332
323
 
333
324
  gpr_mu_lock(&ac->mu);