grpc 1.30.0 → 1.31.1

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 (383) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +560 -619
  3. data/include/grpc/grpc_security.h +8 -0
  4. data/include/grpc/grpc_security_constants.h +3 -0
  5. data/include/grpc/impl/codegen/grpc_types.h +7 -5
  6. data/include/grpc/impl/codegen/port_platform.h +0 -32
  7. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
  8. data/src/core/ext/filters/client_channel/client_channel.cc +406 -261
  9. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  10. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  11. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +2 -0
  13. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
  15. data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +39 -23
  17. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
  18. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -4
  19. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +381 -72
  20. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
  22. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
  23. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
  24. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
  25. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
  26. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -48
  27. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  28. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +21 -18
  29. data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
  30. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
  31. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +33 -28
  32. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
  33. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  34. data/src/core/ext/filters/client_channel/subchannel.cc +1 -1
  35. data/src/core/ext/filters/client_channel/xds/xds_api.cc +327 -123
  36. data/src/core/ext/filters/client_channel/xds/xds_api.h +72 -7
  37. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +12 -23
  38. data/src/core/ext/filters/client_channel/xds/xds_client.cc +112 -33
  39. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +10 -10
  40. data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
  41. data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
  42. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
  43. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  44. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
  45. data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
  46. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +383 -347
  47. data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
  48. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
  49. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
  50. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
  51. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +19 -4
  52. data/src/core/ext/transport/chttp2/transport/flow_control.cc +22 -27
  53. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  54. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  55. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  56. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  57. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  58. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
  59. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  60. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  61. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  62. data/src/core/ext/transport/chttp2/transport/internal.h +13 -0
  63. data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
  64. data/src/core/ext/transport/chttp2/transport/writing.cc +9 -14
  65. data/src/core/ext/transport/inproc/inproc_transport.cc +35 -15
  66. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  67. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  68. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -1
  69. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +80 -69
  70. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +24 -23
  71. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +66 -56
  72. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
  73. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +2 -2
  74. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +317 -311
  75. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
  76. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
  77. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
  78. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
  79. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +9 -8
  80. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +1 -1
  81. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +163 -169
  82. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
  83. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +4 -5
  84. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
  85. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +137 -117
  86. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
  87. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +105 -87
  88. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +12 -13
  89. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -1
  90. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
  91. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
  92. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -1
  93. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
  94. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
  95. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +49 -42
  96. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
  97. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
  98. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +81 -65
  99. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
  100. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +1 -1
  101. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
  102. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
  103. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
  104. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
  105. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
  106. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +7 -7
  107. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +648 -696
  108. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
  109. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
  110. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -1
  111. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
  112. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +234 -199
  113. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
  114. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +13 -13
  115. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
  116. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +20 -18
  117. data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
  118. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +18 -17
  119. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
  120. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
  121. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
  122. data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
  123. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
  124. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
  125. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  126. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  127. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  128. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  129. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +3 -3
  130. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
  131. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  132. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  133. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  134. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
  135. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  136. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  137. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  138. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  139. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  140. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  141. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  142. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  143. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  144. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  145. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  146. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  147. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
  148. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  149. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  150. data/src/core/ext/upb-generated/validate/validate.upb.h +536 -535
  151. data/src/core/lib/channel/channel_trace.cc +2 -6
  152. data/src/core/lib/channel/channelz.cc +5 -15
  153. data/src/core/lib/gpr/log_linux.cc +6 -8
  154. data/src/core/lib/gpr/log_posix.cc +6 -8
  155. data/src/core/lib/gpr/string.cc +10 -9
  156. data/src/core/lib/gpr/string.h +4 -2
  157. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  158. data/src/core/lib/http/httpcli.cc +13 -10
  159. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  160. data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
  161. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  162. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  163. data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
  164. data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
  165. data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
  166. data/src/core/lib/iomgr/ev_posix.cc +2 -0
  167. data/src/core/lib/iomgr/iomgr.cc +10 -0
  168. data/src/core/lib/iomgr/iomgr.h +10 -0
  169. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  170. data/src/core/lib/iomgr/port.h +1 -21
  171. data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
  172. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
  173. data/src/core/lib/iomgr/resource_quota.cc +34 -31
  174. data/src/core/lib/iomgr/sockaddr_utils.cc +7 -5
  175. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  176. data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
  177. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  178. data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
  179. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  180. data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
  181. data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
  182. data/src/core/lib/iomgr/tcp_custom.cc +1 -1
  183. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  184. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  185. data/src/core/lib/iomgr/tcp_server.h +7 -5
  186. data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
  187. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
  188. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  189. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
  190. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
  191. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  192. data/src/core/lib/iomgr/timer_generic.cc +13 -12
  193. data/src/core/lib/iomgr/udp_server.cc +24 -23
  194. data/src/core/lib/iomgr/udp_server.h +5 -2
  195. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  196. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  197. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  198. data/src/core/lib/json/json_reader.cc +20 -21
  199. data/src/core/lib/security/credentials/credentials.h +5 -3
  200. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  201. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -9
  202. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  203. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
  204. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
  205. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  206. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  207. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
  208. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +10 -10
  209. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  210. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  211. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
  212. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
  213. data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
  214. data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
  215. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
  216. data/src/core/lib/security/transport/auth_filters.h +0 -5
  217. data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
  218. data/src/core/lib/security/util/json_util.cc +12 -13
  219. data/src/core/lib/slice/slice.cc +38 -1
  220. data/src/core/lib/slice/slice_internal.h +1 -0
  221. data/src/core/lib/surface/call.cc +40 -41
  222. data/src/core/lib/surface/completion_queue.cc +271 -14
  223. data/src/core/lib/surface/completion_queue.h +8 -0
  224. data/src/core/lib/surface/init.cc +2 -0
  225. data/src/core/lib/surface/server.cc +565 -632
  226. data/src/core/lib/surface/server.h +34 -12
  227. data/src/core/lib/surface/version.cc +2 -2
  228. data/src/core/lib/transport/transport.h +6 -0
  229. data/src/core/lib/uri/uri_parser.cc +8 -15
  230. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  231. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
  232. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -0
  233. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  234. data/src/core/tsi/ssl_transport_security.cc +108 -11
  235. data/src/core/tsi/ssl_transport_security.h +14 -2
  236. data/src/core/tsi/transport_security_interface.h +5 -0
  237. data/src/ruby/bin/math_services_pb.rb +4 -4
  238. data/src/ruby/ext/grpc/extconf.rb +5 -2
  239. data/src/ruby/ext/grpc/rb_call.c +3 -2
  240. data/src/ruby/ext/grpc/rb_call.h +4 -0
  241. data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
  242. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  243. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  244. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  245. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  246. data/src/ruby/lib/grpc/version.rb +1 -1
  247. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  248. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
  249. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
  250. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  251. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +2 -0
  252. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  253. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  254. data/src/ruby/spec/pb/codegen/package_option_spec.rb +25 -1
  255. data/src/ruby/spec/support/services.rb +10 -4
  256. data/src/ruby/spec/user_agent_spec.rb +74 -0
  257. data/third_party/boringssl-with-bazel/err_data.c +89 -83
  258. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  259. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  260. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  261. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  262. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  263. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  264. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  265. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  266. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  267. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  268. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  269. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  270. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  271. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  272. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  282. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
  283. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  284. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  285. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
  286. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
  287. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
  288. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  289. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  290. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  291. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  292. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  293. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  294. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
  295. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  296. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
  297. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  298. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  299. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  300. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  301. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  302. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  303. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  304. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  305. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
  306. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  307. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +33 -16
  308. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
  309. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +789 -715
  310. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
  311. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
  312. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
  313. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
  314. data/third_party/boringssl-with-bazel/src/ssl/internal.h +17 -14
  315. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
  316. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +28 -0
  317. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
  318. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  319. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
  320. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
  321. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +12 -9
  322. data/third_party/re2/re2/bitmap256.h +117 -0
  323. data/third_party/re2/re2/bitstate.cc +385 -0
  324. data/third_party/re2/re2/compile.cc +1279 -0
  325. data/third_party/re2/re2/dfa.cc +2130 -0
  326. data/third_party/re2/re2/filtered_re2.cc +121 -0
  327. data/third_party/re2/re2/filtered_re2.h +109 -0
  328. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  329. data/third_party/re2/re2/nfa.cc +713 -0
  330. data/third_party/re2/re2/onepass.cc +623 -0
  331. data/third_party/re2/re2/parse.cc +2464 -0
  332. data/third_party/re2/re2/perl_groups.cc +119 -0
  333. data/third_party/re2/re2/pod_array.h +55 -0
  334. data/third_party/re2/re2/prefilter.cc +710 -0
  335. data/third_party/re2/re2/prefilter.h +108 -0
  336. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  337. data/third_party/re2/re2/prefilter_tree.h +139 -0
  338. data/third_party/re2/re2/prog.cc +988 -0
  339. data/third_party/re2/re2/prog.h +436 -0
  340. data/third_party/re2/re2/re2.cc +1362 -0
  341. data/third_party/re2/re2/re2.h +1002 -0
  342. data/third_party/re2/re2/regexp.cc +980 -0
  343. data/third_party/re2/re2/regexp.h +659 -0
  344. data/third_party/re2/re2/set.cc +154 -0
  345. data/third_party/re2/re2/set.h +80 -0
  346. data/third_party/re2/re2/simplify.cc +657 -0
  347. data/third_party/re2/re2/sparse_array.h +392 -0
  348. data/third_party/re2/re2/sparse_set.h +264 -0
  349. data/third_party/re2/re2/stringpiece.cc +65 -0
  350. data/third_party/re2/re2/stringpiece.h +210 -0
  351. data/third_party/re2/re2/tostring.cc +351 -0
  352. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  353. data/third_party/re2/re2/unicode_casefold.h +78 -0
  354. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  355. data/third_party/re2/re2/unicode_groups.h +67 -0
  356. data/third_party/re2/re2/walker-inl.h +246 -0
  357. data/third_party/re2/util/benchmark.h +156 -0
  358. data/third_party/re2/util/flags.h +26 -0
  359. data/third_party/re2/util/logging.h +109 -0
  360. data/third_party/re2/util/malloc_counter.h +19 -0
  361. data/third_party/re2/util/mix.h +41 -0
  362. data/third_party/re2/util/mutex.h +148 -0
  363. data/third_party/re2/util/pcre.cc +1025 -0
  364. data/third_party/re2/util/pcre.h +681 -0
  365. data/third_party/re2/util/rune.cc +260 -0
  366. data/third_party/re2/util/strutil.cc +149 -0
  367. data/third_party/re2/util/strutil.h +21 -0
  368. data/third_party/re2/util/test.h +50 -0
  369. data/third_party/re2/util/utf.h +44 -0
  370. data/third_party/re2/util/util.h +42 -0
  371. data/third_party/upb/upb/decode.c +467 -504
  372. data/third_party/upb/upb/encode.c +163 -121
  373. data/third_party/upb/upb/msg.c +130 -64
  374. data/third_party/upb/upb/msg.h +418 -14
  375. data/third_party/upb/upb/port_def.inc +35 -6
  376. data/third_party/upb/upb/port_undef.inc +8 -1
  377. data/third_party/upb/upb/table.c +53 -75
  378. data/third_party/upb/upb/table.int.h +11 -43
  379. data/third_party/upb/upb/upb.c +148 -124
  380. data/third_party/upb/upb/upb.h +65 -147
  381. data/third_party/upb/upb/upb.hpp +86 -0
  382. metadata +90 -30
  383. data/third_party/upb/upb/generated_util.h +0 -105
@@ -38,7 +38,8 @@ static optional_filter compress_filter = {
38
38
  &grpc_message_compress_filter, GRPC_ARG_ENABLE_PER_MESSAGE_COMPRESSION};
39
39
 
40
40
  static optional_filter decompress_filter = {
41
- &grpc_message_decompress_filter, GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION};
41
+ &grpc_core::MessageDecompressFilter,
42
+ GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION};
42
43
 
43
44
  static bool is_building_http_like_transport(
44
45
  grpc_channel_stack_builder* builder) {
@@ -18,16 +18,20 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
+ #include "src/core/ext/filters/http/message_compress/message_decompress_filter.h"
22
+
21
23
  #include <assert.h>
22
24
  #include <string.h>
23
25
 
26
+ #include "absl/strings/str_cat.h"
27
+
24
28
  #include <grpc/compression.h>
25
29
  #include <grpc/slice_buffer.h>
26
30
  #include <grpc/support/alloc.h>
27
31
  #include <grpc/support/log.h>
28
- #include <grpc/support/string_util.h>
29
32
 
30
- #include "src/core/ext/filters/http/message_compress/message_decompress_filter.h"
33
+ #include "absl/strings/str_format.h"
34
+ #include "src/core/ext/filters/message_size/message_size_filter.h"
31
35
  #include "src/core/lib/channel/channel_args.h"
32
36
  #include "src/core/lib/compression/algorithm_metadata.h"
33
37
  #include "src/core/lib/compression/compression_args.h"
@@ -37,14 +41,25 @@
37
41
  #include "src/core/lib/slice/slice_internal.h"
38
42
  #include "src/core/lib/slice/slice_string_helpers.h"
39
43
 
44
+ namespace grpc_core {
40
45
  namespace {
41
46
 
42
- class ChannelData {};
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
+ };
43
57
 
44
58
  class CallData {
45
59
  public:
46
- explicit CallData(const grpc_call_element_args& args)
47
- : call_combiner_(args.call_combiner) {
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()) {
48
63
  // Initialize state for recv_initial_metadata_ready callback
49
64
  GRPC_CLOSURE_INIT(&on_recv_initial_metadata_ready_,
50
65
  OnRecvInitialMetadataReady, this,
@@ -59,6 +74,13 @@ class CallData {
59
74
  GRPC_CLOSURE_INIT(&on_recv_trailing_metadata_ready_,
60
75
  OnRecvTrailingMetadataReady, this,
61
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
+ }
62
84
  }
63
85
 
64
86
  ~CallData() { grpc_slice_buffer_destroy_internal(&recv_slices_); }
@@ -82,7 +104,7 @@ class CallData {
82
104
  void MaybeResumeOnRecvTrailingMetadataReady();
83
105
  static void OnRecvTrailingMetadataReady(void* arg, grpc_error* error);
84
106
 
85
- grpc_core::CallCombiner* call_combiner_;
107
+ CallCombiner* call_combiner_;
86
108
  // Overall error for the call
87
109
  grpc_error* error_ = GRPC_ERROR_NONE;
88
110
  // Fields for handling recv_initial_metadata_ready callback
@@ -91,17 +113,18 @@ class CallData {
91
113
  grpc_metadata_batch* recv_initial_metadata_ = nullptr;
92
114
  // Fields for handling recv_message_ready callback
93
115
  bool seen_recv_message_ready_ = false;
116
+ int max_recv_message_length_;
94
117
  grpc_message_compression_algorithm algorithm_ = GRPC_MESSAGE_COMPRESS_NONE;
95
118
  grpc_closure on_recv_message_ready_;
96
119
  grpc_closure* original_recv_message_ready_ = nullptr;
97
120
  grpc_closure on_recv_message_next_done_;
98
- grpc_core::OrphanablePtr<grpc_core::ByteStream>* recv_message_ = nullptr;
121
+ OrphanablePtr<ByteStream>* recv_message_ = nullptr;
99
122
  // recv_slices_ holds the slices read from the original recv_message stream.
100
123
  // It is initialized during construction and reset when a new stream is
101
124
  // created using it.
102
125
  grpc_slice_buffer recv_slices_;
103
- std::aligned_storage<sizeof(grpc_core::SliceBufferByteStream),
104
- alignof(grpc_core::SliceBufferByteStream)>::type
126
+ std::aligned_storage<sizeof(SliceBufferByteStream),
127
+ alignof(SliceBufferByteStream)>::type
105
128
  recv_replacement_stream_;
106
129
  // Fields for handling recv_trailing_metadata_ready callback
107
130
  bool seen_recv_trailing_metadata_ready_ = false;
@@ -139,7 +162,7 @@ void CallData::OnRecvInitialMetadataReady(void* arg, grpc_error* error) {
139
162
  calld->MaybeResumeOnRecvTrailingMetadataReady();
140
163
  grpc_closure* closure = calld->original_recv_initial_metadata_ready_;
141
164
  calld->original_recv_initial_metadata_ready_ = nullptr;
142
- grpc_core::Closure::Run(DEBUG_LOCATION, closure, GRPC_ERROR_REF(error));
165
+ Closure::Run(DEBUG_LOCATION, closure, GRPC_ERROR_REF(error));
143
166
  }
144
167
 
145
168
  void CallData::MaybeResumeOnRecvMessageReady() {
@@ -170,6 +193,19 @@ void CallData::OnRecvMessageReady(void* arg, grpc_error* error) {
170
193
  0) {
171
194
  return calld->ContinueRecvMessageReadyCallback(GRPC_ERROR_NONE);
172
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
+ }
173
209
  grpc_slice_buffer_destroy_internal(&calld->recv_slices_);
174
210
  grpc_slice_buffer_init(&calld->recv_slices_);
175
211
  return calld->ContinueReadingRecvMessage();
@@ -223,14 +259,12 @@ void CallData::FinishRecvMessage() {
223
259
  grpc_slice_buffer_init(&decompressed_slices);
224
260
  if (grpc_msg_decompress(algorithm_, &recv_slices_, &decompressed_slices) ==
225
261
  0) {
226
- char* msg;
227
- gpr_asprintf(
228
- &msg,
229
- "Unexpected error decompressing data for algorithm with enum value %d",
230
- algorithm_);
231
262
  GPR_DEBUG_ASSERT(error_ == GRPC_ERROR_NONE);
232
- error_ = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
233
- gpr_free(msg);
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());
234
268
  grpc_slice_buffer_destroy_internal(&decompressed_slices);
235
269
  } else {
236
270
  uint32_t recv_flags =
@@ -241,9 +275,9 @@ void CallData::FinishRecvMessage() {
241
275
  // Initializing recv_replacement_stream_ with decompressed_slices removes
242
276
  // all the slices from decompressed_slices leaving it empty.
243
277
  new (&recv_replacement_stream_)
244
- grpc_core::SliceBufferByteStream(&decompressed_slices, recv_flags);
245
- recv_message_->reset(reinterpret_cast<grpc_core::SliceBufferByteStream*>(
246
- &recv_replacement_stream_));
278
+ SliceBufferByteStream(&decompressed_slices, recv_flags);
279
+ recv_message_->reset(
280
+ reinterpret_cast<SliceBufferByteStream*>(&recv_replacement_stream_));
247
281
  recv_message_ = nullptr;
248
282
  }
249
283
  ContinueRecvMessageReadyCallback(GRPC_ERROR_REF(error_));
@@ -254,7 +288,7 @@ void CallData::ContinueRecvMessageReadyCallback(grpc_error* error) {
254
288
  // The surface will clean up the receiving stream if there is an error.
255
289
  grpc_closure* closure = original_recv_message_ready_;
256
290
  original_recv_message_ready_ = nullptr;
257
- grpc_core::Closure::Run(DEBUG_LOCATION, closure, error);
291
+ Closure::Run(DEBUG_LOCATION, closure, error);
258
292
  }
259
293
 
260
294
  void CallData::MaybeResumeOnRecvTrailingMetadataReady() {
@@ -283,7 +317,7 @@ void CallData::OnRecvTrailingMetadataReady(void* arg, grpc_error* error) {
283
317
  calld->error_ = GRPC_ERROR_NONE;
284
318
  grpc_closure* closure = calld->original_recv_trailing_metadata_ready_;
285
319
  calld->original_recv_trailing_metadata_ready_ = nullptr;
286
- grpc_core::Closure::Run(DEBUG_LOCATION, closure, error);
320
+ Closure::Run(DEBUG_LOCATION, closure, error);
287
321
  }
288
322
 
289
323
  void CallData::DecompressStartTransportStreamOpBatch(
@@ -322,37 +356,44 @@ void DecompressStartTransportStreamOpBatch(
322
356
  calld->DecompressStartTransportStreamOpBatch(elem, batch);
323
357
  }
324
358
 
325
- static grpc_error* DecompressInitCallElem(grpc_call_element* elem,
326
- const grpc_call_element_args* args) {
327
- new (elem->call_data) CallData(*args);
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);
328
363
  return GRPC_ERROR_NONE;
329
364
  }
330
365
 
331
- static void DecompressDestroyCallElem(
332
- grpc_call_element* elem, const grpc_call_final_info* /*final_info*/,
333
- grpc_closure* /*ignored*/) {
366
+ void DecompressDestroyCallElem(grpc_call_element* elem,
367
+ const grpc_call_final_info* /*final_info*/,
368
+ grpc_closure* /*ignored*/) {
334
369
  CallData* calld = static_cast<CallData*>(elem->call_data);
335
370
  calld->~CallData();
336
371
  }
337
372
 
338
- static grpc_error* DecompressInitChannelElem(
339
- grpc_channel_element* /*elem*/, grpc_channel_element_args* /*args*/) {
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);
340
377
  return GRPC_ERROR_NONE;
341
378
  }
342
379
 
343
- void DecompressDestroyChannelElem(grpc_channel_element* /*elem*/) {}
380
+ void DecompressDestroyChannelElem(grpc_channel_element* elem) {
381
+ ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
382
+ chand->~ChannelData();
383
+ }
344
384
 
345
385
  } // namespace
346
386
 
347
- const grpc_channel_filter grpc_message_decompress_filter = {
387
+ const grpc_channel_filter MessageDecompressFilter = {
348
388
  DecompressStartTransportStreamOpBatch,
349
389
  grpc_channel_next_op,
350
390
  sizeof(CallData),
351
391
  DecompressInitCallElem,
352
392
  grpc_call_stack_ignore_set_pollset_or_pollset_set,
353
393
  DecompressDestroyCallElem,
354
- 0, // sizeof(ChannelData)
394
+ sizeof(ChannelData),
355
395
  DecompressInitChannelElem,
356
396
  DecompressDestroyChannelElem,
357
397
  grpc_channel_next_get_info,
358
398
  "message_decompress"};
399
+ } // namespace grpc_core
@@ -23,7 +23,9 @@
23
23
 
24
24
  #include "src/core/lib/channel/channel_stack.h"
25
25
 
26
- extern const grpc_channel_filter grpc_message_decompress_filter;
26
+ namespace grpc_core {
27
+ extern const grpc_channel_filter MessageDecompressFilter;
28
+ } // namespace grpc_core
27
29
 
28
30
  #endif /* GRPC_CORE_EXT_FILTERS_HTTP_MESSAGE_COMPRESS_MESSAGE_DECOMPRESS_FILTER_H \
29
31
  */
@@ -21,10 +21,11 @@
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"
30
31
  #include "src/core/ext/filters/client_channel/service_config_call_data.h"
@@ -45,6 +46,25 @@ namespace {
45
46
  size_t g_message_size_parser_index;
46
47
  } // namespace
47
48
 
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
+
48
68
  std::unique_ptr<ServiceConfigParser::ParsedConfig>
49
69
  MessageSizeParser::ParsePerMethodParams(const Json& json, grpc_error** error) {
50
70
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
@@ -97,12 +117,26 @@ void MessageSizeParser::Register() {
97
117
  }
98
118
 
99
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
+
100
135
  } // namespace grpc_core
101
136
 
102
137
  namespace {
103
138
  struct channel_data {
104
139
  grpc_core::MessageSizeParsedConfig::message_size_limits limits;
105
- grpc_core::RefCountedPtr<grpc_core::ServiceConfig> svc_cfg;
106
140
  };
107
141
 
108
142
  struct call_data {
@@ -118,24 +152,8 @@ struct call_data {
118
152
  // Note: Per-method config is only available on the client, so we
119
153
  // apply the max request size to the send limit and the max response
120
154
  // size to the receive limit.
121
- const grpc_core::MessageSizeParsedConfig* limits = nullptr;
122
- grpc_core::ServiceConfigCallData* svc_cfg_call_data = nullptr;
123
- if (args.context != nullptr) {
124
- svc_cfg_call_data = static_cast<grpc_core::ServiceConfigCallData*>(
125
- args.context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
126
- }
127
- if (svc_cfg_call_data != nullptr) {
128
- limits = static_cast<const grpc_core::MessageSizeParsedConfig*>(
129
- svc_cfg_call_data->GetMethodParsedConfig(
130
- grpc_core::MessageSizeParser::ParserIndex()));
131
- } else if (chand.svc_cfg != nullptr) {
132
- const auto* objs_vector =
133
- chand.svc_cfg->GetMethodParsedConfigVector(args.path);
134
- if (objs_vector != nullptr) {
135
- limits = static_cast<const grpc_core::MessageSizeParsedConfig*>(
136
- (*objs_vector)[grpc_core::MessageSizeParser::ParserIndex()].get());
137
- }
138
- }
155
+ const grpc_core::MessageSizeParsedConfig* limits =
156
+ grpc_core::MessageSizeParsedConfig::GetFromCallContext(args.context);
139
157
  if (limits != nullptr) {
140
158
  if (limits->limits().max_send_size >= 0 &&
141
159
  (limits->limits().max_send_size < this->limits.max_send_size ||
@@ -181,17 +199,16 @@ static void recv_message_ready(void* user_data, grpc_error* error) {
181
199
  if (*calld->recv_message != nullptr && calld->limits.max_recv_size >= 0 &&
182
200
  (*calld->recv_message)->length() >
183
201
  static_cast<size_t>(calld->limits.max_recv_size)) {
184
- char* message_string;
185
- gpr_asprintf(&message_string,
186
- "Received message larger than max (%u vs. %d)",
187
- (*calld->recv_message)->length(), calld->limits.max_recv_size);
188
202
  grpc_error* new_error = grpc_error_set_int(
189
- 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()),
190
208
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED);
191
209
  error = grpc_error_add_child(GRPC_ERROR_REF(error), new_error);
192
210
  GRPC_ERROR_UNREF(calld->error);
193
211
  calld->error = GRPC_ERROR_REF(error);
194
- gpr_free(message_string);
195
212
  } else {
196
213
  GRPC_ERROR_REF(error);
197
214
  }
@@ -241,17 +258,17 @@ static void message_size_start_transport_stream_op_batch(
241
258
  if (op->send_message && calld->limits.max_send_size >= 0 &&
242
259
  op->payload->send_message.send_message->length() >
243
260
  static_cast<size_t>(calld->limits.max_send_size)) {
244
- char* message_string;
245
- gpr_asprintf(&message_string, "Sent message larger than max (%u vs. %d)",
246
- op->payload->send_message.send_message->length(),
247
- calld->limits.max_send_size);
248
261
  grpc_transport_stream_op_batch_finish_with_failure(
249
262
  op,
250
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_COPIED_STRING(message_string),
251
- GRPC_ERROR_INT_GRPC_STATUS,
252
- 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),
253
271
  calld->call_combiner);
254
- gpr_free(message_string);
255
272
  return;
256
273
  }
257
274
  // Inject callback for receiving a message.
@@ -288,35 +305,11 @@ static void message_size_destroy_call_elem(
288
305
  calld->~call_data();
289
306
  }
290
307
 
291
- static int default_size(const grpc_channel_args* args,
292
- int without_minimal_stack) {
293
- if (grpc_channel_args_want_minimal_stack(args)) {
294
- return -1;
295
- }
296
- return without_minimal_stack;
297
- }
298
-
299
308
  grpc_core::MessageSizeParsedConfig::message_size_limits get_message_size_limits(
300
309
  const grpc_channel_args* channel_args) {
301
310
  grpc_core::MessageSizeParsedConfig::message_size_limits lim;
302
- lim.max_send_size =
303
- default_size(channel_args, GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH);
304
- lim.max_recv_size =
305
- default_size(channel_args, GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH);
306
- for (size_t i = 0; i < channel_args->num_args; ++i) {
307
- if (strcmp(channel_args->args[i].key, GRPC_ARG_MAX_SEND_MESSAGE_LENGTH) ==
308
- 0) {
309
- const grpc_integer_options options = {lim.max_send_size, -1, INT_MAX};
310
- lim.max_send_size =
311
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
312
- }
313
- if (strcmp(channel_args->args[i].key,
314
- GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH) == 0) {
315
- const grpc_integer_options options = {lim.max_recv_size, -1, INT_MAX};
316
- lim.max_recv_size =
317
- grpc_channel_arg_get_integer(&channel_args->args[i], options);
318
- }
319
- }
311
+ lim.max_send_size = grpc_core::GetMaxSendSizeFromChannelArgs(channel_args);
312
+ lim.max_recv_size = grpc_core::GetMaxRecvSizeFromChannelArgs(channel_args);
320
313
  return lim;
321
314
  }
322
315
 
@@ -327,26 +320,6 @@ static grpc_error* message_size_init_channel_elem(
327
320
  channel_data* chand = static_cast<channel_data*>(elem->channel_data);
328
321
  new (chand) channel_data();
329
322
  chand->limits = get_message_size_limits(args->channel_args);
330
- // TODO(yashykt): We only need to read GRPC_ARG_SERVICE_CONFIG in the case of
331
- // direct channels. (Service config is otherwise stored in the call_context by
332
- // client_channel filter.) If we ever need a second filter that also needs to
333
- // parse GRPC_ARG_SERVICE_CONFIG, we should refactor this code and add a
334
- // separate filter that reads GRPC_ARG_SERVICE_CONFIG and saves the parsed
335
- // config in the call_context.
336
- const grpc_arg* channel_arg =
337
- grpc_channel_args_find(args->channel_args, GRPC_ARG_SERVICE_CONFIG);
338
- const char* service_config_str = grpc_channel_arg_get_string(channel_arg);
339
- if (service_config_str != nullptr) {
340
- grpc_error* service_config_error = GRPC_ERROR_NONE;
341
- auto svc_cfg = grpc_core::ServiceConfig::Create(service_config_str,
342
- &service_config_error);
343
- if (service_config_error == GRPC_ERROR_NONE) {
344
- chand->svc_cfg = std::move(svc_cfg);
345
- } else {
346
- gpr_log(GPR_ERROR, "%s", grpc_error_string(service_config_error));
347
- }
348
- GRPC_ERROR_UNREF(service_config_error);
349
- }
350
323
  return GRPC_ERROR_NONE;
351
324
  }
352
325
 
@@ -387,6 +360,9 @@ static bool maybe_add_message_size_filter(grpc_channel_stack_builder* builder,
387
360
  void* /*arg*/) {
388
361
  const grpc_channel_args* channel_args =
389
362
  grpc_channel_stack_builder_get_channel_arguments(builder);
363
+ if (grpc_channel_args_want_minimal_stack(channel_args)) {
364
+ return true;
365
+ }
390
366
  bool enable = false;
391
367
  grpc_core::MessageSizeParsedConfig::message_size_limits lim =
392
368
  get_message_size_limits(channel_args);