grpc 1.42.0 → 1.43.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 (739) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +85 -34
  3. data/include/grpc/event_engine/event_engine.h +37 -13
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
  5. data/include/grpc/event_engine/memory_allocator.h +27 -11
  6. data/include/grpc/event_engine/memory_request.h +57 -0
  7. data/include/grpc/grpc_security.h +276 -145
  8. data/include/grpc/grpc_security_constants.h +1 -14
  9. data/include/grpc/impl/codegen/port_platform.h +7 -3
  10. data/src/core/ext/filters/client_channel/backend_metric.cc +6 -7
  11. data/src/core/ext/filters/client_channel/backend_metric.h +3 -2
  12. data/src/core/ext/filters/client_channel/client_channel.cc +81 -40
  13. data/src/core/ext/filters/client_channel/client_channel.h +5 -4
  14. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -2
  15. data/src/core/ext/filters/client_channel/dynamic_filters.cc +4 -4
  16. data/src/core/ext/filters/client_channel/health/health_check_client.h +1 -1
  17. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +12 -14
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1 -2
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -2
  21. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
  22. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +27 -80
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +82 -34
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +47 -91
  25. data/src/core/ext/filters/client_channel/lb_policy.h +75 -59
  26. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +3 -3
  27. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -2
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +8 -12
  29. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +3 -3
  30. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +6 -12
  31. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +222 -294
  32. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -7
  33. data/src/core/ext/filters/client_channel/resolver_registry.h +1 -2
  34. data/src/core/ext/filters/client_channel/subchannel.cc +4 -4
  35. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  36. data/src/core/ext/filters/http/client/http_client_filter.cc +14 -30
  37. data/src/core/ext/filters/http/http_filters_plugin.cc +3 -5
  38. data/src/core/ext/filters/http/server/http_server_filter.cc +11 -28
  39. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +67 -0
  40. data/src/core/ext/filters/server_config_selector/server_config_selector.h +70 -0
  41. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +265 -0
  42. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +32 -0
  43. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -20
  44. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -2
  45. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +8 -5
  46. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +11 -14
  47. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +6 -3
  48. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +54 -79
  49. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -3
  50. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +9 -13
  51. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +6 -6
  52. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +53 -62
  53. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -2
  54. data/src/core/ext/transport/chttp2/transport/context_list.cc +2 -3
  55. data/src/core/ext/transport/chttp2/transport/context_list.h +2 -3
  56. data/src/core/ext/transport/chttp2/transport/flow_control.cc +8 -8
  57. data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -2
  58. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +83 -19
  59. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +33 -1
  60. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +66 -92
  61. data/src/core/ext/transport/chttp2/transport/internal.h +8 -4
  62. data/src/core/ext/transport/inproc/inproc_transport.cc +16 -7
  63. data/src/core/ext/transport/inproc/inproc_transport.h +1 -1
  64. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +197 -165
  65. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +2 -0
  66. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +41 -0
  67. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +18 -0
  68. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +26 -2
  69. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  70. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +107 -82
  71. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +2 -0
  72. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +188 -160
  73. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +2 -0
  74. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +35 -22
  75. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +2 -0
  76. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +253 -218
  77. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2 -0
  78. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +16 -5
  79. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +2 -0
  80. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +36 -25
  81. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +2 -0
  82. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +56 -39
  83. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +2 -0
  84. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +16 -5
  85. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +2 -0
  86. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +162 -128
  87. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +2 -0
  88. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +51 -36
  89. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +2 -0
  90. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +15 -4
  91. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +2 -0
  92. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +25 -13
  93. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +2 -0
  94. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +114 -90
  95. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +2 -0
  96. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +89 -71
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +2 -0
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +17 -6
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +2 -0
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +117 -93
  101. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +2 -0
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +13 -2
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +2 -0
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +21 -9
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +2 -0
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +18 -7
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +2 -0
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +22 -11
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +2 -0
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +17 -6
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +2 -0
  112. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +41 -27
  113. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +2 -0
  114. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +59 -43
  115. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +2 -0
  116. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +58 -43
  117. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +2 -0
  118. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +15 -4
  119. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +2 -0
  120. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +73 -57
  121. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +2 -0
  122. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +81 -64
  123. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +2 -0
  124. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +25 -14
  125. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +2 -0
  126. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +19 -7
  127. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +2 -0
  128. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +63 -45
  129. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +2 -0
  130. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +66 -47
  131. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +2 -0
  132. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +93 -75
  133. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +2 -0
  134. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +41 -28
  135. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +2 -0
  136. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +503 -440
  137. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2 -0
  138. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +26 -13
  139. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +2 -0
  140. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +21 -9
  141. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +2 -0
  142. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +13 -2
  143. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +2 -0
  144. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +35 -20
  145. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +2 -0
  146. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +44 -31
  147. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +2 -0
  148. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +22 -11
  149. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +2 -0
  150. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +210 -181
  151. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2 -0
  152. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -0
  153. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +5 -3
  154. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +64 -48
  155. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +2 -0
  156. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +33 -20
  157. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +2 -0
  158. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +81 -65
  159. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +2 -0
  160. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +12 -1
  161. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +2 -0
  162. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +12 -1
  163. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +2 -0
  164. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +75 -58
  165. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +2 -0
  166. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +12 -1
  167. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +2 -0
  168. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +12 -1
  169. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +2 -0
  170. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +25 -13
  171. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +2 -0
  172. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +12 -1
  173. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +2 -0
  174. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +12 -1
  175. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +2 -0
  176. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +61 -46
  177. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +2 -0
  178. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +26 -12
  179. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +2 -0
  180. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +22 -10
  181. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +2 -0
  182. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +17 -6
  183. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +2 -0
  184. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +16 -5
  185. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +2 -0
  186. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +15 -4
  187. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +2 -0
  188. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +27 -14
  189. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +2 -0
  190. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +25 -13
  191. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +2 -0
  192. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +20 -8
  193. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +2 -0
  194. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +30 -17
  195. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +2 -0
  196. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +38 -21
  197. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +2 -0
  198. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +41 -26
  199. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +2 -0
  200. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -0
  201. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +2 -0
  202. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +17 -5
  203. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +2 -0
  204. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +22 -9
  205. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +2 -0
  206. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +15 -4
  207. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +2 -0
  208. data/src/core/ext/upb-generated/google/api/annotations.upb.c +20 -0
  209. data/src/core/ext/upb-generated/google/api/annotations.upb.h +7 -0
  210. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +116 -93
  211. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +2 -0
  212. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.c +102 -0
  213. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.h +306 -0
  214. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.c +56 -0
  215. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.h +135 -0
  216. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +122 -98
  217. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +2 -0
  218. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.c +115 -0
  219. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.h +371 -0
  220. data/src/core/ext/upb-generated/google/api/http.upb.c +35 -22
  221. data/src/core/ext/upb-generated/google/api/http.upb.h +2 -0
  222. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +14 -3
  223. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +2 -0
  224. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +247 -210
  225. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2 -0
  226. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +14 -3
  227. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +2 -0
  228. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +12 -1
  229. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +2 -0
  230. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +37 -23
  231. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +2 -0
  232. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +14 -3
  233. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +2 -0
  234. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +37 -18
  235. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +2 -0
  236. data/src/core/ext/upb-generated/google/rpc/status.upb.c +17 -6
  237. data/src/core/ext/upb-generated/google/rpc/status.upb.h +2 -0
  238. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +26 -14
  239. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +2 -0
  240. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +105 -83
  241. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +2 -0
  242. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +20 -8
  243. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +2 -0
  244. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +16 -4
  245. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +2 -0
  246. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +65 -47
  247. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +34 -36
  248. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +26 -13
  249. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +2 -0
  250. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +67 -7
  251. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +27 -0
  252. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +27 -3
  253. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
  254. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +19 -0
  255. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +7 -0
  256. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +27 -3
  257. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -0
  258. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +26 -2
  259. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  260. data/src/core/ext/upb-generated/validate/validate.upb.c +320 -251
  261. data/src/core/ext/upb-generated/validate/validate.upb.h +20 -0
  262. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +54 -9
  263. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +17 -0
  264. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +13 -2
  265. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +2 -0
  266. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +24 -12
  267. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +2 -0
  268. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +19 -7
  269. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +2 -0
  270. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +18 -7
  271. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +2 -0
  272. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +27 -15
  273. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +2 -0
  274. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +18 -7
  275. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +2 -0
  276. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +28 -15
  277. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +2 -0
  278. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +16 -5
  279. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +2 -0
  280. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +2 -49
  281. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +2 -2
  282. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +2 -7
  283. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +2 -35
  284. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +2 -41
  285. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +2 -11
  286. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +2 -55
  287. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +2 -7
  288. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +2 -7
  289. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +2 -19
  290. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +2 -7
  291. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +2 -53
  292. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +2 -15
  293. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +2 -7
  294. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +2 -9
  295. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +2 -33
  296. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +2 -21
  297. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +2 -7
  298. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +2 -33
  299. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +2 -7
  300. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +2 -9
  301. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +2 -7
  302. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +2 -7
  303. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +2 -7
  304. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +2 -13
  305. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +2 -17
  306. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +2 -15
  307. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +2 -7
  308. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +2 -17
  309. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +2 -19
  310. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +2 -7
  311. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +2 -9
  312. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +2 -21
  313. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +2 -23
  314. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +2 -11
  315. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +2 -111
  316. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +2 -11
  317. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +2 -9
  318. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +2 -7
  319. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +2 -15
  320. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +2 -11
  321. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +2 -7
  322. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +2 -43
  323. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +2 -2
  324. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +2 -17
  325. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +2 -11
  326. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +2 -17
  327. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +2 -7
  328. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +2 -7
  329. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +2 -19
  330. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +2 -7
  331. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +2 -7
  332. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +2 -9
  333. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +2 -7
  334. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +2 -7
  335. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +2 -15
  336. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +2 -13
  337. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +2 -9
  338. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +2 -7
  339. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +2 -7
  340. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +2 -7
  341. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +2 -11
  342. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +2 -9
  343. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +2 -9
  344. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +2 -11
  345. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +2 -19
  346. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +2 -15
  347. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +2 -2
  348. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +2 -9
  349. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +2 -11
  350. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +2 -7
  351. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +2 -2
  352. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +2 -11
  353. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +2 -7
  354. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +2 -59
  355. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +2 -7
  356. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +2 -7
  357. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +2 -13
  358. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +2 -7
  359. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +2 -23
  360. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +2 -7
  361. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +2 -11
  362. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +2 -7
  363. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +2 -2
  364. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +2 -7
  365. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +2 -7
  366. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +2 -51
  367. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +2 -13
  368. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +2 -7
  369. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +2 -9
  370. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +2 -9
  371. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +2 -7
  372. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +2 -9
  373. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +2 -7
  374. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +2 -7
  375. data/src/core/ext/xds/certificate_provider_registry.cc +1 -1
  376. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  377. data/src/core/ext/xds/xds_api.cc +409 -304
  378. data/src/core/ext/xds/xds_api.h +3 -1
  379. data/src/core/ext/xds/xds_bootstrap.cc +6 -3
  380. data/src/core/ext/xds/xds_certificate_provider.h +1 -2
  381. data/src/core/ext/xds/xds_channel_stack_modifier.cc +3 -4
  382. data/src/core/ext/xds/xds_client.cc +395 -291
  383. data/src/core/ext/xds/xds_client.h +47 -38
  384. data/src/core/ext/xds/xds_routing.cc +247 -0
  385. data/src/core/ext/xds/xds_routing.h +98 -0
  386. data/src/core/ext/xds/xds_server_config_fetcher.cc +975 -261
  387. data/src/core/lib/avl/avl.h +389 -88
  388. data/src/core/lib/backoff/backoff.cc +2 -2
  389. data/src/core/lib/channel/channel_args.cc +17 -17
  390. data/src/core/lib/channel/channel_args.h +11 -10
  391. data/src/core/lib/channel/channel_args_preconditioning.cc +47 -0
  392. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  393. data/src/core/lib/channel/channel_stack_builder.cc +0 -2
  394. data/src/core/lib/channel/channel_trace.cc +6 -6
  395. data/src/core/lib/channel/channelz.cc +1 -1
  396. data/src/core/lib/compression/compression_args.cc +7 -5
  397. data/src/core/lib/compression/compression_args.h +6 -4
  398. data/src/core/lib/config/core_configuration.cc +3 -1
  399. data/src/core/lib/config/core_configuration.h +11 -0
  400. data/src/core/lib/debug/trace.h +2 -2
  401. data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -1
  402. data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
  403. data/src/core/lib/event_engine/event_engine.cc +0 -13
  404. data/src/core/lib/event_engine/event_engine_factory.cc +49 -0
  405. data/src/core/lib/event_engine/event_engine_factory.h +33 -0
  406. data/src/core/lib/event_engine/memory_allocator.cc +70 -0
  407. data/src/core/lib/gpr/tls.h +6 -0
  408. data/src/core/lib/gprpp/cpp_impl_of.h +45 -0
  409. data/src/core/lib/gprpp/global_config_env.cc +7 -7
  410. data/src/core/lib/gprpp/global_config_env.h +2 -2
  411. data/src/core/lib/gprpp/manual_constructor.h +2 -3
  412. data/src/core/lib/gprpp/orphanable.h +1 -1
  413. data/src/core/lib/gprpp/ref_counted.h +1 -1
  414. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
  415. data/src/core/lib/gprpp/status_helper.h +1 -1
  416. data/src/core/lib/gprpp/table.h +13 -1
  417. data/src/core/lib/http/httpcli.cc +30 -26
  418. data/src/core/lib/http/httpcli.h +14 -12
  419. data/src/core/lib/iomgr/buffer_list.cc +9 -9
  420. data/src/core/lib/iomgr/buffer_list.h +13 -13
  421. data/src/core/lib/iomgr/call_combiner.cc +2 -3
  422. data/src/core/lib/iomgr/endpoint.h +0 -1
  423. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -24
  424. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  425. data/src/core/lib/iomgr/endpoint_pair_posix.cc +9 -11
  426. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
  427. data/src/core/lib/iomgr/event_engine/endpoint.cc +2 -3
  428. data/src/core/lib/iomgr/event_engine/iomgr.cc +5 -25
  429. data/src/core/lib/iomgr/event_engine/resolver.cc +3 -2
  430. data/src/core/lib/iomgr/event_engine/tcp.cc +7 -5
  431. data/src/core/lib/iomgr/event_engine/timer.cc +4 -3
  432. data/src/core/lib/iomgr/exec_ctx.h +11 -11
  433. data/src/core/lib/iomgr/executor.cc +12 -15
  434. data/src/core/lib/iomgr/executor.h +1 -1
  435. data/src/core/lib/iomgr/tcp_client.cc +2 -4
  436. data/src/core/lib/iomgr/tcp_client.h +1 -3
  437. data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -9
  438. data/src/core/lib/iomgr/tcp_client_custom.cc +4 -10
  439. data/src/core/lib/iomgr/tcp_client_posix.cc +7 -23
  440. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  441. data/src/core/lib/iomgr/tcp_client_windows.cc +1 -10
  442. data/src/core/lib/iomgr/tcp_custom.cc +9 -36
  443. data/src/core/lib/iomgr/tcp_custom.h +0 -1
  444. data/src/core/lib/iomgr/tcp_posix.cc +28 -33
  445. data/src/core/lib/iomgr/tcp_posix.h +1 -3
  446. data/src/core/lib/iomgr/tcp_server.cc +4 -6
  447. data/src/core/lib/iomgr/tcp_server.h +6 -8
  448. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -15
  449. data/src/core/lib/iomgr/tcp_server_posix.cc +18 -22
  450. data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
  451. data/src/core/lib/iomgr/tcp_server_windows.cc +5 -12
  452. data/src/core/lib/iomgr/tcp_windows.cc +2 -7
  453. data/src/core/lib/iomgr/tcp_windows.h +1 -2
  454. data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
  455. data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
  456. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +1 -1
  457. data/src/core/lib/iomgr/work_serializer.cc +115 -44
  458. data/src/core/lib/iomgr/work_serializer.h +16 -4
  459. data/src/core/lib/json/json_reader.cc +83 -35
  460. data/src/core/lib/json/json_util.cc +1 -1
  461. data/src/core/lib/promise/activity.cc +115 -0
  462. data/src/core/lib/promise/activity.h +499 -0
  463. data/src/core/lib/promise/context.h +86 -0
  464. data/src/core/lib/promise/detail/basic_seq.h +407 -0
  465. data/src/core/lib/promise/detail/promise_factory.h +189 -0
  466. data/src/core/lib/promise/detail/promise_like.h +85 -0
  467. data/src/core/lib/promise/detail/status.h +44 -0
  468. data/src/core/lib/promise/detail/switch.h +1455 -0
  469. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  470. data/src/core/lib/promise/loop.h +108 -0
  471. data/src/core/lib/promise/map.h +88 -0
  472. data/src/core/lib/promise/poll.h +60 -0
  473. data/src/core/lib/promise/race.h +84 -0
  474. data/src/core/lib/promise/seq.h +71 -0
  475. data/src/core/lib/resource_quota/api.cc +108 -0
  476. data/src/core/lib/resource_quota/api.h +41 -0
  477. data/src/core/lib/resource_quota/memory_quota.cc +454 -0
  478. data/src/core/lib/resource_quota/memory_quota.h +421 -0
  479. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  480. data/src/core/lib/resource_quota/resource_quota.h +58 -0
  481. data/src/core/lib/resource_quota/thread_quota.cc +43 -0
  482. data/src/core/lib/resource_quota/thread_quota.h +57 -0
  483. data/src/core/lib/resource_quota/trace.cc +19 -0
  484. data/src/core/lib/resource_quota/trace.h +24 -0
  485. data/src/core/lib/security/authorization/evaluate_args.cc +13 -19
  486. data/src/core/lib/security/authorization/evaluate_args.h +2 -1
  487. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +3 -1
  488. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +11 -12
  489. data/src/core/lib/security/credentials/external/external_account_credentials.cc +9 -10
  490. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +3 -4
  491. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -6
  492. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
  493. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +4 -6
  494. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +18 -22
  495. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +11 -12
  496. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -8
  497. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +201 -0
  498. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +106 -0
  499. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +11 -90
  500. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +19 -82
  501. data/src/core/lib/security/credentials/tls/tls_credentials.cc +21 -10
  502. data/src/core/lib/security/credentials/xds/xds_credentials.cc +28 -33
  503. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +3 -3
  504. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +2 -2
  505. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +3 -4
  506. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  507. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +7 -7
  508. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -2
  509. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -1
  510. data/src/core/lib/security/security_connector/ssl_utils.cc +10 -2
  511. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  512. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +344 -195
  513. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +64 -41
  514. data/src/core/lib/security/transport/security_handshaker.cc +2 -2
  515. data/src/core/lib/slice/percent_encoding.cc +30 -86
  516. data/src/core/lib/slice/percent_encoding.h +5 -11
  517. data/src/core/lib/slice/slice.cc +7 -7
  518. data/src/core/lib/slice/slice.h +341 -0
  519. data/src/core/lib/slice/slice_buffer.cc +4 -0
  520. data/src/core/lib/slice/slice_intern.cc +1 -1
  521. data/src/core/lib/slice/slice_refcount.h +5 -1
  522. data/src/core/lib/slice/slice_refcount_base.h +19 -11
  523. data/src/core/lib/slice/static_slice.cc +331 -483
  524. data/src/core/lib/slice/static_slice.h +101 -132
  525. data/src/core/lib/surface/builtins.cc +1 -1
  526. data/src/core/lib/surface/call.cc +85 -59
  527. data/src/core/lib/surface/channel.cc +4 -29
  528. data/src/core/lib/surface/channel.h +2 -12
  529. data/src/core/lib/surface/completion_queue.cc +2 -2
  530. data/src/core/lib/surface/init.cc +0 -1
  531. data/src/core/lib/surface/lame_client.cc +24 -17
  532. data/src/core/lib/surface/server.cc +22 -22
  533. data/src/core/lib/surface/server.h +8 -9
  534. data/src/core/lib/surface/validate_metadata.cc +2 -2
  535. data/src/core/lib/surface/version.cc +2 -2
  536. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  537. data/src/core/lib/transport/byte_stream.cc +4 -0
  538. data/src/core/lib/transport/metadata.h +4 -4
  539. data/src/core/lib/transport/metadata_batch.cc +5 -0
  540. data/src/core/lib/transport/metadata_batch.h +174 -99
  541. data/src/core/lib/transport/parsed_metadata.cc +35 -0
  542. data/src/core/lib/transport/parsed_metadata.h +180 -61
  543. data/src/core/lib/transport/pid_controller.cc +4 -4
  544. data/src/core/lib/transport/static_metadata.cc +529 -614
  545. data/src/core/lib/transport/static_metadata.h +0 -18
  546. data/src/core/lib/transport/transport.cc +4 -26
  547. data/src/core/lib/transport/transport.h +0 -1
  548. data/src/core/lib/transport/transport_op_string.cc +1 -1
  549. data/src/core/lib/uri/uri_parser.cc +19 -19
  550. data/src/core/lib/uri/uri_parser.h +2 -0
  551. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -2
  552. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  553. data/src/core/tsi/local_transport_security.cc +15 -15
  554. data/src/core/tsi/ssl_transport_security.cc +30 -1
  555. data/src/core/tsi/ssl_transport_security.h +1 -0
  556. data/src/ruby/ext/grpc/extconf.rb +1 -1
  557. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -10
  558. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +9 -15
  559. data/src/ruby/lib/grpc/version.rb +1 -1
  560. data/third_party/abseil-cpp/absl/algorithm/container.h +101 -91
  561. data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
  562. data/third_party/abseil-cpp/absl/base/config.h +67 -37
  563. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
  564. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -1
  565. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
  566. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +69 -0
  567. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
  568. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +16 -0
  569. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
  570. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  571. data/third_party/abseil-cpp/absl/container/fixed_array.h +0 -5
  572. data/third_party/abseil-cpp/absl/container/inlined_vector.h +105 -97
  573. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  574. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +18 -102
  575. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +37 -78
  576. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +388 -423
  577. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  578. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -8
  579. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +251 -120
  580. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
  581. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
  582. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
  583. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +12 -5
  584. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  585. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
  586. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
  587. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
  588. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
  589. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  590. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
  591. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +14 -0
  592. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  593. data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
  594. data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
  595. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
  596. data/third_party/abseil-cpp/absl/hash/internal/hash.h +88 -37
  597. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
  598. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
  599. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  600. data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
  601. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -10
  602. data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
  603. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  604. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  605. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
  606. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
  607. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
  608. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +5 -5
  609. data/third_party/abseil-cpp/absl/status/status.cc +9 -17
  610. data/third_party/abseil-cpp/absl/status/status.h +19 -15
  611. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  612. data/third_party/abseil-cpp/absl/status/statusor.h +31 -21
  613. data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
  614. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  615. data/third_party/abseil-cpp/absl/strings/cord.cc +453 -359
  616. data/third_party/abseil-cpp/absl/strings/cord.h +197 -70
  617. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
  618. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +6 -0
  619. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +140 -63
  620. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
  621. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
  622. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
  623. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
  624. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
  625. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
  626. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
  627. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  628. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +7 -7
  629. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +55 -181
  630. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
  631. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
  632. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  633. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  634. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  635. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  636. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
  637. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  638. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
  639. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  640. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
  641. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  642. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -0
  643. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
  644. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +1 -1
  645. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  646. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
  647. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
  648. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +24 -16
  649. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
  650. data/third_party/abseil-cpp/absl/strings/numbers.cc +1 -1
  651. data/third_party/abseil-cpp/absl/strings/numbers.h +34 -0
  652. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  653. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  654. data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
  655. data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
  656. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  657. data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
  658. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  659. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  660. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -1
  661. data/third_party/abseil-cpp/absl/synchronization/mutex.h +3 -3
  662. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  663. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  664. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  665. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  666. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  667. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  668. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
  669. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  670. data/third_party/abseil-cpp/absl/time/time.h +67 -36
  671. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  672. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  673. data/third_party/abseil-cpp/absl/types/span.h +3 -3
  674. data/third_party/boringssl-with-bazel/err_data.c +681 -677
  675. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
  676. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
  677. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
  678. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
  679. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  680. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  681. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
  682. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
  683. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  684. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  685. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  686. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
  687. data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
  688. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  689. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
  690. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  691. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
  692. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
  693. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
  694. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  695. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  696. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
  697. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  698. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
  699. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
  700. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
  701. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
  702. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
  703. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
  704. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
  705. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  706. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +17 -41
  707. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  708. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
  709. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
  710. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +3 -9
  711. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  712. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
  713. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +6 -9
  714. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
  715. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
  716. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
  717. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
  718. data/third_party/upb/upb/decode.c +309 -178
  719. data/third_party/upb/upb/decode_fast.c +1 -1
  720. data/third_party/upb/upb/decode_internal.h +1 -0
  721. data/third_party/upb/upb/def.c +330 -85
  722. data/third_party/upb/upb/def.h +45 -14
  723. data/third_party/upb/upb/def.hpp +17 -4
  724. data/third_party/upb/upb/encode.c +100 -40
  725. data/third_party/upb/upb/msg.c +22 -9
  726. data/third_party/upb/upb/msg_internal.h +90 -8
  727. data/third_party/upb/upb/reflection.c +98 -58
  728. data/third_party/upb/upb/reflection.h +6 -2
  729. data/third_party/upb/upb/text_encode.c +3 -3
  730. data/third_party/upb/upb/upb.c +8 -0
  731. metadata +116 -56
  732. data/src/core/lib/avl/avl.cc +0 -306
  733. data/src/core/lib/gprpp/match.h +0 -73
  734. data/src/core/lib/gprpp/overload.h +0 -59
  735. data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
  736. data/src/core/lib/iomgr/resource_quota.cc +0 -1106
  737. data/src/core/lib/iomgr/resource_quota.h +0 -226
  738. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  739. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
@@ -83,15 +83,23 @@ static const uint8_t desctype_to_mapsize[] = {
83
83
  8, /* SINT64 */
84
84
  };
85
85
 
86
- static const unsigned fixed32_ok = (1 << UPB_DTYPE_FLOAT) |
87
- (1 << UPB_DTYPE_FIXED32) |
88
- (1 << UPB_DTYPE_SFIXED32);
86
+ static const unsigned FIXED32_OK_MASK = (1 << UPB_DTYPE_FLOAT) |
87
+ (1 << UPB_DTYPE_FIXED32) |
88
+ (1 << UPB_DTYPE_SFIXED32);
89
89
 
90
- static const unsigned fixed64_ok = (1 << UPB_DTYPE_DOUBLE) |
91
- (1 << UPB_DTYPE_FIXED64) |
92
- (1 << UPB_DTYPE_SFIXED64);
90
+ static const unsigned FIXED64_OK_MASK = (1 << UPB_DTYPE_DOUBLE) |
91
+ (1 << UPB_DTYPE_FIXED64) |
92
+ (1 << UPB_DTYPE_SFIXED64);
93
+
94
+ /* Three fake field types for MessageSet. */
95
+ #define TYPE_MSGSET_ITEM 19
96
+ #define TYPE_MSGSET_TYPE_ID 20
97
+ #define TYPE_COUNT 20
93
98
 
94
99
  /* Op: an action to be performed for a wire-type/field-type combination. */
100
+ #define OP_UNKNOWN -1 /* Unknown field. */
101
+ #define OP_MSGSET_ITEM -2
102
+ #define OP_MSGSET_TYPEID -3
95
103
  #define OP_SCALAR_LG2(n) (n) /* n in [0, 2, 3] => op in [0, 2, 3] */
96
104
  #define OP_STRING 4
97
105
  #define OP_BYTES 5
@@ -100,49 +108,53 @@ static const unsigned fixed64_ok = (1 << UPB_DTYPE_DOUBLE) |
100
108
  #define OP_FIXPCK_LG2(n) (n + 5) /* n in [2, 3] => op in [7, 8] */
101
109
  #define OP_VARPCK_LG2(n) (n + 9) /* n in [0, 2, 3] => op in [9, 11, 12] */
102
110
 
103
- static const int8_t varint_ops[19] = {
104
- -1, /* field not found */
105
- -1, /* DOUBLE */
106
- -1, /* FLOAT */
111
+ static const int8_t varint_ops[] = {
112
+ OP_UNKNOWN, /* field not found */
113
+ OP_UNKNOWN, /* DOUBLE */
114
+ OP_UNKNOWN, /* FLOAT */
107
115
  OP_SCALAR_LG2(3), /* INT64 */
108
116
  OP_SCALAR_LG2(3), /* UINT64 */
109
117
  OP_SCALAR_LG2(2), /* INT32 */
110
- -1, /* FIXED64 */
111
- -1, /* FIXED32 */
118
+ OP_UNKNOWN, /* FIXED64 */
119
+ OP_UNKNOWN, /* FIXED32 */
112
120
  OP_SCALAR_LG2(0), /* BOOL */
113
- -1, /* STRING */
114
- -1, /* GROUP */
115
- -1, /* MESSAGE */
116
- -1, /* BYTES */
121
+ OP_UNKNOWN, /* STRING */
122
+ OP_UNKNOWN, /* GROUP */
123
+ OP_UNKNOWN, /* MESSAGE */
124
+ OP_UNKNOWN, /* BYTES */
117
125
  OP_SCALAR_LG2(2), /* UINT32 */
118
126
  OP_SCALAR_LG2(2), /* ENUM */
119
- -1, /* SFIXED32 */
120
- -1, /* SFIXED64 */
127
+ OP_UNKNOWN, /* SFIXED32 */
128
+ OP_UNKNOWN, /* SFIXED64 */
121
129
  OP_SCALAR_LG2(2), /* SINT32 */
122
130
  OP_SCALAR_LG2(3), /* SINT64 */
131
+ OP_UNKNOWN, /* MSGSET_ITEM */
132
+ OP_MSGSET_TYPEID, /* MSGSET TYPEID */
123
133
  };
124
134
 
125
- static const int8_t delim_ops[37] = {
135
+ static const int8_t delim_ops[] = {
126
136
  /* For non-repeated field type. */
127
- -1, /* field not found */
128
- -1, /* DOUBLE */
129
- -1, /* FLOAT */
130
- -1, /* INT64 */
131
- -1, /* UINT64 */
132
- -1, /* INT32 */
133
- -1, /* FIXED64 */
134
- -1, /* FIXED32 */
135
- -1, /* BOOL */
136
- OP_STRING, /* STRING */
137
- -1, /* GROUP */
138
- OP_SUBMSG, /* MESSAGE */
139
- OP_BYTES, /* BYTES */
140
- -1, /* UINT32 */
141
- -1, /* ENUM */
142
- -1, /* SFIXED32 */
143
- -1, /* SFIXED64 */
144
- -1, /* SINT32 */
145
- -1, /* SINT64 */
137
+ OP_UNKNOWN, /* field not found */
138
+ OP_UNKNOWN, /* DOUBLE */
139
+ OP_UNKNOWN, /* FLOAT */
140
+ OP_UNKNOWN, /* INT64 */
141
+ OP_UNKNOWN, /* UINT64 */
142
+ OP_UNKNOWN, /* INT32 */
143
+ OP_UNKNOWN, /* FIXED64 */
144
+ OP_UNKNOWN, /* FIXED32 */
145
+ OP_UNKNOWN, /* BOOL */
146
+ OP_STRING, /* STRING */
147
+ OP_UNKNOWN, /* GROUP */
148
+ OP_SUBMSG, /* MESSAGE */
149
+ OP_BYTES, /* BYTES */
150
+ OP_UNKNOWN, /* UINT32 */
151
+ OP_UNKNOWN, /* ENUM */
152
+ OP_UNKNOWN, /* SFIXED32 */
153
+ OP_UNKNOWN, /* SFIXED64 */
154
+ OP_UNKNOWN, /* SINT32 */
155
+ OP_UNKNOWN, /* SINT64 */
156
+ OP_UNKNOWN, /* MSGSET_ITEM */
157
+ OP_UNKNOWN, /* MSGSET TYPEID */
146
158
  /* For repeated field type. */
147
159
  OP_FIXPCK_LG2(3), /* REPEATED DOUBLE */
148
160
  OP_FIXPCK_LG2(2), /* REPEATED FLOAT */
@@ -162,6 +174,7 @@ static const int8_t delim_ops[37] = {
162
174
  OP_FIXPCK_LG2(3), /* REPEATED SFIXED64 */
163
175
  OP_VARPCK_LG2(2), /* REPEATED SINT32 */
164
176
  OP_VARPCK_LG2(3), /* REPEATED SINT64 */
177
+ /* Omitting MSGSET_*, because we never emit a repeated msgset type */
165
178
  };
166
179
 
167
180
  typedef union {
@@ -174,7 +187,9 @@ typedef union {
174
187
  static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
175
188
  const upb_msglayout *layout);
176
189
 
177
- UPB_NORETURN static void decode_err(upb_decstate *d) { UPB_LONGJMP(d->err, 1); }
190
+ UPB_NORETURN static const char *decode_err(upb_decstate *d) {
191
+ UPB_LONGJMP(d->err, 1);
192
+ }
178
193
 
179
194
  // We don't want to mark this NORETURN, see comment in .h.
180
195
  // Unfortunately this code to suppress the warning doesn't appear to be working.
@@ -250,7 +265,7 @@ static const char *decode_varint64(upb_decstate *d, const char *ptr,
250
265
  return ptr + 1;
251
266
  } else {
252
267
  decode_vret res = decode_longvarint64(ptr, byte);
253
- if (!res.ptr) decode_err(d);
268
+ if (!res.ptr) return decode_err(d);
254
269
  *val = res.val;
255
270
  return res.ptr;
256
271
  }
@@ -268,7 +283,7 @@ static const char *decode_tag(upb_decstate *d, const char *ptr,
268
283
  decode_vret res = decode_longvarint64(ptr, byte);
269
284
  ptr = res.ptr;
270
285
  *val = res.val;
271
- if (!ptr || *val > UINT32_MAX || ptr - start > 5) decode_err(d);
286
+ if (!ptr || *val > UINT32_MAX || ptr - start > 5) return decode_err(d);
272
287
  return ptr;
273
288
  }
274
289
  }
@@ -298,44 +313,9 @@ static void decode_munge(int type, wireval *val) {
298
313
  }
299
314
  }
300
315
 
301
- static const upb_msglayout_field *upb_find_field(const upb_msglayout *l,
302
- uint32_t field_number,
303
- int *last_field_index) {
304
- static upb_msglayout_field none = {0, 0, 0, 0, 0, 0};
305
-
306
- if (l == NULL) return &none;
307
-
308
- size_t idx = ((size_t)field_number) - 1; // 0 wraps to SIZE_MAX
309
- if (idx < l->dense_below) {
310
- goto found;
311
- }
312
-
313
- /* Resume scanning from last_field_index since fields are usually in order. */
314
- int last = *last_field_index;
315
- for (idx = last; idx < l->field_count; idx++) {
316
- if (l->fields[idx].number == field_number) {
317
- goto found;
318
- }
319
- }
320
-
321
- for (idx = 0; idx < last; idx++) {
322
- if (l->fields[idx].number == field_number) {
323
- goto found;
324
- }
325
- }
326
-
327
- return &none; /* Unknown field. */
328
-
329
- found:
330
- UPB_ASSERT(l->fields[idx].number == field_number);
331
- *last_field_index = idx;
332
- return &l->fields[idx];
333
- }
334
-
335
- static upb_msg *decode_newsubmsg(upb_decstate *d,
336
- upb_msglayout const *const *submsgs,
316
+ static upb_msg *decode_newsubmsg(upb_decstate *d, const upb_msglayout_sub *subs,
337
317
  const upb_msglayout_field *field) {
338
- const upb_msglayout *subl = submsgs[field->submsg_index];
318
+ const upb_msglayout *subl = subs[field->submsg_index].submsg;
339
319
  return _upb_msg_new_inl(subl, &d->arena);
340
320
  }
341
321
 
@@ -344,7 +324,7 @@ const char *decode_isdonefallback(upb_decstate *d, const char *ptr,
344
324
  int overrun) {
345
325
  ptr = decode_isdonefallback_inl(d, ptr, overrun);
346
326
  if (ptr == NULL) {
347
- decode_err(d);
327
+ return decode_err(d);
348
328
  }
349
329
  return ptr;
350
330
  }
@@ -355,7 +335,7 @@ static const char *decode_readstr(upb_decstate *d, const char *ptr, int size,
355
335
  str->data = ptr;
356
336
  } else {
357
337
  char *data = upb_arena_malloc(&d->arena, size);
358
- if (!data) decode_err(d);
338
+ if (!data) return decode_err(d);
359
339
  memcpy(data, ptr, size);
360
340
  str->data = data;
361
341
  }
@@ -365,16 +345,16 @@ static const char *decode_readstr(upb_decstate *d, const char *ptr, int size,
365
345
 
366
346
  UPB_FORCEINLINE
367
347
  static const char *decode_tosubmsg(upb_decstate *d, const char *ptr,
368
- upb_msg *submsg,
369
- upb_msglayout const *const *submsgs,
348
+ upb_msg *submsg,
349
+ const upb_msglayout_sub *subs,
370
350
  const upb_msglayout_field *field, int size) {
371
- const upb_msglayout *subl = submsgs[field->submsg_index];
351
+ const upb_msglayout *subl = subs[field->submsg_index].submsg;
372
352
  int saved_delta = decode_pushlimit(d, ptr, size);
373
- if (--d->depth < 0) decode_err(d);
353
+ if (--d->depth < 0) return decode_err(d);
374
354
  if (!decode_isdone(d, &ptr)) {
375
355
  ptr = decode_msg(d, ptr, submsg, subl);
376
356
  }
377
- if (d->end_group != DECODE_NOGROUP) decode_err(d);
357
+ if (d->end_group != DECODE_NOGROUP) return decode_err(d);
378
358
  decode_poplimit(d, ptr, saved_delta);
379
359
  d->depth++;
380
360
  return ptr;
@@ -384,12 +364,12 @@ UPB_FORCEINLINE
384
364
  static const char *decode_group(upb_decstate *d, const char *ptr,
385
365
  upb_msg *submsg, const upb_msglayout *subl,
386
366
  uint32_t number) {
387
- if (--d->depth < 0) decode_err(d);
367
+ if (--d->depth < 0) return decode_err(d);
388
368
  if (decode_isdone(d, &ptr)) {
389
- decode_err(d);
369
+ return decode_err(d);
390
370
  }
391
371
  ptr = decode_msg(d, ptr, submsg, subl);
392
- if (d->end_group != number) decode_err(d);
372
+ if (d->end_group != number) return decode_err(d);
393
373
  d->end_group = DECODE_NOGROUP;
394
374
  d->depth++;
395
375
  return ptr;
@@ -398,15 +378,15 @@ static const char *decode_group(upb_decstate *d, const char *ptr,
398
378
  UPB_FORCEINLINE
399
379
  static const char *decode_togroup(upb_decstate *d, const char *ptr,
400
380
  upb_msg *submsg,
401
- upb_msglayout const *const *submsgs,
381
+ const upb_msglayout_sub *subs,
402
382
  const upb_msglayout_field *field) {
403
- const upb_msglayout *subl = submsgs[field->submsg_index];
383
+ const upb_msglayout *subl = subs[field->submsg_index].submsg;
404
384
  return decode_group(d, ptr, submsg, subl, field->number);
405
385
  }
406
386
 
407
387
  static const char *decode_toarray(upb_decstate *d, const char *ptr,
408
388
  upb_msg *msg,
409
- upb_msglayout const *const *submsgs,
389
+ const upb_msglayout_sub *subs,
410
390
  const upb_msglayout_field *field, wireval *val,
411
391
  int op) {
412
392
  upb_array **arrp = UPB_PTR_AT(msg, field->offset, void);
@@ -418,7 +398,7 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr,
418
398
  } else {
419
399
  size_t lg2 = desctype_to_elem_size_lg2[field->descriptortype];
420
400
  arr = _upb_array_new(&d->arena, 4, lg2);
421
- if (!arr) decode_err(d);
401
+ if (!arr) return decode_err(d);
422
402
  *arrp = arr;
423
403
  }
424
404
 
@@ -442,14 +422,14 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr,
442
422
  }
443
423
  case OP_SUBMSG: {
444
424
  /* Append submessage / group. */
445
- upb_msg *submsg = decode_newsubmsg(d, submsgs, field);
425
+ upb_msg *submsg = decode_newsubmsg(d, subs, field);
446
426
  *UPB_PTR_AT(_upb_array_ptr(arr), arr->len * sizeof(void *), upb_msg *) =
447
427
  submsg;
448
428
  arr->len++;
449
429
  if (UPB_UNLIKELY(field->descriptortype == UPB_DTYPE_GROUP)) {
450
- return decode_togroup(d, ptr, submsg, submsgs, field);
430
+ return decode_togroup(d, ptr, submsg, subs, field);
451
431
  } else {
452
- return decode_tosubmsg(d, ptr, submsg, submsgs, field, val->size);
432
+ return decode_tosubmsg(d, ptr, submsg, subs, field, val->size);
453
433
  }
454
434
  }
455
435
  case OP_FIXPCK_LG2(2):
@@ -459,7 +439,7 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr,
459
439
  int mask = (1 << lg2) - 1;
460
440
  size_t count = val->size >> lg2;
461
441
  if ((val->size & mask) != 0) {
462
- decode_err(d); /* Length isn't a round multiple of elem size. */
442
+ return decode_err(d); /* Length isn't a round multiple of elem size. */
463
443
  }
464
444
  decode_reserve(d, arr, count);
465
445
  mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void);
@@ -495,12 +475,13 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr,
495
475
  }
496
476
 
497
477
  static const char *decode_tomap(upb_decstate *d, const char *ptr, upb_msg *msg,
498
- upb_msglayout const *const *submsgs,
499
- const upb_msglayout_field *field, wireval *val) {
478
+ const upb_msglayout_sub *subs,
479
+ const upb_msglayout_field *field,
480
+ wireval *val) {
500
481
  upb_map **map_p = UPB_PTR_AT(msg, field->offset, upb_map *);
501
482
  upb_map *map = *map_p;
502
483
  upb_map_entry ent;
503
- const upb_msglayout *entry = submsgs[field->submsg_index];
484
+ const upb_msglayout *entry = subs[field->submsg_index].submsg;
504
485
 
505
486
  if (!map) {
506
487
  /* Lazily create map. */
@@ -520,16 +501,16 @@ static const char *decode_tomap(upb_decstate *d, const char *ptr, upb_msg *msg,
520
501
  if (entry->fields[1].descriptortype == UPB_DESCRIPTOR_TYPE_MESSAGE ||
521
502
  entry->fields[1].descriptortype == UPB_DESCRIPTOR_TYPE_GROUP) {
522
503
  /* Create proactively to handle the case where it doesn't appear. */
523
- ent.v.val = upb_value_ptr(_upb_msg_new(entry->submsgs[0], &d->arena));
504
+ ent.v.val = upb_value_ptr(_upb_msg_new(entry->subs[0].submsg, &d->arena));
524
505
  }
525
506
 
526
- ptr = decode_tosubmsg(d, ptr, &ent.k, submsgs, field, val->size);
507
+ ptr = decode_tosubmsg(d, ptr, &ent.k, subs, field, val->size);
527
508
  _upb_map_set(map, &ent.k, map->key_size, &ent.v, map->val_size, &d->arena);
528
509
  return ptr;
529
510
  }
530
511
 
531
512
  static const char *decode_tomsg(upb_decstate *d, const char *ptr, upb_msg *msg,
532
- upb_msglayout const *const *submsgs,
513
+ const upb_msglayout_sub *subs,
533
514
  const upb_msglayout_field *field, wireval *val,
534
515
  int op) {
535
516
  void *mem = UPB_PTR_AT(msg, field->offset, void);
@@ -553,13 +534,13 @@ static const char *decode_tomsg(upb_decstate *d, const char *ptr, upb_msg *msg,
553
534
  upb_msg **submsgp = mem;
554
535
  upb_msg *submsg = *submsgp;
555
536
  if (!submsg) {
556
- submsg = decode_newsubmsg(d, submsgs, field);
537
+ submsg = decode_newsubmsg(d, subs, field);
557
538
  *submsgp = submsg;
558
539
  }
559
540
  if (UPB_UNLIKELY(type == UPB_DTYPE_GROUP)) {
560
- ptr = decode_togroup(d, ptr, submsg, submsgs, field);
541
+ ptr = decode_togroup(d, ptr, submsg, subs, field);
561
542
  } else {
562
- ptr = decode_tosubmsg(d, ptr, submsg, submsgs, field, val->size);
543
+ ptr = decode_tosubmsg(d, ptr, submsg, subs, field, val->size);
563
544
  }
564
545
  break;
565
546
  }
@@ -598,6 +579,207 @@ static bool decode_tryfastdispatch(upb_decstate *d, const char **ptr,
598
579
  return false;
599
580
  }
600
581
 
582
+ static const char *decode_msgset(upb_decstate *d, const char *ptr, upb_msg *msg,
583
+ const upb_msglayout *layout) {
584
+ // We create a temporary upb_msglayout here and abuse its fields as temporary
585
+ // storage, to avoid creating lots of MessageSet-specific parsing code-paths:
586
+ // 1. We store 'layout' in item_layout.subs. We will need this later as
587
+ // a key to look up extensions for this MessageSet.
588
+ // 2. We use item_layout.fields as temporary storage to store the extension we
589
+ // found when parsing the type id.
590
+ upb_msglayout item_layout = {
591
+ .subs = (const upb_msglayout_sub[]){{.submsg = layout}},
592
+ .fields = NULL,
593
+ .size = 0,
594
+ .field_count = 0,
595
+ .ext = _UPB_MSGEXT_MSGSET_ITEM,
596
+ .dense_below = 0,
597
+ .table_mask = -1};
598
+ return decode_group(d, ptr, msg, &item_layout, 1);
599
+ }
600
+
601
+ static const upb_msglayout_field *decode_findfield(upb_decstate *d,
602
+ const upb_msglayout *l,
603
+ uint32_t field_number,
604
+ int *last_field_index) {
605
+ static upb_msglayout_field none = {0, 0, 0, 0, 0, 0};
606
+ if (l == NULL) return &none;
607
+
608
+ size_t idx = ((size_t)field_number) - 1; // 0 wraps to SIZE_MAX
609
+ if (idx < l->dense_below) {
610
+ /* Fastest case: index into dense fields. */
611
+ goto found;
612
+ }
613
+
614
+ if (l->dense_below < l->field_count) {
615
+ /* Linear search non-dense fields. Resume scanning from last_field_index
616
+ * since fields are usually in order. */
617
+ int last = *last_field_index;
618
+ for (idx = last; idx < l->field_count; idx++) {
619
+ if (l->fields[idx].number == field_number) {
620
+ goto found;
621
+ }
622
+ }
623
+
624
+ for (idx = l->dense_below; idx < last; idx++) {
625
+ if (l->fields[idx].number == field_number) {
626
+ goto found;
627
+ }
628
+ }
629
+ }
630
+
631
+ if (d->extreg) {
632
+ switch (l->ext) {
633
+ case _UPB_MSGEXT_EXTENDABLE: {
634
+ const upb_msglayout_ext *ext =
635
+ _upb_extreg_get(d->extreg, l, field_number);
636
+ if (ext) return &ext->field;
637
+ break;
638
+ }
639
+ case _UPB_MSGEXT_MSGSET:
640
+ if (field_number == _UPB_MSGSET_ITEM) {
641
+ static upb_msglayout_field item = {0, 0, 0, 0, TYPE_MSGSET_ITEM, 0};
642
+ return &item;
643
+ }
644
+ break;
645
+ case _UPB_MSGEXT_MSGSET_ITEM:
646
+ switch (field_number) {
647
+ case _UPB_MSGSET_TYPEID: {
648
+ static upb_msglayout_field type_id = {
649
+ 0, 0, 0, 0, TYPE_MSGSET_TYPE_ID, 0};
650
+ return &type_id;
651
+ }
652
+ case _UPB_MSGSET_MESSAGE:
653
+ if (l->fields) {
654
+ // We saw type_id previously and succeeded in looking up msg.
655
+ return l->fields;
656
+ } else {
657
+ // TODO: out of order MessageSet.
658
+ // This is a very rare case: all serializers will emit in-order
659
+ // MessageSets. To hit this case there has to be some kind of
660
+ // re-ordering proxy. We should eventually handle this case, but
661
+ // not today.
662
+ }
663
+ break;
664
+ }
665
+ }
666
+ }
667
+
668
+ return &none; /* Unknown field. */
669
+
670
+ found:
671
+ UPB_ASSERT(l->fields[idx].number == field_number);
672
+ *last_field_index = idx;
673
+ return &l->fields[idx];
674
+ }
675
+
676
+ UPB_FORCEINLINE
677
+ static const char *decode_wireval(upb_decstate *d, const char *ptr,
678
+ const upb_msglayout_field *field,
679
+ int wire_type, wireval *val, int *op) {
680
+ switch (wire_type) {
681
+ case UPB_WIRE_TYPE_VARINT:
682
+ ptr = decode_varint64(d, ptr, &val->uint64_val);
683
+ *op = varint_ops[field->descriptortype];
684
+ decode_munge(field->descriptortype, val);
685
+ return ptr;
686
+ case UPB_WIRE_TYPE_32BIT:
687
+ memcpy(&val->uint32_val, ptr, 4);
688
+ val->uint32_val = _upb_be_swap32(val->uint32_val);
689
+ *op = OP_SCALAR_LG2(2);
690
+ if (((1 << field->descriptortype) & FIXED32_OK_MASK) == 0) {
691
+ *op = OP_UNKNOWN;
692
+ }
693
+ return ptr + 4;
694
+ case UPB_WIRE_TYPE_64BIT:
695
+ memcpy(&val->uint64_val, ptr, 8);
696
+ val->uint64_val = _upb_be_swap64(val->uint64_val);
697
+ *op = OP_SCALAR_LG2(3);
698
+ if (((1 << field->descriptortype) & FIXED64_OK_MASK) == 0) {
699
+ *op = OP_UNKNOWN;
700
+ }
701
+ return ptr + 8;
702
+ case UPB_WIRE_TYPE_DELIMITED: {
703
+ int ndx = field->descriptortype;
704
+ uint64_t size;
705
+ if (_upb_getmode(field) == _UPB_MODE_ARRAY) ndx += TYPE_COUNT;
706
+ ptr = decode_varint64(d, ptr, &size);
707
+ if (size >= INT32_MAX || ptr - d->end + (int32_t)size > d->limit) {
708
+ break; /* Length overflow. */
709
+ }
710
+ *op = delim_ops[ndx];
711
+ val->size = size;
712
+ return ptr;
713
+ }
714
+ case UPB_WIRE_TYPE_START_GROUP:
715
+ val->uint32_val = field->number;
716
+ if (field->descriptortype == UPB_DTYPE_GROUP) {
717
+ *op = OP_SUBMSG;
718
+ } else if (field->descriptortype == TYPE_MSGSET_ITEM) {
719
+ *op = OP_MSGSET_ITEM;
720
+ } else {
721
+ *op = OP_UNKNOWN;
722
+ }
723
+ return ptr;
724
+ default:
725
+ break;
726
+ }
727
+ return decode_err(d);
728
+ }
729
+
730
+ UPB_FORCEINLINE
731
+ static const char *decode_known(upb_decstate *d, const char *ptr, upb_msg *msg,
732
+ const upb_msglayout *layout,
733
+ const upb_msglayout_field *field, int op,
734
+ wireval *val) {
735
+ const upb_msglayout_sub *subs = layout->subs;
736
+ uint8_t mode = field->mode;
737
+
738
+ if (UPB_UNLIKELY(mode & _UPB_MODE_IS_EXTENSION)) {
739
+ const upb_msglayout_ext *ext_layout = (const upb_msglayout_ext*)field;
740
+ upb_msg_ext *ext = _upb_msg_getorcreateext(msg, ext_layout, &d->arena);
741
+ if (UPB_UNLIKELY(!ext)) return decode_err(d);
742
+ msg = &ext->data;
743
+ subs = &ext->ext->sub;
744
+ }
745
+
746
+ switch (mode & _UPB_MODE_MASK) {
747
+ case _UPB_MODE_ARRAY:
748
+ return decode_toarray(d, ptr, msg, subs, field, val, op);
749
+ case _UPB_MODE_MAP:
750
+ return decode_tomap(d, ptr, msg, subs, field, val);
751
+ case _UPB_MODE_SCALAR:
752
+ return decode_tomsg(d, ptr, msg, subs, field, val, op);
753
+ default:
754
+ UPB_UNREACHABLE();
755
+ }
756
+ }
757
+
758
+ UPB_FORCEINLINE
759
+ static const char *decode_unknown(upb_decstate *d, const char *ptr,
760
+ upb_msg *msg, int field_number, int wire_type,
761
+ wireval val, const char **field_start) {
762
+ if (field_number == 0) return decode_err(d);
763
+
764
+ if (wire_type == UPB_WIRE_TYPE_DELIMITED) ptr += val.size;
765
+ if (msg) {
766
+ if (wire_type == UPB_WIRE_TYPE_START_GROUP) {
767
+ d->unknown = *field_start;
768
+ d->unknown_msg = msg;
769
+ ptr = decode_group(d, ptr, NULL, NULL, field_number);
770
+ d->unknown_msg = NULL;
771
+ *field_start = d->unknown;
772
+ }
773
+ if (!_upb_msg_addunknown(msg, *field_start, ptr - *field_start,
774
+ &d->arena)) {
775
+ return decode_err(d);
776
+ }
777
+ } else if (wire_type == UPB_WIRE_TYPE_START_GROUP) {
778
+ ptr = decode_group(d, ptr, NULL, NULL, field_number);
779
+ }
780
+ return ptr;
781
+ }
782
+
601
783
  UPB_NOINLINE
602
784
  static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
603
785
  const upb_msglayout *layout) {
@@ -616,87 +798,32 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
616
798
  field_number = tag >> 3;
617
799
  wire_type = tag & 7;
618
800
 
619
- field = upb_find_field(layout, field_number, &last_field_index);
801
+ field = decode_findfield(d, layout, field_number, &last_field_index);
620
802
 
621
- switch (wire_type) {
622
- case UPB_WIRE_TYPE_VARINT:
623
- ptr = decode_varint64(d, ptr, &val.uint64_val);
624
- op = varint_ops[field->descriptortype];
625
- decode_munge(field->descriptortype, &val);
626
- break;
627
- case UPB_WIRE_TYPE_32BIT:
628
- memcpy(&val.uint32_val, ptr, 4);
629
- val.uint32_val = _upb_be_swap32(val.uint32_val);
630
- ptr += 4;
631
- op = OP_SCALAR_LG2(2);
632
- if (((1 << field->descriptortype) & fixed32_ok) == 0) goto unknown;
633
- break;
634
- case UPB_WIRE_TYPE_64BIT:
635
- memcpy(&val.uint64_val, ptr, 8);
636
- val.uint64_val = _upb_be_swap64(val.uint64_val);
637
- ptr += 8;
638
- op = OP_SCALAR_LG2(3);
639
- if (((1 << field->descriptortype) & fixed64_ok) == 0) goto unknown;
640
- break;
641
- case UPB_WIRE_TYPE_DELIMITED: {
642
- int ndx = field->descriptortype;
643
- uint64_t size;
644
- if (_upb_getmode(field) == _UPB_MODE_ARRAY) ndx += 18;
645
- ptr = decode_varint64(d, ptr, &size);
646
- if (size >= INT32_MAX ||
647
- ptr - d->end + (int32_t)size > d->limit) {
648
- decode_err(d); /* Length overflow. */
649
- }
650
- op = delim_ops[ndx];
651
- val.size = size;
652
- break;
653
- }
654
- case UPB_WIRE_TYPE_START_GROUP:
655
- val.uint32_val = field_number;
656
- op = OP_SUBMSG;
657
- if (field->descriptortype != UPB_DTYPE_GROUP) goto unknown;
658
- break;
659
- case UPB_WIRE_TYPE_END_GROUP:
660
- d->end_group = field_number;
661
- return ptr;
662
- default:
663
- decode_err(d);
803
+ if (wire_type == UPB_WIRE_TYPE_END_GROUP) {
804
+ d->end_group = field_number;
805
+ return ptr;
664
806
  }
665
807
 
808
+ ptr = decode_wireval(d, ptr, field, wire_type, &val, &op);
809
+
666
810
  if (op >= 0) {
667
- /* Parse, using op for dispatch. */
668
- switch (_upb_getmode(field)) {
669
- case _UPB_MODE_ARRAY:
670
- ptr = decode_toarray(d, ptr, msg, layout->submsgs, field, &val, op);
811
+ ptr = decode_known(d, ptr, msg, layout, field, op, &val);
812
+ } else {
813
+ switch (op) {
814
+ case OP_UNKNOWN:
815
+ ptr = decode_unknown(d, ptr, msg, field_number, wire_type, val,
816
+ &field_start);
671
817
  break;
672
- case _UPB_MODE_MAP:
673
- ptr = decode_tomap(d, ptr, msg, layout->submsgs, field, &val);
818
+ case OP_MSGSET_ITEM:
819
+ ptr = decode_msgset(d, ptr, msg, layout);
674
820
  break;
675
- case _UPB_MODE_SCALAR:
676
- ptr = decode_tomsg(d, ptr, msg, layout->submsgs, field, &val, op);
821
+ case OP_MSGSET_TYPEID: {
822
+ const upb_msglayout_ext *ext = _upb_extreg_get(
823
+ d->extreg, layout->subs[0].submsg, val.uint64_val);
824
+ if (ext) ((upb_msglayout *)layout)->fields = &ext->field;
677
825
  break;
678
- default:
679
- UPB_UNREACHABLE();
680
- }
681
- } else {
682
- unknown:
683
- /* Skip unknown field. */
684
- if (field_number == 0) decode_err(d);
685
- if (wire_type == UPB_WIRE_TYPE_DELIMITED) ptr += val.size;
686
- if (msg) {
687
- if (wire_type == UPB_WIRE_TYPE_START_GROUP) {
688
- d->unknown = field_start;
689
- d->unknown_msg = msg;
690
- ptr = decode_group(d, ptr, NULL, NULL, field_number);
691
- d->unknown_msg = NULL;
692
- field_start = d->unknown;
693
- }
694
- if (!_upb_msg_addunknown(msg, field_start, ptr - field_start,
695
- &d->arena)) {
696
- decode_err(d);
697
826
  }
698
- } else if (wire_type == UPB_WIRE_TYPE_START_GROUP) {
699
- ptr = decode_group(d, ptr, NULL, NULL, field_number);
700
827
  }
701
828
  }
702
829
 
@@ -743,6 +870,7 @@ bool _upb_decode(const char *buf, size_t size, void *msg,
743
870
  state.alias = options & UPB_DECODE_ALIAS;
744
871
  }
745
872
 
873
+ state.extreg = extreg;
746
874
  state.limit_ptr = state.end;
747
875
  state.unknown_msg = NULL;
748
876
  state.depth = depth ? depth : 64;
@@ -764,8 +892,11 @@ bool _upb_decode(const char *buf, size_t size, void *msg,
764
892
  return ok;
765
893
  }
766
894
 
895
+ #undef OP_UNKNOWN
896
+ #undef OP_SKIP
767
897
  #undef OP_SCALAR_LG2
768
898
  #undef OP_FIXPCK_LG2
769
899
  #undef OP_VARPCK_LG2
770
900
  #undef OP_STRING
901
+ #undef OP_BYTES
771
902
  #undef OP_SUBMSG