grpc 1.15.0 → 1.30.0

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

Potentially problematic release.


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

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