grpc 1.30.2

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 (1758) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +1 -0
  3. data/Makefile +20074 -0
  4. data/etc/roots.pem +4644 -0
  5. data/include/grpc/byte_buffer.h +27 -0
  6. data/include/grpc/byte_buffer_reader.h +26 -0
  7. data/include/grpc/census.h +40 -0
  8. data/include/grpc/compression.h +75 -0
  9. data/include/grpc/fork.h +26 -0
  10. data/include/grpc/grpc.h +540 -0
  11. data/include/grpc/grpc_cronet.h +38 -0
  12. data/include/grpc/grpc_posix.h +59 -0
  13. data/include/grpc/grpc_security.h +1019 -0
  14. data/include/grpc/grpc_security_constants.h +146 -0
  15. data/include/grpc/impl/codegen/atm.h +95 -0
  16. data/include/grpc/impl/codegen/atm_gcc_atomic.h +91 -0
  17. data/include/grpc/impl/codegen/atm_gcc_sync.h +85 -0
  18. data/include/grpc/impl/codegen/atm_windows.h +128 -0
  19. data/include/grpc/impl/codegen/byte_buffer.h +101 -0
  20. data/include/grpc/impl/codegen/byte_buffer_reader.h +42 -0
  21. data/include/grpc/impl/codegen/compression_types.h +108 -0
  22. data/include/grpc/impl/codegen/connectivity_state.h +44 -0
  23. data/include/grpc/impl/codegen/fork.h +48 -0
  24. data/include/grpc/impl/codegen/gpr_slice.h +69 -0
  25. data/include/grpc/impl/codegen/gpr_types.h +59 -0
  26. data/include/grpc/impl/codegen/grpc_types.h +785 -0
  27. data/include/grpc/impl/codegen/log.h +112 -0
  28. data/include/grpc/impl/codegen/port_platform.h +720 -0
  29. data/include/grpc/impl/codegen/propagation_bits.h +52 -0
  30. data/include/grpc/impl/codegen/slice.h +127 -0
  31. data/include/grpc/impl/codegen/status.h +154 -0
  32. data/include/grpc/impl/codegen/sync.h +65 -0
  33. data/include/grpc/impl/codegen/sync_abseil.h +36 -0
  34. data/include/grpc/impl/codegen/sync_custom.h +38 -0
  35. data/include/grpc/impl/codegen/sync_generic.h +48 -0
  36. data/include/grpc/impl/codegen/sync_posix.h +52 -0
  37. data/include/grpc/impl/codegen/sync_windows.h +36 -0
  38. data/include/grpc/load_reporting.h +48 -0
  39. data/include/grpc/module.modulemap +64 -0
  40. data/include/grpc/slice.h +172 -0
  41. data/include/grpc/slice_buffer.h +84 -0
  42. data/include/grpc/status.h +26 -0
  43. data/include/grpc/support/alloc.h +52 -0
  44. data/include/grpc/support/atm.h +26 -0
  45. data/include/grpc/support/atm_gcc_atomic.h +26 -0
  46. data/include/grpc/support/atm_gcc_sync.h +26 -0
  47. data/include/grpc/support/atm_windows.h +26 -0
  48. data/include/grpc/support/cpu.h +44 -0
  49. data/include/grpc/support/log.h +26 -0
  50. data/include/grpc/support/log_windows.h +38 -0
  51. data/include/grpc/support/port_platform.h +24 -0
  52. data/include/grpc/support/string_util.h +51 -0
  53. data/include/grpc/support/sync.h +282 -0
  54. data/include/grpc/support/sync_abseil.h +26 -0
  55. data/include/grpc/support/sync_custom.h +26 -0
  56. data/include/grpc/support/sync_generic.h +26 -0
  57. data/include/grpc/support/sync_posix.h +26 -0
  58. data/include/grpc/support/sync_windows.h +26 -0
  59. data/include/grpc/support/thd_id.h +44 -0
  60. data/include/grpc/support/time.h +92 -0
  61. data/include/grpc/support/workaround_list.h +31 -0
  62. data/src/core/ext/filters/census/grpc_context.cc +38 -0
  63. data/src/core/ext/filters/client_channel/backend_metric.cc +81 -0
  64. data/src/core/ext/filters/client_channel/backend_metric.h +36 -0
  65. data/src/core/ext/filters/client_channel/backup_poller.cc +181 -0
  66. data/src/core/ext/filters/client_channel/backup_poller.h +41 -0
  67. data/src/core/ext/filters/client_channel/channel_connectivity.cc +264 -0
  68. data/src/core/ext/filters/client_channel/client_channel.cc +4059 -0
  69. data/src/core/ext/filters/client_channel/client_channel.h +82 -0
  70. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +95 -0
  71. data/src/core/ext/filters/client_channel/client_channel_channelz.h +78 -0
  72. data/src/core/ext/filters/client_channel/client_channel_factory.cc +55 -0
  73. data/src/core/ext/filters/client_channel/client_channel_factory.h +47 -0
  74. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +70 -0
  75. data/src/core/ext/filters/client_channel/connector.h +79 -0
  76. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
  77. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
  78. data/src/core/ext/filters/client_channel/health/health_check_client.cc +606 -0
  79. data/src/core/ext/filters/client_channel/health/health_check_client.h +175 -0
  80. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +389 -0
  81. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +34 -0
  82. data/src/core/ext/filters/client_channel/http_proxy.cc +216 -0
  83. data/src/core/ext/filters/client_channel/http_proxy.h +28 -0
  84. data/src/core/ext/filters/client_channel/lb_policy.cc +138 -0
  85. data/src/core/ext/filters/client_channel/lb_policy.h +421 -0
  86. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  87. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  88. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +297 -0
  89. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  90. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +157 -0
  91. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +29 -0
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1754 -0
  93. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +43 -0
  94. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  95. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  96. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +45 -0
  97. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +121 -0
  98. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +91 -0
  99. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +75 -0
  100. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +193 -0
  101. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +74 -0
  102. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +509 -0
  103. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  104. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +504 -0
  105. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +448 -0
  106. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  107. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +417 -0
  108. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  109. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +32 -0
  111. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  112. data/src/core/ext/filters/client_channel/lb_policy_factory.h +47 -0
  113. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +182 -0
  114. data/src/core/ext/filters/client_channel/lb_policy_registry.h +65 -0
  115. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
  116. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +57 -0
  117. data/src/core/ext/filters/client_channel/parse_address.cc +238 -0
  118. data/src/core/ext/filters/client_channel/parse_address.h +53 -0
  119. data/src/core/ext/filters/client_channel/proxy_mapper.h +54 -0
  120. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +89 -0
  121. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +50 -0
  122. data/src/core/ext/filters/client_channel/resolver.cc +85 -0
  123. data/src/core/ext/filters/client_channel/resolver.h +144 -0
  124. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +535 -0
  125. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +484 -0
  126. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +104 -0
  127. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +177 -0
  128. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +107 -0
  129. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +897 -0
  130. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +819 -0
  131. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +97 -0
  132. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +68 -0
  133. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +38 -0
  134. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +29 -0
  135. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +34 -0
  136. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
  137. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +29 -0
  138. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +318 -0
  139. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +383 -0
  140. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +93 -0
  141. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +188 -0
  142. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +184 -0
  143. data/src/core/ext/filters/client_channel/resolver_factory.h +73 -0
  144. data/src/core/ext/filters/client_channel/resolver_registry.cc +197 -0
  145. data/src/core/ext/filters/client_channel/resolver_registry.h +89 -0
  146. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +443 -0
  147. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +127 -0
  148. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +348 -0
  149. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +123 -0
  150. data/src/core/ext/filters/client_channel/retry_throttle.cc +191 -0
  151. data/src/core/ext/filters/client_channel/retry_throttle.h +77 -0
  152. data/src/core/ext/filters/client_channel/server_address.cc +48 -0
  153. data/src/core/ext/filters/client_channel/server_address.h +90 -0
  154. data/src/core/ext/filters/client_channel/service_config.cc +221 -0
  155. data/src/core/ext/filters/client_channel/service_config.h +123 -0
  156. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  157. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  158. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  159. data/src/core/ext/filters/client_channel/subchannel.cc +1127 -0
  160. data/src/core/ext/filters/client_channel/subchannel.h +427 -0
  161. data/src/core/ext/filters/client_channel/subchannel_interface.h +94 -0
  162. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
  163. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +91 -0
  164. data/src/core/ext/filters/client_channel/xds/xds_api.cc +1906 -0
  165. data/src/core/ext/filters/client_channel/xds/xds_api.h +280 -0
  166. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +342 -0
  167. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +88 -0
  168. data/src/core/ext/filters/client_channel/xds/xds_channel.h +46 -0
  169. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  170. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +106 -0
  171. data/src/core/ext/filters/client_channel/xds/xds_client.cc +2367 -0
  172. data/src/core/ext/filters/client_channel/xds/xds_client.h +309 -0
  173. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +115 -0
  174. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +211 -0
  175. data/src/core/ext/filters/client_idle/client_idle_filter.cc +440 -0
  176. data/src/core/ext/filters/deadline/deadline_filter.cc +386 -0
  177. data/src/core/ext/filters/deadline/deadline_filter.h +90 -0
  178. data/src/core/ext/filters/http/client/http_client_filter.cc +596 -0
  179. data/src/core/ext/filters/http/client/http_client_filter.h +31 -0
  180. data/src/core/ext/filters/http/client_authority_filter.cc +159 -0
  181. data/src/core/ext/filters/http/client_authority_filter.h +34 -0
  182. data/src/core/ext/filters/http/http_filters_plugin.cc +104 -0
  183. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +546 -0
  184. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +53 -0
  185. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  186. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  187. data/src/core/ext/filters/http/server/http_server_filter.cc +528 -0
  188. data/src/core/ext/filters/http/server/http_server_filter.h +29 -0
  189. data/src/core/ext/filters/max_age/max_age_filter.cc +556 -0
  190. data/src/core/ext/filters/max_age/max_age_filter.h +26 -0
  191. data/src/core/ext/filters/message_size/message_size_filter.cc +423 -0
  192. data/src/core/ext/filters/message_size/message_size_filter.h +59 -0
  193. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +210 -0
  194. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +27 -0
  195. data/src/core/ext/filters/workarounds/workaround_utils.cc +53 -0
  196. data/src/core/ext/filters/workarounds/workaround_utils.h +39 -0
  197. data/src/core/ext/transport/chttp2/alpn/alpn.cc +44 -0
  198. data/src/core/ext/transport/chttp2/alpn/alpn.h +36 -0
  199. data/src/core/ext/transport/chttp2/client/authority.cc +42 -0
  200. data/src/core/ext/transport/chttp2/client/authority.h +36 -0
  201. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +206 -0
  202. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +58 -0
  203. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +112 -0
  204. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +79 -0
  205. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +225 -0
  206. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +451 -0
  207. data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
  208. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +45 -0
  209. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +75 -0
  210. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +86 -0
  211. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +250 -0
  212. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +56 -0
  213. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +230 -0
  214. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +42 -0
  215. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +37 -0
  216. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3346 -0
  217. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +52 -0
  218. data/src/core/ext/transport/chttp2/transport/context_list.cc +69 -0
  219. data/src/core/ext/transport/chttp2/transport/context_list.h +53 -0
  220. data/src/core/ext/transport/chttp2/transport/flow_control.cc +408 -0
  221. data/src/core/ext/transport/chttp2/transport/flow_control.h +474 -0
  222. data/src/core/ext/transport/chttp2/transport/frame.h +47 -0
  223. data/src/core/ext/transport/chttp2/transport/frame_data.cc +307 -0
  224. data/src/core/ext/transport/chttp2/transport/frame_data.h +82 -0
  225. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +187 -0
  226. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +62 -0
  227. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +133 -0
  228. data/src/core/ext/transport/chttp2/transport/frame_ping.h +44 -0
  229. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +122 -0
  230. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +50 -0
  231. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +242 -0
  232. data/src/core/ext/transport/chttp2/transport/frame_settings.h +60 -0
  233. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +123 -0
  234. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +44 -0
  235. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +900 -0
  236. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +107 -0
  237. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1761 -0
  238. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +117 -0
  239. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +246 -0
  240. data/src/core/ext/transport/chttp2/transport/hpack_table.h +148 -0
  241. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +62 -0
  242. data/src/core/ext/transport/chttp2/transport/http2_settings.h +61 -0
  243. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +92 -0
  244. data/src/core/ext/transport/chttp2/transport/huffsyms.h +32 -0
  245. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +66 -0
  246. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +58 -0
  247. data/src/core/ext/transport/chttp2/transport/internal.h +864 -0
  248. data/src/core/ext/transport/chttp2/transport/parsing.cc +803 -0
  249. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +216 -0
  250. data/src/core/ext/transport/chttp2/transport/stream_map.cc +177 -0
  251. data/src/core/ext/transport/chttp2/transport/stream_map.h +67 -0
  252. data/src/core/ext/transport/chttp2/transport/varint.cc +56 -0
  253. data/src/core/ext/transport/chttp2/transport/varint.h +60 -0
  254. data/src/core/ext/transport/chttp2/transport/writing.cc +706 -0
  255. data/src/core/ext/transport/inproc/inproc_plugin.cc +28 -0
  256. data/src/core/ext/transport/inproc/inproc_transport.cc +1296 -0
  257. data/src/core/ext/transport/inproc/inproc_transport.h +35 -0
  258. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +17 -0
  259. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +30 -0
  260. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +27 -0
  261. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -0
  262. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +21 -0
  263. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +35 -0
  264. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  265. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  266. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  267. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  268. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  269. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  270. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +28 -0
  271. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +53 -0
  272. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +403 -0
  273. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +1447 -0
  274. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +74 -0
  275. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +218 -0
  276. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +35 -0
  277. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +69 -0
  278. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +55 -0
  279. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +305 -0
  280. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +112 -0
  281. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +328 -0
  282. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  283. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  284. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +313 -0
  285. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +897 -0
  286. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +96 -0
  287. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +322 -0
  288. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  289. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  290. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +197 -0
  291. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +642 -0
  292. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +172 -0
  293. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +673 -0
  294. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +36 -0
  295. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +80 -0
  296. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +152 -0
  297. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +518 -0
  298. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  299. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  300. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +129 -0
  301. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +392 -0
  302. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +31 -0
  303. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +53 -0
  304. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +92 -0
  305. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +240 -0
  306. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +18 -0
  307. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +33 -0
  308. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +91 -0
  309. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +266 -0
  310. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +112 -0
  311. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +324 -0
  312. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +31 -0
  313. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +53 -0
  314. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +109 -0
  315. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +399 -0
  316. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +18 -0
  317. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +33 -0
  318. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +145 -0
  319. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +527 -0
  320. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +43 -0
  321. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +112 -0
  322. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +30 -0
  323. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +53 -0
  324. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +63 -0
  325. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +199 -0
  326. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +18 -0
  327. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +33 -0
  328. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +815 -0
  329. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +3032 -0
  330. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +59 -0
  331. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +134 -0
  332. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +28 -0
  333. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +53 -0
  334. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +228 -0
  335. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +725 -0
  336. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +316 -0
  337. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +1132 -0
  338. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +33 -0
  339. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +65 -0
  340. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  341. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  342. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +24 -0
  343. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +50 -0
  344. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +54 -0
  345. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +134 -0
  346. data/src/core/ext/upb-generated/envoy/type/http.upb.c +17 -0
  347. data/src/core/ext/upb-generated/envoy/type/http.upb.h +36 -0
  348. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +63 -0
  349. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +144 -0
  350. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +53 -0
  351. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +133 -0
  352. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +88 -0
  353. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +258 -0
  354. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +39 -0
  355. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +87 -0
  356. data/src/core/ext/upb-generated/envoy/type/range.upb.c +50 -0
  357. data/src/core/ext/upb-generated/envoy/type/range.upb.h +112 -0
  358. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +29 -0
  359. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +62 -0
  360. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +89 -0
  361. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +249 -0
  362. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +17 -0
  363. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +30 -0
  364. data/src/core/ext/upb-generated/google/api/annotations.upb.c +18 -0
  365. data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -0
  366. data/src/core/ext/upb-generated/google/api/http.upb.c +66 -0
  367. data/src/core/ext/upb-generated/google/api/http.upb.h +190 -0
  368. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +27 -0
  369. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +58 -0
  370. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +486 -0
  371. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1696 -0
  372. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +27 -0
  373. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +58 -0
  374. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +22 -0
  375. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +50 -0
  376. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +79 -0
  377. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +215 -0
  378. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +27 -0
  379. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +58 -0
  380. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +106 -0
  381. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +238 -0
  382. data/src/core/ext/upb-generated/google/rpc/status.upb.c +33 -0
  383. data/src/core/ext/upb-generated/google/rpc/status.upb.h +74 -0
  384. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +49 -0
  385. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +126 -0
  386. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +212 -0
  387. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +693 -0
  388. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +42 -0
  389. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +109 -0
  390. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +36 -0
  391. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +84 -0
  392. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +141 -0
  393. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +393 -0
  394. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +48 -0
  395. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +104 -0
  396. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +17 -0
  397. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +30 -0
  398. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  399. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  400. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +58 -0
  401. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +144 -0
  402. data/src/core/ext/upb-generated/validate/validate.upb.c +448 -0
  403. data/src/core/ext/upb-generated/validate/validate.upb.h +2073 -0
  404. data/src/core/lib/avl/avl.cc +306 -0
  405. data/src/core/lib/avl/avl.h +94 -0
  406. data/src/core/lib/backoff/backoff.cc +78 -0
  407. data/src/core/lib/backoff/backoff.h +89 -0
  408. data/src/core/lib/channel/channel_args.cc +380 -0
  409. data/src/core/lib/channel/channel_args.h +135 -0
  410. data/src/core/lib/channel/channel_stack.cc +252 -0
  411. data/src/core/lib/channel/channel_stack.h +304 -0
  412. data/src/core/lib/channel/channel_stack_builder.cc +323 -0
  413. data/src/core/lib/channel/channel_stack_builder.h +166 -0
  414. data/src/core/lib/channel/channel_trace.cc +194 -0
  415. data/src/core/lib/channel/channel_trace.h +134 -0
  416. data/src/core/lib/channel/channelz.cc +543 -0
  417. data/src/core/lib/channel/channelz.h +334 -0
  418. data/src/core/lib/channel/channelz_registry.cc +267 -0
  419. data/src/core/lib/channel/channelz_registry.h +97 -0
  420. data/src/core/lib/channel/connected_channel.cc +246 -0
  421. data/src/core/lib/channel/connected_channel.h +34 -0
  422. data/src/core/lib/channel/context.h +49 -0
  423. data/src/core/lib/channel/handshaker.cc +262 -0
  424. data/src/core/lib/channel/handshaker.h +179 -0
  425. data/src/core/lib/channel/handshaker_factory.h +42 -0
  426. data/src/core/lib/channel/handshaker_registry.cc +105 -0
  427. data/src/core/lib/channel/handshaker_registry.h +54 -0
  428. data/src/core/lib/channel/status_util.cc +99 -0
  429. data/src/core/lib/channel/status_util.h +58 -0
  430. data/src/core/lib/compression/algorithm_metadata.h +61 -0
  431. data/src/core/lib/compression/compression.cc +179 -0
  432. data/src/core/lib/compression/compression_args.cc +134 -0
  433. data/src/core/lib/compression/compression_args.h +56 -0
  434. data/src/core/lib/compression/compression_internal.cc +280 -0
  435. data/src/core/lib/compression/compression_internal.h +96 -0
  436. data/src/core/lib/compression/message_compress.cc +192 -0
  437. data/src/core/lib/compression/message_compress.h +40 -0
  438. data/src/core/lib/compression/stream_compression.cc +80 -0
  439. data/src/core/lib/compression/stream_compression.h +116 -0
  440. data/src/core/lib/compression/stream_compression_gzip.cc +230 -0
  441. data/src/core/lib/compression/stream_compression_gzip.h +28 -0
  442. data/src/core/lib/compression/stream_compression_identity.cc +92 -0
  443. data/src/core/lib/compression/stream_compression_identity.h +29 -0
  444. data/src/core/lib/debug/stats.cc +172 -0
  445. data/src/core/lib/debug/stats.h +70 -0
  446. data/src/core/lib/debug/stats_data.cc +687 -0
  447. data/src/core/lib/debug/stats_data.h +555 -0
  448. data/src/core/lib/debug/trace.cc +154 -0
  449. data/src/core/lib/debug/trace.h +131 -0
  450. data/src/core/lib/gpr/alloc.cc +74 -0
  451. data/src/core/lib/gpr/alloc.h +28 -0
  452. data/src/core/lib/gpr/arena.h +47 -0
  453. data/src/core/lib/gpr/atm.cc +35 -0
  454. data/src/core/lib/gpr/cpu_iphone.cc +36 -0
  455. data/src/core/lib/gpr/cpu_linux.cc +82 -0
  456. data/src/core/lib/gpr/cpu_posix.cc +83 -0
  457. data/src/core/lib/gpr/cpu_windows.cc +33 -0
  458. data/src/core/lib/gpr/env.h +40 -0
  459. data/src/core/lib/gpr/env_linux.cc +76 -0
  460. data/src/core/lib/gpr/env_posix.cc +47 -0
  461. data/src/core/lib/gpr/env_windows.cc +74 -0
  462. data/src/core/lib/gpr/log.cc +98 -0
  463. data/src/core/lib/gpr/log_android.cc +76 -0
  464. data/src/core/lib/gpr/log_linux.cc +97 -0
  465. data/src/core/lib/gpr/log_posix.cc +95 -0
  466. data/src/core/lib/gpr/log_windows.cc +102 -0
  467. data/src/core/lib/gpr/murmur_hash.cc +80 -0
  468. data/src/core/lib/gpr/murmur_hash.h +29 -0
  469. data/src/core/lib/gpr/spinlock.h +45 -0
  470. data/src/core/lib/gpr/string.cc +341 -0
  471. data/src/core/lib/gpr/string.h +111 -0
  472. data/src/core/lib/gpr/string_posix.cc +72 -0
  473. data/src/core/lib/gpr/string_util_windows.cc +82 -0
  474. data/src/core/lib/gpr/string_windows.cc +69 -0
  475. data/src/core/lib/gpr/string_windows.h +32 -0
  476. data/src/core/lib/gpr/sync.cc +124 -0
  477. data/src/core/lib/gpr/sync_abseil.cc +116 -0
  478. data/src/core/lib/gpr/sync_posix.cc +176 -0
  479. data/src/core/lib/gpr/sync_windows.cc +120 -0
  480. data/src/core/lib/gpr/time.cc +263 -0
  481. data/src/core/lib/gpr/time_posix.cc +186 -0
  482. data/src/core/lib/gpr/time_precise.cc +165 -0
  483. data/src/core/lib/gpr/time_precise.h +66 -0
  484. data/src/core/lib/gpr/time_windows.cc +98 -0
  485. data/src/core/lib/gpr/tls.h +68 -0
  486. data/src/core/lib/gpr/tls_gcc.h +52 -0
  487. data/src/core/lib/gpr/tls_msvc.h +52 -0
  488. data/src/core/lib/gpr/tls_pthread.cc +30 -0
  489. data/src/core/lib/gpr/tls_pthread.h +56 -0
  490. data/src/core/lib/gpr/tmpfile.h +32 -0
  491. data/src/core/lib/gpr/tmpfile_msys.cc +58 -0
  492. data/src/core/lib/gpr/tmpfile_posix.cc +70 -0
  493. data/src/core/lib/gpr/tmpfile_windows.cc +69 -0
  494. data/src/core/lib/gpr/useful.h +65 -0
  495. data/src/core/lib/gpr/wrap_memcpy.cc +42 -0
  496. data/src/core/lib/gprpp/arena.cc +103 -0
  497. data/src/core/lib/gprpp/arena.h +120 -0
  498. data/src/core/lib/gprpp/atomic.h +104 -0
  499. data/src/core/lib/gprpp/debug_location.h +53 -0
  500. data/src/core/lib/gprpp/fork.cc +242 -0
  501. data/src/core/lib/gprpp/fork.h +103 -0
  502. data/src/core/lib/gprpp/global_config.h +96 -0
  503. data/src/core/lib/gprpp/global_config_custom.h +29 -0
  504. data/src/core/lib/gprpp/global_config_env.cc +135 -0
  505. data/src/core/lib/gprpp/global_config_env.h +131 -0
  506. data/src/core/lib/gprpp/global_config_generic.h +44 -0
  507. data/src/core/lib/gprpp/host_port.cc +112 -0
  508. data/src/core/lib/gprpp/host_port.h +56 -0
  509. data/src/core/lib/gprpp/manual_constructor.h +213 -0
  510. data/src/core/lib/gprpp/map.h +53 -0
  511. data/src/core/lib/gprpp/memory.h +51 -0
  512. data/src/core/lib/gprpp/mpscq.cc +108 -0
  513. data/src/core/lib/gprpp/mpscq.h +98 -0
  514. data/src/core/lib/gprpp/orphanable.h +129 -0
  515. data/src/core/lib/gprpp/ref_counted.h +312 -0
  516. data/src/core/lib/gprpp/ref_counted_ptr.h +192 -0
  517. data/src/core/lib/gprpp/sync.h +135 -0
  518. data/src/core/lib/gprpp/thd.h +174 -0
  519. data/src/core/lib/gprpp/thd_posix.cc +204 -0
  520. data/src/core/lib/gprpp/thd_windows.cc +176 -0
  521. data/src/core/lib/http/format_request.cc +103 -0
  522. data/src/core/lib/http/format_request.h +34 -0
  523. data/src/core/lib/http/httpcli.cc +303 -0
  524. data/src/core/lib/http/httpcli.h +126 -0
  525. data/src/core/lib/http/httpcli_security_connector.cc +214 -0
  526. data/src/core/lib/http/parser.cc +372 -0
  527. data/src/core/lib/http/parser.h +113 -0
  528. data/src/core/lib/iomgr/block_annotate.h +57 -0
  529. data/src/core/lib/iomgr/buffer_list.cc +308 -0
  530. data/src/core/lib/iomgr/buffer_list.h +165 -0
  531. data/src/core/lib/iomgr/call_combiner.cc +256 -0
  532. data/src/core/lib/iomgr/call_combiner.h +217 -0
  533. data/src/core/lib/iomgr/cfstream_handle.cc +209 -0
  534. data/src/core/lib/iomgr/cfstream_handle.h +90 -0
  535. data/src/core/lib/iomgr/closure.h +255 -0
  536. data/src/core/lib/iomgr/combiner.cc +339 -0
  537. data/src/core/lib/iomgr/combiner.h +88 -0
  538. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  539. data/src/core/lib/iomgr/dynamic_annotations.h +67 -0
  540. data/src/core/lib/iomgr/endpoint.cc +67 -0
  541. data/src/core/lib/iomgr/endpoint.h +106 -0
  542. data/src/core/lib/iomgr/endpoint_cfstream.cc +376 -0
  543. data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
  544. data/src/core/lib/iomgr/endpoint_pair.h +33 -0
  545. data/src/core/lib/iomgr/endpoint_pair_posix.cc +73 -0
  546. data/src/core/lib/iomgr/endpoint_pair_uv.cc +40 -0
  547. data/src/core/lib/iomgr/endpoint_pair_windows.cc +87 -0
  548. data/src/core/lib/iomgr/error.cc +812 -0
  549. data/src/core/lib/iomgr/error.h +276 -0
  550. data/src/core/lib/iomgr/error_cfstream.cc +52 -0
  551. data/src/core/lib/iomgr/error_cfstream.h +31 -0
  552. data/src/core/lib/iomgr/error_internal.h +61 -0
  553. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  554. data/src/core/lib/iomgr/ev_apple.h +43 -0
  555. data/src/core/lib/iomgr/ev_epoll1_linux.cc +1365 -0
  556. data/src/core/lib/iomgr/ev_epoll1_linux.h +31 -0
  557. data/src/core/lib/iomgr/ev_epollex_linux.cc +1656 -0
  558. data/src/core/lib/iomgr/ev_epollex_linux.h +30 -0
  559. data/src/core/lib/iomgr/ev_poll_posix.cc +1427 -0
  560. data/src/core/lib/iomgr/ev_poll_posix.h +29 -0
  561. data/src/core/lib/iomgr/ev_posix.cc +417 -0
  562. data/src/core/lib/iomgr/ev_posix.h +207 -0
  563. data/src/core/lib/iomgr/ev_windows.cc +30 -0
  564. data/src/core/lib/iomgr/exec_ctx.cc +224 -0
  565. data/src/core/lib/iomgr/exec_ctx.h +380 -0
  566. data/src/core/lib/iomgr/executor.cc +469 -0
  567. data/src/core/lib/iomgr/executor.h +122 -0
  568. data/src/core/lib/iomgr/executor/mpmcqueue.cc +183 -0
  569. data/src/core/lib/iomgr/executor/mpmcqueue.h +175 -0
  570. data/src/core/lib/iomgr/executor/threadpool.cc +137 -0
  571. data/src/core/lib/iomgr/executor/threadpool.h +149 -0
  572. data/src/core/lib/iomgr/fork_posix.cc +119 -0
  573. data/src/core/lib/iomgr/fork_windows.cc +41 -0
  574. data/src/core/lib/iomgr/gethostname.h +26 -0
  575. data/src/core/lib/iomgr/gethostname_fallback.cc +30 -0
  576. data/src/core/lib/iomgr/gethostname_host_name_max.cc +40 -0
  577. data/src/core/lib/iomgr/gethostname_sysconf.cc +40 -0
  578. data/src/core/lib/iomgr/grpc_if_nametoindex.h +30 -0
  579. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
  580. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +38 -0
  581. data/src/core/lib/iomgr/internal_errqueue.cc +67 -0
  582. data/src/core/lib/iomgr/internal_errqueue.h +191 -0
  583. data/src/core/lib/iomgr/iocp_windows.cc +157 -0
  584. data/src/core/lib/iomgr/iocp_windows.h +48 -0
  585. data/src/core/lib/iomgr/iomgr.cc +194 -0
  586. data/src/core/lib/iomgr/iomgr.h +60 -0
  587. data/src/core/lib/iomgr/iomgr_custom.cc +79 -0
  588. data/src/core/lib/iomgr/iomgr_custom.h +49 -0
  589. data/src/core/lib/iomgr/iomgr_internal.cc +57 -0
  590. data/src/core/lib/iomgr/iomgr_internal.h +73 -0
  591. data/src/core/lib/iomgr/iomgr_posix.cc +89 -0
  592. data/src/core/lib/iomgr/iomgr_posix.h +26 -0
  593. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +171 -0
  594. data/src/core/lib/iomgr/iomgr_uv.cc +43 -0
  595. data/src/core/lib/iomgr/iomgr_windows.cc +106 -0
  596. data/src/core/lib/iomgr/is_epollexclusive_available.cc +105 -0
  597. data/src/core/lib/iomgr/is_epollexclusive_available.h +36 -0
  598. data/src/core/lib/iomgr/load_file.cc +81 -0
  599. data/src/core/lib/iomgr/load_file.h +35 -0
  600. data/src/core/lib/iomgr/lockfree_event.cc +255 -0
  601. data/src/core/lib/iomgr/lockfree_event.h +72 -0
  602. data/src/core/lib/iomgr/nameser.h +106 -0
  603. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +87 -0
  604. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +88 -0
  605. data/src/core/lib/iomgr/polling_entity.cc +96 -0
  606. data/src/core/lib/iomgr/polling_entity.h +68 -0
  607. data/src/core/lib/iomgr/pollset.cc +56 -0
  608. data/src/core/lib/iomgr/pollset.h +99 -0
  609. data/src/core/lib/iomgr/pollset_custom.cc +106 -0
  610. data/src/core/lib/iomgr/pollset_custom.h +35 -0
  611. data/src/core/lib/iomgr/pollset_set.cc +55 -0
  612. data/src/core/lib/iomgr/pollset_set.h +55 -0
  613. data/src/core/lib/iomgr/pollset_set_custom.cc +48 -0
  614. data/src/core/lib/iomgr/pollset_set_custom.h +26 -0
  615. data/src/core/lib/iomgr/pollset_set_windows.cc +51 -0
  616. data/src/core/lib/iomgr/pollset_set_windows.h +26 -0
  617. data/src/core/lib/iomgr/pollset_uv.cc +93 -0
  618. data/src/core/lib/iomgr/pollset_uv.h +32 -0
  619. data/src/core/lib/iomgr/pollset_windows.cc +243 -0
  620. data/src/core/lib/iomgr/pollset_windows.h +70 -0
  621. data/src/core/lib/iomgr/port.h +244 -0
  622. data/src/core/lib/iomgr/python_util.h +46 -0
  623. data/src/core/lib/iomgr/resolve_address.cc +50 -0
  624. data/src/core/lib/iomgr/resolve_address.h +81 -0
  625. data/src/core/lib/iomgr/resolve_address_custom.cc +173 -0
  626. data/src/core/lib/iomgr/resolve_address_custom.h +45 -0
  627. data/src/core/lib/iomgr/resolve_address_posix.cc +178 -0
  628. data/src/core/lib/iomgr/resolve_address_windows.cc +154 -0
  629. data/src/core/lib/iomgr/resource_quota.cc +1013 -0
  630. data/src/core/lib/iomgr/resource_quota.h +177 -0
  631. data/src/core/lib/iomgr/sockaddr.h +32 -0
  632. data/src/core/lib/iomgr/sockaddr_custom.h +54 -0
  633. data/src/core/lib/iomgr/sockaddr_posix.h +55 -0
  634. data/src/core/lib/iomgr/sockaddr_utils.cc +293 -0
  635. data/src/core/lib/iomgr/sockaddr_utils.h +79 -0
  636. data/src/core/lib/iomgr/sockaddr_windows.h +55 -0
  637. data/src/core/lib/iomgr/socket_factory_posix.cc +94 -0
  638. data/src/core/lib/iomgr/socket_factory_posix.h +68 -0
  639. data/src/core/lib/iomgr/socket_mutator.cc +83 -0
  640. data/src/core/lib/iomgr/socket_mutator.h +60 -0
  641. data/src/core/lib/iomgr/socket_utils.h +47 -0
  642. data/src/core/lib/iomgr/socket_utils_common_posix.cc +473 -0
  643. data/src/core/lib/iomgr/socket_utils_linux.cc +42 -0
  644. data/src/core/lib/iomgr/socket_utils_posix.cc +58 -0
  645. data/src/core/lib/iomgr/socket_utils_posix.h +163 -0
  646. data/src/core/lib/iomgr/socket_utils_uv.cc +49 -0
  647. data/src/core/lib/iomgr/socket_utils_windows.cc +47 -0
  648. data/src/core/lib/iomgr/socket_windows.cc +203 -0
  649. data/src/core/lib/iomgr/socket_windows.h +127 -0
  650. data/src/core/lib/iomgr/sys_epoll_wrapper.h +30 -0
  651. data/src/core/lib/iomgr/tcp_client.cc +36 -0
  652. data/src/core/lib/iomgr/tcp_client.h +52 -0
  653. data/src/core/lib/iomgr/tcp_client_cfstream.cc +215 -0
  654. data/src/core/lib/iomgr/tcp_client_custom.cc +163 -0
  655. data/src/core/lib/iomgr/tcp_client_posix.cc +360 -0
  656. data/src/core/lib/iomgr/tcp_client_posix.h +68 -0
  657. data/src/core/lib/iomgr/tcp_client_windows.cc +232 -0
  658. data/src/core/lib/iomgr/tcp_custom.cc +370 -0
  659. data/src/core/lib/iomgr/tcp_custom.h +84 -0
  660. data/src/core/lib/iomgr/tcp_posix.cc +1855 -0
  661. data/src/core/lib/iomgr/tcp_posix.h +60 -0
  662. data/src/core/lib/iomgr/tcp_server.cc +78 -0
  663. data/src/core/lib/iomgr/tcp_server.h +143 -0
  664. data/src/core/lib/iomgr/tcp_server_custom.cc +485 -0
  665. data/src/core/lib/iomgr/tcp_server_posix.cc +638 -0
  666. data/src/core/lib/iomgr/tcp_server_utils_posix.h +125 -0
  667. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +223 -0
  668. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +181 -0
  669. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +36 -0
  670. data/src/core/lib/iomgr/tcp_server_windows.cc +564 -0
  671. data/src/core/lib/iomgr/tcp_uv.cc +419 -0
  672. data/src/core/lib/iomgr/tcp_windows.cc +533 -0
  673. data/src/core/lib/iomgr/tcp_windows.h +53 -0
  674. data/src/core/lib/iomgr/time_averaged_stats.cc +64 -0
  675. data/src/core/lib/iomgr/time_averaged_stats.h +72 -0
  676. data/src/core/lib/iomgr/timer.cc +45 -0
  677. data/src/core/lib/iomgr/timer.h +127 -0
  678. data/src/core/lib/iomgr/timer_custom.cc +95 -0
  679. data/src/core/lib/iomgr/timer_custom.h +43 -0
  680. data/src/core/lib/iomgr/timer_generic.cc +747 -0
  681. data/src/core/lib/iomgr/timer_generic.h +39 -0
  682. data/src/core/lib/iomgr/timer_heap.cc +135 -0
  683. data/src/core/lib/iomgr/timer_heap.h +43 -0
  684. data/src/core/lib/iomgr/timer_manager.cc +363 -0
  685. data/src/core/lib/iomgr/timer_manager.h +41 -0
  686. data/src/core/lib/iomgr/timer_uv.cc +66 -0
  687. data/src/core/lib/iomgr/udp_server.cc +747 -0
  688. data/src/core/lib/iomgr/udp_server.h +101 -0
  689. data/src/core/lib/iomgr/unix_sockets_posix.cc +104 -0
  690. data/src/core/lib/iomgr/unix_sockets_posix.h +43 -0
  691. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +49 -0
  692. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +82 -0
  693. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +38 -0
  694. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +100 -0
  695. data/src/core/lib/iomgr/wakeup_fd_pipe.h +28 -0
  696. data/src/core/lib/iomgr/wakeup_fd_posix.cc +69 -0
  697. data/src/core/lib/iomgr/wakeup_fd_posix.h +96 -0
  698. data/src/core/lib/iomgr/work_serializer.cc +155 -0
  699. data/src/core/lib/iomgr/work_serializer.h +65 -0
  700. data/src/core/lib/json/json.h +240 -0
  701. data/src/core/lib/json/json_reader.cc +855 -0
  702. data/src/core/lib/json/json_writer.cc +337 -0
  703. data/src/core/lib/profiling/basic_timers.cc +293 -0
  704. data/src/core/lib/profiling/stap_timers.cc +50 -0
  705. data/src/core/lib/profiling/timers.h +94 -0
  706. data/src/core/lib/security/context/security_context.cc +321 -0
  707. data/src/core/lib/security/context/security_context.h +150 -0
  708. data/src/core/lib/security/credentials/alts/alts_credentials.cc +110 -0
  709. data/src/core/lib/security/credentials/alts/alts_credentials.h +109 -0
  710. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +72 -0
  711. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +57 -0
  712. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +68 -0
  713. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +33 -0
  714. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +102 -0
  715. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +127 -0
  716. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +46 -0
  717. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +75 -0
  718. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +59 -0
  719. data/src/core/lib/security/credentials/composite/composite_credentials.cc +229 -0
  720. data/src/core/lib/security/credentials/composite/composite_credentials.h +106 -0
  721. data/src/core/lib/security/credentials/credentials.cc +162 -0
  722. data/src/core/lib/security/credentials/credentials.h +283 -0
  723. data/src/core/lib/security/credentials/credentials_metadata.cc +62 -0
  724. data/src/core/lib/security/credentials/fake/fake_credentials.cc +112 -0
  725. data/src/core/lib/security/credentials/fake/fake_credentials.h +87 -0
  726. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +41 -0
  727. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +383 -0
  728. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +87 -0
  729. data/src/core/lib/security/credentials/iam/iam_credentials.cc +80 -0
  730. data/src/core/lib/security/credentials/iam/iam_credentials.h +49 -0
  731. data/src/core/lib/security/credentials/jwt/json_token.cc +288 -0
  732. data/src/core/lib/security/credentials/jwt/json_token.h +75 -0
  733. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +172 -0
  734. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +80 -0
  735. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +925 -0
  736. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +122 -0
  737. data/src/core/lib/security/credentials/local/local_credentials.cc +64 -0
  738. data/src/core/lib/security/credentials/local/local_credentials.h +61 -0
  739. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +771 -0
  740. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +171 -0
  741. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +269 -0
  742. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +72 -0
  743. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +364 -0
  744. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +99 -0
  745. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +245 -0
  746. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +313 -0
  747. data/src/core/lib/security/credentials/tls/tls_credentials.cc +128 -0
  748. data/src/core/lib/security/credentials/tls/tls_credentials.h +62 -0
  749. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +301 -0
  750. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +76 -0
  751. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +324 -0
  752. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +45 -0
  753. data/src/core/lib/security/security_connector/load_system_roots.h +29 -0
  754. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +32 -0
  755. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +171 -0
  756. data/src/core/lib/security/security_connector/load_system_roots_linux.h +44 -0
  757. data/src/core/lib/security/security_connector/local/local_security_connector.cc +281 -0
  758. data/src/core/lib/security/security_connector/local/local_security_connector.h +59 -0
  759. data/src/core/lib/security/security_connector/security_connector.cc +129 -0
  760. data/src/core/lib/security/security_connector/security_connector.h +176 -0
  761. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +439 -0
  762. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +77 -0
  763. data/src/core/lib/security/security_connector/ssl_utils.cc +563 -0
  764. data/src/core/lib/security/security_connector/ssl_utils.h +184 -0
  765. data/src/core/lib/security/security_connector/ssl_utils_config.cc +32 -0
  766. data/src/core/lib/security/security_connector/ssl_utils_config.h +30 -0
  767. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +603 -0
  768. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +183 -0
  769. data/src/core/lib/security/transport/auth_filters.h +35 -0
  770. data/src/core/lib/security/transport/client_auth_filter.cc +466 -0
  771. data/src/core/lib/security/transport/secure_endpoint.cc +446 -0
  772. data/src/core/lib/security/transport/secure_endpoint.h +41 -0
  773. data/src/core/lib/security/transport/security_handshaker.cc +574 -0
  774. data/src/core/lib/security/transport/security_handshaker.h +45 -0
  775. data/src/core/lib/security/transport/server_auth_filter.cc +326 -0
  776. data/src/core/lib/security/transport/target_authority_table.cc +75 -0
  777. data/src/core/lib/security/transport/target_authority_table.h +40 -0
  778. data/src/core/lib/security/transport/tsi_error.cc +29 -0
  779. data/src/core/lib/security/transport/tsi_error.h +29 -0
  780. data/src/core/lib/security/util/json_util.cc +73 -0
  781. data/src/core/lib/security/util/json_util.h +44 -0
  782. data/src/core/lib/slice/b64.cc +239 -0
  783. data/src/core/lib/slice/b64.h +50 -0
  784. data/src/core/lib/slice/percent_encoding.cc +169 -0
  785. data/src/core/lib/slice/percent_encoding.h +65 -0
  786. data/src/core/lib/slice/slice.cc +559 -0
  787. data/src/core/lib/slice/slice_buffer.cc +413 -0
  788. data/src/core/lib/slice/slice_hash_table.h +199 -0
  789. data/src/core/lib/slice/slice_intern.cc +375 -0
  790. data/src/core/lib/slice/slice_internal.h +364 -0
  791. data/src/core/lib/slice/slice_string_helpers.cc +127 -0
  792. data/src/core/lib/slice/slice_string_helpers.h +49 -0
  793. data/src/core/lib/slice/slice_utils.h +200 -0
  794. data/src/core/lib/slice/slice_weak_hash_table.h +102 -0
  795. data/src/core/lib/surface/api_trace.cc +24 -0
  796. data/src/core/lib/surface/api_trace.h +52 -0
  797. data/src/core/lib/surface/byte_buffer.cc +92 -0
  798. data/src/core/lib/surface/byte_buffer_reader.cc +101 -0
  799. data/src/core/lib/surface/call.cc +2044 -0
  800. data/src/core/lib/surface/call.h +125 -0
  801. data/src/core/lib/surface/call_details.cc +41 -0
  802. data/src/core/lib/surface/call_log_batch.cc +111 -0
  803. data/src/core/lib/surface/call_test_only.h +43 -0
  804. data/src/core/lib/surface/channel.cc +543 -0
  805. data/src/core/lib/surface/channel.h +158 -0
  806. data/src/core/lib/surface/channel_init.cc +109 -0
  807. data/src/core/lib/surface/channel_init.h +78 -0
  808. data/src/core/lib/surface/channel_ping.cc +64 -0
  809. data/src/core/lib/surface/channel_stack_type.cc +58 -0
  810. data/src/core/lib/surface/channel_stack_type.h +47 -0
  811. data/src/core/lib/surface/completion_queue.cc +1438 -0
  812. data/src/core/lib/surface/completion_queue.h +97 -0
  813. data/src/core/lib/surface/completion_queue_factory.cc +88 -0
  814. data/src/core/lib/surface/completion_queue_factory.h +38 -0
  815. data/src/core/lib/surface/event_string.cc +61 -0
  816. data/src/core/lib/surface/event_string.h +31 -0
  817. data/src/core/lib/surface/init.cc +250 -0
  818. data/src/core/lib/surface/init.h +27 -0
  819. data/src/core/lib/surface/init_secure.cc +81 -0
  820. data/src/core/lib/surface/lame_client.cc +191 -0
  821. data/src/core/lib/surface/lame_client.h +28 -0
  822. data/src/core/lib/surface/metadata_array.cc +36 -0
  823. data/src/core/lib/surface/server.cc +1800 -0
  824. data/src/core/lib/surface/server.h +99 -0
  825. data/src/core/lib/surface/validate_metadata.cc +105 -0
  826. data/src/core/lib/surface/validate_metadata.h +41 -0
  827. data/src/core/lib/surface/version.cc +28 -0
  828. data/src/core/lib/transport/bdp_estimator.cc +87 -0
  829. data/src/core/lib/transport/bdp_estimator.h +94 -0
  830. data/src/core/lib/transport/byte_stream.cc +158 -0
  831. data/src/core/lib/transport/byte_stream.h +165 -0
  832. data/src/core/lib/transport/connectivity_state.cc +180 -0
  833. data/src/core/lib/transport/connectivity_state.h +131 -0
  834. data/src/core/lib/transport/error_utils.cc +141 -0
  835. data/src/core/lib/transport/error_utils.h +46 -0
  836. data/src/core/lib/transport/http2_errors.h +41 -0
  837. data/src/core/lib/transport/metadata.cc +679 -0
  838. data/src/core/lib/transport/metadata.h +446 -0
  839. data/src/core/lib/transport/metadata_batch.cc +392 -0
  840. data/src/core/lib/transport/metadata_batch.h +191 -0
  841. data/src/core/lib/transport/pid_controller.cc +51 -0
  842. data/src/core/lib/transport/pid_controller.h +116 -0
  843. data/src/core/lib/transport/static_metadata.cc +1230 -0
  844. data/src/core/lib/transport/static_metadata.h +597 -0
  845. data/src/core/lib/transport/status_conversion.cc +92 -0
  846. data/src/core/lib/transport/status_conversion.h +38 -0
  847. data/src/core/lib/transport/status_metadata.cc +61 -0
  848. data/src/core/lib/transport/status_metadata.h +48 -0
  849. data/src/core/lib/transport/timeout_encoding.cc +151 -0
  850. data/src/core/lib/transport/timeout_encoding.h +38 -0
  851. data/src/core/lib/transport/transport.cc +259 -0
  852. data/src/core/lib/transport/transport.h +456 -0
  853. data/src/core/lib/transport/transport_impl.h +71 -0
  854. data/src/core/lib/transport/transport_op_string.cc +169 -0
  855. data/src/core/lib/uri/uri_parser.cc +314 -0
  856. data/src/core/lib/uri/uri_parser.h +49 -0
  857. data/src/core/plugin_registry/grpc_plugin_registry.cc +121 -0
  858. data/src/core/tsi/alts/crypt/aes_gcm.cc +687 -0
  859. data/src/core/tsi/alts/crypt/gsec.cc +189 -0
  860. data/src/core/tsi/alts/crypt/gsec.h +454 -0
  861. data/src/core/tsi/alts/frame_protector/alts_counter.cc +118 -0
  862. data/src/core/tsi/alts/frame_protector/alts_counter.h +98 -0
  863. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +66 -0
  864. data/src/core/tsi/alts/frame_protector/alts_crypter.h +255 -0
  865. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +407 -0
  866. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +55 -0
  867. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +114 -0
  868. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +114 -0
  869. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +105 -0
  870. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +103 -0
  871. data/src/core/tsi/alts/frame_protector/frame_handler.cc +218 -0
  872. data/src/core/tsi/alts/frame_protector/frame_handler.h +236 -0
  873. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +899 -0
  874. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +161 -0
  875. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +83 -0
  876. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +73 -0
  877. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +674 -0
  878. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +104 -0
  879. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +88 -0
  880. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +64 -0
  881. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +53 -0
  882. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +223 -0
  883. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +171 -0
  884. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +226 -0
  885. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +54 -0
  886. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +144 -0
  887. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +49 -0
  888. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +91 -0
  889. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +174 -0
  890. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +99 -0
  891. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +476 -0
  892. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +199 -0
  893. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +307 -0
  894. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +57 -0
  895. data/src/core/tsi/fake_transport_security.cc +789 -0
  896. data/src/core/tsi/fake_transport_security.h +47 -0
  897. data/src/core/tsi/local_transport_security.cc +211 -0
  898. data/src/core/tsi/local_transport_security.h +51 -0
  899. data/src/core/tsi/ssl/session_cache/ssl_session.h +71 -0
  900. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +57 -0
  901. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +214 -0
  902. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +90 -0
  903. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +75 -0
  904. data/src/core/tsi/ssl_transport_security.cc +2124 -0
  905. data/src/core/tsi/ssl_transport_security.h +353 -0
  906. data/src/core/tsi/ssl_types.h +42 -0
  907. data/src/core/tsi/transport_security.cc +370 -0
  908. data/src/core/tsi/transport_security.h +127 -0
  909. data/src/core/tsi/transport_security_grpc.cc +73 -0
  910. data/src/core/tsi/transport_security_grpc.h +79 -0
  911. data/src/core/tsi/transport_security_interface.h +476 -0
  912. data/src/ruby/bin/math_client.rb +140 -0
  913. data/src/ruby/bin/math_pb.rb +34 -0
  914. data/src/ruby/bin/math_server.rb +191 -0
  915. data/src/ruby/bin/math_services_pb.rb +51 -0
  916. data/src/ruby/bin/noproto_client.rb +93 -0
  917. data/src/ruby/bin/noproto_server.rb +97 -0
  918. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  919. data/src/ruby/ext/grpc/ext-export.gcc +6 -0
  920. data/src/ruby/ext/grpc/extconf.rb +107 -0
  921. data/src/ruby/ext/grpc/rb_byte_buffer.c +64 -0
  922. data/src/ruby/ext/grpc/rb_byte_buffer.h +35 -0
  923. data/src/ruby/ext/grpc/rb_call.c +1050 -0
  924. data/src/ruby/ext/grpc/rb_call.h +53 -0
  925. data/src/ruby/ext/grpc/rb_call_credentials.c +297 -0
  926. data/src/ruby/ext/grpc/rb_call_credentials.h +31 -0
  927. data/src/ruby/ext/grpc/rb_channel.c +835 -0
  928. data/src/ruby/ext/grpc/rb_channel.h +34 -0
  929. data/src/ruby/ext/grpc/rb_channel_args.c +155 -0
  930. data/src/ruby/ext/grpc/rb_channel_args.h +38 -0
  931. data/src/ruby/ext/grpc/rb_channel_credentials.c +267 -0
  932. data/src/ruby/ext/grpc/rb_channel_credentials.h +32 -0
  933. data/src/ruby/ext/grpc/rb_completion_queue.c +100 -0
  934. data/src/ruby/ext/grpc/rb_completion_queue.h +36 -0
  935. data/src/ruby/ext/grpc/rb_compression_options.c +470 -0
  936. data/src/ruby/ext/grpc/rb_compression_options.h +29 -0
  937. data/src/ruby/ext/grpc/rb_enable_cpp.cc +22 -0
  938. data/src/ruby/ext/grpc/rb_event_thread.c +143 -0
  939. data/src/ruby/ext/grpc/rb_event_thread.h +21 -0
  940. data/src/ruby/ext/grpc/rb_grpc.c +328 -0
  941. data/src/ruby/ext/grpc/rb_grpc.h +76 -0
  942. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +573 -0
  943. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +865 -0
  944. data/src/ruby/ext/grpc/rb_loader.c +57 -0
  945. data/src/ruby/ext/grpc/rb_loader.h +25 -0
  946. data/src/ruby/ext/grpc/rb_server.c +372 -0
  947. data/src/ruby/ext/grpc/rb_server.h +32 -0
  948. data/src/ruby/ext/grpc/rb_server_credentials.c +243 -0
  949. data/src/ruby/ext/grpc/rb_server_credentials.h +32 -0
  950. data/src/ruby/lib/grpc.rb +37 -0
  951. data/src/ruby/lib/grpc/core/status_codes.rb +135 -0
  952. data/src/ruby/lib/grpc/core/time_consts.rb +56 -0
  953. data/src/ruby/lib/grpc/errors.rb +277 -0
  954. data/src/ruby/lib/grpc/generic/active_call.rb +669 -0
  955. data/src/ruby/lib/grpc/generic/bidi_call.rb +233 -0
  956. data/src/ruby/lib/grpc/generic/client_stub.rb +501 -0
  957. data/src/ruby/lib/grpc/generic/interceptor_registry.rb +53 -0
  958. data/src/ruby/lib/grpc/generic/interceptors.rb +186 -0
  959. data/src/ruby/lib/grpc/generic/rpc_desc.rb +204 -0
  960. data/src/ruby/lib/grpc/generic/rpc_server.rb +551 -0
  961. data/src/ruby/lib/grpc/generic/service.rb +211 -0
  962. data/src/ruby/lib/grpc/google_rpc_status_utils.rb +40 -0
  963. data/src/ruby/lib/grpc/grpc.rb +24 -0
  964. data/src/ruby/lib/grpc/logconfig.rb +44 -0
  965. data/src/ruby/lib/grpc/notifier.rb +45 -0
  966. data/src/ruby/lib/grpc/structs.rb +15 -0
  967. data/src/ruby/lib/grpc/version.rb +18 -0
  968. data/src/ruby/pb/README.md +42 -0
  969. data/src/ruby/pb/generate_proto_ruby.sh +51 -0
  970. data/src/ruby/pb/grpc/health/checker.rb +75 -0
  971. data/src/ruby/pb/grpc/health/v1/health_pb.rb +31 -0
  972. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +62 -0
  973. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +44 -0
  974. data/src/ruby/pb/grpc/testing/metrics_pb.rb +28 -0
  975. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +49 -0
  976. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +17 -0
  977. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +105 -0
  978. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +16 -0
  979. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +118 -0
  980. data/src/ruby/spec/call_credentials_spec.rb +42 -0
  981. data/src/ruby/spec/call_spec.rb +180 -0
  982. data/src/ruby/spec/channel_connection_spec.rb +126 -0
  983. data/src/ruby/spec/channel_credentials_spec.rb +82 -0
  984. data/src/ruby/spec/channel_spec.rb +234 -0
  985. data/src/ruby/spec/client_auth_spec.rb +126 -0
  986. data/src/ruby/spec/client_server_spec.rb +664 -0
  987. data/src/ruby/spec/compression_options_spec.rb +149 -0
  988. data/src/ruby/spec/debug_message_spec.rb +134 -0
  989. data/src/ruby/spec/error_sanity_spec.rb +49 -0
  990. data/src/ruby/spec/errors_spec.rb +142 -0
  991. data/src/ruby/spec/generic/active_call_spec.rb +672 -0
  992. data/src/ruby/spec/generic/client_interceptors_spec.rb +153 -0
  993. data/src/ruby/spec/generic/client_stub_spec.rb +1083 -0
  994. data/src/ruby/spec/generic/interceptor_registry_spec.rb +65 -0
  995. data/src/ruby/spec/generic/rpc_desc_spec.rb +374 -0
  996. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +127 -0
  997. data/src/ruby/spec/generic/rpc_server_spec.rb +748 -0
  998. data/src/ruby/spec/generic/server_interceptors_spec.rb +218 -0
  999. data/src/ruby/spec/generic/service_spec.rb +263 -0
  1000. data/src/ruby/spec/google_rpc_status_utils_spec.rb +282 -0
  1001. data/src/ruby/spec/pb/codegen/grpc/testing/package_options.proto +28 -0
  1002. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto +22 -0
  1003. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  1004. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +41 -0
  1005. data/src/ruby/spec/pb/codegen/package_option_spec.rb +82 -0
  1006. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +57 -0
  1007. data/src/ruby/spec/pb/health/checker_spec.rb +236 -0
  1008. data/src/ruby/spec/server_credentials_spec.rb +79 -0
  1009. data/src/ruby/spec/server_spec.rb +209 -0
  1010. data/src/ruby/spec/spec_helper.rb +61 -0
  1011. data/src/ruby/spec/support/helpers.rb +107 -0
  1012. data/src/ruby/spec/support/services.rb +160 -0
  1013. data/src/ruby/spec/testdata/README +1 -0
  1014. data/src/ruby/spec/testdata/ca.pem +20 -0
  1015. data/src/ruby/spec/testdata/client.key +28 -0
  1016. data/src/ruby/spec/testdata/client.pem +20 -0
  1017. data/src/ruby/spec/testdata/server1.key +28 -0
  1018. data/src/ruby/spec/testdata/server1.pem +22 -0
  1019. data/src/ruby/spec/time_consts_spec.rb +74 -0
  1020. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +159 -0
  1021. data/third_party/abseil-cpp/absl/base/attributes.h +621 -0
  1022. data/third_party/abseil-cpp/absl/base/call_once.h +226 -0
  1023. data/third_party/abseil-cpp/absl/base/casts.h +184 -0
  1024. data/third_party/abseil-cpp/absl/base/config.h +671 -0
  1025. data/third_party/abseil-cpp/absl/base/const_init.h +76 -0
  1026. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +129 -0
  1027. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +389 -0
  1028. data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
  1029. data/third_party/abseil-cpp/absl/base/internal/bits.h +218 -0
  1030. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +107 -0
  1031. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +94 -0
  1032. data/third_party/abseil-cpp/absl/base/internal/endian.h +266 -0
  1033. data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  1034. data/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
  1035. data/third_party/abseil-cpp/absl/base/internal/identity.h +37 -0
  1036. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +107 -0
  1037. data/third_party/abseil-cpp/absl/base/internal/invoke.h +187 -0
  1038. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +107 -0
  1039. data/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
  1040. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +240 -0
  1041. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +183 -0
  1042. data/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
  1043. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +233 -0
  1044. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +243 -0
  1045. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
  1046. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +66 -0
  1047. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
  1048. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
  1049. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +93 -0
  1050. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +37 -0
  1051. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +416 -0
  1052. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +66 -0
  1053. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +271 -0
  1054. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +152 -0
  1055. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +259 -0
  1056. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +108 -0
  1057. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
  1058. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +66 -0
  1059. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +158 -0
  1060. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +140 -0
  1061. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +124 -0
  1062. data/third_party/abseil-cpp/absl/base/log_severity.cc +27 -0
  1063. data/third_party/abseil-cpp/absl/base/log_severity.h +121 -0
  1064. data/third_party/abseil-cpp/absl/base/macros.h +220 -0
  1065. data/third_party/abseil-cpp/absl/base/optimization.h +181 -0
  1066. data/third_party/abseil-cpp/absl/base/options.h +211 -0
  1067. data/third_party/abseil-cpp/absl/base/policy_checks.h +111 -0
  1068. data/third_party/abseil-cpp/absl/base/port.h +26 -0
  1069. data/third_party/abseil-cpp/absl/base/thread_annotations.h +280 -0
  1070. data/third_party/abseil-cpp/absl/container/inlined_vector.h +848 -0
  1071. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +265 -0
  1072. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +892 -0
  1073. data/third_party/abseil-cpp/absl/memory/memory.h +695 -0
  1074. data/third_party/abseil-cpp/absl/meta/type_traits.h +759 -0
  1075. data/third_party/abseil-cpp/absl/numeric/int128.cc +404 -0
  1076. data/third_party/abseil-cpp/absl/numeric/int128.h +1091 -0
  1077. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +302 -0
  1078. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +308 -0
  1079. data/third_party/abseil-cpp/absl/strings/ascii.cc +200 -0
  1080. data/third_party/abseil-cpp/absl/strings/ascii.h +242 -0
  1081. data/third_party/abseil-cpp/absl/strings/charconv.cc +984 -0
  1082. data/third_party/abseil-cpp/absl/strings/charconv.h +119 -0
  1083. data/third_party/abseil-cpp/absl/strings/escaping.cc +949 -0
  1084. data/third_party/abseil-cpp/absl/strings/escaping.h +164 -0
  1085. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +156 -0
  1086. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +359 -0
  1087. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +423 -0
  1088. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
  1089. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
  1090. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +180 -0
  1091. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +58 -0
  1092. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +112 -0
  1093. data/third_party/abseil-cpp/absl/strings/internal/memutil.h +148 -0
  1094. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +36 -0
  1095. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +89 -0
  1096. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +73 -0
  1097. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
  1098. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +388 -0
  1099. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +432 -0
  1100. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +245 -0
  1101. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +209 -0
  1102. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +326 -0
  1103. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +51 -0
  1104. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +415 -0
  1105. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +493 -0
  1106. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +23 -0
  1107. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
  1108. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +104 -0
  1109. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +334 -0
  1110. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +333 -0
  1111. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +314 -0
  1112. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +455 -0
  1113. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +53 -0
  1114. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +50 -0
  1115. data/third_party/abseil-cpp/absl/strings/match.cc +40 -0
  1116. data/third_party/abseil-cpp/absl/strings/match.h +90 -0
  1117. data/third_party/abseil-cpp/absl/strings/numbers.cc +965 -0
  1118. data/third_party/abseil-cpp/absl/strings/numbers.h +266 -0
  1119. data/third_party/abseil-cpp/absl/strings/str_cat.cc +246 -0
  1120. data/third_party/abseil-cpp/absl/strings/str_cat.h +408 -0
  1121. data/third_party/abseil-cpp/absl/strings/str_format.h +537 -0
  1122. data/third_party/abseil-cpp/absl/strings/str_join.h +293 -0
  1123. data/third_party/abseil-cpp/absl/strings/str_replace.cc +82 -0
  1124. data/third_party/abseil-cpp/absl/strings/str_replace.h +219 -0
  1125. data/third_party/abseil-cpp/absl/strings/str_split.cc +139 -0
  1126. data/third_party/abseil-cpp/absl/strings/str_split.h +513 -0
  1127. data/third_party/abseil-cpp/absl/strings/string_view.cc +235 -0
  1128. data/third_party/abseil-cpp/absl/strings/string_view.h +622 -0
  1129. data/third_party/abseil-cpp/absl/strings/strip.h +91 -0
  1130. data/third_party/abseil-cpp/absl/strings/substitute.cc +171 -0
  1131. data/third_party/abseil-cpp/absl/strings/substitute.h +693 -0
  1132. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  1133. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  1134. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  1135. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  1136. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  1137. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  1138. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  1139. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  1140. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  1141. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  1142. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  1143. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  1144. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  1145. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  1146. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  1147. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  1148. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  1149. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  1150. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  1151. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  1152. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  1153. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  1154. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  1155. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  1156. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  1157. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  1158. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  1159. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  1160. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  1161. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  1162. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  1163. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +48 -0
  1164. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +78 -0
  1165. data/third_party/abseil-cpp/absl/types/internal/optional.h +396 -0
  1166. data/third_party/abseil-cpp/absl/types/internal/span.h +128 -0
  1167. data/third_party/abseil-cpp/absl/types/optional.h +776 -0
  1168. data/third_party/abseil-cpp/absl/types/span.h +713 -0
  1169. data/third_party/abseil-cpp/absl/utility/utility.h +350 -0
  1170. data/third_party/address_sorting/address_sorting.c +375 -0
  1171. data/third_party/address_sorting/address_sorting_internal.h +70 -0
  1172. data/third_party/address_sorting/address_sorting_posix.c +97 -0
  1173. data/third_party/address_sorting/address_sorting_windows.c +95 -0
  1174. data/third_party/address_sorting/include/address_sorting/address_sorting.h +113 -0
  1175. data/third_party/boringssl-with-bazel/err_data.c +1439 -0
  1176. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +271 -0
  1177. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +123 -0
  1178. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +93 -0
  1179. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +87 -0
  1180. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +195 -0
  1181. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +261 -0
  1182. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +88 -0
  1183. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +420 -0
  1184. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +305 -0
  1185. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +286 -0
  1186. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +77 -0
  1187. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +93 -0
  1188. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +313 -0
  1189. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +212 -0
  1190. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +151 -0
  1191. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +303 -0
  1192. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +236 -0
  1193. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +446 -0
  1194. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +104 -0
  1195. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +80 -0
  1196. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +105 -0
  1197. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +93 -0
  1198. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +97 -0
  1199. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +91 -0
  1200. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +1244 -0
  1201. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +664 -0
  1202. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +244 -0
  1203. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +387 -0
  1204. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +131 -0
  1205. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +280 -0
  1206. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +206 -0
  1207. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +466 -0
  1208. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +700 -0
  1209. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +330 -0
  1210. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +545 -0
  1211. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +279 -0
  1212. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +317 -0
  1213. data/third_party/boringssl-with-bazel/src/crypto/bio/hexdump.c +192 -0
  1214. data/third_party/boringssl-with-bazel/src/crypto/bio/internal.h +111 -0
  1215. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +488 -0
  1216. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +115 -0
  1217. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +206 -0
  1218. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +118 -0
  1219. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +64 -0
  1220. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +470 -0
  1221. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +172 -0
  1222. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +52 -0
  1223. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +265 -0
  1224. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +719 -0
  1225. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +688 -0
  1226. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +96 -0
  1227. data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +155 -0
  1228. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +184 -0
  1229. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +45 -0
  1230. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +143 -0
  1231. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +152 -0
  1232. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c +447 -0
  1233. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +283 -0
  1234. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +891 -0
  1235. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +418 -0
  1236. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +85 -0
  1237. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +462 -0
  1238. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +87 -0
  1239. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +688 -0
  1240. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +128 -0
  1241. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +491 -0
  1242. data/third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c +278 -0
  1243. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +810 -0
  1244. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +127 -0
  1245. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +31 -0
  1246. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-fuchsia.c +55 -0
  1247. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-linux.c +62 -0
  1248. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +220 -0
  1249. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.h +201 -0
  1250. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +38 -0
  1251. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +291 -0
  1252. data/third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c +38 -0
  1253. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +226 -0
  1254. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +2159 -0
  1255. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +7872 -0
  1256. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +146 -0
  1257. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +539 -0
  1258. data/third_party/boringssl-with-bazel/src/crypto/dh/check.c +217 -0
  1259. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +533 -0
  1260. data/third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.c +160 -0
  1261. data/third_party/boringssl-with-bazel/src/crypto/dh/params.c +93 -0
  1262. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +240 -0
  1263. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +980 -0
  1264. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +339 -0
  1265. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +574 -0
  1266. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +95 -0
  1267. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  1268. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  1269. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +124 -0
  1270. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +267 -0
  1271. data/third_party/boringssl-with-bazel/src/crypto/engine/engine.c +99 -0
  1272. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +850 -0
  1273. data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +58 -0
  1274. data/third_party/boringssl-with-bazel/src/crypto/evp/digestsign.c +231 -0
  1275. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +443 -0
  1276. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +388 -0
  1277. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +484 -0
  1278. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +269 -0
  1279. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +273 -0
  1280. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +286 -0
  1281. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +255 -0
  1282. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +104 -0
  1283. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +221 -0
  1284. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +648 -0
  1285. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +194 -0
  1286. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +110 -0
  1287. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +248 -0
  1288. data/third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c +146 -0
  1289. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +489 -0
  1290. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +213 -0
  1291. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +151 -0
  1292. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +261 -0
  1293. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
  1294. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
  1295. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +238 -0
  1296. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +236 -0
  1297. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +106 -0
  1298. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +263 -0
  1299. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/add.c +316 -0
  1300. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/asm/x86_64-gcc.c +541 -0
  1301. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +445 -0
  1302. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +230 -0
  1303. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +200 -0
  1304. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +236 -0
  1305. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +886 -0
  1306. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +87 -0
  1307. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1288 -0
  1308. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +378 -0
  1309. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  1310. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +711 -0
  1311. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +694 -0
  1312. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/jacobi.c +146 -0
  1313. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +502 -0
  1314. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +186 -0
  1315. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +749 -0
  1316. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +1068 -0
  1317. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +341 -0
  1318. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +226 -0
  1319. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +104 -0
  1320. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +364 -0
  1321. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +502 -0
  1322. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +284 -0
  1323. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +620 -0
  1324. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +1302 -0
  1325. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c +237 -0
  1326. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +128 -0
  1327. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +89 -0
  1328. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +785 -0
  1329. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +240 -0
  1330. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +271 -0
  1331. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +296 -0
  1332. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/internal.h +112 -0
  1333. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +268 -0
  1334. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +1252 -0
  1335. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +465 -0
  1336. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +524 -0
  1337. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +100 -0
  1338. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +775 -0
  1339. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +328 -0
  1340. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +1178 -0
  1341. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
  1342. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +632 -0
  1343. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h +153 -0
  1344. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  1345. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  1346. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
  1347. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +357 -0
  1348. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
  1349. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +255 -0
  1350. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +270 -0
  1351. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  1352. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +328 -0
  1353. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +32 -0
  1354. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +228 -0
  1355. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +29 -0
  1356. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +256 -0
  1357. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h +37 -0
  1358. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +301 -0
  1359. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +167 -0
  1360. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +202 -0
  1361. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +200 -0
  1362. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +729 -0
  1363. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
  1364. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +441 -0
  1365. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +96 -0
  1366. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +91 -0
  1367. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +202 -0
  1368. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  1369. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  1370. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  1371. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +163 -0
  1372. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +378 -0
  1373. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +391 -0
  1374. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +243 -0
  1375. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +127 -0
  1376. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +695 -0
  1377. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +898 -0
  1378. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +1358 -0
  1379. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +654 -0
  1380. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +53 -0
  1381. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +361 -0
  1382. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +371 -0
  1383. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +343 -0
  1384. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +544 -0
  1385. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +39 -0
  1386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +165 -0
  1387. data/third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf.c +112 -0
  1388. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +2100 -0
  1389. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +61 -0
  1390. data/third_party/boringssl-with-bazel/src/crypto/internal.h +834 -0
  1391. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +348 -0
  1392. data/third_party/boringssl-with-bazel/src/crypto/mem.c +359 -0
  1393. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +549 -0
  1394. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +11585 -0
  1395. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.c +122 -0
  1396. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +261 -0
  1397. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +360 -0
  1398. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +777 -0
  1399. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +87 -0
  1400. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +257 -0
  1401. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +218 -0
  1402. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +65 -0
  1403. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +65 -0
  1404. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +49 -0
  1405. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +159 -0
  1406. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +385 -0
  1407. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +131 -0
  1408. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +316 -0
  1409. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +530 -0
  1410. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1305 -0
  1411. data/third_party/boringssl-with-bazel/src/crypto/poly1305/internal.h +41 -0
  1412. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +318 -0
  1413. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +305 -0
  1414. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +856 -0
  1415. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +45 -0
  1416. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +220 -0
  1417. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +52 -0
  1418. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c +46 -0
  1419. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +30 -0
  1420. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +70 -0
  1421. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +69 -0
  1422. data/third_party/boringssl-with-bazel/src/crypto/rc4/rc4.c +98 -0
  1423. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +67 -0
  1424. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +53 -0
  1425. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +325 -0
  1426. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c +22 -0
  1427. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +82 -0
  1428. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +431 -0
  1429. data/third_party/boringssl-with-bazel/src/crypto/thread.c +110 -0
  1430. data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +59 -0
  1431. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +210 -0
  1432. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +260 -0
  1433. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  1434. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  1435. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  1436. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +96 -0
  1437. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +128 -0
  1438. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +653 -0
  1439. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +114 -0
  1440. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +153 -0
  1441. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +842 -0
  1442. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +458 -0
  1443. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +275 -0
  1444. data/third_party/boringssl-with-bazel/src/crypto/x509/charmap.h +15 -0
  1445. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +83 -0
  1446. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +66 -0
  1447. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +385 -0
  1448. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +125 -0
  1449. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +244 -0
  1450. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +544 -0
  1451. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +111 -0
  1452. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +71 -0
  1453. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +157 -0
  1454. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +381 -0
  1455. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +476 -0
  1456. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +106 -0
  1457. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +103 -0
  1458. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +206 -0
  1459. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +834 -0
  1460. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +198 -0
  1461. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +116 -0
  1462. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +341 -0
  1463. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +185 -0
  1464. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +326 -0
  1465. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +204 -0
  1466. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +278 -0
  1467. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +2487 -0
  1468. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +671 -0
  1469. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +210 -0
  1470. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +389 -0
  1471. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +81 -0
  1472. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +137 -0
  1473. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +151 -0
  1474. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +399 -0
  1475. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +111 -0
  1476. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +541 -0
  1477. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +75 -0
  1478. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +98 -0
  1479. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +554 -0
  1480. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +106 -0
  1481. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +368 -0
  1482. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +109 -0
  1483. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +69 -0
  1484. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +80 -0
  1485. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +69 -0
  1486. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +334 -0
  1487. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +198 -0
  1488. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +141 -0
  1489. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +56 -0
  1490. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +286 -0
  1491. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +130 -0
  1492. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +217 -0
  1493. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +155 -0
  1494. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +130 -0
  1495. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +189 -0
  1496. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +842 -0
  1497. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +207 -0
  1498. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +72 -0
  1499. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +629 -0
  1500. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +133 -0
  1501. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +141 -0
  1502. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +463 -0
  1503. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +503 -0
  1504. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +561 -0
  1505. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +100 -0
  1506. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +148 -0
  1507. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +246 -0
  1508. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +122 -0
  1509. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +218 -0
  1510. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +91 -0
  1511. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +371 -0
  1512. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +501 -0
  1513. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +68 -0
  1514. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +288 -0
  1515. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +57 -0
  1516. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +139 -0
  1517. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +110 -0
  1518. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +154 -0
  1519. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +229 -0
  1520. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +843 -0
  1521. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +155 -0
  1522. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +274 -0
  1523. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1395 -0
  1524. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +459 -0
  1525. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +195 -0
  1526. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +121 -0
  1527. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +911 -0
  1528. data/third_party/boringssl-with-bazel/src/include/openssl/asn1_mac.h +18 -0
  1529. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +892 -0
  1530. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +575 -0
  1531. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +190 -0
  1532. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +933 -0
  1533. data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +93 -0
  1534. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1057 -0
  1535. data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +137 -0
  1536. data/third_party/boringssl-with-bazel/src/include/openssl/buffer.h +18 -0
  1537. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +561 -0
  1538. data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +96 -0
  1539. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +41 -0
  1540. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +638 -0
  1541. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +91 -0
  1542. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +180 -0
  1543. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +212 -0
  1544. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +149 -0
  1545. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +201 -0
  1546. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +177 -0
  1547. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +319 -0
  1548. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +331 -0
  1549. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +457 -0
  1550. data/third_party/boringssl-with-bazel/src/include/openssl/dtls1.h +16 -0
  1551. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +18 -0
  1552. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +424 -0
  1553. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +372 -0
  1554. data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +118 -0
  1555. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +205 -0
  1556. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +109 -0
  1557. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +465 -0
  1558. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1050 -0
  1559. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +203 -0
  1560. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +64 -0
  1561. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +186 -0
  1562. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +100 -0
  1563. data/third_party/boringssl-with-bazel/src/include/openssl/is_boringssl.h +16 -0
  1564. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +282 -0
  1565. data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +108 -0
  1566. data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +109 -0
  1567. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +175 -0
  1568. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +4259 -0
  1569. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +236 -0
  1570. data/third_party/boringssl-with-bazel/src/include/openssl/obj_mac.h +18 -0
  1571. data/third_party/boringssl-with-bazel/src/include/openssl/objects.h +18 -0
  1572. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +67 -0
  1573. data/third_party/boringssl-with-bazel/src/include/openssl/opensslv.h +18 -0
  1574. data/third_party/boringssl-with-bazel/src/include/openssl/ossl_typ.h +18 -0
  1575. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +435 -0
  1576. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs12.h +18 -0
  1577. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +215 -0
  1578. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +269 -0
  1579. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +49 -0
  1580. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +102 -0
  1581. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +111 -0
  1582. data/third_party/boringssl-with-bazel/src/include/openssl/rc4.h +96 -0
  1583. data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +108 -0
  1584. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +818 -0
  1585. data/third_party/boringssl-with-bazel/src/include/openssl/safestack.h +16 -0
  1586. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +294 -0
  1587. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +37 -0
  1588. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +199 -0
  1589. data/third_party/boringssl-with-bazel/src/include/openssl/srtp.h +18 -0
  1590. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +5198 -0
  1591. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +333 -0
  1592. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +542 -0
  1593. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +191 -0
  1594. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +632 -0
  1595. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  1596. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +90 -0
  1597. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1207 -0
  1598. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +681 -0
  1599. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +831 -0
  1600. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +179 -0
  1601. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +837 -0
  1602. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +268 -0
  1603. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +273 -0
  1604. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +232 -0
  1605. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +200 -0
  1606. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +353 -0
  1607. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +675 -0
  1608. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +703 -0
  1609. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1890 -0
  1610. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1805 -0
  1611. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3572 -0
  1612. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +724 -0
  1613. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +221 -0
  1614. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +458 -0
  1615. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +432 -0
  1616. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +856 -0
  1617. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +306 -0
  1618. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +1019 -0
  1619. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +1718 -0
  1620. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +585 -0
  1621. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +397 -0
  1622. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +3015 -0
  1623. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +835 -0
  1624. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +1333 -0
  1625. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +230 -0
  1626. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +277 -0
  1627. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +394 -0
  1628. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +1358 -0
  1629. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +365 -0
  1630. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +3870 -0
  1631. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +689 -0
  1632. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1017 -0
  1633. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +513 -0
  1634. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1096 -0
  1635. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +317 -0
  1636. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +703 -0
  1637. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +981 -0
  1638. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +619 -0
  1639. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
  1640. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1226 -0
  1641. data/third_party/cares/ares_build.h +223 -0
  1642. data/third_party/cares/cares/ares.h +670 -0
  1643. data/third_party/cares/cares/ares__close_sockets.c +61 -0
  1644. data/third_party/cares/cares/ares__get_hostent.c +261 -0
  1645. data/third_party/cares/cares/ares__read_line.c +73 -0
  1646. data/third_party/cares/cares/ares__timeval.c +111 -0
  1647. data/third_party/cares/cares/ares_cancel.c +63 -0
  1648. data/third_party/cares/cares/ares_create_query.c +206 -0
  1649. data/third_party/cares/cares/ares_data.c +222 -0
  1650. data/third_party/cares/cares/ares_data.h +72 -0
  1651. data/third_party/cares/cares/ares_destroy.c +113 -0
  1652. data/third_party/cares/cares/ares_dns.h +103 -0
  1653. data/third_party/cares/cares/ares_expand_name.c +209 -0
  1654. data/third_party/cares/cares/ares_expand_string.c +70 -0
  1655. data/third_party/cares/cares/ares_fds.c +59 -0
  1656. data/third_party/cares/cares/ares_free_hostent.c +41 -0
  1657. data/third_party/cares/cares/ares_free_string.c +25 -0
  1658. data/third_party/cares/cares/ares_getenv.c +30 -0
  1659. data/third_party/cares/cares/ares_getenv.h +26 -0
  1660. data/third_party/cares/cares/ares_gethostbyaddr.c +294 -0
  1661. data/third_party/cares/cares/ares_gethostbyname.c +529 -0
  1662. data/third_party/cares/cares/ares_getnameinfo.c +453 -0
  1663. data/third_party/cares/cares/ares_getopt.c +122 -0
  1664. data/third_party/cares/cares/ares_getopt.h +53 -0
  1665. data/third_party/cares/cares/ares_getsock.c +66 -0
  1666. data/third_party/cares/cares/ares_inet_net_pton.h +25 -0
  1667. data/third_party/cares/cares/ares_init.c +2615 -0
  1668. data/third_party/cares/cares/ares_iphlpapi.h +221 -0
  1669. data/third_party/cares/cares/ares_ipv6.h +78 -0
  1670. data/third_party/cares/cares/ares_library_init.c +195 -0
  1671. data/third_party/cares/cares/ares_library_init.h +43 -0
  1672. data/third_party/cares/cares/ares_llist.c +63 -0
  1673. data/third_party/cares/cares/ares_llist.h +39 -0
  1674. data/third_party/cares/cares/ares_mkquery.c +24 -0
  1675. data/third_party/cares/cares/ares_nowarn.c +260 -0
  1676. data/third_party/cares/cares/ares_nowarn.h +61 -0
  1677. data/third_party/cares/cares/ares_options.c +406 -0
  1678. data/third_party/cares/cares/ares_parse_a_reply.c +264 -0
  1679. data/third_party/cares/cares/ares_parse_aaaa_reply.c +264 -0
  1680. data/third_party/cares/cares/ares_parse_mx_reply.c +170 -0
  1681. data/third_party/cares/cares/ares_parse_naptr_reply.c +194 -0
  1682. data/third_party/cares/cares/ares_parse_ns_reply.c +183 -0
  1683. data/third_party/cares/cares/ares_parse_ptr_reply.c +221 -0
  1684. data/third_party/cares/cares/ares_parse_soa_reply.c +133 -0
  1685. data/third_party/cares/cares/ares_parse_srv_reply.c +179 -0
  1686. data/third_party/cares/cares/ares_parse_txt_reply.c +220 -0
  1687. data/third_party/cares/cares/ares_platform.c +11042 -0
  1688. data/third_party/cares/cares/ares_platform.h +43 -0
  1689. data/third_party/cares/cares/ares_private.h +382 -0
  1690. data/third_party/cares/cares/ares_process.c +1473 -0
  1691. data/third_party/cares/cares/ares_query.c +186 -0
  1692. data/third_party/cares/cares/ares_rules.h +125 -0
  1693. data/third_party/cares/cares/ares_search.c +323 -0
  1694. data/third_party/cares/cares/ares_send.c +137 -0
  1695. data/third_party/cares/cares/ares_setup.h +217 -0
  1696. data/third_party/cares/cares/ares_strcasecmp.c +66 -0
  1697. data/third_party/cares/cares/ares_strcasecmp.h +30 -0
  1698. data/third_party/cares/cares/ares_strdup.c +49 -0
  1699. data/third_party/cares/cares/ares_strdup.h +24 -0
  1700. data/third_party/cares/cares/ares_strerror.c +56 -0
  1701. data/third_party/cares/cares/ares_strsplit.c +174 -0
  1702. data/third_party/cares/cares/ares_strsplit.h +43 -0
  1703. data/third_party/cares/cares/ares_timeout.c +88 -0
  1704. data/third_party/cares/cares/ares_version.c +11 -0
  1705. data/third_party/cares/cares/ares_version.h +24 -0
  1706. data/third_party/cares/cares/ares_writev.c +79 -0
  1707. data/third_party/cares/cares/bitncmp.c +59 -0
  1708. data/third_party/cares/cares/bitncmp.h +26 -0
  1709. data/third_party/cares/cares/config-win32.h +351 -0
  1710. data/third_party/cares/cares/inet_net_pton.c +450 -0
  1711. data/third_party/cares/cares/inet_ntop.c +207 -0
  1712. data/third_party/cares/cares/setup_once.h +554 -0
  1713. data/third_party/cares/cares/windows_port.c +22 -0
  1714. data/third_party/cares/config_darwin/ares_config.h +428 -0
  1715. data/third_party/cares/config_freebsd/ares_config.h +505 -0
  1716. data/third_party/cares/config_linux/ares_config.h +461 -0
  1717. data/third_party/cares/config_openbsd/ares_config.h +505 -0
  1718. data/third_party/upb/upb/decode.c +609 -0
  1719. data/third_party/upb/upb/decode.h +21 -0
  1720. data/third_party/upb/upb/encode.c +378 -0
  1721. data/third_party/upb/upb/encode.h +21 -0
  1722. data/third_party/upb/upb/generated_util.h +105 -0
  1723. data/third_party/upb/upb/msg.c +111 -0
  1724. data/third_party/upb/upb/msg.h +69 -0
  1725. data/third_party/upb/upb/port.c +26 -0
  1726. data/third_party/upb/upb/port_def.inc +150 -0
  1727. data/third_party/upb/upb/port_undef.inc +21 -0
  1728. data/third_party/upb/upb/table.c +913 -0
  1729. data/third_party/upb/upb/table.int.h +507 -0
  1730. data/third_party/upb/upb/upb.c +261 -0
  1731. data/third_party/upb/upb/upb.h +364 -0
  1732. data/third_party/zlib/adler32.c +186 -0
  1733. data/third_party/zlib/compress.c +86 -0
  1734. data/third_party/zlib/crc32.c +442 -0
  1735. data/third_party/zlib/crc32.h +441 -0
  1736. data/third_party/zlib/deflate.c +2163 -0
  1737. data/third_party/zlib/deflate.h +349 -0
  1738. data/third_party/zlib/gzclose.c +25 -0
  1739. data/third_party/zlib/gzguts.h +218 -0
  1740. data/third_party/zlib/gzlib.c +637 -0
  1741. data/third_party/zlib/gzread.c +654 -0
  1742. data/third_party/zlib/gzwrite.c +665 -0
  1743. data/third_party/zlib/infback.c +640 -0
  1744. data/third_party/zlib/inffast.c +323 -0
  1745. data/third_party/zlib/inffast.h +11 -0
  1746. data/third_party/zlib/inffixed.h +94 -0
  1747. data/third_party/zlib/inflate.c +1561 -0
  1748. data/third_party/zlib/inflate.h +125 -0
  1749. data/third_party/zlib/inftrees.c +304 -0
  1750. data/third_party/zlib/inftrees.h +62 -0
  1751. data/third_party/zlib/trees.c +1203 -0
  1752. data/third_party/zlib/trees.h +128 -0
  1753. data/third_party/zlib/uncompr.c +93 -0
  1754. data/third_party/zlib/zconf.h +534 -0
  1755. data/third_party/zlib/zlib.h +1912 -0
  1756. data/third_party/zlib/zutil.c +325 -0
  1757. data/third_party/zlib/zutil.h +271 -0
  1758. metadata +2029 -0
@@ -0,0 +1,84 @@
1
+ /*
2
+ *
3
+ * Copyright 2018 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #ifndef GRPC_CORE_LIB_IOMGR_TCP_CUSTOM_H
20
+ #define GRPC_CORE_LIB_IOMGR_TCP_CUSTOM_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include "src/core/lib/iomgr/endpoint.h"
25
+ #include "src/core/lib/iomgr/sockaddr.h"
26
+
27
+ // Same number as the micro of SO_REUSEPORT in kernel
28
+ #define GRPC_CUSTOM_SOCKET_OPT_SO_REUSEPORT (0x00000200u)
29
+
30
+ typedef struct grpc_tcp_listener grpc_tcp_listener;
31
+ typedef struct grpc_custom_tcp_connect grpc_custom_tcp_connect;
32
+
33
+ typedef struct grpc_custom_socket {
34
+ // Implementation defined
35
+ void* impl;
36
+ grpc_endpoint* endpoint;
37
+ grpc_tcp_listener* listener;
38
+ grpc_custom_tcp_connect* connector;
39
+ int refs;
40
+ } grpc_custom_socket;
41
+
42
+ typedef void (*grpc_custom_connect_callback)(grpc_custom_socket* socket,
43
+ grpc_error* error);
44
+ typedef void (*grpc_custom_write_callback)(grpc_custom_socket* socket,
45
+ grpc_error* error);
46
+ typedef void (*grpc_custom_read_callback)(grpc_custom_socket* socket,
47
+ size_t nread, grpc_error* error);
48
+ typedef void (*grpc_custom_accept_callback)(grpc_custom_socket* socket,
49
+ grpc_custom_socket* client,
50
+ grpc_error* error);
51
+ typedef void (*grpc_custom_close_callback)(grpc_custom_socket* socket);
52
+
53
+ typedef struct grpc_socket_vtable {
54
+ grpc_error* (*init)(grpc_custom_socket* socket, int domain);
55
+ void (*connect)(grpc_custom_socket* socket, const grpc_sockaddr* addr,
56
+ size_t len, grpc_custom_connect_callback cb);
57
+ void (*destroy)(grpc_custom_socket* socket);
58
+ void (*shutdown)(grpc_custom_socket* socket);
59
+ void (*close)(grpc_custom_socket* socket, grpc_custom_close_callback cb);
60
+ void (*write)(grpc_custom_socket* socket, grpc_slice_buffer* slices,
61
+ grpc_custom_write_callback cb);
62
+ void (*read)(grpc_custom_socket* socket, char* buffer, size_t length,
63
+ grpc_custom_read_callback cb);
64
+ grpc_error* (*getpeername)(grpc_custom_socket* socket,
65
+ const grpc_sockaddr* addr, int* len);
66
+ grpc_error* (*getsockname)(grpc_custom_socket* socket,
67
+ const grpc_sockaddr* addr, int* len);
68
+ grpc_error* (*bind)(grpc_custom_socket* socket, const grpc_sockaddr* addr,
69
+ size_t len, int flags);
70
+ grpc_error* (*listen)(grpc_custom_socket* socket);
71
+ void (*accept)(grpc_custom_socket* socket, grpc_custom_socket* client,
72
+ grpc_custom_accept_callback cb);
73
+ } grpc_socket_vtable;
74
+
75
+ /* Internal APIs */
76
+ void grpc_custom_endpoint_init(grpc_socket_vtable* impl);
77
+
78
+ void grpc_custom_close_server_callback(grpc_tcp_listener* listener);
79
+
80
+ grpc_endpoint* custom_tcp_endpoint_create(grpc_custom_socket* socket,
81
+ grpc_resource_quota* resource_quota,
82
+ char* peer_string);
83
+
84
+ #endif /* GRPC_CORE_LIB_IOMGR_TCP_CUSTOM_H */
@@ -0,0 +1,1855 @@
1
+ /*
2
+ *
3
+ * Copyright 2015 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/lib/iomgr/port.h"
22
+
23
+ #ifdef GRPC_POSIX_SOCKET_TCP
24
+
25
+ #include "src/core/lib/iomgr/tcp_posix.h"
26
+
27
+ #include <errno.h>
28
+ #include <limits.h>
29
+ #include <netinet/in.h>
30
+ #include <netinet/tcp.h>
31
+ #include <stdbool.h>
32
+ #include <stdio.h>
33
+ #include <stdlib.h>
34
+ #include <string.h>
35
+ #include <sys/socket.h>
36
+ #include <sys/types.h>
37
+ #include <unistd.h>
38
+ #include <algorithm>
39
+ #include <unordered_map>
40
+
41
+ #include <grpc/slice.h>
42
+ #include <grpc/support/alloc.h>
43
+ #include <grpc/support/log.h>
44
+ #include <grpc/support/string_util.h>
45
+ #include <grpc/support/sync.h>
46
+ #include <grpc/support/time.h>
47
+
48
+ #include "src/core/lib/channel/channel_args.h"
49
+ #include "src/core/lib/debug/stats.h"
50
+ #include "src/core/lib/debug/trace.h"
51
+ #include "src/core/lib/gpr/string.h"
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"
55
+ #include "src/core/lib/iomgr/ev_posix.h"
56
+ #include "src/core/lib/iomgr/executor.h"
57
+ #include "src/core/lib/iomgr/socket_utils_posix.h"
58
+ #include "src/core/lib/profiling/timers.h"
59
+ #include "src/core/lib/slice/slice_internal.h"
60
+ #include "src/core/lib/slice/slice_string_helpers.h"
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
+
71
+ #ifdef GRPC_HAVE_MSG_NOSIGNAL
72
+ #define SENDMSG_FLAGS MSG_NOSIGNAL
73
+ #else
74
+ #define SENDMSG_FLAGS 0
75
+ #endif
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
+
86
+ #ifdef GRPC_MSG_IOVLEN_TYPE
87
+ typedef GRPC_MSG_IOVLEN_TYPE msg_iovlen_type;
88
+ #else
89
+ typedef size_t msg_iovlen_type;
90
+ #endif
91
+
92
+ extern grpc_core::TraceFlag grpc_tcp_trace;
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
+
352
+ namespace {
353
+ struct grpc_tcp {
354
+ grpc_endpoint base;
355
+ grpc_fd* em_fd;
356
+ int fd;
357
+ /* Used by the endpoint read function to distinguish the very first read call
358
+ * from the rest */
359
+ bool is_first_read;
360
+ double target_length;
361
+ double bytes_read_this_round;
362
+ grpc_core::RefCount refcount;
363
+ gpr_atm shutdown_count;
364
+
365
+ int min_read_chunk_size;
366
+ int max_read_chunk_size;
367
+
368
+ /* garbage after the last read */
369
+ grpc_slice_buffer last_read_buffer;
370
+
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
+
375
+ grpc_slice_buffer* outgoing_buffer;
376
+ /* byte within outgoing_buffer->slices[0] to write next */
377
+ size_t outgoing_byte_idx;
378
+
379
+ grpc_closure* read_cb;
380
+ grpc_closure* write_cb;
381
+ grpc_closure* release_fd_cb;
382
+ int* release_fd;
383
+
384
+ grpc_closure read_done_closure;
385
+ grpc_closure write_done_closure;
386
+ grpc_closure error_closure;
387
+
388
+ char* peer_string;
389
+
390
+ grpc_resource_user* resource_user;
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;
417
+ };
418
+
419
+ struct backup_poller {
420
+ gpr_mu* pollset_mu;
421
+ grpc_closure run_poller;
422
+ };
423
+
424
+ } // namespace
425
+
426
+ static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* tcp);
427
+
428
+ #define BACKUP_POLLER_POLLSET(b) ((grpc_pollset*)((b) + 1))
429
+
430
+ static gpr_atm g_uncovered_notifications_pending;
431
+ static gpr_atm g_backup_poller; /* backup_poller* */
432
+
433
+ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error* error);
434
+ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error);
435
+ static void tcp_drop_uncovered_then_handle_write(void* arg /* grpc_tcp */,
436
+ grpc_error* error);
437
+
438
+ static void done_poller(void* bp, grpc_error* /*error_ignored*/) {
439
+ backup_poller* p = static_cast<backup_poller*>(bp);
440
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
441
+ gpr_log(GPR_INFO, "BACKUP_POLLER:%p destroy", p);
442
+ }
443
+ grpc_pollset_destroy(BACKUP_POLLER_POLLSET(p));
444
+ gpr_free(p);
445
+ }
446
+
447
+ static void run_poller(void* bp, grpc_error* /*error_ignored*/) {
448
+ backup_poller* p = static_cast<backup_poller*>(bp);
449
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
450
+ gpr_log(GPR_INFO, "BACKUP_POLLER:%p run", p);
451
+ }
452
+ gpr_mu_lock(p->pollset_mu);
453
+ grpc_millis deadline = grpc_core::ExecCtx::Get()->Now() + 10 * GPR_MS_PER_SEC;
454
+ GRPC_STATS_INC_TCP_BACKUP_POLLER_POLLS();
455
+ GRPC_LOG_IF_ERROR(
456
+ "backup_poller:pollset_work",
457
+ grpc_pollset_work(BACKUP_POLLER_POLLSET(p), nullptr, deadline));
458
+ gpr_mu_unlock(p->pollset_mu);
459
+ /* last "uncovered" notification is the ref that keeps us polling, if we get
460
+ * there try a cas to release it */
461
+ if (gpr_atm_no_barrier_load(&g_uncovered_notifications_pending) == 1 &&
462
+ gpr_atm_full_cas(&g_uncovered_notifications_pending, 1, 0)) {
463
+ gpr_mu_lock(p->pollset_mu);
464
+ bool cas_ok = gpr_atm_full_cas(&g_backup_poller, (gpr_atm)p, 0);
465
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
466
+ gpr_log(GPR_INFO, "BACKUP_POLLER:%p done cas_ok=%d", p, cas_ok);
467
+ }
468
+ gpr_mu_unlock(p->pollset_mu);
469
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
470
+ gpr_log(GPR_INFO, "BACKUP_POLLER:%p shutdown", p);
471
+ }
472
+ grpc_pollset_shutdown(BACKUP_POLLER_POLLSET(p),
473
+ GRPC_CLOSURE_INIT(&p->run_poller, done_poller, p,
474
+ grpc_schedule_on_exec_ctx));
475
+ } else {
476
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
477
+ gpr_log(GPR_INFO, "BACKUP_POLLER:%p reschedule", p);
478
+ }
479
+ grpc_core::Executor::Run(&p->run_poller, GRPC_ERROR_NONE,
480
+ grpc_core::ExecutorType::DEFAULT,
481
+ grpc_core::ExecutorJobType::LONG);
482
+ }
483
+ }
484
+
485
+ static void drop_uncovered(grpc_tcp* /*tcp*/) {
486
+ backup_poller* p = (backup_poller*)gpr_atm_acq_load(&g_backup_poller);
487
+ gpr_atm old_count =
488
+ gpr_atm_full_fetch_add(&g_uncovered_notifications_pending, -1);
489
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
490
+ gpr_log(GPR_INFO, "BACKUP_POLLER:%p uncover cnt %d->%d", p,
491
+ static_cast<int>(old_count), static_cast<int>(old_count) - 1);
492
+ }
493
+ GPR_ASSERT(old_count != 1);
494
+ }
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
503
+ static void cover_self(grpc_tcp* tcp) {
504
+ backup_poller* p;
505
+ gpr_atm old_count =
506
+ gpr_atm_no_barrier_fetch_add(&g_uncovered_notifications_pending, 2);
507
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
508
+ gpr_log(GPR_INFO, "BACKUP_POLLER: cover cnt %d->%d",
509
+ static_cast<int>(old_count), 2 + static_cast<int>(old_count));
510
+ }
511
+ if (old_count == 0) {
512
+ GRPC_STATS_INC_TCP_BACKUP_POLLERS_CREATED();
513
+ p = static_cast<backup_poller*>(
514
+ gpr_zalloc(sizeof(*p) + grpc_pollset_size()));
515
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
516
+ gpr_log(GPR_INFO, "BACKUP_POLLER:%p create", p);
517
+ }
518
+ grpc_pollset_init(BACKUP_POLLER_POLLSET(p), &p->pollset_mu);
519
+ gpr_atm_rel_store(&g_backup_poller, (gpr_atm)p);
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);
524
+ } else {
525
+ while ((p = (backup_poller*)gpr_atm_acq_load(&g_backup_poller)) ==
526
+ nullptr) {
527
+ // spin waiting for backup poller
528
+ }
529
+ }
530
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
531
+ gpr_log(GPR_INFO, "BACKUP_POLLER:%p add %p", p, tcp);
532
+ }
533
+ grpc_pollset_add_fd(BACKUP_POLLER_POLLSET(p), tcp->em_fd);
534
+ if (old_count != 0) {
535
+ drop_uncovered(tcp);
536
+ }
537
+ }
538
+
539
+ static void notify_on_read(grpc_tcp* tcp) {
540
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
541
+ gpr_log(GPR_INFO, "TCP:%p notify_on_read", tcp);
542
+ }
543
+ grpc_fd_notify_on_read(tcp->em_fd, &tcp->read_done_closure);
544
+ }
545
+
546
+ static void notify_on_write(grpc_tcp* tcp) {
547
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
548
+ gpr_log(GPR_INFO, "TCP:%p notify_on_write", tcp);
549
+ }
550
+ if (!grpc_event_engine_run_in_background()) {
551
+ cover_self(tcp);
552
+ }
553
+ grpc_fd_notify_on_write(tcp->em_fd, &tcp->write_done_closure);
554
+ }
555
+
556
+ static void tcp_drop_uncovered_then_handle_write(void* arg, grpc_error* error) {
557
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
558
+ gpr_log(GPR_INFO, "TCP:%p got_write: %s", arg, grpc_error_string(error));
559
+ }
560
+ drop_uncovered(static_cast<grpc_tcp*>(arg));
561
+ tcp_handle_write(arg, error);
562
+ }
563
+
564
+ static void add_to_estimate(grpc_tcp* tcp, size_t bytes) {
565
+ tcp->bytes_read_this_round += static_cast<double>(bytes);
566
+ }
567
+
568
+ static void finish_estimate(grpc_tcp* tcp) {
569
+ /* If we read >80% of the target buffer in one read loop, increase the size
570
+ of the target buffer to either the amount read, or twice its previous
571
+ value */
572
+ if (tcp->bytes_read_this_round > tcp->target_length * 0.8) {
573
+ tcp->target_length =
574
+ GPR_MAX(2 * tcp->target_length, tcp->bytes_read_this_round);
575
+ } else {
576
+ tcp->target_length =
577
+ 0.99 * tcp->target_length + 0.01 * tcp->bytes_read_this_round;
578
+ }
579
+ tcp->bytes_read_this_round = 0;
580
+ }
581
+
582
+ static size_t get_target_read_size(grpc_tcp* tcp) {
583
+ grpc_resource_quota* rq = grpc_resource_user_quota(tcp->resource_user);
584
+ double pressure = grpc_resource_quota_get_memory_pressure(rq);
585
+ double target =
586
+ tcp->target_length * (pressure > 0.8 ? (1.0 - pressure) / 0.2 : 1.0);
587
+ size_t sz = ((static_cast<size_t> GPR_CLAMP(target, tcp->min_read_chunk_size,
588
+ tcp->max_read_chunk_size)) +
589
+ 255) &
590
+ ~static_cast<size_t>(255);
591
+ /* don't use more than 1/16th of the overall resource quota for a single read
592
+ * alloc */
593
+ size_t rqmax = grpc_resource_quota_peek_size(rq);
594
+ if (sz > rqmax / 16 && rqmax > 1024) {
595
+ sz = rqmax / 16;
596
+ }
597
+ return sz;
598
+ }
599
+
600
+ static grpc_error* tcp_annotate_error(grpc_error* src_error, grpc_tcp* tcp) {
601
+ return grpc_error_set_str(
602
+ grpc_error_set_int(
603
+ grpc_error_set_int(src_error, GRPC_ERROR_INT_FD, tcp->fd),
604
+ /* All tcp errors are marked with UNAVAILABLE so that application may
605
+ * choose to retry. */
606
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE),
607
+ GRPC_ERROR_STR_TARGET_ADDRESS,
608
+ grpc_slice_from_copied_string(tcp->peer_string));
609
+ }
610
+
611
+ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error* error);
612
+ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error);
613
+
614
+ static void tcp_shutdown(grpc_endpoint* ep, grpc_error* why) {
615
+ grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
616
+ ZerocopyDisableAndWaitForRemaining(tcp);
617
+ grpc_fd_shutdown(tcp->em_fd, why);
618
+ grpc_resource_user_shutdown(tcp->resource_user);
619
+ }
620
+
621
+ static void tcp_free(grpc_tcp* tcp) {
622
+ grpc_fd_orphan(tcp->em_fd, tcp->release_fd_cb, tcp->release_fd,
623
+ "tcp_unref_orphan");
624
+ grpc_slice_buffer_destroy_internal(&tcp->last_read_buffer);
625
+ grpc_resource_user_unref(tcp->resource_user);
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();
636
+ gpr_free(tcp);
637
+ }
638
+
639
+ #ifndef NDEBUG
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))) {
645
+ tcp_free(tcp);
646
+ }
647
+ }
648
+
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);
652
+ }
653
+ #else
654
+ #define TCP_UNREF(tcp, reason) tcp_unref((tcp))
655
+ #define TCP_REF(tcp, reason) tcp_ref((tcp))
656
+ static void tcp_unref(grpc_tcp* tcp) {
657
+ if (GPR_UNLIKELY(tcp->refcount.Unref())) {
658
+ tcp_free(tcp);
659
+ }
660
+ }
661
+
662
+ static void tcp_ref(grpc_tcp* tcp) { tcp->refcount.Ref(); }
663
+ #endif
664
+
665
+ static void tcp_destroy(grpc_endpoint* ep) {
666
+ grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
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
+ }
673
+ TCP_UNREF(tcp, "destroy");
674
+ }
675
+
676
+ static void call_read_cb(grpc_tcp* tcp, grpc_error* error) {
677
+ grpc_closure* cb = tcp->read_cb;
678
+
679
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
680
+ gpr_log(GPR_INFO, "TCP:%p call_cb %p %p:%p", tcp, cb, cb->cb, cb->cb_arg);
681
+ size_t i;
682
+ const char* str = grpc_error_string(error);
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
+ }
692
+ }
693
+ }
694
+
695
+ tcp->read_cb = nullptr;
696
+ tcp->incoming_buffer = nullptr;
697
+ grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
698
+ }
699
+
700
+ #define MAX_READ_IOVEC 4
701
+ static void tcp_do_read(grpc_tcp* tcp) {
702
+ GPR_TIMER_SCOPE("tcp_do_read", 0);
703
+ struct msghdr msg;
704
+ struct iovec iov[MAX_READ_IOVEC];
705
+ ssize_t read_bytes;
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++) {
717
+ iov[i].iov_base = GRPC_SLICE_START_PTR(tcp->incoming_buffer->slices[i]);
718
+ iov[i].iov_len = GRPC_SLICE_LENGTH(tcp->incoming_buffer->slices[i]);
719
+ }
720
+
721
+ do {
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);
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. */
778
+ grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
779
+ call_read_cb(
780
+ tcp, tcp_annotate_error(
781
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Socket closed"), tcp));
782
+ TCP_UNREF(tcp, "read");
783
+ return;
784
+ }
785
+
786
+ GRPC_STATS_INC_TCP_READ_SIZE(read_bytes);
787
+ add_to_estimate(tcp, static_cast<size_t>(read_bytes));
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);
842
+ }
843
+ call_read_cb(tcp, GRPC_ERROR_NONE);
844
+ TCP_UNREF(tcp, "read");
845
+ }
846
+
847
+ static void tcp_read_allocation_done(void* tcpp, grpc_error* error) {
848
+ grpc_tcp* tcp = static_cast<grpc_tcp*>(tcpp);
849
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
850
+ gpr_log(GPR_INFO, "TCP:%p read_allocation_done: %s", tcp,
851
+ grpc_error_string(error));
852
+ }
853
+ if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
854
+ grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
855
+ grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
856
+ call_read_cb(tcp, GRPC_ERROR_REF(error));
857
+ TCP_UNREF(tcp, "read");
858
+ } else {
859
+ tcp_do_read(tcp);
860
+ }
861
+ }
862
+
863
+ static void tcp_continue_read(grpc_tcp* tcp) {
864
+ size_t target_read_size = get_target_read_size(tcp);
865
+ /* Wait for allocation only when there is no buffer left. */
866
+ if (tcp->incoming_buffer->length == 0 &&
867
+ tcp->incoming_buffer->count < MAX_READ_IOVEC) {
868
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
869
+ gpr_log(GPR_INFO, "TCP:%p alloc_slices", tcp);
870
+ }
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;
876
+ }
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);
882
+ }
883
+
884
+ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error* error) {
885
+ grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
886
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
887
+ gpr_log(GPR_INFO, "TCP:%p got_read: %s", tcp, grpc_error_string(error));
888
+ }
889
+
890
+ if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
891
+ grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
892
+ grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
893
+ call_read_cb(tcp, GRPC_ERROR_REF(error));
894
+ TCP_UNREF(tcp, "read");
895
+ } else {
896
+ tcp_continue_read(tcp);
897
+ }
898
+ }
899
+
900
+ static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
901
+ grpc_closure* cb, bool urgent) {
902
+ grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
903
+ GPR_ASSERT(tcp->read_cb == nullptr);
904
+ tcp->read_cb = cb;
905
+ tcp->incoming_buffer = incoming_buffer;
906
+ grpc_slice_buffer_reset_and_unref_internal(incoming_buffer);
907
+ grpc_slice_buffer_swap(incoming_buffer, &tcp->last_read_buffer);
908
+ TCP_REF(tcp, "read");
909
+ if (tcp->is_first_read) {
910
+ /* Endpoint read called for the very first time. Register read callback with
911
+ * the polling engine */
912
+ tcp->is_first_read = false;
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);
919
+ } else {
920
+ /* Not the first time. We may or may not have more bytes available. In any
921
+ * case call tcp->read_done_closure (i.e tcp_handle_read()) which does the
922
+ * right thing (i.e calls tcp_do_read() which either reads the available
923
+ * bytes or calls notify_on_read() to be notified when new bytes become
924
+ * available */
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;
1270
+ }
1271
+ }
1272
+
1273
+ #if defined(IOV_MAX) && IOV_MAX < 1000
1274
+ #define MAX_WRITE_IOVEC IOV_MAX
1275
+ #else
1276
+ #define MAX_WRITE_IOVEC 1000
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
+
1406
+ static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
1407
+ struct msghdr msg;
1408
+ struct iovec iov[MAX_WRITE_IOVEC];
1409
+ msg_iovlen_type iov_size;
1410
+ ssize_t sent_length = 0;
1411
+ size_t sending_length;
1412
+ size_t trailing;
1413
+ size_t unwind_slice_idx;
1414
+ size_t unwind_byte_idx;
1415
+
1416
+ // We always start at zero, because we eagerly unref and trim the slice
1417
+ // buffer as we write
1418
+ size_t outgoing_slice_idx = 0;
1419
+
1420
+ while (true) {
1421
+ sending_length = 0;
1422
+ unwind_slice_idx = outgoing_slice_idx;
1423
+ unwind_byte_idx = tcp->outgoing_byte_idx;
1424
+ for (iov_size = 0; outgoing_slice_idx != tcp->outgoing_buffer->count &&
1425
+ iov_size != MAX_WRITE_IOVEC;
1426
+ iov_size++) {
1427
+ iov[iov_size].iov_base =
1428
+ GRPC_SLICE_START_PTR(
1429
+ tcp->outgoing_buffer->slices[outgoing_slice_idx]) +
1430
+ tcp->outgoing_byte_idx;
1431
+ iov[iov_size].iov_len =
1432
+ GRPC_SLICE_LENGTH(tcp->outgoing_buffer->slices[outgoing_slice_idx]) -
1433
+ tcp->outgoing_byte_idx;
1434
+ sending_length += iov[iov_size].iov_len;
1435
+ outgoing_slice_idx++;
1436
+ tcp->outgoing_byte_idx = 0;
1437
+ }
1438
+ GPR_ASSERT(iov_size > 0);
1439
+
1440
+ msg.msg_name = nullptr;
1441
+ msg.msg_namelen = 0;
1442
+ msg.msg_iov = iov;
1443
+ msg.msg_iovlen = iov_size;
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;
1460
+
1461
+ GRPC_STATS_INC_TCP_WRITE_SIZE(sending_length);
1462
+ GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(iov_size);
1463
+
1464
+ sent_length = tcp_send(tcp->fd, &msg);
1465
+ }
1466
+
1467
+ if (sent_length < 0) {
1468
+ if (errno == EAGAIN) {
1469
+ tcp->outgoing_byte_idx = unwind_byte_idx;
1470
+ // unref all and forget about all slices that have been written to this
1471
+ // point
1472
+ for (size_t idx = 0; idx < unwind_slice_idx; ++idx) {
1473
+ grpc_slice_buffer_remove_first(tcp->outgoing_buffer);
1474
+ }
1475
+ return false;
1476
+ } else if (errno == EPIPE) {
1477
+ *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
1478
+ grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
1479
+ tcp_shutdown_buffer_list(tcp);
1480
+ return true;
1481
+ } else {
1482
+ *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
1483
+ grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
1484
+ tcp_shutdown_buffer_list(tcp);
1485
+ return true;
1486
+ }
1487
+ }
1488
+
1489
+ GPR_ASSERT(tcp->outgoing_byte_idx == 0);
1490
+ tcp->bytes_counter += sent_length;
1491
+ trailing = sending_length - static_cast<size_t>(sent_length);
1492
+ while (trailing > 0) {
1493
+ size_t slice_length;
1494
+
1495
+ outgoing_slice_idx--;
1496
+ slice_length =
1497
+ GRPC_SLICE_LENGTH(tcp->outgoing_buffer->slices[outgoing_slice_idx]);
1498
+ if (slice_length > trailing) {
1499
+ tcp->outgoing_byte_idx = slice_length - trailing;
1500
+ break;
1501
+ } else {
1502
+ trailing -= slice_length;
1503
+ }
1504
+ }
1505
+ if (outgoing_slice_idx == tcp->outgoing_buffer->count) {
1506
+ *error = GRPC_ERROR_NONE;
1507
+ grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
1508
+ return true;
1509
+ }
1510
+ }
1511
+ }
1512
+
1513
+ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error) {
1514
+ grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
1515
+ grpc_closure* cb;
1516
+
1517
+ if (error != GRPC_ERROR_NONE) {
1518
+ cb = tcp->write_cb;
1519
+ tcp->write_cb = nullptr;
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));
1526
+ TCP_UNREF(tcp, "write");
1527
+ return;
1528
+ }
1529
+
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)) {
1536
+ gpr_log(GPR_INFO, "write: delayed");
1537
+ }
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);
1541
+ } else {
1542
+ cb = tcp->write_cb;
1543
+ tcp->write_cb = nullptr;
1544
+ tcp->current_zerocopy_send = nullptr;
1545
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1546
+ const char* str = grpc_error_string(error);
1547
+ gpr_log(GPR_INFO, "write: %s", str);
1548
+ }
1549
+ // No need to take a ref on error since tcp_flush provides a ref.
1550
+ grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
1551
+ TCP_UNREF(tcp, "write");
1552
+ }
1553
+ }
1554
+
1555
+ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1556
+ grpc_closure* cb, void* arg) {
1557
+ GPR_TIMER_SCOPE("tcp_write", 0);
1558
+ grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1559
+ grpc_error* error = GRPC_ERROR_NONE;
1560
+ TcpZerocopySendRecord* zerocopy_send_record = nullptr;
1561
+
1562
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1563
+ size_t i;
1564
+
1565
+ for (i = 0; i < buf->count; i++) {
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
+ }
1573
+ }
1574
+ }
1575
+
1576
+ GPR_ASSERT(tcp->write_cb == nullptr);
1577
+ GPR_DEBUG_ASSERT(tcp->current_zerocopy_send == nullptr);
1578
+
1579
+ if (buf->length == 0) {
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);
1587
+ return;
1588
+ }
1589
+
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) {
1606
+ TCP_REF(tcp, "write");
1607
+ tcp->write_cb = cb;
1608
+ tcp->current_zerocopy_send = zerocopy_send_record;
1609
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1610
+ gpr_log(GPR_INFO, "write: delayed");
1611
+ }
1612
+ notify_on_write(tcp);
1613
+ } else {
1614
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1615
+ const char* str = grpc_error_string(error);
1616
+ gpr_log(GPR_INFO, "write: %s", str);
1617
+ }
1618
+ grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
1619
+ }
1620
+ }
1621
+
1622
+ static void tcp_add_to_pollset(grpc_endpoint* ep, grpc_pollset* pollset) {
1623
+ grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1624
+ grpc_pollset_add_fd(pollset, tcp->em_fd);
1625
+ }
1626
+
1627
+ static void tcp_add_to_pollset_set(grpc_endpoint* ep,
1628
+ grpc_pollset_set* pollset_set) {
1629
+ grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1630
+ grpc_pollset_set_add_fd(pollset_set, tcp->em_fd);
1631
+ }
1632
+
1633
+ static void tcp_delete_from_pollset_set(grpc_endpoint* ep,
1634
+ grpc_pollset_set* pollset_set) {
1635
+ grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1636
+ ZerocopyDisableAndWaitForRemaining(tcp);
1637
+ grpc_pollset_set_del_fd(pollset_set, tcp->em_fd);
1638
+ }
1639
+
1640
+ static char* tcp_get_peer(grpc_endpoint* ep) {
1641
+ grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1642
+ return gpr_strdup(tcp->peer_string);
1643
+ }
1644
+
1645
+ static int tcp_get_fd(grpc_endpoint* ep) {
1646
+ grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1647
+ return tcp->fd;
1648
+ }
1649
+
1650
+ static grpc_resource_user* tcp_get_resource_user(grpc_endpoint* ep) {
1651
+ grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1652
+ return tcp->resource_user;
1653
+ }
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
+
1671
+ static const grpc_endpoint_vtable vtable = {tcp_read,
1672
+ tcp_write,
1673
+ tcp_add_to_pollset,
1674
+ tcp_add_to_pollset_set,
1675
+ tcp_delete_from_pollset_set,
1676
+ tcp_shutdown,
1677
+ tcp_destroy,
1678
+ tcp_get_resource_user,
1679
+ tcp_get_peer,
1680
+ tcp_get_fd,
1681
+ tcp_can_track_err};
1682
+
1683
+ #define MAX_CHUNK_SIZE 32 * 1024 * 1024
1684
+
1685
+ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1686
+ const grpc_channel_args* channel_args,
1687
+ const char* peer_string) {
1688
+ static constexpr bool kZerocpTxEnabledDefault = false;
1689
+ int tcp_read_chunk_size = GRPC_TCP_DEFAULT_READ_SLICE_SIZE;
1690
+ int tcp_max_read_chunk_size = 4 * 1024 * 1024;
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;
1697
+ grpc_resource_quota* resource_quota = grpc_resource_quota_create(nullptr);
1698
+ if (channel_args != nullptr) {
1699
+ for (size_t i = 0; i < channel_args->num_args; i++) {
1700
+ if (0 ==
1701
+ strcmp(channel_args->args[i].key, GRPC_ARG_TCP_READ_CHUNK_SIZE)) {
1702
+ grpc_integer_options options = {tcp_read_chunk_size, 1, MAX_CHUNK_SIZE};
1703
+ tcp_read_chunk_size =
1704
+ grpc_channel_arg_get_integer(&channel_args->args[i], options);
1705
+ } else if (0 == strcmp(channel_args->args[i].key,
1706
+ GRPC_ARG_TCP_MIN_READ_CHUNK_SIZE)) {
1707
+ grpc_integer_options options = {tcp_read_chunk_size, 1, MAX_CHUNK_SIZE};
1708
+ tcp_min_read_chunk_size =
1709
+ grpc_channel_arg_get_integer(&channel_args->args[i], options);
1710
+ } else if (0 == strcmp(channel_args->args[i].key,
1711
+ GRPC_ARG_TCP_MAX_READ_CHUNK_SIZE)) {
1712
+ grpc_integer_options options = {tcp_read_chunk_size, 1, MAX_CHUNK_SIZE};
1713
+ tcp_max_read_chunk_size =
1714
+ grpc_channel_arg_get_integer(&channel_args->args[i], options);
1715
+ } else if (0 ==
1716
+ strcmp(channel_args->args[i].key, GRPC_ARG_RESOURCE_QUOTA)) {
1717
+ grpc_resource_quota_unref_internal(resource_quota);
1718
+ resource_quota =
1719
+ grpc_resource_quota_ref_internal(static_cast<grpc_resource_quota*>(
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);
1738
+ }
1739
+ }
1740
+ }
1741
+
1742
+ if (tcp_min_read_chunk_size > tcp_max_read_chunk_size) {
1743
+ tcp_min_read_chunk_size = tcp_max_read_chunk_size;
1744
+ }
1745
+ tcp_read_chunk_size = GPR_CLAMP(tcp_read_chunk_size, tcp_min_read_chunk_size,
1746
+ tcp_max_read_chunk_size);
1747
+
1748
+ grpc_tcp* tcp = static_cast<grpc_tcp*>(gpr_malloc(sizeof(grpc_tcp)));
1749
+ tcp->base.vtable = &vtable;
1750
+ tcp->peer_string = gpr_strdup(peer_string);
1751
+ tcp->fd = grpc_fd_wrapped_fd(em_fd);
1752
+ tcp->read_cb = nullptr;
1753
+ tcp->write_cb = nullptr;
1754
+ tcp->current_zerocopy_send = nullptr;
1755
+ tcp->release_fd_cb = nullptr;
1756
+ tcp->release_fd = nullptr;
1757
+ tcp->incoming_buffer = nullptr;
1758
+ tcp->target_length = static_cast<double>(tcp_read_chunk_size);
1759
+ tcp->min_read_chunk_size = tcp_min_read_chunk_size;
1760
+ tcp->max_read_chunk_size = tcp_max_read_chunk_size;
1761
+ tcp->bytes_read_this_round = 0;
1762
+ /* Will be set to false by the very first endpoint read function */
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
+ }
1782
+ /* paired with unref in grpc_tcp_destroy */
1783
+ new (&tcp->refcount) grpc_core::RefCount(1, &grpc_tcp_trace);
1784
+ gpr_atm_no_barrier_store(&tcp->shutdown_count, 0);
1785
+ tcp->em_fd = em_fd;
1786
+ grpc_slice_buffer_init(&tcp->last_read_buffer);
1787
+ tcp->resource_user = grpc_resource_user_create(resource_quota, peer_string);
1788
+ grpc_resource_user_slice_allocator_init(
1789
+ &tcp->slice_allocator, tcp->resource_user, tcp_read_allocation_done, tcp);
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
+ }
1829
+
1830
+ return &tcp->base;
1831
+ }
1832
+
1833
+ int grpc_tcp_fd(grpc_endpoint* ep) {
1834
+ grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1835
+ GPR_ASSERT(ep->vtable == &vtable);
1836
+ return grpc_fd_wrapped_fd(tcp->em_fd);
1837
+ }
1838
+
1839
+ void grpc_tcp_destroy_and_release_fd(grpc_endpoint* ep, int* fd,
1840
+ grpc_closure* done) {
1841
+ grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1842
+ GPR_ASSERT(ep->vtable == &vtable);
1843
+ tcp->release_fd = fd;
1844
+ tcp->release_fd_cb = done;
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
+ }
1852
+ TCP_UNREF(tcp, "destroy");
1853
+ }
1854
+
1855
+ #endif /* GRPC_POSIX_SOCKET_TCP */