grpc 1.21.0 → 1.32.0

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

Potentially problematic release.


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

Files changed (1843) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2516 -19950
  3. data/etc/roots.pem +44 -100
  4. data/include/grpc/grpc.h +3 -1
  5. data/include/grpc/grpc_security.h +238 -55
  6. data/include/grpc/grpc_security_constants.h +32 -1
  7. data/include/grpc/impl/codegen/README.md +22 -0
  8. data/include/grpc/impl/codegen/gpr_types.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +61 -13
  10. data/include/grpc/impl/codegen/port_platform.h +74 -30
  11. data/include/grpc/impl/codegen/sync.h +5 -3
  12. data/include/grpc/impl/codegen/sync_abseil.h +36 -0
  13. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  14. data/include/grpc/module.modulemap +25 -37
  15. data/include/grpc/slice.h +2 -2
  16. data/include/grpc/support/alloc.h +0 -16
  17. data/include/grpc/support/sync_abseil.h +26 -0
  18. data/src/core/ext/filters/client_channel/backend_metric.cc +84 -0
  19. data/src/core/ext/filters/client_channel/backend_metric.h +36 -0
  20. data/src/core/ext/filters/client_channel/backup_poller.cc +10 -8
  21. data/src/core/ext/filters/client_channel/backup_poller.h +5 -2
  22. data/src/core/ext/filters/client_channel/channel_connectivity.cc +18 -4
  23. data/src/core/ext/filters/client_channel/client_channel.cc +1516 -742
  24. data/src/core/ext/filters/client_channel/client_channel.h +25 -9
  25. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +50 -139
  26. data/src/core/ext/filters/client_channel/client_channel_channelz.h +15 -39
  27. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  28. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -9
  29. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -13
  30. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  31. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  32. data/src/core/ext/filters/client_channel/connector.h +42 -39
  33. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +34 -12
  34. data/src/core/ext/filters/client_channel/health/health_check_client.cc +75 -115
  35. data/src/core/ext/filters/client_channel/health/health_check_client.h +8 -16
  36. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +75 -46
  37. data/src/core/ext/filters/client_channel/http_proxy.cc +126 -120
  38. data/src/core/ext/filters/client_channel/http_proxy.h +5 -1
  39. data/src/core/ext/filters/client_channel/lb_policy.cc +35 -35
  40. data/src/core/ext/filters/client_channel/lb_policy.h +225 -152
  41. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  42. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  43. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +299 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +41 -25
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +635 -734
  47. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +7 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +76 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +37 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +9 -2
  51. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +33 -49
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +4 -3
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +7 -6
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +157 -271
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +42 -58
  56. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +113 -166
  57. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +890 -0
  58. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +61 -101
  59. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +116 -260
  60. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +744 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +423 -0
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +946 -0
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +537 -0
  64. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +3 -7
  65. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +1141 -0
  66. data/src/core/ext/filters/client_channel/lb_policy_factory.h +6 -9
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +53 -77
  68. data/src/core/ext/filters/client_channel/lb_policy_registry.h +3 -3
  69. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +8 -8
  70. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  71. data/src/core/ext/filters/client_channel/proxy_mapper.h +14 -34
  72. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +46 -79
  73. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +23 -17
  74. data/src/core/ext/filters/client_channel/resolver.cc +6 -9
  75. data/src/core/ext/filters/client_channel/resolver.h +19 -37
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +156 -130
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +74 -39
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +15 -21
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +33 -33
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +16 -13
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +476 -129
  82. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +231 -193
  83. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +6 -4
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +9 -6
  85. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -2
  86. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -2
  87. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +73 -48
  88. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +165 -116
  89. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +8 -7
  90. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +45 -29
  91. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +536 -0
  92. data/src/core/ext/filters/client_channel/resolver_factory.h +11 -11
  93. data/src/core/ext/filters/client_channel/resolver_registry.cc +39 -24
  94. data/src/core/ext/filters/client_channel/resolver_registry.h +17 -12
  95. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +251 -313
  96. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +28 -26
  97. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +100 -325
  98. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +48 -53
  99. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  100. data/src/core/ext/filters/client_channel/retry_throttle.h +2 -6
  101. data/src/core/ext/filters/client_channel/server_address.cc +40 -14
  102. data/src/core/ext/filters/client_channel/server_address.h +45 -15
  103. data/src/core/ext/filters/client_channel/service_config.cc +143 -253
  104. data/src/core/ext/filters/client_channel/service_config.h +47 -131
  105. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  106. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  107. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  108. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  109. data/src/core/ext/filters/client_channel/subchannel.cc +436 -288
  110. data/src/core/ext/filters/client_channel/subchannel.h +181 -53
  111. data/src/core/ext/filters/client_channel/subchannel_interface.h +94 -0
  112. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  113. data/src/core/ext/filters/client_idle/client_idle_filter.cc +440 -0
  114. data/src/core/ext/filters/deadline/deadline_filter.cc +30 -28
  115. data/src/core/ext/filters/http/client/http_client_filter.cc +66 -70
  116. data/src/core/ext/filters/http/client_authority_filter.cc +21 -21
  117. data/src/core/ext/filters/http/http_filters_plugin.cc +28 -12
  118. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +335 -301
  119. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +399 -0
  120. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
  121. data/src/core/ext/filters/http/server/http_server_filter.cc +66 -39
  122. data/src/core/ext/filters/max_age/max_age_filter.cc +72 -60
  123. data/src/core/ext/filters/message_size/message_size_filter.cc +116 -144
  124. data/src/core/ext/filters/message_size/message_size_filter.h +12 -6
  125. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +19 -17
  126. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +193 -171
  127. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +48 -1
  128. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +29 -25
  129. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +44 -64
  130. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +384 -305
  131. data/src/core/ext/transport/chttp2/server/chttp2_server.h +7 -2
  132. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
  133. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +10 -16
  134. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +9 -9
  135. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  136. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +640 -560
  137. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
  138. data/src/core/ext/transport/chttp2/transport/context_list.cc +5 -3
  139. data/src/core/ext/transport/chttp2/transport/flow_control.cc +26 -31
  140. data/src/core/ext/transport/chttp2/transport/flow_control.h +28 -38
  141. data/src/core/ext/transport/chttp2/transport/frame_data.cc +45 -54
  142. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -9
  143. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -7
  145. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  146. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +21 -13
  147. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +9 -3
  148. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +13 -12
  149. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  150. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  151. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  152. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +531 -348
  153. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +26 -15
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +213 -143
  155. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +11 -4
  156. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +41 -196
  157. data/src/core/ext/transport/chttp2/transport/hpack_table.h +62 -18
  158. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  159. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  160. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -1
  161. data/src/core/ext/transport/chttp2/transport/internal.h +64 -47
  162. data/src/core/ext/transport/chttp2/transport/parsing.cc +148 -162
  163. data/src/core/ext/transport/chttp2/transport/stream_map.cc +28 -18
  164. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  165. data/src/core/ext/transport/chttp2/transport/writing.cc +38 -30
  166. data/src/core/ext/transport/inproc/inproc_transport.cc +164 -114
  167. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +17 -0
  168. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +29 -0
  169. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +27 -0
  170. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +53 -0
  171. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
  172. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
  173. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  174. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  175. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
  176. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
  177. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +35 -0
  178. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  179. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +55 -0
  180. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  181. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +35 -0
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  194. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  195. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +36 -0
  196. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  197. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
  198. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
  199. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  200. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  201. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +34 -0
  202. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  203. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  204. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  205. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  206. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  207. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  208. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  209. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +33 -0
  210. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  211. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
  212. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
  213. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
  214. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
  215. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  216. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  217. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
  218. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
  219. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  220. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  221. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
  222. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
  223. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
  224. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
  225. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  226. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
  229. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  230. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  231. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
  232. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
  233. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
  234. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
  235. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
  237. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +27 -0
  238. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  239. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +25 -0
  240. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  241. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
  242. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
  243. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +30 -0
  244. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  245. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +30 -0
  246. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  247. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  248. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  249. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +29 -0
  250. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  251. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +27 -0
  252. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  253. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  254. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  255. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  256. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  257. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  258. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  259. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  260. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  261. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  262. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
  263. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  265. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  266. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  267. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  268. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  269. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +17 -0
  270. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +35 -0
  271. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +40 -0
  272. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  273. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +51 -0
  274. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  275. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +30 -0
  276. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  277. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +17 -0
  278. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +29 -0
  279. data/src/core/ext/upb-generated/google/api/annotations.upb.c +18 -0
  280. data/src/core/ext/upb-generated/google/api/annotations.upb.h +29 -0
  281. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  282. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  283. data/src/core/ext/upb-generated/google/api/http.upb.c +66 -0
  284. data/src/core/ext/upb-generated/google/api/http.upb.h +191 -0
  285. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +27 -0
  286. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +57 -0
  287. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +486 -0
  288. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1722 -0
  289. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +27 -0
  290. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +57 -0
  291. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +22 -0
  292. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +49 -0
  293. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +79 -0
  294. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +194 -0
  295. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +27 -0
  296. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +57 -0
  297. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +106 -0
  298. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +237 -0
  299. data/src/core/ext/upb-generated/google/rpc/status.upb.c +33 -0
  300. data/src/core/ext/upb-generated/google/rpc/status.upb.h +74 -0
  301. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +49 -0
  302. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +113 -0
  303. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +212 -0
  304. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +672 -0
  305. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +42 -0
  306. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +110 -0
  307. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +36 -0
  308. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +83 -0
  309. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +141 -0
  310. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +396 -0
  311. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +48 -0
  312. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +103 -0
  313. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +17 -0
  314. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +29 -0
  315. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  316. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +64 -0
  317. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  318. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  319. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +58 -0
  320. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +117 -0
  321. data/src/core/ext/upb-generated/validate/validate.upb.c +448 -0
  322. data/src/core/ext/upb-generated/validate/validate.upb.h +2074 -0
  323. data/src/core/ext/xds/xds_api.cc +2388 -0
  324. data/src/core/ext/xds/xds_api.h +360 -0
  325. data/src/core/ext/xds/xds_bootstrap.cc +373 -0
  326. data/src/core/ext/xds/xds_bootstrap.h +93 -0
  327. data/src/core/ext/xds/xds_channel.h +46 -0
  328. data/src/core/ext/xds/xds_channel_args.h +26 -0
  329. data/src/core/ext/xds/xds_channel_secure.cc +103 -0
  330. data/src/core/ext/xds/xds_client.cc +2114 -0
  331. data/src/core/ext/xds/xds_client.h +276 -0
  332. data/src/core/ext/xds/xds_client_stats.cc +115 -0
  333. data/src/core/ext/xds/xds_client_stats.h +211 -0
  334. data/src/core/lib/avl/avl.cc +1 -1
  335. data/src/core/lib/channel/channel_args.cc +52 -14
  336. data/src/core/lib/channel/channel_args.h +41 -3
  337. data/src/core/lib/channel/channel_stack.cc +1 -1
  338. data/src/core/lib/channel/channel_stack.h +38 -18
  339. data/src/core/lib/channel/channel_trace.cc +32 -45
  340. data/src/core/lib/channel/channel_trace.h +3 -3
  341. data/src/core/lib/channel/channelz.cc +377 -318
  342. data/src/core/lib/channel/channelz.h +128 -90
  343. data/src/core/lib/channel/channelz_registry.cc +123 -178
  344. data/src/core/lib/channel/channelz_registry.h +14 -32
  345. data/src/core/lib/channel/connected_channel.cc +28 -25
  346. data/src/core/lib/channel/context.h +2 -2
  347. data/src/core/lib/channel/handshaker.cc +18 -14
  348. data/src/core/lib/channel/handshaker.h +7 -6
  349. data/src/core/lib/channel/handshaker_factory.h +1 -3
  350. data/src/core/lib/channel/handshaker_registry.cc +9 -21
  351. data/src/core/lib/channel/handshaker_registry.h +3 -3
  352. data/src/core/lib/channel/status_util.cc +2 -3
  353. data/src/core/lib/compression/compression.cc +16 -11
  354. data/src/core/lib/compression/compression_args.cc +13 -6
  355. data/src/core/lib/compression/compression_args.h +3 -2
  356. data/src/core/lib/compression/compression_internal.cc +15 -11
  357. data/src/core/lib/compression/compression_internal.h +9 -1
  358. data/src/core/lib/compression/message_compress.cc +8 -3
  359. data/src/core/lib/compression/stream_compression.cc +3 -2
  360. data/src/core/lib/compression/stream_compression.h +2 -2
  361. data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
  362. data/src/core/lib/compression/stream_compression_identity.cc +5 -7
  363. data/src/core/lib/debug/stats.cc +21 -27
  364. data/src/core/lib/debug/stats.h +3 -1
  365. data/src/core/lib/debug/trace.h +3 -2
  366. data/src/core/lib/gpr/alloc.cc +4 -29
  367. data/src/core/lib/gpr/cpu_linux.cc +1 -1
  368. data/src/core/lib/gpr/env.h +1 -1
  369. data/src/core/lib/gpr/env_linux.cc +10 -21
  370. data/src/core/lib/gpr/env_posix.cc +0 -5
  371. data/src/core/lib/gpr/log_linux.cc +8 -10
  372. data/src/core/lib/gpr/log_posix.cc +7 -9
  373. data/src/core/lib/gpr/spinlock.h +2 -3
  374. data/src/core/lib/gpr/string.cc +25 -36
  375. data/src/core/lib/gpr/string.h +11 -19
  376. data/src/core/lib/gpr/sync_abseil.cc +116 -0
  377. data/src/core/lib/gpr/sync_posix.cc +10 -142
  378. data/src/core/lib/gpr/sync_windows.cc +4 -2
  379. data/src/core/lib/gpr/time.cc +4 -0
  380. data/src/core/lib/gpr/time_posix.cc +1 -1
  381. data/src/core/lib/gpr/time_precise.cc +123 -36
  382. data/src/core/lib/gpr/time_precise.h +37 -0
  383. data/src/core/lib/gprpp/arena.cc +3 -3
  384. data/src/core/lib/gprpp/arena.h +2 -3
  385. data/src/core/lib/gprpp/atomic.h +10 -6
  386. data/src/core/lib/gprpp/debug_location.h +3 -2
  387. data/src/core/lib/gprpp/fork.cc +19 -26
  388. data/src/core/lib/gprpp/fork.h +18 -3
  389. data/src/core/lib/gprpp/global_config.h +9 -0
  390. data/src/core/lib/gprpp/global_config_custom.h +1 -1
  391. data/src/core/lib/gprpp/global_config_env.cc +15 -13
  392. data/src/core/lib/gprpp/global_config_env.h +2 -2
  393. data/src/core/lib/gprpp/host_port.cc +112 -0
  394. data/src/core/lib/gprpp/host_port.h +56 -0
  395. data/src/core/lib/gprpp/map.h +16 -382
  396. data/src/core/lib/gprpp/memory.h +12 -75
  397. data/src/core/lib/gprpp/mpscq.cc +108 -0
  398. data/src/core/lib/gprpp/mpscq.h +98 -0
  399. data/src/core/lib/gprpp/orphanable.h +9 -14
  400. data/src/core/lib/gprpp/ref_counted.h +97 -44
  401. data/src/core/lib/gprpp/ref_counted_ptr.h +8 -1
  402. data/src/core/lib/gprpp/sync.h +9 -0
  403. data/src/core/lib/gprpp/thd.h +13 -6
  404. data/src/core/lib/gprpp/thd_posix.cc +29 -3
  405. data/src/core/lib/gprpp/thd_windows.cc +12 -4
  406. data/src/core/lib/http/format_request.cc +46 -65
  407. data/src/core/lib/http/httpcli.cc +18 -16
  408. data/src/core/lib/http/httpcli.h +2 -3
  409. data/src/core/lib/http/httpcli_security_connector.cc +27 -21
  410. data/src/core/lib/http/parser.cc +1 -1
  411. data/src/core/lib/http/parser.h +2 -3
  412. data/src/core/lib/iomgr/buffer_list.cc +45 -40
  413. data/src/core/lib/iomgr/buffer_list.h +27 -27
  414. data/src/core/lib/iomgr/call_combiner.cc +12 -12
  415. data/src/core/lib/iomgr/call_combiner.h +10 -8
  416. data/src/core/lib/iomgr/cfstream_handle.cc +11 -3
  417. data/src/core/lib/iomgr/cfstream_handle.h +11 -3
  418. data/src/core/lib/iomgr/closure.h +43 -141
  419. data/src/core/lib/iomgr/combiner.cc +46 -90
  420. data/src/core/lib/iomgr/combiner.h +30 -8
  421. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  422. data/src/core/lib/iomgr/endpoint.cc +5 -1
  423. data/src/core/lib/iomgr/endpoint.h +7 -3
  424. data/src/core/lib/iomgr/endpoint_cfstream.cc +41 -19
  425. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  426. data/src/core/lib/iomgr/endpoint_pair_posix.cc +11 -11
  427. data/src/core/lib/iomgr/error.cc +26 -19
  428. data/src/core/lib/iomgr/error.h +15 -8
  429. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  430. data/src/core/lib/iomgr/error_internal.h +1 -1
  431. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  432. data/src/core/lib/iomgr/ev_apple.h +43 -0
  433. data/src/core/lib/iomgr/ev_epoll1_linux.cc +48 -47
  434. data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -94
  435. data/src/core/lib/iomgr/ev_poll_posix.cc +42 -26
  436. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  437. data/src/core/lib/iomgr/ev_posix.h +3 -2
  438. data/src/core/lib/iomgr/ev_windows.cc +2 -2
  439. data/src/core/lib/iomgr/exec_ctx.cc +78 -21
  440. data/src/core/lib/iomgr/exec_ctx.h +27 -7
  441. data/src/core/lib/iomgr/executor.cc +25 -41
  442. data/src/core/lib/iomgr/executor.h +7 -7
  443. data/src/core/lib/iomgr/executor/mpmcqueue.cc +183 -0
  444. data/src/core/lib/iomgr/executor/mpmcqueue.h +175 -0
  445. data/src/core/lib/iomgr/executor/threadpool.cc +137 -0
  446. data/src/core/lib/iomgr/executor/threadpool.h +149 -0
  447. data/src/core/lib/iomgr/fork_posix.cc +8 -2
  448. data/src/core/lib/iomgr/iocp_windows.cc +2 -2
  449. data/src/core/lib/iomgr/iomgr.cc +4 -4
  450. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  451. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +87 -9
  452. data/src/core/lib/iomgr/iomgr_uv.cc +3 -0
  453. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  454. data/src/core/lib/iomgr/load_file.cc +1 -0
  455. data/src/core/lib/iomgr/lockfree_event.cc +13 -12
  456. data/src/core/lib/iomgr/parse_address.cc +238 -0
  457. data/src/core/lib/iomgr/parse_address.h +53 -0
  458. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +87 -0
  459. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +88 -0
  460. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  461. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  462. data/src/core/lib/iomgr/pollset_uv.h +32 -0
  463. data/src/core/lib/iomgr/pollset_windows.cc +16 -2
  464. data/src/core/lib/iomgr/port.h +10 -22
  465. data/src/core/lib/iomgr/python_util.h +46 -0
  466. data/src/core/lib/iomgr/resolve_address.h +4 -6
  467. data/src/core/lib/iomgr/resolve_address_custom.cc +49 -68
  468. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  469. data/src/core/lib/iomgr/resolve_address_posix.cc +20 -24
  470. data/src/core/lib/iomgr/resolve_address_windows.cc +22 -35
  471. data/src/core/lib/iomgr/resource_quota.cc +120 -110
  472. data/src/core/lib/iomgr/resource_quota.h +13 -9
  473. data/src/core/lib/iomgr/sockaddr_utils.cc +33 -36
  474. data/src/core/lib/iomgr/sockaddr_utils.h +12 -16
  475. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  476. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  477. data/src/core/lib/iomgr/socket_utils_common_posix.cc +140 -82
  478. data/src/core/lib/iomgr/socket_utils_posix.h +19 -0
  479. data/src/core/lib/iomgr/socket_windows.cc +6 -7
  480. data/src/core/lib/iomgr/socket_windows.h +1 -1
  481. data/src/core/lib/iomgr/tcp_client_cfstream.cc +18 -21
  482. data/src/core/lib/iomgr/tcp_client_custom.cc +9 -11
  483. data/src/core/lib/iomgr/tcp_client_posix.cc +47 -59
  484. data/src/core/lib/iomgr/tcp_client_posix.h +6 -6
  485. data/src/core/lib/iomgr/tcp_client_windows.cc +12 -13
  486. data/src/core/lib/iomgr/tcp_custom.cc +58 -36
  487. data/src/core/lib/iomgr/tcp_custom.h +4 -1
  488. data/src/core/lib/iomgr/tcp_posix.cc +697 -124
  489. data/src/core/lib/iomgr/tcp_server.cc +8 -4
  490. data/src/core/lib/iomgr/tcp_server.h +28 -5
  491. data/src/core/lib/iomgr/tcp_server_custom.cc +46 -41
  492. data/src/core/lib/iomgr/tcp_server_posix.cc +102 -46
  493. data/src/core/lib/iomgr/tcp_server_utils_posix.h +6 -4
  494. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +17 -19
  495. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -18
  496. data/src/core/lib/iomgr/tcp_server_windows.cc +33 -29
  497. data/src/core/lib/iomgr/tcp_uv.cc +8 -8
  498. data/src/core/lib/iomgr/tcp_windows.cc +49 -30
  499. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  500. data/src/core/lib/iomgr/timer.h +2 -1
  501. data/src/core/lib/iomgr/timer_custom.cc +7 -5
  502. data/src/core/lib/iomgr/timer_generic.cc +26 -24
  503. data/src/core/lib/iomgr/timer_generic.h +39 -0
  504. data/src/core/lib/iomgr/timer_heap.h +2 -3
  505. data/src/core/lib/iomgr/timer_manager.cc +8 -30
  506. data/src/core/lib/iomgr/timer_manager.h +2 -0
  507. data/src/core/lib/iomgr/udp_server.cc +53 -53
  508. data/src/core/lib/iomgr/udp_server.h +11 -14
  509. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  510. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  511. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  512. data/src/core/lib/iomgr/work_serializer.cc +155 -0
  513. data/src/core/lib/iomgr/work_serializer.h +65 -0
  514. data/src/core/lib/json/json.h +209 -68
  515. data/src/core/lib/json/json_reader.cc +508 -317
  516. data/src/core/lib/json/json_writer.cc +202 -110
  517. data/src/core/lib/profiling/basic_timers.cc +2 -2
  518. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  519. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  520. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  521. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  522. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  523. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
  524. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
  525. data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
  526. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  527. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
  528. data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
  529. data/src/core/lib/security/credentials/alts/alts_credentials.cc +10 -7
  530. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  531. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +45 -57
  532. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  533. data/src/core/lib/security/credentials/composite/composite_credentials.cc +26 -6
  534. data/src/core/lib/security/credentials/composite/composite_credentials.h +11 -4
  535. data/src/core/lib/security/credentials/credentials.h +31 -25
  536. data/src/core/lib/security/credentials/fake/fake_credentials.cc +9 -9
  537. data/src/core/lib/security/credentials/fake/fake_credentials.h +6 -1
  538. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  539. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +74 -56
  540. data/src/core/lib/security/credentials/iam/iam_credentials.cc +12 -10
  541. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  542. data/src/core/lib/security/credentials/jwt/json_token.cc +32 -58
  543. data/src/core/lib/security/credentials/jwt/json_token.h +5 -7
  544. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +19 -26
  545. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  546. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +153 -170
  547. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -6
  548. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -3
  549. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +332 -87
  550. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +27 -7
  551. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +31 -15
  552. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +4 -1
  553. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +43 -5
  554. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +12 -2
  555. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +70 -17
  556. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +118 -5
  557. data/src/core/lib/security/credentials/tls/tls_credentials.cc +128 -0
  558. data/src/core/lib/security/credentials/tls/tls_credentials.h +62 -0
  559. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +67 -32
  560. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +5 -0
  561. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +64 -47
  562. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +2 -2
  563. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +9 -5
  564. data/src/core/lib/security/security_connector/local/local_security_connector.cc +42 -16
  565. data/src/core/lib/security/security_connector/security_connector.cc +4 -1
  566. data/src/core/lib/security/security_connector/security_connector.h +22 -20
  567. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +55 -62
  568. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +8 -5
  569. data/src/core/lib/security/security_connector/ssl_utils.cc +150 -53
  570. data/src/core/lib/security/security_connector/ssl_utils.h +41 -17
  571. data/src/core/lib/security/security_connector/ssl_utils_config.cc +32 -0
  572. data/src/core/lib/security/security_connector/ssl_utils_config.h +30 -0
  573. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +606 -0
  574. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +183 -0
  575. data/src/core/lib/security/transport/auth_filters.h +0 -2
  576. data/src/core/lib/security/transport/client_auth_filter.cc +74 -28
  577. data/src/core/lib/security/transport/secure_endpoint.cc +16 -9
  578. data/src/core/lib/security/transport/security_handshaker.cc +103 -43
  579. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  580. data/src/core/lib/security/transport/server_auth_filter.cc +18 -17
  581. data/src/core/lib/security/util/json_util.cc +35 -15
  582. data/src/core/lib/security/util/json_util.h +5 -3
  583. data/src/core/lib/slice/b64.cc +3 -4
  584. data/src/core/lib/slice/b64.h +3 -4
  585. data/src/core/lib/slice/slice.cc +188 -73
  586. data/src/core/lib/slice/slice_buffer.cc +55 -26
  587. data/src/core/lib/slice/slice_intern.cc +164 -64
  588. data/src/core/lib/slice/slice_internal.h +110 -8
  589. data/src/core/lib/slice/slice_string_helpers.cc +10 -1
  590. data/src/core/lib/slice/slice_string_helpers.h +3 -1
  591. data/src/core/lib/slice/slice_utils.h +200 -0
  592. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  593. data/src/core/lib/surface/call.cc +166 -117
  594. data/src/core/lib/surface/call.h +8 -8
  595. data/src/core/lib/surface/call_log_batch.cc +51 -60
  596. data/src/core/lib/surface/channel.cc +188 -137
  597. data/src/core/lib/surface/channel.h +91 -11
  598. data/src/core/lib/surface/channel_ping.cc +3 -4
  599. data/src/core/lib/surface/completion_queue.cc +144 -111
  600. data/src/core/lib/surface/completion_queue.h +6 -3
  601. data/src/core/lib/surface/completion_queue_factory.cc +1 -1
  602. data/src/core/lib/surface/event_string.cc +18 -25
  603. data/src/core/lib/surface/event_string.h +3 -1
  604. data/src/core/lib/surface/init.cc +6 -2
  605. data/src/core/lib/surface/init_secure.cc +2 -2
  606. data/src/core/lib/surface/lame_client.cc +43 -30
  607. data/src/core/lib/surface/server.cc +1275 -1316
  608. data/src/core/lib/surface/server.h +373 -52
  609. data/src/core/lib/surface/validate_metadata.cc +18 -8
  610. data/src/core/lib/surface/validate_metadata.h +13 -2
  611. data/src/core/lib/surface/version.cc +2 -2
  612. data/src/core/lib/transport/authority_override.cc +38 -0
  613. data/src/core/lib/transport/authority_override.h +32 -0
  614. data/src/core/lib/transport/byte_stream.cc +5 -7
  615. data/src/core/lib/transport/byte_stream.h +13 -12
  616. data/src/core/lib/transport/connectivity_state.cc +118 -98
  617. data/src/core/lib/transport/connectivity_state.h +114 -50
  618. data/src/core/lib/transport/error_utils.cc +23 -1
  619. data/src/core/lib/transport/error_utils.h +6 -0
  620. data/src/core/lib/transport/metadata.cc +252 -57
  621. data/src/core/lib/transport/metadata.h +168 -80
  622. data/src/core/lib/transport/metadata_batch.cc +78 -16
  623. data/src/core/lib/transport/metadata_batch.h +40 -3
  624. data/src/core/lib/transport/static_metadata.cc +1169 -495
  625. data/src/core/lib/transport/static_metadata.h +279 -282
  626. data/src/core/lib/transport/status_conversion.cc +7 -15
  627. data/src/core/lib/transport/status_metadata.cc +8 -1
  628. data/src/core/lib/transport/status_metadata.h +18 -0
  629. data/src/core/lib/transport/timeout_encoding.cc +7 -0
  630. data/src/core/lib/transport/timeout_encoding.h +3 -2
  631. data/src/core/lib/transport/transport.cc +14 -13
  632. data/src/core/lib/transport/transport.h +48 -8
  633. data/src/core/lib/transport/transport_op_string.cc +67 -105
  634. data/src/core/lib/uri/uri_parser.cc +30 -35
  635. data/src/core/lib/uri/uri_parser.h +5 -4
  636. data/src/core/plugin_registry/grpc_plugin_registry.cc +36 -4
  637. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  638. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  639. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +414 -120
  640. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  641. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  642. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
  643. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +293 -61
  644. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +15 -5
  645. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +5 -0
  646. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +10 -6
  647. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +4 -3
  648. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +76 -48
  649. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +34 -26
  650. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  651. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  652. data/src/core/tsi/fake_transport_security.cc +22 -21
  653. data/src/core/tsi/fake_transport_security.h +2 -0
  654. data/src/core/tsi/local_transport_security.cc +8 -6
  655. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -6
  656. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -3
  657. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +11 -9
  658. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -13
  659. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -3
  660. data/src/core/tsi/ssl_transport_security.cc +345 -103
  661. data/src/core/tsi/ssl_transport_security.h +42 -11
  662. data/src/core/tsi/ssl_types.h +0 -2
  663. data/src/core/tsi/transport_security.cc +13 -0
  664. data/src/core/tsi/transport_security.h +6 -9
  665. data/src/core/tsi/transport_security_grpc.cc +7 -0
  666. data/src/core/tsi/transport_security_grpc.h +8 -3
  667. data/src/core/tsi/transport_security_interface.h +20 -3
  668. data/src/ruby/bin/math_pb.rb +5 -5
  669. data/src/ruby/bin/math_services_pb.rb +4 -4
  670. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  671. data/src/ruby/ext/grpc/ext-export.gcc +6 -0
  672. data/src/ruby/ext/grpc/extconf.rb +11 -2
  673. data/src/ruby/ext/grpc/rb_call.c +13 -4
  674. data/src/ruby/ext/grpc/rb_call.h +4 -0
  675. data/src/ruby/ext/grpc/rb_call_credentials.c +61 -13
  676. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  677. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  678. data/src/ruby/ext/grpc/rb_enable_cpp.cc +22 -0
  679. data/src/ruby/ext/grpc/rb_grpc.c +1 -42
  680. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -6
  681. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +28 -13
  682. data/src/ruby/lib/grpc.rb +2 -0
  683. data/src/ruby/lib/grpc/core/status_codes.rb +135 -0
  684. data/src/ruby/lib/grpc/errors.rb +107 -49
  685. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  686. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  687. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  688. data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
  689. data/src/ruby/lib/grpc/generic/rpc_server.rb +11 -12
  690. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  691. data/src/ruby/lib/grpc/google_rpc_status_utils.rb +9 -4
  692. data/src/ruby/lib/grpc/grpc.rb +1 -1
  693. data/src/ruby/lib/grpc/structs.rb +15 -0
  694. data/src/ruby/lib/grpc/version.rb +1 -1
  695. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  696. data/src/ruby/pb/grpc/health/v1/health_pb.rb +3 -3
  697. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  698. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -1
  699. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +39 -13
  700. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +43 -11
  701. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  702. data/src/ruby/spec/debug_message_spec.rb +134 -0
  703. data/src/ruby/spec/errors_spec.rb +1 -0
  704. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  705. data/src/ruby/spec/generic/service_spec.rb +2 -0
  706. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  707. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto +22 -0
  708. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  709. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +41 -0
  710. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  711. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  712. data/src/ruby/spec/pb/codegen/package_option_spec.rb +79 -29
  713. data/src/ruby/spec/support/services.rb +10 -4
  714. data/src/ruby/spec/testdata/ca.pem +18 -13
  715. data/src/ruby/spec/testdata/client.key +26 -14
  716. data/src/ruby/spec/testdata/client.pem +18 -12
  717. data/src/ruby/spec/testdata/server1.key +26 -14
  718. data/src/ruby/spec/testdata/server1.pem +20 -14
  719. data/src/ruby/spec/user_agent_spec.rb +74 -0
  720. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +159 -0
  721. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  722. data/third_party/abseil-cpp/absl/base/attributes.h +621 -0
  723. data/third_party/abseil-cpp/absl/base/call_once.h +226 -0
  724. data/third_party/abseil-cpp/absl/base/casts.h +184 -0
  725. data/third_party/abseil-cpp/absl/base/config.h +671 -0
  726. data/third_party/abseil-cpp/absl/base/const_init.h +76 -0
  727. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +129 -0
  728. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +389 -0
  729. data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
  730. data/third_party/abseil-cpp/absl/base/internal/bits.h +218 -0
  731. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +107 -0
  732. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +94 -0
  733. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  734. data/third_party/abseil-cpp/absl/base/internal/endian.h +266 -0
  735. data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  736. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  737. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  738. data/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
  739. data/third_party/abseil-cpp/absl/base/internal/identity.h +37 -0
  740. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +107 -0
  741. data/third_party/abseil-cpp/absl/base/internal/invoke.h +187 -0
  742. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  743. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  744. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +107 -0
  745. data/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
  746. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +240 -0
  747. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +183 -0
  748. data/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
  749. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +233 -0
  750. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +243 -0
  751. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
  752. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +66 -0
  753. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
  754. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
  755. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +93 -0
  756. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +37 -0
  757. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +416 -0
  758. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +66 -0
  759. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +271 -0
  760. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +152 -0
  761. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +259 -0
  762. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +108 -0
  763. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
  764. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +66 -0
  765. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +158 -0
  766. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +140 -0
  767. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +124 -0
  768. data/third_party/abseil-cpp/absl/base/log_severity.cc +27 -0
  769. data/third_party/abseil-cpp/absl/base/log_severity.h +121 -0
  770. data/third_party/abseil-cpp/absl/base/macros.h +220 -0
  771. data/third_party/abseil-cpp/absl/base/optimization.h +181 -0
  772. data/third_party/abseil-cpp/absl/base/options.h +211 -0
  773. data/third_party/abseil-cpp/absl/base/policy_checks.h +111 -0
  774. data/third_party/abseil-cpp/absl/base/port.h +26 -0
  775. data/third_party/abseil-cpp/absl/base/thread_annotations.h +280 -0
  776. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  777. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  778. data/third_party/abseil-cpp/absl/container/inlined_vector.h +848 -0
  779. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  780. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +265 -0
  781. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  782. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  783. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  784. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  785. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  786. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  787. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  788. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  789. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +892 -0
  790. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  791. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  792. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  793. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  794. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  795. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  796. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  797. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  798. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  799. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  800. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  801. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  802. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  803. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  804. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  805. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  806. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  807. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  808. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  809. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  810. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  811. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  812. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  813. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  814. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  815. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  816. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  817. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  818. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  819. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  820. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  821. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  822. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  823. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  824. data/third_party/abseil-cpp/absl/memory/memory.h +695 -0
  825. data/third_party/abseil-cpp/absl/meta/type_traits.h +759 -0
  826. data/third_party/abseil-cpp/absl/numeric/int128.cc +404 -0
  827. data/third_party/abseil-cpp/absl/numeric/int128.h +1091 -0
  828. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +302 -0
  829. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +308 -0
  830. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  831. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  832. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  833. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  834. data/third_party/abseil-cpp/absl/strings/ascii.cc +200 -0
  835. data/third_party/abseil-cpp/absl/strings/ascii.h +242 -0
  836. data/third_party/abseil-cpp/absl/strings/charconv.cc +984 -0
  837. data/third_party/abseil-cpp/absl/strings/charconv.h +119 -0
  838. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  839. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  840. data/third_party/abseil-cpp/absl/strings/escaping.cc +949 -0
  841. data/third_party/abseil-cpp/absl/strings/escaping.h +164 -0
  842. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +156 -0
  843. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +359 -0
  844. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +423 -0
  845. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
  846. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
  847. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  848. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +180 -0
  849. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +58 -0
  850. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +112 -0
  851. data/third_party/abseil-cpp/absl/strings/internal/memutil.h +148 -0
  852. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +36 -0
  853. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +89 -0
  854. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +73 -0
  855. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
  856. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +388 -0
  857. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +432 -0
  858. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +245 -0
  859. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +209 -0
  860. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +326 -0
  861. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +51 -0
  862. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +415 -0
  863. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +493 -0
  864. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +23 -0
  865. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
  866. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +104 -0
  867. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +334 -0
  868. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +333 -0
  869. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +314 -0
  870. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +455 -0
  871. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +53 -0
  872. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +50 -0
  873. data/third_party/abseil-cpp/absl/strings/match.cc +40 -0
  874. data/third_party/abseil-cpp/absl/strings/match.h +90 -0
  875. data/third_party/abseil-cpp/absl/strings/numbers.cc +965 -0
  876. data/third_party/abseil-cpp/absl/strings/numbers.h +266 -0
  877. data/third_party/abseil-cpp/absl/strings/str_cat.cc +246 -0
  878. data/third_party/abseil-cpp/absl/strings/str_cat.h +408 -0
  879. data/third_party/abseil-cpp/absl/strings/str_format.h +537 -0
  880. data/third_party/abseil-cpp/absl/strings/str_join.h +293 -0
  881. data/third_party/abseil-cpp/absl/strings/str_replace.cc +82 -0
  882. data/third_party/abseil-cpp/absl/strings/str_replace.h +219 -0
  883. data/third_party/abseil-cpp/absl/strings/str_split.cc +139 -0
  884. data/third_party/abseil-cpp/absl/strings/str_split.h +513 -0
  885. data/third_party/abseil-cpp/absl/strings/string_view.cc +235 -0
  886. data/third_party/abseil-cpp/absl/strings/string_view.h +622 -0
  887. data/third_party/abseil-cpp/absl/strings/strip.h +91 -0
  888. data/third_party/abseil-cpp/absl/strings/substitute.cc +171 -0
  889. data/third_party/abseil-cpp/absl/strings/substitute.h +693 -0
  890. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  891. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  892. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  893. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  894. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  895. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  896. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  897. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  898. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  899. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  900. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  901. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  902. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  903. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  904. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  905. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  906. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  907. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  908. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  909. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  910. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  911. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  912. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  913. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  914. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  915. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  916. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  917. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  918. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  919. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  920. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  921. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  922. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  923. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  924. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  925. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  926. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  927. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  928. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  929. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  930. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  931. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  932. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  933. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  934. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  935. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  936. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  937. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  938. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  939. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +48 -0
  940. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +78 -0
  941. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  942. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  943. data/third_party/abseil-cpp/absl/types/internal/optional.h +396 -0
  944. data/third_party/abseil-cpp/absl/types/internal/span.h +128 -0
  945. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  946. data/third_party/abseil-cpp/absl/types/optional.h +776 -0
  947. data/third_party/abseil-cpp/absl/types/span.h +713 -0
  948. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  949. data/third_party/abseil-cpp/absl/utility/utility.h +350 -0
  950. data/third_party/boringssl-with-bazel/err_data.c +1451 -0
  951. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +271 -0
  952. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +123 -0
  953. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +93 -0
  954. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +87 -0
  955. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +195 -0
  956. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_gentm.c +0 -0
  957. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +88 -0
  958. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +420 -0
  959. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +305 -0
  960. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +286 -0
  961. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_octet.c +0 -0
  962. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_print.c +0 -0
  963. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +313 -0
  964. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +212 -0
  965. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +151 -0
  966. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utctm.c +0 -0
  967. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utf8.c +0 -0
  968. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +446 -0
  969. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_locl.h +0 -0
  970. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_par.c +0 -0
  971. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +105 -0
  972. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +93 -0
  973. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +97 -0
  974. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +91 -0
  975. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_dec.c +0 -0
  976. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +664 -0
  977. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_fre.c +0 -0
  978. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_new.c +0 -0
  979. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_typ.c +0 -0
  980. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_utl.c +0 -0
  981. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/time_support.c +0 -0
  982. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +466 -0
  983. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +700 -0
  984. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio_mem.c +0 -0
  985. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +545 -0
  986. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +279 -0
  987. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +317 -0
  988. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/hexdump.c +0 -0
  989. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/internal.h +0 -0
  990. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +488 -0
  991. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/printf.c +0 -0
  992. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +206 -0
  993. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +118 -0
  994. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/bn_asn1.c +0 -0
  995. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +470 -0
  996. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +172 -0
  997. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/asn1_compat.c +0 -0
  998. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +265 -0
  999. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +719 -0
  1000. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +688 -0
  1001. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +96 -0
  1002. data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +155 -0
  1003. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +184 -0
  1004. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +45 -0
  1005. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +143 -0
  1006. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +152 -0
  1007. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c +447 -0
  1008. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +283 -0
  1009. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +891 -0
  1010. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +418 -0
  1011. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_null.c +0 -0
  1012. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc2.c +0 -0
  1013. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc4.c +0 -0
  1014. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +688 -0
  1015. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/internal.h +0 -0
  1016. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +492 -0
  1017. data/third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c +278 -0
  1018. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +810 -0
  1019. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf_def.h +0 -0
  1020. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/internal.h +0 -0
  1021. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-fuchsia.c +0 -0
  1022. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-linux.c +0 -0
  1023. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +220 -0
  1024. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.h +201 -0
  1025. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm.c +0 -0
  1026. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +291 -0
  1027. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-ppc64le.c +0 -0
  1028. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +226 -0
  1029. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +2159 -0
  1030. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +7872 -0
  1031. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +146 -0
  1032. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +539 -0
  1033. data/third_party/boringssl-with-bazel/src/crypto/dh/check.c +217 -0
  1034. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +533 -0
  1035. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/dh_asn1.c +0 -0
  1036. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/params.c +0 -0
  1037. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/digest_extra/digest_extra.c +0 -0
  1038. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +980 -0
  1039. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dsa/dsa_asn1.c +0 -0
  1040. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +574 -0
  1041. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +95 -0
  1042. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
  1043. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
  1044. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +124 -0
  1045. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +267 -0
  1046. data/third_party/boringssl-with-bazel/src/crypto/engine/engine.c +99 -0
  1047. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +850 -0
  1048. data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +58 -0
  1049. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/digestsign.c +0 -0
  1050. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +443 -0
  1051. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +547 -0
  1052. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +484 -0
  1053. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +269 -0
  1054. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +273 -0
  1055. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +286 -0
  1056. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +255 -0
  1057. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +104 -0
  1058. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +221 -0
  1059. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +648 -0
  1060. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +194 -0
  1061. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +110 -0
  1062. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +248 -0
  1063. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/pbkdf.c +0 -0
  1064. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/print.c +0 -0
  1065. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +213 -0
  1066. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/sign.c +0 -0
  1067. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ex_data.c +0 -0
  1068. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
  1069. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
  1070. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +238 -0
  1071. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +236 -0
  1072. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +122 -0
  1073. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +263 -0
  1074. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/add.c +0 -0
  1075. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/asm/x86_64-gcc.c +0 -0
  1076. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +445 -0
  1077. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bytes.c +0 -0
  1078. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +200 -0
  1079. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +236 -0
  1080. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +886 -0
  1081. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +87 -0
  1082. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1288 -0
  1083. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +378 -0
  1084. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  1085. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/generic.c +0 -0
  1086. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +704 -0
  1087. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/jacobi.c +0 -0
  1088. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +502 -0
  1089. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +186 -0
  1090. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +749 -0
  1091. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +1068 -0
  1092. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +341 -0
  1093. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +226 -0
  1094. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +104 -0
  1095. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +364 -0
  1096. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/sqrt.c +0 -0
  1097. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/aead.c +0 -0
  1098. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +620 -0
  1099. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +1302 -0
  1100. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c +237 -0
  1101. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +128 -0
  1102. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +89 -0
  1103. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/des.c +0 -0
  1104. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/internal.h +0 -0
  1105. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +271 -0
  1106. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +296 -0
  1107. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/internal.h +0 -0
  1108. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +268 -0
  1109. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +1252 -0
  1110. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +465 -0
  1111. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +524 -0
  1112. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +100 -0
  1113. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +776 -0
  1114. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +328 -0
  1115. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +1180 -0
  1116. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
  1117. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +633 -0
  1118. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h +153 -0
  1119. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
  1120. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  1121. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
  1122. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +357 -0
  1123. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
  1124. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +255 -0
  1125. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +270 -0
  1126. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  1127. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +328 -0
  1128. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +32 -0
  1129. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/hmac/hmac.c +0 -0
  1130. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +29 -0
  1131. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +256 -0
  1132. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h +37 -0
  1133. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +301 -0
  1134. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +167 -0
  1135. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +202 -0
  1136. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +200 -0
  1137. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +729 -0
  1138. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
  1139. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +441 -0
  1140. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +96 -0
  1141. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/polyval.c +0 -0
  1142. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +202 -0
  1143. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  1144. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  1145. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  1146. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +163 -0
  1147. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +378 -0
  1148. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +391 -0
  1149. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +243 -0
  1150. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +127 -0
  1151. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +695 -0
  1152. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +898 -0
  1153. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +1358 -0
  1154. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +716 -0
  1155. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +53 -0
  1156. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1-altivec.c +0 -0
  1157. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +371 -0
  1158. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +343 -0
  1159. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +544 -0
  1160. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/internal.h +0 -0
  1161. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/kdf.c +0 -0
  1162. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hkdf/hkdf.c +0 -0
  1163. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
  1164. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
  1165. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +2100 -0
  1166. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +61 -0
  1167. data/third_party/boringssl-with-bazel/src/crypto/internal.h +834 -0
  1168. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +348 -0
  1169. data/third_party/boringssl-with-bazel/src/crypto/mem.c +373 -0
  1170. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +549 -0
  1171. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +11585 -0
  1172. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj_xref.c +0 -0
  1173. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +261 -0
  1174. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +360 -0
  1175. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +777 -0
  1176. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +87 -0
  1177. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +257 -0
  1178. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +218 -0
  1179. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_x509.c +0 -0
  1180. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_xaux.c +0 -0
  1181. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/internal.h +0 -0
  1182. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +159 -0
  1183. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +385 -0
  1184. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +138 -0
  1185. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +316 -0
  1186. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +530 -0
  1187. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1336 -0
  1188. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/internal.h +0 -0
  1189. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +318 -0
  1190. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +305 -0
  1191. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +856 -0
  1192. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +45 -0
  1193. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +220 -0
  1194. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +52 -0
  1195. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/forkunsafe.c +0 -0
  1196. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +30 -0
  1197. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/rand_extra.c +0 -0
  1198. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +69 -0
  1199. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rc4/rc4.c +0 -0
  1200. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_c11.c +0 -0
  1201. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +53 -0
  1202. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_asn1.c +0 -0
  1203. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c +22 -0
  1204. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +82 -0
  1205. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +431 -0
  1206. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread.c +0 -0
  1207. data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +59 -0
  1208. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +210 -0
  1209. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +260 -0
  1210. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +249 -0
  1211. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1227 -0
  1212. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +682 -0
  1213. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_digest.c +0 -0
  1214. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_sign.c +0 -0
  1215. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +653 -0
  1216. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +114 -0
  1217. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +161 -0
  1218. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +842 -0
  1219. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +458 -0
  1220. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +275 -0
  1221. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/charmap.h +0 -0
  1222. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/i2d_pr.c +0 -0
  1223. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/internal.h +0 -0
  1224. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/rsa_pss.c +0 -0
  1225. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +125 -0
  1226. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +244 -0
  1227. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +544 -0
  1228. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509a.c +0 -0
  1229. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/vpm_int.h +0 -0
  1230. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +90 -0
  1231. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_att.c +0 -0
  1232. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +483 -0
  1233. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_d2.c +0 -0
  1234. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +103 -0
  1235. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_ext.c +0 -0
  1236. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +834 -0
  1237. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +198 -0
  1238. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +116 -0
  1239. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +351 -0
  1240. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +226 -0
  1241. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +329 -0
  1242. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +204 -0
  1243. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_v3.c +0 -0
  1244. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +2506 -0
  1245. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +671 -0
  1246. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +235 -0
  1247. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +389 -0
  1248. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509rset.c +0 -0
  1249. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509spki.c +0 -0
  1250. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_algor.c +0 -0
  1251. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +399 -0
  1252. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_attrib.c +0 -0
  1253. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +563 -0
  1254. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_exten.c +0 -0
  1255. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_info.c +0 -0
  1256. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_name.c +0 -0
  1257. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pkey.c +0 -0
  1258. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +214 -0
  1259. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_req.c +0 -0
  1260. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +89 -0
  1261. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_spki.c +0 -0
  1262. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_val.c +0 -0
  1263. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +356 -0
  1264. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509a.c +0 -0
  1265. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +141 -0
  1266. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +61 -0
  1267. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +286 -0
  1268. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_data.c +0 -0
  1269. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_int.h +0 -0
  1270. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_lib.c +0 -0
  1271. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_map.c +0 -0
  1272. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +189 -0
  1273. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +842 -0
  1274. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +207 -0
  1275. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akeya.c +0 -0
  1276. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +629 -0
  1277. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bcons.c +0 -0
  1278. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bitst.c +0 -0
  1279. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +463 -0
  1280. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +503 -0
  1281. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_crld.c +0 -0
  1282. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +100 -0
  1283. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_extku.c +0 -0
  1284. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +246 -0
  1285. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ia5.c +0 -0
  1286. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +218 -0
  1287. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_int.c +0 -0
  1288. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +371 -0
  1289. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ncons.c +0 -0
  1290. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +68 -0
  1291. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +288 -0
  1292. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcia.c +0 -0
  1293. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcons.c +0 -0
  1294. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pku.c +0 -0
  1295. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pmaps.c +0 -0
  1296. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_prn.c +0 -0
  1297. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +882 -0
  1298. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +155 -0
  1299. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_sxnet.c +0 -0
  1300. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1395 -0
  1301. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +459 -0
  1302. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +207 -0
  1303. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +173 -0
  1304. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +911 -0
  1305. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1_mac.h +0 -0
  1306. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1t.h +0 -0
  1307. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +575 -0
  1308. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +190 -0
  1309. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +933 -0
  1310. data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +93 -0
  1311. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1057 -0
  1312. data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +137 -0
  1313. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buffer.h +0 -0
  1314. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +561 -0
  1315. data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +96 -0
  1316. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/chacha.h +0 -0
  1317. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +638 -0
  1318. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +91 -0
  1319. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +180 -0
  1320. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +212 -0
  1321. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +149 -0
  1322. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +201 -0
  1323. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/des.h +0 -0
  1324. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +319 -0
  1325. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +331 -0
  1326. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +457 -0
  1327. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dtls1.h +0 -0
  1328. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +18 -0
  1329. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +424 -0
  1330. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +372 -0
  1331. data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +118 -0
  1332. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +205 -0
  1333. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +109 -0
  1334. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +465 -0
  1335. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1119 -0
  1336. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ex_data.h +0 -0
  1337. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hkdf.h +0 -0
  1338. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +186 -0
  1339. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +100 -0
  1340. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/is_boringssl.h +0 -0
  1341. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +282 -0
  1342. data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +108 -0
  1343. data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +109 -0
  1344. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +175 -0
  1345. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +4259 -0
  1346. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +236 -0
  1347. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj_mac.h +0 -0
  1348. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/objects.h +0 -0
  1349. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslconf.h +0 -0
  1350. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslv.h +0 -0
  1351. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ossl_typ.h +0 -0
  1352. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +435 -0
  1353. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs12.h +0 -0
  1354. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +215 -0
  1355. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +269 -0
  1356. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +49 -0
  1357. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +102 -0
  1358. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +111 -0
  1359. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rc4.h +0 -0
  1360. data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +108 -0
  1361. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +818 -0
  1362. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/safestack.h +0 -0
  1363. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +294 -0
  1364. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +37 -0
  1365. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +199 -0
  1366. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/srtp.h +0 -0
  1367. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +5247 -0
  1368. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +333 -0
  1369. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +542 -0
  1370. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +191 -0
  1371. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +631 -0
  1372. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +282 -0
  1373. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +90 -0
  1374. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1292 -0
  1375. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +681 -0
  1376. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +831 -0
  1377. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/bio_ssl.cc +0 -0
  1378. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +837 -0
  1379. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +268 -0
  1380. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +273 -0
  1381. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +232 -0
  1382. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +200 -0
  1383. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +353 -0
  1384. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +675 -0
  1385. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +710 -0
  1386. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1890 -0
  1387. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1814 -0
  1388. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3579 -0
  1389. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +724 -0
  1390. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +221 -0
  1391. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +458 -0
  1392. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +432 -0
  1393. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +856 -0
  1394. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +306 -0
  1395. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +1016 -0
  1396. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +1718 -0
  1397. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +585 -0
  1398. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +397 -0
  1399. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +3053 -0
  1400. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +835 -0
  1401. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +1313 -0
  1402. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +230 -0
  1403. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +277 -0
  1404. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +394 -0
  1405. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +1358 -0
  1406. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +386 -0
  1407. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +3895 -0
  1408. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +689 -0
  1409. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1027 -0
  1410. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +513 -0
  1411. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1104 -0
  1412. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +317 -0
  1413. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +705 -0
  1414. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +981 -0
  1415. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +619 -0
  1416. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
  1417. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1226 -0
  1418. data/third_party/re2/re2/bitmap256.h +117 -0
  1419. data/third_party/re2/re2/bitstate.cc +385 -0
  1420. data/third_party/re2/re2/compile.cc +1279 -0
  1421. data/third_party/re2/re2/dfa.cc +2130 -0
  1422. data/third_party/re2/re2/filtered_re2.cc +121 -0
  1423. data/third_party/re2/re2/filtered_re2.h +109 -0
  1424. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  1425. data/third_party/re2/re2/nfa.cc +713 -0
  1426. data/third_party/re2/re2/onepass.cc +623 -0
  1427. data/third_party/re2/re2/parse.cc +2464 -0
  1428. data/third_party/re2/re2/perl_groups.cc +119 -0
  1429. data/third_party/re2/re2/pod_array.h +55 -0
  1430. data/third_party/re2/re2/prefilter.cc +710 -0
  1431. data/third_party/re2/re2/prefilter.h +108 -0
  1432. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  1433. data/third_party/re2/re2/prefilter_tree.h +139 -0
  1434. data/third_party/re2/re2/prog.cc +988 -0
  1435. data/third_party/re2/re2/prog.h +436 -0
  1436. data/third_party/re2/re2/re2.cc +1362 -0
  1437. data/third_party/re2/re2/re2.h +1002 -0
  1438. data/third_party/re2/re2/regexp.cc +980 -0
  1439. data/third_party/re2/re2/regexp.h +659 -0
  1440. data/third_party/re2/re2/set.cc +154 -0
  1441. data/third_party/re2/re2/set.h +80 -0
  1442. data/third_party/re2/re2/simplify.cc +657 -0
  1443. data/third_party/re2/re2/sparse_array.h +392 -0
  1444. data/third_party/re2/re2/sparse_set.h +264 -0
  1445. data/third_party/re2/re2/stringpiece.cc +65 -0
  1446. data/third_party/re2/re2/stringpiece.h +210 -0
  1447. data/third_party/re2/re2/tostring.cc +351 -0
  1448. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  1449. data/third_party/re2/re2/unicode_casefold.h +78 -0
  1450. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  1451. data/third_party/re2/re2/unicode_groups.h +67 -0
  1452. data/third_party/re2/re2/walker-inl.h +246 -0
  1453. data/third_party/re2/util/benchmark.h +156 -0
  1454. data/third_party/re2/util/flags.h +26 -0
  1455. data/third_party/re2/util/logging.h +109 -0
  1456. data/third_party/re2/util/malloc_counter.h +19 -0
  1457. data/third_party/re2/util/mix.h +41 -0
  1458. data/third_party/re2/util/mutex.h +148 -0
  1459. data/third_party/re2/util/pcre.cc +1025 -0
  1460. data/third_party/re2/util/pcre.h +681 -0
  1461. data/third_party/re2/util/rune.cc +260 -0
  1462. data/third_party/re2/util/strutil.cc +149 -0
  1463. data/third_party/re2/util/strutil.h +21 -0
  1464. data/third_party/re2/util/test.h +50 -0
  1465. data/third_party/re2/util/utf.h +44 -0
  1466. data/third_party/re2/util/util.h +42 -0
  1467. data/third_party/upb/upb/decode.c +621 -0
  1468. data/third_party/upb/upb/decode.h +21 -0
  1469. data/third_party/upb/upb/encode.c +420 -0
  1470. data/third_party/upb/upb/encode.h +21 -0
  1471. data/third_party/upb/upb/msg.c +177 -0
  1472. data/third_party/upb/upb/msg.h +473 -0
  1473. data/third_party/upb/upb/port.c +26 -0
  1474. data/third_party/upb/upb/port_def.inc +179 -0
  1475. data/third_party/upb/upb/port_undef.inc +28 -0
  1476. data/third_party/upb/upb/table.c +880 -0
  1477. data/third_party/upb/upb/table.int.h +466 -0
  1478. data/third_party/upb/upb/upb.c +287 -0
  1479. data/third_party/upb/upb/upb.h +308 -0
  1480. data/third_party/upb/upb/upb.hpp +88 -0
  1481. metadata +1054 -526
  1482. data/src/boringssl/err_data.c +0 -1362
  1483. data/src/core/ext/filters/client_channel/connector.cc +0 -41
  1484. data/src/core/ext/filters/client_channel/health/health.pb.c +0 -23
  1485. data/src/core/ext/filters/client_channel/health/health.pb.h +0 -73
  1486. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +0 -19
  1487. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +0 -54
  1488. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +0 -19
  1489. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +0 -54
  1490. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +0 -89
  1491. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +0 -164
  1492. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -2249
  1493. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h +0 -36
  1494. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -61
  1495. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc +0 -85
  1496. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h +0 -72
  1497. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +0 -307
  1498. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -89
  1499. data/src/core/ext/filters/client_channel/parse_address.cc +0 -234
  1500. data/src/core/ext/filters/client_channel/parse_address.h +0 -53
  1501. data/src/core/ext/filters/client_channel/proxy_mapper.cc +0 -48
  1502. data/src/core/lib/gpr/host_port.cc +0 -98
  1503. data/src/core/lib/gpr/host_port.h +0 -43
  1504. data/src/core/lib/gpr/mpscq.cc +0 -117
  1505. data/src/core/lib/gpr/mpscq.h +0 -88
  1506. data/src/core/lib/gprpp/abstract.h +0 -37
  1507. data/src/core/lib/gprpp/inlined_vector.h +0 -200
  1508. data/src/core/lib/gprpp/optional.h +0 -48
  1509. data/src/core/lib/gprpp/pair.h +0 -38
  1510. data/src/core/lib/json/json.cc +0 -94
  1511. data/src/core/lib/json/json_common.h +0 -34
  1512. data/src/core/lib/json/json_reader.h +0 -146
  1513. data/src/core/lib/json/json_string.cc +0 -367
  1514. data/src/core/lib/json/json_writer.h +0 -84
  1515. data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +0 -129
  1516. data/src/core/lib/security/credentials/tls/spiffe_credentials.h +0 -62
  1517. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +0 -426
  1518. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +0 -122
  1519. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  1520. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  1521. data/src/core/lib/slice/slice_hash_table.h +0 -205
  1522. data/src/core/lib/slice/slice_weak_hash_table.h +0 -109
  1523. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +0 -520
  1524. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +0 -323
  1525. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +0 -145
  1526. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +0 -149
  1527. data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -47
  1528. data/src/core/tsi/alts/handshaker/altscontext.pb.h +0 -63
  1529. data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -122
  1530. data/src/core/tsi/alts/handshaker/handshaker.pb.h +0 -254
  1531. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -49
  1532. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +0 -78
  1533. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3006
  1534. data/third_party/boringssl/crypto/asn1/a_bitstr.c +0 -271
  1535. data/third_party/boringssl/crypto/asn1/a_bool.c +0 -110
  1536. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +0 -297
  1537. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -111
  1538. data/third_party/boringssl/crypto/asn1/a_enum.c +0 -195
  1539. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +0 -150
  1540. data/third_party/boringssl/crypto/asn1/a_int.c +0 -479
  1541. data/third_party/boringssl/crypto/asn1/a_mbstr.c +0 -411
  1542. data/third_party/boringssl/crypto/asn1/a_object.c +0 -275
  1543. data/third_party/boringssl/crypto/asn1/a_strnid.c +0 -312
  1544. data/third_party/boringssl/crypto/asn1/a_time.c +0 -213
  1545. data/third_party/boringssl/crypto/asn1/a_type.c +0 -151
  1546. data/third_party/boringssl/crypto/asn1/asn1_lib.c +0 -442
  1547. data/third_party/boringssl/crypto/asn1/asn_pack.c +0 -105
  1548. data/third_party/boringssl/crypto/asn1/f_enum.c +0 -93
  1549. data/third_party/boringssl/crypto/asn1/f_int.c +0 -97
  1550. data/third_party/boringssl/crypto/asn1/f_string.c +0 -91
  1551. data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -662
  1552. data/third_party/boringssl/crypto/base64/base64.c +0 -466
  1553. data/third_party/boringssl/crypto/bio/bio.c +0 -636
  1554. data/third_party/boringssl/crypto/bio/connect.c +0 -542
  1555. data/third_party/boringssl/crypto/bio/fd.c +0 -276
  1556. data/third_party/boringssl/crypto/bio/file.c +0 -315
  1557. data/third_party/boringssl/crypto/bio/pair.c +0 -489
  1558. data/third_party/boringssl/crypto/bio/socket.c +0 -202
  1559. data/third_party/boringssl/crypto/bio/socket_helper.c +0 -114
  1560. data/third_party/boringssl/crypto/bn_extra/convert.c +0 -466
  1561. data/third_party/boringssl/crypto/buf/buf.c +0 -231
  1562. data/third_party/boringssl/crypto/bytestring/ber.c +0 -261
  1563. data/third_party/boringssl/crypto/bytestring/cbb.c +0 -668
  1564. data/third_party/boringssl/crypto/bytestring/cbs.c +0 -618
  1565. data/third_party/boringssl/crypto/bytestring/internal.h +0 -75
  1566. data/third_party/boringssl/crypto/chacha/chacha.c +0 -167
  1567. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +0 -114
  1568. data/third_party/boringssl/crypto/cipher_extra/derive_key.c +0 -152
  1569. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +0 -203
  1570. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +0 -281
  1571. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +0 -867
  1572. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +0 -326
  1573. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  1574. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +0 -680
  1575. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +0 -482
  1576. data/third_party/boringssl/crypto/cmac/cmac.c +0 -241
  1577. data/third_party/boringssl/crypto/conf/conf.c +0 -803
  1578. data/third_party/boringssl/crypto/cpu-arm-linux.c +0 -363
  1579. data/third_party/boringssl/crypto/cpu-intel.c +0 -288
  1580. data/third_party/boringssl/crypto/crypto.c +0 -198
  1581. data/third_party/boringssl/crypto/curve25519/spake25519.c +0 -539
  1582. data/third_party/boringssl/crypto/dh/check.c +0 -217
  1583. data/third_party/boringssl/crypto/dh/dh.c +0 -519
  1584. data/third_party/boringssl/crypto/dsa/dsa.c +0 -946
  1585. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +0 -562
  1586. data/third_party/boringssl/crypto/ecdh/ecdh.c +0 -162
  1587. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +0 -275
  1588. data/third_party/boringssl/crypto/engine/engine.c +0 -98
  1589. data/third_party/boringssl/crypto/err/err.c +0 -847
  1590. data/third_party/boringssl/crypto/err/internal.h +0 -58
  1591. data/third_party/boringssl/crypto/evp/evp.c +0 -362
  1592. data/third_party/boringssl/crypto/evp/evp_asn1.c +0 -337
  1593. data/third_party/boringssl/crypto/evp/evp_ctx.c +0 -446
  1594. data/third_party/boringssl/crypto/evp/internal.h +0 -252
  1595. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +0 -268
  1596. data/third_party/boringssl/crypto/evp/p_ec.c +0 -239
  1597. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +0 -256
  1598. data/third_party/boringssl/crypto/evp/p_ed25519.c +0 -71
  1599. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +0 -190
  1600. data/third_party/boringssl/crypto/evp/p_rsa.c +0 -634
  1601. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +0 -189
  1602. data/third_party/boringssl/crypto/evp/scrypt.c +0 -209
  1603. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +0 -1100
  1604. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +0 -100
  1605. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +0 -138
  1606. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +0 -112
  1607. data/third_party/boringssl/crypto/fipsmodule/bcm.c +0 -148
  1608. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +0 -428
  1609. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +0 -200
  1610. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +0 -303
  1611. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +0 -895
  1612. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +0 -1356
  1613. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -683
  1614. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +0 -573
  1615. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +0 -526
  1616. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +0 -185
  1617. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +0 -876
  1618. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +0 -1154
  1619. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +0 -351
  1620. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +0 -231
  1621. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +0 -33
  1622. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +0 -364
  1623. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +0 -615
  1624. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +0 -1437
  1625. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +0 -233
  1626. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +0 -129
  1627. data/third_party/boringssl/crypto/fipsmodule/delocate.h +0 -88
  1628. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +0 -256
  1629. data/third_party/boringssl/crypto/fipsmodule/digest/digests.c +0 -280
  1630. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +0 -268
  1631. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +0 -974
  1632. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +0 -453
  1633. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +0 -270
  1634. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +0 -337
  1635. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +0 -373
  1636. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +0 -1104
  1637. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +0 -9503
  1638. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +0 -447
  1639. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +0 -117
  1640. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +0 -1046
  1641. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +0 -104
  1642. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +0 -354
  1643. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +0 -458
  1644. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +0 -27
  1645. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +0 -254
  1646. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +0 -298
  1647. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +0 -211
  1648. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  1649. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +0 -234
  1650. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +0 -220
  1651. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +0 -1063
  1652. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +0 -388
  1653. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +0 -95
  1654. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +0 -202
  1655. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +0 -92
  1656. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +0 -358
  1657. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +0 -302
  1658. data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +0 -239
  1659. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +0 -126
  1660. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +0 -692
  1661. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +0 -875
  1662. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +0 -1218
  1663. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +0 -581
  1664. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +0 -375
  1665. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +0 -337
  1666. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +0 -608
  1667. data/third_party/boringssl/crypto/internal.h +0 -739
  1668. data/third_party/boringssl/crypto/lhash/lhash.c +0 -336
  1669. data/third_party/boringssl/crypto/mem.c +0 -235
  1670. data/third_party/boringssl/crypto/obj/obj.c +0 -554
  1671. data/third_party/boringssl/crypto/obj/obj_dat.h +0 -6244
  1672. data/third_party/boringssl/crypto/pem/pem_all.c +0 -262
  1673. data/third_party/boringssl/crypto/pem/pem_info.c +0 -379
  1674. data/third_party/boringssl/crypto/pem/pem_lib.c +0 -776
  1675. data/third_party/boringssl/crypto/pem/pem_oth.c +0 -88
  1676. data/third_party/boringssl/crypto/pem/pem_pk8.c +0 -258
  1677. data/third_party/boringssl/crypto/pem/pem_pkey.c +0 -227
  1678. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +0 -166
  1679. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +0 -233
  1680. data/third_party/boringssl/crypto/pkcs8/internal.h +0 -120
  1681. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +0 -307
  1682. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +0 -513
  1683. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +0 -789
  1684. data/third_party/boringssl/crypto/poly1305/poly1305.c +0 -318
  1685. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +0 -304
  1686. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +0 -839
  1687. data/third_party/boringssl/crypto/pool/internal.h +0 -45
  1688. data/third_party/boringssl/crypto/pool/pool.c +0 -200
  1689. data/third_party/boringssl/crypto/rand_extra/deterministic.c +0 -48
  1690. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +0 -43
  1691. data/third_party/boringssl/crypto/rand_extra/windows.c +0 -53
  1692. data/third_party/boringssl/crypto/refcount_lock.c +0 -53
  1693. data/third_party/boringssl/crypto/stack/stack.c +0 -380
  1694. data/third_party/boringssl/crypto/thread_none.c +0 -59
  1695. data/third_party/boringssl/crypto/thread_pthread.c +0 -206
  1696. data/third_party/boringssl/crypto/thread_win.c +0 -237
  1697. data/third_party/boringssl/crypto/x509/a_strex.c +0 -633
  1698. data/third_party/boringssl/crypto/x509/a_verify.c +0 -115
  1699. data/third_party/boringssl/crypto/x509/algorithm.c +0 -153
  1700. data/third_party/boringssl/crypto/x509/asn1_gen.c +0 -841
  1701. data/third_party/boringssl/crypto/x509/by_dir.c +0 -451
  1702. data/third_party/boringssl/crypto/x509/by_file.c +0 -274
  1703. data/third_party/boringssl/crypto/x509/t_crl.c +0 -128
  1704. data/third_party/boringssl/crypto/x509/t_req.c +0 -246
  1705. data/third_party/boringssl/crypto/x509/t_x509.c +0 -547
  1706. data/third_party/boringssl/crypto/x509/x509.c +0 -157
  1707. data/third_party/boringssl/crypto/x509/x509_cmp.c +0 -477
  1708. data/third_party/boringssl/crypto/x509/x509_def.c +0 -103
  1709. data/third_party/boringssl/crypto/x509/x509_lu.c +0 -725
  1710. data/third_party/boringssl/crypto/x509/x509_obj.c +0 -198
  1711. data/third_party/boringssl/crypto/x509/x509_r2x.c +0 -117
  1712. data/third_party/boringssl/crypto/x509/x509_req.c +0 -322
  1713. data/third_party/boringssl/crypto/x509/x509_set.c +0 -164
  1714. data/third_party/boringssl/crypto/x509/x509_trs.c +0 -326
  1715. data/third_party/boringssl/crypto/x509/x509_txt.c +0 -205
  1716. data/third_party/boringssl/crypto/x509/x509_vfy.c +0 -2476
  1717. data/third_party/boringssl/crypto/x509/x509_vpm.c +0 -670
  1718. data/third_party/boringssl/crypto/x509/x509cset.c +0 -170
  1719. data/third_party/boringssl/crypto/x509/x509name.c +0 -389
  1720. data/third_party/boringssl/crypto/x509/x_all.c +0 -501
  1721. data/third_party/boringssl/crypto/x509/x_crl.c +0 -541
  1722. data/third_party/boringssl/crypto/x509/x_pubkey.c +0 -368
  1723. data/third_party/boringssl/crypto/x509/x_sig.c +0 -69
  1724. data/third_party/boringssl/crypto/x509/x_x509.c +0 -328
  1725. data/third_party/boringssl/crypto/x509v3/ext_dat.h +0 -143
  1726. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +0 -284
  1727. data/third_party/boringssl/crypto/x509v3/pcy_node.c +0 -188
  1728. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +0 -840
  1729. data/third_party/boringssl/crypto/x509v3/v3_akey.c +0 -204
  1730. data/third_party/boringssl/crypto/x509v3/v3_alt.c +0 -623
  1731. data/third_party/boringssl/crypto/x509v3/v3_conf.c +0 -462
  1732. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +0 -502
  1733. data/third_party/boringssl/crypto/x509v3/v3_enum.c +0 -100
  1734. data/third_party/boringssl/crypto/x509v3/v3_genn.c +0 -251
  1735. data/third_party/boringssl/crypto/x509v3/v3_info.c +0 -219
  1736. data/third_party/boringssl/crypto/x509v3/v3_lib.c +0 -370
  1737. data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -287
  1738. data/third_party/boringssl/crypto/x509v3/v3_purp.c +0 -866
  1739. data/third_party/boringssl/crypto/x509v3/v3_skey.c +0 -152
  1740. data/third_party/boringssl/crypto/x509v3/v3_utl.c +0 -1352
  1741. data/third_party/boringssl/include/openssl/aead.h +0 -433
  1742. data/third_party/boringssl/include/openssl/aes.h +0 -170
  1743. data/third_party/boringssl/include/openssl/arm_arch.h +0 -121
  1744. data/third_party/boringssl/include/openssl/asn1.h +0 -981
  1745. data/third_party/boringssl/include/openssl/base.h +0 -457
  1746. data/third_party/boringssl/include/openssl/base64.h +0 -187
  1747. data/third_party/boringssl/include/openssl/bio.h +0 -902
  1748. data/third_party/boringssl/include/openssl/blowfish.h +0 -93
  1749. data/third_party/boringssl/include/openssl/bn.h +0 -1019
  1750. data/third_party/boringssl/include/openssl/buf.h +0 -137
  1751. data/third_party/boringssl/include/openssl/bytestring.h +0 -505
  1752. data/third_party/boringssl/include/openssl/cast.h +0 -96
  1753. data/third_party/boringssl/include/openssl/cipher.h +0 -608
  1754. data/third_party/boringssl/include/openssl/cmac.h +0 -87
  1755. data/third_party/boringssl/include/openssl/conf.h +0 -183
  1756. data/third_party/boringssl/include/openssl/cpu.h +0 -196
  1757. data/third_party/boringssl/include/openssl/crypto.h +0 -122
  1758. data/third_party/boringssl/include/openssl/curve25519.h +0 -201
  1759. data/third_party/boringssl/include/openssl/dh.h +0 -298
  1760. data/third_party/boringssl/include/openssl/digest.h +0 -316
  1761. data/third_party/boringssl/include/openssl/dsa.h +0 -435
  1762. data/third_party/boringssl/include/openssl/ec.h +0 -413
  1763. data/third_party/boringssl/include/openssl/ec_key.h +0 -342
  1764. data/third_party/boringssl/include/openssl/ecdh.h +0 -101
  1765. data/third_party/boringssl/include/openssl/ecdsa.h +0 -199
  1766. data/third_party/boringssl/include/openssl/engine.h +0 -109
  1767. data/third_party/boringssl/include/openssl/err.h +0 -458
  1768. data/third_party/boringssl/include/openssl/evp.h +0 -873
  1769. data/third_party/boringssl/include/openssl/hmac.h +0 -186
  1770. data/third_party/boringssl/include/openssl/lhash.h +0 -174
  1771. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  1772. data/third_party/boringssl/include/openssl/md4.h +0 -106
  1773. data/third_party/boringssl/include/openssl/md5.h +0 -107
  1774. data/third_party/boringssl/include/openssl/mem.h +0 -156
  1775. data/third_party/boringssl/include/openssl/nid.h +0 -4242
  1776. data/third_party/boringssl/include/openssl/obj.h +0 -233
  1777. data/third_party/boringssl/include/openssl/pem.h +0 -397
  1778. data/third_party/boringssl/include/openssl/pkcs7.h +0 -82
  1779. data/third_party/boringssl/include/openssl/pkcs8.h +0 -230
  1780. data/third_party/boringssl/include/openssl/poly1305.h +0 -51
  1781. data/third_party/boringssl/include/openssl/pool.h +0 -91
  1782. data/third_party/boringssl/include/openssl/rand.h +0 -125
  1783. data/third_party/boringssl/include/openssl/ripemd.h +0 -107
  1784. data/third_party/boringssl/include/openssl/rsa.h +0 -756
  1785. data/third_party/boringssl/include/openssl/sha.h +0 -256
  1786. data/third_party/boringssl/include/openssl/span.h +0 -191
  1787. data/third_party/boringssl/include/openssl/ssl.h +0 -4740
  1788. data/third_party/boringssl/include/openssl/ssl3.h +0 -332
  1789. data/third_party/boringssl/include/openssl/stack.h +0 -485
  1790. data/third_party/boringssl/include/openssl/thread.h +0 -191
  1791. data/third_party/boringssl/include/openssl/tls1.h +0 -618
  1792. data/third_party/boringssl/include/openssl/type_check.h +0 -91
  1793. data/third_party/boringssl/include/openssl/x509.h +0 -1180
  1794. data/third_party/boringssl/include/openssl/x509_vfy.h +0 -614
  1795. data/third_party/boringssl/include/openssl/x509v3.h +0 -827
  1796. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
  1797. data/third_party/boringssl/ssl/d1_both.cc +0 -851
  1798. data/third_party/boringssl/ssl/d1_lib.cc +0 -267
  1799. data/third_party/boringssl/ssl/d1_pkt.cc +0 -274
  1800. data/third_party/boringssl/ssl/d1_srtp.cc +0 -232
  1801. data/third_party/boringssl/ssl/dtls_method.cc +0 -193
  1802. data/third_party/boringssl/ssl/dtls_record.cc +0 -353
  1803. data/third_party/boringssl/ssl/handoff.cc +0 -285
  1804. data/third_party/boringssl/ssl/handshake.cc +0 -630
  1805. data/third_party/boringssl/ssl/handshake_client.cc +0 -1842
  1806. data/third_party/boringssl/ssl/handshake_server.cc +0 -1674
  1807. data/third_party/boringssl/ssl/internal.h +0 -3064
  1808. data/third_party/boringssl/ssl/s3_both.cc +0 -585
  1809. data/third_party/boringssl/ssl/s3_lib.cc +0 -226
  1810. data/third_party/boringssl/ssl/s3_pkt.cc +0 -425
  1811. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +0 -412
  1812. data/third_party/boringssl/ssl/ssl_asn1.cc +0 -844
  1813. data/third_party/boringssl/ssl/ssl_buffer.cc +0 -286
  1814. data/third_party/boringssl/ssl/ssl_cert.cc +0 -913
  1815. data/third_party/boringssl/ssl/ssl_cipher.cc +0 -1781
  1816. data/third_party/boringssl/ssl/ssl_file.cc +0 -583
  1817. data/third_party/boringssl/ssl/ssl_key_share.cc +0 -252
  1818. data/third_party/boringssl/ssl/ssl_lib.cc +0 -2719
  1819. data/third_party/boringssl/ssl/ssl_privkey.cc +0 -494
  1820. data/third_party/boringssl/ssl/ssl_session.cc +0 -1221
  1821. data/third_party/boringssl/ssl/ssl_stat.cc +0 -224
  1822. data/third_party/boringssl/ssl/ssl_transcript.cc +0 -398
  1823. data/third_party/boringssl/ssl/ssl_versions.cc +0 -399
  1824. data/third_party/boringssl/ssl/ssl_x509.cc +0 -1297
  1825. data/third_party/boringssl/ssl/t1_enc.cc +0 -452
  1826. data/third_party/boringssl/ssl/t1_lib.cc +0 -3783
  1827. data/third_party/boringssl/ssl/tls13_both.cc +0 -559
  1828. data/third_party/boringssl/ssl/tls13_client.cc +0 -891
  1829. data/third_party/boringssl/ssl/tls13_enc.cc +0 -493
  1830. data/third_party/boringssl/ssl/tls13_server.cc +0 -1022
  1831. data/third_party/boringssl/ssl/tls_method.cc +0 -274
  1832. data/third_party/boringssl/ssl/tls_record.cc +0 -703
  1833. data/third_party/boringssl/third_party/fiat/curve25519.c +0 -3230
  1834. data/third_party/boringssl/third_party/fiat/curve25519_tables.h +0 -7880
  1835. data/third_party/boringssl/third_party/fiat/internal.h +0 -154
  1836. data/third_party/boringssl/third_party/fiat/p256.c +0 -1824
  1837. data/third_party/nanopb/pb.h +0 -579
  1838. data/third_party/nanopb/pb_common.c +0 -97
  1839. data/third_party/nanopb/pb_common.h +0 -42
  1840. data/third_party/nanopb/pb_decode.c +0 -1347
  1841. data/third_party/nanopb/pb_decode.h +0 -149
  1842. data/third_party/nanopb/pb_encode.c +0 -696
  1843. data/third_party/nanopb/pb_encode.h +0 -154
@@ -24,8 +24,9 @@
24
24
  #include <grpc/support/port_platform.h>
25
25
 
26
26
  #include <grpc/grpc.h>
27
+
27
28
  #include "src/core/lib/debug/trace.h"
28
- #include "src/core/lib/gprpp/abstract.h"
29
+ #include "src/core/lib/gprpp/manual_constructor.h"
29
30
  #include "src/core/lib/iomgr/pollset.h"
30
31
 
31
32
  /* These trace flags default to 1. The corresponding lines are only traced
@@ -36,7 +37,8 @@ extern grpc_core::DebugOnlyTraceFlag grpc_trace_pending_tags;
36
37
  extern grpc_core::DebugOnlyTraceFlag grpc_trace_cq_refcount;
37
38
 
38
39
  typedef struct grpc_cq_completion {
39
- gpr_mpscq_node node;
40
+ grpc_core::ManualConstructor<grpc_core::MultiProducerSingleConsumerQueue>
41
+ node;
40
42
 
41
43
  /** user supplied tag */
42
44
  void* tag;
@@ -77,7 +79,8 @@ bool grpc_cq_begin_op(grpc_completion_queue* cc, void* tag);
77
79
  grpc_cq_begin_op */
78
80
  void grpc_cq_end_op(grpc_completion_queue* cc, void* tag, grpc_error* error,
79
81
  void (*done)(void* done_arg, grpc_cq_completion* storage),
80
- void* done_arg, grpc_cq_completion* storage);
82
+ void* done_arg, grpc_cq_completion* storage,
83
+ bool internal = false);
81
84
 
82
85
  grpc_pollset* grpc_cq_pollset(grpc_completion_queue* cc);
83
86
 
@@ -28,7 +28,7 @@
28
28
  */
29
29
 
30
30
  static grpc_completion_queue* default_create(
31
- const grpc_completion_queue_factory* factory,
31
+ const grpc_completion_queue_factory* /*factory*/,
32
32
  const grpc_completion_queue_attributes* attr) {
33
33
  return grpc_completion_queue_create_internal(
34
34
  attr->cq_completion_type, attr->cq_polling_type, attr->cq_shutdown_cb);
@@ -22,47 +22,40 @@
22
22
 
23
23
  #include <stdio.h>
24
24
 
25
+ #include <vector>
26
+
27
+ #include "absl/strings/str_format.h"
28
+ #include "absl/strings/str_join.h"
29
+
25
30
  #include <grpc/byte_buffer.h>
26
31
  #include <grpc/support/string_util.h>
27
32
  #include "src/core/lib/gpr/string.h"
28
33
 
29
- static void addhdr(gpr_strvec* buf, grpc_event* ev) {
30
- char* tmp;
31
- gpr_asprintf(&tmp, "tag:%p", ev->tag);
32
- gpr_strvec_add(buf, tmp);
34
+ static void addhdr(grpc_event* ev, std::vector<std::string>* buf) {
35
+ buf->push_back(absl::StrFormat("tag:%p", ev->tag));
33
36
  }
34
37
 
35
38
  static const char* errstr(int success) { return success ? "OK" : "ERROR"; }
36
39
 
37
- static void adderr(gpr_strvec* buf, int success) {
38
- char* tmp;
39
- gpr_asprintf(&tmp, " %s", errstr(success));
40
- gpr_strvec_add(buf, tmp);
40
+ static void adderr(int success, std::vector<std::string>* buf) {
41
+ buf->push_back(absl::StrFormat(" %s", errstr(success)));
41
42
  }
42
43
 
43
- char* grpc_event_string(grpc_event* ev) {
44
- char* out;
45
- gpr_strvec buf;
46
-
47
- if (ev == nullptr) return gpr_strdup("null");
48
-
49
- gpr_strvec_init(&buf);
50
-
44
+ std::string grpc_event_string(grpc_event* ev) {
45
+ if (ev == nullptr) return "null";
46
+ std::vector<std::string> out;
51
47
  switch (ev->type) {
52
48
  case GRPC_QUEUE_TIMEOUT:
53
- gpr_strvec_add(&buf, gpr_strdup("QUEUE_TIMEOUT"));
49
+ out.push_back("QUEUE_TIMEOUT");
54
50
  break;
55
51
  case GRPC_QUEUE_SHUTDOWN:
56
- gpr_strvec_add(&buf, gpr_strdup("QUEUE_SHUTDOWN"));
52
+ out.push_back("QUEUE_SHUTDOWN");
57
53
  break;
58
54
  case GRPC_OP_COMPLETE:
59
- gpr_strvec_add(&buf, gpr_strdup("OP_COMPLETE: "));
60
- addhdr(&buf, ev);
61
- adderr(&buf, ev->success);
55
+ out.push_back("OP_COMPLETE: ");
56
+ addhdr(ev, &out);
57
+ adderr(ev->success, &out);
62
58
  break;
63
59
  }
64
-
65
- out = gpr_strvec_flatten(&buf, nullptr);
66
- gpr_strvec_destroy(&buf);
67
- return out;
60
+ return absl::StrJoin(out, "");
68
61
  }
@@ -21,9 +21,11 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <string>
25
+
24
26
  #include <grpc/grpc.h>
25
27
 
26
28
  /* Returns a string describing an event. Must be later freed with gpr_free() */
27
- char* grpc_event_string(grpc_event* ev);
29
+ std::string grpc_event_string(grpc_event* ev);
28
30
 
29
31
  #endif /* GRPC_CORE_LIB_SURFACE_EVENT_STRING_H */
@@ -73,6 +73,7 @@ static void do_basic_init(void) {
73
73
  g_shutting_down = false;
74
74
  grpc_register_built_in_plugins();
75
75
  grpc_cq_global_init();
76
+ grpc_core::grpc_executor_global_init();
76
77
  gpr_time_init();
77
78
  g_initializations = 0;
78
79
  }
@@ -101,7 +102,7 @@ static void register_builtin_channel_init() {
101
102
  GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
102
103
  append_filter, (void*)&grpc_lame_filter);
103
104
  grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL, INT_MAX, prepend_filter,
104
- (void*)&grpc_server_top_filter);
105
+ (void*)&grpc_core::Server::kServerTopFilter);
105
106
  }
106
107
 
107
108
  typedef struct grpc_plugin {
@@ -134,6 +135,7 @@ void grpc_init(void) {
134
135
  grpc_core::Fork::GlobalInit();
135
136
  grpc_fork_handlers_auto_register();
136
137
  grpc_stats_init();
138
+ grpc_init_static_metadata_ctx();
137
139
  grpc_slice_intern_init();
138
140
  grpc_mdctx_global_init();
139
141
  grpc_channel_init_init();
@@ -191,9 +193,11 @@ void grpc_shutdown_internal_locked(void) {
191
193
  grpc_core::ApplicationCallbackExecCtx::GlobalShutdown();
192
194
  g_shutting_down = false;
193
195
  gpr_cv_broadcast(g_shutting_down_cv);
196
+ // Absolute last action will be to delete static metadata context.
197
+ grpc_destroy_static_metadata_ctx();
194
198
  }
195
199
 
196
- void grpc_shutdown_internal(void* ignored) {
200
+ void grpc_shutdown_internal(void* /*ignored*/) {
197
201
  GRPC_API_TRACE("grpc_shutdown_internal", 0, ());
198
202
  grpc_core::MutexLock lock(&g_init_mu);
199
203
  // We have released lock from the shutdown thread and it is possible that
@@ -37,7 +37,7 @@
37
37
  void grpc_security_pre_init(void) {}
38
38
 
39
39
  static bool maybe_prepend_client_auth_filter(
40
- grpc_channel_stack_builder* builder, void* arg) {
40
+ grpc_channel_stack_builder* builder, void* /*arg*/) {
41
41
  const grpc_channel_args* args =
42
42
  grpc_channel_stack_builder_get_channel_arguments(builder);
43
43
  if (args) {
@@ -52,7 +52,7 @@ static bool maybe_prepend_client_auth_filter(
52
52
  }
53
53
 
54
54
  static bool maybe_prepend_server_auth_filter(
55
- grpc_channel_stack_builder* builder, void* arg) {
55
+ grpc_channel_stack_builder* builder, void* /*arg*/) {
56
56
  const grpc_channel_args* args =
57
57
  grpc_channel_stack_builder_get_channel_arguments(builder);
58
58
  if (args) {
@@ -32,6 +32,7 @@
32
32
  #include "src/core/lib/surface/call.h"
33
33
  #include "src/core/lib/surface/channel.h"
34
34
  #include "src/core/lib/surface/lame_client.h"
35
+ #include "src/core/lib/transport/connectivity_state.h"
35
36
  #include "src/core/lib/transport/static_metadata.h"
36
37
 
37
38
  namespace grpc_core {
@@ -39,15 +40,19 @@ namespace grpc_core {
39
40
  namespace {
40
41
 
41
42
  struct CallData {
42
- grpc_core::CallCombiner* call_combiner;
43
+ CallCombiner* call_combiner;
43
44
  grpc_linked_mdelem status;
44
45
  grpc_linked_mdelem details;
45
- grpc_core::Atomic<bool> filled_metadata;
46
+ Atomic<bool> filled_metadata;
46
47
  };
47
48
 
48
49
  struct ChannelData {
50
+ ChannelData() : state_tracker("lame_channel", GRPC_CHANNEL_SHUTDOWN) {}
51
+
49
52
  grpc_status_code error_code;
50
53
  const char* error_message;
54
+ Mutex mu;
55
+ ConnectivityStateTracker state_tracker;
51
56
  };
52
57
 
53
58
  static void fill_metadata(grpc_call_element* elem, grpc_metadata_batch* mdb) {
@@ -61,10 +66,10 @@ static void fill_metadata(grpc_call_element* elem, grpc_metadata_batch* mdb) {
61
66
  char tmp[GPR_LTOA_MIN_BUFSIZE];
62
67
  gpr_ltoa(chand->error_code, tmp);
63
68
  calld->status.md = grpc_mdelem_from_slices(
64
- GRPC_MDSTR_GRPC_STATUS, grpc_slice_from_copied_string(tmp));
69
+ GRPC_MDSTR_GRPC_STATUS, grpc_core::UnmanagedMemorySlice(tmp));
65
70
  calld->details.md = grpc_mdelem_from_slices(
66
71
  GRPC_MDSTR_GRPC_MESSAGE,
67
- grpc_slice_from_copied_string(chand->error_message));
72
+ grpc_core::UnmanagedMemorySlice(chand->error_message));
68
73
  calld->status.prev = calld->details.next = nullptr;
69
74
  calld->status.next = &calld->details;
70
75
  calld->details.prev = &calld->status;
@@ -89,53 +94,61 @@ static void lame_start_transport_stream_op_batch(
89
94
  calld->call_combiner);
90
95
  }
91
96
 
92
- static void lame_get_channel_info(grpc_channel_element* elem,
93
- const grpc_channel_info* channel_info) {}
97
+ static void lame_get_channel_info(grpc_channel_element* /*elem*/,
98
+ const grpc_channel_info* /*channel_info*/) {}
94
99
 
95
100
  static void lame_start_transport_op(grpc_channel_element* elem,
96
101
  grpc_transport_op* op) {
97
- if (op->on_connectivity_state_change) {
98
- GPR_ASSERT(*op->connectivity_state != GRPC_CHANNEL_SHUTDOWN);
99
- *op->connectivity_state = GRPC_CHANNEL_SHUTDOWN;
100
- GRPC_CLOSURE_SCHED(op->on_connectivity_state_change, GRPC_ERROR_NONE);
102
+ ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
103
+ {
104
+ MutexLock lock(&chand->mu);
105
+ if (op->start_connectivity_watch != nullptr) {
106
+ chand->state_tracker.AddWatcher(op->start_connectivity_watch_state,
107
+ std::move(op->start_connectivity_watch));
108
+ }
109
+ if (op->stop_connectivity_watch != nullptr) {
110
+ chand->state_tracker.RemoveWatcher(op->stop_connectivity_watch);
111
+ }
101
112
  }
102
113
  if (op->send_ping.on_initiate != nullptr) {
103
- GRPC_CLOSURE_SCHED(
104
- op->send_ping.on_initiate,
105
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("lame client channel"));
114
+ ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate,
115
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("lame client channel"));
106
116
  }
107
117
  if (op->send_ping.on_ack != nullptr) {
108
- GRPC_CLOSURE_SCHED(
109
- op->send_ping.on_ack,
110
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("lame client channel"));
118
+ ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_ack,
119
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("lame client channel"));
111
120
  }
112
121
  GRPC_ERROR_UNREF(op->disconnect_with_error);
113
122
  if (op->on_consumed != nullptr) {
114
- GRPC_CLOSURE_SCHED(op->on_consumed, GRPC_ERROR_NONE);
123
+ ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, GRPC_ERROR_NONE);
115
124
  }
116
125
  }
117
126
 
118
- static grpc_error* init_call_elem(grpc_call_element* elem,
119
- const grpc_call_element_args* args) {
127
+ static grpc_error* lame_init_call_elem(grpc_call_element* elem,
128
+ const grpc_call_element_args* args) {
120
129
  CallData* calld = static_cast<CallData*>(elem->call_data);
121
130
  calld->call_combiner = args->call_combiner;
122
131
  return GRPC_ERROR_NONE;
123
132
  }
124
133
 
125
- static void destroy_call_elem(grpc_call_element* elem,
126
- const grpc_call_final_info* final_info,
127
- grpc_closure* then_schedule_closure) {
128
- GRPC_CLOSURE_SCHED(then_schedule_closure, GRPC_ERROR_NONE);
134
+ static void lame_destroy_call_elem(grpc_call_element* /*elem*/,
135
+ const grpc_call_final_info* /*final_info*/,
136
+ grpc_closure* then_schedule_closure) {
137
+ ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, GRPC_ERROR_NONE);
129
138
  }
130
139
 
131
- static grpc_error* init_channel_elem(grpc_channel_element* elem,
132
- grpc_channel_element_args* args) {
140
+ static grpc_error* lame_init_channel_elem(grpc_channel_element* elem,
141
+ grpc_channel_element_args* args) {
133
142
  GPR_ASSERT(args->is_first);
134
143
  GPR_ASSERT(args->is_last);
144
+ new (elem->channel_data) ChannelData;
135
145
  return GRPC_ERROR_NONE;
136
146
  }
137
147
 
138
- static void destroy_channel_elem(grpc_channel_element* elem) {}
148
+ static void lame_destroy_channel_elem(grpc_channel_element* elem) {
149
+ ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
150
+ chand->~ChannelData();
151
+ }
139
152
 
140
153
  } // namespace
141
154
 
@@ -145,12 +158,12 @@ const grpc_channel_filter grpc_lame_filter = {
145
158
  grpc_core::lame_start_transport_stream_op_batch,
146
159
  grpc_core::lame_start_transport_op,
147
160
  sizeof(grpc_core::CallData),
148
- grpc_core::init_call_elem,
161
+ grpc_core::lame_init_call_elem,
149
162
  grpc_call_stack_ignore_set_pollset_or_pollset_set,
150
- grpc_core::destroy_call_elem,
163
+ grpc_core::lame_destroy_call_elem,
151
164
  sizeof(grpc_core::ChannelData),
152
- grpc_core::init_channel_elem,
153
- grpc_core::destroy_channel_elem,
165
+ grpc_core::lame_init_channel_elem,
166
+ grpc_core::lame_destroy_channel_elem,
154
167
  grpc_core::lame_get_channel_info,
155
168
  "lame-client",
156
169
  };
@@ -1,20 +1,18 @@
1
- /*
2
- *
3
- * Copyright 2015-2016 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
- */
1
+ //
2
+ // Copyright 2015-2016 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #include <grpc/support/port_platform.h>
20
18
 
@@ -24,18 +22,27 @@
24
22
  #include <stdlib.h>
25
23
  #include <string.h>
26
24
 
25
+ #include <algorithm>
26
+ #include <atomic>
27
+ #include <iterator>
28
+ #include <list>
29
+ #include <queue>
30
+ #include <utility>
31
+ #include <vector>
32
+
33
+ #include "absl/types/optional.h"
34
+
27
35
  #include <grpc/support/alloc.h>
28
36
  #include <grpc/support/log.h>
29
37
  #include <grpc/support/string_util.h>
30
38
 
31
- #include <utility>
32
-
33
39
  #include "src/core/lib/channel/channel_args.h"
40
+ #include "src/core/lib/channel/channelz.h"
34
41
  #include "src/core/lib/channel/connected_channel.h"
35
42
  #include "src/core/lib/debug/stats.h"
36
- #include "src/core/lib/gpr/mpscq.h"
37
43
  #include "src/core/lib/gpr/spinlock.h"
38
44
  #include "src/core/lib/gpr/string.h"
45
+ #include "src/core/lib/gprpp/mpscq.h"
39
46
  #include "src/core/lib/iomgr/executor.h"
40
47
  #include "src/core/lib/iomgr/iomgr.h"
41
48
  #include "src/core/lib/slice/slice_internal.h"
@@ -47,1550 +54,1502 @@
47
54
  #include "src/core/lib/transport/metadata.h"
48
55
  #include "src/core/lib/transport/static_metadata.h"
49
56
 
50
- grpc_core::TraceFlag grpc_server_channel_trace(false, "server_channel");
51
-
52
- static void server_on_recv_initial_metadata(void* ptr, grpc_error* error);
53
- static void server_recv_trailing_metadata_ready(void* user_data,
54
- grpc_error* error);
55
-
56
- namespace {
57
- struct listener {
58
- void* arg;
59
- void (*start)(grpc_server* server, void* arg, grpc_pollset** pollsets,
60
- size_t pollset_count);
61
- void (*destroy)(grpc_server* server, void* arg, grpc_closure* closure);
62
- struct listener* next;
63
- intptr_t socket_uuid;
64
- grpc_closure destroy_done;
65
- };
66
-
67
- enum requested_call_type { BATCH_CALL, REGISTERED_CALL };
68
-
69
- struct registered_method;
70
-
71
- struct requested_call {
72
- gpr_mpscq_node request_link; /* must be first */
73
- requested_call_type type;
74
- size_t cq_idx;
75
- void* tag;
76
- grpc_server* server;
77
- grpc_completion_queue* cq_bound_to_call;
78
- grpc_call** call;
57
+ namespace grpc_core {
58
+
59
+ TraceFlag grpc_server_channel_trace(false, "server_channel");
60
+
61
+ //
62
+ // Server::RequestedCall
63
+ //
64
+
65
+ struct Server::RequestedCall {
66
+ enum class Type { BATCH_CALL, REGISTERED_CALL };
67
+
68
+ RequestedCall(void* tag_arg, grpc_completion_queue* call_cq,
69
+ grpc_call** call_arg, grpc_metadata_array* initial_md,
70
+ grpc_call_details* details)
71
+ : type(Type::BATCH_CALL),
72
+ tag(tag_arg),
73
+ cq_bound_to_call(call_cq),
74
+ call(call_arg),
75
+ initial_metadata(initial_md) {
76
+ details->reserved = nullptr;
77
+ data.batch.details = details;
78
+ }
79
+
80
+ RequestedCall(void* tag_arg, grpc_completion_queue* call_cq,
81
+ grpc_call** call_arg, grpc_metadata_array* initial_md,
82
+ RegisteredMethod* rm, gpr_timespec* deadline,
83
+ grpc_byte_buffer** optional_payload)
84
+ : type(Type::REGISTERED_CALL),
85
+ tag(tag_arg),
86
+ cq_bound_to_call(call_cq),
87
+ call(call_arg),
88
+ initial_metadata(initial_md) {
89
+ data.registered.method = rm;
90
+ data.registered.deadline = deadline;
91
+ data.registered.optional_payload = optional_payload;
92
+ }
93
+
94
+ MultiProducerSingleConsumerQueue::Node mpscq_node;
95
+ const Type type;
96
+ void* const tag;
97
+ grpc_completion_queue* const cq_bound_to_call;
98
+ grpc_call** const call;
79
99
  grpc_cq_completion completion;
80
- grpc_metadata_array* initial_metadata;
100
+ grpc_metadata_array* const initial_metadata;
81
101
  union {
82
102
  struct {
83
103
  grpc_call_details* details;
84
104
  } batch;
85
105
  struct {
86
- registered_method* method;
106
+ RegisteredMethod* method;
87
107
  gpr_timespec* deadline;
88
108
  grpc_byte_buffer** optional_payload;
89
109
  } registered;
90
110
  } data;
91
111
  };
92
112
 
93
- struct channel_registered_method {
94
- registered_method* server_registered_method;
95
- uint32_t flags;
96
- bool has_host;
97
- grpc_slice method;
98
- grpc_slice host;
113
+ //
114
+ // Server::RegisteredMethod
115
+ //
116
+
117
+ struct Server::RegisteredMethod {
118
+ RegisteredMethod(
119
+ const char* method_arg, const char* host_arg,
120
+ grpc_server_register_method_payload_handling payload_handling_arg,
121
+ uint32_t flags_arg)
122
+ : method(method_arg == nullptr ? "" : method_arg),
123
+ host(host_arg == nullptr ? "" : host_arg),
124
+ payload_handling(payload_handling_arg),
125
+ flags(flags_arg) {}
126
+
127
+ ~RegisteredMethod() = default;
128
+
129
+ const std::string method;
130
+ const std::string host;
131
+ const grpc_server_register_method_payload_handling payload_handling;
132
+ const uint32_t flags;
133
+ // One request matcher per method.
134
+ std::unique_ptr<RequestMatcherInterface> matcher;
99
135
  };
100
136
 
101
- struct channel_data {
102
- grpc_server* server;
103
- grpc_connectivity_state connectivity_state;
104
- grpc_channel* channel;
105
- size_t cq_idx;
106
- /* linked list of all channels on a server */
107
- channel_data* next;
108
- channel_data* prev;
109
- channel_registered_method* registered_methods;
110
- uint32_t registered_method_slots;
111
- uint32_t registered_method_max_probes;
112
- grpc_closure finish_destroy_channel_closure;
113
- grpc_closure channel_connectivity_changed;
114
- grpc_core::RefCountedPtr<grpc_core::channelz::SocketNode> socket_node;
137
+ //
138
+ // Server::RequestMatcherInterface
139
+ //
140
+
141
+ // RPCs that come in from the transport must be matched against RPC requests
142
+ // from the application. An incoming request from the application can be matched
143
+ // to an RPC that has already arrived or can be queued up for later use.
144
+ // Likewise, an RPC coming in from the transport can either be matched to a
145
+ // request that already arrived from the application or can be queued up for
146
+ // later use (marked pending). If there is a match, the request's tag is posted
147
+ // on the request's notification CQ.
148
+ //
149
+ // RequestMatcherInterface is the base class to provide this functionality.
150
+ class Server::RequestMatcherInterface {
151
+ public:
152
+ virtual ~RequestMatcherInterface() {}
153
+
154
+ // Unref the calls associated with any incoming RPCs in the pending queue (not
155
+ // yet matched to an application-requested RPC).
156
+ virtual void ZombifyPending() = 0;
157
+
158
+ // Mark all application-requested RPCs failed if they have not been matched to
159
+ // an incoming RPC. The error parameter indicates why the RPCs are being
160
+ // failed (always server shutdown in all current implementations).
161
+ virtual void KillRequests(grpc_error* error) = 0;
162
+
163
+ // How many request queues are supported by this matcher. This is an abstract
164
+ // concept that essentially maps to gRPC completion queues.
165
+ virtual size_t request_queue_count() const = 0;
166
+
167
+ // This function is invoked when the application requests a new RPC whose
168
+ // information is in the call parameter. The request_queue_index marks the
169
+ // queue onto which to place this RPC, and is typically associated with a gRPC
170
+ // CQ. If there are pending RPCs waiting to be matched, publish one (match it
171
+ // and notify the CQ).
172
+ virtual void RequestCallWithPossiblePublish(size_t request_queue_index,
173
+ RequestedCall* call) = 0;
174
+
175
+ // This function is invoked on an incoming RPC, represented by the calld
176
+ // object. The RequestMatcher will try to match it against an
177
+ // application-requested RPC if possible or will place it in the pending queue
178
+ // otherwise. To enable some measure of fairness between server CQs, the match
179
+ // is done starting at the start_request_queue_index parameter in a cyclic
180
+ // order rather than always starting at 0.
181
+ virtual void MatchOrQueue(size_t start_request_queue_index,
182
+ CallData* calld) = 0;
183
+
184
+ // Returns the server associated with this request matcher
185
+ virtual Server* server() const = 0;
115
186
  };
116
187
 
117
- typedef struct shutdown_tag {
118
- void* tag;
119
- grpc_completion_queue* cq;
120
- grpc_cq_completion completion;
121
- } shutdown_tag;
122
-
123
- typedef enum {
124
- /* waiting for metadata */
125
- NOT_STARTED,
126
- /* initial metadata read, not flow controlled in yet */
127
- PENDING,
128
- /* flow controlled in, on completion queue */
129
- ACTIVATED,
130
- /* cancelled before being queued */
131
- ZOMBIED
132
- } call_state;
133
-
134
- typedef struct request_matcher request_matcher;
135
-
136
- struct call_data {
137
- call_data(grpc_call_element* elem, const grpc_call_element_args& args)
138
- : call(grpc_call_from_top_element(elem)),
139
- call_combiner(args.call_combiner) {
140
- GRPC_CLOSURE_INIT(&server_on_recv_initial_metadata,
141
- ::server_on_recv_initial_metadata, elem,
142
- grpc_schedule_on_exec_ctx);
143
- GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready,
144
- server_recv_trailing_metadata_ready, elem,
145
- grpc_schedule_on_exec_ctx);
146
- }
147
- ~call_data() {
148
- GPR_ASSERT(state != PENDING);
149
- GRPC_ERROR_UNREF(recv_initial_metadata_error);
150
- if (host_set) {
151
- grpc_slice_unref_internal(host);
188
+ // The RealRequestMatcher is an implementation of RequestMatcherInterface that
189
+ // actually uses all the features of RequestMatcherInterface: expecting the
190
+ // application to explicitly request RPCs and then matching those to incoming
191
+ // RPCs, along with a slow path by which incoming RPCs are put on a locked
192
+ // pending list if they aren't able to be matched to an application request.
193
+ class Server::RealRequestMatcher : public RequestMatcherInterface {
194
+ public:
195
+ explicit RealRequestMatcher(Server* server)
196
+ : server_(server), requests_per_cq_(server->cqs_.size()) {}
197
+
198
+ ~RealRequestMatcher() override {
199
+ for (LockedMultiProducerSingleConsumerQueue& queue : requests_per_cq_) {
200
+ GPR_ASSERT(queue.Pop() == nullptr);
152
201
  }
153
- if (path_set) {
154
- grpc_slice_unref_internal(path);
155
- }
156
- grpc_metadata_array_destroy(&initial_metadata);
157
- grpc_byte_buffer_destroy(payload);
158
202
  }
159
203
 
160
- grpc_call* call;
161
-
162
- gpr_atm state = NOT_STARTED;
204
+ void ZombifyPending() override {
205
+ while (!pending_.empty()) {
206
+ CallData* calld = pending_.front();
207
+ calld->SetState(CallData::CallState::ZOMBIED);
208
+ calld->KillZombie();
209
+ pending_.pop();
210
+ }
211
+ }
163
212
 
164
- bool path_set = false;
165
- bool host_set = false;
166
- grpc_slice path;
167
- grpc_slice host;
168
- grpc_millis deadline = GRPC_MILLIS_INF_FUTURE;
213
+ void KillRequests(grpc_error* error) override {
214
+ for (size_t i = 0; i < requests_per_cq_.size(); i++) {
215
+ RequestedCall* rc;
216
+ while ((rc = reinterpret_cast<RequestedCall*>(
217
+ requests_per_cq_[i].Pop())) != nullptr) {
218
+ server_->FailCall(i, rc, GRPC_ERROR_REF(error));
219
+ }
220
+ }
221
+ GRPC_ERROR_UNREF(error);
222
+ }
169
223
 
170
- grpc_completion_queue* cq_new = nullptr;
224
+ size_t request_queue_count() const override {
225
+ return requests_per_cq_.size();
226
+ }
227
+
228
+ void RequestCallWithPossiblePublish(size_t request_queue_index,
229
+ RequestedCall* call) override {
230
+ if (requests_per_cq_[request_queue_index].Push(&call->mpscq_node)) {
231
+ /* this was the first queued request: we need to lock and start
232
+ matching calls */
233
+ struct PendingCall {
234
+ RequestedCall* rc = nullptr;
235
+ CallData* calld;
236
+ };
237
+ auto pop_next_pending = [this, request_queue_index] {
238
+ PendingCall pending_call;
239
+ {
240
+ MutexLock lock(&server_->mu_call_);
241
+ if (!pending_.empty()) {
242
+ pending_call.rc = reinterpret_cast<RequestedCall*>(
243
+ requests_per_cq_[request_queue_index].Pop());
244
+ if (pending_call.rc != nullptr) {
245
+ pending_call.calld = pending_.front();
246
+ pending_.pop();
247
+ }
248
+ }
249
+ }
250
+ return pending_call;
251
+ };
252
+ while (true) {
253
+ PendingCall next_pending = pop_next_pending();
254
+ if (next_pending.rc == nullptr) break;
255
+ if (!next_pending.calld->MaybeActivate()) {
256
+ // Zombied Call
257
+ next_pending.calld->KillZombie();
258
+ } else {
259
+ next_pending.calld->Publish(request_queue_index, next_pending.rc);
260
+ }
261
+ }
262
+ }
263
+ }
171
264
 
172
- grpc_metadata_batch* recv_initial_metadata = nullptr;
173
- uint32_t recv_initial_metadata_flags = 0;
174
- grpc_metadata_array initial_metadata =
175
- grpc_metadata_array(); // Zero-initialize the C struct.
265
+ void MatchOrQueue(size_t start_request_queue_index,
266
+ CallData* calld) override {
267
+ for (size_t i = 0; i < requests_per_cq_.size(); i++) {
268
+ size_t cq_idx = (start_request_queue_index + i) % requests_per_cq_.size();
269
+ RequestedCall* rc =
270
+ reinterpret_cast<RequestedCall*>(requests_per_cq_[cq_idx].TryPop());
271
+ if (rc != nullptr) {
272
+ GRPC_STATS_INC_SERVER_CQS_CHECKED(i);
273
+ calld->SetState(CallData::CallState::ACTIVATED);
274
+ calld->Publish(cq_idx, rc);
275
+ return;
276
+ }
277
+ }
278
+ // No cq to take the request found; queue it on the slow list.
279
+ GRPC_STATS_INC_SERVER_SLOWPATH_REQUESTS_QUEUED();
280
+ // We need to ensure that all the queues are empty. We do this under
281
+ // the server mu_call_ lock to ensure that if something is added to
282
+ // an empty request queue, it will block until the call is actually
283
+ // added to the pending list.
284
+ RequestedCall* rc = nullptr;
285
+ size_t cq_idx = 0;
286
+ size_t loop_count;
287
+ {
288
+ MutexLock lock(&server_->mu_call_);
289
+ for (loop_count = 0; loop_count < requests_per_cq_.size(); loop_count++) {
290
+ cq_idx =
291
+ (start_request_queue_index + loop_count) % requests_per_cq_.size();
292
+ rc = reinterpret_cast<RequestedCall*>(requests_per_cq_[cq_idx].Pop());
293
+ if (rc != nullptr) {
294
+ break;
295
+ }
296
+ }
297
+ if (rc == nullptr) {
298
+ calld->SetState(CallData::CallState::PENDING);
299
+ pending_.push(calld);
300
+ return;
301
+ }
302
+ }
303
+ GRPC_STATS_INC_SERVER_CQS_CHECKED(loop_count + requests_per_cq_.size());
304
+ calld->SetState(CallData::CallState::ACTIVATED);
305
+ calld->Publish(cq_idx, rc);
306
+ }
176
307
 
177
- request_matcher* matcher = nullptr;
178
- grpc_byte_buffer* payload = nullptr;
308
+ Server* server() const override { return server_; }
179
309
 
180
- grpc_closure got_initial_metadata;
181
- grpc_closure server_on_recv_initial_metadata;
182
- grpc_closure kill_zombie_closure;
183
- grpc_closure* on_done_recv_initial_metadata;
184
- grpc_closure recv_trailing_metadata_ready;
185
- grpc_error* recv_initial_metadata_error = GRPC_ERROR_NONE;
186
- grpc_closure* original_recv_trailing_metadata_ready;
187
- grpc_error* recv_trailing_metadata_error = GRPC_ERROR_NONE;
188
- bool seen_recv_trailing_metadata_ready = false;
310
+ private:
311
+ Server* const server_;
312
+ std::queue<CallData*> pending_;
313
+ std::vector<LockedMultiProducerSingleConsumerQueue> requests_per_cq_;
314
+ };
189
315
 
190
- grpc_closure publish;
316
+ // AllocatingRequestMatchers don't allow the application to request an RPC in
317
+ // advance or queue up any incoming RPC for later match. Instead, MatchOrQueue
318
+ // will call out to an allocation function passed in at the construction of the
319
+ // object. These request matchers are designed for the C++ callback API, so they
320
+ // only support 1 completion queue (passed in at the constructor).
321
+ class Server::AllocatingRequestMatcherBase : public RequestMatcherInterface {
322
+ public:
323
+ AllocatingRequestMatcherBase(Server* server, grpc_completion_queue* cq)
324
+ : server_(server), cq_(cq) {
325
+ size_t idx;
326
+ for (idx = 0; idx < server->cqs_.size(); idx++) {
327
+ if (server->cqs_[idx] == cq) {
328
+ break;
329
+ }
330
+ }
331
+ GPR_ASSERT(idx < server->cqs_.size());
332
+ cq_idx_ = idx;
333
+ }
191
334
 
192
- call_data* pending_next = nullptr;
193
- grpc_core::CallCombiner* call_combiner;
194
- };
335
+ void ZombifyPending() override {}
195
336
 
196
- struct request_matcher {
197
- grpc_server* server;
198
- call_data* pending_head;
199
- call_data* pending_tail;
200
- gpr_locked_mpscq* requests_per_cq;
201
- };
337
+ void KillRequests(grpc_error* error) override { GRPC_ERROR_UNREF(error); }
202
338
 
203
- struct registered_method {
204
- char* method;
205
- char* host;
206
- grpc_server_register_method_payload_handling payload_handling;
207
- uint32_t flags;
208
- /* one request matcher per method */
209
- request_matcher matcher;
210
- registered_method* next;
211
- };
339
+ size_t request_queue_count() const override { return 0; }
212
340
 
213
- typedef struct {
214
- grpc_channel** channels;
215
- size_t num_channels;
216
- } channel_broadcaster;
217
- } // namespace
341
+ void RequestCallWithPossiblePublish(size_t /*request_queue_index*/,
342
+ RequestedCall* /*call*/) final {
343
+ GPR_ASSERT(false);
344
+ }
218
345
 
219
- struct grpc_server {
220
- grpc_channel_args* channel_args;
346
+ Server* server() const override { return server_; }
221
347
 
222
- grpc_resource_user* default_resource_user;
348
+ // Supply the completion queue related to this request matcher
349
+ grpc_completion_queue* cq() const { return cq_; }
223
350
 
224
- grpc_completion_queue** cqs;
225
- grpc_pollset** pollsets;
226
- size_t cq_count;
227
- size_t pollset_count;
228
- bool started;
351
+ // Supply the completion queue's index relative to the server.
352
+ size_t cq_idx() const { return cq_idx_; }
229
353
 
230
- /* The two following mutexes control access to server-state
231
- mu_global controls access to non-call-related state (e.g., channel state)
232
- mu_call controls access to call-related state (e.g., the call lists)
354
+ private:
355
+ Server* const server_;
356
+ grpc_completion_queue* const cq_;
357
+ size_t cq_idx_;
358
+ };
233
359
 
234
- If they are ever required to be nested, you must lock mu_global
235
- before mu_call. This is currently used in shutdown processing
236
- (grpc_server_shutdown_and_notify and maybe_finish_shutdown) */
237
- gpr_mu mu_global; /* mutex for server and channel state */
238
- gpr_mu mu_call; /* mutex for call-specific state */
360
+ // An allocating request matcher for non-registered methods (used for generic
361
+ // API and unimplemented RPCs).
362
+ class Server::AllocatingRequestMatcherBatch
363
+ : public AllocatingRequestMatcherBase {
364
+ public:
365
+ AllocatingRequestMatcherBatch(Server* server, grpc_completion_queue* cq,
366
+ std::function<BatchCallAllocation()> allocator)
367
+ : AllocatingRequestMatcherBase(server, cq),
368
+ allocator_(std::move(allocator)) {}
369
+
370
+ void MatchOrQueue(size_t /*start_request_queue_index*/,
371
+ CallData* calld) override {
372
+ BatchCallAllocation call_info = allocator_();
373
+ GPR_ASSERT(server()->ValidateServerRequest(
374
+ cq(), static_cast<void*>(call_info.tag), nullptr, nullptr) ==
375
+ GRPC_CALL_OK);
376
+ RequestedCall* rc = new RequestedCall(
377
+ static_cast<void*>(call_info.tag), cq(), call_info.call,
378
+ call_info.initial_metadata, call_info.details);
379
+ calld->SetState(CallData::CallState::ACTIVATED);
380
+ calld->Publish(cq_idx(), rc);
381
+ }
382
+
383
+ private:
384
+ std::function<BatchCallAllocation()> allocator_;
385
+ };
239
386
 
240
- /* startup synchronization: flag is protected by mu_global, signals whether
241
- we are doing the listener start routine or not */
242
- bool starting;
243
- gpr_cv starting_cv;
387
+ // An allocating request matcher for registered methods.
388
+ class Server::AllocatingRequestMatcherRegistered
389
+ : public AllocatingRequestMatcherBase {
390
+ public:
391
+ AllocatingRequestMatcherRegistered(
392
+ Server* server, grpc_completion_queue* cq, RegisteredMethod* rm,
393
+ std::function<RegisteredCallAllocation()> allocator)
394
+ : AllocatingRequestMatcherBase(server, cq),
395
+ registered_method_(rm),
396
+ allocator_(std::move(allocator)) {}
397
+
398
+ void MatchOrQueue(size_t /*start_request_queue_index*/,
399
+ CallData* calld) override {
400
+ RegisteredCallAllocation call_info = allocator_();
401
+ GPR_ASSERT(
402
+ server()->ValidateServerRequest(cq(), static_cast<void*>(call_info.tag),
403
+ call_info.optional_payload,
404
+ registered_method_) == GRPC_CALL_OK);
405
+ RequestedCall* rc = new RequestedCall(
406
+ static_cast<void*>(call_info.tag), cq(), call_info.call,
407
+ call_info.initial_metadata, registered_method_, call_info.deadline,
408
+ call_info.optional_payload);
409
+ calld->SetState(CallData::CallState::ACTIVATED);
410
+ calld->Publish(cq_idx(), rc);
411
+ }
412
+
413
+ private:
414
+ RegisteredMethod* const registered_method_;
415
+ std::function<RegisteredCallAllocation()> allocator_;
416
+ };
244
417
 
245
- registered_method* registered_methods;
246
- /** one request matcher for unregistered methods */
247
- request_matcher unregistered_request_matcher;
418
+ //
419
+ // ChannelBroadcaster
420
+ //
248
421
 
249
- gpr_atm shutdown_flag;
250
- uint8_t shutdown_published;
251
- size_t num_shutdown_tags;
252
- shutdown_tag* shutdown_tags;
422
+ namespace {
253
423
 
254
- channel_data root_channel_data;
424
+ class ChannelBroadcaster {
425
+ public:
426
+ // This can have an empty constructor and destructor since we want to control
427
+ // when the actual setup and shutdown broadcast take place.
255
428
 
256
- listener* listeners;
257
- int listeners_destroyed;
258
- gpr_refcount internal_refcount;
429
+ // Copies over the channels from the locked server.
430
+ void FillChannelsLocked(std::vector<grpc_channel*> channels) {
431
+ GPR_DEBUG_ASSERT(channels_.empty());
432
+ channels_ = std::move(channels);
433
+ }
259
434
 
260
- /** when did we print the last shutdown progress message */
261
- gpr_timespec last_shutdown_message_time;
435
+ // Broadcasts a shutdown on each channel.
436
+ void BroadcastShutdown(bool send_goaway, grpc_error* force_disconnect) {
437
+ for (grpc_channel* channel : channels_) {
438
+ SendShutdown(channel, send_goaway, GRPC_ERROR_REF(force_disconnect));
439
+ GRPC_CHANNEL_INTERNAL_UNREF(channel, "broadcast");
440
+ }
441
+ channels_.clear(); // just for safety against double broadcast
442
+ GRPC_ERROR_UNREF(force_disconnect);
443
+ }
262
444
 
263
- grpc_core::RefCountedPtr<grpc_core::channelz::ServerNode> channelz_server;
264
- };
445
+ private:
446
+ struct ShutdownCleanupArgs {
447
+ grpc_closure closure;
448
+ grpc_slice slice;
449
+ };
265
450
 
266
- #define SERVER_FROM_CALL_ELEM(elem) \
267
- (((channel_data*)(elem)->channel_data)->server)
268
-
269
- static void publish_new_rpc(void* calld, grpc_error* error);
270
- static void fail_call(grpc_server* server, size_t cq_idx, requested_call* rc,
271
- grpc_error* error);
272
- /* Before calling maybe_finish_shutdown, we must hold mu_global and not
273
- hold mu_call */
274
- static void maybe_finish_shutdown(grpc_server* server);
275
-
276
- /*
277
- * channel broadcaster
278
- */
279
-
280
- /* assumes server locked */
281
- static void channel_broadcaster_init(grpc_server* s, channel_broadcaster* cb) {
282
- channel_data* c;
283
- size_t count = 0;
284
- for (c = s->root_channel_data.next; c != &s->root_channel_data; c = c->next) {
285
- count++;
286
- }
287
- cb->num_channels = count;
288
- cb->channels = static_cast<grpc_channel**>(
289
- gpr_malloc(sizeof(*cb->channels) * cb->num_channels));
290
- count = 0;
291
- for (c = s->root_channel_data.next; c != &s->root_channel_data; c = c->next) {
292
- cb->channels[count++] = c->channel;
293
- GRPC_CHANNEL_INTERNAL_REF(c->channel, "broadcast");
451
+ static void ShutdownCleanup(void* arg, grpc_error* /*error*/) {
452
+ ShutdownCleanupArgs* a = static_cast<ShutdownCleanupArgs*>(arg);
453
+ grpc_slice_unref_internal(a->slice);
454
+ delete a;
294
455
  }
295
- }
296
456
 
297
- struct shutdown_cleanup_args {
298
- grpc_closure closure;
299
- grpc_slice slice;
457
+ static void SendShutdown(grpc_channel* channel, bool send_goaway,
458
+ grpc_error* send_disconnect) {
459
+ ShutdownCleanupArgs* sc = new ShutdownCleanupArgs;
460
+ GRPC_CLOSURE_INIT(&sc->closure, ShutdownCleanup, sc,
461
+ grpc_schedule_on_exec_ctx);
462
+ grpc_transport_op* op = grpc_make_transport_op(&sc->closure);
463
+ grpc_channel_element* elem;
464
+ op->goaway_error =
465
+ send_goaway
466
+ ? grpc_error_set_int(
467
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server shutdown"),
468
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_OK)
469
+ : GRPC_ERROR_NONE;
470
+ op->set_accept_stream = true;
471
+ sc->slice = grpc_slice_from_copied_string("Server shutdown");
472
+ op->disconnect_with_error = send_disconnect;
473
+ elem =
474
+ grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0);
475
+ elem->filter->start_transport_op(elem, op);
476
+ }
477
+
478
+ std::vector<grpc_channel*> channels_;
300
479
  };
301
480
 
302
- static void shutdown_cleanup(void* arg, grpc_error* error) {
303
- struct shutdown_cleanup_args* a =
304
- static_cast<struct shutdown_cleanup_args*>(arg);
305
- grpc_slice_unref_internal(a->slice);
306
- gpr_free(a);
307
- }
481
+ } // namespace
308
482
 
309
- static void send_shutdown(grpc_channel* channel, bool send_goaway,
310
- grpc_error* send_disconnect) {
311
- struct shutdown_cleanup_args* sc =
312
- static_cast<struct shutdown_cleanup_args*>(gpr_malloc(sizeof(*sc)));
313
- GRPC_CLOSURE_INIT(&sc->closure, shutdown_cleanup, sc,
314
- grpc_schedule_on_exec_ctx);
315
- grpc_transport_op* op = grpc_make_transport_op(&sc->closure);
316
- grpc_channel_element* elem;
317
-
318
- op->goaway_error =
319
- send_goaway ? grpc_error_set_int(
320
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server shutdown"),
321
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_OK)
322
- : GRPC_ERROR_NONE;
323
- op->set_accept_stream = true;
324
- sc->slice = grpc_slice_from_copied_string("Server shutdown");
325
- op->disconnect_with_error = send_disconnect;
483
+ //
484
+ // Server
485
+ //
326
486
 
327
- elem = grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0);
328
- elem->filter->start_transport_op(elem, op);
329
- }
487
+ const grpc_channel_filter Server::kServerTopFilter = {
488
+ Server::CallData::StartTransportStreamOpBatch,
489
+ grpc_channel_next_op,
490
+ sizeof(Server::CallData),
491
+ Server::CallData::InitCallElement,
492
+ grpc_call_stack_ignore_set_pollset_or_pollset_set,
493
+ Server::CallData::DestroyCallElement,
494
+ sizeof(Server::ChannelData),
495
+ Server::ChannelData::InitChannelElement,
496
+ Server::ChannelData::DestroyChannelElement,
497
+ grpc_channel_next_get_info,
498
+ "server",
499
+ };
330
500
 
331
- static void channel_broadcaster_shutdown(channel_broadcaster* cb,
332
- bool send_goaway,
333
- grpc_error* force_disconnect) {
334
- size_t i;
501
+ namespace {
335
502
 
336
- for (i = 0; i < cb->num_channels; i++) {
337
- send_shutdown(cb->channels[i], send_goaway,
338
- GRPC_ERROR_REF(force_disconnect));
339
- GRPC_CHANNEL_INTERNAL_UNREF(cb->channels[i], "broadcast");
503
+ grpc_resource_user* CreateDefaultResourceUser(const grpc_channel_args* args) {
504
+ if (args != nullptr) {
505
+ grpc_resource_quota* resource_quota =
506
+ grpc_resource_quota_from_channel_args(args, false /* create */);
507
+ if (resource_quota != nullptr) {
508
+ return grpc_resource_user_create(resource_quota, "default");
509
+ }
340
510
  }
341
- gpr_free(cb->channels);
342
- GRPC_ERROR_UNREF(force_disconnect);
511
+ return nullptr;
343
512
  }
344
513
 
345
- /*
346
- * request_matcher
347
- */
348
-
349
- static void request_matcher_init(request_matcher* rm, grpc_server* server) {
350
- rm->server = server;
351
- rm->pending_head = rm->pending_tail = nullptr;
352
- rm->requests_per_cq = static_cast<gpr_locked_mpscq*>(
353
- gpr_malloc(sizeof(*rm->requests_per_cq) * server->cq_count));
354
- for (size_t i = 0; i < server->cq_count; i++) {
355
- gpr_locked_mpscq_init(&rm->requests_per_cq[i]);
514
+ RefCountedPtr<channelz::ServerNode> CreateChannelzNode(
515
+ Server* server, const grpc_channel_args* args) {
516
+ RefCountedPtr<channelz::ServerNode> channelz_node;
517
+ if (grpc_channel_args_find_bool(args, GRPC_ARG_ENABLE_CHANNELZ,
518
+ GRPC_ENABLE_CHANNELZ_DEFAULT)) {
519
+ size_t channel_tracer_max_memory = grpc_channel_args_find_integer(
520
+ args, GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE,
521
+ {GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0, INT_MAX});
522
+ channelz_node =
523
+ MakeRefCounted<channelz::ServerNode>(channel_tracer_max_memory);
524
+ channelz_node->AddTraceEvent(
525
+ channelz::ChannelTrace::Severity::Info,
526
+ grpc_slice_from_static_string("Server created"));
356
527
  }
528
+ return channelz_node;
357
529
  }
358
530
 
359
- static void request_matcher_destroy(request_matcher* rm) {
360
- for (size_t i = 0; i < rm->server->cq_count; i++) {
361
- GPR_ASSERT(gpr_locked_mpscq_pop(&rm->requests_per_cq[i]) == nullptr);
362
- gpr_locked_mpscq_destroy(&rm->requests_per_cq[i]);
363
- }
364
- gpr_free(rm->requests_per_cq);
365
- }
531
+ } // namespace
366
532
 
367
- static void kill_zombie(void* elem, grpc_error* error) {
368
- grpc_call_unref(
369
- grpc_call_from_top_element(static_cast<grpc_call_element*>(elem)));
370
- }
533
+ Server::Server(const grpc_channel_args* args)
534
+ : channel_args_(grpc_channel_args_copy(args)),
535
+ default_resource_user_(CreateDefaultResourceUser(args)),
536
+ channelz_node_(CreateChannelzNode(this, args)) {}
371
537
 
372
- static void request_matcher_zombify_all_pending_calls(request_matcher* rm) {
373
- while (rm->pending_head) {
374
- call_data* calld = rm->pending_head;
375
- rm->pending_head = calld->pending_next;
376
- gpr_atm_no_barrier_store(&calld->state, ZOMBIED);
377
- GRPC_CLOSURE_INIT(
378
- &calld->kill_zombie_closure, kill_zombie,
379
- grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0),
380
- grpc_schedule_on_exec_ctx);
381
- GRPC_CLOSURE_SCHED(&calld->kill_zombie_closure, GRPC_ERROR_NONE);
538
+ Server::~Server() {
539
+ grpc_channel_args_destroy(channel_args_);
540
+ for (size_t i = 0; i < cqs_.size(); i++) {
541
+ GRPC_CQ_INTERNAL_UNREF(cqs_[i], "server");
382
542
  }
383
543
  }
384
544
 
385
- static void request_matcher_kill_requests(grpc_server* server,
386
- request_matcher* rm,
387
- grpc_error* error) {
388
- requested_call* rc;
389
- for (size_t i = 0; i < server->cq_count; i++) {
390
- while ((rc = reinterpret_cast<requested_call*>(
391
- gpr_locked_mpscq_pop(&rm->requests_per_cq[i]))) != nullptr) {
392
- fail_call(server, i, rc, GRPC_ERROR_REF(error));
393
- }
545
+ void Server::AddListener(OrphanablePtr<ListenerInterface> listener) {
546
+ channelz::ListenSocketNode* listen_socket_node =
547
+ listener->channelz_listen_socket_node();
548
+ if (listen_socket_node != nullptr && channelz_node_ != nullptr) {
549
+ channelz_node_->AddChildListenSocket(listen_socket_node->Ref());
394
550
  }
395
- GRPC_ERROR_UNREF(error);
551
+ listeners_.emplace_back(std::move(listener));
396
552
  }
397
553
 
398
- /*
399
- * server proper
400
- */
401
-
402
- static void server_ref(grpc_server* server) {
403
- gpr_ref(&server->internal_refcount);
404
- }
405
-
406
- static void server_delete(grpc_server* server) {
407
- registered_method* rm;
408
- size_t i;
409
- server->channelz_server.reset();
410
- grpc_channel_args_destroy(server->channel_args);
411
- gpr_mu_destroy(&server->mu_global);
412
- gpr_mu_destroy(&server->mu_call);
413
- gpr_cv_destroy(&server->starting_cv);
414
- while ((rm = server->registered_methods) != nullptr) {
415
- server->registered_methods = rm->next;
416
- if (server->started) {
417
- request_matcher_destroy(&rm->matcher);
554
+ void Server::Start() {
555
+ started_ = true;
556
+ for (grpc_completion_queue* cq : cqs_) {
557
+ if (grpc_cq_can_listen(cq)) {
558
+ pollsets_.push_back(grpc_cq_pollset(cq));
559
+ }
560
+ }
561
+ if (unregistered_request_matcher_ == nullptr) {
562
+ unregistered_request_matcher_ = absl::make_unique<RealRequestMatcher>(this);
563
+ }
564
+ for (std::unique_ptr<RegisteredMethod>& rm : registered_methods_) {
565
+ if (rm->matcher == nullptr) {
566
+ rm->matcher = absl::make_unique<RealRequestMatcher>(this);
418
567
  }
419
- gpr_free(rm->method);
420
- gpr_free(rm->host);
421
- gpr_free(rm);
422
568
  }
423
- if (server->started) {
424
- request_matcher_destroy(&server->unregistered_request_matcher);
569
+ {
570
+ MutexLock lock(&mu_global_);
571
+ starting_ = true;
425
572
  }
426
- for (i = 0; i < server->cq_count; i++) {
427
- GRPC_CQ_INTERNAL_UNREF(server->cqs[i], "server");
573
+ for (auto& listener : listeners_) {
574
+ listener.listener->Start(this, &pollsets_);
428
575
  }
429
- gpr_free(server->cqs);
430
- gpr_free(server->pollsets);
431
- gpr_free(server->shutdown_tags);
432
- gpr_free(server);
576
+ MutexLock lock(&mu_global_);
577
+ starting_ = false;
578
+ starting_cv_.Signal();
433
579
  }
434
580
 
435
- static void server_unref(grpc_server* server) {
436
- if (gpr_unref(&server->internal_refcount)) {
437
- server_delete(server);
581
+ void Server::SetupTransport(
582
+ grpc_transport* transport, grpc_pollset* accepting_pollset,
583
+ const grpc_channel_args* args,
584
+ const RefCountedPtr<grpc_core::channelz::SocketNode>& socket_node,
585
+ grpc_resource_user* resource_user) {
586
+ // Create channel.
587
+ grpc_channel* channel = grpc_channel_create(
588
+ nullptr, args, GRPC_SERVER_CHANNEL, transport, resource_user);
589
+ ChannelData* chand = static_cast<ChannelData*>(
590
+ grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0)
591
+ ->channel_data);
592
+ // Set up CQs.
593
+ size_t cq_idx;
594
+ for (cq_idx = 0; cq_idx < cqs_.size(); cq_idx++) {
595
+ if (grpc_cq_pollset(cqs_[cq_idx]) == accepting_pollset) break;
596
+ }
597
+ if (cq_idx == cqs_.size()) {
598
+ // Completion queue not found. Pick a random one to publish new calls to.
599
+ cq_idx = static_cast<size_t>(rand()) % cqs_.size();
438
600
  }
601
+ // Set up channelz node.
602
+ intptr_t channelz_socket_uuid = 0;
603
+ if (socket_node != nullptr) {
604
+ channelz_socket_uuid = socket_node->uuid();
605
+ channelz_node_->AddChildSocket(socket_node);
606
+ }
607
+ // Initialize chand.
608
+ chand->InitTransport(Ref(), channel, cq_idx, transport, channelz_socket_uuid);
439
609
  }
440
610
 
441
- static int is_channel_orphaned(channel_data* chand) {
442
- return chand->next == chand;
611
+ bool Server::HasOpenConnections() {
612
+ MutexLock lock(&mu_global_);
613
+ return !channels_.empty();
443
614
  }
444
615
 
445
- static void orphan_channel(channel_data* chand) {
446
- chand->next->prev = chand->prev;
447
- chand->prev->next = chand->next;
448
- chand->next = chand->prev = chand;
616
+ void Server::SetRegisteredMethodAllocator(
617
+ grpc_completion_queue* cq, void* method_tag,
618
+ std::function<RegisteredCallAllocation()> allocator) {
619
+ RegisteredMethod* rm = static_cast<RegisteredMethod*>(method_tag);
620
+ rm->matcher = absl::make_unique<AllocatingRequestMatcherRegistered>(
621
+ this, cq, rm, std::move(allocator));
449
622
  }
450
623
 
451
- static void finish_destroy_channel(void* cd, grpc_error* error) {
452
- channel_data* chand = static_cast<channel_data*>(cd);
453
- grpc_server* server = chand->server;
454
- GRPC_CHANNEL_INTERNAL_UNREF(chand->channel, "server");
455
- server_unref(server);
624
+ void Server::SetBatchMethodAllocator(
625
+ grpc_completion_queue* cq, std::function<BatchCallAllocation()> allocator) {
626
+ GPR_DEBUG_ASSERT(unregistered_request_matcher_ == nullptr);
627
+ unregistered_request_matcher_ =
628
+ absl::make_unique<AllocatingRequestMatcherBatch>(this, cq,
629
+ std::move(allocator));
456
630
  }
457
631
 
458
- static void destroy_channel(channel_data* chand, grpc_error* error) {
459
- if (is_channel_orphaned(chand)) return;
460
- GPR_ASSERT(chand->server != nullptr);
461
- orphan_channel(chand);
462
- server_ref(chand->server);
463
- maybe_finish_shutdown(chand->server);
464
- GRPC_CLOSURE_INIT(&chand->finish_destroy_channel_closure,
465
- finish_destroy_channel, chand, grpc_schedule_on_exec_ctx);
466
-
467
- if (GRPC_TRACE_FLAG_ENABLED(grpc_server_channel_trace) &&
468
- error != GRPC_ERROR_NONE) {
469
- const char* msg = grpc_error_string(error);
470
- gpr_log(GPR_INFO, "Disconnected client: %s", msg);
632
+ void Server::RegisterCompletionQueue(grpc_completion_queue* cq) {
633
+ for (grpc_completion_queue* queue : cqs_) {
634
+ if (queue == cq) return;
471
635
  }
472
- GRPC_ERROR_UNREF(error);
473
-
474
- grpc_transport_op* op =
475
- grpc_make_transport_op(&chand->finish_destroy_channel_closure);
476
- op->set_accept_stream = true;
477
- grpc_channel_next_op(grpc_channel_stack_element(
478
- grpc_channel_get_channel_stack(chand->channel), 0),
479
- op);
636
+ GRPC_CQ_INTERNAL_REF(cq, "server");
637
+ cqs_.push_back(cq);
480
638
  }
481
639
 
482
- static void done_request_event(void* req, grpc_cq_completion* c) {
483
- gpr_free(req);
640
+ namespace {
641
+
642
+ bool streq(const std::string& a, const char* b) {
643
+ return (a.empty() && b == nullptr) ||
644
+ ((b != nullptr) && !strcmp(a.c_str(), b));
484
645
  }
485
646
 
486
- static void publish_call(grpc_server* server, call_data* calld, size_t cq_idx,
487
- requested_call* rc) {
488
- grpc_call_set_completion_queue(calld->call, rc->cq_bound_to_call);
489
- grpc_call* call = calld->call;
490
- *rc->call = call;
491
- calld->cq_new = server->cqs[cq_idx];
492
- GPR_SWAP(grpc_metadata_array, *rc->initial_metadata, calld->initial_metadata);
493
- switch (rc->type) {
494
- case BATCH_CALL:
495
- GPR_ASSERT(calld->host_set);
496
- GPR_ASSERT(calld->path_set);
497
- rc->data.batch.details->host = grpc_slice_ref_internal(calld->host);
498
- rc->data.batch.details->method = grpc_slice_ref_internal(calld->path);
499
- rc->data.batch.details->deadline =
500
- grpc_millis_to_timespec(calld->deadline, GPR_CLOCK_MONOTONIC);
501
- rc->data.batch.details->flags = calld->recv_initial_metadata_flags;
502
- break;
503
- case REGISTERED_CALL:
504
- *rc->data.registered.deadline =
505
- grpc_millis_to_timespec(calld->deadline, GPR_CLOCK_MONOTONIC);
506
- if (rc->data.registered.optional_payload) {
507
- *rc->data.registered.optional_payload = calld->payload;
508
- calld->payload = nullptr;
509
- }
510
- break;
511
- default:
512
- GPR_UNREACHABLE_CODE(return );
647
+ } // namespace
648
+
649
+ Server::RegisteredMethod* Server::RegisterMethod(
650
+ const char* method, const char* host,
651
+ grpc_server_register_method_payload_handling payload_handling,
652
+ uint32_t flags) {
653
+ if (!method) {
654
+ gpr_log(GPR_ERROR,
655
+ "grpc_server_register_method method string cannot be NULL");
656
+ return nullptr;
657
+ }
658
+ for (std::unique_ptr<RegisteredMethod>& m : registered_methods_) {
659
+ if (streq(m->method, method) && streq(m->host, host)) {
660
+ gpr_log(GPR_ERROR, "duplicate registration for %s@%s", method,
661
+ host ? host : "*");
662
+ return nullptr;
663
+ }
664
+ }
665
+ if ((flags & ~GRPC_INITIAL_METADATA_USED_MASK) != 0) {
666
+ gpr_log(GPR_ERROR, "grpc_server_register_method invalid flags 0x%08x",
667
+ flags);
668
+ return nullptr;
513
669
  }
670
+ registered_methods_.emplace_back(absl::make_unique<RegisteredMethod>(
671
+ method, host, payload_handling, flags));
672
+ return registered_methods_.back().get();
673
+ }
514
674
 
515
- grpc_cq_end_op(calld->cq_new, rc->tag, GRPC_ERROR_NONE, done_request_event,
516
- rc, &rc->completion);
675
+ void Server::DoneRequestEvent(void* req, grpc_cq_completion* /*c*/) {
676
+ delete static_cast<RequestedCall*>(req);
517
677
  }
518
678
 
519
- static void publish_new_rpc(void* arg, grpc_error* error) {
520
- grpc_call_element* call_elem = static_cast<grpc_call_element*>(arg);
521
- call_data* calld = static_cast<call_data*>(call_elem->call_data);
522
- channel_data* chand = static_cast<channel_data*>(call_elem->channel_data);
523
- request_matcher* rm = calld->matcher;
524
- grpc_server* server = rm->server;
525
-
526
- if (error != GRPC_ERROR_NONE || gpr_atm_acq_load(&server->shutdown_flag)) {
527
- gpr_atm_no_barrier_store(&calld->state, ZOMBIED);
528
- GRPC_CLOSURE_INIT(
529
- &calld->kill_zombie_closure, kill_zombie,
530
- grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0),
531
- grpc_schedule_on_exec_ctx);
532
- GRPC_CLOSURE_SCHED(&calld->kill_zombie_closure, GRPC_ERROR_REF(error));
679
+ void Server::FailCall(size_t cq_idx, RequestedCall* rc, grpc_error* error) {
680
+ *rc->call = nullptr;
681
+ rc->initial_metadata->count = 0;
682
+ GPR_ASSERT(error != GRPC_ERROR_NONE);
683
+ grpc_cq_end_op(cqs_[cq_idx], rc->tag, error, DoneRequestEvent, rc,
684
+ &rc->completion);
685
+ }
686
+
687
+ // Before calling MaybeFinishShutdown(), we must hold mu_global_ and not
688
+ // hold mu_call_.
689
+ void Server::MaybeFinishShutdown() {
690
+ if (!shutdown_flag_.load(std::memory_order_acquire) || shutdown_published_) {
533
691
  return;
534
692
  }
535
-
536
- for (size_t i = 0; i < server->cq_count; i++) {
537
- size_t cq_idx = (chand->cq_idx + i) % server->cq_count;
538
- requested_call* rc = reinterpret_cast<requested_call*>(
539
- gpr_locked_mpscq_try_pop(&rm->requests_per_cq[cq_idx]));
540
- if (rc == nullptr) {
541
- continue;
542
- } else {
543
- GRPC_STATS_INC_SERVER_CQS_CHECKED(i);
544
- gpr_atm_no_barrier_store(&calld->state, ACTIVATED);
545
- publish_call(server, calld, cq_idx, rc);
546
- return; /* early out */
693
+ {
694
+ MutexLock lock(&mu_call_);
695
+ KillPendingWorkLocked(
696
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown"));
697
+ }
698
+ if (!channels_.empty() || listeners_destroyed_ < listeners_.size()) {
699
+ if (gpr_time_cmp(gpr_time_sub(gpr_now(GPR_CLOCK_REALTIME),
700
+ last_shutdown_message_time_),
701
+ gpr_time_from_seconds(1, GPR_TIMESPAN)) >= 0) {
702
+ last_shutdown_message_time_ = gpr_now(GPR_CLOCK_REALTIME);
703
+ gpr_log(GPR_DEBUG,
704
+ "Waiting for %" PRIuPTR " channels and %" PRIuPTR "/%" PRIuPTR
705
+ " listeners to be destroyed before shutting down server",
706
+ channels_.size(), listeners_.size() - listeners_destroyed_,
707
+ listeners_.size());
547
708
  }
709
+ return;
548
710
  }
711
+ shutdown_published_ = true;
712
+ for (auto& shutdown_tag : shutdown_tags_) {
713
+ Ref().release();
714
+ grpc_cq_end_op(shutdown_tag.cq, shutdown_tag.tag, GRPC_ERROR_NONE,
715
+ DoneShutdownEvent, this, &shutdown_tag.completion);
716
+ }
717
+ }
549
718
 
550
- /* no cq to take the request found: queue it on the slow list */
551
- GRPC_STATS_INC_SERVER_SLOWPATH_REQUESTS_QUEUED();
552
- gpr_mu_lock(&server->mu_call);
553
-
554
- // We need to ensure that all the queues are empty. We do this under
555
- // the server mu_call lock to ensure that if something is added to
556
- // an empty request queue, it will block until the call is actually
557
- // added to the pending list.
558
- for (size_t i = 0; i < server->cq_count; i++) {
559
- size_t cq_idx = (chand->cq_idx + i) % server->cq_count;
560
- requested_call* rc = reinterpret_cast<requested_call*>(
561
- gpr_locked_mpscq_pop(&rm->requests_per_cq[cq_idx]));
562
- if (rc == nullptr) {
563
- continue;
564
- } else {
565
- gpr_mu_unlock(&server->mu_call);
566
- GRPC_STATS_INC_SERVER_CQS_CHECKED(i + server->cq_count);
567
- gpr_atm_no_barrier_store(&calld->state, ACTIVATED);
568
- publish_call(server, calld, cq_idx, rc);
569
- return; /* early out */
719
+ void Server::KillPendingWorkLocked(grpc_error* error) {
720
+ if (started_) {
721
+ unregistered_request_matcher_->KillRequests(GRPC_ERROR_REF(error));
722
+ unregistered_request_matcher_->ZombifyPending();
723
+ for (std::unique_ptr<RegisteredMethod>& rm : registered_methods_) {
724
+ rm->matcher->KillRequests(GRPC_ERROR_REF(error));
725
+ rm->matcher->ZombifyPending();
570
726
  }
571
727
  }
728
+ GRPC_ERROR_UNREF(error);
729
+ }
572
730
 
573
- gpr_atm_no_barrier_store(&calld->state, PENDING);
574
- if (rm->pending_head == nullptr) {
575
- rm->pending_tail = rm->pending_head = calld;
576
- } else {
577
- rm->pending_tail->pending_next = calld;
578
- rm->pending_tail = calld;
731
+ std::vector<grpc_channel*> Server::GetChannelsLocked() const {
732
+ std::vector<grpc_channel*> channels;
733
+ channels.reserve(channels_.size());
734
+ for (const ChannelData* chand : channels_) {
735
+ channels.push_back(chand->channel());
736
+ GRPC_CHANNEL_INTERNAL_REF(chand->channel(), "broadcast");
579
737
  }
580
- calld->pending_next = nullptr;
581
- gpr_mu_unlock(&server->mu_call);
738
+ return channels;
582
739
  }
583
740
 
584
- static void finish_start_new_rpc(
585
- grpc_server* server, grpc_call_element* elem, request_matcher* rm,
586
- grpc_server_register_method_payload_handling payload_handling) {
587
- call_data* calld = static_cast<call_data*>(elem->call_data);
588
-
589
- if (gpr_atm_acq_load(&server->shutdown_flag)) {
590
- gpr_atm_no_barrier_store(&calld->state, ZOMBIED);
591
- GRPC_CLOSURE_INIT(&calld->kill_zombie_closure, kill_zombie, elem,
592
- grpc_schedule_on_exec_ctx);
593
- GRPC_CLOSURE_SCHED(&calld->kill_zombie_closure, GRPC_ERROR_NONE);
594
- return;
595
- }
741
+ void Server::ListenerDestroyDone(void* arg, grpc_error* /*error*/) {
742
+ Server* server = static_cast<Server*>(arg);
743
+ MutexLock lock(&server->mu_global_);
744
+ server->listeners_destroyed_++;
745
+ server->MaybeFinishShutdown();
746
+ }
596
747
 
597
- calld->matcher = rm;
748
+ namespace {
598
749
 
599
- switch (payload_handling) {
600
- case GRPC_SRM_PAYLOAD_NONE:
601
- publish_new_rpc(elem, GRPC_ERROR_NONE);
602
- break;
603
- case GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER: {
604
- grpc_op op;
605
- op.op = GRPC_OP_RECV_MESSAGE;
606
- op.flags = 0;
607
- op.reserved = nullptr;
608
- op.data.recv_message.recv_message = &calld->payload;
609
- GRPC_CLOSURE_INIT(&calld->publish, publish_new_rpc, elem,
610
- grpc_schedule_on_exec_ctx);
611
- grpc_call_start_batch_and_execute(calld->call, &op, 1, &calld->publish);
612
- break;
613
- }
614
- }
750
+ void DonePublishedShutdown(void* /*done_arg*/, grpc_cq_completion* storage) {
751
+ delete storage;
615
752
  }
616
753
 
617
- static void start_new_rpc(grpc_call_element* elem) {
618
- channel_data* chand = static_cast<channel_data*>(elem->channel_data);
619
- call_data* calld = static_cast<call_data*>(elem->call_data);
620
- grpc_server* server = chand->server;
621
- uint32_t i;
622
- uint32_t hash;
623
- channel_registered_method* rm;
624
-
625
- if (chand->registered_methods && calld->path_set && calld->host_set) {
626
- /* TODO(ctiller): unify these two searches */
627
- /* check for an exact match with host */
628
- hash = GRPC_MDSTR_KV_HASH(grpc_slice_hash(calld->host),
629
- grpc_slice_hash(calld->path));
630
- for (i = 0; i <= chand->registered_method_max_probes; i++) {
631
- rm = &chand->registered_methods[(hash + i) %
632
- chand->registered_method_slots];
633
- if (!rm) break;
634
- if (!rm->has_host) continue;
635
- if (!grpc_slice_eq(rm->host, calld->host)) continue;
636
- if (!grpc_slice_eq(rm->method, calld->path)) continue;
637
- if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
638
- 0 == (calld->recv_initial_metadata_flags &
639
- GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST)) {
640
- continue;
641
- }
642
- finish_start_new_rpc(server, elem, &rm->server_registered_method->matcher,
643
- rm->server_registered_method->payload_handling);
754
+ } // namespace
755
+
756
+ // - Kills all pending requests-for-incoming-RPC-calls (i.e., the requests made
757
+ // via grpc_server_request_call() and grpc_server_request_registered_call()
758
+ // will now be cancelled). See KillPendingWorkLocked().
759
+ //
760
+ // - Shuts down the listeners (i.e., the server will no longer listen on the
761
+ // port for new incoming channels).
762
+ //
763
+ // - Iterates through all channels on the server and sends shutdown msg (see
764
+ // ChannelBroadcaster::BroadcastShutdown() for details) to the clients via
765
+ // the transport layer. The transport layer then guarantees the following:
766
+ // -- Sends shutdown to the client (e.g., HTTP2 transport sends GOAWAY).
767
+ // -- If the server has outstanding calls that are in the process, the
768
+ // connection is NOT closed until the server is done with all those calls.
769
+ // -- Once there are no more calls in progress, the channel is closed.
770
+ void Server::ShutdownAndNotify(grpc_completion_queue* cq, void* tag) {
771
+ ChannelBroadcaster broadcaster;
772
+ {
773
+ // Wait for startup to be finished. Locks mu_global.
774
+ MutexLock lock(&mu_global_);
775
+ starting_cv_.WaitUntil(&mu_global_, [this] { return !starting_; });
776
+ // Stay locked, and gather up some stuff to do.
777
+ GPR_ASSERT(grpc_cq_begin_op(cq, tag));
778
+ if (shutdown_published_) {
779
+ grpc_cq_end_op(cq, tag, GRPC_ERROR_NONE, DonePublishedShutdown, nullptr,
780
+ new grpc_cq_completion);
644
781
  return;
645
782
  }
646
- /* check for a wildcard method definition (no host set) */
647
- hash = GRPC_MDSTR_KV_HASH(0, grpc_slice_hash(calld->path));
648
- for (i = 0; i <= chand->registered_method_max_probes; i++) {
649
- rm = &chand->registered_methods[(hash + i) %
650
- chand->registered_method_slots];
651
- if (!rm) break;
652
- if (rm->has_host) continue;
653
- if (!grpc_slice_eq(rm->method, calld->path)) continue;
654
- if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
655
- 0 == (calld->recv_initial_metadata_flags &
656
- GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST)) {
657
- continue;
658
- }
659
- finish_start_new_rpc(server, elem, &rm->server_registered_method->matcher,
660
- rm->server_registered_method->payload_handling);
783
+ shutdown_tags_.emplace_back(tag, cq);
784
+ if (shutdown_flag_.load(std::memory_order_acquire)) {
661
785
  return;
662
786
  }
787
+ last_shutdown_message_time_ = gpr_now(GPR_CLOCK_REALTIME);
788
+ broadcaster.FillChannelsLocked(GetChannelsLocked());
789
+ shutdown_flag_.store(true, std::memory_order_release);
790
+ // Collect all unregistered then registered calls.
791
+ {
792
+ MutexLock lock(&mu_call_);
793
+ KillPendingWorkLocked(
794
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown"));
795
+ }
796
+ MaybeFinishShutdown();
797
+ }
798
+ // Shutdown listeners.
799
+ for (auto& listener : listeners_) {
800
+ channelz::ListenSocketNode* channelz_listen_socket_node =
801
+ listener.listener->channelz_listen_socket_node();
802
+ if (channelz_node_ != nullptr && channelz_listen_socket_node != nullptr) {
803
+ channelz_node_->RemoveChildListenSocket(
804
+ channelz_listen_socket_node->uuid());
805
+ }
806
+ GRPC_CLOSURE_INIT(&listener.destroy_done, ListenerDestroyDone, this,
807
+ grpc_schedule_on_exec_ctx);
808
+ listener.listener->SetOnDestroyDone(&listener.destroy_done);
809
+ listener.listener.reset();
663
810
  }
664
- finish_start_new_rpc(server, elem, &server->unregistered_request_matcher,
665
- GRPC_SRM_PAYLOAD_NONE);
811
+ broadcaster.BroadcastShutdown(/*send_goaway=*/true, GRPC_ERROR_NONE);
666
812
  }
667
813
 
668
- static int num_listeners(grpc_server* server) {
669
- listener* l;
670
- int n = 0;
671
- for (l = server->listeners; l; l = l->next) {
672
- n++;
814
+ void Server::CancelAllCalls() {
815
+ ChannelBroadcaster broadcaster;
816
+ {
817
+ MutexLock lock(&mu_global_);
818
+ broadcaster.FillChannelsLocked(GetChannelsLocked());
673
819
  }
674
- return n;
820
+ broadcaster.BroadcastShutdown(
821
+ /*send_goaway=*/false,
822
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Cancelling all calls"));
675
823
  }
676
824
 
677
- static void done_shutdown_event(void* server, grpc_cq_completion* completion) {
678
- server_unref(static_cast<grpc_server*>(server));
825
+ void Server::Orphan() {
826
+ {
827
+ MutexLock lock(&mu_global_);
828
+ GPR_ASSERT(shutdown_flag_.load(std::memory_order_acquire) ||
829
+ listeners_.empty());
830
+ GPR_ASSERT(listeners_destroyed_ == listeners_.size());
831
+ }
832
+ if (default_resource_user_ != nullptr) {
833
+ grpc_resource_quota_unref(grpc_resource_user_quota(default_resource_user_));
834
+ grpc_resource_user_shutdown(default_resource_user_);
835
+ grpc_resource_user_unref(default_resource_user_);
836
+ }
837
+ Unref();
679
838
  }
680
839
 
681
- static int num_channels(grpc_server* server) {
682
- channel_data* chand;
683
- int n = 0;
684
- for (chand = server->root_channel_data.next;
685
- chand != &server->root_channel_data; chand = chand->next) {
686
- n++;
840
+ grpc_call_error Server::ValidateServerRequest(
841
+ grpc_completion_queue* cq_for_notification, void* tag,
842
+ grpc_byte_buffer** optional_payload, RegisteredMethod* rm) {
843
+ if ((rm == nullptr && optional_payload != nullptr) ||
844
+ ((rm != nullptr) && ((optional_payload == nullptr) !=
845
+ (rm->payload_handling == GRPC_SRM_PAYLOAD_NONE)))) {
846
+ return GRPC_CALL_ERROR_PAYLOAD_TYPE_MISMATCH;
847
+ }
848
+ if (grpc_cq_begin_op(cq_for_notification, tag) == false) {
849
+ return GRPC_CALL_ERROR_COMPLETION_QUEUE_SHUTDOWN;
687
850
  }
688
- return n;
851
+ return GRPC_CALL_OK;
689
852
  }
690
853
 
691
- static void kill_pending_work_locked(grpc_server* server, grpc_error* error) {
692
- if (server->started) {
693
- request_matcher_kill_requests(server, &server->unregistered_request_matcher,
694
- GRPC_ERROR_REF(error));
695
- request_matcher_zombify_all_pending_calls(
696
- &server->unregistered_request_matcher);
697
- for (registered_method* rm = server->registered_methods; rm;
698
- rm = rm->next) {
699
- request_matcher_kill_requests(server, &rm->matcher,
700
- GRPC_ERROR_REF(error));
701
- request_matcher_zombify_all_pending_calls(&rm->matcher);
854
+ grpc_call_error Server::ValidateServerRequestAndCq(
855
+ size_t* cq_idx, grpc_completion_queue* cq_for_notification, void* tag,
856
+ grpc_byte_buffer** optional_payload, RegisteredMethod* rm) {
857
+ size_t idx;
858
+ for (idx = 0; idx < cqs_.size(); idx++) {
859
+ if (cqs_[idx] == cq_for_notification) {
860
+ break;
702
861
  }
703
862
  }
704
- GRPC_ERROR_UNREF(error);
863
+ if (idx == cqs_.size()) {
864
+ return GRPC_CALL_ERROR_NOT_SERVER_COMPLETION_QUEUE;
865
+ }
866
+ grpc_call_error error =
867
+ ValidateServerRequest(cq_for_notification, tag, optional_payload, rm);
868
+ if (error != GRPC_CALL_OK) {
869
+ return error;
870
+ }
871
+ *cq_idx = idx;
872
+ return GRPC_CALL_OK;
705
873
  }
706
874
 
707
- static void maybe_finish_shutdown(grpc_server* server) {
708
- size_t i;
709
- if (!gpr_atm_acq_load(&server->shutdown_flag) || server->shutdown_published) {
710
- return;
875
+ grpc_call_error Server::QueueRequestedCall(size_t cq_idx, RequestedCall* rc) {
876
+ if (shutdown_flag_.load(std::memory_order_acquire)) {
877
+ FailCall(cq_idx, rc,
878
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown"));
879
+ return GRPC_CALL_OK;
880
+ }
881
+ RequestMatcherInterface* rm;
882
+ switch (rc->type) {
883
+ case RequestedCall::Type::BATCH_CALL:
884
+ rm = unregistered_request_matcher_.get();
885
+ break;
886
+ case RequestedCall::Type::REGISTERED_CALL:
887
+ rm = rc->data.registered.method->matcher.get();
888
+ break;
711
889
  }
890
+ rm->RequestCallWithPossiblePublish(cq_idx, rc);
891
+ return GRPC_CALL_OK;
892
+ }
712
893
 
713
- kill_pending_work_locked(
714
- server, GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown"));
894
+ grpc_call_error Server::RequestCall(grpc_call** call,
895
+ grpc_call_details* details,
896
+ grpc_metadata_array* request_metadata,
897
+ grpc_completion_queue* cq_bound_to_call,
898
+ grpc_completion_queue* cq_for_notification,
899
+ void* tag) {
900
+ size_t cq_idx;
901
+ grpc_call_error error = ValidateServerRequestAndCq(
902
+ &cq_idx, cq_for_notification, tag, nullptr, nullptr);
903
+ if (error != GRPC_CALL_OK) {
904
+ return error;
905
+ }
906
+ RequestedCall* rc =
907
+ new RequestedCall(tag, cq_bound_to_call, call, request_metadata, details);
908
+ return QueueRequestedCall(cq_idx, rc);
909
+ }
715
910
 
716
- if (server->root_channel_data.next != &server->root_channel_data ||
717
- server->listeners_destroyed < num_listeners(server)) {
718
- if (gpr_time_cmp(gpr_time_sub(gpr_now(GPR_CLOCK_REALTIME),
719
- server->last_shutdown_message_time),
720
- gpr_time_from_seconds(1, GPR_TIMESPAN)) >= 0) {
721
- server->last_shutdown_message_time = gpr_now(GPR_CLOCK_REALTIME);
722
- gpr_log(GPR_DEBUG,
723
- "Waiting for %d channels and %d/%d listeners to be destroyed"
724
- " before shutting down server",
725
- num_channels(server),
726
- num_listeners(server) - server->listeners_destroyed,
727
- num_listeners(server));
728
- }
729
- return;
730
- }
731
- server->shutdown_published = 1;
732
- for (i = 0; i < server->num_shutdown_tags; i++) {
733
- server_ref(server);
734
- grpc_cq_end_op(server->shutdown_tags[i].cq, server->shutdown_tags[i].tag,
735
- GRPC_ERROR_NONE, done_shutdown_event, server,
736
- &server->shutdown_tags[i].completion);
737
- }
911
+ grpc_call_error Server::RequestRegisteredCall(
912
+ RegisteredMethod* rm, grpc_call** call, gpr_timespec* deadline,
913
+ grpc_metadata_array* request_metadata, grpc_byte_buffer** optional_payload,
914
+ grpc_completion_queue* cq_bound_to_call,
915
+ grpc_completion_queue* cq_for_notification, void* tag_new) {
916
+ size_t cq_idx;
917
+ grpc_call_error error = ValidateServerRequestAndCq(
918
+ &cq_idx, cq_for_notification, tag_new, optional_payload, rm);
919
+ if (error != GRPC_CALL_OK) {
920
+ return error;
921
+ }
922
+ RequestedCall* rc =
923
+ new RequestedCall(tag_new, cq_bound_to_call, call, request_metadata, rm,
924
+ deadline, optional_payload);
925
+ return QueueRequestedCall(cq_idx, rc);
738
926
  }
739
927
 
740
- static void server_on_recv_initial_metadata(void* ptr, grpc_error* error) {
741
- grpc_call_element* elem = static_cast<grpc_call_element*>(ptr);
742
- call_data* calld = static_cast<call_data*>(elem->call_data);
743
- grpc_millis op_deadline;
928
+ //
929
+ // Server::ChannelData::ConnectivityWatcher
930
+ //
744
931
 
745
- if (error == GRPC_ERROR_NONE) {
746
- GPR_ASSERT(calld->recv_initial_metadata->idx.named.path != nullptr);
747
- GPR_ASSERT(calld->recv_initial_metadata->idx.named.authority != nullptr);
748
- calld->path = grpc_slice_ref_internal(
749
- GRPC_MDVALUE(calld->recv_initial_metadata->idx.named.path->md));
750
- calld->host = grpc_slice_ref_internal(
751
- GRPC_MDVALUE(calld->recv_initial_metadata->idx.named.authority->md));
752
- calld->path_set = true;
753
- calld->host_set = true;
754
- grpc_metadata_batch_remove(calld->recv_initial_metadata,
755
- calld->recv_initial_metadata->idx.named.path);
756
- grpc_metadata_batch_remove(
757
- calld->recv_initial_metadata,
758
- calld->recv_initial_metadata->idx.named.authority);
759
- } else {
760
- GRPC_ERROR_REF(error);
761
- }
762
- op_deadline = calld->recv_initial_metadata->deadline;
763
- if (op_deadline != GRPC_MILLIS_INF_FUTURE) {
764
- calld->deadline = op_deadline;
765
- }
766
- if (calld->host_set && calld->path_set) {
767
- /* do nothing */
768
- } else {
769
- /* Pass the error reference to calld->recv_initial_metadata_error */
770
- grpc_error* src_error = error;
771
- error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
772
- "Missing :authority or :path", &src_error, 1);
773
- GRPC_ERROR_UNREF(src_error);
774
- calld->recv_initial_metadata_error = GRPC_ERROR_REF(error);
775
- }
776
- grpc_closure* closure = calld->on_done_recv_initial_metadata;
777
- calld->on_done_recv_initial_metadata = nullptr;
778
- if (calld->seen_recv_trailing_metadata_ready) {
779
- GRPC_CALL_COMBINER_START(calld->call_combiner,
780
- &calld->recv_trailing_metadata_ready,
781
- calld->recv_trailing_metadata_error,
782
- "continue server_recv_trailing_metadata_ready");
932
+ class Server::ChannelData::ConnectivityWatcher
933
+ : public AsyncConnectivityStateWatcherInterface {
934
+ public:
935
+ explicit ConnectivityWatcher(ChannelData* chand) : chand_(chand) {
936
+ GRPC_CHANNEL_INTERNAL_REF(chand_->channel_, "connectivity");
783
937
  }
784
- GRPC_CLOSURE_RUN(closure, error);
785
- }
786
938
 
787
- static void server_recv_trailing_metadata_ready(void* user_data,
788
- grpc_error* error) {
789
- grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
790
- call_data* calld = static_cast<call_data*>(elem->call_data);
791
- if (calld->on_done_recv_initial_metadata != nullptr) {
792
- calld->recv_trailing_metadata_error = GRPC_ERROR_REF(error);
793
- calld->seen_recv_trailing_metadata_ready = true;
794
- GRPC_CLOSURE_INIT(&calld->recv_trailing_metadata_ready,
795
- server_recv_trailing_metadata_ready, elem,
796
- grpc_schedule_on_exec_ctx);
797
- GRPC_CALL_COMBINER_STOP(calld->call_combiner,
798
- "deferring server_recv_trailing_metadata_ready "
799
- "until after server_on_recv_initial_metadata");
800
- return;
939
+ ~ConnectivityWatcher() {
940
+ GRPC_CHANNEL_INTERNAL_UNREF(chand_->channel_, "connectivity");
801
941
  }
802
- error =
803
- grpc_error_add_child(GRPC_ERROR_REF(error),
804
- GRPC_ERROR_REF(calld->recv_initial_metadata_error));
805
- GRPC_CLOSURE_RUN(calld->original_recv_trailing_metadata_ready, error);
806
- }
807
942
 
808
- static void server_mutate_op(grpc_call_element* elem,
809
- grpc_transport_stream_op_batch* op) {
810
- call_data* calld = static_cast<call_data*>(elem->call_data);
811
-
812
- if (op->recv_initial_metadata) {
813
- GPR_ASSERT(op->payload->recv_initial_metadata.recv_flags == nullptr);
814
- calld->recv_initial_metadata =
815
- op->payload->recv_initial_metadata.recv_initial_metadata;
816
- calld->on_done_recv_initial_metadata =
817
- op->payload->recv_initial_metadata.recv_initial_metadata_ready;
818
- op->payload->recv_initial_metadata.recv_initial_metadata_ready =
819
- &calld->server_on_recv_initial_metadata;
820
- op->payload->recv_initial_metadata.recv_flags =
821
- &calld->recv_initial_metadata_flags;
822
- }
823
- if (op->recv_trailing_metadata) {
824
- calld->original_recv_trailing_metadata_ready =
825
- op->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
826
- op->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
827
- &calld->recv_trailing_metadata_ready;
943
+ private:
944
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
945
+ const absl::Status& /*status*/) override {
946
+ // Don't do anything until we are being shut down.
947
+ if (new_state != GRPC_CHANNEL_SHUTDOWN) return;
948
+ // Shut down channel.
949
+ MutexLock lock(&chand_->server_->mu_global_);
950
+ chand_->Destroy();
828
951
  }
829
- }
830
952
 
831
- static void server_start_transport_stream_op_batch(
832
- grpc_call_element* elem, grpc_transport_stream_op_batch* op) {
833
- server_mutate_op(elem, op);
834
- grpc_call_next_op(elem, op);
835
- }
953
+ ChannelData* chand_;
954
+ };
836
955
 
837
- static void got_initial_metadata(void* ptr, grpc_error* error) {
838
- grpc_call_element* elem = static_cast<grpc_call_element*>(ptr);
839
- call_data* calld = static_cast<call_data*>(elem->call_data);
840
- if (error == GRPC_ERROR_NONE) {
841
- start_new_rpc(elem);
842
- } else {
843
- if (gpr_atm_full_cas(&calld->state, NOT_STARTED, ZOMBIED)) {
844
- GRPC_CLOSURE_INIT(&calld->kill_zombie_closure, kill_zombie, elem,
845
- grpc_schedule_on_exec_ctx);
846
- GRPC_CLOSURE_SCHED(&calld->kill_zombie_closure, GRPC_ERROR_NONE);
847
- } else if (gpr_atm_full_cas(&calld->state, PENDING, ZOMBIED)) {
848
- /* zombied call will be destroyed when it's removed from the pending
849
- queue... later */
956
+ //
957
+ // Server::ChannelData
958
+ //
959
+
960
+ Server::ChannelData::~ChannelData() {
961
+ if (registered_methods_ != nullptr) {
962
+ for (const ChannelRegisteredMethod& crm : *registered_methods_) {
963
+ grpc_slice_unref_internal(crm.method);
964
+ GPR_DEBUG_ASSERT(crm.method.refcount == &kNoopRefcount ||
965
+ crm.method.refcount == nullptr);
966
+ if (crm.has_host) {
967
+ grpc_slice_unref_internal(crm.host);
968
+ GPR_DEBUG_ASSERT(crm.host.refcount == &kNoopRefcount ||
969
+ crm.host.refcount == nullptr);
970
+ }
971
+ }
972
+ registered_methods_.reset();
973
+ }
974
+ if (server_ != nullptr) {
975
+ if (server_->channelz_node_ != nullptr && channelz_socket_uuid_ != 0) {
976
+ server_->channelz_node_->RemoveChildSocket(channelz_socket_uuid_);
977
+ }
978
+ {
979
+ MutexLock lock(&server_->mu_global_);
980
+ if (list_position_.has_value()) {
981
+ server_->channels_.erase(*list_position_);
982
+ list_position_.reset();
983
+ }
984
+ server_->MaybeFinishShutdown();
850
985
  }
851
986
  }
852
987
  }
853
988
 
854
- static void accept_stream(void* cd, grpc_transport* transport,
855
- const void* transport_server_data) {
856
- channel_data* chand = static_cast<channel_data*>(cd);
857
- /* create a call */
858
- grpc_call_create_args args;
859
- args.channel = chand->channel;
860
- args.server = chand->server;
861
- args.parent = nullptr;
862
- args.propagation_mask = 0;
863
- args.cq = nullptr;
864
- args.pollset_set_alternative = nullptr;
865
- args.server_transport_data = transport_server_data;
866
- args.add_initial_metadata = nullptr;
867
- args.add_initial_metadata_count = 0;
868
- args.send_deadline = GRPC_MILLIS_INF_FUTURE;
869
- grpc_call* call;
870
- grpc_error* error = grpc_call_create(&args, &call);
871
- grpc_call_element* elem =
989
+ void Server::ChannelData::InitTransport(RefCountedPtr<Server> server,
990
+ grpc_channel* channel, size_t cq_idx,
991
+ grpc_transport* transport,
992
+ intptr_t channelz_socket_uuid) {
993
+ server_ = std::move(server);
994
+ channel_ = channel;
995
+ cq_idx_ = cq_idx;
996
+ channelz_socket_uuid_ = channelz_socket_uuid;
997
+ // Build a lookup table phrased in terms of mdstr's in this channels context
998
+ // to quickly find registered methods.
999
+ size_t num_registered_methods = server_->registered_methods_.size();
1000
+ if (num_registered_methods > 0) {
1001
+ uint32_t max_probes = 0;
1002
+ size_t slots = 2 * num_registered_methods;
1003
+ registered_methods_.reset(new std::vector<ChannelRegisteredMethod>(slots));
1004
+ for (std::unique_ptr<RegisteredMethod>& rm : server_->registered_methods_) {
1005
+ ExternallyManagedSlice host;
1006
+ ExternallyManagedSlice method(rm->method.c_str());
1007
+ const bool has_host = !rm->host.empty();
1008
+ if (has_host) {
1009
+ host = ExternallyManagedSlice(rm->host.c_str());
1010
+ }
1011
+ uint32_t hash =
1012
+ GRPC_MDSTR_KV_HASH(has_host ? host.Hash() : 0, method.Hash());
1013
+ uint32_t probes = 0;
1014
+ for (probes = 0; (*registered_methods_)[(hash + probes) % slots]
1015
+ .server_registered_method != nullptr;
1016
+ probes++) {
1017
+ }
1018
+ if (probes > max_probes) max_probes = probes;
1019
+ ChannelRegisteredMethod* crm =
1020
+ &(*registered_methods_)[(hash + probes) % slots];
1021
+ crm->server_registered_method = rm.get();
1022
+ crm->flags = rm->flags;
1023
+ crm->has_host = has_host;
1024
+ if (has_host) {
1025
+ crm->host = host;
1026
+ }
1027
+ crm->method = method;
1028
+ }
1029
+ GPR_ASSERT(slots <= UINT32_MAX);
1030
+ registered_method_max_probes_ = max_probes;
1031
+ }
1032
+ // Publish channel.
1033
+ {
1034
+ MutexLock lock(&server_->mu_global_);
1035
+ server_->channels_.push_front(this);
1036
+ list_position_ = server_->channels_.begin();
1037
+ }
1038
+ // Start accept_stream transport op.
1039
+ grpc_transport_op* op = grpc_make_transport_op(nullptr);
1040
+ op->set_accept_stream = true;
1041
+ op->set_accept_stream_fn = AcceptStream;
1042
+ op->set_accept_stream_user_data = this;
1043
+ op->start_connectivity_watch = MakeOrphanable<ConnectivityWatcher>(this);
1044
+ if (server_->shutdown_flag_.load(std::memory_order_acquire)) {
1045
+ op->disconnect_with_error =
1046
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server shutdown");
1047
+ }
1048
+ grpc_transport_perform_op(transport, op);
1049
+ }
1050
+
1051
+ Server::ChannelRegisteredMethod* Server::ChannelData::GetRegisteredMethod(
1052
+ const grpc_slice& host, const grpc_slice& path, bool is_idempotent) {
1053
+ if (registered_methods_ == nullptr) return nullptr;
1054
+ /* TODO(ctiller): unify these two searches */
1055
+ /* check for an exact match with host */
1056
+ uint32_t hash = GRPC_MDSTR_KV_HASH(grpc_slice_hash_internal(host),
1057
+ grpc_slice_hash_internal(path));
1058
+ for (size_t i = 0; i <= registered_method_max_probes_; i++) {
1059
+ ChannelRegisteredMethod* rm =
1060
+ &(*registered_methods_)[(hash + i) % registered_methods_->size()];
1061
+ if (rm->server_registered_method == nullptr) break;
1062
+ if (!rm->has_host) continue;
1063
+ if (rm->host != host) continue;
1064
+ if (rm->method != path) continue;
1065
+ if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
1066
+ !is_idempotent) {
1067
+ continue;
1068
+ }
1069
+ return rm;
1070
+ }
1071
+ /* check for a wildcard method definition (no host set) */
1072
+ hash = GRPC_MDSTR_KV_HASH(0, grpc_slice_hash_internal(path));
1073
+ for (size_t i = 0; i <= registered_method_max_probes_; i++) {
1074
+ ChannelRegisteredMethod* rm =
1075
+ &(*registered_methods_)[(hash + i) % registered_methods_->size()];
1076
+ if (rm->server_registered_method == nullptr) break;
1077
+ if (rm->has_host) continue;
1078
+ if (rm->method != path) continue;
1079
+ if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
1080
+ !is_idempotent) {
1081
+ continue;
1082
+ }
1083
+ return rm;
1084
+ }
1085
+ return nullptr;
1086
+ }
1087
+
1088
+ void Server::ChannelData::AcceptStream(void* arg, grpc_transport* /*transport*/,
1089
+ const void* transport_server_data) {
1090
+ auto* chand = static_cast<Server::ChannelData*>(arg);
1091
+ /* create a call */
1092
+ grpc_call_create_args args;
1093
+ args.channel = chand->channel_;
1094
+ args.server = chand->server_.get();
1095
+ args.parent = nullptr;
1096
+ args.propagation_mask = 0;
1097
+ args.cq = nullptr;
1098
+ args.pollset_set_alternative = nullptr;
1099
+ args.server_transport_data = transport_server_data;
1100
+ args.add_initial_metadata = nullptr;
1101
+ args.add_initial_metadata_count = 0;
1102
+ args.send_deadline = GRPC_MILLIS_INF_FUTURE;
1103
+ grpc_call* call;
1104
+ grpc_error* error = grpc_call_create(&args, &call);
1105
+ grpc_call_element* elem =
872
1106
  grpc_call_stack_element(grpc_call_get_call_stack(call), 0);
1107
+ auto* calld = static_cast<Server::CallData*>(elem->call_data);
873
1108
  if (error != GRPC_ERROR_NONE) {
874
- got_initial_metadata(elem, error);
875
1109
  GRPC_ERROR_UNREF(error);
1110
+ calld->FailCallCreation();
876
1111
  return;
877
1112
  }
878
- call_data* calld = static_cast<call_data*>(elem->call_data);
879
- grpc_op op;
880
- op.op = GRPC_OP_RECV_INITIAL_METADATA;
881
- op.flags = 0;
882
- op.reserved = nullptr;
883
- op.data.recv_initial_metadata.recv_initial_metadata =
884
- &calld->initial_metadata;
885
- GRPC_CLOSURE_INIT(&calld->got_initial_metadata, got_initial_metadata, elem,
886
- grpc_schedule_on_exec_ctx);
887
- grpc_call_start_batch_and_execute(call, &op, 1, &calld->got_initial_metadata);
1113
+ calld->Start(elem);
888
1114
  }
889
1115
 
890
- static void channel_connectivity_changed(void* cd, grpc_error* error) {
891
- channel_data* chand = static_cast<channel_data*>(cd);
892
- grpc_server* server = chand->server;
893
- if (chand->connectivity_state != GRPC_CHANNEL_SHUTDOWN) {
894
- grpc_transport_op* op = grpc_make_transport_op(nullptr);
895
- op->on_connectivity_state_change = &chand->channel_connectivity_changed;
896
- op->connectivity_state = &chand->connectivity_state;
897
- grpc_channel_next_op(grpc_channel_stack_element(
898
- grpc_channel_get_channel_stack(chand->channel), 0),
899
- op);
900
- } else {
901
- gpr_mu_lock(&server->mu_global);
902
- destroy_channel(chand, GRPC_ERROR_REF(error));
903
- gpr_mu_unlock(&server->mu_global);
904
- GRPC_CHANNEL_INTERNAL_UNREF(chand->channel, "connectivity");
905
- }
906
- }
907
-
908
- static grpc_error* init_call_elem(grpc_call_element* elem,
909
- const grpc_call_element_args* args) {
910
- channel_data* chand = static_cast<channel_data*>(elem->channel_data);
911
- server_ref(chand->server);
912
- new (elem->call_data) call_data(elem, *args);
913
- return GRPC_ERROR_NONE;
1116
+ void Server::ChannelData::FinishDestroy(void* cd, grpc_error* /*error*/) {
1117
+ auto* chand = static_cast<Server::ChannelData*>(cd);
1118
+ Server* server = chand->server_.get();
1119
+ GRPC_CHANNEL_INTERNAL_UNREF(chand->channel_, "server");
1120
+ server->Unref();
914
1121
  }
915
1122
 
916
- static void destroy_call_elem(grpc_call_element* elem,
917
- const grpc_call_final_info* final_info,
918
- grpc_closure* ignored) {
919
- call_data* calld = static_cast<call_data*>(elem->call_data);
920
- calld->~call_data();
921
- channel_data* chand = static_cast<channel_data*>(elem->channel_data);
922
- server_unref(chand->server);
1123
+ void Server::ChannelData::Destroy() {
1124
+ if (!list_position_.has_value()) return;
1125
+ GPR_ASSERT(server_ != nullptr);
1126
+ server_->channels_.erase(*list_position_);
1127
+ list_position_.reset();
1128
+ server_->Ref().release();
1129
+ server_->MaybeFinishShutdown();
1130
+ GRPC_CLOSURE_INIT(&finish_destroy_channel_closure_, FinishDestroy, this,
1131
+ grpc_schedule_on_exec_ctx);
1132
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_server_channel_trace)) {
1133
+ gpr_log(GPR_INFO, "Disconnected client");
1134
+ }
1135
+ grpc_transport_op* op =
1136
+ grpc_make_transport_op(&finish_destroy_channel_closure_);
1137
+ op->set_accept_stream = true;
1138
+ grpc_channel_next_op(
1139
+ grpc_channel_stack_element(grpc_channel_get_channel_stack(channel_), 0),
1140
+ op);
923
1141
  }
924
1142
 
925
- static grpc_error* init_channel_elem(grpc_channel_element* elem,
926
- grpc_channel_element_args* args) {
927
- channel_data* chand = static_cast<channel_data*>(elem->channel_data);
1143
+ grpc_error* Server::ChannelData::InitChannelElement(
1144
+ grpc_channel_element* elem, grpc_channel_element_args* args) {
928
1145
  GPR_ASSERT(args->is_first);
929
1146
  GPR_ASSERT(!args->is_last);
930
- chand->server = nullptr;
931
- chand->channel = nullptr;
932
- chand->next = chand->prev = chand;
933
- chand->registered_methods = nullptr;
934
- chand->connectivity_state = GRPC_CHANNEL_IDLE;
935
- GRPC_CLOSURE_INIT(&chand->channel_connectivity_changed,
936
- channel_connectivity_changed, chand,
937
- grpc_schedule_on_exec_ctx);
1147
+ new (elem->channel_data) ChannelData();
938
1148
  return GRPC_ERROR_NONE;
939
1149
  }
940
1150
 
941
- static void destroy_channel_elem(grpc_channel_element* elem) {
942
- size_t i;
943
- channel_data* chand = static_cast<channel_data*>(elem->channel_data);
944
- chand->socket_node.reset();
945
- if (chand->registered_methods) {
946
- for (i = 0; i < chand->registered_method_slots; i++) {
947
- grpc_slice_unref_internal(chand->registered_methods[i].method);
948
- if (chand->registered_methods[i].has_host) {
949
- grpc_slice_unref_internal(chand->registered_methods[i].host);
950
- }
951
- }
952
- gpr_free(chand->registered_methods);
953
- }
954
- if (chand->server) {
955
- gpr_mu_lock(&chand->server->mu_global);
956
- chand->next->prev = chand->prev;
957
- chand->prev->next = chand->next;
958
- chand->next = chand->prev = chand;
959
- maybe_finish_shutdown(chand->server);
960
- gpr_mu_unlock(&chand->server->mu_global);
961
- server_unref(chand->server);
962
- }
1151
+ void Server::ChannelData::DestroyChannelElement(grpc_channel_element* elem) {
1152
+ auto* chand = static_cast<ChannelData*>(elem->channel_data);
1153
+ chand->~ChannelData();
963
1154
  }
964
1155
 
965
- const grpc_channel_filter grpc_server_top_filter = {
966
- server_start_transport_stream_op_batch,
967
- grpc_channel_next_op,
968
- sizeof(call_data),
969
- init_call_elem,
970
- grpc_call_stack_ignore_set_pollset_or_pollset_set,
971
- destroy_call_elem,
972
- sizeof(channel_data),
973
- init_channel_elem,
974
- destroy_channel_elem,
975
- grpc_channel_next_get_info,
976
- "server",
977
- };
1156
+ //
1157
+ // Server::CallData
1158
+ //
1159
+
1160
+ Server::CallData::CallData(grpc_call_element* elem,
1161
+ const grpc_call_element_args& args,
1162
+ RefCountedPtr<Server> server)
1163
+ : server_(std::move(server)),
1164
+ call_(grpc_call_from_top_element(elem)),
1165
+ call_combiner_(args.call_combiner) {
1166
+ GRPC_CLOSURE_INIT(&recv_initial_metadata_ready_, RecvInitialMetadataReady,
1167
+ elem, grpc_schedule_on_exec_ctx);
1168
+ GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_, RecvTrailingMetadataReady,
1169
+ elem, grpc_schedule_on_exec_ctx);
1170
+ }
978
1171
 
979
- static void register_completion_queue(grpc_server* server,
980
- grpc_completion_queue* cq,
981
- void* reserved) {
982
- size_t i, n;
983
- GPR_ASSERT(!reserved);
984
- for (i = 0; i < server->cq_count; i++) {
985
- if (server->cqs[i] == cq) return;
1172
+ Server::CallData::~CallData() {
1173
+ GPR_ASSERT(state_.Load(MemoryOrder::RELAXED) != CallState::PENDING);
1174
+ GRPC_ERROR_UNREF(recv_initial_metadata_error_);
1175
+ if (host_.has_value()) {
1176
+ grpc_slice_unref_internal(*host_);
1177
+ }
1178
+ if (path_.has_value()) {
1179
+ grpc_slice_unref_internal(*path_);
986
1180
  }
1181
+ grpc_metadata_array_destroy(&initial_metadata_);
1182
+ grpc_byte_buffer_destroy(payload_);
1183
+ }
987
1184
 
988
- GRPC_CQ_INTERNAL_REF(cq, "server");
989
- n = server->cq_count++;
990
- server->cqs = static_cast<grpc_completion_queue**>(gpr_realloc(
991
- server->cqs, server->cq_count * sizeof(grpc_completion_queue*)));
992
- server->cqs[n] = cq;
1185
+ void Server::CallData::SetState(CallState state) {
1186
+ state_.Store(state, MemoryOrder::RELAXED);
993
1187
  }
994
1188
 
995
- void grpc_server_register_completion_queue(grpc_server* server,
996
- grpc_completion_queue* cq,
997
- void* reserved) {
998
- GRPC_API_TRACE(
999
- "grpc_server_register_completion_queue(server=%p, cq=%p, reserved=%p)", 3,
1000
- (server, cq, reserved));
1189
+ bool Server::CallData::MaybeActivate() {
1190
+ CallState expected = CallState::PENDING;
1191
+ return state_.CompareExchangeStrong(&expected, CallState::ACTIVATED,
1192
+ MemoryOrder::ACQ_REL,
1193
+ MemoryOrder::RELAXED);
1194
+ }
1001
1195
 
1002
- auto cq_type = grpc_get_cq_completion_type(cq);
1003
- if (cq_type != GRPC_CQ_NEXT && cq_type != GRPC_CQ_CALLBACK) {
1004
- gpr_log(GPR_INFO,
1005
- "Completion queue of type %d is being registered as a "
1006
- "server-completion-queue",
1007
- static_cast<int>(cq_type));
1008
- /* Ideally we should log an error and abort but ruby-wrapped-language API
1009
- calls grpc_completion_queue_pluck() on server completion queues */
1196
+ void Server::CallData::FailCallCreation() {
1197
+ CallState expected_not_started = CallState::NOT_STARTED;
1198
+ CallState expected_pending = CallState::PENDING;
1199
+ if (state_.CompareExchangeStrong(&expected_not_started, CallState::ZOMBIED,
1200
+ MemoryOrder::ACQ_REL,
1201
+ MemoryOrder::ACQUIRE)) {
1202
+ KillZombie();
1203
+ } else if (state_.CompareExchangeStrong(&expected_pending, CallState::ZOMBIED,
1204
+ MemoryOrder::ACQ_REL,
1205
+ MemoryOrder::RELAXED)) {
1206
+ // Zombied call will be destroyed when it's removed from the pending
1207
+ // queue... later.
1010
1208
  }
1011
-
1012
- register_completion_queue(server, cq, reserved);
1013
1209
  }
1014
1210
 
1015
- grpc_server* grpc_server_create(const grpc_channel_args* args, void* reserved) {
1016
- grpc_core::ExecCtx exec_ctx;
1017
- GRPC_API_TRACE("grpc_server_create(%p, %p)", 2, (args, reserved));
1018
-
1019
- grpc_server* server =
1020
- static_cast<grpc_server*>(gpr_zalloc(sizeof(grpc_server)));
1021
-
1022
- gpr_mu_init(&server->mu_global);
1023
- gpr_mu_init(&server->mu_call);
1024
- gpr_cv_init(&server->starting_cv);
1025
-
1026
- /* decremented by grpc_server_destroy */
1027
- gpr_ref_init(&server->internal_refcount, 1);
1028
- server->root_channel_data.next = server->root_channel_data.prev =
1029
- &server->root_channel_data;
1030
-
1031
- server->channel_args = grpc_channel_args_copy(args);
1211
+ void Server::CallData::Start(grpc_call_element* elem) {
1212
+ grpc_op op;
1213
+ op.op = GRPC_OP_RECV_INITIAL_METADATA;
1214
+ op.flags = 0;
1215
+ op.reserved = nullptr;
1216
+ op.data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_;
1217
+ GRPC_CLOSURE_INIT(&recv_initial_metadata_batch_complete_,
1218
+ RecvInitialMetadataBatchComplete, elem,
1219
+ grpc_schedule_on_exec_ctx);
1220
+ grpc_call_start_batch_and_execute(call_, &op, 1,
1221
+ &recv_initial_metadata_batch_complete_);
1222
+ }
1032
1223
 
1033
- const grpc_arg* arg = grpc_channel_args_find(args, GRPC_ARG_ENABLE_CHANNELZ);
1034
- if (grpc_channel_arg_get_bool(arg, GRPC_ENABLE_CHANNELZ_DEFAULT)) {
1035
- arg = grpc_channel_args_find(
1036
- args, GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE);
1037
- size_t channel_tracer_max_memory = grpc_channel_arg_get_integer(
1038
- arg,
1039
- {GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0, INT_MAX});
1040
- server->channelz_server =
1041
- grpc_core::MakeRefCounted<grpc_core::channelz::ServerNode>(
1042
- server, channel_tracer_max_memory);
1043
- server->channelz_server->AddTraceEvent(
1044
- grpc_core::channelz::ChannelTrace::Severity::Info,
1045
- grpc_slice_from_static_string("Server created"));
1224
+ void Server::CallData::Publish(size_t cq_idx, RequestedCall* rc) {
1225
+ grpc_call_set_completion_queue(call_, rc->cq_bound_to_call);
1226
+ *rc->call = call_;
1227
+ cq_new_ = server_->cqs_[cq_idx];
1228
+ GPR_SWAP(grpc_metadata_array, *rc->initial_metadata, initial_metadata_);
1229
+ switch (rc->type) {
1230
+ case RequestedCall::Type::BATCH_CALL:
1231
+ GPR_ASSERT(host_.has_value());
1232
+ GPR_ASSERT(path_.has_value());
1233
+ rc->data.batch.details->host = grpc_slice_ref_internal(*host_);
1234
+ rc->data.batch.details->method = grpc_slice_ref_internal(*path_);
1235
+ rc->data.batch.details->deadline =
1236
+ grpc_millis_to_timespec(deadline_, GPR_CLOCK_MONOTONIC);
1237
+ rc->data.batch.details->flags = recv_initial_metadata_flags_;
1238
+ break;
1239
+ case RequestedCall::Type::REGISTERED_CALL:
1240
+ *rc->data.registered.deadline =
1241
+ grpc_millis_to_timespec(deadline_, GPR_CLOCK_MONOTONIC);
1242
+ if (rc->data.registered.optional_payload != nullptr) {
1243
+ *rc->data.registered.optional_payload = payload_;
1244
+ payload_ = nullptr;
1245
+ }
1246
+ break;
1247
+ default:
1248
+ GPR_UNREACHABLE_CODE(return );
1046
1249
  }
1250
+ grpc_cq_end_op(cq_new_, rc->tag, GRPC_ERROR_NONE, Server::DoneRequestEvent,
1251
+ rc, &rc->completion, true);
1252
+ }
1047
1253
 
1048
- if (args != nullptr) {
1049
- grpc_resource_quota* resource_quota =
1050
- grpc_resource_quota_from_channel_args(args, false /* create */);
1051
- if (resource_quota != nullptr) {
1052
- server->default_resource_user =
1053
- grpc_resource_user_create(resource_quota, "default");
1054
- }
1254
+ void Server::CallData::PublishNewRpc(void* arg, grpc_error* error) {
1255
+ grpc_call_element* call_elem = static_cast<grpc_call_element*>(arg);
1256
+ auto* calld = static_cast<Server::CallData*>(call_elem->call_data);
1257
+ auto* chand = static_cast<Server::ChannelData*>(call_elem->channel_data);
1258
+ RequestMatcherInterface* rm = calld->matcher_;
1259
+ Server* server = rm->server();
1260
+ if (error != GRPC_ERROR_NONE ||
1261
+ server->shutdown_flag_.load(std::memory_order_acquire)) {
1262
+ calld->state_.Store(CallState::ZOMBIED, MemoryOrder::RELAXED);
1263
+ calld->KillZombie();
1264
+ return;
1055
1265
  }
1266
+ rm->MatchOrQueue(chand->cq_idx(), calld);
1267
+ }
1056
1268
 
1057
- return server;
1269
+ namespace {
1270
+
1271
+ void KillZombieClosure(void* call, grpc_error* /*error*/) {
1272
+ grpc_call_unref(static_cast<grpc_call*>(call));
1058
1273
  }
1059
1274
 
1060
- static int streq(const char* a, const char* b) {
1061
- if (a == nullptr && b == nullptr) return 1;
1062
- if (a == nullptr) return 0;
1063
- if (b == nullptr) return 0;
1064
- return 0 == strcmp(a, b);
1275
+ } // namespace
1276
+
1277
+ void Server::CallData::KillZombie() {
1278
+ GRPC_CLOSURE_INIT(&kill_zombie_closure_, KillZombieClosure, call_,
1279
+ grpc_schedule_on_exec_ctx);
1280
+ ExecCtx::Run(DEBUG_LOCATION, &kill_zombie_closure_, GRPC_ERROR_NONE);
1065
1281
  }
1066
1282
 
1067
- void* grpc_server_register_method(
1068
- grpc_server* server, const char* method, const char* host,
1069
- grpc_server_register_method_payload_handling payload_handling,
1070
- uint32_t flags) {
1071
- registered_method* m;
1072
- GRPC_API_TRACE(
1073
- "grpc_server_register_method(server=%p, method=%s, host=%s, "
1074
- "flags=0x%08x)",
1075
- 4, (server, method, host, flags));
1076
- if (!method) {
1077
- gpr_log(GPR_ERROR,
1078
- "grpc_server_register_method method string cannot be NULL");
1079
- return nullptr;
1283
+ void Server::CallData::StartNewRpc(grpc_call_element* elem) {
1284
+ auto* chand = static_cast<ChannelData*>(elem->channel_data);
1285
+ if (server_->shutdown_flag_.load(std::memory_order_acquire)) {
1286
+ state_.Store(CallState::ZOMBIED, MemoryOrder::RELAXED);
1287
+ KillZombie();
1288
+ return;
1080
1289
  }
1081
- for (m = server->registered_methods; m; m = m->next) {
1082
- if (streq(m->method, method) && streq(m->host, host)) {
1083
- gpr_log(GPR_ERROR, "duplicate registration for %s@%s", method,
1084
- host ? host : "*");
1085
- return nullptr;
1290
+ // Find request matcher.
1291
+ matcher_ = server_->unregistered_request_matcher_.get();
1292
+ grpc_server_register_method_payload_handling payload_handling =
1293
+ GRPC_SRM_PAYLOAD_NONE;
1294
+ if (path_.has_value() && host_.has_value()) {
1295
+ ChannelRegisteredMethod* rm =
1296
+ chand->GetRegisteredMethod(*host_, *path_,
1297
+ (recv_initial_metadata_flags_ &
1298
+ GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST));
1299
+ if (rm != nullptr) {
1300
+ matcher_ = rm->server_registered_method->matcher.get();
1301
+ payload_handling = rm->server_registered_method->payload_handling;
1086
1302
  }
1087
1303
  }
1088
- if ((flags & ~GRPC_INITIAL_METADATA_USED_MASK) != 0) {
1089
- gpr_log(GPR_ERROR, "grpc_server_register_method invalid flags 0x%08x",
1090
- flags);
1091
- return nullptr;
1304
+ // Start recv_message op if needed.
1305
+ switch (payload_handling) {
1306
+ case GRPC_SRM_PAYLOAD_NONE:
1307
+ PublishNewRpc(elem, GRPC_ERROR_NONE);
1308
+ break;
1309
+ case GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER: {
1310
+ grpc_op op;
1311
+ op.op = GRPC_OP_RECV_MESSAGE;
1312
+ op.flags = 0;
1313
+ op.reserved = nullptr;
1314
+ op.data.recv_message.recv_message = &payload_;
1315
+ GRPC_CLOSURE_INIT(&publish_, PublishNewRpc, elem,
1316
+ grpc_schedule_on_exec_ctx);
1317
+ grpc_call_start_batch_and_execute(call_, &op, 1, &publish_);
1318
+ break;
1319
+ }
1092
1320
  }
1093
- m = static_cast<registered_method*>(gpr_zalloc(sizeof(registered_method)));
1094
- m->method = gpr_strdup(method);
1095
- m->host = gpr_strdup(host);
1096
- m->next = server->registered_methods;
1097
- m->payload_handling = payload_handling;
1098
- m->flags = flags;
1099
- server->registered_methods = m;
1100
- return m;
1101
1321
  }
1102
1322
 
1103
- void grpc_server_start(grpc_server* server) {
1104
- size_t i;
1105
- grpc_core::ExecCtx exec_ctx;
1323
+ void Server::CallData::RecvInitialMetadataBatchComplete(void* arg,
1324
+ grpc_error* error) {
1325
+ grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
1326
+ auto* calld = static_cast<Server::CallData*>(elem->call_data);
1327
+ if (error != GRPC_ERROR_NONE) {
1328
+ calld->FailCallCreation();
1329
+ return;
1330
+ }
1331
+ calld->StartNewRpc(elem);
1332
+ }
1106
1333
 
1107
- GRPC_API_TRACE("grpc_server_start(server=%p)", 1, (server));
1334
+ void Server::CallData::StartTransportStreamOpBatchImpl(
1335
+ grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
1336
+ if (batch->recv_initial_metadata) {
1337
+ GPR_ASSERT(batch->payload->recv_initial_metadata.recv_flags == nullptr);
1338
+ recv_initial_metadata_ =
1339
+ batch->payload->recv_initial_metadata.recv_initial_metadata;
1340
+ original_recv_initial_metadata_ready_ =
1341
+ batch->payload->recv_initial_metadata.recv_initial_metadata_ready;
1342
+ batch->payload->recv_initial_metadata.recv_initial_metadata_ready =
1343
+ &recv_initial_metadata_ready_;
1344
+ batch->payload->recv_initial_metadata.recv_flags =
1345
+ &recv_initial_metadata_flags_;
1346
+ }
1347
+ if (batch->recv_trailing_metadata) {
1348
+ original_recv_trailing_metadata_ready_ =
1349
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
1350
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
1351
+ &recv_trailing_metadata_ready_;
1352
+ }
1353
+ grpc_call_next_op(elem, batch);
1354
+ }
1108
1355
 
1109
- server->started = true;
1110
- server->pollset_count = 0;
1111
- server->pollsets = static_cast<grpc_pollset**>(
1112
- gpr_malloc(sizeof(grpc_pollset*) * server->cq_count));
1113
- for (i = 0; i < server->cq_count; i++) {
1114
- if (grpc_cq_can_listen(server->cqs[i])) {
1115
- server->pollsets[server->pollset_count++] =
1116
- grpc_cq_pollset(server->cqs[i]);
1117
- }
1356
+ void Server::CallData::RecvInitialMetadataReady(void* ptr, grpc_error* error) {
1357
+ grpc_call_element* elem = static_cast<grpc_call_element*>(ptr);
1358
+ CallData* calld = static_cast<CallData*>(elem->call_data);
1359
+ grpc_millis op_deadline;
1360
+ if (error == GRPC_ERROR_NONE) {
1361
+ GPR_DEBUG_ASSERT(calld->recv_initial_metadata_->idx.named.path != nullptr);
1362
+ GPR_DEBUG_ASSERT(calld->recv_initial_metadata_->idx.named.authority !=
1363
+ nullptr);
1364
+ calld->path_.emplace(grpc_slice_ref_internal(
1365
+ GRPC_MDVALUE(calld->recv_initial_metadata_->idx.named.path->md)));
1366
+ calld->host_.emplace(grpc_slice_ref_internal(
1367
+ GRPC_MDVALUE(calld->recv_initial_metadata_->idx.named.authority->md)));
1368
+ grpc_metadata_batch_remove(calld->recv_initial_metadata_, GRPC_BATCH_PATH);
1369
+ grpc_metadata_batch_remove(calld->recv_initial_metadata_,
1370
+ GRPC_BATCH_AUTHORITY);
1371
+ } else {
1372
+ GRPC_ERROR_REF(error);
1118
1373
  }
1119
- request_matcher_init(&server->unregistered_request_matcher, server);
1120
- for (registered_method* rm = server->registered_methods; rm; rm = rm->next) {
1121
- request_matcher_init(&rm->matcher, server);
1374
+ op_deadline = calld->recv_initial_metadata_->deadline;
1375
+ if (op_deadline != GRPC_MILLIS_INF_FUTURE) {
1376
+ calld->deadline_ = op_deadline;
1122
1377
  }
1123
-
1124
- gpr_mu_lock(&server->mu_global);
1125
- server->starting = true;
1126
- gpr_mu_unlock(&server->mu_global);
1127
-
1128
- for (listener* l = server->listeners; l; l = l->next) {
1129
- l->start(server, l->arg, server->pollsets, server->pollset_count);
1378
+ if (calld->host_.has_value() && calld->path_.has_value()) {
1379
+ /* do nothing */
1380
+ } else {
1381
+ /* Pass the error reference to calld->recv_initial_metadata_error */
1382
+ grpc_error* src_error = error;
1383
+ error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1384
+ "Missing :authority or :path", &src_error, 1);
1385
+ GRPC_ERROR_UNREF(src_error);
1386
+ calld->recv_initial_metadata_error_ = GRPC_ERROR_REF(error);
1130
1387
  }
1131
-
1132
- gpr_mu_lock(&server->mu_global);
1133
- server->starting = false;
1134
- gpr_cv_signal(&server->starting_cv);
1135
- gpr_mu_unlock(&server->mu_global);
1388
+ grpc_closure* closure = calld->original_recv_initial_metadata_ready_;
1389
+ calld->original_recv_initial_metadata_ready_ = nullptr;
1390
+ if (calld->seen_recv_trailing_metadata_ready_) {
1391
+ GRPC_CALL_COMBINER_START(calld->call_combiner_,
1392
+ &calld->recv_trailing_metadata_ready_,
1393
+ calld->recv_trailing_metadata_error_,
1394
+ "continue server recv_trailing_metadata_ready");
1395
+ }
1396
+ Closure::Run(DEBUG_LOCATION, closure, error);
1136
1397
  }
1137
1398
 
1138
- void grpc_server_get_pollsets(grpc_server* server, grpc_pollset*** pollsets,
1139
- size_t* pollset_count) {
1140
- *pollset_count = server->pollset_count;
1141
- *pollsets = server->pollsets;
1399
+ void Server::CallData::RecvTrailingMetadataReady(void* user_data,
1400
+ grpc_error* error) {
1401
+ grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
1402
+ CallData* calld = static_cast<CallData*>(elem->call_data);
1403
+ if (calld->original_recv_initial_metadata_ready_ != nullptr) {
1404
+ calld->recv_trailing_metadata_error_ = GRPC_ERROR_REF(error);
1405
+ calld->seen_recv_trailing_metadata_ready_ = true;
1406
+ GRPC_CLOSURE_INIT(&calld->recv_trailing_metadata_ready_,
1407
+ RecvTrailingMetadataReady, elem,
1408
+ grpc_schedule_on_exec_ctx);
1409
+ GRPC_CALL_COMBINER_STOP(calld->call_combiner_,
1410
+ "deferring server recv_trailing_metadata_ready "
1411
+ "until after recv_initial_metadata_ready");
1412
+ return;
1413
+ }
1414
+ error =
1415
+ grpc_error_add_child(GRPC_ERROR_REF(error),
1416
+ GRPC_ERROR_REF(calld->recv_initial_metadata_error_));
1417
+ Closure::Run(DEBUG_LOCATION, calld->original_recv_trailing_metadata_ready_,
1418
+ error);
1142
1419
  }
1143
1420
 
1144
- void grpc_server_setup_transport(
1145
- grpc_server* s, grpc_transport* transport, grpc_pollset* accepting_pollset,
1146
- const grpc_channel_args* args,
1147
- grpc_core::RefCountedPtr<grpc_core::channelz::SocketNode> socket_node,
1148
- grpc_resource_user* resource_user) {
1149
- size_t num_registered_methods;
1150
- size_t alloc;
1151
- registered_method* rm;
1152
- channel_registered_method* crm;
1153
- grpc_channel* channel;
1154
- channel_data* chand;
1155
- uint32_t hash;
1156
- size_t slots;
1157
- uint32_t probes;
1158
- uint32_t max_probes = 0;
1159
- grpc_transport_op* op = nullptr;
1160
-
1161
- channel = grpc_channel_create(nullptr, args, GRPC_SERVER_CHANNEL, transport,
1162
- resource_user);
1163
- chand = static_cast<channel_data*>(
1164
- grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0)
1165
- ->channel_data);
1166
- chand->server = s;
1167
- server_ref(s);
1168
- chand->channel = channel;
1169
- chand->socket_node = std::move(socket_node);
1421
+ grpc_error* Server::CallData::InitCallElement(
1422
+ grpc_call_element* elem, const grpc_call_element_args* args) {
1423
+ auto* chand = static_cast<ChannelData*>(elem->channel_data);
1424
+ new (elem->call_data) Server::CallData(elem, *args, chand->server());
1425
+ return GRPC_ERROR_NONE;
1426
+ }
1170
1427
 
1171
- size_t cq_idx;
1172
- for (cq_idx = 0; cq_idx < s->cq_count; cq_idx++) {
1173
- if (grpc_cq_pollset(s->cqs[cq_idx]) == accepting_pollset) break;
1174
- }
1175
- if (cq_idx == s->cq_count) {
1176
- /* completion queue not found: pick a random one to publish new calls to */
1177
- cq_idx = static_cast<size_t>(rand()) % s->cq_count;
1178
- }
1179
- chand->cq_idx = cq_idx;
1428
+ void Server::CallData::DestroyCallElement(
1429
+ grpc_call_element* elem, const grpc_call_final_info* /*final_info*/,
1430
+ grpc_closure* /*ignored*/) {
1431
+ auto* calld = static_cast<CallData*>(elem->call_data);
1432
+ calld->~CallData();
1433
+ }
1180
1434
 
1181
- num_registered_methods = 0;
1182
- for (rm = s->registered_methods; rm; rm = rm->next) {
1183
- num_registered_methods++;
1184
- }
1185
- /* build a lookup table phrased in terms of mdstr's in this channels context
1186
- to quickly find registered methods */
1187
- if (num_registered_methods > 0) {
1188
- slots = 2 * num_registered_methods;
1189
- alloc = sizeof(channel_registered_method) * slots;
1190
- chand->registered_methods =
1191
- static_cast<channel_registered_method*>(gpr_zalloc(alloc));
1192
- for (rm = s->registered_methods; rm; rm = rm->next) {
1193
- grpc_slice host;
1194
- bool has_host;
1195
- grpc_slice method;
1196
- if (rm->host != nullptr) {
1197
- host = grpc_slice_intern(grpc_slice_from_static_string(rm->host));
1198
- has_host = true;
1199
- } else {
1200
- has_host = false;
1201
- }
1202
- method = grpc_slice_intern(grpc_slice_from_static_string(rm->method));
1203
- hash = GRPC_MDSTR_KV_HASH(has_host ? grpc_slice_hash(host) : 0,
1204
- grpc_slice_hash(method));
1205
- for (probes = 0; chand->registered_methods[(hash + probes) % slots]
1206
- .server_registered_method != nullptr;
1207
- probes++)
1208
- ;
1209
- if (probes > max_probes) max_probes = probes;
1210
- crm = &chand->registered_methods[(hash + probes) % slots];
1211
- crm->server_registered_method = rm;
1212
- crm->flags = rm->flags;
1213
- crm->has_host = has_host;
1214
- if (has_host) {
1215
- crm->host = host;
1216
- }
1217
- crm->method = method;
1218
- }
1219
- GPR_ASSERT(slots <= UINT32_MAX);
1220
- chand->registered_method_slots = static_cast<uint32_t>(slots);
1221
- chand->registered_method_max_probes = max_probes;
1222
- }
1435
+ void Server::CallData::StartTransportStreamOpBatch(
1436
+ grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
1437
+ auto* calld = static_cast<CallData*>(elem->call_data);
1438
+ calld->StartTransportStreamOpBatchImpl(elem, batch);
1439
+ }
1223
1440
 
1224
- gpr_mu_lock(&s->mu_global);
1225
- chand->next = &s->root_channel_data;
1226
- chand->prev = chand->next->prev;
1227
- chand->next->prev = chand->prev->next = chand;
1228
- gpr_mu_unlock(&s->mu_global);
1441
+ } // namespace grpc_core
1229
1442
 
1230
- GRPC_CHANNEL_INTERNAL_REF(channel, "connectivity");
1231
- op = grpc_make_transport_op(nullptr);
1232
- op->set_accept_stream = true;
1233
- op->set_accept_stream_fn = accept_stream;
1234
- op->set_accept_stream_user_data = chand;
1235
- op->on_connectivity_state_change = &chand->channel_connectivity_changed;
1236
- op->connectivity_state = &chand->connectivity_state;
1237
- if (gpr_atm_acq_load(&s->shutdown_flag) != 0) {
1238
- op->disconnect_with_error =
1239
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server shutdown");
1240
- }
1241
- grpc_transport_perform_op(transport, op);
1242
- }
1443
+ //
1444
+ // C-core API
1445
+ //
1243
1446
 
1244
- void grpc_server_populate_server_sockets(
1245
- grpc_server* s, grpc_core::channelz::ChildSocketsList* server_sockets,
1246
- intptr_t start_idx) {
1247
- gpr_mu_lock(&s->mu_global);
1248
- channel_data* c = nullptr;
1249
- for (c = s->root_channel_data.next; c != &s->root_channel_data; c = c->next) {
1250
- if (c->socket_node != nullptr && c->socket_node->uuid() >= start_idx) {
1251
- server_sockets->push_back(c->socket_node.get());
1252
- }
1253
- }
1254
- gpr_mu_unlock(&s->mu_global);
1447
+ grpc_server* grpc_server_create(const grpc_channel_args* args, void* reserved) {
1448
+ grpc_core::ExecCtx exec_ctx;
1449
+ GRPC_API_TRACE("grpc_server_create(%p, %p)", 2, (args, reserved));
1450
+ grpc_server* c_server = new grpc_server;
1451
+ c_server->core_server = grpc_core::MakeOrphanable<grpc_core::Server>(args);
1452
+ return c_server;
1255
1453
  }
1256
1454
 
1257
- void grpc_server_populate_listen_sockets(
1258
- grpc_server* server, grpc_core::channelz::ChildRefsList* listen_sockets) {
1259
- gpr_mu_lock(&server->mu_global);
1260
- for (listener* l = server->listeners; l != nullptr; l = l->next) {
1261
- listen_sockets->push_back(l->socket_uuid);
1455
+ void grpc_server_register_completion_queue(grpc_server* server,
1456
+ grpc_completion_queue* cq,
1457
+ void* reserved) {
1458
+ GRPC_API_TRACE(
1459
+ "grpc_server_register_completion_queue(server=%p, cq=%p, reserved=%p)", 3,
1460
+ (server, cq, reserved));
1461
+ GPR_ASSERT(!reserved);
1462
+ auto cq_type = grpc_get_cq_completion_type(cq);
1463
+ if (cq_type != GRPC_CQ_NEXT && cq_type != GRPC_CQ_CALLBACK) {
1464
+ gpr_log(GPR_INFO,
1465
+ "Completion queue of type %d is being registered as a "
1466
+ "server-completion-queue",
1467
+ static_cast<int>(cq_type));
1468
+ /* Ideally we should log an error and abort but ruby-wrapped-language API
1469
+ calls grpc_completion_queue_pluck() on server completion queues */
1262
1470
  }
1263
- gpr_mu_unlock(&server->mu_global);
1471
+ server->core_server->RegisterCompletionQueue(cq);
1264
1472
  }
1265
1473
 
1266
- void done_published_shutdown(void* done_arg, grpc_cq_completion* storage) {
1267
- (void)done_arg;
1268
- gpr_free(storage);
1474
+ void* grpc_server_register_method(
1475
+ grpc_server* server, const char* method, const char* host,
1476
+ grpc_server_register_method_payload_handling payload_handling,
1477
+ uint32_t flags) {
1478
+ GRPC_API_TRACE(
1479
+ "grpc_server_register_method(server=%p, method=%s, host=%s, "
1480
+ "flags=0x%08x)",
1481
+ 4, (server, method, host, flags));
1482
+ return server->core_server->RegisterMethod(method, host, payload_handling,
1483
+ flags);
1269
1484
  }
1270
1485
 
1271
- static void listener_destroy_done(void* s, grpc_error* error) {
1272
- grpc_server* server = static_cast<grpc_server*>(s);
1273
- gpr_mu_lock(&server->mu_global);
1274
- server->listeners_destroyed++;
1275
- maybe_finish_shutdown(server);
1276
- gpr_mu_unlock(&server->mu_global);
1486
+ void grpc_server_start(grpc_server* server) {
1487
+ grpc_core::ExecCtx exec_ctx;
1488
+ GRPC_API_TRACE("grpc_server_start(server=%p)", 1, (server));
1489
+ server->core_server->Start();
1277
1490
  }
1278
1491
 
1279
- /*
1280
- - Kills all pending requests-for-incoming-RPC-calls (i.e the requests made via
1281
- grpc_server_request_call and grpc_server_request_registered call will now be
1282
- cancelled). See 'kill_pending_work_locked()'
1283
-
1284
- - Shuts down the listeners (i.e the server will no longer listen on the port
1285
- for new incoming channels).
1286
-
1287
- - Iterates through all channels on the server and sends shutdown msg (see
1288
- 'channel_broadcaster_shutdown()' for details) to the clients via the
1289
- transport layer. The transport layer then guarantees the following:
1290
- -- Sends shutdown to the client (for eg: HTTP2 transport sends GOAWAY)
1291
- -- If the server has outstanding calls that are in the process, the
1292
- connection is NOT closed until the server is done with all those calls
1293
- -- Once, there are no more calls in progress, the channel is closed
1294
- */
1295
1492
  void grpc_server_shutdown_and_notify(grpc_server* server,
1296
1493
  grpc_completion_queue* cq, void* tag) {
1297
- listener* l;
1298
- shutdown_tag* sdt;
1299
- channel_broadcaster broadcaster;
1300
1494
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1301
1495
  grpc_core::ExecCtx exec_ctx;
1302
-
1303
1496
  GRPC_API_TRACE("grpc_server_shutdown_and_notify(server=%p, cq=%p, tag=%p)", 3,
1304
1497
  (server, cq, tag));
1305
-
1306
- /* wait for startup to be finished: locks mu_global */
1307
- gpr_mu_lock(&server->mu_global);
1308
- while (server->starting) {
1309
- gpr_cv_wait(&server->starting_cv, &server->mu_global,
1310
- gpr_inf_future(GPR_CLOCK_MONOTONIC));
1311
- }
1312
-
1313
- /* stay locked, and gather up some stuff to do */
1314
- GPR_ASSERT(grpc_cq_begin_op(cq, tag));
1315
- if (server->shutdown_published) {
1316
- grpc_cq_end_op(cq, tag, GRPC_ERROR_NONE, done_published_shutdown, nullptr,
1317
- static_cast<grpc_cq_completion*>(
1318
- gpr_malloc(sizeof(grpc_cq_completion))));
1319
- gpr_mu_unlock(&server->mu_global);
1320
- return;
1321
- }
1322
- server->shutdown_tags = static_cast<shutdown_tag*>(
1323
- gpr_realloc(server->shutdown_tags,
1324
- sizeof(shutdown_tag) * (server->num_shutdown_tags + 1)));
1325
- sdt = &server->shutdown_tags[server->num_shutdown_tags++];
1326
- sdt->tag = tag;
1327
- sdt->cq = cq;
1328
- if (gpr_atm_acq_load(&server->shutdown_flag)) {
1329
- gpr_mu_unlock(&server->mu_global);
1330
- return;
1331
- }
1332
-
1333
- server->last_shutdown_message_time = gpr_now(GPR_CLOCK_REALTIME);
1334
-
1335
- channel_broadcaster_init(server, &broadcaster);
1336
-
1337
- gpr_atm_rel_store(&server->shutdown_flag, 1);
1338
-
1339
- /* collect all unregistered then registered calls */
1340
- gpr_mu_lock(&server->mu_call);
1341
- kill_pending_work_locked(
1342
- server, GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown"));
1343
- gpr_mu_unlock(&server->mu_call);
1344
-
1345
- maybe_finish_shutdown(server);
1346
- gpr_mu_unlock(&server->mu_global);
1347
-
1348
- /* Shutdown listeners */
1349
- for (l = server->listeners; l; l = l->next) {
1350
- GRPC_CLOSURE_INIT(&l->destroy_done, listener_destroy_done, server,
1351
- grpc_schedule_on_exec_ctx);
1352
- l->destroy(server, l->arg, &l->destroy_done);
1353
- }
1354
-
1355
- channel_broadcaster_shutdown(&broadcaster, true /* send_goaway */,
1356
- GRPC_ERROR_NONE);
1357
-
1358
- if (server->default_resource_user != nullptr) {
1359
- grpc_resource_quota_unref(
1360
- grpc_resource_user_quota(server->default_resource_user));
1361
- grpc_resource_user_shutdown(server->default_resource_user);
1362
- grpc_resource_user_unref(server->default_resource_user);
1363
- }
1498
+ server->core_server->ShutdownAndNotify(cq, tag);
1364
1499
  }
1365
1500
 
1366
1501
  void grpc_server_cancel_all_calls(grpc_server* server) {
1367
- channel_broadcaster broadcaster;
1368
1502
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1369
1503
  grpc_core::ExecCtx exec_ctx;
1370
-
1371
1504
  GRPC_API_TRACE("grpc_server_cancel_all_calls(server=%p)", 1, (server));
1372
-
1373
- gpr_mu_lock(&server->mu_global);
1374
- channel_broadcaster_init(server, &broadcaster);
1375
- gpr_mu_unlock(&server->mu_global);
1376
-
1377
- channel_broadcaster_shutdown(
1378
- &broadcaster, false /* send_goaway */,
1379
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Cancelling all calls"));
1505
+ server->core_server->CancelAllCalls();
1380
1506
  }
1381
1507
 
1382
1508
  void grpc_server_destroy(grpc_server* server) {
1383
- listener* l;
1384
1509
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1385
1510
  grpc_core::ExecCtx exec_ctx;
1386
-
1387
1511
  GRPC_API_TRACE("grpc_server_destroy(server=%p)", 1, (server));
1388
-
1389
- gpr_mu_lock(&server->mu_global);
1390
- GPR_ASSERT(gpr_atm_acq_load(&server->shutdown_flag) || !server->listeners);
1391
- GPR_ASSERT(server->listeners_destroyed == num_listeners(server));
1392
-
1393
- while (server->listeners) {
1394
- l = server->listeners;
1395
- server->listeners = l->next;
1396
- gpr_free(l);
1397
- }
1398
-
1399
- gpr_mu_unlock(&server->mu_global);
1400
-
1401
- server_unref(server);
1402
- }
1403
-
1404
- void grpc_server_add_listener(grpc_server* server, void* arg,
1405
- void (*start)(grpc_server* server, void* arg,
1406
- grpc_pollset** pollsets,
1407
- size_t pollset_count),
1408
- void (*destroy)(grpc_server* server, void* arg,
1409
- grpc_closure* on_done),
1410
- intptr_t socket_uuid) {
1411
- listener* l = static_cast<listener*>(gpr_malloc(sizeof(listener)));
1412
- l->arg = arg;
1413
- l->start = start;
1414
- l->destroy = destroy;
1415
- l->socket_uuid = socket_uuid;
1416
- l->next = server->listeners;
1417
- server->listeners = l;
1418
- }
1419
-
1420
- static grpc_call_error queue_call_request(grpc_server* server, size_t cq_idx,
1421
- requested_call* rc) {
1422
- call_data* calld = nullptr;
1423
- request_matcher* rm = nullptr;
1424
- if (gpr_atm_acq_load(&server->shutdown_flag)) {
1425
- fail_call(server, cq_idx, rc,
1426
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown"));
1427
- return GRPC_CALL_OK;
1428
- }
1429
- switch (rc->type) {
1430
- case BATCH_CALL:
1431
- rm = &server->unregistered_request_matcher;
1432
- break;
1433
- case REGISTERED_CALL:
1434
- rm = &rc->data.registered.method->matcher;
1435
- break;
1436
- }
1437
- if (gpr_locked_mpscq_push(&rm->requests_per_cq[cq_idx], &rc->request_link)) {
1438
- /* this was the first queued request: we need to lock and start
1439
- matching calls */
1440
- gpr_mu_lock(&server->mu_call);
1441
- while ((calld = rm->pending_head) != nullptr) {
1442
- rc = reinterpret_cast<requested_call*>(
1443
- gpr_locked_mpscq_pop(&rm->requests_per_cq[cq_idx]));
1444
- if (rc == nullptr) break;
1445
- rm->pending_head = calld->pending_next;
1446
- gpr_mu_unlock(&server->mu_call);
1447
- if (!gpr_atm_full_cas(&calld->state, PENDING, ACTIVATED)) {
1448
- // Zombied Call
1449
- GRPC_CLOSURE_INIT(
1450
- &calld->kill_zombie_closure, kill_zombie,
1451
- grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0),
1452
- grpc_schedule_on_exec_ctx);
1453
- GRPC_CLOSURE_SCHED(&calld->kill_zombie_closure, GRPC_ERROR_NONE);
1454
- } else {
1455
- publish_call(server, calld, cq_idx, rc);
1456
- }
1457
- gpr_mu_lock(&server->mu_call);
1458
- }
1459
- gpr_mu_unlock(&server->mu_call);
1460
- }
1461
- return GRPC_CALL_OK;
1512
+ delete server;
1462
1513
  }
1463
1514
 
1464
1515
  grpc_call_error grpc_server_request_call(
1465
1516
  grpc_server* server, grpc_call** call, grpc_call_details* details,
1466
- grpc_metadata_array* initial_metadata,
1517
+ grpc_metadata_array* request_metadata,
1467
1518
  grpc_completion_queue* cq_bound_to_call,
1468
1519
  grpc_completion_queue* cq_for_notification, void* tag) {
1469
- grpc_call_error error;
1470
1520
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1471
1521
  grpc_core::ExecCtx exec_ctx;
1472
- requested_call* rc = static_cast<requested_call*>(gpr_malloc(sizeof(*rc)));
1473
1522
  GRPC_STATS_INC_SERVER_REQUESTED_CALLS();
1474
1523
  GRPC_API_TRACE(
1475
1524
  "grpc_server_request_call("
1476
1525
  "server=%p, call=%p, details=%p, initial_metadata=%p, "
1477
1526
  "cq_bound_to_call=%p, cq_for_notification=%p, tag=%p)",
1478
1527
  7,
1479
- (server, call, details, initial_metadata, cq_bound_to_call,
1528
+ (server, call, details, request_metadata, cq_bound_to_call,
1480
1529
  cq_for_notification, tag));
1481
- size_t cq_idx;
1482
- for (cq_idx = 0; cq_idx < server->cq_count; cq_idx++) {
1483
- if (server->cqs[cq_idx] == cq_for_notification) {
1484
- break;
1485
- }
1486
- }
1487
- if (cq_idx == server->cq_count) {
1488
- gpr_free(rc);
1489
- error = GRPC_CALL_ERROR_NOT_SERVER_COMPLETION_QUEUE;
1490
- goto done;
1491
- }
1492
- if (grpc_cq_begin_op(cq_for_notification, tag) == false) {
1493
- gpr_free(rc);
1494
- error = GRPC_CALL_ERROR_COMPLETION_QUEUE_SHUTDOWN;
1495
- goto done;
1496
- }
1497
- details->reserved = nullptr;
1498
- rc->cq_idx = cq_idx;
1499
- rc->type = BATCH_CALL;
1500
- rc->server = server;
1501
- rc->tag = tag;
1502
- rc->cq_bound_to_call = cq_bound_to_call;
1503
- rc->call = call;
1504
- rc->data.batch.details = details;
1505
- rc->initial_metadata = initial_metadata;
1506
- error = queue_call_request(server, cq_idx, rc);
1507
- done:
1508
-
1509
- return error;
1530
+ return server->core_server->RequestCall(call, details, request_metadata,
1531
+ cq_bound_to_call, cq_for_notification,
1532
+ tag);
1510
1533
  }
1511
1534
 
1512
1535
  grpc_call_error grpc_server_request_registered_call(
1513
1536
  grpc_server* server, void* rmp, grpc_call** call, gpr_timespec* deadline,
1514
- grpc_metadata_array* initial_metadata, grpc_byte_buffer** optional_payload,
1537
+ grpc_metadata_array* request_metadata, grpc_byte_buffer** optional_payload,
1515
1538
  grpc_completion_queue* cq_bound_to_call,
1516
- grpc_completion_queue* cq_for_notification, void* tag) {
1539
+ grpc_completion_queue* cq_for_notification, void* tag_new) {
1517
1540
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1518
1541
  grpc_core::ExecCtx exec_ctx;
1519
1542
  GRPC_STATS_INC_SERVER_REQUESTED_CALLS();
1520
- requested_call* rc = static_cast<requested_call*>(gpr_malloc(sizeof(*rc)));
1521
- registered_method* rm = static_cast<registered_method*>(rmp);
1543
+ auto* rm = static_cast<grpc_core::Server::RegisteredMethod*>(rmp);
1522
1544
  GRPC_API_TRACE(
1523
1545
  "grpc_server_request_registered_call("
1524
- "server=%p, rmp=%p, call=%p, deadline=%p, initial_metadata=%p, "
1546
+ "server=%p, rmp=%p, call=%p, deadline=%p, request_metadata=%p, "
1525
1547
  "optional_payload=%p, cq_bound_to_call=%p, cq_for_notification=%p, "
1526
1548
  "tag=%p)",
1527
1549
  9,
1528
- (server, rmp, call, deadline, initial_metadata, optional_payload,
1529
- cq_bound_to_call, cq_for_notification, tag));
1530
-
1531
- size_t cq_idx;
1532
- for (cq_idx = 0; cq_idx < server->cq_count; cq_idx++) {
1533
- if (server->cqs[cq_idx] == cq_for_notification) {
1534
- break;
1535
- }
1536
- }
1537
- if (cq_idx == server->cq_count) {
1538
- gpr_free(rc);
1539
- return GRPC_CALL_ERROR_NOT_SERVER_COMPLETION_QUEUE;
1540
- }
1541
- if ((optional_payload == nullptr) !=
1542
- (rm->payload_handling == GRPC_SRM_PAYLOAD_NONE)) {
1543
- gpr_free(rc);
1544
- return GRPC_CALL_ERROR_PAYLOAD_TYPE_MISMATCH;
1545
- }
1546
-
1547
- if (grpc_cq_begin_op(cq_for_notification, tag) == false) {
1548
- gpr_free(rc);
1549
- return GRPC_CALL_ERROR_COMPLETION_QUEUE_SHUTDOWN;
1550
- }
1551
- rc->cq_idx = cq_idx;
1552
- rc->type = REGISTERED_CALL;
1553
- rc->server = server;
1554
- rc->tag = tag;
1555
- rc->cq_bound_to_call = cq_bound_to_call;
1556
- rc->call = call;
1557
- rc->data.registered.method = rm;
1558
- rc->data.registered.deadline = deadline;
1559
- rc->initial_metadata = initial_metadata;
1560
- rc->data.registered.optional_payload = optional_payload;
1561
- return queue_call_request(server, cq_idx, rc);
1562
- }
1563
-
1564
- static void fail_call(grpc_server* server, size_t cq_idx, requested_call* rc,
1565
- grpc_error* error) {
1566
- *rc->call = nullptr;
1567
- rc->initial_metadata->count = 0;
1568
- GPR_ASSERT(error != GRPC_ERROR_NONE);
1569
-
1570
- grpc_cq_end_op(server->cqs[cq_idx], rc->tag, error, done_request_event, rc,
1571
- &rc->completion);
1572
- }
1573
-
1574
- const grpc_channel_args* grpc_server_get_channel_args(grpc_server* server) {
1575
- return server->channel_args;
1576
- }
1577
-
1578
- grpc_resource_user* grpc_server_get_default_resource_user(grpc_server* server) {
1579
- return server->default_resource_user;
1580
- }
1581
-
1582
- int grpc_server_has_open_connections(grpc_server* server) {
1583
- int r;
1584
- gpr_mu_lock(&server->mu_global);
1585
- r = server->root_channel_data.next != &server->root_channel_data;
1586
- gpr_mu_unlock(&server->mu_global);
1587
- return r;
1588
- }
1589
-
1590
- grpc_core::channelz::ServerNode* grpc_server_get_channelz_node(
1591
- grpc_server* server) {
1592
- if (server == nullptr) {
1593
- return nullptr;
1594
- }
1595
- return server->channelz_server.get();
1550
+ (server, rmp, call, deadline, request_metadata, optional_payload,
1551
+ cq_bound_to_call, cq_for_notification, tag_new));
1552
+ return server->core_server->RequestRegisteredCall(
1553
+ rm, call, deadline, request_metadata, optional_payload, cq_bound_to_call,
1554
+ cq_for_notification, tag_new);
1596
1555
  }