grpc 1.28.0 → 1.30.0

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 (497) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +7694 -11190
  3. data/include/grpc/grpc.h +2 -2
  4. data/include/grpc/grpc_security.h +22 -9
  5. data/include/grpc/grpc_security_constants.h +1 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +19 -21
  7. data/include/grpc/impl/codegen/port_platform.h +6 -2
  8. data/include/grpc/module.modulemap +24 -39
  9. data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +203 -236
  11. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +17 -10
  15. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  16. data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
  17. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -4
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +240 -301
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
  28. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +84 -37
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  34. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -2
  35. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  36. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  37. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  38. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +73 -59
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +16 -20
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +184 -133
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
  48. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +40 -43
  49. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
  50. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  51. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +32 -5
  53. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  54. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
  55. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +16 -16
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
  58. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +20 -31
  59. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -3
  60. data/src/core/ext/filters/client_channel/server_address.cc +6 -9
  61. data/src/core/ext/filters/client_channel/server_address.h +6 -12
  62. data/src/core/ext/filters/client_channel/service_config.cc +104 -144
  63. data/src/core/ext/filters/client_channel/service_config.h +28 -98
  64. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  65. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  66. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  67. data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
  68. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  69. data/src/core/ext/filters/client_channel/xds/xds_api.cc +348 -221
  70. data/src/core/ext/filters/client_channel/xds/xds_api.h +37 -37
  71. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +44 -49
  72. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
  73. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
  74. data/src/core/ext/filters/client_channel/xds/xds_client.cc +532 -339
  75. data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
  76. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
  77. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +31 -19
  78. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
  79. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  80. data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  83. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +7 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.h +4 -4
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +4 -4
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +23 -22
  89. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  90. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  92. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  93. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  94. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  96. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  97. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  98. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  99. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  100. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  101. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  102. data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
  103. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  104. data/src/core/ext/transport/chttp2/transport/writing.cc +15 -8
  105. data/src/core/ext/transport/inproc/inproc_transport.cc +19 -0
  106. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
  107. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -875
  108. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  109. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  110. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  111. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  112. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  113. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  114. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
  115. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +21 -8
  116. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +43 -7
  117. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
  118. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
  119. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
  120. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
  121. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  122. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  123. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +47 -26
  124. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +115 -65
  125. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
  126. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  127. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  128. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
  129. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
  130. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +28 -13
  131. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
  133. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +88 -6
  134. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  135. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  136. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
  137. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
  138. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -0
  139. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
  140. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
  141. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +12 -4
  142. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
  143. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
  144. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
  145. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +16 -0
  146. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
  147. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +2 -1
  148. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
  150. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
  151. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
  152. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +63 -41
  153. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +173 -77
  154. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
  155. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
  156. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -0
  157. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
  158. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +90 -30
  159. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
  160. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  161. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  162. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  163. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  164. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
  165. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  166. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +36 -0
  168. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
  169. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
  170. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  171. data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
  172. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
  173. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
  174. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
  175. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
  176. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  177. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  178. data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
  179. data/src/core/ext/upb-generated/validate/validate.upb.h +69 -63
  180. data/src/core/lib/channel/channel_args.cc +15 -14
  181. data/src/core/lib/channel/channel_args.h +3 -1
  182. data/src/core/lib/channel/channel_stack.h +20 -13
  183. data/src/core/lib/channel/channelz.cc +5 -6
  184. data/src/core/lib/channel/channelz.h +3 -2
  185. data/src/core/lib/channel/channelz_registry.cc +5 -3
  186. data/src/core/lib/channel/connected_channel.cc +7 -5
  187. data/src/core/lib/channel/context.h +1 -1
  188. data/src/core/lib/channel/handshaker.cc +11 -13
  189. data/src/core/lib/channel/handshaker.h +4 -2
  190. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  191. data/src/core/lib/channel/status_util.cc +2 -3
  192. data/src/core/lib/compression/message_compress.cc +5 -1
  193. data/src/core/lib/debug/stats.cc +21 -27
  194. data/src/core/lib/debug/stats.h +3 -1
  195. data/src/core/lib/gpr/spinlock.h +2 -3
  196. data/src/core/lib/gpr/string.cc +2 -26
  197. data/src/core/lib/gpr/string.h +0 -16
  198. data/src/core/lib/gpr/sync_abseil.cc +2 -0
  199. data/src/core/lib/gpr/time.cc +4 -0
  200. data/src/core/lib/gpr/time_posix.cc +1 -1
  201. data/src/core/lib/gprpp/atomic.h +6 -6
  202. data/src/core/lib/gprpp/fork.cc +1 -1
  203. data/src/core/lib/gprpp/host_port.cc +29 -35
  204. data/src/core/lib/gprpp/host_port.h +14 -17
  205. data/src/core/lib/gprpp/map.h +5 -11
  206. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  207. data/src/core/lib/http/format_request.cc +46 -65
  208. data/src/core/lib/http/httpcli.cc +2 -3
  209. data/src/core/lib/http/httpcli.h +2 -3
  210. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  211. data/src/core/lib/http/parser.h +2 -3
  212. data/src/core/lib/iomgr/buffer_list.h +22 -21
  213. data/src/core/lib/iomgr/call_combiner.h +3 -2
  214. data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
  215. data/src/core/lib/iomgr/closure.h +2 -3
  216. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  217. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  218. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  219. data/src/core/lib/iomgr/error.cc +6 -9
  220. data/src/core/lib/iomgr/error.h +0 -1
  221. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  222. data/src/core/lib/iomgr/ev_apple.h +43 -0
  223. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
  224. data/src/core/lib/iomgr/ev_epollex_linux.cc +2 -3
  225. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
  226. data/src/core/lib/iomgr/ev_posix.cc +2 -3
  227. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  228. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  229. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  230. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  231. data/src/core/lib/iomgr/port.h +1 -0
  232. data/src/core/lib/iomgr/python_util.h +46 -0
  233. data/src/core/lib/iomgr/resolve_address.h +4 -6
  234. data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
  235. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  236. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  237. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
  238. data/src/core/lib/iomgr/resource_quota.cc +4 -6
  239. data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
  240. data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
  241. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  242. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  243. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
  244. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +8 -5
  247. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  248. data/src/core/lib/iomgr/tcp_custom.cc +2 -3
  249. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
  253. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  254. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  255. data/src/core/lib/iomgr/timer_generic.cc +2 -3
  256. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  257. data/src/core/lib/iomgr/timer_heap.h +2 -3
  258. data/src/core/lib/iomgr/udp_server.cc +9 -14
  259. data/src/core/lib/json/json.h +3 -2
  260. data/src/core/lib/json/json_reader.cc +5 -5
  261. data/src/core/lib/json/json_writer.cc +13 -12
  262. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  263. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  264. data/src/core/lib/security/credentials/credentials.cc +0 -84
  265. data/src/core/lib/security/credentials/credentials.h +8 -59
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +3 -8
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
  274. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +55 -27
  276. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
  278. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  279. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  280. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -11
  281. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  282. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
  283. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  284. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  285. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  286. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -25
  287. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
  288. data/src/core/lib/security/security_connector/ssl_utils.cc +59 -12
  289. data/src/core/lib/security/security_connector/ssl_utils.h +12 -10
  290. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +77 -51
  291. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
  292. data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
  293. data/src/core/lib/slice/slice_intern.cc +2 -3
  294. data/src/core/lib/slice/slice_internal.h +14 -0
  295. data/src/core/lib/slice/slice_utils.h +9 -0
  296. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  297. data/src/core/lib/surface/call.cc +2 -3
  298. data/src/core/lib/surface/call_log_batch.cc +50 -58
  299. data/src/core/lib/surface/channel.cc +53 -31
  300. data/src/core/lib/surface/channel.h +35 -4
  301. data/src/core/lib/surface/channel_ping.cc +2 -3
  302. data/src/core/lib/surface/completion_queue.cc +33 -33
  303. data/src/core/lib/surface/event_string.cc +18 -25
  304. data/src/core/lib/surface/event_string.h +3 -1
  305. data/src/core/lib/surface/init_secure.cc +1 -4
  306. data/src/core/lib/surface/server.cc +570 -369
  307. data/src/core/lib/surface/server.h +32 -0
  308. data/src/core/lib/surface/version.cc +2 -2
  309. data/src/core/lib/transport/byte_stream.h +7 -2
  310. data/src/core/lib/transport/connectivity_state.cc +7 -6
  311. data/src/core/lib/transport/connectivity_state.h +5 -3
  312. data/src/core/lib/transport/metadata.cc +3 -3
  313. data/src/core/lib/transport/metadata_batch.h +2 -3
  314. data/src/core/lib/transport/static_metadata.h +1 -1
  315. data/src/core/lib/transport/status_conversion.cc +6 -14
  316. data/src/core/lib/transport/transport.cc +2 -3
  317. data/src/core/lib/transport/transport.h +3 -2
  318. data/src/core/lib/transport/transport_op_string.cc +61 -102
  319. data/src/core/lib/uri/uri_parser.h +2 -3
  320. data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
  321. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  322. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
  323. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  324. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
  325. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  326. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  327. data/src/core/tsi/fake_transport_security.cc +10 -15
  328. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  329. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  330. data/src/core/tsi/ssl_transport_security.cc +52 -39
  331. data/src/core/tsi/ssl_transport_security.h +8 -8
  332. data/src/core/tsi/ssl_types.h +0 -2
  333. data/src/core/tsi/transport_security.h +6 -9
  334. data/src/core/tsi/transport_security_grpc.h +2 -3
  335. data/src/core/tsi/transport_security_interface.h +3 -3
  336. data/src/ruby/ext/grpc/rb_call.c +9 -1
  337. data/src/ruby/lib/grpc/errors.rb +103 -42
  338. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  339. data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
  340. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  341. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  342. data/src/ruby/lib/grpc/structs.rb +1 -1
  343. data/src/ruby/lib/grpc/version.rb +1 -1
  344. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  345. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  346. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  347. data/src/ruby/spec/debug_message_spec.rb +134 -0
  348. data/src/ruby/spec/generic/service_spec.rb +2 -0
  349. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
  350. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
  351. data/src/ruby/spec/testdata/ca.pem +18 -13
  352. data/src/ruby/spec/testdata/client.key +26 -14
  353. data/src/ruby/spec/testdata/client.pem +18 -12
  354. data/src/ruby/spec/testdata/server1.key +26 -14
  355. data/src/ruby/spec/testdata/server1.pem +20 -14
  356. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  357. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  358. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  359. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  360. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  361. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  362. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  363. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  364. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  365. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  366. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  367. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  368. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  369. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  370. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  371. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  372. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  373. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  374. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  375. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  376. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  377. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  378. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  379. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  380. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  381. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  382. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  383. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  384. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  385. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  386. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  387. data/third_party/boringssl-with-bazel/err_data.c +329 -297
  388. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  389. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
  390. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  391. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  392. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  393. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  394. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  395. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
  397. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  399. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  400. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  401. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  404. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  405. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +14 -11
  406. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +432 -160
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -14
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  437. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
  438. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  439. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  440. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  442. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  443. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  444. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  445. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  446. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
  447. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
  448. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
  449. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
  451. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  453. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  455. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  456. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
  458. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  459. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  460. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +172 -77
  461. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  462. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
  464. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  465. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  466. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  467. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  468. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
  469. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +14 -3
  470. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
  471. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
  472. data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
  473. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  474. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  475. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  476. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
  477. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
  478. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -1
  479. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  480. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +64 -5
  481. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  482. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
  483. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
  484. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
  485. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -27
  486. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
  487. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
  488. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  489. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  490. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  491. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  492. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  493. metadata +111 -37
  494. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
  495. data/src/core/lib/gprpp/string_view.h +0 -60
  496. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  497. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
@@ -108,6 +108,8 @@ void gpr_cv_broadcast(gpr_cv* cv) {
108
108
  /*----------------------------------------*/
109
109
 
110
110
  void gpr_once_init(gpr_once* once, void (*init_function)(void)) {
111
+ static_assert(sizeof(gpr_once) == sizeof(absl::once_flag),
112
+ "gpr_once and absl::once_flag must be the same size");
111
113
  absl::call_once(*reinterpret_cast<absl::once_flag*>(once), init_function);
112
114
  }
113
115
 
@@ -254,6 +254,10 @@ gpr_timespec gpr_convert_clock_type(gpr_timespec t, gpr_clock_type clock_type) {
254
254
  return gpr_time_add(gpr_now(clock_type), t);
255
255
  }
256
256
 
257
+ // If the given input hits this code, the same result is not guaranteed for
258
+ // the same input because it relies on `gpr_now` to calculate the difference
259
+ // between two different clocks. Please be careful when you want to use this
260
+ // function in unit tests. (e.g. https://github.com/grpc/grpc/pull/22655)
257
261
  return gpr_time_add(gpr_now(clock_type),
258
262
  gpr_time_sub(t, gpr_now(t.clock_type)));
259
263
  }
@@ -82,7 +82,7 @@ static gpr_timespec now_impl(gpr_clock_type clock_type) {
82
82
  }
83
83
  }
84
84
  #else
85
- /* For some reason Apple's OSes haven't implemented clock_gettime. */
85
+ /* For some reason Apple's OSes haven't implemented clock_gettime. */
86
86
 
87
87
  #include <mach/mach.h>
88
88
  #include <mach/mach_time.h>
@@ -28,12 +28,12 @@
28
28
  namespace grpc_core {
29
29
 
30
30
  enum class MemoryOrder {
31
- RELAXED = std::memory_order_relaxed,
32
- CONSUME = std::memory_order_consume,
33
- ACQUIRE = std::memory_order_acquire,
34
- RELEASE = std::memory_order_release,
35
- ACQ_REL = std::memory_order_acq_rel,
36
- SEQ_CST = std::memory_order_seq_cst
31
+ RELAXED = static_cast<int>(std::memory_order_relaxed),
32
+ CONSUME = static_cast<int>(std::memory_order_consume),
33
+ ACQUIRE = static_cast<int>(std::memory_order_acquire),
34
+ RELEASE = static_cast<int>(std::memory_order_release),
35
+ ACQ_REL = static_cast<int>(std::memory_order_acq_rel),
36
+ SEQ_CST = static_cast<int>(std::memory_order_seq_cst)
37
37
  };
38
38
 
39
39
  template <typename T>
@@ -164,7 +164,7 @@ class ThreadState {
164
164
  int count_;
165
165
  };
166
166
 
167
- } // namespace
167
+ } // namespace internal
168
168
 
169
169
  void Fork::GlobalInit() {
170
170
  if (!override_enabled_) {
@@ -20,44 +20,36 @@
20
20
 
21
21
  #include "src/core/lib/gprpp/host_port.h"
22
22
 
23
- #include <string.h>
23
+ #include "absl/strings/str_format.h"
24
+ #include "absl/strings/string_view.h"
24
25
 
25
- #include <grpc/support/alloc.h>
26
26
  #include <grpc/support/log.h>
27
- #include <grpc/support/string_util.h>
28
-
29
- #include "src/core/lib/gpr/string.h"
30
- #include "src/core/lib/gprpp/string_view.h"
31
27
 
32
28
  namespace grpc_core {
33
- int JoinHostPort(grpc_core::UniquePtr<char>* out, const char* host, int port) {
34
- char* tmp;
35
- int ret;
36
- if (host[0] != '[' && strchr(host, ':') != nullptr) {
37
- /* IPv6 literals must be enclosed in brackets. */
38
- ret = gpr_asprintf(&tmp, "[%s]:%d", host, port);
39
- } else {
40
- /* Ordinary non-bracketed host:port. */
41
- ret = gpr_asprintf(&tmp, "%s:%d", host, port);
29
+
30
+ std::string JoinHostPort(absl::string_view host, int port) {
31
+ if (!host.empty() && host[0] != '[' && host.rfind(':') != host.npos) {
32
+ // IPv6 literals must be enclosed in brackets.
33
+ return absl::StrFormat("[%s]:%d", host, port);
42
34
  }
43
- out->reset(tmp);
44
- return ret;
35
+ // Ordinary non-bracketed host:port.
36
+ return absl::StrFormat("%s:%d", host, port);
45
37
  }
46
38
 
47
39
  namespace {
48
- bool DoSplitHostPort(StringView name, StringView* host, StringView* port,
49
- bool* has_port) {
40
+ bool DoSplitHostPort(absl::string_view name, absl::string_view* host,
41
+ absl::string_view* port, bool* has_port) {
50
42
  *has_port = false;
51
43
  if (!name.empty() && name[0] == '[') {
52
44
  /* Parse a bracketed host, typically an IPv6 literal. */
53
45
  const size_t rbracket = name.find(']', 1);
54
- if (rbracket == grpc_core::StringView::npos) {
46
+ if (rbracket == absl::string_view::npos) {
55
47
  /* Unmatched [ */
56
48
  return false;
57
49
  }
58
50
  if (rbracket == name.size() - 1) {
59
51
  /* ]<end> */
60
- *port = StringView();
52
+ *port = absl::string_view();
61
53
  } else if (name[rbracket + 1] == ':') {
62
54
  /* ]:<port?> */
63
55
  *port = name.substr(rbracket + 2, name.size() - rbracket - 2);
@@ -67,16 +59,16 @@ bool DoSplitHostPort(StringView name, StringView* host, StringView* port,
67
59
  return false;
68
60
  }
69
61
  *host = name.substr(1, rbracket - 1);
70
- if (host->find(':') == grpc_core::StringView::npos) {
62
+ if (host->find(':') == absl::string_view::npos) {
71
63
  /* Require all bracketed hosts to contain a colon, because a hostname or
72
64
  IPv4 address should never use brackets. */
73
- *host = StringView();
65
+ *host = absl::string_view();
74
66
  return false;
75
67
  }
76
68
  } else {
77
69
  size_t colon = name.find(':');
78
- if (colon != grpc_core::StringView::npos &&
79
- name.find(':', colon + 1) == grpc_core::StringView::npos) {
70
+ if (colon != absl::string_view::npos &&
71
+ name.find(':', colon + 1) == absl::string_view::npos) {
80
72
  /* Exactly 1 colon. Split into host:port. */
81
73
  *host = name.substr(0, colon);
82
74
  *port = name.substr(colon + 1, name.size() - colon - 1);
@@ -84,35 +76,37 @@ bool DoSplitHostPort(StringView name, StringView* host, StringView* port,
84
76
  } else {
85
77
  /* 0 or 2+ colons. Bare hostname or IPv6 litearal. */
86
78
  *host = name;
87
- *port = StringView();
79
+ *port = absl::string_view();
88
80
  }
89
81
  }
90
82
  return true;
91
83
  }
92
84
  } // namespace
93
85
 
94
- bool SplitHostPort(StringView name, StringView* host, StringView* port) {
86
+ bool SplitHostPort(absl::string_view name, absl::string_view* host,
87
+ absl::string_view* port) {
95
88
  bool unused;
96
89
  return DoSplitHostPort(name, host, port, &unused);
97
90
  }
98
91
 
99
- bool SplitHostPort(StringView name, grpc_core::UniquePtr<char>* host,
100
- grpc_core::UniquePtr<char>* port) {
101
- GPR_DEBUG_ASSERT(host != nullptr && *host == nullptr);
102
- GPR_DEBUG_ASSERT(port != nullptr && *port == nullptr);
103
- StringView host_view;
104
- StringView port_view;
92
+ bool SplitHostPort(absl::string_view name, std::string* host,
93
+ std::string* port) {
94
+ GPR_DEBUG_ASSERT(host != nullptr && host->empty());
95
+ GPR_DEBUG_ASSERT(port != nullptr && port->empty());
96
+ absl::string_view host_view;
97
+ absl::string_view port_view;
105
98
  bool has_port;
106
99
  const bool ret = DoSplitHostPort(name, &host_view, &port_view, &has_port);
107
100
  if (ret) {
108
101
  // We always set the host, but port is set only when DoSplitHostPort find a
109
102
  // port in the string, to remain backward compatible with the old
110
103
  // gpr_split_host_port API.
111
- *host = StringViewToCString(host_view);
104
+ *host = std::string(host_view);
112
105
  if (has_port) {
113
- *port = StringViewToCString(port_view);
106
+ *port = std::string(port_view);
114
107
  }
115
108
  }
116
109
  return ret;
117
110
  }
111
+
118
112
  } // namespace grpc_core
@@ -21,28 +21,24 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include "src/core/lib/gprpp/memory.h"
25
- #include "src/core/lib/gprpp/string_view.h"
24
+ #include <string>
26
25
 
27
- namespace grpc_core {
28
-
29
- /** Given a host and port, creates a newly-allocated string of the form
30
- "host:port" or "[ho:st]:port", depending on whether the host contains colons
31
- like an IPv6 literal. If the host is already bracketed, then additional
32
- brackets will not be added.
26
+ #include "absl/strings/string_view.h"
33
27
 
34
- Usage is similar to gpr_asprintf: returns the number of bytes written
35
- (excluding the final '\0'), and *out points to a string.
28
+ namespace grpc_core {
36
29
 
37
- In the unlikely event of an error, returns -1 and sets *out to NULL. */
38
- int JoinHostPort(grpc_core::UniquePtr<char>* out, const char* host, int port);
30
+ // Given a host and port, creates a newly-allocated string of the form
31
+ // "host:port" or "[ho:st]:port", depending on whether the host contains colons
32
+ // like an IPv6 literal. If the host is already bracketed, then additional
33
+ // brackets will not be added.
34
+ std::string JoinHostPort(absl::string_view host, int port);
39
35
 
40
36
  /** Given a name in the form "host:port" or "[ho:st]:port", split into hostname
41
37
  and port number.
42
38
 
43
39
  There are two variants of this method:
44
- 1) StringView output: port and host are returned as views on name.
45
- 2) char* output: port and host are copied into newly allocated strings.
40
+ 1) absl::string_view output: port and host are returned as views on name.
41
+ 2) std::string output: port and host are copied into newly allocated strings.
46
42
 
47
43
  Prefer variant (1) over (2), because no allocation or copy is performed in
48
44
  variant (1). Use (2) only when interacting with C API that mandate
@@ -50,9 +46,10 @@ int JoinHostPort(grpc_core::UniquePtr* out, const char* host, int port);
50
46
 
51
47
  Return true on success, false on failure. Guarantees *host and *port are
52
48
  cleared on failure. */
53
- bool SplitHostPort(StringView name, StringView* host, StringView* port);
54
- bool SplitHostPort(StringView name, grpc_core::UniquePtr<char>* host,
55
- grpc_core::UniquePtr<char>* port);
49
+ bool SplitHostPort(absl::string_view name, absl::string_view* host,
50
+ absl::string_view* port);
51
+ bool SplitHostPort(absl::string_view name, std::string* host,
52
+ std::string* port);
56
53
 
57
54
  } // namespace grpc_core
58
55
 
@@ -25,8 +25,9 @@
25
25
 
26
26
  #include <map>
27
27
 
28
- #include "src/core/lib/gprpp/ref_counted_ptr.h"
29
- #include "src/core/lib/gprpp/string_view.h"
28
+ #include "absl/strings/string_view.h"
29
+
30
+ #include "src/core/lib/gprpp/memory.h"
30
31
 
31
32
  namespace grpc_core {
32
33
 
@@ -38,7 +39,8 @@ struct StringLess {
38
39
  const grpc_core::UniquePtr<char>& b) const {
39
40
  return strcmp(a.get(), b.get()) < 0;
40
41
  }
41
- bool operator()(const StringView& a, const StringView& b) const {
42
+ bool operator()(const absl::string_view& a,
43
+ const absl::string_view& b) const {
42
44
  const size_t min_size = std::min(a.size(), b.size());
43
45
  int c = strncmp(a.data(), b.data(), min_size);
44
46
  if (c != 0) return c < 0;
@@ -46,14 +48,6 @@ struct StringLess {
46
48
  }
47
49
  };
48
50
 
49
- template <typename T>
50
- struct RefCountedPtrLess {
51
- bool operator()(const RefCountedPtr<T>& p1,
52
- const RefCountedPtr<T>& p2) const {
53
- return p1.get() < p2.get();
54
- }
55
- };
56
-
57
51
  } // namespace grpc_core
58
52
 
59
53
  #endif /* GRPC_CORE_LIB_GPRPP_MAP_H */
@@ -182,6 +182,11 @@ inline RefCountedPtr MakeRefCounted(Args&&... args) {
182
182
  return RefCountedPtr<T>(new T(std::forward<Args>(args)...));
183
183
  }
184
184
 
185
+ template <typename T>
186
+ bool operator<(const RefCountedPtr<T>& p1, const RefCountedPtr<T>& p2) {
187
+ return p1.get() < p2.get();
188
+ }
189
+
185
190
  } // namespace grpc_core
186
191
 
187
192
  #endif /* GRPC_CORE_LIB_GPRPP_REF_COUNTED_PTR_H */
@@ -24,99 +24,80 @@
24
24
  #include <stdio.h>
25
25
  #include <string.h>
26
26
 
27
+ #include <vector>
28
+
29
+ #include "absl/strings/str_format.h"
30
+ #include "absl/strings/str_join.h"
31
+
27
32
  #include <grpc/slice.h>
28
33
  #include <grpc/support/alloc.h>
29
34
  #include <grpc/support/string_util.h>
30
35
  #include "src/core/lib/gpr/string.h"
31
36
 
32
37
  static void fill_common_header(const grpc_httpcli_request* request,
33
- gpr_strvec* buf, bool connection_close) {
34
- size_t i;
35
- gpr_strvec_add(buf, gpr_strdup(request->http.path));
36
- gpr_strvec_add(buf, gpr_strdup(" HTTP/1.0\r\n"));
38
+ bool connection_close,
39
+ std::vector<std::string>* buf) {
40
+ buf->push_back(request->http.path);
41
+ buf->push_back(" HTTP/1.0\r\n");
37
42
  /* just in case some crazy server really expects HTTP/1.1 */
38
- gpr_strvec_add(buf, gpr_strdup("Host: "));
39
- gpr_strvec_add(buf, gpr_strdup(request->host));
40
- gpr_strvec_add(buf, gpr_strdup("\r\n"));
41
- if (connection_close)
42
- gpr_strvec_add(buf, gpr_strdup("Connection: close\r\n"));
43
- gpr_strvec_add(buf,
44
- gpr_strdup("User-Agent: " GRPC_HTTPCLI_USER_AGENT "\r\n"));
43
+ buf->push_back("Host: ");
44
+ buf->push_back(request->host);
45
+ buf->push_back("\r\n");
46
+ if (connection_close) buf->push_back("Connection: close\r\n");
47
+ buf->push_back("User-Agent: " GRPC_HTTPCLI_USER_AGENT "\r\n");
45
48
  /* user supplied headers */
46
- for (i = 0; i < request->http.hdr_count; i++) {
47
- gpr_strvec_add(buf, gpr_strdup(request->http.hdrs[i].key));
48
- gpr_strvec_add(buf, gpr_strdup(": "));
49
- gpr_strvec_add(buf, gpr_strdup(request->http.hdrs[i].value));
50
- gpr_strvec_add(buf, gpr_strdup("\r\n"));
49
+ for (size_t i = 0; i < request->http.hdr_count; i++) {
50
+ buf->push_back(request->http.hdrs[i].key);
51
+ buf->push_back(": ");
52
+ buf->push_back(request->http.hdrs[i].value);
53
+ buf->push_back("\r\n");
51
54
  }
52
55
  }
53
56
 
54
57
  grpc_slice grpc_httpcli_format_get_request(
55
58
  const grpc_httpcli_request* request) {
56
- gpr_strvec out;
57
- char* flat;
58
- size_t flat_len;
59
-
60
- gpr_strvec_init(&out);
61
- gpr_strvec_add(&out, gpr_strdup("GET "));
62
- fill_common_header(request, &out, true);
63
- gpr_strvec_add(&out, gpr_strdup("\r\n"));
64
-
65
- flat = gpr_strvec_flatten(&out, &flat_len);
66
- gpr_strvec_destroy(&out);
67
-
68
- return grpc_slice_new(flat, flat_len, gpr_free);
59
+ std::vector<std::string> out;
60
+ out.push_back("GET ");
61
+ fill_common_header(request, true, &out);
62
+ out.push_back("\r\n");
63
+ std::string req = absl::StrJoin(out, "");
64
+ return grpc_slice_from_copied_buffer(req.data(), req.size());
69
65
  }
70
66
 
71
67
  grpc_slice grpc_httpcli_format_post_request(const grpc_httpcli_request* request,
72
68
  const char* body_bytes,
73
69
  size_t body_size) {
74
- gpr_strvec out;
75
- char* tmp;
76
- size_t out_len;
77
- size_t i;
78
-
79
- gpr_strvec_init(&out);
80
-
81
- gpr_strvec_add(&out, gpr_strdup("POST "));
82
- fill_common_header(request, &out, true);
83
- if (body_bytes) {
84
- uint8_t has_content_type = 0;
85
- for (i = 0; i < request->http.hdr_count; i++) {
70
+ std::vector<std::string> out;
71
+ out.push_back("POST ");
72
+ fill_common_header(request, true, &out);
73
+ if (body_bytes != nullptr) {
74
+ bool has_content_type = false;
75
+ for (size_t i = 0; i < request->http.hdr_count; i++) {
86
76
  if (strcmp(request->http.hdrs[i].key, "Content-Type") == 0) {
87
- has_content_type = 1;
77
+ has_content_type = true;
88
78
  break;
89
79
  }
90
80
  }
91
81
  if (!has_content_type) {
92
- gpr_strvec_add(&out, gpr_strdup("Content-Type: text/plain\r\n"));
82
+ out.push_back("Content-Type: text/plain\r\n");
93
83
  }
94
- gpr_asprintf(&tmp, "Content-Length: %lu\r\n",
95
- static_cast<unsigned long>(body_size));
96
- gpr_strvec_add(&out, tmp);
84
+ out.push_back(absl::StrFormat("Content-Length: %lu\r\n",
85
+ static_cast<unsigned long>(body_size)));
97
86
  }
98
- gpr_strvec_add(&out, gpr_strdup("\r\n"));
99
- tmp = gpr_strvec_flatten(&out, &out_len);
100
- gpr_strvec_destroy(&out);
101
-
102
- if (body_bytes) {
103
- tmp = static_cast<char*>(gpr_realloc(tmp, out_len + body_size));
104
- memcpy(tmp + out_len, body_bytes, body_size);
105
- out_len += body_size;
87
+ out.push_back("\r\n");
88
+ std::string req = absl::StrJoin(out, "");
89
+ if (body_bytes != nullptr) {
90
+ absl::StrAppend(&req, absl::string_view(body_bytes, body_size));
106
91
  }
107
-
108
- return grpc_slice_new(tmp, out_len, gpr_free);
92
+ return grpc_slice_from_copied_buffer(req.data(), req.size());
109
93
  }
110
94
 
111
95
  grpc_slice grpc_httpcli_format_connect_request(
112
96
  const grpc_httpcli_request* request) {
113
- gpr_strvec out;
114
- gpr_strvec_init(&out);
115
- gpr_strvec_add(&out, gpr_strdup("CONNECT "));
116
- fill_common_header(request, &out, false);
117
- gpr_strvec_add(&out, gpr_strdup("\r\n"));
118
- size_t flat_len;
119
- char* flat = gpr_strvec_flatten(&out, &flat_len);
120
- gpr_strvec_destroy(&out);
121
- return grpc_slice_new(flat, flat_len, gpr_free);
97
+ std::vector<std::string> out;
98
+ out.push_back("CONNECT ");
99
+ fill_common_header(request, false, &out);
100
+ out.push_back("\r\n");
101
+ std::string req = absl::StrJoin(out, "");
102
+ return grpc_slice_from_copied_buffer(req.data(), req.size());
122
103
  }
@@ -38,7 +38,7 @@
38
38
  #include "src/core/lib/iomgr/tcp_client.h"
39
39
  #include "src/core/lib/slice/slice_internal.h"
40
40
 
41
- typedef struct {
41
+ struct internal_request {
42
42
  grpc_slice request_text;
43
43
  grpc_http_parser parser;
44
44
  grpc_resolved_addresses* addresses;
@@ -60,8 +60,7 @@ typedef struct {
60
60
  grpc_closure connected;
61
61
  grpc_error* overall_error;
62
62
  grpc_resource_quota* resource_quota;
63
- } internal_request;
64
-
63
+ };
65
64
  static grpc_httpcli_get_override g_get_override = nullptr;
66
65
  static grpc_httpcli_post_override g_post_override = nullptr;
67
66