grpc 1.21.0 → 1.32.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 (1843) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2516 -19950
  3. data/etc/roots.pem +44 -100
  4. data/include/grpc/grpc.h +3 -1
  5. data/include/grpc/grpc_security.h +238 -55
  6. data/include/grpc/grpc_security_constants.h +32 -1
  7. data/include/grpc/impl/codegen/README.md +22 -0
  8. data/include/grpc/impl/codegen/gpr_types.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +61 -13
  10. data/include/grpc/impl/codegen/port_platform.h +74 -30
  11. data/include/grpc/impl/codegen/sync.h +5 -3
  12. data/include/grpc/impl/codegen/sync_abseil.h +36 -0
  13. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  14. data/include/grpc/module.modulemap +25 -37
  15. data/include/grpc/slice.h +2 -2
  16. data/include/grpc/support/alloc.h +0 -16
  17. data/include/grpc/support/sync_abseil.h +26 -0
  18. data/src/core/ext/filters/client_channel/backend_metric.cc +84 -0
  19. data/src/core/ext/filters/client_channel/backend_metric.h +36 -0
  20. data/src/core/ext/filters/client_channel/backup_poller.cc +10 -8
  21. data/src/core/ext/filters/client_channel/backup_poller.h +5 -2
  22. data/src/core/ext/filters/client_channel/channel_connectivity.cc +18 -4
  23. data/src/core/ext/filters/client_channel/client_channel.cc +1516 -742
  24. data/src/core/ext/filters/client_channel/client_channel.h +25 -9
  25. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +50 -139
  26. data/src/core/ext/filters/client_channel/client_channel_channelz.h +15 -39
  27. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  28. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -9
  29. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -13
  30. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  31. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  32. data/src/core/ext/filters/client_channel/connector.h +42 -39
  33. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +34 -12
  34. data/src/core/ext/filters/client_channel/health/health_check_client.cc +75 -115
  35. data/src/core/ext/filters/client_channel/health/health_check_client.h +8 -16
  36. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +75 -46
  37. data/src/core/ext/filters/client_channel/http_proxy.cc +126 -120
  38. data/src/core/ext/filters/client_channel/http_proxy.h +5 -1
  39. data/src/core/ext/filters/client_channel/lb_policy.cc +35 -35
  40. data/src/core/ext/filters/client_channel/lb_policy.h +225 -152
  41. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  42. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  43. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +299 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +41 -25
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +635 -734
  47. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +7 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +76 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +37 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +9 -2
  51. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +33 -49
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +4 -3
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +7 -6
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +157 -271
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +42 -58
  56. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +113 -166
  57. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +890 -0
  58. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +61 -101
  59. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +116 -260
  60. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +744 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +423 -0
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +946 -0
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +537 -0
  64. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +3 -7
  65. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +1141 -0
  66. data/src/core/ext/filters/client_channel/lb_policy_factory.h +6 -9
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +53 -77
  68. data/src/core/ext/filters/client_channel/lb_policy_registry.h +3 -3
  69. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +8 -8
  70. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  71. data/src/core/ext/filters/client_channel/proxy_mapper.h +14 -34
  72. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +46 -79
  73. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +23 -17
  74. data/src/core/ext/filters/client_channel/resolver.cc +6 -9
  75. data/src/core/ext/filters/client_channel/resolver.h +19 -37
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +156 -130
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +74 -39
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +15 -21
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +33 -33
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +16 -13
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +476 -129
  82. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +231 -193
  83. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +6 -4
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +9 -6
  85. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -2
  86. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -2
  87. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +73 -48
  88. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +165 -116
  89. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +8 -7
  90. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +45 -29
  91. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +536 -0
  92. data/src/core/ext/filters/client_channel/resolver_factory.h +11 -11
  93. data/src/core/ext/filters/client_channel/resolver_registry.cc +39 -24
  94. data/src/core/ext/filters/client_channel/resolver_registry.h +17 -12
  95. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +251 -313
  96. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +28 -26
  97. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +100 -325
  98. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +48 -53
  99. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  100. data/src/core/ext/filters/client_channel/retry_throttle.h +2 -6
  101. data/src/core/ext/filters/client_channel/server_address.cc +40 -14
  102. data/src/core/ext/filters/client_channel/server_address.h +45 -15
  103. data/src/core/ext/filters/client_channel/service_config.cc +143 -253
  104. data/src/core/ext/filters/client_channel/service_config.h +47 -131
  105. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  106. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  107. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  108. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  109. data/src/core/ext/filters/client_channel/subchannel.cc +436 -288
  110. data/src/core/ext/filters/client_channel/subchannel.h +181 -53
  111. data/src/core/ext/filters/client_channel/subchannel_interface.h +94 -0
  112. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  113. data/src/core/ext/filters/client_idle/client_idle_filter.cc +440 -0
  114. data/src/core/ext/filters/deadline/deadline_filter.cc +30 -28
  115. data/src/core/ext/filters/http/client/http_client_filter.cc +66 -70
  116. data/src/core/ext/filters/http/client_authority_filter.cc +21 -21
  117. data/src/core/ext/filters/http/http_filters_plugin.cc +28 -12
  118. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +335 -301
  119. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +399 -0
  120. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
  121. data/src/core/ext/filters/http/server/http_server_filter.cc +66 -39
  122. data/src/core/ext/filters/max_age/max_age_filter.cc +72 -60
  123. data/src/core/ext/filters/message_size/message_size_filter.cc +116 -144
  124. data/src/core/ext/filters/message_size/message_size_filter.h +12 -6
  125. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +19 -17
  126. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +193 -171
  127. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +48 -1
  128. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +29 -25
  129. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +44 -64
  130. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +384 -305
  131. data/src/core/ext/transport/chttp2/server/chttp2_server.h +7 -2
  132. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
  133. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +10 -16
  134. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +9 -9
  135. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  136. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +640 -560
  137. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
  138. data/src/core/ext/transport/chttp2/transport/context_list.cc +5 -3
  139. data/src/core/ext/transport/chttp2/transport/flow_control.cc +26 -31
  140. data/src/core/ext/transport/chttp2/transport/flow_control.h +28 -38
  141. data/src/core/ext/transport/chttp2/transport/frame_data.cc +45 -54
  142. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -9
  143. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -7
  145. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  146. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +21 -13
  147. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +9 -3
  148. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +13 -12
  149. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  150. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  151. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  152. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +531 -348
  153. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +26 -15
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +213 -143
  155. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +11 -4
  156. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +41 -196
  157. data/src/core/ext/transport/chttp2/transport/hpack_table.h +62 -18
  158. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  159. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  160. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -1
  161. data/src/core/ext/transport/chttp2/transport/internal.h +64 -47
  162. data/src/core/ext/transport/chttp2/transport/parsing.cc +148 -162
  163. data/src/core/ext/transport/chttp2/transport/stream_map.cc +28 -18
  164. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  165. data/src/core/ext/transport/chttp2/transport/writing.cc +38 -30
  166. data/src/core/ext/transport/inproc/inproc_transport.cc +164 -114
  167. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +17 -0
  168. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +29 -0
  169. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +27 -0
  170. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +53 -0
  171. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
  172. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
  173. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  174. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  175. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
  176. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
  177. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +35 -0
  178. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  179. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +55 -0
  180. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  181. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +35 -0
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  194. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  195. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +36 -0
  196. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  197. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
  198. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
  199. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  200. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  201. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +34 -0
  202. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  203. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  204. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  205. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  206. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  207. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  208. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  209. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +33 -0
  210. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  211. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
  212. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
  213. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
  214. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
  215. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  216. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  217. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
  218. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
  219. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  220. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  221. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
  222. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
  223. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
  224. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
  225. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  226. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
  229. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  230. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  231. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
  232. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
  233. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
  234. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
  235. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
  237. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +27 -0
  238. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  239. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +25 -0
  240. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  241. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
  242. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
  243. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +30 -0
  244. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  245. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +30 -0
  246. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  247. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  248. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  249. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +29 -0
  250. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  251. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +27 -0
  252. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  253. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  254. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  255. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  256. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  257. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  258. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  259. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  260. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  261. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  262. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
  263. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  265. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  266. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  267. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  268. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  269. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +17 -0
  270. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +35 -0
  271. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +40 -0
  272. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  273. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +51 -0
  274. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  275. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +30 -0
  276. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  277. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +17 -0
  278. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +29 -0
  279. data/src/core/ext/upb-generated/google/api/annotations.upb.c +18 -0
  280. data/src/core/ext/upb-generated/google/api/annotations.upb.h +29 -0
  281. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  282. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  283. data/src/core/ext/upb-generated/google/api/http.upb.c +66 -0
  284. data/src/core/ext/upb-generated/google/api/http.upb.h +191 -0
  285. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +27 -0
  286. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +57 -0
  287. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +486 -0
  288. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1722 -0
  289. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +27 -0
  290. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +57 -0
  291. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +22 -0
  292. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +49 -0
  293. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +79 -0
  294. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +194 -0
  295. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +27 -0
  296. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +57 -0
  297. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +106 -0
  298. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +237 -0
  299. data/src/core/ext/upb-generated/google/rpc/status.upb.c +33 -0
  300. data/src/core/ext/upb-generated/google/rpc/status.upb.h +74 -0
  301. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +49 -0
  302. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +113 -0
  303. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +212 -0
  304. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +672 -0
  305. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +42 -0
  306. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +110 -0
  307. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +36 -0
  308. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +83 -0
  309. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +141 -0
  310. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +396 -0
  311. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +48 -0
  312. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +103 -0
  313. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +17 -0
  314. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +29 -0
  315. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  316. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +64 -0
  317. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  318. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  319. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +58 -0
  320. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +117 -0
  321. data/src/core/ext/upb-generated/validate/validate.upb.c +448 -0
  322. data/src/core/ext/upb-generated/validate/validate.upb.h +2074 -0
  323. data/src/core/ext/xds/xds_api.cc +2388 -0
  324. data/src/core/ext/xds/xds_api.h +360 -0
  325. data/src/core/ext/xds/xds_bootstrap.cc +373 -0
  326. data/src/core/ext/xds/xds_bootstrap.h +93 -0
  327. data/src/core/ext/xds/xds_channel.h +46 -0
  328. data/src/core/ext/xds/xds_channel_args.h +26 -0
  329. data/src/core/ext/xds/xds_channel_secure.cc +103 -0
  330. data/src/core/ext/xds/xds_client.cc +2114 -0
  331. data/src/core/ext/xds/xds_client.h +276 -0
  332. data/src/core/ext/xds/xds_client_stats.cc +115 -0
  333. data/src/core/ext/xds/xds_client_stats.h +211 -0
  334. data/src/core/lib/avl/avl.cc +1 -1
  335. data/src/core/lib/channel/channel_args.cc +52 -14
  336. data/src/core/lib/channel/channel_args.h +41 -3
  337. data/src/core/lib/channel/channel_stack.cc +1 -1
  338. data/src/core/lib/channel/channel_stack.h +38 -18
  339. data/src/core/lib/channel/channel_trace.cc +32 -45
  340. data/src/core/lib/channel/channel_trace.h +3 -3
  341. data/src/core/lib/channel/channelz.cc +377 -318
  342. data/src/core/lib/channel/channelz.h +128 -90
  343. data/src/core/lib/channel/channelz_registry.cc +123 -178
  344. data/src/core/lib/channel/channelz_registry.h +14 -32
  345. data/src/core/lib/channel/connected_channel.cc +28 -25
  346. data/src/core/lib/channel/context.h +2 -2
  347. data/src/core/lib/channel/handshaker.cc +18 -14
  348. data/src/core/lib/channel/handshaker.h +7 -6
  349. data/src/core/lib/channel/handshaker_factory.h +1 -3
  350. data/src/core/lib/channel/handshaker_registry.cc +9 -21
  351. data/src/core/lib/channel/handshaker_registry.h +3 -3
  352. data/src/core/lib/channel/status_util.cc +2 -3
  353. data/src/core/lib/compression/compression.cc +16 -11
  354. data/src/core/lib/compression/compression_args.cc +13 -6
  355. data/src/core/lib/compression/compression_args.h +3 -2
  356. data/src/core/lib/compression/compression_internal.cc +15 -11
  357. data/src/core/lib/compression/compression_internal.h +9 -1
  358. data/src/core/lib/compression/message_compress.cc +8 -3
  359. data/src/core/lib/compression/stream_compression.cc +3 -2
  360. data/src/core/lib/compression/stream_compression.h +2 -2
  361. data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
  362. data/src/core/lib/compression/stream_compression_identity.cc +5 -7
  363. data/src/core/lib/debug/stats.cc +21 -27
  364. data/src/core/lib/debug/stats.h +3 -1
  365. data/src/core/lib/debug/trace.h +3 -2
  366. data/src/core/lib/gpr/alloc.cc +4 -29
  367. data/src/core/lib/gpr/cpu_linux.cc +1 -1
  368. data/src/core/lib/gpr/env.h +1 -1
  369. data/src/core/lib/gpr/env_linux.cc +10 -21
  370. data/src/core/lib/gpr/env_posix.cc +0 -5
  371. data/src/core/lib/gpr/log_linux.cc +8 -10
  372. data/src/core/lib/gpr/log_posix.cc +7 -9
  373. data/src/core/lib/gpr/spinlock.h +2 -3
  374. data/src/core/lib/gpr/string.cc +25 -36
  375. data/src/core/lib/gpr/string.h +11 -19
  376. data/src/core/lib/gpr/sync_abseil.cc +116 -0
  377. data/src/core/lib/gpr/sync_posix.cc +10 -142
  378. data/src/core/lib/gpr/sync_windows.cc +4 -2
  379. data/src/core/lib/gpr/time.cc +4 -0
  380. data/src/core/lib/gpr/time_posix.cc +1 -1
  381. data/src/core/lib/gpr/time_precise.cc +123 -36
  382. data/src/core/lib/gpr/time_precise.h +37 -0
  383. data/src/core/lib/gprpp/arena.cc +3 -3
  384. data/src/core/lib/gprpp/arena.h +2 -3
  385. data/src/core/lib/gprpp/atomic.h +10 -6
  386. data/src/core/lib/gprpp/debug_location.h +3 -2
  387. data/src/core/lib/gprpp/fork.cc +19 -26
  388. data/src/core/lib/gprpp/fork.h +18 -3
  389. data/src/core/lib/gprpp/global_config.h +9 -0
  390. data/src/core/lib/gprpp/global_config_custom.h +1 -1
  391. data/src/core/lib/gprpp/global_config_env.cc +15 -13
  392. data/src/core/lib/gprpp/global_config_env.h +2 -2
  393. data/src/core/lib/gprpp/host_port.cc +112 -0
  394. data/src/core/lib/gprpp/host_port.h +56 -0
  395. data/src/core/lib/gprpp/map.h +16 -382
  396. data/src/core/lib/gprpp/memory.h +12 -75
  397. data/src/core/lib/gprpp/mpscq.cc +108 -0
  398. data/src/core/lib/gprpp/mpscq.h +98 -0
  399. data/src/core/lib/gprpp/orphanable.h +9 -14
  400. data/src/core/lib/gprpp/ref_counted.h +97 -44
  401. data/src/core/lib/gprpp/ref_counted_ptr.h +8 -1
  402. data/src/core/lib/gprpp/sync.h +9 -0
  403. data/src/core/lib/gprpp/thd.h +13 -6
  404. data/src/core/lib/gprpp/thd_posix.cc +29 -3
  405. data/src/core/lib/gprpp/thd_windows.cc +12 -4
  406. data/src/core/lib/http/format_request.cc +46 -65
  407. data/src/core/lib/http/httpcli.cc +18 -16
  408. data/src/core/lib/http/httpcli.h +2 -3
  409. data/src/core/lib/http/httpcli_security_connector.cc +27 -21
  410. data/src/core/lib/http/parser.cc +1 -1
  411. data/src/core/lib/http/parser.h +2 -3
  412. data/src/core/lib/iomgr/buffer_list.cc +45 -40
  413. data/src/core/lib/iomgr/buffer_list.h +27 -27
  414. data/src/core/lib/iomgr/call_combiner.cc +12 -12
  415. data/src/core/lib/iomgr/call_combiner.h +10 -8
  416. data/src/core/lib/iomgr/cfstream_handle.cc +11 -3
  417. data/src/core/lib/iomgr/cfstream_handle.h +11 -3
  418. data/src/core/lib/iomgr/closure.h +43 -141
  419. data/src/core/lib/iomgr/combiner.cc +46 -90
  420. data/src/core/lib/iomgr/combiner.h +30 -8
  421. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  422. data/src/core/lib/iomgr/endpoint.cc +5 -1
  423. data/src/core/lib/iomgr/endpoint.h +7 -3
  424. data/src/core/lib/iomgr/endpoint_cfstream.cc +41 -19
  425. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  426. data/src/core/lib/iomgr/endpoint_pair_posix.cc +11 -11
  427. data/src/core/lib/iomgr/error.cc +26 -19
  428. data/src/core/lib/iomgr/error.h +15 -8
  429. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  430. data/src/core/lib/iomgr/error_internal.h +1 -1
  431. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  432. data/src/core/lib/iomgr/ev_apple.h +43 -0
  433. data/src/core/lib/iomgr/ev_epoll1_linux.cc +48 -47
  434. data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -94
  435. data/src/core/lib/iomgr/ev_poll_posix.cc +42 -26
  436. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  437. data/src/core/lib/iomgr/ev_posix.h +3 -2
  438. data/src/core/lib/iomgr/ev_windows.cc +2 -2
  439. data/src/core/lib/iomgr/exec_ctx.cc +78 -21
  440. data/src/core/lib/iomgr/exec_ctx.h +27 -7
  441. data/src/core/lib/iomgr/executor.cc +25 -41
  442. data/src/core/lib/iomgr/executor.h +7 -7
  443. data/src/core/lib/iomgr/executor/mpmcqueue.cc +183 -0
  444. data/src/core/lib/iomgr/executor/mpmcqueue.h +175 -0
  445. data/src/core/lib/iomgr/executor/threadpool.cc +137 -0
  446. data/src/core/lib/iomgr/executor/threadpool.h +149 -0
  447. data/src/core/lib/iomgr/fork_posix.cc +8 -2
  448. data/src/core/lib/iomgr/iocp_windows.cc +2 -2
  449. data/src/core/lib/iomgr/iomgr.cc +4 -4
  450. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  451. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +87 -9
  452. data/src/core/lib/iomgr/iomgr_uv.cc +3 -0
  453. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  454. data/src/core/lib/iomgr/load_file.cc +1 -0
  455. data/src/core/lib/iomgr/lockfree_event.cc +13 -12
  456. data/src/core/lib/iomgr/parse_address.cc +238 -0
  457. data/src/core/lib/iomgr/parse_address.h +53 -0
  458. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +87 -0
  459. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +88 -0
  460. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  461. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  462. data/src/core/lib/iomgr/pollset_uv.h +32 -0
  463. data/src/core/lib/iomgr/pollset_windows.cc +16 -2
  464. data/src/core/lib/iomgr/port.h +10 -22
  465. data/src/core/lib/iomgr/python_util.h +46 -0
  466. data/src/core/lib/iomgr/resolve_address.h +4 -6
  467. data/src/core/lib/iomgr/resolve_address_custom.cc +49 -68
  468. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  469. data/src/core/lib/iomgr/resolve_address_posix.cc +20 -24
  470. data/src/core/lib/iomgr/resolve_address_windows.cc +22 -35
  471. data/src/core/lib/iomgr/resource_quota.cc +120 -110
  472. data/src/core/lib/iomgr/resource_quota.h +13 -9
  473. data/src/core/lib/iomgr/sockaddr_utils.cc +33 -36
  474. data/src/core/lib/iomgr/sockaddr_utils.h +12 -16
  475. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  476. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  477. data/src/core/lib/iomgr/socket_utils_common_posix.cc +140 -82
  478. data/src/core/lib/iomgr/socket_utils_posix.h +19 -0
  479. data/src/core/lib/iomgr/socket_windows.cc +6 -7
  480. data/src/core/lib/iomgr/socket_windows.h +1 -1
  481. data/src/core/lib/iomgr/tcp_client_cfstream.cc +18 -21
  482. data/src/core/lib/iomgr/tcp_client_custom.cc +9 -11
  483. data/src/core/lib/iomgr/tcp_client_posix.cc +47 -59
  484. data/src/core/lib/iomgr/tcp_client_posix.h +6 -6
  485. data/src/core/lib/iomgr/tcp_client_windows.cc +12 -13
  486. data/src/core/lib/iomgr/tcp_custom.cc +58 -36
  487. data/src/core/lib/iomgr/tcp_custom.h +4 -1
  488. data/src/core/lib/iomgr/tcp_posix.cc +697 -124
  489. data/src/core/lib/iomgr/tcp_server.cc +8 -4
  490. data/src/core/lib/iomgr/tcp_server.h +28 -5
  491. data/src/core/lib/iomgr/tcp_server_custom.cc +46 -41
  492. data/src/core/lib/iomgr/tcp_server_posix.cc +102 -46
  493. data/src/core/lib/iomgr/tcp_server_utils_posix.h +6 -4
  494. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +17 -19
  495. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -18
  496. data/src/core/lib/iomgr/tcp_server_windows.cc +33 -29
  497. data/src/core/lib/iomgr/tcp_uv.cc +8 -8
  498. data/src/core/lib/iomgr/tcp_windows.cc +49 -30
  499. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  500. data/src/core/lib/iomgr/timer.h +2 -1
  501. data/src/core/lib/iomgr/timer_custom.cc +7 -5
  502. data/src/core/lib/iomgr/timer_generic.cc +26 -24
  503. data/src/core/lib/iomgr/timer_generic.h +39 -0
  504. data/src/core/lib/iomgr/timer_heap.h +2 -3
  505. data/src/core/lib/iomgr/timer_manager.cc +8 -30
  506. data/src/core/lib/iomgr/timer_manager.h +2 -0
  507. data/src/core/lib/iomgr/udp_server.cc +53 -53
  508. data/src/core/lib/iomgr/udp_server.h +11 -14
  509. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  510. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  511. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  512. data/src/core/lib/iomgr/work_serializer.cc +155 -0
  513. data/src/core/lib/iomgr/work_serializer.h +65 -0
  514. data/src/core/lib/json/json.h +209 -68
  515. data/src/core/lib/json/json_reader.cc +508 -317
  516. data/src/core/lib/json/json_writer.cc +202 -110
  517. data/src/core/lib/profiling/basic_timers.cc +2 -2
  518. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  519. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  520. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  521. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  522. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  523. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
  524. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
  525. data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
  526. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  527. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
  528. data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
  529. data/src/core/lib/security/credentials/alts/alts_credentials.cc +10 -7
  530. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  531. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +45 -57
  532. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  533. data/src/core/lib/security/credentials/composite/composite_credentials.cc +26 -6
  534. data/src/core/lib/security/credentials/composite/composite_credentials.h +11 -4
  535. data/src/core/lib/security/credentials/credentials.h +31 -25
  536. data/src/core/lib/security/credentials/fake/fake_credentials.cc +9 -9
  537. data/src/core/lib/security/credentials/fake/fake_credentials.h +6 -1
  538. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  539. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +74 -56
  540. data/src/core/lib/security/credentials/iam/iam_credentials.cc +12 -10
  541. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  542. data/src/core/lib/security/credentials/jwt/json_token.cc +32 -58
  543. data/src/core/lib/security/credentials/jwt/json_token.h +5 -7
  544. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +19 -26
  545. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  546. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +153 -170
  547. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -6
  548. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -3
  549. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +332 -87
  550. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +27 -7
  551. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +31 -15
  552. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +4 -1
  553. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +43 -5
  554. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +12 -2
  555. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +70 -17
  556. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +118 -5
  557. data/src/core/lib/security/credentials/tls/tls_credentials.cc +128 -0
  558. data/src/core/lib/security/credentials/tls/tls_credentials.h +62 -0
  559. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +67 -32
  560. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +5 -0
  561. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +64 -47
  562. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +2 -2
  563. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +9 -5
  564. data/src/core/lib/security/security_connector/local/local_security_connector.cc +42 -16
  565. data/src/core/lib/security/security_connector/security_connector.cc +4 -1
  566. data/src/core/lib/security/security_connector/security_connector.h +22 -20
  567. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +55 -62
  568. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +8 -5
  569. data/src/core/lib/security/security_connector/ssl_utils.cc +150 -53
  570. data/src/core/lib/security/security_connector/ssl_utils.h +41 -17
  571. data/src/core/lib/security/security_connector/ssl_utils_config.cc +32 -0
  572. data/src/core/lib/security/security_connector/ssl_utils_config.h +30 -0
  573. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +606 -0
  574. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +183 -0
  575. data/src/core/lib/security/transport/auth_filters.h +0 -2
  576. data/src/core/lib/security/transport/client_auth_filter.cc +74 -28
  577. data/src/core/lib/security/transport/secure_endpoint.cc +16 -9
  578. data/src/core/lib/security/transport/security_handshaker.cc +103 -43
  579. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  580. data/src/core/lib/security/transport/server_auth_filter.cc +18 -17
  581. data/src/core/lib/security/util/json_util.cc +35 -15
  582. data/src/core/lib/security/util/json_util.h +5 -3
  583. data/src/core/lib/slice/b64.cc +3 -4
  584. data/src/core/lib/slice/b64.h +3 -4
  585. data/src/core/lib/slice/slice.cc +188 -73
  586. data/src/core/lib/slice/slice_buffer.cc +55 -26
  587. data/src/core/lib/slice/slice_intern.cc +164 -64
  588. data/src/core/lib/slice/slice_internal.h +110 -8
  589. data/src/core/lib/slice/slice_string_helpers.cc +10 -1
  590. data/src/core/lib/slice/slice_string_helpers.h +3 -1
  591. data/src/core/lib/slice/slice_utils.h +200 -0
  592. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  593. data/src/core/lib/surface/call.cc +166 -117
  594. data/src/core/lib/surface/call.h +8 -8
  595. data/src/core/lib/surface/call_log_batch.cc +51 -60
  596. data/src/core/lib/surface/channel.cc +188 -137
  597. data/src/core/lib/surface/channel.h +91 -11
  598. data/src/core/lib/surface/channel_ping.cc +3 -4
  599. data/src/core/lib/surface/completion_queue.cc +144 -111
  600. data/src/core/lib/surface/completion_queue.h +6 -3
  601. data/src/core/lib/surface/completion_queue_factory.cc +1 -1
  602. data/src/core/lib/surface/event_string.cc +18 -25
  603. data/src/core/lib/surface/event_string.h +3 -1
  604. data/src/core/lib/surface/init.cc +6 -2
  605. data/src/core/lib/surface/init_secure.cc +2 -2
  606. data/src/core/lib/surface/lame_client.cc +43 -30
  607. data/src/core/lib/surface/server.cc +1275 -1316
  608. data/src/core/lib/surface/server.h +373 -52
  609. data/src/core/lib/surface/validate_metadata.cc +18 -8
  610. data/src/core/lib/surface/validate_metadata.h +13 -2
  611. data/src/core/lib/surface/version.cc +2 -2
  612. data/src/core/lib/transport/authority_override.cc +38 -0
  613. data/src/core/lib/transport/authority_override.h +32 -0
  614. data/src/core/lib/transport/byte_stream.cc +5 -7
  615. data/src/core/lib/transport/byte_stream.h +13 -12
  616. data/src/core/lib/transport/connectivity_state.cc +118 -98
  617. data/src/core/lib/transport/connectivity_state.h +114 -50
  618. data/src/core/lib/transport/error_utils.cc +23 -1
  619. data/src/core/lib/transport/error_utils.h +6 -0
  620. data/src/core/lib/transport/metadata.cc +252 -57
  621. data/src/core/lib/transport/metadata.h +168 -80
  622. data/src/core/lib/transport/metadata_batch.cc +78 -16
  623. data/src/core/lib/transport/metadata_batch.h +40 -3
  624. data/src/core/lib/transport/static_metadata.cc +1169 -495
  625. data/src/core/lib/transport/static_metadata.h +279 -282
  626. data/src/core/lib/transport/status_conversion.cc +7 -15
  627. data/src/core/lib/transport/status_metadata.cc +8 -1
  628. data/src/core/lib/transport/status_metadata.h +18 -0
  629. data/src/core/lib/transport/timeout_encoding.cc +7 -0
  630. data/src/core/lib/transport/timeout_encoding.h +3 -2
  631. data/src/core/lib/transport/transport.cc +14 -13
  632. data/src/core/lib/transport/transport.h +48 -8
  633. data/src/core/lib/transport/transport_op_string.cc +67 -105
  634. data/src/core/lib/uri/uri_parser.cc +30 -35
  635. data/src/core/lib/uri/uri_parser.h +5 -4
  636. data/src/core/plugin_registry/grpc_plugin_registry.cc +36 -4
  637. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  638. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  639. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +414 -120
  640. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  641. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  642. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
  643. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +293 -61
  644. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +15 -5
  645. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +5 -0
  646. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +10 -6
  647. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +4 -3
  648. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +76 -48
  649. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +34 -26
  650. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  651. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  652. data/src/core/tsi/fake_transport_security.cc +22 -21
  653. data/src/core/tsi/fake_transport_security.h +2 -0
  654. data/src/core/tsi/local_transport_security.cc +8 -6
  655. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -6
  656. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -3
  657. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +11 -9
  658. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -13
  659. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -3
  660. data/src/core/tsi/ssl_transport_security.cc +345 -103
  661. data/src/core/tsi/ssl_transport_security.h +42 -11
  662. data/src/core/tsi/ssl_types.h +0 -2
  663. data/src/core/tsi/transport_security.cc +13 -0
  664. data/src/core/tsi/transport_security.h +6 -9
  665. data/src/core/tsi/transport_security_grpc.cc +7 -0
  666. data/src/core/tsi/transport_security_grpc.h +8 -3
  667. data/src/core/tsi/transport_security_interface.h +20 -3
  668. data/src/ruby/bin/math_pb.rb +5 -5
  669. data/src/ruby/bin/math_services_pb.rb +4 -4
  670. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  671. data/src/ruby/ext/grpc/ext-export.gcc +6 -0
  672. data/src/ruby/ext/grpc/extconf.rb +11 -2
  673. data/src/ruby/ext/grpc/rb_call.c +13 -4
  674. data/src/ruby/ext/grpc/rb_call.h +4 -0
  675. data/src/ruby/ext/grpc/rb_call_credentials.c +61 -13
  676. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  677. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  678. data/src/ruby/ext/grpc/rb_enable_cpp.cc +22 -0
  679. data/src/ruby/ext/grpc/rb_grpc.c +1 -42
  680. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -6
  681. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +28 -13
  682. data/src/ruby/lib/grpc.rb +2 -0
  683. data/src/ruby/lib/grpc/core/status_codes.rb +135 -0
  684. data/src/ruby/lib/grpc/errors.rb +107 -49
  685. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  686. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  687. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  688. data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
  689. data/src/ruby/lib/grpc/generic/rpc_server.rb +11 -12
  690. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  691. data/src/ruby/lib/grpc/google_rpc_status_utils.rb +9 -4
  692. data/src/ruby/lib/grpc/grpc.rb +1 -1
  693. data/src/ruby/lib/grpc/structs.rb +15 -0
  694. data/src/ruby/lib/grpc/version.rb +1 -1
  695. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  696. data/src/ruby/pb/grpc/health/v1/health_pb.rb +3 -3
  697. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  698. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -1
  699. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +39 -13
  700. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +43 -11
  701. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  702. data/src/ruby/spec/debug_message_spec.rb +134 -0
  703. data/src/ruby/spec/errors_spec.rb +1 -0
  704. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  705. data/src/ruby/spec/generic/service_spec.rb +2 -0
  706. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  707. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto +22 -0
  708. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  709. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +41 -0
  710. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  711. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  712. data/src/ruby/spec/pb/codegen/package_option_spec.rb +79 -29
  713. data/src/ruby/spec/support/services.rb +10 -4
  714. data/src/ruby/spec/testdata/ca.pem +18 -13
  715. data/src/ruby/spec/testdata/client.key +26 -14
  716. data/src/ruby/spec/testdata/client.pem +18 -12
  717. data/src/ruby/spec/testdata/server1.key +26 -14
  718. data/src/ruby/spec/testdata/server1.pem +20 -14
  719. data/src/ruby/spec/user_agent_spec.rb +74 -0
  720. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +159 -0
  721. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  722. data/third_party/abseil-cpp/absl/base/attributes.h +621 -0
  723. data/third_party/abseil-cpp/absl/base/call_once.h +226 -0
  724. data/third_party/abseil-cpp/absl/base/casts.h +184 -0
  725. data/third_party/abseil-cpp/absl/base/config.h +671 -0
  726. data/third_party/abseil-cpp/absl/base/const_init.h +76 -0
  727. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +129 -0
  728. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +389 -0
  729. data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
  730. data/third_party/abseil-cpp/absl/base/internal/bits.h +218 -0
  731. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +107 -0
  732. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +94 -0
  733. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  734. data/third_party/abseil-cpp/absl/base/internal/endian.h +266 -0
  735. data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  736. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  737. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  738. data/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
  739. data/third_party/abseil-cpp/absl/base/internal/identity.h +37 -0
  740. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +107 -0
  741. data/third_party/abseil-cpp/absl/base/internal/invoke.h +187 -0
  742. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  743. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  744. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +107 -0
  745. data/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
  746. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +240 -0
  747. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +183 -0
  748. data/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
  749. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +233 -0
  750. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +243 -0
  751. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
  752. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +66 -0
  753. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
  754. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
  755. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +93 -0
  756. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +37 -0
  757. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +416 -0
  758. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +66 -0
  759. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +271 -0
  760. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +152 -0
  761. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +259 -0
  762. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +108 -0
  763. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
  764. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +66 -0
  765. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +158 -0
  766. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +140 -0
  767. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +124 -0
  768. data/third_party/abseil-cpp/absl/base/log_severity.cc +27 -0
  769. data/third_party/abseil-cpp/absl/base/log_severity.h +121 -0
  770. data/third_party/abseil-cpp/absl/base/macros.h +220 -0
  771. data/third_party/abseil-cpp/absl/base/optimization.h +181 -0
  772. data/third_party/abseil-cpp/absl/base/options.h +211 -0
  773. data/third_party/abseil-cpp/absl/base/policy_checks.h +111 -0
  774. data/third_party/abseil-cpp/absl/base/port.h +26 -0
  775. data/third_party/abseil-cpp/absl/base/thread_annotations.h +280 -0
  776. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  777. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  778. data/third_party/abseil-cpp/absl/container/inlined_vector.h +848 -0
  779. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  780. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +265 -0
  781. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  782. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  783. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  784. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  785. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  786. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  787. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  788. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  789. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +892 -0
  790. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  791. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  792. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  793. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  794. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  795. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  796. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  797. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  798. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  799. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  800. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  801. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  802. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  803. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  804. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  805. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  806. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  807. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  808. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  809. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  810. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  811. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  812. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  813. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  814. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  815. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  816. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  817. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  818. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  819. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  820. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  821. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  822. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  823. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  824. data/third_party/abseil-cpp/absl/memory/memory.h +695 -0
  825. data/third_party/abseil-cpp/absl/meta/type_traits.h +759 -0
  826. data/third_party/abseil-cpp/absl/numeric/int128.cc +404 -0
  827. data/third_party/abseil-cpp/absl/numeric/int128.h +1091 -0
  828. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +302 -0
  829. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +308 -0
  830. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  831. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  832. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  833. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  834. data/third_party/abseil-cpp/absl/strings/ascii.cc +200 -0
  835. data/third_party/abseil-cpp/absl/strings/ascii.h +242 -0
  836. data/third_party/abseil-cpp/absl/strings/charconv.cc +984 -0
  837. data/third_party/abseil-cpp/absl/strings/charconv.h +119 -0
  838. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  839. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  840. data/third_party/abseil-cpp/absl/strings/escaping.cc +949 -0
  841. data/third_party/abseil-cpp/absl/strings/escaping.h +164 -0
  842. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +156 -0
  843. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +359 -0
  844. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +423 -0
  845. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
  846. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
  847. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  848. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +180 -0
  849. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +58 -0
  850. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +112 -0
  851. data/third_party/abseil-cpp/absl/strings/internal/memutil.h +148 -0
  852. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +36 -0
  853. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +89 -0
  854. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +73 -0
  855. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
  856. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +388 -0
  857. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +432 -0
  858. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +245 -0
  859. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +209 -0
  860. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +326 -0
  861. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +51 -0
  862. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +415 -0
  863. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +493 -0
  864. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +23 -0
  865. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
  866. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +104 -0
  867. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +334 -0
  868. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +333 -0
  869. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +314 -0
  870. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +455 -0
  871. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +53 -0
  872. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +50 -0
  873. data/third_party/abseil-cpp/absl/strings/match.cc +40 -0
  874. data/third_party/abseil-cpp/absl/strings/match.h +90 -0
  875. data/third_party/abseil-cpp/absl/strings/numbers.cc +965 -0
  876. data/third_party/abseil-cpp/absl/strings/numbers.h +266 -0
  877. data/third_party/abseil-cpp/absl/strings/str_cat.cc +246 -0
  878. data/third_party/abseil-cpp/absl/strings/str_cat.h +408 -0
  879. data/third_party/abseil-cpp/absl/strings/str_format.h +537 -0
  880. data/third_party/abseil-cpp/absl/strings/str_join.h +293 -0
  881. data/third_party/abseil-cpp/absl/strings/str_replace.cc +82 -0
  882. data/third_party/abseil-cpp/absl/strings/str_replace.h +219 -0
  883. data/third_party/abseil-cpp/absl/strings/str_split.cc +139 -0
  884. data/third_party/abseil-cpp/absl/strings/str_split.h +513 -0
  885. data/third_party/abseil-cpp/absl/strings/string_view.cc +235 -0
  886. data/third_party/abseil-cpp/absl/strings/string_view.h +622 -0
  887. data/third_party/abseil-cpp/absl/strings/strip.h +91 -0
  888. data/third_party/abseil-cpp/absl/strings/substitute.cc +171 -0
  889. data/third_party/abseil-cpp/absl/strings/substitute.h +693 -0
  890. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  891. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  892. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  893. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  894. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  895. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  896. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  897. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  898. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  899. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  900. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  901. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  902. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  903. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  904. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  905. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  906. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  907. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  908. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  909. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  910. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  911. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  912. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  913. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  914. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  915. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  916. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  917. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  918. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  919. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  920. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  921. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  922. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  923. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  924. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  925. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  926. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  927. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  928. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  929. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  930. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  931. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  932. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  933. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  934. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  935. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  936. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  937. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  938. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  939. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +48 -0
  940. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +78 -0
  941. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  942. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  943. data/third_party/abseil-cpp/absl/types/internal/optional.h +396 -0
  944. data/third_party/abseil-cpp/absl/types/internal/span.h +128 -0
  945. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  946. data/third_party/abseil-cpp/absl/types/optional.h +776 -0
  947. data/third_party/abseil-cpp/absl/types/span.h +713 -0
  948. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  949. data/third_party/abseil-cpp/absl/utility/utility.h +350 -0
  950. data/third_party/boringssl-with-bazel/err_data.c +1451 -0
  951. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +271 -0
  952. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +123 -0
  953. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +93 -0
  954. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +87 -0
  955. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +195 -0
  956. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_gentm.c +0 -0
  957. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +88 -0
  958. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +420 -0
  959. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +305 -0
  960. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +286 -0
  961. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_octet.c +0 -0
  962. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_print.c +0 -0
  963. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +313 -0
  964. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +212 -0
  965. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +151 -0
  966. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utctm.c +0 -0
  967. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utf8.c +0 -0
  968. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +446 -0
  969. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_locl.h +0 -0
  970. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_par.c +0 -0
  971. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +105 -0
  972. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +93 -0
  973. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +97 -0
  974. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +91 -0
  975. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_dec.c +0 -0
  976. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +664 -0
  977. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_fre.c +0 -0
  978. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_new.c +0 -0
  979. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_typ.c +0 -0
  980. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_utl.c +0 -0
  981. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/time_support.c +0 -0
  982. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +466 -0
  983. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +700 -0
  984. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio_mem.c +0 -0
  985. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +545 -0
  986. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +279 -0
  987. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +317 -0
  988. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/hexdump.c +0 -0
  989. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/internal.h +0 -0
  990. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +488 -0
  991. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/printf.c +0 -0
  992. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +206 -0
  993. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +118 -0
  994. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/bn_asn1.c +0 -0
  995. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +470 -0
  996. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +172 -0
  997. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/asn1_compat.c +0 -0
  998. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +265 -0
  999. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +719 -0
  1000. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +688 -0
  1001. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +96 -0
  1002. data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +155 -0
  1003. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +184 -0
  1004. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +45 -0
  1005. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +143 -0
  1006. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +152 -0
  1007. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c +447 -0
  1008. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +283 -0
  1009. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +891 -0
  1010. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +418 -0
  1011. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_null.c +0 -0
  1012. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc2.c +0 -0
  1013. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc4.c +0 -0
  1014. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +688 -0
  1015. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/internal.h +0 -0
  1016. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +492 -0
  1017. data/third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c +278 -0
  1018. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +810 -0
  1019. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf_def.h +0 -0
  1020. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/internal.h +0 -0
  1021. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-fuchsia.c +0 -0
  1022. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-linux.c +0 -0
  1023. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +220 -0
  1024. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.h +201 -0
  1025. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm.c +0 -0
  1026. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +291 -0
  1027. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-ppc64le.c +0 -0
  1028. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +226 -0
  1029. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +2159 -0
  1030. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +7872 -0
  1031. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +146 -0
  1032. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +539 -0
  1033. data/third_party/boringssl-with-bazel/src/crypto/dh/check.c +217 -0
  1034. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +533 -0
  1035. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/dh_asn1.c +0 -0
  1036. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/params.c +0 -0
  1037. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/digest_extra/digest_extra.c +0 -0
  1038. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +980 -0
  1039. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dsa/dsa_asn1.c +0 -0
  1040. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +574 -0
  1041. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +95 -0
  1042. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
  1043. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
  1044. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +124 -0
  1045. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +267 -0
  1046. data/third_party/boringssl-with-bazel/src/crypto/engine/engine.c +99 -0
  1047. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +850 -0
  1048. data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +58 -0
  1049. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/digestsign.c +0 -0
  1050. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +443 -0
  1051. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +547 -0
  1052. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +484 -0
  1053. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +269 -0
  1054. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +273 -0
  1055. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +286 -0
  1056. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +255 -0
  1057. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +104 -0
  1058. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +221 -0
  1059. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +648 -0
  1060. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +194 -0
  1061. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +110 -0
  1062. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +248 -0
  1063. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/pbkdf.c +0 -0
  1064. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/print.c +0 -0
  1065. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +213 -0
  1066. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/sign.c +0 -0
  1067. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ex_data.c +0 -0
  1068. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
  1069. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
  1070. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +238 -0
  1071. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +236 -0
  1072. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +122 -0
  1073. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +263 -0
  1074. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/add.c +0 -0
  1075. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/asm/x86_64-gcc.c +0 -0
  1076. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +445 -0
  1077. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bytes.c +0 -0
  1078. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +200 -0
  1079. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +236 -0
  1080. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +886 -0
  1081. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +87 -0
  1082. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1288 -0
  1083. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +378 -0
  1084. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  1085. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/generic.c +0 -0
  1086. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +704 -0
  1087. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/jacobi.c +0 -0
  1088. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +502 -0
  1089. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +186 -0
  1090. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +749 -0
  1091. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +1068 -0
  1092. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +341 -0
  1093. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +226 -0
  1094. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +104 -0
  1095. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +364 -0
  1096. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/sqrt.c +0 -0
  1097. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/aead.c +0 -0
  1098. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +620 -0
  1099. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +1302 -0
  1100. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c +237 -0
  1101. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +128 -0
  1102. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +89 -0
  1103. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/des.c +0 -0
  1104. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/internal.h +0 -0
  1105. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +271 -0
  1106. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +296 -0
  1107. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/internal.h +0 -0
  1108. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +268 -0
  1109. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +1252 -0
  1110. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +465 -0
  1111. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +524 -0
  1112. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +100 -0
  1113. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +776 -0
  1114. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +328 -0
  1115. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +1180 -0
  1116. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
  1117. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +633 -0
  1118. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h +153 -0
  1119. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
  1120. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  1121. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
  1122. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +357 -0
  1123. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
  1124. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +255 -0
  1125. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +270 -0
  1126. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  1127. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +328 -0
  1128. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +32 -0
  1129. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/hmac/hmac.c +0 -0
  1130. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +29 -0
  1131. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +256 -0
  1132. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h +37 -0
  1133. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +301 -0
  1134. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +167 -0
  1135. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +202 -0
  1136. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +200 -0
  1137. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +729 -0
  1138. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
  1139. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +441 -0
  1140. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +96 -0
  1141. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/polyval.c +0 -0
  1142. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +202 -0
  1143. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  1144. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  1145. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  1146. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +163 -0
  1147. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +378 -0
  1148. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +391 -0
  1149. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +243 -0
  1150. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +127 -0
  1151. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +695 -0
  1152. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +898 -0
  1153. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +1358 -0
  1154. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +716 -0
  1155. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +53 -0
  1156. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1-altivec.c +0 -0
  1157. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +371 -0
  1158. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +343 -0
  1159. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +544 -0
  1160. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/internal.h +0 -0
  1161. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/kdf.c +0 -0
  1162. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hkdf/hkdf.c +0 -0
  1163. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
  1164. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
  1165. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +2100 -0
  1166. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +61 -0
  1167. data/third_party/boringssl-with-bazel/src/crypto/internal.h +834 -0
  1168. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +348 -0
  1169. data/third_party/boringssl-with-bazel/src/crypto/mem.c +373 -0
  1170. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +549 -0
  1171. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +11585 -0
  1172. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj_xref.c +0 -0
  1173. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +261 -0
  1174. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +360 -0
  1175. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +777 -0
  1176. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +87 -0
  1177. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +257 -0
  1178. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +218 -0
  1179. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_x509.c +0 -0
  1180. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_xaux.c +0 -0
  1181. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/internal.h +0 -0
  1182. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +159 -0
  1183. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +385 -0
  1184. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +138 -0
  1185. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +316 -0
  1186. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +530 -0
  1187. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1336 -0
  1188. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/internal.h +0 -0
  1189. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +318 -0
  1190. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +305 -0
  1191. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +856 -0
  1192. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +45 -0
  1193. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +220 -0
  1194. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +52 -0
  1195. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/forkunsafe.c +0 -0
  1196. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +30 -0
  1197. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/rand_extra.c +0 -0
  1198. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +69 -0
  1199. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rc4/rc4.c +0 -0
  1200. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_c11.c +0 -0
  1201. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +53 -0
  1202. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_asn1.c +0 -0
  1203. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c +22 -0
  1204. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +82 -0
  1205. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +431 -0
  1206. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread.c +0 -0
  1207. data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +59 -0
  1208. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +210 -0
  1209. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +260 -0
  1210. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +249 -0
  1211. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1227 -0
  1212. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +682 -0
  1213. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_digest.c +0 -0
  1214. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_sign.c +0 -0
  1215. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +653 -0
  1216. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +114 -0
  1217. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +161 -0
  1218. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +842 -0
  1219. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +458 -0
  1220. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +275 -0
  1221. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/charmap.h +0 -0
  1222. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/i2d_pr.c +0 -0
  1223. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/internal.h +0 -0
  1224. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/rsa_pss.c +0 -0
  1225. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +125 -0
  1226. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +244 -0
  1227. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +544 -0
  1228. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509a.c +0 -0
  1229. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/vpm_int.h +0 -0
  1230. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +90 -0
  1231. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_att.c +0 -0
  1232. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +483 -0
  1233. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_d2.c +0 -0
  1234. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +103 -0
  1235. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_ext.c +0 -0
  1236. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +834 -0
  1237. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +198 -0
  1238. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +116 -0
  1239. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +351 -0
  1240. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +226 -0
  1241. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +329 -0
  1242. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +204 -0
  1243. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_v3.c +0 -0
  1244. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +2506 -0
  1245. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +671 -0
  1246. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +235 -0
  1247. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +389 -0
  1248. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509rset.c +0 -0
  1249. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509spki.c +0 -0
  1250. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_algor.c +0 -0
  1251. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +399 -0
  1252. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_attrib.c +0 -0
  1253. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +563 -0
  1254. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_exten.c +0 -0
  1255. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_info.c +0 -0
  1256. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_name.c +0 -0
  1257. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pkey.c +0 -0
  1258. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +214 -0
  1259. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_req.c +0 -0
  1260. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +89 -0
  1261. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_spki.c +0 -0
  1262. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_val.c +0 -0
  1263. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +356 -0
  1264. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509a.c +0 -0
  1265. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +141 -0
  1266. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +61 -0
  1267. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +286 -0
  1268. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_data.c +0 -0
  1269. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_int.h +0 -0
  1270. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_lib.c +0 -0
  1271. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_map.c +0 -0
  1272. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +189 -0
  1273. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +842 -0
  1274. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +207 -0
  1275. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akeya.c +0 -0
  1276. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +629 -0
  1277. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bcons.c +0 -0
  1278. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bitst.c +0 -0
  1279. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +463 -0
  1280. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +503 -0
  1281. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_crld.c +0 -0
  1282. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +100 -0
  1283. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_extku.c +0 -0
  1284. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +246 -0
  1285. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ia5.c +0 -0
  1286. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +218 -0
  1287. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_int.c +0 -0
  1288. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +371 -0
  1289. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ncons.c +0 -0
  1290. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +68 -0
  1291. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +288 -0
  1292. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcia.c +0 -0
  1293. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcons.c +0 -0
  1294. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pku.c +0 -0
  1295. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pmaps.c +0 -0
  1296. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_prn.c +0 -0
  1297. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +882 -0
  1298. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +155 -0
  1299. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_sxnet.c +0 -0
  1300. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1395 -0
  1301. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +459 -0
  1302. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +207 -0
  1303. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +173 -0
  1304. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +911 -0
  1305. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1_mac.h +0 -0
  1306. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1t.h +0 -0
  1307. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +575 -0
  1308. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +190 -0
  1309. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +933 -0
  1310. data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +93 -0
  1311. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1057 -0
  1312. data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +137 -0
  1313. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buffer.h +0 -0
  1314. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +561 -0
  1315. data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +96 -0
  1316. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/chacha.h +0 -0
  1317. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +638 -0
  1318. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +91 -0
  1319. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +180 -0
  1320. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +212 -0
  1321. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +149 -0
  1322. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +201 -0
  1323. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/des.h +0 -0
  1324. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +319 -0
  1325. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +331 -0
  1326. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +457 -0
  1327. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dtls1.h +0 -0
  1328. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +18 -0
  1329. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +424 -0
  1330. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +372 -0
  1331. data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +118 -0
  1332. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +205 -0
  1333. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +109 -0
  1334. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +465 -0
  1335. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1119 -0
  1336. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ex_data.h +0 -0
  1337. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hkdf.h +0 -0
  1338. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +186 -0
  1339. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +100 -0
  1340. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/is_boringssl.h +0 -0
  1341. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +282 -0
  1342. data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +108 -0
  1343. data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +109 -0
  1344. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +175 -0
  1345. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +4259 -0
  1346. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +236 -0
  1347. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj_mac.h +0 -0
  1348. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/objects.h +0 -0
  1349. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslconf.h +0 -0
  1350. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslv.h +0 -0
  1351. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ossl_typ.h +0 -0
  1352. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +435 -0
  1353. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs12.h +0 -0
  1354. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +215 -0
  1355. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +269 -0
  1356. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +49 -0
  1357. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +102 -0
  1358. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +111 -0
  1359. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rc4.h +0 -0
  1360. data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +108 -0
  1361. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +818 -0
  1362. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/safestack.h +0 -0
  1363. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +294 -0
  1364. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +37 -0
  1365. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +199 -0
  1366. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/srtp.h +0 -0
  1367. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +5247 -0
  1368. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +333 -0
  1369. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +542 -0
  1370. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +191 -0
  1371. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +631 -0
  1372. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +282 -0
  1373. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +90 -0
  1374. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1292 -0
  1375. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +681 -0
  1376. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +831 -0
  1377. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/bio_ssl.cc +0 -0
  1378. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +837 -0
  1379. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +268 -0
  1380. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +273 -0
  1381. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +232 -0
  1382. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +200 -0
  1383. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +353 -0
  1384. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +675 -0
  1385. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +710 -0
  1386. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1890 -0
  1387. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1814 -0
  1388. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3579 -0
  1389. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +724 -0
  1390. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +221 -0
  1391. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +458 -0
  1392. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +432 -0
  1393. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +856 -0
  1394. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +306 -0
  1395. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +1016 -0
  1396. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +1718 -0
  1397. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +585 -0
  1398. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +397 -0
  1399. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +3053 -0
  1400. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +835 -0
  1401. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +1313 -0
  1402. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +230 -0
  1403. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +277 -0
  1404. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +394 -0
  1405. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +1358 -0
  1406. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +386 -0
  1407. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +3895 -0
  1408. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +689 -0
  1409. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1027 -0
  1410. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +513 -0
  1411. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1104 -0
  1412. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +317 -0
  1413. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +705 -0
  1414. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +981 -0
  1415. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +619 -0
  1416. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
  1417. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1226 -0
  1418. data/third_party/re2/re2/bitmap256.h +117 -0
  1419. data/third_party/re2/re2/bitstate.cc +385 -0
  1420. data/third_party/re2/re2/compile.cc +1279 -0
  1421. data/third_party/re2/re2/dfa.cc +2130 -0
  1422. data/third_party/re2/re2/filtered_re2.cc +121 -0
  1423. data/third_party/re2/re2/filtered_re2.h +109 -0
  1424. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  1425. data/third_party/re2/re2/nfa.cc +713 -0
  1426. data/third_party/re2/re2/onepass.cc +623 -0
  1427. data/third_party/re2/re2/parse.cc +2464 -0
  1428. data/third_party/re2/re2/perl_groups.cc +119 -0
  1429. data/third_party/re2/re2/pod_array.h +55 -0
  1430. data/third_party/re2/re2/prefilter.cc +710 -0
  1431. data/third_party/re2/re2/prefilter.h +108 -0
  1432. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  1433. data/third_party/re2/re2/prefilter_tree.h +139 -0
  1434. data/third_party/re2/re2/prog.cc +988 -0
  1435. data/third_party/re2/re2/prog.h +436 -0
  1436. data/third_party/re2/re2/re2.cc +1362 -0
  1437. data/third_party/re2/re2/re2.h +1002 -0
  1438. data/third_party/re2/re2/regexp.cc +980 -0
  1439. data/third_party/re2/re2/regexp.h +659 -0
  1440. data/third_party/re2/re2/set.cc +154 -0
  1441. data/third_party/re2/re2/set.h +80 -0
  1442. data/third_party/re2/re2/simplify.cc +657 -0
  1443. data/third_party/re2/re2/sparse_array.h +392 -0
  1444. data/third_party/re2/re2/sparse_set.h +264 -0
  1445. data/third_party/re2/re2/stringpiece.cc +65 -0
  1446. data/third_party/re2/re2/stringpiece.h +210 -0
  1447. data/third_party/re2/re2/tostring.cc +351 -0
  1448. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  1449. data/third_party/re2/re2/unicode_casefold.h +78 -0
  1450. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  1451. data/third_party/re2/re2/unicode_groups.h +67 -0
  1452. data/third_party/re2/re2/walker-inl.h +246 -0
  1453. data/third_party/re2/util/benchmark.h +156 -0
  1454. data/third_party/re2/util/flags.h +26 -0
  1455. data/third_party/re2/util/logging.h +109 -0
  1456. data/third_party/re2/util/malloc_counter.h +19 -0
  1457. data/third_party/re2/util/mix.h +41 -0
  1458. data/third_party/re2/util/mutex.h +148 -0
  1459. data/third_party/re2/util/pcre.cc +1025 -0
  1460. data/third_party/re2/util/pcre.h +681 -0
  1461. data/third_party/re2/util/rune.cc +260 -0
  1462. data/third_party/re2/util/strutil.cc +149 -0
  1463. data/third_party/re2/util/strutil.h +21 -0
  1464. data/third_party/re2/util/test.h +50 -0
  1465. data/third_party/re2/util/utf.h +44 -0
  1466. data/third_party/re2/util/util.h +42 -0
  1467. data/third_party/upb/upb/decode.c +621 -0
  1468. data/third_party/upb/upb/decode.h +21 -0
  1469. data/third_party/upb/upb/encode.c +420 -0
  1470. data/third_party/upb/upb/encode.h +21 -0
  1471. data/third_party/upb/upb/msg.c +177 -0
  1472. data/third_party/upb/upb/msg.h +473 -0
  1473. data/third_party/upb/upb/port.c +26 -0
  1474. data/third_party/upb/upb/port_def.inc +179 -0
  1475. data/third_party/upb/upb/port_undef.inc +28 -0
  1476. data/third_party/upb/upb/table.c +880 -0
  1477. data/third_party/upb/upb/table.int.h +466 -0
  1478. data/third_party/upb/upb/upb.c +287 -0
  1479. data/third_party/upb/upb/upb.h +308 -0
  1480. data/third_party/upb/upb/upb.hpp +88 -0
  1481. metadata +1054 -526
  1482. data/src/boringssl/err_data.c +0 -1362
  1483. data/src/core/ext/filters/client_channel/connector.cc +0 -41
  1484. data/src/core/ext/filters/client_channel/health/health.pb.c +0 -23
  1485. data/src/core/ext/filters/client_channel/health/health.pb.h +0 -73
  1486. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +0 -19
  1487. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +0 -54
  1488. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +0 -19
  1489. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +0 -54
  1490. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +0 -89
  1491. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +0 -164
  1492. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -2249
  1493. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h +0 -36
  1494. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -61
  1495. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc +0 -85
  1496. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h +0 -72
  1497. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +0 -307
  1498. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -89
  1499. data/src/core/ext/filters/client_channel/parse_address.cc +0 -234
  1500. data/src/core/ext/filters/client_channel/parse_address.h +0 -53
  1501. data/src/core/ext/filters/client_channel/proxy_mapper.cc +0 -48
  1502. data/src/core/lib/gpr/host_port.cc +0 -98
  1503. data/src/core/lib/gpr/host_port.h +0 -43
  1504. data/src/core/lib/gpr/mpscq.cc +0 -117
  1505. data/src/core/lib/gpr/mpscq.h +0 -88
  1506. data/src/core/lib/gprpp/abstract.h +0 -37
  1507. data/src/core/lib/gprpp/inlined_vector.h +0 -200
  1508. data/src/core/lib/gprpp/optional.h +0 -48
  1509. data/src/core/lib/gprpp/pair.h +0 -38
  1510. data/src/core/lib/json/json.cc +0 -94
  1511. data/src/core/lib/json/json_common.h +0 -34
  1512. data/src/core/lib/json/json_reader.h +0 -146
  1513. data/src/core/lib/json/json_string.cc +0 -367
  1514. data/src/core/lib/json/json_writer.h +0 -84
  1515. data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +0 -129
  1516. data/src/core/lib/security/credentials/tls/spiffe_credentials.h +0 -62
  1517. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +0 -426
  1518. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +0 -122
  1519. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  1520. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  1521. data/src/core/lib/slice/slice_hash_table.h +0 -205
  1522. data/src/core/lib/slice/slice_weak_hash_table.h +0 -109
  1523. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +0 -520
  1524. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +0 -323
  1525. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +0 -145
  1526. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +0 -149
  1527. data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -47
  1528. data/src/core/tsi/alts/handshaker/altscontext.pb.h +0 -63
  1529. data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -122
  1530. data/src/core/tsi/alts/handshaker/handshaker.pb.h +0 -254
  1531. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -49
  1532. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +0 -78
  1533. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3006
  1534. data/third_party/boringssl/crypto/asn1/a_bitstr.c +0 -271
  1535. data/third_party/boringssl/crypto/asn1/a_bool.c +0 -110
  1536. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +0 -297
  1537. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -111
  1538. data/third_party/boringssl/crypto/asn1/a_enum.c +0 -195
  1539. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +0 -150
  1540. data/third_party/boringssl/crypto/asn1/a_int.c +0 -479
  1541. data/third_party/boringssl/crypto/asn1/a_mbstr.c +0 -411
  1542. data/third_party/boringssl/crypto/asn1/a_object.c +0 -275
  1543. data/third_party/boringssl/crypto/asn1/a_strnid.c +0 -312
  1544. data/third_party/boringssl/crypto/asn1/a_time.c +0 -213
  1545. data/third_party/boringssl/crypto/asn1/a_type.c +0 -151
  1546. data/third_party/boringssl/crypto/asn1/asn1_lib.c +0 -442
  1547. data/third_party/boringssl/crypto/asn1/asn_pack.c +0 -105
  1548. data/third_party/boringssl/crypto/asn1/f_enum.c +0 -93
  1549. data/third_party/boringssl/crypto/asn1/f_int.c +0 -97
  1550. data/third_party/boringssl/crypto/asn1/f_string.c +0 -91
  1551. data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -662
  1552. data/third_party/boringssl/crypto/base64/base64.c +0 -466
  1553. data/third_party/boringssl/crypto/bio/bio.c +0 -636
  1554. data/third_party/boringssl/crypto/bio/connect.c +0 -542
  1555. data/third_party/boringssl/crypto/bio/fd.c +0 -276
  1556. data/third_party/boringssl/crypto/bio/file.c +0 -315
  1557. data/third_party/boringssl/crypto/bio/pair.c +0 -489
  1558. data/third_party/boringssl/crypto/bio/socket.c +0 -202
  1559. data/third_party/boringssl/crypto/bio/socket_helper.c +0 -114
  1560. data/third_party/boringssl/crypto/bn_extra/convert.c +0 -466
  1561. data/third_party/boringssl/crypto/buf/buf.c +0 -231
  1562. data/third_party/boringssl/crypto/bytestring/ber.c +0 -261
  1563. data/third_party/boringssl/crypto/bytestring/cbb.c +0 -668
  1564. data/third_party/boringssl/crypto/bytestring/cbs.c +0 -618
  1565. data/third_party/boringssl/crypto/bytestring/internal.h +0 -75
  1566. data/third_party/boringssl/crypto/chacha/chacha.c +0 -167
  1567. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +0 -114
  1568. data/third_party/boringssl/crypto/cipher_extra/derive_key.c +0 -152
  1569. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +0 -203
  1570. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +0 -281
  1571. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +0 -867
  1572. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +0 -326
  1573. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  1574. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +0 -680
  1575. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +0 -482
  1576. data/third_party/boringssl/crypto/cmac/cmac.c +0 -241
  1577. data/third_party/boringssl/crypto/conf/conf.c +0 -803
  1578. data/third_party/boringssl/crypto/cpu-arm-linux.c +0 -363
  1579. data/third_party/boringssl/crypto/cpu-intel.c +0 -288
  1580. data/third_party/boringssl/crypto/crypto.c +0 -198
  1581. data/third_party/boringssl/crypto/curve25519/spake25519.c +0 -539
  1582. data/third_party/boringssl/crypto/dh/check.c +0 -217
  1583. data/third_party/boringssl/crypto/dh/dh.c +0 -519
  1584. data/third_party/boringssl/crypto/dsa/dsa.c +0 -946
  1585. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +0 -562
  1586. data/third_party/boringssl/crypto/ecdh/ecdh.c +0 -162
  1587. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +0 -275
  1588. data/third_party/boringssl/crypto/engine/engine.c +0 -98
  1589. data/third_party/boringssl/crypto/err/err.c +0 -847
  1590. data/third_party/boringssl/crypto/err/internal.h +0 -58
  1591. data/third_party/boringssl/crypto/evp/evp.c +0 -362
  1592. data/third_party/boringssl/crypto/evp/evp_asn1.c +0 -337
  1593. data/third_party/boringssl/crypto/evp/evp_ctx.c +0 -446
  1594. data/third_party/boringssl/crypto/evp/internal.h +0 -252
  1595. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +0 -268
  1596. data/third_party/boringssl/crypto/evp/p_ec.c +0 -239
  1597. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +0 -256
  1598. data/third_party/boringssl/crypto/evp/p_ed25519.c +0 -71
  1599. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +0 -190
  1600. data/third_party/boringssl/crypto/evp/p_rsa.c +0 -634
  1601. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +0 -189
  1602. data/third_party/boringssl/crypto/evp/scrypt.c +0 -209
  1603. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +0 -1100
  1604. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +0 -100
  1605. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +0 -138
  1606. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +0 -112
  1607. data/third_party/boringssl/crypto/fipsmodule/bcm.c +0 -148
  1608. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +0 -428
  1609. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +0 -200
  1610. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +0 -303
  1611. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +0 -895
  1612. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +0 -1356
  1613. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -683
  1614. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +0 -573
  1615. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +0 -526
  1616. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +0 -185
  1617. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +0 -876
  1618. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +0 -1154
  1619. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +0 -351
  1620. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +0 -231
  1621. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +0 -33
  1622. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +0 -364
  1623. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +0 -615
  1624. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +0 -1437
  1625. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +0 -233
  1626. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +0 -129
  1627. data/third_party/boringssl/crypto/fipsmodule/delocate.h +0 -88
  1628. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +0 -256
  1629. data/third_party/boringssl/crypto/fipsmodule/digest/digests.c +0 -280
  1630. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +0 -268
  1631. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +0 -974
  1632. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +0 -453
  1633. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +0 -270
  1634. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +0 -337
  1635. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +0 -373
  1636. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +0 -1104
  1637. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +0 -9503
  1638. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +0 -447
  1639. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +0 -117
  1640. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +0 -1046
  1641. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +0 -104
  1642. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +0 -354
  1643. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +0 -458
  1644. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +0 -27
  1645. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +0 -254
  1646. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +0 -298
  1647. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +0 -211
  1648. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  1649. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +0 -234
  1650. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +0 -220
  1651. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +0 -1063
  1652. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +0 -388
  1653. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +0 -95
  1654. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +0 -202
  1655. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +0 -92
  1656. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +0 -358
  1657. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +0 -302
  1658. data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +0 -239
  1659. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +0 -126
  1660. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +0 -692
  1661. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +0 -875
  1662. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +0 -1218
  1663. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +0 -581
  1664. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +0 -375
  1665. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +0 -337
  1666. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +0 -608
  1667. data/third_party/boringssl/crypto/internal.h +0 -739
  1668. data/third_party/boringssl/crypto/lhash/lhash.c +0 -336
  1669. data/third_party/boringssl/crypto/mem.c +0 -235
  1670. data/third_party/boringssl/crypto/obj/obj.c +0 -554
  1671. data/third_party/boringssl/crypto/obj/obj_dat.h +0 -6244
  1672. data/third_party/boringssl/crypto/pem/pem_all.c +0 -262
  1673. data/third_party/boringssl/crypto/pem/pem_info.c +0 -379
  1674. data/third_party/boringssl/crypto/pem/pem_lib.c +0 -776
  1675. data/third_party/boringssl/crypto/pem/pem_oth.c +0 -88
  1676. data/third_party/boringssl/crypto/pem/pem_pk8.c +0 -258
  1677. data/third_party/boringssl/crypto/pem/pem_pkey.c +0 -227
  1678. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +0 -166
  1679. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +0 -233
  1680. data/third_party/boringssl/crypto/pkcs8/internal.h +0 -120
  1681. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +0 -307
  1682. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +0 -513
  1683. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +0 -789
  1684. data/third_party/boringssl/crypto/poly1305/poly1305.c +0 -318
  1685. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +0 -304
  1686. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +0 -839
  1687. data/third_party/boringssl/crypto/pool/internal.h +0 -45
  1688. data/third_party/boringssl/crypto/pool/pool.c +0 -200
  1689. data/third_party/boringssl/crypto/rand_extra/deterministic.c +0 -48
  1690. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +0 -43
  1691. data/third_party/boringssl/crypto/rand_extra/windows.c +0 -53
  1692. data/third_party/boringssl/crypto/refcount_lock.c +0 -53
  1693. data/third_party/boringssl/crypto/stack/stack.c +0 -380
  1694. data/third_party/boringssl/crypto/thread_none.c +0 -59
  1695. data/third_party/boringssl/crypto/thread_pthread.c +0 -206
  1696. data/third_party/boringssl/crypto/thread_win.c +0 -237
  1697. data/third_party/boringssl/crypto/x509/a_strex.c +0 -633
  1698. data/third_party/boringssl/crypto/x509/a_verify.c +0 -115
  1699. data/third_party/boringssl/crypto/x509/algorithm.c +0 -153
  1700. data/third_party/boringssl/crypto/x509/asn1_gen.c +0 -841
  1701. data/third_party/boringssl/crypto/x509/by_dir.c +0 -451
  1702. data/third_party/boringssl/crypto/x509/by_file.c +0 -274
  1703. data/third_party/boringssl/crypto/x509/t_crl.c +0 -128
  1704. data/third_party/boringssl/crypto/x509/t_req.c +0 -246
  1705. data/third_party/boringssl/crypto/x509/t_x509.c +0 -547
  1706. data/third_party/boringssl/crypto/x509/x509.c +0 -157
  1707. data/third_party/boringssl/crypto/x509/x509_cmp.c +0 -477
  1708. data/third_party/boringssl/crypto/x509/x509_def.c +0 -103
  1709. data/third_party/boringssl/crypto/x509/x509_lu.c +0 -725
  1710. data/third_party/boringssl/crypto/x509/x509_obj.c +0 -198
  1711. data/third_party/boringssl/crypto/x509/x509_r2x.c +0 -117
  1712. data/third_party/boringssl/crypto/x509/x509_req.c +0 -322
  1713. data/third_party/boringssl/crypto/x509/x509_set.c +0 -164
  1714. data/third_party/boringssl/crypto/x509/x509_trs.c +0 -326
  1715. data/third_party/boringssl/crypto/x509/x509_txt.c +0 -205
  1716. data/third_party/boringssl/crypto/x509/x509_vfy.c +0 -2476
  1717. data/third_party/boringssl/crypto/x509/x509_vpm.c +0 -670
  1718. data/third_party/boringssl/crypto/x509/x509cset.c +0 -170
  1719. data/third_party/boringssl/crypto/x509/x509name.c +0 -389
  1720. data/third_party/boringssl/crypto/x509/x_all.c +0 -501
  1721. data/third_party/boringssl/crypto/x509/x_crl.c +0 -541
  1722. data/third_party/boringssl/crypto/x509/x_pubkey.c +0 -368
  1723. data/third_party/boringssl/crypto/x509/x_sig.c +0 -69
  1724. data/third_party/boringssl/crypto/x509/x_x509.c +0 -328
  1725. data/third_party/boringssl/crypto/x509v3/ext_dat.h +0 -143
  1726. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +0 -284
  1727. data/third_party/boringssl/crypto/x509v3/pcy_node.c +0 -188
  1728. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +0 -840
  1729. data/third_party/boringssl/crypto/x509v3/v3_akey.c +0 -204
  1730. data/third_party/boringssl/crypto/x509v3/v3_alt.c +0 -623
  1731. data/third_party/boringssl/crypto/x509v3/v3_conf.c +0 -462
  1732. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +0 -502
  1733. data/third_party/boringssl/crypto/x509v3/v3_enum.c +0 -100
  1734. data/third_party/boringssl/crypto/x509v3/v3_genn.c +0 -251
  1735. data/third_party/boringssl/crypto/x509v3/v3_info.c +0 -219
  1736. data/third_party/boringssl/crypto/x509v3/v3_lib.c +0 -370
  1737. data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -287
  1738. data/third_party/boringssl/crypto/x509v3/v3_purp.c +0 -866
  1739. data/third_party/boringssl/crypto/x509v3/v3_skey.c +0 -152
  1740. data/third_party/boringssl/crypto/x509v3/v3_utl.c +0 -1352
  1741. data/third_party/boringssl/include/openssl/aead.h +0 -433
  1742. data/third_party/boringssl/include/openssl/aes.h +0 -170
  1743. data/third_party/boringssl/include/openssl/arm_arch.h +0 -121
  1744. data/third_party/boringssl/include/openssl/asn1.h +0 -981
  1745. data/third_party/boringssl/include/openssl/base.h +0 -457
  1746. data/third_party/boringssl/include/openssl/base64.h +0 -187
  1747. data/third_party/boringssl/include/openssl/bio.h +0 -902
  1748. data/third_party/boringssl/include/openssl/blowfish.h +0 -93
  1749. data/third_party/boringssl/include/openssl/bn.h +0 -1019
  1750. data/third_party/boringssl/include/openssl/buf.h +0 -137
  1751. data/third_party/boringssl/include/openssl/bytestring.h +0 -505
  1752. data/third_party/boringssl/include/openssl/cast.h +0 -96
  1753. data/third_party/boringssl/include/openssl/cipher.h +0 -608
  1754. data/third_party/boringssl/include/openssl/cmac.h +0 -87
  1755. data/third_party/boringssl/include/openssl/conf.h +0 -183
  1756. data/third_party/boringssl/include/openssl/cpu.h +0 -196
  1757. data/third_party/boringssl/include/openssl/crypto.h +0 -122
  1758. data/third_party/boringssl/include/openssl/curve25519.h +0 -201
  1759. data/third_party/boringssl/include/openssl/dh.h +0 -298
  1760. data/third_party/boringssl/include/openssl/digest.h +0 -316
  1761. data/third_party/boringssl/include/openssl/dsa.h +0 -435
  1762. data/third_party/boringssl/include/openssl/ec.h +0 -413
  1763. data/third_party/boringssl/include/openssl/ec_key.h +0 -342
  1764. data/third_party/boringssl/include/openssl/ecdh.h +0 -101
  1765. data/third_party/boringssl/include/openssl/ecdsa.h +0 -199
  1766. data/third_party/boringssl/include/openssl/engine.h +0 -109
  1767. data/third_party/boringssl/include/openssl/err.h +0 -458
  1768. data/third_party/boringssl/include/openssl/evp.h +0 -873
  1769. data/third_party/boringssl/include/openssl/hmac.h +0 -186
  1770. data/third_party/boringssl/include/openssl/lhash.h +0 -174
  1771. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  1772. data/third_party/boringssl/include/openssl/md4.h +0 -106
  1773. data/third_party/boringssl/include/openssl/md5.h +0 -107
  1774. data/third_party/boringssl/include/openssl/mem.h +0 -156
  1775. data/third_party/boringssl/include/openssl/nid.h +0 -4242
  1776. data/third_party/boringssl/include/openssl/obj.h +0 -233
  1777. data/third_party/boringssl/include/openssl/pem.h +0 -397
  1778. data/third_party/boringssl/include/openssl/pkcs7.h +0 -82
  1779. data/third_party/boringssl/include/openssl/pkcs8.h +0 -230
  1780. data/third_party/boringssl/include/openssl/poly1305.h +0 -51
  1781. data/third_party/boringssl/include/openssl/pool.h +0 -91
  1782. data/third_party/boringssl/include/openssl/rand.h +0 -125
  1783. data/third_party/boringssl/include/openssl/ripemd.h +0 -107
  1784. data/third_party/boringssl/include/openssl/rsa.h +0 -756
  1785. data/third_party/boringssl/include/openssl/sha.h +0 -256
  1786. data/third_party/boringssl/include/openssl/span.h +0 -191
  1787. data/third_party/boringssl/include/openssl/ssl.h +0 -4740
  1788. data/third_party/boringssl/include/openssl/ssl3.h +0 -332
  1789. data/third_party/boringssl/include/openssl/stack.h +0 -485
  1790. data/third_party/boringssl/include/openssl/thread.h +0 -191
  1791. data/third_party/boringssl/include/openssl/tls1.h +0 -618
  1792. data/third_party/boringssl/include/openssl/type_check.h +0 -91
  1793. data/third_party/boringssl/include/openssl/x509.h +0 -1180
  1794. data/third_party/boringssl/include/openssl/x509_vfy.h +0 -614
  1795. data/third_party/boringssl/include/openssl/x509v3.h +0 -827
  1796. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
  1797. data/third_party/boringssl/ssl/d1_both.cc +0 -851
  1798. data/third_party/boringssl/ssl/d1_lib.cc +0 -267
  1799. data/third_party/boringssl/ssl/d1_pkt.cc +0 -274
  1800. data/third_party/boringssl/ssl/d1_srtp.cc +0 -232
  1801. data/third_party/boringssl/ssl/dtls_method.cc +0 -193
  1802. data/third_party/boringssl/ssl/dtls_record.cc +0 -353
  1803. data/third_party/boringssl/ssl/handoff.cc +0 -285
  1804. data/third_party/boringssl/ssl/handshake.cc +0 -630
  1805. data/third_party/boringssl/ssl/handshake_client.cc +0 -1842
  1806. data/third_party/boringssl/ssl/handshake_server.cc +0 -1674
  1807. data/third_party/boringssl/ssl/internal.h +0 -3064
  1808. data/third_party/boringssl/ssl/s3_both.cc +0 -585
  1809. data/third_party/boringssl/ssl/s3_lib.cc +0 -226
  1810. data/third_party/boringssl/ssl/s3_pkt.cc +0 -425
  1811. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +0 -412
  1812. data/third_party/boringssl/ssl/ssl_asn1.cc +0 -844
  1813. data/third_party/boringssl/ssl/ssl_buffer.cc +0 -286
  1814. data/third_party/boringssl/ssl/ssl_cert.cc +0 -913
  1815. data/third_party/boringssl/ssl/ssl_cipher.cc +0 -1781
  1816. data/third_party/boringssl/ssl/ssl_file.cc +0 -583
  1817. data/third_party/boringssl/ssl/ssl_key_share.cc +0 -252
  1818. data/third_party/boringssl/ssl/ssl_lib.cc +0 -2719
  1819. data/third_party/boringssl/ssl/ssl_privkey.cc +0 -494
  1820. data/third_party/boringssl/ssl/ssl_session.cc +0 -1221
  1821. data/third_party/boringssl/ssl/ssl_stat.cc +0 -224
  1822. data/third_party/boringssl/ssl/ssl_transcript.cc +0 -398
  1823. data/third_party/boringssl/ssl/ssl_versions.cc +0 -399
  1824. data/third_party/boringssl/ssl/ssl_x509.cc +0 -1297
  1825. data/third_party/boringssl/ssl/t1_enc.cc +0 -452
  1826. data/third_party/boringssl/ssl/t1_lib.cc +0 -3783
  1827. data/third_party/boringssl/ssl/tls13_both.cc +0 -559
  1828. data/third_party/boringssl/ssl/tls13_client.cc +0 -891
  1829. data/third_party/boringssl/ssl/tls13_enc.cc +0 -493
  1830. data/third_party/boringssl/ssl/tls13_server.cc +0 -1022
  1831. data/third_party/boringssl/ssl/tls_method.cc +0 -274
  1832. data/third_party/boringssl/ssl/tls_record.cc +0 -703
  1833. data/third_party/boringssl/third_party/fiat/curve25519.c +0 -3230
  1834. data/third_party/boringssl/third_party/fiat/curve25519_tables.h +0 -7880
  1835. data/third_party/boringssl/third_party/fiat/internal.h +0 -154
  1836. data/third_party/boringssl/third_party/fiat/p256.c +0 -1824
  1837. data/third_party/nanopb/pb.h +0 -579
  1838. data/third_party/nanopb/pb_common.c +0 -97
  1839. data/third_party/nanopb/pb_common.h +0 -42
  1840. data/third_party/nanopb/pb_decode.c +0 -1347
  1841. data/third_party/nanopb/pb_decode.h +0 -149
  1842. data/third_party/nanopb/pb_encode.c +0 -696
  1843. data/third_party/nanopb/pb_encode.h +0 -154
@@ -35,33 +35,33 @@
35
35
  grpc_endpoint* grpc_tcp_client_create_from_fd(
36
36
  grpc_fd* fd, const grpc_channel_args* channel_args, const char* addr_str);
37
37
 
38
- /* Return a configured, unbound, unconnected TCP client grpc_fd.
38
+ /* Return a configured, unbound, unconnected TCP client fd.
39
39
 
40
40
  channel_args: may contain custom settings for the fd
41
41
  addr: the destination address
42
42
  mapped_addr: out parameter. addr mapped to an address appropriate to the
43
43
  type of socket FD created. For example, if addr is IPv4 and dual stack
44
44
  sockets are available, mapped_addr will be an IPv4-mapped IPv6 address
45
- fdobj: out parameter. The new FD
45
+ fd: out parameter. The new FD
46
46
  Returns: error, if any. Out parameters are not set on error
47
47
  */
48
48
  grpc_error* grpc_tcp_client_prepare_fd(const grpc_channel_args* channel_args,
49
49
  const grpc_resolved_address* addr,
50
50
  grpc_resolved_address* mapped_addr,
51
- grpc_fd** fdobj);
51
+ int* fd);
52
52
 
53
- /* Connect a configured TCP client grpc_fd.
53
+ /* Connect a configured TCP client fd.
54
54
 
55
55
  interested_parties: a set of pollsets that would be interested in this
56
56
  connection being established (in order to continue their work
57
57
  closure: called when complete. On success, *ep will be set.
58
- fdobj: an FD returned from grpc_tcp_client_prepare_fd(). Ownership is taken
58
+ fd: an FD returned from grpc_tcp_client_prepare_fd().
59
59
  channel_args: may contain custom settings for the endpoint
60
60
  deadline: connection deadline
61
61
  ep: out parameter. Set before closure is called if successful
62
62
  */
63
63
  void grpc_tcp_client_create_from_prepared_fd(
64
- grpc_pollset_set* interested_parties, grpc_closure* closure, grpc_fd* fdobj,
64
+ grpc_pollset_set* interested_parties, grpc_closure* closure, const int fd,
65
65
  const grpc_channel_args* channel_args, const grpc_resolved_address* addr,
66
66
  grpc_millis deadline, grpc_endpoint** ep);
67
67
 
@@ -39,19 +39,20 @@
39
39
  #include "src/core/lib/iomgr/tcp_client.h"
40
40
  #include "src/core/lib/iomgr/tcp_windows.h"
41
41
  #include "src/core/lib/iomgr/timer.h"
42
+ #include "src/core/lib/slice/slice_internal.h"
42
43
 
43
- typedef struct {
44
+ struct async_connect {
44
45
  grpc_closure* on_done;
45
46
  gpr_mu mu;
46
47
  grpc_winsocket* socket;
47
48
  grpc_timer alarm;
48
49
  grpc_closure on_alarm;
49
- char* addr_name;
50
+ std::string addr_name;
50
51
  int refs;
51
52
  grpc_closure on_connect;
52
53
  grpc_endpoint** endpoint;
53
54
  grpc_channel_args* channel_args;
54
- } async_connect;
55
+ };
55
56
 
56
57
  static void async_connect_unlock_and_cleanup(async_connect* ac,
57
58
  grpc_winsocket* socket) {
@@ -60,8 +61,7 @@ static void async_connect_unlock_and_cleanup(async_connect* ac,
60
61
  if (done) {
61
62
  grpc_channel_args_destroy(ac->channel_args);
62
63
  gpr_mu_destroy(&ac->mu);
63
- gpr_free(ac->addr_name);
64
- gpr_free(ac);
64
+ delete ac;
65
65
  }
66
66
  if (socket != NULL) grpc_winsocket_destroy(socket);
67
67
  }
@@ -106,7 +106,7 @@ static void on_connect(void* acp, grpc_error* error) {
106
106
  error = GRPC_WSA_ERROR(WSAGetLastError(), "ConnectEx");
107
107
  closesocket(socket->socket);
108
108
  } else {
109
- *ep = grpc_tcp_create(socket, ac->channel_args, ac->addr_name);
109
+ *ep = grpc_tcp_create(socket, ac->channel_args, ac->addr_name.c_str());
110
110
  socket = NULL;
111
111
  }
112
112
  } else {
@@ -117,7 +117,7 @@ static void on_connect(void* acp, grpc_error* error) {
117
117
  async_connect_unlock_and_cleanup(ac, socket);
118
118
  /* If the connection was aborted, the callback was already called when
119
119
  the deadline was met. */
120
- GRPC_CLOSURE_SCHED(on_done, error);
120
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_done, error);
121
121
  }
122
122
 
123
123
  /* Tries to issue one async connection, then schedules both an IOCP
@@ -132,13 +132,13 @@ static void tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
132
132
  int status;
133
133
  grpc_resolved_address addr6_v4mapped;
134
134
  grpc_resolved_address local_address;
135
- async_connect* ac;
136
135
  grpc_winsocket* socket = NULL;
137
136
  LPFN_CONNECTEX ConnectEx;
138
137
  GUID guid = WSAID_CONNECTEX;
139
138
  DWORD ioctl_num_bytes;
140
139
  grpc_winsocket_callback_info* info;
141
140
  grpc_error* error = GRPC_ERROR_NONE;
141
+ async_connect* ac = NULL;
142
142
 
143
143
  *endpoint = NULL;
144
144
 
@@ -195,7 +195,7 @@ static void tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
195
195
  }
196
196
  }
197
197
 
198
- ac = (async_connect*)gpr_malloc(sizeof(async_connect));
198
+ ac = new async_connect();
199
199
  ac->on_done = on_done;
200
200
  ac->socket = socket;
201
201
  gpr_mu_init(&ac->mu);
@@ -212,20 +212,19 @@ static void tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
212
212
 
213
213
  failure:
214
214
  GPR_ASSERT(error != GRPC_ERROR_NONE);
215
- char* target_uri = grpc_sockaddr_to_uri(addr);
215
+ std::string target_uri = grpc_sockaddr_to_uri(addr);
216
216
  grpc_error* final_error =
217
217
  grpc_error_set_str(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
218
218
  "Failed to connect", &error, 1),
219
219
  GRPC_ERROR_STR_TARGET_ADDRESS,
220
- grpc_slice_from_copied_string(
221
- target_uri == nullptr ? "NULL" : target_uri));
220
+ grpc_slice_from_cpp_string(std::move(target_uri)));
222
221
  GRPC_ERROR_UNREF(error);
223
222
  if (socket != NULL) {
224
223
  grpc_winsocket_destroy(socket);
225
224
  } else if (sock != INVALID_SOCKET) {
226
225
  closesocket(sock);
227
226
  }
228
- GRPC_CLOSURE_SCHED(on_done, final_error);
227
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_done, final_error);
229
228
  }
230
229
 
231
230
  grpc_tcp_client_vtable grpc_windows_tcp_client_vtable = {tcp_connect};
@@ -32,6 +32,7 @@
32
32
  #include "src/core/lib/iomgr/error.h"
33
33
  #include "src/core/lib/iomgr/iomgr_custom.h"
34
34
  #include "src/core/lib/iomgr/resource_quota.h"
35
+ #include "src/core/lib/iomgr/sockaddr_utils.h"
35
36
  #include "src/core/lib/iomgr/tcp_client.h"
36
37
  #include "src/core/lib/iomgr/tcp_custom.h"
37
38
  #include "src/core/lib/iomgr/tcp_server.h"
@@ -52,30 +53,29 @@ void grpc_custom_endpoint_init(grpc_socket_vtable* impl) {
52
53
  grpc_set_tcp_server_impl(&custom_tcp_server_vtable);
53
54
  }
54
55
 
55
- typedef struct {
56
+ struct custom_tcp_endpoint {
56
57
  grpc_endpoint base;
57
58
  gpr_refcount refcount;
58
59
  grpc_custom_socket* socket;
59
60
 
60
- grpc_closure* read_cb;
61
- grpc_closure* write_cb;
61
+ grpc_closure* read_cb = nullptr;
62
+ grpc_closure* write_cb = nullptr;
62
63
 
63
- grpc_slice_buffer* read_slices;
64
- grpc_slice_buffer* write_slices;
64
+ grpc_slice_buffer* read_slices = nullptr;
65
+ grpc_slice_buffer* write_slices = nullptr;
65
66
 
66
67
  grpc_resource_user* resource_user;
67
68
  grpc_resource_user_slice_allocator slice_allocator;
68
69
 
69
70
  bool shutting_down;
70
71
 
71
- char* peer_string;
72
- } custom_tcp_endpoint;
73
-
72
+ std::string peer_string;
73
+ std::string local_address;
74
+ };
74
75
  static void tcp_free(grpc_custom_socket* s) {
75
76
  custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)s->endpoint;
76
77
  grpc_resource_user_unref(tcp->resource_user);
77
- gpr_free(tcp->peer_string);
78
- gpr_free(tcp);
78
+ delete tcp;
79
79
  s->refs--;
80
80
  if (s->refs == 0) {
81
81
  grpc_custom_socket_vtable->destroy(s);
@@ -133,18 +133,20 @@ static void call_read_cb(custom_tcp_endpoint* tcp, grpc_error* error) {
133
133
  for (i = 0; i < tcp->read_slices->count; i++) {
134
134
  char* dump = grpc_dump_slice(tcp->read_slices->slices[i],
135
135
  GPR_DUMP_HEX | GPR_DUMP_ASCII);
136
- gpr_log(GPR_INFO, "READ %p (peer=%s): %s", tcp, tcp->peer_string, dump);
136
+ gpr_log(GPR_INFO, "READ %p (peer=%s): %s", tcp, tcp->peer_string.c_str(),
137
+ dump);
137
138
  gpr_free(dump);
138
139
  }
139
140
  }
140
141
  TCP_UNREF(tcp, "read");
141
142
  tcp->read_slices = nullptr;
142
143
  tcp->read_cb = nullptr;
143
- GRPC_CLOSURE_SCHED(cb, error);
144
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, cb, error);
144
145
  }
145
146
 
146
147
  static void custom_read_callback(grpc_custom_socket* socket, size_t nread,
147
148
  grpc_error* error) {
149
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
148
150
  grpc_core::ExecCtx exec_ctx;
149
151
  grpc_slice_buffer garbage;
150
152
  custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)socket->endpoint;
@@ -192,7 +194,7 @@ static void tcp_read_allocation_done(void* tcpp, grpc_error* error) {
192
194
  }
193
195
 
194
196
  static void endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* read_slices,
195
- grpc_closure* cb, bool urgent) {
197
+ grpc_closure* cb, bool /*urgent*/) {
196
198
  custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)ep;
197
199
  GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
198
200
  GPR_ASSERT(tcp->read_cb == nullptr);
@@ -200,13 +202,16 @@ static void endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* read_slices,
200
202
  tcp->read_slices = read_slices;
201
203
  grpc_slice_buffer_reset_and_unref_internal(read_slices);
202
204
  TCP_REF(tcp, "read");
203
- grpc_resource_user_alloc_slices(&tcp->slice_allocator,
204
- GRPC_TCP_DEFAULT_READ_SLICE_SIZE, 1,
205
- tcp->read_slices);
205
+ if (grpc_resource_user_alloc_slices(&tcp->slice_allocator,
206
+ GRPC_TCP_DEFAULT_READ_SLICE_SIZE, 1,
207
+ tcp->read_slices)) {
208
+ tcp_read_allocation_done(tcp, GRPC_ERROR_NONE);
209
+ }
206
210
  }
207
211
 
208
212
  static void custom_write_callback(grpc_custom_socket* socket,
209
213
  grpc_error* error) {
214
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
210
215
  grpc_core::ExecCtx exec_ctx;
211
216
  custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)socket->endpoint;
212
217
  grpc_closure* cb = tcp->write_cb;
@@ -216,11 +221,11 @@ static void custom_write_callback(grpc_custom_socket* socket,
216
221
  gpr_log(GPR_INFO, "write complete on %p: error=%s", tcp->socket, str);
217
222
  }
218
223
  TCP_UNREF(tcp, "write");
219
- GRPC_CLOSURE_SCHED(cb, error);
224
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, cb, error);
220
225
  }
221
226
 
222
227
  static void endpoint_write(grpc_endpoint* ep, grpc_slice_buffer* write_slices,
223
- grpc_closure* cb, void* arg) {
228
+ grpc_closure* cb, void* /*arg*/) {
224
229
  custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)ep;
225
230
  GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
226
231
 
@@ -230,15 +235,16 @@ static void endpoint_write(grpc_endpoint* ep, grpc_slice_buffer* write_slices,
230
235
  for (j = 0; j < write_slices->count; j++) {
231
236
  char* data = grpc_dump_slice(write_slices->slices[j],
232
237
  GPR_DUMP_HEX | GPR_DUMP_ASCII);
233
- gpr_log(GPR_INFO, "WRITE %p (peer=%s): %s", tcp->socket, tcp->peer_string,
234
- data);
238
+ gpr_log(GPR_INFO, "WRITE %p (peer=%s): %s", tcp->socket,
239
+ tcp->peer_string.c_str(), data);
235
240
  gpr_free(data);
236
241
  }
237
242
  }
238
243
 
239
244
  if (tcp->shutting_down) {
240
- GRPC_CLOSURE_SCHED(cb, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
241
- "TCP socket is shutting down"));
245
+ grpc_core::ExecCtx::Run(
246
+ DEBUG_LOCATION, cb,
247
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("TCP socket is shutting down"));
242
248
  return;
243
249
  }
244
250
 
@@ -248,7 +254,7 @@ static void endpoint_write(grpc_endpoint* ep, grpc_slice_buffer* write_slices,
248
254
  if (tcp->write_slices->count == 0) {
249
255
  // No slices means we don't have to do anything,
250
256
  // and libuv doesn't like empty writes
251
- GRPC_CLOSURE_SCHED(cb, GRPC_ERROR_NONE);
257
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, cb, GRPC_ERROR_NONE);
252
258
  return;
253
259
  }
254
260
  tcp->write_cb = cb;
@@ -285,10 +291,10 @@ static void endpoint_shutdown(grpc_endpoint* ep, grpc_error* why) {
285
291
  gpr_log(GPR_INFO, "TCP %p shutdown why=%s", tcp->socket, str);
286
292
  }
287
293
  tcp->shutting_down = true;
288
- // GRPC_CLOSURE_SCHED(tcp->read_cb, GRPC_ERROR_REF(why));
289
- // GRPC_CLOSURE_SCHED(tcp->write_cb, GRPC_ERROR_REF(why));
290
- // tcp->read_cb = nullptr;
291
- // tcp->write_cb = nullptr;
294
+ // grpc_core::ExecCtx::Run(DEBUG_LOCATION,tcp->read_cb,
295
+ // GRPC_ERROR_REF(why));
296
+ // grpc_core::ExecCtx::Run(DEBUG_LOCATION,tcp->write_cb,
297
+ // GRPC_ERROR_REF(why)); tcp->read_cb = nullptr; tcp->write_cb = nullptr;
292
298
  grpc_resource_user_shutdown(tcp->resource_user);
293
299
  grpc_custom_socket_vtable->shutdown(tcp->socket);
294
300
  }
@@ -301,6 +307,7 @@ static void custom_close_callback(grpc_custom_socket* socket) {
301
307
  grpc_custom_socket_vtable->destroy(socket);
302
308
  gpr_free(socket);
303
309
  } else if (socket->endpoint) {
310
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
304
311
  grpc_core::ExecCtx exec_ctx;
305
312
  custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)socket->endpoint;
306
313
  TCP_UNREF(tcp, "destroy");
@@ -312,9 +319,14 @@ static void endpoint_destroy(grpc_endpoint* ep) {
312
319
  grpc_custom_socket_vtable->close(tcp->socket, custom_close_callback);
313
320
  }
314
321
 
315
- static char* endpoint_get_peer(grpc_endpoint* ep) {
322
+ static absl::string_view endpoint_get_peer(grpc_endpoint* ep) {
316
323
  custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)ep;
317
- return gpr_strdup(tcp->peer_string);
324
+ return tcp->peer_string;
325
+ }
326
+
327
+ static absl::string_view endpoint_get_local_address(grpc_endpoint* ep) {
328
+ custom_tcp_endpoint* tcp = (custom_tcp_endpoint*)ep;
329
+ return tcp->local_address;
318
330
  }
319
331
 
320
332
  static grpc_resource_user* endpoint_get_resource_user(grpc_endpoint* ep) {
@@ -322,9 +334,9 @@ static grpc_resource_user* endpoint_get_resource_user(grpc_endpoint* ep) {
322
334
  return tcp->resource_user;
323
335
  }
324
336
 
325
- static int endpoint_get_fd(grpc_endpoint* ep) { return -1; }
337
+ static int endpoint_get_fd(grpc_endpoint* /*ep*/) { return -1; }
326
338
 
327
- static bool endpoint_can_track_err(grpc_endpoint* ep) { return false; }
339
+ static bool endpoint_can_track_err(grpc_endpoint* /*ep*/) { return false; }
328
340
 
329
341
  static grpc_endpoint_vtable vtable = {endpoint_read,
330
342
  endpoint_write,
@@ -335,26 +347,36 @@ static grpc_endpoint_vtable vtable = {endpoint_read,
335
347
  endpoint_destroy,
336
348
  endpoint_get_resource_user,
337
349
  endpoint_get_peer,
350
+ endpoint_get_local_address,
338
351
  endpoint_get_fd,
339
352
  endpoint_can_track_err};
340
353
 
341
354
  grpc_endpoint* custom_tcp_endpoint_create(grpc_custom_socket* socket,
342
355
  grpc_resource_quota* resource_quota,
343
- char* peer_string) {
344
- custom_tcp_endpoint* tcp =
345
- (custom_tcp_endpoint*)gpr_malloc(sizeof(custom_tcp_endpoint));
356
+ const char* peer_string) {
357
+ custom_tcp_endpoint* tcp = new custom_tcp_endpoint;
358
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
346
359
  grpc_core::ExecCtx exec_ctx;
347
360
 
348
361
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
349
362
  gpr_log(GPR_INFO, "Creating TCP endpoint %p", socket);
350
363
  }
351
- memset(tcp, 0, sizeof(custom_tcp_endpoint));
352
364
  socket->refs++;
353
365
  socket->endpoint = (grpc_endpoint*)tcp;
354
366
  tcp->socket = socket;
355
367
  tcp->base.vtable = &vtable;
356
368
  gpr_ref_init(&tcp->refcount, 1);
357
- tcp->peer_string = gpr_strdup(peer_string);
369
+ tcp->peer_string = peer_string;
370
+ grpc_resolved_address resolved_local_addr;
371
+ resolved_local_addr.len = sizeof(resolved_local_addr.addr);
372
+ if (grpc_custom_socket_vtable->getsockname(
373
+ socket, reinterpret_cast<sockaddr*>(resolved_local_addr.addr),
374
+ reinterpret_cast<int*>(&resolved_local_addr.len)) !=
375
+ GRPC_ERROR_NONE) {
376
+ tcp->local_address = "";
377
+ } else {
378
+ tcp->local_address = grpc_sockaddr_to_uri(&resolved_local_addr);
379
+ }
358
380
  tcp->shutting_down = false;
359
381
  tcp->resource_user = grpc_resource_user_create(resource_quota, peer_string);
360
382
  grpc_resource_user_slice_allocator_init(
@@ -24,6 +24,9 @@
24
24
  #include "src/core/lib/iomgr/endpoint.h"
25
25
  #include "src/core/lib/iomgr/sockaddr.h"
26
26
 
27
+ // Same number as the micro of SO_REUSEPORT in kernel
28
+ #define GRPC_CUSTOM_SOCKET_OPT_SO_REUSEPORT (0x00000200u)
29
+
27
30
  typedef struct grpc_tcp_listener grpc_tcp_listener;
28
31
  typedef struct grpc_custom_tcp_connect grpc_custom_tcp_connect;
29
32
 
@@ -76,6 +79,6 @@ void grpc_custom_close_server_callback(grpc_tcp_listener* listener);
76
79
 
77
80
  grpc_endpoint* custom_tcp_endpoint_create(grpc_custom_socket* socket,
78
81
  grpc_resource_quota* resource_quota,
79
- char* peer_string);
82
+ const char* peer_string);
80
83
 
81
84
  #endif /* GRPC_CORE_LIB_IOMGR_TCP_CUSTOM_H */
@@ -36,6 +36,7 @@
36
36
  #include <sys/types.h>
37
37
  #include <unistd.h>
38
38
  #include <algorithm>
39
+ #include <unordered_map>
39
40
 
40
41
  #include <grpc/slice.h>
41
42
  #include <grpc/support/alloc.h>
@@ -49,9 +50,12 @@
49
50
  #include "src/core/lib/debug/trace.h"
50
51
  #include "src/core/lib/gpr/string.h"
51
52
  #include "src/core/lib/gpr/useful.h"
53
+ #include "src/core/lib/gprpp/sync.h"
52
54
  #include "src/core/lib/iomgr/buffer_list.h"
53
55
  #include "src/core/lib/iomgr/ev_posix.h"
54
56
  #include "src/core/lib/iomgr/executor.h"
57
+ #include "src/core/lib/iomgr/sockaddr_utils.h"
58
+ #include "src/core/lib/iomgr/socket_utils_posix.h"
55
59
  #include "src/core/lib/profiling/timers.h"
56
60
  #include "src/core/lib/slice/slice_internal.h"
57
61
  #include "src/core/lib/slice/slice_string_helpers.h"
@@ -71,6 +75,15 @@
71
75
  #define SENDMSG_FLAGS 0
72
76
  #endif
73
77
 
78
+ // TCP zero copy sendmsg flag.
79
+ // NB: We define this here as a fallback in case we're using an older set of
80
+ // library headers that has not defined MSG_ZEROCOPY. Since this constant is
81
+ // part of the kernel, we are guaranteed it will never change/disagree so
82
+ // defining it here is safe.
83
+ #ifndef MSG_ZEROCOPY
84
+ #define MSG_ZEROCOPY 0x4000000
85
+ #endif
86
+
74
87
  #ifdef GRPC_MSG_IOVLEN_TYPE
75
88
  typedef GRPC_MSG_IOVLEN_TYPE msg_iovlen_type;
76
89
  #else
@@ -79,8 +92,268 @@ typedef size_t msg_iovlen_type;
79
92
 
80
93
  extern grpc_core::TraceFlag grpc_tcp_trace;
81
94
 
95
+ namespace grpc_core {
96
+
97
+ class TcpZerocopySendRecord {
98
+ public:
99
+ TcpZerocopySendRecord() { grpc_slice_buffer_init(&buf_); }
100
+
101
+ ~TcpZerocopySendRecord() {
102
+ AssertEmpty();
103
+ grpc_slice_buffer_destroy_internal(&buf_);
104
+ }
105
+
106
+ // Given the slices that we wish to send, and the current offset into the
107
+ // slice buffer (indicating which have already been sent), populate an iovec
108
+ // array that will be used for a zerocopy enabled sendmsg().
109
+ msg_iovlen_type PopulateIovs(size_t* unwind_slice_idx,
110
+ size_t* unwind_byte_idx, size_t* sending_length,
111
+ iovec* iov);
112
+
113
+ // A sendmsg() may not be able to send the bytes that we requested at this
114
+ // time, returning EAGAIN (possibly due to backpressure). In this case,
115
+ // unwind the offset into the slice buffer so we retry sending these bytes.
116
+ void UnwindIfThrottled(size_t unwind_slice_idx, size_t unwind_byte_idx) {
117
+ out_offset_.byte_idx = unwind_byte_idx;
118
+ out_offset_.slice_idx = unwind_slice_idx;
119
+ }
120
+
121
+ // Update the offset into the slice buffer based on how much we wanted to sent
122
+ // vs. what sendmsg() actually sent (which may be lower, possibly due to
123
+ // backpressure).
124
+ void UpdateOffsetForBytesSent(size_t sending_length, size_t actually_sent);
125
+
126
+ // Indicates whether all underlying data has been sent or not.
127
+ bool AllSlicesSent() { return out_offset_.slice_idx == buf_.count; }
128
+
129
+ // Reset this structure for a new tcp_write() with zerocopy.
130
+ void PrepareForSends(grpc_slice_buffer* slices_to_send) {
131
+ AssertEmpty();
132
+ out_offset_.slice_idx = 0;
133
+ out_offset_.byte_idx = 0;
134
+ grpc_slice_buffer_swap(slices_to_send, &buf_);
135
+ Ref();
136
+ }
137
+
138
+ // References: 1 reference per sendmsg(), and 1 for the tcp_write().
139
+ void Ref() { ref_.FetchAdd(1, MemoryOrder::RELAXED); }
140
+
141
+ // Unref: called when we get an error queue notification for a sendmsg(), if a
142
+ // sendmsg() failed or when tcp_write() is done.
143
+ bool Unref() {
144
+ const intptr_t prior = ref_.FetchSub(1, MemoryOrder::ACQ_REL);
145
+ GPR_DEBUG_ASSERT(prior > 0);
146
+ if (prior == 1) {
147
+ AllSendsComplete();
148
+ return true;
149
+ }
150
+ return false;
151
+ }
152
+
153
+ private:
154
+ struct OutgoingOffset {
155
+ size_t slice_idx = 0;
156
+ size_t byte_idx = 0;
157
+ };
158
+
159
+ void AssertEmpty() {
160
+ GPR_DEBUG_ASSERT(buf_.count == 0);
161
+ GPR_DEBUG_ASSERT(buf_.length == 0);
162
+ GPR_DEBUG_ASSERT(ref_.Load(MemoryOrder::RELAXED) == 0);
163
+ }
164
+
165
+ // When all sendmsg() calls associated with this tcp_write() have been
166
+ // completed (ie. we have received the notifications for each sequence number
167
+ // for each sendmsg()) and all reference counts have been dropped, drop our
168
+ // reference to the underlying data since we no longer need it.
169
+ void AllSendsComplete() {
170
+ GPR_DEBUG_ASSERT(ref_.Load(MemoryOrder::RELAXED) == 0);
171
+ grpc_slice_buffer_reset_and_unref_internal(&buf_);
172
+ }
173
+
174
+ grpc_slice_buffer buf_;
175
+ Atomic<intptr_t> ref_;
176
+ OutgoingOffset out_offset_;
177
+ };
178
+
179
+ class TcpZerocopySendCtx {
180
+ public:
181
+ static constexpr int kDefaultMaxSends = 4;
182
+ static constexpr size_t kDefaultSendBytesThreshold = 16 * 1024; // 16KB
183
+
184
+ TcpZerocopySendCtx(int max_sends = kDefaultMaxSends,
185
+ size_t send_bytes_threshold = kDefaultSendBytesThreshold)
186
+ : max_sends_(max_sends),
187
+ free_send_records_size_(max_sends),
188
+ threshold_bytes_(send_bytes_threshold) {
189
+ send_records_ = static_cast<TcpZerocopySendRecord*>(
190
+ gpr_malloc(max_sends * sizeof(*send_records_)));
191
+ free_send_records_ = static_cast<TcpZerocopySendRecord**>(
192
+ gpr_malloc(max_sends * sizeof(*free_send_records_)));
193
+ if (send_records_ == nullptr || free_send_records_ == nullptr) {
194
+ gpr_free(send_records_);
195
+ gpr_free(free_send_records_);
196
+ gpr_log(GPR_INFO, "Disabling TCP TX zerocopy due to memory pressure.\n");
197
+ memory_limited_ = true;
198
+ } else {
199
+ for (int idx = 0; idx < max_sends_; ++idx) {
200
+ new (send_records_ + idx) TcpZerocopySendRecord();
201
+ free_send_records_[idx] = send_records_ + idx;
202
+ }
203
+ }
204
+ }
205
+
206
+ ~TcpZerocopySendCtx() {
207
+ if (send_records_ != nullptr) {
208
+ for (int idx = 0; idx < max_sends_; ++idx) {
209
+ send_records_[idx].~TcpZerocopySendRecord();
210
+ }
211
+ }
212
+ gpr_free(send_records_);
213
+ gpr_free(free_send_records_);
214
+ }
215
+
216
+ // True if we were unable to allocate the various bookkeeping structures at
217
+ // transport initialization time. If memory limited, we do not zerocopy.
218
+ bool memory_limited() const { return memory_limited_; }
219
+
220
+ // TCP send zerocopy maintains an implicit sequence number for every
221
+ // successful sendmsg() with zerocopy enabled; the kernel later gives us an
222
+ // error queue notification with this sequence number indicating that the
223
+ // underlying data buffers that we sent can now be released. Once that
224
+ // notification is received, we can release the buffers associated with this
225
+ // zerocopy send record. Here, we associate the sequence number with the data
226
+ // buffers that were sent with the corresponding call to sendmsg().
227
+ void NoteSend(TcpZerocopySendRecord* record) {
228
+ record->Ref();
229
+ AssociateSeqWithSendRecord(last_send_, record);
230
+ ++last_send_;
231
+ }
232
+
233
+ // If sendmsg() actually failed, though, we need to revert the sequence number
234
+ // that we speculatively bumped before calling sendmsg(). Note that we bump
235
+ // this sequence number and perform relevant bookkeeping (see: NoteSend())
236
+ // *before* calling sendmsg() since, if we called it *after* sendmsg(), then
237
+ // there is a possible race with the release notification which could occur on
238
+ // another thread before we do the necessary bookkeeping. Hence, calling
239
+ // NoteSend() *before* sendmsg() and implementing an undo function is needed.
240
+ void UndoSend() {
241
+ --last_send_;
242
+ if (ReleaseSendRecord(last_send_)->Unref()) {
243
+ // We should still be holding the ref taken by tcp_write().
244
+ GPR_DEBUG_ASSERT(0);
245
+ }
246
+ }
247
+
248
+ // Simply associate this send record (and the underlying sent data buffers)
249
+ // with the implicit sequence number for this zerocopy sendmsg().
250
+ void AssociateSeqWithSendRecord(uint32_t seq, TcpZerocopySendRecord* record) {
251
+ MutexLock guard(&lock_);
252
+ ctx_lookup_.emplace(seq, record);
253
+ }
254
+
255
+ // Get a send record for a send that we wish to do with zerocopy.
256
+ TcpZerocopySendRecord* GetSendRecord() {
257
+ MutexLock guard(&lock_);
258
+ return TryGetSendRecordLocked();
259
+ }
260
+
261
+ // A given send record corresponds to a single tcp_write() with zerocopy
262
+ // enabled. This can result in several sendmsg() calls to flush all of the
263
+ // data to wire. Each sendmsg() takes a reference on the
264
+ // TcpZerocopySendRecord, and corresponds to a single sequence number.
265
+ // ReleaseSendRecord releases a reference on TcpZerocopySendRecord for a
266
+ // single sequence number. This is called either when we receive the relevant
267
+ // error queue notification (saying that we can discard the underlying
268
+ // buffers for this sendmsg()) is received from the kernel - or, in case
269
+ // sendmsg() was unsuccessful to begin with.
270
+ TcpZerocopySendRecord* ReleaseSendRecord(uint32_t seq) {
271
+ MutexLock guard(&lock_);
272
+ return ReleaseSendRecordLocked(seq);
273
+ }
274
+
275
+ // After all the references to a TcpZerocopySendRecord are released, we can
276
+ // add it back to the pool (of size max_sends_). Note that we can only have
277
+ // max_sends_ tcp_write() instances with zerocopy enabled in flight at the
278
+ // same time.
279
+ void PutSendRecord(TcpZerocopySendRecord* record) {
280
+ GPR_DEBUG_ASSERT(record >= send_records_ &&
281
+ record < send_records_ + max_sends_);
282
+ MutexLock guard(&lock_);
283
+ PutSendRecordLocked(record);
284
+ }
285
+
286
+ // Indicate that we are disposing of this zerocopy context. This indicator
287
+ // will prevent new zerocopy writes from being issued.
288
+ void Shutdown() { shutdown_.Store(true, MemoryOrder::RELEASE); }
289
+
290
+ // Indicates that there are no inflight tcp_write() instances with zerocopy
291
+ // enabled.
292
+ bool AllSendRecordsEmpty() {
293
+ MutexLock guard(&lock_);
294
+ return free_send_records_size_ == max_sends_;
295
+ }
296
+
297
+ bool enabled() const { return enabled_; }
298
+
299
+ void set_enabled(bool enabled) {
300
+ GPR_DEBUG_ASSERT(!enabled || !memory_limited());
301
+ enabled_ = enabled;
302
+ }
303
+
304
+ // Only use zerocopy if we are sending at least this many bytes. The
305
+ // additional overhead of reading the error queue for notifications means that
306
+ // zerocopy is not useful for small transfers.
307
+ size_t threshold_bytes() const { return threshold_bytes_; }
308
+
309
+ private:
310
+ TcpZerocopySendRecord* ReleaseSendRecordLocked(uint32_t seq) {
311
+ auto iter = ctx_lookup_.find(seq);
312
+ GPR_DEBUG_ASSERT(iter != ctx_lookup_.end());
313
+ TcpZerocopySendRecord* record = iter->second;
314
+ ctx_lookup_.erase(iter);
315
+ return record;
316
+ }
317
+
318
+ TcpZerocopySendRecord* TryGetSendRecordLocked() {
319
+ if (shutdown_.Load(MemoryOrder::ACQUIRE)) {
320
+ return nullptr;
321
+ }
322
+ if (free_send_records_size_ == 0) {
323
+ return nullptr;
324
+ }
325
+ free_send_records_size_--;
326
+ return free_send_records_[free_send_records_size_];
327
+ }
328
+
329
+ void PutSendRecordLocked(TcpZerocopySendRecord* record) {
330
+ GPR_DEBUG_ASSERT(free_send_records_size_ < max_sends_);
331
+ free_send_records_[free_send_records_size_] = record;
332
+ free_send_records_size_++;
333
+ }
334
+
335
+ TcpZerocopySendRecord* send_records_;
336
+ TcpZerocopySendRecord** free_send_records_;
337
+ int max_sends_;
338
+ int free_send_records_size_;
339
+ Mutex lock_;
340
+ uint32_t last_send_ = 0;
341
+ Atomic<bool> shutdown_;
342
+ bool enabled_ = false;
343
+ size_t threshold_bytes_ = kDefaultSendBytesThreshold;
344
+ std::unordered_map<uint32_t, TcpZerocopySendRecord*> ctx_lookup_;
345
+ bool memory_limited_ = false;
346
+ };
347
+
348
+ } // namespace grpc_core
349
+
350
+ using grpc_core::TcpZerocopySendCtx;
351
+ using grpc_core::TcpZerocopySendRecord;
352
+
82
353
  namespace {
83
354
  struct grpc_tcp {
355
+ grpc_tcp(int max_sends, size_t send_bytes_threshold)
356
+ : tcp_zerocopy_send_ctx(max_sends, send_bytes_threshold) {}
84
357
  grpc_endpoint base;
85
358
  grpc_fd* em_fd;
86
359
  int fd;
@@ -89,7 +362,7 @@ struct grpc_tcp {
89
362
  bool is_first_read;
90
363
  double target_length;
91
364
  double bytes_read_this_round;
92
- gpr_refcount refcount;
365
+ grpc_core::RefCount refcount;
93
366
  gpr_atm shutdown_count;
94
367
 
95
368
  int min_read_chunk_size;
@@ -115,7 +388,8 @@ struct grpc_tcp {
115
388
  grpc_closure write_done_closure;
116
389
  grpc_closure error_closure;
117
390
 
118
- char* peer_string;
391
+ std::string peer_string;
392
+ std::string local_address;
119
393
 
120
394
  grpc_resource_user* resource_user;
121
395
  grpc_resource_user_slice_allocator slice_allocator;
@@ -142,6 +416,8 @@ struct grpc_tcp {
142
416
  bool ts_capable; /* Cache whether we can set timestamping options */
143
417
  gpr_atm stop_error_notification; /* Set to 1 if we do not want to be notified
144
418
  on errors anymore */
419
+ TcpZerocopySendCtx tcp_zerocopy_send_ctx;
420
+ TcpZerocopySendRecord* current_zerocopy_send = nullptr;
145
421
  };
146
422
 
147
423
  struct backup_poller {
@@ -151,6 +427,8 @@ struct backup_poller {
151
427
 
152
428
  } // namespace
153
429
 
430
+ static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* tcp);
431
+
154
432
  #define BACKUP_POLLER_POLLSET(b) ((grpc_pollset*)((b) + 1))
155
433
 
156
434
  static gpr_atm g_uncovered_notifications_pending;
@@ -161,7 +439,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error);
161
439
  static void tcp_drop_uncovered_then_handle_write(void* arg /* grpc_tcp */,
162
440
  grpc_error* error);
163
441
 
164
- static void done_poller(void* bp, grpc_error* error_ignored) {
442
+ static void done_poller(void* bp, grpc_error* /*error_ignored*/) {
165
443
  backup_poller* p = static_cast<backup_poller*>(bp);
166
444
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
167
445
  gpr_log(GPR_INFO, "BACKUP_POLLER:%p destroy", p);
@@ -170,7 +448,7 @@ static void done_poller(void* bp, grpc_error* error_ignored) {
170
448
  gpr_free(p);
171
449
  }
172
450
 
173
- static void run_poller(void* bp, grpc_error* error_ignored) {
451
+ static void run_poller(void* bp, grpc_error* /*error_ignored*/) {
174
452
  backup_poller* p = static_cast<backup_poller*>(bp);
175
453
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
176
454
  gpr_log(GPR_INFO, "BACKUP_POLLER:%p run", p);
@@ -202,11 +480,13 @@ static void run_poller(void* bp, grpc_error* error_ignored) {
202
480
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
203
481
  gpr_log(GPR_INFO, "BACKUP_POLLER:%p reschedule", p);
204
482
  }
205
- GRPC_CLOSURE_SCHED(&p->run_poller, GRPC_ERROR_NONE);
483
+ grpc_core::Executor::Run(&p->run_poller, GRPC_ERROR_NONE,
484
+ grpc_core::ExecutorType::DEFAULT,
485
+ grpc_core::ExecutorJobType::LONG);
206
486
  }
207
487
  }
208
488
 
209
- static void drop_uncovered(grpc_tcp* tcp) {
489
+ static void drop_uncovered(grpc_tcp* /*tcp*/) {
210
490
  backup_poller* p = (backup_poller*)gpr_atm_acq_load(&g_backup_poller);
211
491
  gpr_atm old_count =
212
492
  gpr_atm_full_fetch_add(&g_uncovered_notifications_pending, -1);
@@ -241,10 +521,10 @@ static void cover_self(grpc_tcp* tcp) {
241
521
  }
242
522
  grpc_pollset_init(BACKUP_POLLER_POLLSET(p), &p->pollset_mu);
243
523
  gpr_atm_rel_store(&g_backup_poller, (gpr_atm)p);
244
- GRPC_CLOSURE_SCHED(GRPC_CLOSURE_INIT(&p->run_poller, run_poller, p,
245
- grpc_core::Executor::Scheduler(
246
- grpc_core::ExecutorJobType::LONG)),
247
- GRPC_ERROR_NONE);
524
+ grpc_core::Executor::Run(
525
+ GRPC_CLOSURE_INIT(&p->run_poller, run_poller, p, nullptr),
526
+ GRPC_ERROR_NONE, grpc_core::ExecutorType::DEFAULT,
527
+ grpc_core::ExecutorJobType::LONG);
248
528
  } else {
249
529
  while ((p = (backup_poller*)gpr_atm_acq_load(&g_backup_poller)) ==
250
530
  nullptr) {
@@ -329,7 +609,7 @@ static grpc_error* tcp_annotate_error(grpc_error* src_error, grpc_tcp* tcp) {
329
609
  * choose to retry. */
330
610
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE),
331
611
  GRPC_ERROR_STR_TARGET_ADDRESS,
332
- grpc_slice_from_copied_string(tcp->peer_string));
612
+ grpc_slice_from_copied_string(tcp->peer_string.c_str()));
333
613
  }
334
614
 
335
615
  static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error* error);
@@ -337,6 +617,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error);
337
617
 
338
618
  static void tcp_shutdown(grpc_endpoint* ep, grpc_error* why) {
339
619
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
620
+ ZerocopyDisableAndWaitForRemaining(tcp);
340
621
  grpc_fd_shutdown(tcp->em_fd, why);
341
622
  grpc_resource_user_shutdown(tcp->resource_user);
342
623
  }
@@ -346,7 +627,6 @@ static void tcp_free(grpc_tcp* tcp) {
346
627
  "tcp_unref_orphan");
347
628
  grpc_slice_buffer_destroy_internal(&tcp->last_read_buffer);
348
629
  grpc_resource_user_unref(tcp->resource_user);
349
- gpr_free(tcp->peer_string);
350
630
  /* The lock is not really necessary here, since all refs have been released */
351
631
  gpr_mu_lock(&tcp->tb_mu);
352
632
  grpc_core::TracedBuffer::Shutdown(
@@ -355,51 +635,40 @@ static void tcp_free(grpc_tcp* tcp) {
355
635
  gpr_mu_unlock(&tcp->tb_mu);
356
636
  tcp->outgoing_buffer_arg = nullptr;
357
637
  gpr_mu_destroy(&tcp->tb_mu);
358
- gpr_free(tcp);
638
+ delete tcp;
359
639
  }
360
640
 
361
641
  #ifndef NDEBUG
362
- #define TCP_UNREF(tcp, reason) tcp_unref((tcp), (reason), __FILE__, __LINE__)
363
- #define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), __FILE__, __LINE__)
364
- static void tcp_unref(grpc_tcp* tcp, const char* reason, const char* file,
365
- int line) {
366
- if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
367
- gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
368
- gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
369
- "TCP unref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp, reason, val,
370
- val - 1);
371
- }
372
- if (gpr_unref(&tcp->refcount)) {
642
+ #define TCP_UNREF(tcp, reason) tcp_unref((tcp), (reason), DEBUG_LOCATION)
643
+ #define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), DEBUG_LOCATION)
644
+ static void tcp_unref(grpc_tcp* tcp, const char* reason,
645
+ const grpc_core::DebugLocation& debug_location) {
646
+ if (GPR_UNLIKELY(tcp->refcount.Unref(debug_location, reason))) {
373
647
  tcp_free(tcp);
374
648
  }
375
649
  }
376
650
 
377
- static void tcp_ref(grpc_tcp* tcp, const char* reason, const char* file,
378
- int line) {
379
- if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
380
- gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
381
- gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
382
- "TCP ref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp, reason, val,
383
- val + 1);
384
- }
385
- gpr_ref(&tcp->refcount);
651
+ static void tcp_ref(grpc_tcp* tcp, const char* reason,
652
+ const grpc_core::DebugLocation& debug_location) {
653
+ tcp->refcount.Ref(debug_location, reason);
386
654
  }
387
655
  #else
388
656
  #define TCP_UNREF(tcp, reason) tcp_unref((tcp))
389
657
  #define TCP_REF(tcp, reason) tcp_ref((tcp))
390
658
  static void tcp_unref(grpc_tcp* tcp) {
391
- if (gpr_unref(&tcp->refcount)) {
659
+ if (GPR_UNLIKELY(tcp->refcount.Unref())) {
392
660
  tcp_free(tcp);
393
661
  }
394
662
  }
395
663
 
396
- static void tcp_ref(grpc_tcp* tcp) { gpr_ref(&tcp->refcount); }
664
+ static void tcp_ref(grpc_tcp* tcp) { tcp->refcount.Ref(); }
397
665
  #endif
398
666
 
399
667
  static void tcp_destroy(grpc_endpoint* ep) {
400
668
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
401
669
  grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
402
670
  if (grpc_event_engine_can_track_errors()) {
671
+ ZerocopyDisableAndWaitForRemaining(tcp);
403
672
  gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
404
673
  grpc_fd_set_error(tcp->em_fd);
405
674
  }
@@ -413,7 +682,8 @@ static void call_read_cb(grpc_tcp* tcp, grpc_error* error) {
413
682
  gpr_log(GPR_INFO, "TCP:%p call_cb %p %p:%p", tcp, cb, cb->cb, cb->cb_arg);
414
683
  size_t i;
415
684
  const char* str = grpc_error_string(error);
416
- gpr_log(GPR_INFO, "READ %p (peer=%s) error=%s", tcp, tcp->peer_string, str);
685
+ gpr_log(GPR_INFO, "READ %p (peer=%s) error=%s", tcp,
686
+ tcp->peer_string.c_str(), str);
417
687
 
418
688
  if (gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
419
689
  for (i = 0; i < tcp->incoming_buffer->count; i++) {
@@ -427,7 +697,7 @@ static void call_read_cb(grpc_tcp* tcp, grpc_error* error) {
427
697
 
428
698
  tcp->read_cb = nullptr;
429
699
  tcp->incoming_buffer = nullptr;
430
- GRPC_CLOSURE_SCHED(cb, error);
700
+ grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
431
701
  }
432
702
 
433
703
  #define MAX_READ_IOVEC 4
@@ -435,12 +705,17 @@ static void tcp_do_read(grpc_tcp* tcp) {
435
705
  GPR_TIMER_SCOPE("tcp_do_read", 0);
436
706
  struct msghdr msg;
437
707
  struct iovec iov[MAX_READ_IOVEC];
438
- char cmsgbuf[24 /*CMSG_SPACE(sizeof(int))*/];
439
708
  ssize_t read_bytes;
440
709
  size_t total_read_bytes = 0;
441
-
442
710
  size_t iov_len =
443
711
  std::min<size_t>(MAX_READ_IOVEC, tcp->incoming_buffer->count);
712
+ #ifdef GRPC_LINUX_ERRQUEUE
713
+ constexpr size_t cmsg_alloc_space =
714
+ CMSG_SPACE(sizeof(grpc_core::scm_timestamping)) + CMSG_SPACE(sizeof(int));
715
+ #else
716
+ constexpr size_t cmsg_alloc_space = 24 /* CMSG_SPACE(sizeof(int)) */;
717
+ #endif /* GRPC_LINUX_ERRQUEUE */
718
+ char cmsgbuf[cmsg_alloc_space];
444
719
  for (size_t i = 0; i < iov_len; i++) {
445
720
  iov[i].iov_base = GRPC_SLICE_START_PTR(tcp->incoming_buffer->slices[i]);
446
721
  iov[i].iov_len = GRPC_SLICE_LENGTH(tcp->incoming_buffer->slices[i]);
@@ -524,6 +799,7 @@ static void tcp_do_read(grpc_tcp* tcp) {
524
799
  if (cmsg->cmsg_level == SOL_TCP && cmsg->cmsg_type == TCP_CM_INQ &&
525
800
  cmsg->cmsg_len == CMSG_LEN(sizeof(int))) {
526
801
  tcp->inq = *reinterpret_cast<int*>(CMSG_DATA(cmsg));
802
+ break;
527
803
  }
528
804
  }
529
805
  }
@@ -577,7 +853,7 @@ static void tcp_read_allocation_done(void* tcpp, grpc_error* error) {
577
853
  gpr_log(GPR_INFO, "TCP:%p read_allocation_done: %s", tcp,
578
854
  grpc_error_string(error));
579
855
  }
580
- if (error != GRPC_ERROR_NONE) {
856
+ if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
581
857
  grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
582
858
  grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
583
859
  call_read_cb(tcp, GRPC_ERROR_REF(error));
@@ -595,14 +871,17 @@ static void tcp_continue_read(grpc_tcp* tcp) {
595
871
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
596
872
  gpr_log(GPR_INFO, "TCP:%p alloc_slices", tcp);
597
873
  }
598
- grpc_resource_user_alloc_slices(&tcp->slice_allocator, target_read_size, 1,
599
- tcp->incoming_buffer);
600
- } else {
601
- if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
602
- gpr_log(GPR_INFO, "TCP:%p do_read", tcp);
874
+ if (GPR_UNLIKELY(!grpc_resource_user_alloc_slices(&tcp->slice_allocator,
875
+ target_read_size, 1,
876
+ tcp->incoming_buffer))) {
877
+ // Wait for allocation.
878
+ return;
603
879
  }
604
- tcp_do_read(tcp);
605
880
  }
881
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
882
+ gpr_log(GPR_INFO, "TCP:%p do_read", tcp);
883
+ }
884
+ tcp_do_read(tcp);
606
885
  }
607
886
 
608
887
  static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error* error) {
@@ -611,7 +890,7 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error* error) {
611
890
  gpr_log(GPR_INFO, "TCP:%p got_read: %s", tcp, grpc_error_string(error));
612
891
  }
613
892
 
614
- if (error != GRPC_ERROR_NONE) {
893
+ if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
615
894
  grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
616
895
  grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
617
896
  call_read_cb(tcp, GRPC_ERROR_REF(error));
@@ -646,19 +925,20 @@ static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
646
925
  * right thing (i.e calls tcp_do_read() which either reads the available
647
926
  * bytes or calls notify_on_read() to be notified when new bytes become
648
927
  * available */
649
- GRPC_CLOSURE_SCHED(&tcp->read_done_closure, GRPC_ERROR_NONE);
928
+ grpc_core::Closure::Run(DEBUG_LOCATION, &tcp->read_done_closure,
929
+ GRPC_ERROR_NONE);
650
930
  }
651
931
  }
652
932
 
653
933
  /* A wrapper around sendmsg. It sends \a msg over \a fd and returns the number
654
934
  * of bytes sent. */
655
- ssize_t tcp_send(int fd, const struct msghdr* msg) {
935
+ ssize_t tcp_send(int fd, const struct msghdr* msg, int additional_flags = 0) {
656
936
  GPR_TIMER_SCOPE("sendmsg", 1);
657
937
  ssize_t sent_length;
658
938
  do {
659
939
  /* TODO(klempner): Cork if this is a partial write */
660
940
  GRPC_STATS_INC_SYSCALL_WRITE();
661
- sent_length = sendmsg(fd, msg, SENDMSG_FLAGS);
941
+ sent_length = sendmsg(fd, msg, SENDMSG_FLAGS | additional_flags);
662
942
  } while (sent_length < 0 && errno == EINTR);
663
943
  return sent_length;
664
944
  }
@@ -671,21 +951,56 @@ ssize_t tcp_send(int fd, const struct msghdr* msg) {
671
951
  */
672
952
  static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
673
953
  size_t sending_length,
674
- ssize_t* sent_length);
954
+ ssize_t* sent_length,
955
+ int additional_flags = 0);
675
956
 
676
957
  /** The callback function to be invoked when we get an error on the socket. */
677
958
  static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error* error);
678
959
 
960
+ static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
961
+ grpc_tcp* tcp, grpc_slice_buffer* buf);
962
+
679
963
  #ifdef GRPC_LINUX_ERRQUEUE
964
+ static bool process_errors(grpc_tcp* tcp);
965
+
966
+ static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
967
+ grpc_tcp* tcp, grpc_slice_buffer* buf) {
968
+ TcpZerocopySendRecord* zerocopy_send_record = nullptr;
969
+ const bool use_zerocopy =
970
+ tcp->tcp_zerocopy_send_ctx.enabled() &&
971
+ tcp->tcp_zerocopy_send_ctx.threshold_bytes() < buf->length;
972
+ if (use_zerocopy) {
973
+ zerocopy_send_record = tcp->tcp_zerocopy_send_ctx.GetSendRecord();
974
+ if (zerocopy_send_record == nullptr) {
975
+ process_errors(tcp);
976
+ zerocopy_send_record = tcp->tcp_zerocopy_send_ctx.GetSendRecord();
977
+ }
978
+ if (zerocopy_send_record != nullptr) {
979
+ zerocopy_send_record->PrepareForSends(buf);
980
+ GPR_DEBUG_ASSERT(buf->count == 0);
981
+ GPR_DEBUG_ASSERT(buf->length == 0);
982
+ tcp->outgoing_byte_idx = 0;
983
+ tcp->outgoing_buffer = nullptr;
984
+ }
985
+ }
986
+ return zerocopy_send_record;
987
+ }
988
+
989
+ static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* tcp) {
990
+ tcp->tcp_zerocopy_send_ctx.Shutdown();
991
+ while (!tcp->tcp_zerocopy_send_ctx.AllSendRecordsEmpty()) {
992
+ process_errors(tcp);
993
+ }
994
+ }
680
995
 
681
996
  static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
682
997
  size_t sending_length,
683
- ssize_t* sent_length) {
998
+ ssize_t* sent_length,
999
+ int additional_flags) {
684
1000
  if (!tcp->socket_ts_enabled) {
685
1001
  uint32_t opt = grpc_core::kTimestampingSocketOptions;
686
1002
  if (setsockopt(tcp->fd, SOL_SOCKET, SO_TIMESTAMPING,
687
1003
  static_cast<void*>(&opt), sizeof(opt)) != 0) {
688
- grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
689
1004
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
690
1005
  gpr_log(GPR_ERROR, "Failed to set timestamping options on the socket.");
691
1006
  }
@@ -709,7 +1024,7 @@ static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
709
1024
  msg->msg_controllen = CMSG_SPACE(sizeof(uint32_t));
710
1025
 
711
1026
  /* If there was an error on sendmsg the logic in tcp_flush will handle it. */
712
- ssize_t length = tcp_send(tcp->fd, msg);
1027
+ ssize_t length = tcp_send(tcp->fd, msg, additional_flags);
713
1028
  *sent_length = length;
714
1029
  /* Only save timestamps if all the bytes were taken by sendmsg. */
715
1030
  if (sending_length == static_cast<size_t>(length)) {
@@ -723,6 +1038,43 @@ static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
723
1038
  return true;
724
1039
  }
725
1040
 
1041
+ static void UnrefMaybePutZerocopySendRecord(grpc_tcp* tcp,
1042
+ TcpZerocopySendRecord* record,
1043
+ uint32_t seq, const char* tag);
1044
+ // Reads \a cmsg to process zerocopy control messages.
1045
+ static void process_zerocopy(grpc_tcp* tcp, struct cmsghdr* cmsg) {
1046
+ GPR_DEBUG_ASSERT(cmsg);
1047
+ auto serr = reinterpret_cast<struct sock_extended_err*>(CMSG_DATA(cmsg));
1048
+ GPR_DEBUG_ASSERT(serr->ee_errno == 0);
1049
+ GPR_DEBUG_ASSERT(serr->ee_origin == SO_EE_ORIGIN_ZEROCOPY);
1050
+ const uint32_t lo = serr->ee_info;
1051
+ const uint32_t hi = serr->ee_data;
1052
+ for (uint32_t seq = lo; seq <= hi; ++seq) {
1053
+ // TODO(arjunroy): It's likely that lo and hi refer to zerocopy sequence
1054
+ // numbers that are generated by a single call to grpc_endpoint_write; ie.
1055
+ // we can batch the unref operation. So, check if record is the same for
1056
+ // both; if so, batch the unref/put.
1057
+ TcpZerocopySendRecord* record =
1058
+ tcp->tcp_zerocopy_send_ctx.ReleaseSendRecord(seq);
1059
+ GPR_DEBUG_ASSERT(record);
1060
+ UnrefMaybePutZerocopySendRecord(tcp, record, seq, "CALLBACK RCVD");
1061
+ }
1062
+ }
1063
+
1064
+ // Whether the cmsg received from error queue is of the IPv4 or IPv6 levels.
1065
+ static bool CmsgIsIpLevel(const cmsghdr& cmsg) {
1066
+ return (cmsg.cmsg_level == SOL_IPV6 && cmsg.cmsg_type == IPV6_RECVERR) ||
1067
+ (cmsg.cmsg_level == SOL_IP && cmsg.cmsg_type == IP_RECVERR);
1068
+ }
1069
+
1070
+ static bool CmsgIsZeroCopy(const cmsghdr& cmsg) {
1071
+ if (!CmsgIsIpLevel(cmsg)) {
1072
+ return false;
1073
+ }
1074
+ auto serr = reinterpret_cast<const sock_extended_err*> CMSG_DATA(&cmsg);
1075
+ return serr->ee_errno == 0 && serr->ee_origin == SO_EE_ORIGIN_ZEROCOPY;
1076
+ }
1077
+
726
1078
  /** Reads \a cmsg to derive timestamps from the control messages. If a valid
727
1079
  * timestamp is found, the traced buffer list is updated with this timestamp.
728
1080
  * The caller of this function should be looping on the control messages found
@@ -784,73 +1136,76 @@ struct cmsghdr* process_timestamp(grpc_tcp* tcp, msghdr* msg,
784
1136
  /** For linux platforms, reads the socket's error queue and processes error
785
1137
  * messages from the queue.
786
1138
  */
787
- static void process_errors(grpc_tcp* tcp) {
1139
+ static bool process_errors(grpc_tcp* tcp) {
1140
+ bool processed_err = false;
1141
+ struct iovec iov;
1142
+ iov.iov_base = nullptr;
1143
+ iov.iov_len = 0;
1144
+ struct msghdr msg;
1145
+ msg.msg_name = nullptr;
1146
+ msg.msg_namelen = 0;
1147
+ msg.msg_iov = &iov;
1148
+ msg.msg_iovlen = 0;
1149
+ msg.msg_flags = 0;
1150
+ /* Allocate enough space so we don't need to keep increasing this as size
1151
+ * of OPT_STATS increase */
1152
+ constexpr size_t cmsg_alloc_space =
1153
+ CMSG_SPACE(sizeof(grpc_core::scm_timestamping)) +
1154
+ CMSG_SPACE(sizeof(sock_extended_err) + sizeof(sockaddr_in)) +
1155
+ CMSG_SPACE(32 * NLA_ALIGN(NLA_HDRLEN + sizeof(uint64_t)));
1156
+ /* Allocate aligned space for cmsgs received along with timestamps */
1157
+ union {
1158
+ char rbuf[cmsg_alloc_space];
1159
+ struct cmsghdr align;
1160
+ } aligned_buf;
1161
+ msg.msg_control = aligned_buf.rbuf;
1162
+ msg.msg_controllen = sizeof(aligned_buf.rbuf);
1163
+ int r, saved_errno;
788
1164
  while (true) {
789
- struct iovec iov;
790
- iov.iov_base = nullptr;
791
- iov.iov_len = 0;
792
- struct msghdr msg;
793
- msg.msg_name = nullptr;
794
- msg.msg_namelen = 0;
795
- msg.msg_iov = &iov;
796
- msg.msg_iovlen = 0;
797
- msg.msg_flags = 0;
798
-
799
- /* Allocate enough space so we don't need to keep increasing this as size
800
- * of OPT_STATS increase */
801
- constexpr size_t cmsg_alloc_space =
802
- CMSG_SPACE(sizeof(grpc_core::scm_timestamping)) +
803
- CMSG_SPACE(sizeof(sock_extended_err) + sizeof(sockaddr_in)) +
804
- CMSG_SPACE(32 * NLA_ALIGN(NLA_HDRLEN + sizeof(uint64_t)));
805
- /* Allocate aligned space for cmsgs received along with timestamps */
806
- union {
807
- char rbuf[cmsg_alloc_space];
808
- struct cmsghdr align;
809
- } aligned_buf;
810
- memset(&aligned_buf, 0, sizeof(aligned_buf));
811
-
812
- msg.msg_control = aligned_buf.rbuf;
813
- msg.msg_controllen = sizeof(aligned_buf.rbuf);
814
-
815
- int r, saved_errno;
816
1165
  do {
817
1166
  r = recvmsg(tcp->fd, &msg, MSG_ERRQUEUE);
818
1167
  saved_errno = errno;
819
1168
  } while (r < 0 && saved_errno == EINTR);
820
1169
 
821
1170
  if (r == -1 && saved_errno == EAGAIN) {
822
- return; /* No more errors to process */
1171
+ return processed_err; /* No more errors to process */
823
1172
  }
824
1173
  if (r == -1) {
825
- return;
1174
+ return processed_err;
826
1175
  }
827
- if ((msg.msg_flags & MSG_CTRUNC) != 0) {
1176
+ if (GPR_UNLIKELY((msg.msg_flags & MSG_CTRUNC) != 0)) {
828
1177
  gpr_log(GPR_ERROR, "Error message was truncated.");
829
1178
  }
830
1179
 
831
1180
  if (msg.msg_controllen == 0) {
832
1181
  /* There was no control message found. It was probably spurious. */
833
- return;
1182
+ return processed_err;
834
1183
  }
835
1184
  bool seen = false;
836
1185
  for (auto cmsg = CMSG_FIRSTHDR(&msg); cmsg && cmsg->cmsg_len;
837
1186
  cmsg = CMSG_NXTHDR(&msg, cmsg)) {
838
- if (cmsg->cmsg_level != SOL_SOCKET ||
839
- cmsg->cmsg_type != SCM_TIMESTAMPING) {
840
- /* Got a control message that is not a timestamp. Don't know how to
841
- * handle this. */
1187
+ if (CmsgIsZeroCopy(*cmsg)) {
1188
+ process_zerocopy(tcp, cmsg);
1189
+ seen = true;
1190
+ processed_err = true;
1191
+ } else if (cmsg->cmsg_level == SOL_SOCKET &&
1192
+ cmsg->cmsg_type == SCM_TIMESTAMPING) {
1193
+ cmsg = process_timestamp(tcp, &msg, cmsg);
1194
+ seen = true;
1195
+ processed_err = true;
1196
+ } else {
1197
+ /* Got a control message that is not a timestamp or zerocopy. Don't know
1198
+ * how to handle this. */
842
1199
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
843
1200
  gpr_log(GPR_INFO,
844
1201
  "unknown control message cmsg_level:%d cmsg_type:%d",
845
1202
  cmsg->cmsg_level, cmsg->cmsg_type);
846
1203
  }
847
- return;
1204
+ return processed_err;
848
1205
  }
849
- cmsg = process_timestamp(tcp, &msg, cmsg);
850
- seen = true;
851
1206
  }
852
1207
  if (!seen) {
853
- return;
1208
+ return processed_err;
854
1209
  }
855
1210
  }
856
1211
  }
@@ -871,24 +1226,35 @@ static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error* error) {
871
1226
 
872
1227
  /* We are still interested in collecting timestamps, so let's try reading
873
1228
  * them. */
874
- process_errors(tcp);
1229
+ bool processed = process_errors(tcp);
875
1230
  /* This might not a timestamps error. Set the read and write closures to be
876
1231
  * ready. */
877
- grpc_fd_set_readable(tcp->em_fd);
878
- grpc_fd_set_writable(tcp->em_fd);
1232
+ if (!processed) {
1233
+ grpc_fd_set_readable(tcp->em_fd);
1234
+ grpc_fd_set_writable(tcp->em_fd);
1235
+ }
879
1236
  grpc_fd_notify_on_error(tcp->em_fd, &tcp->error_closure);
880
1237
  }
881
1238
 
882
1239
  #else /* GRPC_LINUX_ERRQUEUE */
883
- static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
884
- size_t sending_length,
885
- ssize_t* sent_length) {
1240
+ static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
1241
+ grpc_tcp* tcp, grpc_slice_buffer* buf) {
1242
+ return nullptr;
1243
+ }
1244
+
1245
+ static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* tcp) {}
1246
+
1247
+ static bool tcp_write_with_timestamps(grpc_tcp* /*tcp*/, struct msghdr* /*msg*/,
1248
+ size_t /*sending_length*/,
1249
+ ssize_t* /*sent_length*/,
1250
+ int /*additional_flags*/) {
886
1251
  gpr_log(GPR_ERROR, "Write with timestamps not supported for this platform");
887
1252
  GPR_ASSERT(0);
888
1253
  return false;
889
1254
  }
890
1255
 
891
- static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error* error) {
1256
+ static void tcp_handle_error(void* /*arg*/ /* grpc_tcp */,
1257
+ grpc_error* /*error*/) {
892
1258
  gpr_log(GPR_ERROR, "Error handling is not supported for this platform");
893
1259
  GPR_ASSERT(0);
894
1260
  }
@@ -907,12 +1273,139 @@ void tcp_shutdown_buffer_list(grpc_tcp* tcp) {
907
1273
  }
908
1274
  }
909
1275
 
910
- /* returns true if done, false if pending; if returning true, *error is set */
911
1276
  #if defined(IOV_MAX) && IOV_MAX < 1000
912
1277
  #define MAX_WRITE_IOVEC IOV_MAX
913
1278
  #else
914
1279
  #define MAX_WRITE_IOVEC 1000
915
1280
  #endif
1281
+ msg_iovlen_type TcpZerocopySendRecord::PopulateIovs(size_t* unwind_slice_idx,
1282
+ size_t* unwind_byte_idx,
1283
+ size_t* sending_length,
1284
+ iovec* iov) {
1285
+ msg_iovlen_type iov_size;
1286
+ *unwind_slice_idx = out_offset_.slice_idx;
1287
+ *unwind_byte_idx = out_offset_.byte_idx;
1288
+ for (iov_size = 0;
1289
+ out_offset_.slice_idx != buf_.count && iov_size != MAX_WRITE_IOVEC;
1290
+ iov_size++) {
1291
+ iov[iov_size].iov_base =
1292
+ GRPC_SLICE_START_PTR(buf_.slices[out_offset_.slice_idx]) +
1293
+ out_offset_.byte_idx;
1294
+ iov[iov_size].iov_len =
1295
+ GRPC_SLICE_LENGTH(buf_.slices[out_offset_.slice_idx]) -
1296
+ out_offset_.byte_idx;
1297
+ *sending_length += iov[iov_size].iov_len;
1298
+ ++(out_offset_.slice_idx);
1299
+ out_offset_.byte_idx = 0;
1300
+ }
1301
+ GPR_DEBUG_ASSERT(iov_size > 0);
1302
+ return iov_size;
1303
+ }
1304
+
1305
+ void TcpZerocopySendRecord::UpdateOffsetForBytesSent(size_t sending_length,
1306
+ size_t actually_sent) {
1307
+ size_t trailing = sending_length - actually_sent;
1308
+ while (trailing > 0) {
1309
+ size_t slice_length;
1310
+ out_offset_.slice_idx--;
1311
+ slice_length = GRPC_SLICE_LENGTH(buf_.slices[out_offset_.slice_idx]);
1312
+ if (slice_length > trailing) {
1313
+ out_offset_.byte_idx = slice_length - trailing;
1314
+ break;
1315
+ } else {
1316
+ trailing -= slice_length;
1317
+ }
1318
+ }
1319
+ }
1320
+
1321
+ // returns true if done, false if pending; if returning true, *error is set
1322
+ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
1323
+ grpc_error** error) {
1324
+ struct msghdr msg;
1325
+ struct iovec iov[MAX_WRITE_IOVEC];
1326
+ msg_iovlen_type iov_size;
1327
+ ssize_t sent_length = 0;
1328
+ size_t sending_length;
1329
+ size_t unwind_slice_idx;
1330
+ size_t unwind_byte_idx;
1331
+ while (true) {
1332
+ sending_length = 0;
1333
+ iov_size = record->PopulateIovs(&unwind_slice_idx, &unwind_byte_idx,
1334
+ &sending_length, iov);
1335
+ msg.msg_name = nullptr;
1336
+ msg.msg_namelen = 0;
1337
+ msg.msg_iov = iov;
1338
+ msg.msg_iovlen = iov_size;
1339
+ msg.msg_flags = 0;
1340
+ bool tried_sending_message = false;
1341
+ // Before calling sendmsg (with or without timestamps): we
1342
+ // take a single ref on the zerocopy send record.
1343
+ tcp->tcp_zerocopy_send_ctx.NoteSend(record);
1344
+ if (tcp->outgoing_buffer_arg != nullptr) {
1345
+ if (!tcp->ts_capable ||
1346
+ !tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length,
1347
+ MSG_ZEROCOPY)) {
1348
+ /* We could not set socket options to collect Fathom timestamps.
1349
+ * Fallback on writing without timestamps. */
1350
+ tcp->ts_capable = false;
1351
+ tcp_shutdown_buffer_list(tcp);
1352
+ } else {
1353
+ tried_sending_message = true;
1354
+ }
1355
+ }
1356
+ if (!tried_sending_message) {
1357
+ msg.msg_control = nullptr;
1358
+ msg.msg_controllen = 0;
1359
+ GRPC_STATS_INC_TCP_WRITE_SIZE(sending_length);
1360
+ GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(iov_size);
1361
+ sent_length = tcp_send(tcp->fd, &msg, MSG_ZEROCOPY);
1362
+ }
1363
+ if (sent_length < 0) {
1364
+ // If this particular send failed, drop ref taken earlier in this method.
1365
+ tcp->tcp_zerocopy_send_ctx.UndoSend();
1366
+ if (errno == EAGAIN) {
1367
+ record->UnwindIfThrottled(unwind_slice_idx, unwind_byte_idx);
1368
+ return false;
1369
+ } else if (errno == EPIPE) {
1370
+ *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
1371
+ tcp_shutdown_buffer_list(tcp);
1372
+ return true;
1373
+ } else {
1374
+ *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
1375
+ tcp_shutdown_buffer_list(tcp);
1376
+ return true;
1377
+ }
1378
+ }
1379
+ tcp->bytes_counter += sent_length;
1380
+ record->UpdateOffsetForBytesSent(sending_length,
1381
+ static_cast<size_t>(sent_length));
1382
+ if (record->AllSlicesSent()) {
1383
+ *error = GRPC_ERROR_NONE;
1384
+ return true;
1385
+ }
1386
+ }
1387
+ }
1388
+
1389
+ static void UnrefMaybePutZerocopySendRecord(grpc_tcp* tcp,
1390
+ TcpZerocopySendRecord* record,
1391
+ uint32_t seq,
1392
+ const char* /* tag */) {
1393
+ if (record->Unref()) {
1394
+ tcp->tcp_zerocopy_send_ctx.PutSendRecord(record);
1395
+ }
1396
+ }
1397
+
1398
+ static bool tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
1399
+ grpc_error** error) {
1400
+ bool done = do_tcp_flush_zerocopy(tcp, record, error);
1401
+ if (done) {
1402
+ // Either we encountered an error, or we successfully sent all the bytes.
1403
+ // In either case, we're done with this record.
1404
+ UnrefMaybePutZerocopySendRecord(tcp, record, 0, "flush_done");
1405
+ }
1406
+ return done;
1407
+ }
1408
+
916
1409
  static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
917
1410
  struct msghdr msg;
918
1411
  struct iovec iov[MAX_WRITE_IOVEC];
@@ -927,7 +1420,7 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
927
1420
  // buffer as we write
928
1421
  size_t outgoing_slice_idx = 0;
929
1422
 
930
- for (;;) {
1423
+ while (true) {
931
1424
  sending_length = 0;
932
1425
  unwind_slice_idx = outgoing_slice_idx;
933
1426
  unwind_byte_idx = tcp->outgoing_byte_idx;
@@ -980,8 +1473,7 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
980
1473
  // unref all and forget about all slices that have been written to this
981
1474
  // point
982
1475
  for (size_t idx = 0; idx < unwind_slice_idx; ++idx) {
983
- grpc_slice_unref_internal(
984
- grpc_slice_buffer_take_first(tcp->outgoing_buffer));
1476
+ grpc_slice_buffer_remove_first(tcp->outgoing_buffer);
985
1477
  }
986
1478
  return false;
987
1479
  } else if (errno == EPIPE) {
@@ -1028,24 +1520,37 @@ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error) {
1028
1520
  if (error != GRPC_ERROR_NONE) {
1029
1521
  cb = tcp->write_cb;
1030
1522
  tcp->write_cb = nullptr;
1031
- cb->cb(cb->cb_arg, error);
1523
+ if (tcp->current_zerocopy_send != nullptr) {
1524
+ UnrefMaybePutZerocopySendRecord(tcp, tcp->current_zerocopy_send, 0,
1525
+ "handle_write_err");
1526
+ tcp->current_zerocopy_send = nullptr;
1527
+ }
1528
+ grpc_core::Closure::Run(DEBUG_LOCATION, cb, GRPC_ERROR_REF(error));
1032
1529
  TCP_UNREF(tcp, "write");
1033
1530
  return;
1034
1531
  }
1035
1532
 
1036
- if (!tcp_flush(tcp, &error)) {
1533
+ bool flush_result =
1534
+ tcp->current_zerocopy_send != nullptr
1535
+ ? tcp_flush_zerocopy(tcp, tcp->current_zerocopy_send, &error)
1536
+ : tcp_flush(tcp, &error);
1537
+ if (!flush_result) {
1037
1538
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1038
1539
  gpr_log(GPR_INFO, "write: delayed");
1039
1540
  }
1040
1541
  notify_on_write(tcp);
1542
+ // tcp_flush does not populate error if it has returned false.
1543
+ GPR_DEBUG_ASSERT(error == GRPC_ERROR_NONE);
1041
1544
  } else {
1042
1545
  cb = tcp->write_cb;
1043
1546
  tcp->write_cb = nullptr;
1547
+ tcp->current_zerocopy_send = nullptr;
1044
1548
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1045
1549
  const char* str = grpc_error_string(error);
1046
1550
  gpr_log(GPR_INFO, "write: %s", str);
1047
1551
  }
1048
- GRPC_CLOSURE_SCHED(cb, error);
1552
+ // No need to take a ref on error since tcp_flush provides a ref.
1553
+ grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
1049
1554
  TCP_UNREF(tcp, "write");
1050
1555
  }
1051
1556
  }
@@ -1055,12 +1560,13 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1055
1560
  GPR_TIMER_SCOPE("tcp_write", 0);
1056
1561
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1057
1562
  grpc_error* error = GRPC_ERROR_NONE;
1563
+ TcpZerocopySendRecord* zerocopy_send_record = nullptr;
1058
1564
 
1059
1565
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1060
1566
  size_t i;
1061
1567
 
1062
1568
  for (i = 0; i < buf->count; i++) {
1063
- gpr_log(GPR_INFO, "WRITE %p (peer=%s)", tcp, tcp->peer_string);
1569
+ gpr_log(GPR_INFO, "WRITE %p (peer=%s)", tcp, tcp->peer_string.c_str());
1064
1570
  if (gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
1065
1571
  char* data =
1066
1572
  grpc_dump_slice(buf->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
@@ -1071,26 +1577,38 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1071
1577
  }
1072
1578
 
1073
1579
  GPR_ASSERT(tcp->write_cb == nullptr);
1580
+ GPR_DEBUG_ASSERT(tcp->current_zerocopy_send == nullptr);
1074
1581
 
1075
- tcp->outgoing_buffer_arg = arg;
1076
1582
  if (buf->length == 0) {
1077
- GRPC_CLOSURE_SCHED(
1078
- cb, grpc_fd_is_shutdown(tcp->em_fd)
1079
- ? tcp_annotate_error(
1080
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("EOF"), tcp)
1081
- : GRPC_ERROR_NONE);
1583
+ grpc_core::Closure::Run(
1584
+ DEBUG_LOCATION, cb,
1585
+ grpc_fd_is_shutdown(tcp->em_fd)
1586
+ ? tcp_annotate_error(GRPC_ERROR_CREATE_FROM_STATIC_STRING("EOF"),
1587
+ tcp)
1588
+ : GRPC_ERROR_NONE);
1082
1589
  tcp_shutdown_buffer_list(tcp);
1083
1590
  return;
1084
1591
  }
1085
- tcp->outgoing_buffer = buf;
1086
- tcp->outgoing_byte_idx = 0;
1592
+
1593
+ zerocopy_send_record = tcp_get_send_zerocopy_record(tcp, buf);
1594
+ if (zerocopy_send_record == nullptr) {
1595
+ // Either not enough bytes, or couldn't allocate a zerocopy context.
1596
+ tcp->outgoing_buffer = buf;
1597
+ tcp->outgoing_byte_idx = 0;
1598
+ }
1599
+ tcp->outgoing_buffer_arg = arg;
1087
1600
  if (arg) {
1088
1601
  GPR_ASSERT(grpc_event_engine_can_track_errors());
1089
1602
  }
1090
1603
 
1091
- if (!tcp_flush(tcp, &error)) {
1604
+ bool flush_result =
1605
+ zerocopy_send_record != nullptr
1606
+ ? tcp_flush_zerocopy(tcp, zerocopy_send_record, &error)
1607
+ : tcp_flush(tcp, &error);
1608
+ if (!flush_result) {
1092
1609
  TCP_REF(tcp, "write");
1093
1610
  tcp->write_cb = cb;
1611
+ tcp->current_zerocopy_send = zerocopy_send_record;
1094
1612
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1095
1613
  gpr_log(GPR_INFO, "write: delayed");
1096
1614
  }
@@ -1100,7 +1618,7 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1100
1618
  const char* str = grpc_error_string(error);
1101
1619
  gpr_log(GPR_INFO, "write: %s", str);
1102
1620
  }
1103
- GRPC_CLOSURE_SCHED(cb, error);
1621
+ grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
1104
1622
  }
1105
1623
  }
1106
1624
 
@@ -1118,12 +1636,18 @@ static void tcp_add_to_pollset_set(grpc_endpoint* ep,
1118
1636
  static void tcp_delete_from_pollset_set(grpc_endpoint* ep,
1119
1637
  grpc_pollset_set* pollset_set) {
1120
1638
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1639
+ ZerocopyDisableAndWaitForRemaining(tcp);
1121
1640
  grpc_pollset_set_del_fd(pollset_set, tcp->em_fd);
1122
1641
  }
1123
1642
 
1124
- static char* tcp_get_peer(grpc_endpoint* ep) {
1643
+ static absl::string_view tcp_get_peer(grpc_endpoint* ep) {
1644
+ grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1645
+ return tcp->peer_string;
1646
+ }
1647
+
1648
+ static absl::string_view tcp_get_local_address(grpc_endpoint* ep) {
1125
1649
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1126
- return gpr_strdup(tcp->peer_string);
1650
+ return tcp->local_address;
1127
1651
  }
1128
1652
 
1129
1653
  static int tcp_get_fd(grpc_endpoint* ep) {
@@ -1161,6 +1685,7 @@ static const grpc_endpoint_vtable vtable = {tcp_read,
1161
1685
  tcp_destroy,
1162
1686
  tcp_get_resource_user,
1163
1687
  tcp_get_peer,
1688
+ tcp_get_local_address,
1164
1689
  tcp_get_fd,
1165
1690
  tcp_can_track_err};
1166
1691
 
@@ -1169,9 +1694,15 @@ static const grpc_endpoint_vtable vtable = {tcp_read,
1169
1694
  grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1170
1695
  const grpc_channel_args* channel_args,
1171
1696
  const char* peer_string) {
1697
+ static constexpr bool kZerocpTxEnabledDefault = false;
1172
1698
  int tcp_read_chunk_size = GRPC_TCP_DEFAULT_READ_SLICE_SIZE;
1173
1699
  int tcp_max_read_chunk_size = 4 * 1024 * 1024;
1174
1700
  int tcp_min_read_chunk_size = 256;
1701
+ bool tcp_tx_zerocopy_enabled = kZerocpTxEnabledDefault;
1702
+ int tcp_tx_zerocopy_send_bytes_thresh =
1703
+ grpc_core::TcpZerocopySendCtx::kDefaultSendBytesThreshold;
1704
+ int tcp_tx_zerocopy_max_simult_sends =
1705
+ grpc_core::TcpZerocopySendCtx::kDefaultMaxSends;
1175
1706
  grpc_resource_quota* resource_quota = grpc_resource_quota_create(nullptr);
1176
1707
  if (channel_args != nullptr) {
1177
1708
  for (size_t i = 0; i < channel_args->num_args; i++) {
@@ -1196,6 +1727,23 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1196
1727
  resource_quota =
1197
1728
  grpc_resource_quota_ref_internal(static_cast<grpc_resource_quota*>(
1198
1729
  channel_args->args[i].value.pointer.p));
1730
+ } else if (0 == strcmp(channel_args->args[i].key,
1731
+ GRPC_ARG_TCP_TX_ZEROCOPY_ENABLED)) {
1732
+ tcp_tx_zerocopy_enabled = grpc_channel_arg_get_bool(
1733
+ &channel_args->args[i], kZerocpTxEnabledDefault);
1734
+ } else if (0 == strcmp(channel_args->args[i].key,
1735
+ GRPC_ARG_TCP_TX_ZEROCOPY_SEND_BYTES_THRESHOLD)) {
1736
+ grpc_integer_options options = {
1737
+ grpc_core::TcpZerocopySendCtx::kDefaultSendBytesThreshold, 0,
1738
+ INT_MAX};
1739
+ tcp_tx_zerocopy_send_bytes_thresh =
1740
+ grpc_channel_arg_get_integer(&channel_args->args[i], options);
1741
+ } else if (0 == strcmp(channel_args->args[i].key,
1742
+ GRPC_ARG_TCP_TX_ZEROCOPY_MAX_SIMULT_SENDS)) {
1743
+ grpc_integer_options options = {
1744
+ grpc_core::TcpZerocopySendCtx::kDefaultMaxSends, 0, INT_MAX};
1745
+ tcp_tx_zerocopy_max_simult_sends =
1746
+ grpc_channel_arg_get_integer(&channel_args->args[i], options);
1199
1747
  }
1200
1748
  }
1201
1749
  }
@@ -1206,12 +1754,24 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1206
1754
  tcp_read_chunk_size = GPR_CLAMP(tcp_read_chunk_size, tcp_min_read_chunk_size,
1207
1755
  tcp_max_read_chunk_size);
1208
1756
 
1209
- grpc_tcp* tcp = static_cast<grpc_tcp*>(gpr_malloc(sizeof(grpc_tcp)));
1757
+ grpc_tcp* tcp = new grpc_tcp(tcp_tx_zerocopy_max_simult_sends,
1758
+ tcp_tx_zerocopy_send_bytes_thresh);
1210
1759
  tcp->base.vtable = &vtable;
1211
- tcp->peer_string = gpr_strdup(peer_string);
1760
+ tcp->peer_string = peer_string;
1212
1761
  tcp->fd = grpc_fd_wrapped_fd(em_fd);
1762
+ grpc_resolved_address resolved_local_addr;
1763
+ memset(&resolved_local_addr, 0, sizeof(resolved_local_addr));
1764
+ resolved_local_addr.len = sizeof(resolved_local_addr.addr);
1765
+ if (getsockname(tcp->fd,
1766
+ reinterpret_cast<sockaddr*>(resolved_local_addr.addr),
1767
+ &resolved_local_addr.len) < 0) {
1768
+ tcp->local_address = "";
1769
+ } else {
1770
+ tcp->local_address = grpc_sockaddr_to_uri(&resolved_local_addr);
1771
+ }
1213
1772
  tcp->read_cb = nullptr;
1214
1773
  tcp->write_cb = nullptr;
1774
+ tcp->current_zerocopy_send = nullptr;
1215
1775
  tcp->release_fd_cb = nullptr;
1216
1776
  tcp->release_fd = nullptr;
1217
1777
  tcp->incoming_buffer = nullptr;
@@ -1225,8 +1785,20 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1225
1785
  tcp->socket_ts_enabled = false;
1226
1786
  tcp->ts_capable = true;
1227
1787
  tcp->outgoing_buffer_arg = nullptr;
1788
+ if (tcp_tx_zerocopy_enabled && !tcp->tcp_zerocopy_send_ctx.memory_limited()) {
1789
+ #ifdef GRPC_LINUX_ERRQUEUE
1790
+ const int enable = 1;
1791
+ auto err =
1792
+ setsockopt(tcp->fd, SOL_SOCKET, SO_ZEROCOPY, &enable, sizeof(enable));
1793
+ if (err == 0) {
1794
+ tcp->tcp_zerocopy_send_ctx.set_enabled(true);
1795
+ } else {
1796
+ gpr_log(GPR_ERROR, "Failed to set zerocopy options on the socket.");
1797
+ }
1798
+ #endif
1799
+ }
1228
1800
  /* paired with unref in grpc_tcp_destroy */
1229
- gpr_ref_init(&tcp->refcount, 1);
1801
+ new (&tcp->refcount) grpc_core::RefCount(1, &grpc_tcp_trace);
1230
1802
  gpr_atm_no_barrier_store(&tcp->shutdown_count, 0);
1231
1803
  tcp->em_fd = em_fd;
1232
1804
  grpc_slice_buffer_init(&tcp->last_read_buffer);
@@ -1291,6 +1863,7 @@ void grpc_tcp_destroy_and_release_fd(grpc_endpoint* ep, int* fd,
1291
1863
  grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
1292
1864
  if (grpc_event_engine_can_track_errors()) {
1293
1865
  /* Stop errors notification. */
1866
+ ZerocopyDisableAndWaitForRemaining(tcp);
1294
1867
  gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
1295
1868
  grpc_fd_set_error(tcp->em_fd);
1296
1869
  }