grpc 1.28.0.pre2 → 1.31.0.pre1

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 (660) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +8313 -11862
  3. data/include/grpc/grpc.h +2 -2
  4. data/include/grpc/grpc_security.h +30 -9
  5. data/include/grpc/grpc_security_constants.h +4 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +23 -23
  7. data/include/grpc/impl/codegen/port_platform.h +6 -34
  8. data/include/grpc/module.modulemap +24 -39
  9. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -12
  10. data/src/core/ext/filters/client_channel/client_channel.cc +618 -482
  11. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  12. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  13. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  14. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  15. data/src/core/ext/filters/client_channel/health/health_check_client.cc +9 -22
  16. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  17. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
  18. data/src/core/ext/filters/client_channel/http_proxy.cc +23 -14
  19. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  20. data/src/core/ext/filters/client_channel/lb_policy.h +44 -33
  21. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +297 -0
  24. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +311 -497
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  30. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  31. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -17
  33. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +117 -41
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +1142 -0
  39. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +10 -7
  40. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  41. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  42. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  43. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +78 -61
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +41 -40
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +22 -24
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +12 -10
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +79 -122
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +199 -163
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
  53. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +46 -45
  54. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
  55. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +64 -12
  58. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  59. data/src/core/ext/filters/client_channel/resolver_registry.cc +19 -17
  60. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +21 -22
  62. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
  63. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +73 -217
  64. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +45 -27
  65. data/src/core/ext/filters/client_channel/server_address.cc +6 -9
  66. data/src/core/ext/filters/client_channel/server_address.h +6 -12
  67. data/src/core/ext/filters/client_channel/service_config.cc +104 -144
  68. data/src/core/ext/filters/client_channel/service_config.h +28 -98
  69. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  70. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  71. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  72. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  73. data/src/core/ext/filters/client_channel/subchannel.cc +55 -25
  74. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  75. data/src/core/ext/filters/client_channel/xds/xds_api.cc +1200 -246
  76. data/src/core/ext/filters/client_channel/xds/xds_api.h +130 -44
  77. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +90 -29
  78. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +9 -4
  79. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
  80. data/src/core/ext/filters/client_channel/xds/xds_client.cc +839 -431
  81. data/src/core/ext/filters/client_channel/xds/xds_client.h +84 -33
  82. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
  83. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +40 -28
  84. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -33
  85. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  86. data/src/core/ext/filters/http/http_filters_plugin.cc +28 -12
  87. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  88. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +399 -0
  89. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
  90. data/src/core/ext/filters/message_size/message_size_filter.cc +61 -88
  91. data/src/core/ext/filters/message_size/message_size_filter.h +10 -4
  92. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +386 -350
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
  94. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
  96. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
  97. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +42 -26
  99. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  100. data/src/core/ext/transport/chttp2/transport/flow_control.cc +25 -30
  101. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  102. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  103. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  104. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  105. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  106. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  107. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  108. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  109. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
  110. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  111. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  112. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  113. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  114. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  116. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  118. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  119. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  120. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  121. data/src/core/ext/transport/chttp2/transport/internal.h +27 -21
  122. data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
  123. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  124. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -22
  125. data/src/core/ext/transport/inproc/inproc_transport.cc +54 -15
  126. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  127. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  128. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
  129. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -876
  130. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  131. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +429 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  133. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +198 -0
  134. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  135. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +388 -0
  136. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
  137. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
  138. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +23 -10
  139. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +352 -310
  140. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
  141. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
  142. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
  143. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
  144. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
  145. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
  146. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
  147. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
  148. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +79 -0
  150. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +48 -27
  151. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +258 -214
  152. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
  153. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
  154. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  155. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +71 -0
  156. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
  157. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
  158. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
  159. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +157 -122
  160. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
  161. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
  162. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
  163. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +173 -73
  164. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  165. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +88 -0
  166. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +2 -1
  167. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
  168. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
  169. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
  170. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +2 -1
  171. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
  172. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
  173. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
  174. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
  175. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +53 -38
  176. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
  177. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
  178. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
  179. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
  180. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
  181. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +95 -63
  182. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
  183. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
  184. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +3 -2
  185. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
  186. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
  187. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
  188. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
  189. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
  190. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
  191. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
  192. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
  193. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
  194. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +68 -46
  195. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +770 -722
  196. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
  197. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
  198. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
  199. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
  200. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +2 -1
  201. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
  202. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
  203. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +305 -210
  204. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
  205. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
  206. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  207. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  208. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  209. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
  210. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  211. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +22 -16
  212. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  213. data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
  214. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
  215. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +48 -11
  216. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
  217. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
  218. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
  219. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
  220. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  221. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
  222. data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
  223. data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
  224. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
  225. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
  226. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
  227. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
  228. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  229. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  230. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  231. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  232. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +12 -11
  233. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +421 -389
  234. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  235. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  236. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  237. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
  238. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  239. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  240. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  241. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  242. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  243. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  244. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  245. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  246. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  247. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  248. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  249. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  250. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  251. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +64 -0
  252. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  253. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  254. data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
  255. data/src/core/ext/upb-generated/validate/validate.upb.h +569 -562
  256. data/src/core/lib/channel/channel_args.cc +15 -14
  257. data/src/core/lib/channel/channel_args.h +3 -1
  258. data/src/core/lib/channel/channel_stack.h +20 -13
  259. data/src/core/lib/channel/channel_trace.cc +2 -6
  260. data/src/core/lib/channel/channelz.cc +10 -21
  261. data/src/core/lib/channel/channelz.h +3 -2
  262. data/src/core/lib/channel/channelz_registry.cc +5 -3
  263. data/src/core/lib/channel/connected_channel.cc +7 -5
  264. data/src/core/lib/channel/context.h +1 -1
  265. data/src/core/lib/channel/handshaker.cc +11 -13
  266. data/src/core/lib/channel/handshaker.h +4 -2
  267. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  268. data/src/core/lib/channel/status_util.cc +2 -3
  269. data/src/core/lib/compression/message_compress.cc +5 -1
  270. data/src/core/lib/debug/stats.cc +21 -27
  271. data/src/core/lib/debug/stats.h +3 -1
  272. data/src/core/lib/gpr/log_linux.cc +6 -8
  273. data/src/core/lib/gpr/log_posix.cc +6 -8
  274. data/src/core/lib/gpr/spinlock.h +2 -3
  275. data/src/core/lib/gpr/string.cc +10 -33
  276. data/src/core/lib/gpr/string.h +4 -18
  277. data/src/core/lib/gpr/sync_abseil.cc +2 -0
  278. data/src/core/lib/gpr/time.cc +4 -0
  279. data/src/core/lib/gpr/time_posix.cc +1 -1
  280. data/src/core/lib/gprpp/atomic.h +6 -6
  281. data/src/core/lib/gprpp/fork.cc +1 -1
  282. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  283. data/src/core/lib/gprpp/host_port.cc +29 -35
  284. data/src/core/lib/gprpp/host_port.h +14 -17
  285. data/src/core/lib/gprpp/map.h +5 -11
  286. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  287. data/src/core/lib/gprpp/sync.h +9 -0
  288. data/src/core/lib/http/format_request.cc +46 -65
  289. data/src/core/lib/http/httpcli.cc +15 -13
  290. data/src/core/lib/http/httpcli.h +2 -3
  291. data/src/core/lib/http/httpcli_security_connector.cc +10 -10
  292. data/src/core/lib/http/parser.h +2 -3
  293. data/src/core/lib/iomgr/buffer_list.h +22 -21
  294. data/src/core/lib/iomgr/call_combiner.h +3 -2
  295. data/src/core/lib/iomgr/cfstream_handle.cc +4 -2
  296. data/src/core/lib/iomgr/closure.h +2 -3
  297. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  298. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  299. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  300. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  301. data/src/core/lib/iomgr/error.cc +6 -9
  302. data/src/core/lib/iomgr/error.h +0 -1
  303. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  304. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  305. data/src/core/lib/iomgr/ev_apple.h +43 -0
  306. data/src/core/lib/iomgr/ev_epoll1_linux.cc +25 -29
  307. data/src/core/lib/iomgr/ev_epollex_linux.cc +17 -24
  308. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -8
  309. data/src/core/lib/iomgr/ev_posix.cc +4 -3
  310. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  311. data/src/core/lib/iomgr/iomgr.cc +10 -0
  312. data/src/core/lib/iomgr/iomgr.h +10 -0
  313. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  314. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  315. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  316. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  317. data/src/core/lib/iomgr/port.h +2 -21
  318. data/src/core/lib/iomgr/python_util.h +46 -0
  319. data/src/core/lib/iomgr/resolve_address.h +4 -6
  320. data/src/core/lib/iomgr/resolve_address_custom.cc +42 -57
  321. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  322. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  323. data/src/core/lib/iomgr/resolve_address_windows.cc +16 -25
  324. data/src/core/lib/iomgr/resource_quota.cc +38 -37
  325. data/src/core/lib/iomgr/sockaddr_utils.cc +29 -33
  326. data/src/core/lib/iomgr/sockaddr_utils.h +10 -15
  327. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  328. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  329. data/src/core/lib/iomgr/socket_utils_common_posix.cc +102 -81
  330. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  331. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  332. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -18
  333. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  334. data/src/core/lib/iomgr/tcp_client_posix.cc +30 -36
  335. data/src/core/lib/iomgr/tcp_client_windows.cc +10 -11
  336. data/src/core/lib/iomgr/tcp_custom.cc +3 -4
  337. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  338. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  339. data/src/core/lib/iomgr/tcp_server.h +7 -5
  340. data/src/core/lib/iomgr/tcp_server_custom.cc +11 -23
  341. data/src/core/lib/iomgr/tcp_server_posix.cc +38 -44
  342. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  343. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -8
  344. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -18
  345. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  346. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  347. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  348. data/src/core/lib/iomgr/timer_generic.cc +15 -15
  349. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  350. data/src/core/lib/iomgr/timer_heap.h +2 -3
  351. data/src/core/lib/iomgr/udp_server.cc +32 -36
  352. data/src/core/lib/iomgr/udp_server.h +5 -2
  353. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  354. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  355. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  356. data/src/core/lib/json/json.h +3 -2
  357. data/src/core/lib/json/json_reader.cc +25 -26
  358. data/src/core/lib/json/json_writer.cc +13 -12
  359. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  360. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  361. data/src/core/lib/security/credentials/credentials.cc +0 -84
  362. data/src/core/lib/security/credentials/credentials.h +13 -62
  363. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  364. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  365. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -17
  366. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  367. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  368. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  369. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  370. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  371. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  372. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
  373. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  374. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +73 -54
  375. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
  376. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +19 -6
  377. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  378. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  379. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  380. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  381. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +48 -11
  382. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  383. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -17
  384. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  385. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  386. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  387. data/src/core/lib/security/security_connector/security_connector.h +2 -2
  388. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +38 -36
  389. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +8 -5
  390. data/src/core/lib/security/security_connector/ssl_utils.cc +89 -21
  391. data/src/core/lib/security/security_connector/ssl_utils.h +18 -12
  392. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +101 -72
  393. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
  394. data/src/core/lib/security/transport/auth_filters.h +0 -5
  395. data/src/core/lib/security/transport/client_auth_filter.cc +11 -11
  396. data/src/core/lib/security/util/json_util.cc +12 -13
  397. data/src/core/lib/slice/slice.cc +38 -1
  398. data/src/core/lib/slice/slice_intern.cc +2 -3
  399. data/src/core/lib/slice/slice_internal.h +15 -0
  400. data/src/core/lib/slice/slice_utils.h +9 -0
  401. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  402. data/src/core/lib/surface/call.cc +42 -44
  403. data/src/core/lib/surface/call_log_batch.cc +50 -58
  404. data/src/core/lib/surface/channel.cc +53 -31
  405. data/src/core/lib/surface/channel.h +35 -4
  406. data/src/core/lib/surface/channel_ping.cc +2 -3
  407. data/src/core/lib/surface/completion_queue.cc +304 -47
  408. data/src/core/lib/surface/completion_queue.h +8 -0
  409. data/src/core/lib/surface/event_string.cc +18 -25
  410. data/src/core/lib/surface/event_string.h +3 -1
  411. data/src/core/lib/surface/init.cc +2 -0
  412. data/src/core/lib/surface/init_secure.cc +1 -4
  413. data/src/core/lib/surface/server.cc +971 -837
  414. data/src/core/lib/surface/server.h +66 -12
  415. data/src/core/lib/surface/version.cc +2 -2
  416. data/src/core/lib/transport/byte_stream.h +7 -2
  417. data/src/core/lib/transport/connectivity_state.cc +7 -6
  418. data/src/core/lib/transport/connectivity_state.h +5 -3
  419. data/src/core/lib/transport/metadata.cc +3 -3
  420. data/src/core/lib/transport/metadata_batch.h +2 -3
  421. data/src/core/lib/transport/static_metadata.h +1 -1
  422. data/src/core/lib/transport/status_conversion.cc +6 -14
  423. data/src/core/lib/transport/transport.cc +2 -3
  424. data/src/core/lib/transport/transport.h +9 -2
  425. data/src/core/lib/transport/transport_op_string.cc +61 -102
  426. data/src/core/lib/uri/uri_parser.cc +8 -15
  427. data/src/core/lib/uri/uri_parser.h +2 -3
  428. data/src/core/plugin_registry/grpc_plugin_registry.cc +24 -4
  429. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  430. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +31 -14
  431. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  432. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +34 -2
  433. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  434. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  435. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  436. data/src/core/tsi/fake_transport_security.cc +10 -15
  437. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  438. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  439. data/src/core/tsi/ssl_transport_security.cc +154 -50
  440. data/src/core/tsi/ssl_transport_security.h +22 -10
  441. data/src/core/tsi/ssl_types.h +0 -2
  442. data/src/core/tsi/transport_security.h +6 -9
  443. data/src/core/tsi/transport_security_grpc.h +2 -3
  444. data/src/core/tsi/transport_security_interface.h +8 -3
  445. data/src/ruby/ext/grpc/extconf.rb +5 -2
  446. data/src/ruby/ext/grpc/rb_call.c +12 -3
  447. data/src/ruby/ext/grpc/rb_call.h +4 -0
  448. data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
  449. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  450. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  451. data/src/ruby/lib/grpc/errors.rb +103 -42
  452. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  453. data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
  454. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  455. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  456. data/src/ruby/lib/grpc/structs.rb +1 -1
  457. data/src/ruby/lib/grpc/version.rb +1 -1
  458. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  459. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  460. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  461. data/src/ruby/spec/debug_message_spec.rb +134 -0
  462. data/src/ruby/spec/generic/service_spec.rb +2 -0
  463. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  464. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +7 -0
  465. data/src/ruby/spec/pb/codegen/package_option_spec.rb +7 -1
  466. data/src/ruby/spec/support/services.rb +10 -4
  467. data/src/ruby/spec/testdata/ca.pem +18 -13
  468. data/src/ruby/spec/testdata/client.key +26 -14
  469. data/src/ruby/spec/testdata/client.pem +18 -12
  470. data/src/ruby/spec/testdata/server1.key +26 -14
  471. data/src/ruby/spec/testdata/server1.pem +20 -14
  472. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  473. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  474. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  475. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  476. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  477. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  478. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  481. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  482. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  483. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  484. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  485. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  486. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  487. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  488. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  489. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  490. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  491. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  492. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  493. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  494. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  495. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  496. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  497. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  498. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  499. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  500. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  501. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  502. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  503. data/third_party/boringssl-with-bazel/err_data.c +335 -297
  504. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  505. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  506. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  507. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  508. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  509. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  510. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  511. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  512. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  513. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  514. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  515. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  516. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  517. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
  518. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  519. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  520. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  521. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  522. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  523. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  524. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
  525. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
  526. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
  527. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
  528. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  529. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  530. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
  531. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  532. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  533. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  535. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +25 -12
  536. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  537. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  538. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  539. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
  540. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
  541. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  542. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  543. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +434 -161
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  545. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +18 -25
  546. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  547. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +104 -122
  548. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
  549. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  550. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  551. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  552. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  553. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  554. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  555. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  556. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  557. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  558. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  559. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  560. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
  561. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
  562. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
  563. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  564. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
  565. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
  566. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
  567. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  568. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  569. data/third_party/boringssl-with-bazel/src/crypto/mem.c +47 -16
  570. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  571. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  572. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  573. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  574. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  575. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  576. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  577. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +249 -0
  578. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1227 -0
  579. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +682 -0
  580. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  581. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  582. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  583. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  584. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  585. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  586. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +57 -0
  587. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  588. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +33 -9
  589. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  590. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
  591. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  592. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  593. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  594. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  595. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  596. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  597. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  598. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +6 -2
  599. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
  600. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
  601. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  602. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  603. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  604. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  605. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  606. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  607. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
  608. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  609. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  610. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +191 -79
  611. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  612. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +282 -0
  613. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +791 -715
  614. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  615. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  616. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  617. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  618. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
  619. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +23 -5
  620. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +30 -22
  621. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +21 -4
  622. data/third_party/boringssl-with-bazel/src/ssl/internal.h +74 -54
  623. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  624. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  625. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  626. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
  627. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
  628. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +34 -1
  629. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  630. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +44 -5
  631. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  632. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  633. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +51 -26
  634. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
  635. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
  636. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +129 -48
  637. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
  638. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +55 -22
  639. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  640. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  641. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  642. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  643. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  644. data/third_party/upb/upb/decode.c +467 -504
  645. data/third_party/upb/upb/encode.c +163 -121
  646. data/third_party/upb/upb/msg.c +130 -64
  647. data/third_party/upb/upb/msg.h +418 -14
  648. data/third_party/upb/upb/port_def.inc +35 -6
  649. data/third_party/upb/upb/port_undef.inc +8 -1
  650. data/third_party/upb/upb/table.c +53 -75
  651. data/third_party/upb/upb/table.int.h +11 -43
  652. data/third_party/upb/upb/upb.c +148 -124
  653. data/third_party/upb/upb/upb.h +65 -147
  654. data/third_party/upb/upb/upb.hpp +86 -0
  655. metadata +122 -41
  656. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1908
  657. data/src/core/lib/gprpp/string_view.h +0 -60
  658. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  659. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
  660. data/third_party/upb/upb/generated_util.h +0 -105
@@ -0,0 +1,399 @@
1
+ //
2
+ //
3
+ // Copyright 2020 gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/ext/filters/http/message_compress/message_decompress_filter.h"
22
+
23
+ #include <assert.h>
24
+ #include <string.h>
25
+
26
+ #include "absl/strings/str_cat.h"
27
+
28
+ #include <grpc/compression.h>
29
+ #include <grpc/slice_buffer.h>
30
+ #include <grpc/support/alloc.h>
31
+ #include <grpc/support/log.h>
32
+
33
+ #include "absl/strings/str_format.h"
34
+ #include "src/core/ext/filters/message_size/message_size_filter.h"
35
+ #include "src/core/lib/channel/channel_args.h"
36
+ #include "src/core/lib/compression/algorithm_metadata.h"
37
+ #include "src/core/lib/compression/compression_args.h"
38
+ #include "src/core/lib/compression/compression_internal.h"
39
+ #include "src/core/lib/compression/message_compress.h"
40
+ #include "src/core/lib/gpr/string.h"
41
+ #include "src/core/lib/slice/slice_internal.h"
42
+ #include "src/core/lib/slice/slice_string_helpers.h"
43
+
44
+ namespace grpc_core {
45
+ namespace {
46
+
47
+ class ChannelData {
48
+ public:
49
+ explicit ChannelData(const grpc_channel_element_args* args)
50
+ : max_recv_size_(GetMaxRecvSizeFromChannelArgs(args->channel_args)) {}
51
+
52
+ int max_recv_size() const { return max_recv_size_; }
53
+
54
+ private:
55
+ int max_recv_size_;
56
+ };
57
+
58
+ class CallData {
59
+ public:
60
+ CallData(const grpc_call_element_args& args, const ChannelData* chand)
61
+ : call_combiner_(args.call_combiner),
62
+ max_recv_message_length_(chand->max_recv_size()) {
63
+ // Initialize state for recv_initial_metadata_ready callback
64
+ GRPC_CLOSURE_INIT(&on_recv_initial_metadata_ready_,
65
+ OnRecvInitialMetadataReady, this,
66
+ grpc_schedule_on_exec_ctx);
67
+ // Initialize state for recv_message_ready callback
68
+ grpc_slice_buffer_init(&recv_slices_);
69
+ GRPC_CLOSURE_INIT(&on_recv_message_next_done_, OnRecvMessageNextDone, this,
70
+ grpc_schedule_on_exec_ctx);
71
+ GRPC_CLOSURE_INIT(&on_recv_message_ready_, OnRecvMessageReady, this,
72
+ grpc_schedule_on_exec_ctx);
73
+ // Initialize state for recv_trailing_metadata_ready callback
74
+ GRPC_CLOSURE_INIT(&on_recv_trailing_metadata_ready_,
75
+ OnRecvTrailingMetadataReady, this,
76
+ grpc_schedule_on_exec_ctx);
77
+ const MessageSizeParsedConfig* limits =
78
+ MessageSizeParsedConfig::GetFromCallContext(args.context);
79
+ if (limits != nullptr && limits->limits().max_recv_size >= 0 &&
80
+ (limits->limits().max_recv_size < max_recv_message_length_ ||
81
+ max_recv_message_length_ < 0)) {
82
+ max_recv_message_length_ = limits->limits().max_recv_size;
83
+ }
84
+ }
85
+
86
+ ~CallData() { grpc_slice_buffer_destroy_internal(&recv_slices_); }
87
+
88
+ void DecompressStartTransportStreamOpBatch(
89
+ grpc_call_element* elem, grpc_transport_stream_op_batch* batch);
90
+
91
+ private:
92
+ static void OnRecvInitialMetadataReady(void* arg, grpc_error* error);
93
+
94
+ // Methods for processing a receive message event
95
+ void MaybeResumeOnRecvMessageReady();
96
+ static void OnRecvMessageReady(void* arg, grpc_error* error);
97
+ static void OnRecvMessageNextDone(void* arg, grpc_error* error);
98
+ grpc_error* PullSliceFromRecvMessage();
99
+ void ContinueReadingRecvMessage();
100
+ void FinishRecvMessage();
101
+ void ContinueRecvMessageReadyCallback(grpc_error* error);
102
+
103
+ // Methods for processing a recv_trailing_metadata event
104
+ void MaybeResumeOnRecvTrailingMetadataReady();
105
+ static void OnRecvTrailingMetadataReady(void* arg, grpc_error* error);
106
+
107
+ CallCombiner* call_combiner_;
108
+ // Overall error for the call
109
+ grpc_error* error_ = GRPC_ERROR_NONE;
110
+ // Fields for handling recv_initial_metadata_ready callback
111
+ grpc_closure on_recv_initial_metadata_ready_;
112
+ grpc_closure* original_recv_initial_metadata_ready_ = nullptr;
113
+ grpc_metadata_batch* recv_initial_metadata_ = nullptr;
114
+ // Fields for handling recv_message_ready callback
115
+ bool seen_recv_message_ready_ = false;
116
+ int max_recv_message_length_;
117
+ grpc_message_compression_algorithm algorithm_ = GRPC_MESSAGE_COMPRESS_NONE;
118
+ grpc_closure on_recv_message_ready_;
119
+ grpc_closure* original_recv_message_ready_ = nullptr;
120
+ grpc_closure on_recv_message_next_done_;
121
+ OrphanablePtr<ByteStream>* recv_message_ = nullptr;
122
+ // recv_slices_ holds the slices read from the original recv_message stream.
123
+ // It is initialized during construction and reset when a new stream is
124
+ // created using it.
125
+ grpc_slice_buffer recv_slices_;
126
+ std::aligned_storage<sizeof(SliceBufferByteStream),
127
+ alignof(SliceBufferByteStream)>::type
128
+ recv_replacement_stream_;
129
+ // Fields for handling recv_trailing_metadata_ready callback
130
+ bool seen_recv_trailing_metadata_ready_ = false;
131
+ grpc_closure on_recv_trailing_metadata_ready_;
132
+ grpc_closure* original_recv_trailing_metadata_ready_ = nullptr;
133
+ grpc_error* on_recv_trailing_metadata_ready_error_ = GRPC_ERROR_NONE;
134
+ };
135
+
136
+ grpc_message_compression_algorithm DecodeMessageCompressionAlgorithm(
137
+ grpc_mdelem md) {
138
+ grpc_message_compression_algorithm algorithm =
139
+ grpc_message_compression_algorithm_from_slice(GRPC_MDVALUE(md));
140
+ if (algorithm == GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT) {
141
+ char* md_c_str = grpc_slice_to_c_string(GRPC_MDVALUE(md));
142
+ gpr_log(GPR_ERROR,
143
+ "Invalid incoming message compression algorithm: '%s'. "
144
+ "Interpreting incoming data as uncompressed.",
145
+ md_c_str);
146
+ gpr_free(md_c_str);
147
+ return GRPC_MESSAGE_COMPRESS_NONE;
148
+ }
149
+ return algorithm;
150
+ }
151
+
152
+ void CallData::OnRecvInitialMetadataReady(void* arg, grpc_error* error) {
153
+ CallData* calld = static_cast<CallData*>(arg);
154
+ if (error == GRPC_ERROR_NONE) {
155
+ grpc_linked_mdelem* grpc_encoding =
156
+ calld->recv_initial_metadata_->idx.named.grpc_encoding;
157
+ if (grpc_encoding != nullptr) {
158
+ calld->algorithm_ = DecodeMessageCompressionAlgorithm(grpc_encoding->md);
159
+ }
160
+ }
161
+ calld->MaybeResumeOnRecvMessageReady();
162
+ calld->MaybeResumeOnRecvTrailingMetadataReady();
163
+ grpc_closure* closure = calld->original_recv_initial_metadata_ready_;
164
+ calld->original_recv_initial_metadata_ready_ = nullptr;
165
+ Closure::Run(DEBUG_LOCATION, closure, GRPC_ERROR_REF(error));
166
+ }
167
+
168
+ void CallData::MaybeResumeOnRecvMessageReady() {
169
+ if (seen_recv_message_ready_) {
170
+ seen_recv_message_ready_ = false;
171
+ GRPC_CALL_COMBINER_START(call_combiner_, &on_recv_message_ready_,
172
+ GRPC_ERROR_NONE,
173
+ "continue recv_message_ready callback");
174
+ }
175
+ }
176
+
177
+ void CallData::OnRecvMessageReady(void* arg, grpc_error* error) {
178
+ CallData* calld = static_cast<CallData*>(arg);
179
+ if (error == GRPC_ERROR_NONE) {
180
+ if (calld->original_recv_initial_metadata_ready_ != nullptr) {
181
+ calld->seen_recv_message_ready_ = true;
182
+ GRPC_CALL_COMBINER_STOP(calld->call_combiner_,
183
+ "Deferring OnRecvMessageReady until after "
184
+ "OnRecvInitialMetadataReady");
185
+ return;
186
+ }
187
+ if (calld->algorithm_ != GRPC_MESSAGE_COMPRESS_NONE) {
188
+ // recv_message can be NULL if trailing metadata is received instead of
189
+ // message, or it's possible that the message was not compressed.
190
+ if (*calld->recv_message_ == nullptr ||
191
+ (*calld->recv_message_)->length() == 0 ||
192
+ ((*calld->recv_message_)->flags() & GRPC_WRITE_INTERNAL_COMPRESS) ==
193
+ 0) {
194
+ return calld->ContinueRecvMessageReadyCallback(GRPC_ERROR_NONE);
195
+ }
196
+ if (calld->max_recv_message_length_ >= 0 &&
197
+ (*calld->recv_message_)->length() >
198
+ static_cast<uint32_t>(calld->max_recv_message_length_)) {
199
+ std::string message_string = absl::StrFormat(
200
+ "Received message larger than max (%u vs. %d)",
201
+ (*calld->recv_message_)->length(), calld->max_recv_message_length_);
202
+ GPR_DEBUG_ASSERT(calld->error_ == GRPC_ERROR_NONE);
203
+ calld->error_ = grpc_error_set_int(
204
+ GRPC_ERROR_CREATE_FROM_COPIED_STRING(message_string.c_str()),
205
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED);
206
+ return calld->ContinueRecvMessageReadyCallback(
207
+ GRPC_ERROR_REF(calld->error_));
208
+ }
209
+ grpc_slice_buffer_destroy_internal(&calld->recv_slices_);
210
+ grpc_slice_buffer_init(&calld->recv_slices_);
211
+ return calld->ContinueReadingRecvMessage();
212
+ }
213
+ }
214
+ calld->ContinueRecvMessageReadyCallback(GRPC_ERROR_REF(error));
215
+ }
216
+
217
+ void CallData::ContinueReadingRecvMessage() {
218
+ while ((*recv_message_)
219
+ ->Next((*recv_message_)->length() - recv_slices_.length,
220
+ &on_recv_message_next_done_)) {
221
+ grpc_error* error = PullSliceFromRecvMessage();
222
+ if (error != GRPC_ERROR_NONE) {
223
+ return ContinueRecvMessageReadyCallback(error);
224
+ }
225
+ // We have read the entire message.
226
+ if (recv_slices_.length == (*recv_message_)->length()) {
227
+ return FinishRecvMessage();
228
+ }
229
+ }
230
+ }
231
+
232
+ grpc_error* CallData::PullSliceFromRecvMessage() {
233
+ grpc_slice incoming_slice;
234
+ grpc_error* error = (*recv_message_)->Pull(&incoming_slice);
235
+ if (error == GRPC_ERROR_NONE) {
236
+ grpc_slice_buffer_add(&recv_slices_, incoming_slice);
237
+ }
238
+ return error;
239
+ }
240
+
241
+ void CallData::OnRecvMessageNextDone(void* arg, grpc_error* error) {
242
+ CallData* calld = static_cast<CallData*>(arg);
243
+ if (error != GRPC_ERROR_NONE) {
244
+ return calld->ContinueRecvMessageReadyCallback(GRPC_ERROR_REF(error));
245
+ }
246
+ error = calld->PullSliceFromRecvMessage();
247
+ if (error != GRPC_ERROR_NONE) {
248
+ return calld->ContinueRecvMessageReadyCallback(error);
249
+ }
250
+ if (calld->recv_slices_.length == (*calld->recv_message_)->length()) {
251
+ calld->FinishRecvMessage();
252
+ } else {
253
+ calld->ContinueReadingRecvMessage();
254
+ }
255
+ }
256
+
257
+ void CallData::FinishRecvMessage() {
258
+ grpc_slice_buffer decompressed_slices;
259
+ grpc_slice_buffer_init(&decompressed_slices);
260
+ if (grpc_msg_decompress(algorithm_, &recv_slices_, &decompressed_slices) ==
261
+ 0) {
262
+ GPR_DEBUG_ASSERT(error_ == GRPC_ERROR_NONE);
263
+ error_ = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
264
+ absl::StrCat("Unexpected error decompressing data for algorithm with "
265
+ "enum value ",
266
+ algorithm_)
267
+ .c_str());
268
+ grpc_slice_buffer_destroy_internal(&decompressed_slices);
269
+ } else {
270
+ uint32_t recv_flags =
271
+ ((*recv_message_)->flags() & (~GRPC_WRITE_INTERNAL_COMPRESS)) |
272
+ GRPC_WRITE_INTERNAL_TEST_ONLY_WAS_COMPRESSED;
273
+ // Swap out the original receive byte stream with our new one and send the
274
+ // batch down.
275
+ // Initializing recv_replacement_stream_ with decompressed_slices removes
276
+ // all the slices from decompressed_slices leaving it empty.
277
+ new (&recv_replacement_stream_)
278
+ SliceBufferByteStream(&decompressed_slices, recv_flags);
279
+ recv_message_->reset(
280
+ reinterpret_cast<SliceBufferByteStream*>(&recv_replacement_stream_));
281
+ recv_message_ = nullptr;
282
+ }
283
+ ContinueRecvMessageReadyCallback(GRPC_ERROR_REF(error_));
284
+ }
285
+
286
+ void CallData::ContinueRecvMessageReadyCallback(grpc_error* error) {
287
+ MaybeResumeOnRecvTrailingMetadataReady();
288
+ // The surface will clean up the receiving stream if there is an error.
289
+ grpc_closure* closure = original_recv_message_ready_;
290
+ original_recv_message_ready_ = nullptr;
291
+ Closure::Run(DEBUG_LOCATION, closure, error);
292
+ }
293
+
294
+ void CallData::MaybeResumeOnRecvTrailingMetadataReady() {
295
+ if (seen_recv_trailing_metadata_ready_) {
296
+ seen_recv_trailing_metadata_ready_ = false;
297
+ grpc_error* error = on_recv_trailing_metadata_ready_error_;
298
+ on_recv_trailing_metadata_ready_error_ = GRPC_ERROR_NONE;
299
+ GRPC_CALL_COMBINER_START(call_combiner_, &on_recv_trailing_metadata_ready_,
300
+ error, "Continuing OnRecvTrailingMetadataReady");
301
+ }
302
+ }
303
+
304
+ void CallData::OnRecvTrailingMetadataReady(void* arg, grpc_error* error) {
305
+ CallData* calld = static_cast<CallData*>(arg);
306
+ if (calld->original_recv_initial_metadata_ready_ != nullptr ||
307
+ calld->original_recv_message_ready_ != nullptr) {
308
+ calld->seen_recv_trailing_metadata_ready_ = true;
309
+ calld->on_recv_trailing_metadata_ready_error_ = GRPC_ERROR_REF(error);
310
+ GRPC_CALL_COMBINER_STOP(
311
+ calld->call_combiner_,
312
+ "Deferring OnRecvTrailingMetadataReady until after "
313
+ "OnRecvInitialMetadataReady and OnRecvMessageReady");
314
+ return;
315
+ }
316
+ error = grpc_error_add_child(GRPC_ERROR_REF(error), calld->error_);
317
+ calld->error_ = GRPC_ERROR_NONE;
318
+ grpc_closure* closure = calld->original_recv_trailing_metadata_ready_;
319
+ calld->original_recv_trailing_metadata_ready_ = nullptr;
320
+ Closure::Run(DEBUG_LOCATION, closure, error);
321
+ }
322
+
323
+ void CallData::DecompressStartTransportStreamOpBatch(
324
+ grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
325
+ // Handle recv_initial_metadata.
326
+ if (batch->recv_initial_metadata) {
327
+ recv_initial_metadata_ =
328
+ batch->payload->recv_initial_metadata.recv_initial_metadata;
329
+ original_recv_initial_metadata_ready_ =
330
+ batch->payload->recv_initial_metadata.recv_initial_metadata_ready;
331
+ batch->payload->recv_initial_metadata.recv_initial_metadata_ready =
332
+ &on_recv_initial_metadata_ready_;
333
+ }
334
+ // Handle recv_message
335
+ if (batch->recv_message) {
336
+ recv_message_ = batch->payload->recv_message.recv_message;
337
+ original_recv_message_ready_ =
338
+ batch->payload->recv_message.recv_message_ready;
339
+ batch->payload->recv_message.recv_message_ready = &on_recv_message_ready_;
340
+ }
341
+ // Handle recv_trailing_metadata
342
+ if (batch->recv_trailing_metadata) {
343
+ original_recv_trailing_metadata_ready_ =
344
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
345
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
346
+ &on_recv_trailing_metadata_ready_;
347
+ }
348
+ // Pass control down the stack.
349
+ grpc_call_next_op(elem, batch);
350
+ }
351
+
352
+ void DecompressStartTransportStreamOpBatch(
353
+ grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
354
+ GPR_TIMER_SCOPE("decompress_start_transport_stream_op_batch", 0);
355
+ CallData* calld = static_cast<CallData*>(elem->call_data);
356
+ calld->DecompressStartTransportStreamOpBatch(elem, batch);
357
+ }
358
+
359
+ grpc_error* DecompressInitCallElem(grpc_call_element* elem,
360
+ const grpc_call_element_args* args) {
361
+ ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
362
+ new (elem->call_data) CallData(*args, chand);
363
+ return GRPC_ERROR_NONE;
364
+ }
365
+
366
+ void DecompressDestroyCallElem(grpc_call_element* elem,
367
+ const grpc_call_final_info* /*final_info*/,
368
+ grpc_closure* /*ignored*/) {
369
+ CallData* calld = static_cast<CallData*>(elem->call_data);
370
+ calld->~CallData();
371
+ }
372
+
373
+ grpc_error* DecompressInitChannelElem(grpc_channel_element* elem,
374
+ grpc_channel_element_args* args) {
375
+ ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
376
+ new (chand) ChannelData(args);
377
+ return GRPC_ERROR_NONE;
378
+ }
379
+
380
+ void DecompressDestroyChannelElem(grpc_channel_element* elem) {
381
+ ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
382
+ chand->~ChannelData();
383
+ }
384
+
385
+ } // namespace
386
+
387
+ const grpc_channel_filter MessageDecompressFilter = {
388
+ DecompressStartTransportStreamOpBatch,
389
+ grpc_channel_next_op,
390
+ sizeof(CallData),
391
+ DecompressInitCallElem,
392
+ grpc_call_stack_ignore_set_pollset_or_pollset_set,
393
+ DecompressDestroyCallElem,
394
+ sizeof(ChannelData),
395
+ DecompressInitChannelElem,
396
+ DecompressDestroyChannelElem,
397
+ grpc_channel_next_get_info,
398
+ "message_decompress"};
399
+ } // namespace grpc_core
@@ -0,0 +1,31 @@
1
+ //
2
+ //
3
+ // Copyright 2020 gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
+
19
+ #ifndef GRPC_CORE_EXT_FILTERS_HTTP_MESSAGE_COMPRESS_MESSAGE_DECOMPRESS_FILTER_H
20
+ #define GRPC_CORE_EXT_FILTERS_HTTP_MESSAGE_COMPRESS_MESSAGE_DECOMPRESS_FILTER_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include "src/core/lib/channel/channel_stack.h"
25
+
26
+ namespace grpc_core {
27
+ extern const grpc_channel_filter MessageDecompressFilter;
28
+ } // namespace grpc_core
29
+
30
+ #endif /* GRPC_CORE_EXT_FILTERS_HTTP_MESSAGE_COMPRESS_MESSAGE_DECOMPRESS_FILTER_H \
31
+ */
@@ -21,12 +21,14 @@
21
21
  #include <limits.h>
22
22
  #include <string.h>
23
23
 
24
+ #include "absl/strings/str_format.h"
25
+
24
26
  #include <grpc/impl/codegen/grpc_types.h>
25
27
  #include <grpc/support/alloc.h>
26
28
  #include <grpc/support/log.h>
27
- #include <grpc/support/string_util.h>
28
29
 
29
30
  #include "src/core/ext/filters/client_channel/service_config.h"
31
+ #include "src/core/ext/filters/client_channel/service_config_call_data.h"
30
32
  #include "src/core/lib/channel/channel_args.h"
31
33
  #include "src/core/lib/channel/channel_stack_builder.h"
32
34
  #include "src/core/lib/gpr/string.h"
@@ -44,7 +46,26 @@ namespace {
44
46
  size_t g_message_size_parser_index;
45
47
  } // namespace
46
48
 
47
- std::unique_ptr<ServiceConfig::ParsedConfig>
49
+ //
50
+ // MessageSizeParsedConfig
51
+ //
52
+
53
+ const MessageSizeParsedConfig* MessageSizeParsedConfig::GetFromCallContext(
54
+ const grpc_call_context_element* context) {
55
+ if (context == nullptr) return nullptr;
56
+ auto* svc_cfg_call_data = static_cast<ServiceConfigCallData*>(
57
+ context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
58
+ if (svc_cfg_call_data == nullptr) return nullptr;
59
+ return static_cast<const MessageSizeParsedConfig*>(
60
+ svc_cfg_call_data->GetMethodParsedConfig(
61
+ MessageSizeParser::ParserIndex()));
62
+ }
63
+
64
+ //
65
+ // MessageSizeParser
66
+ //
67
+
68
+ std::unique_ptr<ServiceConfigParser::ParsedConfig>
48
69
  MessageSizeParser::ParsePerMethodParams(const Json& json, grpc_error** error) {
49
70
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
50
71
  std::vector<grpc_error*> error_list;
@@ -91,17 +112,31 @@ MessageSizeParser::ParsePerMethodParams(const Json& json, grpc_error** error) {
91
112
  }
92
113
 
93
114
  void MessageSizeParser::Register() {
94
- g_message_size_parser_index =
95
- ServiceConfig::RegisterParser(absl::make_unique<MessageSizeParser>());
115
+ g_message_size_parser_index = ServiceConfigParser::RegisterParser(
116
+ absl::make_unique<MessageSizeParser>());
96
117
  }
97
118
 
98
119
  size_t MessageSizeParser::ParserIndex() { return g_message_size_parser_index; }
120
+
121
+ int GetMaxRecvSizeFromChannelArgs(const grpc_channel_args* args) {
122
+ if (grpc_channel_args_want_minimal_stack(args)) return -1;
123
+ return grpc_channel_args_find_integer(
124
+ args, GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH,
125
+ {GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH, -1, INT_MAX});
126
+ }
127
+
128
+ int GetMaxSendSizeFromChannelArgs(const grpc_channel_args* args) {
129
+ if (grpc_channel_args_want_minimal_stack(args)) return -1;
130
+ return grpc_channel_args_find_integer(
131
+ args, GRPC_ARG_MAX_SEND_MESSAGE_LENGTH,
132
+ {GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH, -1, INT_MAX});
133
+ }
134
+
99
135
  } // namespace grpc_core
100
136
 
101
137
  namespace {
102
138
  struct channel_data {
103
139
  grpc_core::MessageSizeParsedConfig::message_size_limits limits;
104
- grpc_core::RefCountedPtr<grpc_core::ServiceConfig> svc_cfg;
105
140
  };
106
141
 
107
142
  struct call_data {
@@ -117,24 +152,8 @@ struct call_data {
117
152
  // Note: Per-method config is only available on the client, so we
118
153
  // apply the max request size to the send limit and the max response
119
154
  // size to the receive limit.
120
- const grpc_core::MessageSizeParsedConfig* limits = nullptr;
121
- grpc_core::ServiceConfig::CallData* svc_cfg_call_data = nullptr;
122
- if (args.context != nullptr) {
123
- svc_cfg_call_data = static_cast<grpc_core::ServiceConfig::CallData*>(
124
- args.context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
125
- }
126
- if (svc_cfg_call_data != nullptr) {
127
- limits = static_cast<const grpc_core::MessageSizeParsedConfig*>(
128
- svc_cfg_call_data->GetMethodParsedConfig(
129
- grpc_core::MessageSizeParser::ParserIndex()));
130
- } else if (chand.svc_cfg != nullptr) {
131
- const auto* objs_vector =
132
- chand.svc_cfg->GetMethodParsedConfigVector(args.path);
133
- if (objs_vector != nullptr) {
134
- limits = static_cast<const grpc_core::MessageSizeParsedConfig*>(
135
- (*objs_vector)[grpc_core::MessageSizeParser::ParserIndex()].get());
136
- }
137
- }
155
+ const grpc_core::MessageSizeParsedConfig* limits =
156
+ grpc_core::MessageSizeParsedConfig::GetFromCallContext(args.context);
138
157
  if (limits != nullptr) {
139
158
  if (limits->limits().max_send_size >= 0 &&
140
159
  (limits->limits().max_send_size < this->limits.max_send_size ||
@@ -180,21 +199,16 @@ static void recv_message_ready(void* user_data, grpc_error* error) {
180
199
  if (*calld->recv_message != nullptr && calld->limits.max_recv_size >= 0 &&
181
200
  (*calld->recv_message)->length() >
182
201
  static_cast<size_t>(calld->limits.max_recv_size)) {
183
- char* message_string;
184
- gpr_asprintf(&message_string,
185
- "Received message larger than max (%u vs. %d)",
186
- (*calld->recv_message)->length(), calld->limits.max_recv_size);
187
202
  grpc_error* new_error = grpc_error_set_int(
188
- GRPC_ERROR_CREATE_FROM_COPIED_STRING(message_string),
203
+ GRPC_ERROR_CREATE_FROM_COPIED_STRING(
204
+ absl::StrFormat("Received message larger than max (%u vs. %d)",
205
+ (*calld->recv_message)->length(),
206
+ calld->limits.max_recv_size)
207
+ .c_str()),
189
208
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED);
209
+ error = grpc_error_add_child(GRPC_ERROR_REF(error), new_error);
190
210
  GRPC_ERROR_UNREF(calld->error);
191
- if (error == GRPC_ERROR_NONE) {
192
- error = new_error;
193
- } else {
194
- error = grpc_error_add_child(error, new_error);
195
- }
196
211
  calld->error = GRPC_ERROR_REF(error);
197
- gpr_free(message_string);
198
212
  } else {
199
213
  GRPC_ERROR_REF(error);
200
214
  }
@@ -244,17 +258,17 @@ static void message_size_start_transport_stream_op_batch(
244
258
  if (op->send_message && calld->limits.max_send_size >= 0 &&
245
259
  op->payload->send_message.send_message->length() >
246
260
  static_cast<size_t>(calld->limits.max_send_size)) {
247
- char* message_string;
248
- gpr_asprintf(&message_string, "Sent message larger than max (%u vs. %d)",
249
- op->payload->send_message.send_message->length(),
250
- calld->limits.max_send_size);
251
261
  grpc_transport_stream_op_batch_finish_with_failure(
252
262
  op,
253
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_COPIED_STRING(message_string),
254
- GRPC_ERROR_INT_GRPC_STATUS,
255
- GRPC_STATUS_RESOURCE_EXHAUSTED),
263
+ grpc_error_set_int(
264
+ GRPC_ERROR_CREATE_FROM_COPIED_STRING(
265
+ absl::StrFormat(
266
+ "Sent message larger than max (%u vs. %d)",
267
+ op->payload->send_message.send_message->length(),
268
+ calld->limits.max_send_size)
269
+ .c_str()),
270
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED),
256
271
  calld->call_combiner);
257
- gpr_free(message_string);
258
272
  return;
259
273
  }
260
274
  // Inject callback for receiving a message.
@@ -291,35 +305,11 @@ static void message_size_destroy_call_elem(
291
305
  calld->~call_data();
292
306
  }
293
307
 
294
- static int default_size(const grpc_channel_args* args,
295
- int without_minimal_stack) {
296
- if (grpc_channel_args_want_minimal_stack(args)) {
297
- return -1;
298
- }
299
- return without_minimal_stack;
300
- }
301
-
302
308
  grpc_core::MessageSizeParsedConfig::message_size_limits get_message_size_limits(
303
309
  const grpc_channel_args* channel_args) {
304
310
  grpc_core::MessageSizeParsedConfig::message_size_limits lim;
305
- lim.max_send_size =
306
- default_size(channel_args, GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH);
307
- lim.max_recv_size =
308
- default_size(channel_args, GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH);
309
- for (size_t i = 0; i < channel_args->num_args; ++i) {
310
- if (strcmp(channel_args->args[i].key, GRPC_ARG_MAX_SEND_MESSAGE_LENGTH) ==
311
- 0) {
312
- const grpc_integer_options options = {lim.max_send_size, -1, INT_MAX};
313
- lim.max_send_size =
314
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
315
- }
316
- if (strcmp(channel_args->args[i].key,
317
- GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH) == 0) {
318
- const grpc_integer_options options = {lim.max_recv_size, -1, INT_MAX};
319
- lim.max_recv_size =
320
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
321
- }
322
- }
311
+ lim.max_send_size = grpc_core::GetMaxSendSizeFromChannelArgs(channel_args);
312
+ lim.max_recv_size = grpc_core::GetMaxRecvSizeFromChannelArgs(channel_args);
323
313
  return lim;
324
314
  }
325
315
 
@@ -330,26 +320,6 @@ static grpc_error* message_size_init_channel_elem(
330
320
  channel_data* chand = static_cast<channel_data*>(elem->channel_data);
331
321
  new (chand) channel_data();
332
322
  chand->limits = get_message_size_limits(args->channel_args);
333
- // TODO(yashykt): We only need to read GRPC_ARG_SERVICE_CONFIG in the case of
334
- // direct channels. (Service config is otherwise stored in the call_context by
335
- // client_channel filter.) If we ever need a second filter that also needs to
336
- // parse GRPC_ARG_SERVICE_CONFIG, we should refactor this code and add a
337
- // separate filter that reads GRPC_ARG_SERVICE_CONFIG and saves the parsed
338
- // config in the call_context.
339
- const grpc_arg* channel_arg =
340
- grpc_channel_args_find(args->channel_args, GRPC_ARG_SERVICE_CONFIG);
341
- const char* service_config_str = grpc_channel_arg_get_string(channel_arg);
342
- if (service_config_str != nullptr) {
343
- grpc_error* service_config_error = GRPC_ERROR_NONE;
344
- auto svc_cfg = grpc_core::ServiceConfig::Create(service_config_str,
345
- &service_config_error);
346
- if (service_config_error == GRPC_ERROR_NONE) {
347
- chand->svc_cfg = std::move(svc_cfg);
348
- } else {
349
- gpr_log(GPR_ERROR, "%s", grpc_error_string(service_config_error));
350
- }
351
- GRPC_ERROR_UNREF(service_config_error);
352
- }
353
323
  return GRPC_ERROR_NONE;
354
324
  }
355
325
 
@@ -390,6 +360,9 @@ static bool maybe_add_message_size_filter(grpc_channel_stack_builder* builder,
390
360
  void* /*arg*/) {
391
361
  const grpc_channel_args* channel_args =
392
362
  grpc_channel_stack_builder_get_channel_arguments(builder);
363
+ if (grpc_channel_args_want_minimal_stack(channel_args)) {
364
+ return true;
365
+ }
393
366
  bool enable = false;
394
367
  grpc_core::MessageSizeParsedConfig::message_size_limits lim =
395
368
  get_message_size_limits(channel_args);