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
@@ -74,6 +74,12 @@ struct upb_fielddef {
74
74
  upb_label_t label_;
75
75
  };
76
76
 
77
+ struct upb_extrange {
78
+ const google_protobuf_ExtensionRangeOptions *opts;
79
+ int32_t start;
80
+ int32_t end;
81
+ };
82
+
77
83
  struct upb_msgdef {
78
84
  const upb_msglayout *layout;
79
85
  const upb_filedef *file;
@@ -83,17 +89,19 @@ struct upb_msgdef {
83
89
  upb_inttable itof;
84
90
  upb_strtable ntof;
85
91
 
92
+ const upb_extrange *ext_ranges;
86
93
  const upb_fielddef *fields;
87
94
  const upb_oneofdef *oneofs;
88
95
  int field_count;
89
96
  int oneof_count;
90
97
  int real_oneof_count;
98
+ int ext_range_count;
91
99
 
92
100
  /* Is this a map-entry message? */
93
101
  bool map_entry;
102
+ bool is_message_set;
94
103
  upb_wellknowntype_t well_known_type;
95
-
96
- /* TODO(haberman): proper extension ranges (there can be multiple). */
104
+ const upb_fielddef *message_set_ext;
97
105
  };
98
106
 
99
107
  struct upb_enumdef {
@@ -101,9 +109,17 @@ struct upb_enumdef {
101
109
  const char *full_name;
102
110
  upb_strtable ntoi;
103
111
  upb_inttable iton;
112
+ const upb_enumvaldef *values;
113
+ int value_count;
104
114
  int32_t defaultval;
105
115
  };
106
116
 
117
+ struct upb_enumvaldef {
118
+ const upb_enumdef *enum_;
119
+ const char *full_name;
120
+ int32_t number;
121
+ };
122
+
107
123
  struct upb_oneofdef {
108
124
  const upb_msgdef *parent;
109
125
  const char *full_name;
@@ -124,6 +140,7 @@ struct upb_filedef {
124
140
  const upb_msgdef *msgs;
125
141
  const upb_enumdef *enums;
126
142
  const upb_fielddef *exts;
143
+ const upb_msglayout_ext **ext_layouts;
127
144
  const upb_symtab *symtab;
128
145
 
129
146
  int dep_count;
@@ -137,29 +154,43 @@ struct upb_symtab {
137
154
  upb_arena *arena;
138
155
  upb_strtable syms; /* full_name -> packed def ptr */
139
156
  upb_strtable files; /* file_name -> upb_filedef* */
157
+ upb_inttable exts; /* upb_msglayout_ext* -> upb_fielddef* */
158
+ upb_extreg *extreg;
140
159
  size_t bytes_loaded;
141
160
  };
142
161
 
143
162
  /* Inside a symtab we store tagged pointers to specific def types. */
144
163
  typedef enum {
164
+ UPB_DEFTYPE_MASK = 7,
165
+
145
166
  UPB_DEFTYPE_FIELD = 0,
146
167
 
147
168
  /* Only inside symtab table. */
148
169
  UPB_DEFTYPE_MSG = 1,
149
170
  UPB_DEFTYPE_ENUM = 2,
171
+ UPB_DEFTYPE_ENUMVAL = 3,
150
172
 
151
173
  /* Only inside message table. */
152
174
  UPB_DEFTYPE_ONEOF = 1,
153
175
  UPB_DEFTYPE_FIELD_JSONNAME = 2
154
176
  } upb_deftype_t;
155
177
 
178
+ static upb_deftype_t deftype(upb_value v) {
179
+ uintptr_t num = (uintptr_t)upb_value_getconstptr(v);
180
+ return num & UPB_DEFTYPE_MASK;
181
+ }
182
+
156
183
  static const void *unpack_def(upb_value v, upb_deftype_t type) {
157
184
  uintptr_t num = (uintptr_t)upb_value_getconstptr(v);
158
- return (num & 3) == type ? (const void*)(num & ~3) : NULL;
185
+ return (num & UPB_DEFTYPE_MASK) == type
186
+ ? (const void *)(num & ~UPB_DEFTYPE_MASK)
187
+ : NULL;
159
188
  }
160
189
 
161
190
  static upb_value pack_def(const void *ptr, upb_deftype_t type) {
162
- uintptr_t num = (uintptr_t)ptr | type;
191
+ uintptr_t num = (uintptr_t)ptr;
192
+ UPB_ASSERT((num & UPB_DEFTYPE_MASK) == 0);
193
+ num |= type;
163
194
  return upb_value_constptr((const void*)num);
164
195
  }
165
196
 
@@ -270,10 +301,31 @@ const upb_filedef *upb_enumdef_file(const upb_enumdef *e) {
270
301
  }
271
302
 
272
303
  int32_t upb_enumdef_default(const upb_enumdef *e) {
273
- UPB_ASSERT(upb_enumdef_iton(e, e->defaultval));
304
+ UPB_ASSERT(upb_enumdef_lookupnum(e, e->defaultval));
274
305
  return e->defaultval;
275
306
  }
276
307
 
308
+ const upb_enumvaldef *upb_enumdef_lookupname(const upb_enumdef *def,
309
+ const char *name, size_t len) {
310
+ upb_value v;
311
+ return upb_strtable_lookup2(&def->ntoi, name, len, &v)
312
+ ? upb_value_getconstptr(v)
313
+ : NULL;
314
+ }
315
+
316
+ const upb_enumvaldef *upb_enumdef_lookupnum(const upb_enumdef *def, int32_t num) {
317
+ upb_value v;
318
+ return upb_inttable_lookup(&def->iton, num, &v) ? upb_value_getconstptr(v)
319
+ : NULL;
320
+ }
321
+
322
+ const upb_enumvaldef *upb_enumdef_value(const upb_enumdef *e, int i) {
323
+ UPB_ASSERT(0 <= i && i < e->value_count);
324
+ return &e->values[i];
325
+ }
326
+
327
+ // Deprecated functions.
328
+
277
329
  int upb_enumdef_numvals(const upb_enumdef *e) {
278
330
  return (int)upb_strtable_count(&e->ntoi);
279
331
  }
@@ -286,21 +338,6 @@ void upb_enum_begin(upb_enum_iter *i, const upb_enumdef *e) {
286
338
  void upb_enum_next(upb_enum_iter *iter) { upb_strtable_next(iter); }
287
339
  bool upb_enum_done(upb_enum_iter *iter) { return upb_strtable_done(iter); }
288
340
 
289
- bool upb_enumdef_ntoi(const upb_enumdef *def, const char *name,
290
- size_t len, int32_t *num) {
291
- upb_value v;
292
- if (!upb_strtable_lookup2(&def->ntoi, name, len, &v)) {
293
- return false;
294
- }
295
- if (num) *num = upb_value_getint32(v);
296
- return true;
297
- }
298
-
299
- const char *upb_enumdef_iton(const upb_enumdef *def, int32_t num) {
300
- upb_value v;
301
- return upb_inttable_lookup(&def->iton, num, &v) ? upb_value_getcstr(v) : NULL;
302
- }
303
-
304
341
  const char *upb_enum_iter_name(upb_enum_iter *iter) {
305
342
  return upb_strtable_iter_key(iter).data;
306
343
  }
@@ -310,6 +347,25 @@ int32_t upb_enum_iter_number(upb_enum_iter *iter) {
310
347
  }
311
348
 
312
349
 
350
+ /* upb_enumvaldef *************************************************************/
351
+
352
+ const upb_enumdef *upb_enumvaldef_enum(const upb_enumvaldef *ev) {
353
+ return ev->enum_;
354
+ }
355
+
356
+ const char *upb_enumvaldef_fullname(const upb_enumvaldef *ev) {
357
+ return ev->full_name;
358
+ }
359
+
360
+ const char *upb_enumvaldef_name(const upb_enumvaldef *ev) {
361
+ return shortdefname(ev->full_name);
362
+ }
363
+
364
+ int32_t upb_enumvaldef_number(const upb_enumvaldef *ev) {
365
+ return ev->number;
366
+ }
367
+
368
+
313
369
  /* upb_fielddef ***************************************************************/
314
370
 
315
371
  const char *upb_fielddef_fullname(const upb_fielddef *f) {
@@ -484,9 +540,15 @@ const upb_enumdef *upb_fielddef_enumsubdef(const upb_fielddef *f) {
484
540
  }
485
541
 
486
542
  const upb_msglayout_field *upb_fielddef_layout(const upb_fielddef *f) {
543
+ UPB_ASSERT(!upb_fielddef_isextension(f));
487
544
  return &f->msgdef->layout->fields[f->layout_index];
488
545
  }
489
546
 
547
+ const upb_msglayout_ext *_upb_fielddef_extlayout(const upb_fielddef *f) {
548
+ UPB_ASSERT(upb_fielddef_isextension(f));
549
+ return f->file->ext_layouts[f->layout_index];
550
+ }
551
+
490
552
  bool upb_fielddef_issubmsg(const upb_fielddef *f) {
491
553
  return upb_fielddef_type(f) == UPB_TYPE_MESSAGE;
492
554
  }
@@ -617,6 +679,10 @@ int upb_msgdef_numrealoneofs(const upb_msgdef *m) {
617
679
  return m->real_oneof_count;
618
680
  }
619
681
 
682
+ int upb_msgdef_extrangecount(const upb_msgdef *m) {
683
+ return m->ext_range_count;
684
+ }
685
+
620
686
  int upb_msgdef_fieldcount(const upb_msgdef *m) {
621
687
  return m->field_count;
622
688
  }
@@ -633,6 +699,11 @@ const upb_msglayout *upb_msgdef_layout(const upb_msgdef *m) {
633
699
  return m->layout;
634
700
  }
635
701
 
702
+ const upb_extrange *upb_msgdef_extrange(const upb_msgdef *m, int i) {
703
+ UPB_ASSERT(i >= 0 && i < m->ext_range_count);
704
+ return &m->ext_ranges[i];
705
+ }
706
+
636
707
  const upb_fielddef *upb_msgdef_field(const upb_msgdef *m, int i) {
637
708
  UPB_ASSERT(i >= 0 && i < m->field_count);
638
709
  return &m->fields[i];
@@ -850,12 +921,19 @@ upb_symtab *upb_symtab_new(void) {
850
921
  s->bytes_loaded = 0;
851
922
 
852
923
  if (!upb_strtable_init(&s->syms, 32, s->arena) ||
853
- !upb_strtable_init(&s->files, 4, s->arena)) {
854
- upb_arena_free(s->arena);
855
- upb_gfree(s);
856
- s = NULL;
924
+ !upb_strtable_init(&s->files, 4, s->arena) ||
925
+ !upb_inttable_init(&s->exts, s->arena)) {
926
+ goto err;
857
927
  }
928
+
929
+ s->extreg = upb_extreg_new(s->arena);
930
+ if (!s->extreg) goto err;
858
931
  return s;
932
+
933
+ err:
934
+ upb_arena_free(s->arena);
935
+ upb_gfree(s);
936
+ return NULL;
859
937
  }
860
938
 
861
939
  const upb_msgdef *upb_symtab_lookupmsg(const upb_symtab *s, const char *sym) {
@@ -864,11 +942,16 @@ const upb_msgdef *upb_symtab_lookupmsg(const upb_symtab *s, const char *sym) {
864
942
  unpack_def(v, UPB_DEFTYPE_MSG) : NULL;
865
943
  }
866
944
 
945
+ static const void *symtab_lookup2(const upb_symtab *s, const char *sym,
946
+ size_t size, upb_deftype_t type) {
947
+ upb_value v;
948
+ return upb_strtable_lookup2(&s->syms, sym, size, &v) ? unpack_def(v, type)
949
+ : NULL;
950
+ }
951
+
867
952
  const upb_msgdef *upb_symtab_lookupmsg2(const upb_symtab *s, const char *sym,
868
953
  size_t len) {
869
- upb_value v;
870
- return upb_strtable_lookup2(&s->syms, sym, len, &v) ?
871
- unpack_def(v, UPB_DEFTYPE_MSG) : NULL;
954
+ return symtab_lookup2(s, sym, len, UPB_DEFTYPE_MSG);
872
955
  }
873
956
 
874
957
  const upb_enumdef *upb_symtab_lookupenum(const upb_symtab *s, const char *sym) {
@@ -877,6 +960,37 @@ const upb_enumdef *upb_symtab_lookupenum(const upb_symtab *s, const char *sym) {
877
960
  unpack_def(v, UPB_DEFTYPE_ENUM) : NULL;
878
961
  }
879
962
 
963
+ const upb_enumvaldef *upb_symtab_lookupenumval(const upb_symtab *s,
964
+ const char *sym) {
965
+ upb_value v;
966
+ return upb_strtable_lookup(&s->syms, sym, &v)
967
+ ? unpack_def(v, UPB_DEFTYPE_ENUMVAL)
968
+ : NULL;
969
+ }
970
+
971
+ const upb_fielddef *upb_symtab_lookupext2(const upb_symtab *s, const char *name,
972
+ size_t size) {
973
+ upb_value v;
974
+ if (!upb_strtable_lookup2(&s->syms, name, size, &v)) return NULL;
975
+
976
+ switch (deftype(v)) {
977
+ case UPB_DEFTYPE_FIELD:
978
+ return unpack_def(v, UPB_DEFTYPE_FIELD);
979
+ case UPB_DEFTYPE_MSG: {
980
+ const upb_msgdef *m = unpack_def(v, UPB_DEFTYPE_MSG);
981
+ return m->message_set_ext; /* May be NULL if not in MessageeSet. */
982
+ }
983
+ default:
984
+ break;
985
+ }
986
+
987
+ return NULL;
988
+ }
989
+
990
+ const upb_fielddef *upb_symtab_lookupext(const upb_symtab *s, const char *sym) {
991
+ return upb_symtab_lookupext2(s, sym, strlen(sym));
992
+ }
993
+
880
994
  const upb_filedef *upb_symtab_lookupfile(const upb_symtab *s, const char *name) {
881
995
  upb_value v;
882
996
  return upb_strtable_lookup(&s->files, name, &v) ? upb_value_getconstptr(v)
@@ -907,7 +1021,10 @@ typedef struct {
907
1021
  upb_symtab *symtab;
908
1022
  upb_filedef *file; /* File we are building. */
909
1023
  upb_arena *arena; /* Allocate defs here. */
910
- const upb_msglayout **layouts; /* NULL if we should build layouts. */
1024
+ const upb_msglayout_file *layout; /* NULL if we should build layouts. */
1025
+ int enum_count; /* Count of enums built so far. */
1026
+ int msg_count; /* Count of messages built so far. */
1027
+ int ext_count; /* Count of extensions built so far. */
911
1028
  upb_status *status; /* Record errors here. */
912
1029
  jmp_buf err; /* longjmp() on error. */
913
1030
  } symtab_addctx;
@@ -1047,16 +1164,43 @@ static void fill_fieldlayout(upb_msglayout_field *field, const upb_fielddef *f)
1047
1164
  }
1048
1165
 
1049
1166
  if (upb_fielddef_ismap(f)) {
1050
- field->mode = _UPB_MODE_MAP;
1167
+ field->mode = _UPB_MODE_MAP | (_UPB_REP_PTR << _UPB_REP_SHIFT);
1051
1168
  } else if (upb_fielddef_isseq(f)) {
1052
- field->mode = _UPB_MODE_ARRAY;
1169
+ field->mode = _UPB_MODE_ARRAY | (_UPB_REP_PTR << _UPB_REP_SHIFT);
1053
1170
  } else {
1054
- field->mode = _UPB_MODE_SCALAR;
1171
+ /* Maps descriptor type -> elem_size_lg2. */
1172
+ static const uint8_t sizes[] = {
1173
+ -1, /* invalid descriptor type */
1174
+ _UPB_REP_8BYTE, /* DOUBLE */
1175
+ _UPB_REP_4BYTE, /* FLOAT */
1176
+ _UPB_REP_8BYTE, /* INT64 */
1177
+ _UPB_REP_8BYTE, /* UINT64 */
1178
+ _UPB_REP_4BYTE, /* INT32 */
1179
+ _UPB_REP_8BYTE, /* FIXED64 */
1180
+ _UPB_REP_4BYTE, /* FIXED32 */
1181
+ _UPB_REP_1BYTE, /* BOOL */
1182
+ _UPB_REP_STRVIEW, /* STRING */
1183
+ _UPB_REP_PTR, /* GROUP */
1184
+ _UPB_REP_PTR, /* MESSAGE */
1185
+ _UPB_REP_STRVIEW, /* BYTES */
1186
+ _UPB_REP_4BYTE, /* UINT32 */
1187
+ _UPB_REP_4BYTE, /* ENUM */
1188
+ _UPB_REP_4BYTE, /* SFIXED32 */
1189
+ _UPB_REP_8BYTE, /* SFIXED64 */
1190
+ _UPB_REP_4BYTE, /* SINT32 */
1191
+ _UPB_REP_8BYTE, /* SINT64 */
1192
+ };
1193
+ field->mode =
1194
+ _UPB_MODE_SCALAR | (sizes[field->descriptortype] << _UPB_REP_SHIFT);
1055
1195
  }
1056
1196
 
1057
1197
  if (upb_fielddef_packed(f)) {
1058
1198
  field->mode |= _UPB_MODE_IS_PACKED;
1059
1199
  }
1200
+
1201
+ if (upb_fielddef_isextension(f)) {
1202
+ field->mode |= _UPB_MODE_IS_EXTENSION;
1203
+ }
1060
1204
  }
1061
1205
 
1062
1206
  /* This function is the dynamic equivalent of message_layout.{cc,h} in upbc.
@@ -1067,8 +1211,8 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
1067
1211
  upb_msg_oneof_iter oit;
1068
1212
  size_t hasbit;
1069
1213
  size_t field_count = upb_msgdef_numfields(m);
1070
- size_t submsg_count = 0;
1071
- const upb_msglayout **submsgs;
1214
+ size_t sublayout_count = 0;
1215
+ upb_msglayout_sub *subs;
1072
1216
  upb_msglayout_field *fields;
1073
1217
 
1074
1218
  memset(l, 0, sizeof(*l) + sizeof(_upb_fasttable_entry));
@@ -1076,18 +1220,28 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
1076
1220
  /* Count sub-messages. */
1077
1221
  for (size_t i = 0; i < field_count; i++) {
1078
1222
  if (upb_fielddef_issubmsg(&m->fields[i])) {
1079
- submsg_count++;
1223
+ sublayout_count++;
1080
1224
  }
1081
1225
  }
1082
1226
 
1083
1227
  fields = symtab_alloc(ctx, field_count * sizeof(*fields));
1084
- submsgs = symtab_alloc(ctx, submsg_count * sizeof(*submsgs));
1228
+ subs = symtab_alloc(ctx, sublayout_count * sizeof(*subs));
1085
1229
 
1086
1230
  l->field_count = upb_msgdef_numfields(m);
1087
1231
  l->fields = fields;
1088
- l->submsgs = submsgs;
1232
+ l->subs = subs;
1089
1233
  l->table_mask = 0;
1090
1234
 
1235
+ if (upb_msgdef_extrangecount(m) > 0) {
1236
+ if (m->is_message_set) {
1237
+ l->ext = _UPB_MSGEXT_MSGSET;
1238
+ } else {
1239
+ l->ext = _UPB_MSGEXT_EXTENDABLE;
1240
+ }
1241
+ } else {
1242
+ l->ext = _UPB_MSGEXT_NONE;
1243
+ }
1244
+
1091
1245
  /* TODO(haberman): initialize fast tables so that reflection-based parsing
1092
1246
  * can get the same speeds as linked-in types. */
1093
1247
  l->fasttable[0].field_parser = &fastdecode_generic;
@@ -1111,7 +1265,7 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
1111
1265
  fields[1].submsg_index = 0;
1112
1266
 
1113
1267
  if (upb_fielddef_type(val) == UPB_TYPE_MESSAGE) {
1114
- submsgs[0] = upb_fielddef_msgsubdef(val)->layout;
1268
+ subs[0].submsg = upb_fielddef_msgsubdef(val)->layout;
1115
1269
  }
1116
1270
 
1117
1271
  l->field_count = 2;
@@ -1130,7 +1284,7 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
1130
1284
  */
1131
1285
 
1132
1286
  /* Allocate hasbits and set basic field attributes. */
1133
- submsg_count = 0;
1287
+ sublayout_count = 0;
1134
1288
  for (upb_msg_field_begin(&it, m), hasbit = 0;
1135
1289
  !upb_msg_field_done(&it);
1136
1290
  upb_msg_field_next(&it)) {
@@ -1141,8 +1295,8 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
1141
1295
 
1142
1296
  if (upb_fielddef_issubmsg(f)) {
1143
1297
  const upb_msgdef *subm = upb_fielddef_msgsubdef(f);
1144
- field->submsg_index = submsg_count++;
1145
- submsgs[field->submsg_index] = subm->layout;
1298
+ field->submsg_index = sublayout_count++;
1299
+ subs[field->submsg_index].submsg = subm->layout;
1146
1300
  }
1147
1301
 
1148
1302
  if (upb_fielddef_haspresence(f) && !upb_fielddef_realcontainingoneof(f)) {
@@ -1217,7 +1371,9 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
1217
1371
  }
1218
1372
 
1219
1373
  static char *strviewdup(symtab_addctx *ctx, upb_strview view) {
1220
- return upb_strdup2(view.data, view.size, ctx->arena);
1374
+ char *ret = upb_strdup2(view.data, view.size, ctx->arena);
1375
+ CHK_OOM(ret);
1376
+ return ret;
1221
1377
  }
1222
1378
 
1223
1379
  static bool streql2(const char *a, size_t n, const char *b) {
@@ -1325,6 +1481,8 @@ static char* makejsonname(symtab_addctx *ctx, const char* name) {
1325
1481
  }
1326
1482
 
1327
1483
  static void symtab_add(symtab_addctx *ctx, const char *name, upb_value v) {
1484
+ // TODO: table should support an operation "tryinsert" to avoid the double
1485
+ // lookup.
1328
1486
  if (upb_strtable_lookup(&ctx->symtab->syms, name, NULL)) {
1329
1487
  symtab_errf(ctx, "duplicate symbol '%s'", name);
1330
1488
  }
@@ -1433,11 +1591,11 @@ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
1433
1591
  }
1434
1592
  case UPB_TYPE_ENUM: {
1435
1593
  const upb_enumdef *e = f->sub.enumdef;
1436
- int32_t val;
1437
- if (!upb_enumdef_ntoi(e, str, len, &val)) {
1594
+ const upb_enumvaldef *ev = upb_enumdef_lookupname(e, str, len);
1595
+ if (!ev) {
1438
1596
  goto invalid;
1439
1597
  }
1440
- f->defaultval.sint = val;
1598
+ f->defaultval.sint = ev->number;
1441
1599
  break;
1442
1600
  }
1443
1601
  case UPB_TYPE_INT64: {
@@ -1604,12 +1762,11 @@ static void create_fielddef(
1604
1762
  upb_strtable_insert(&m->ntof, json_name, json_size, json_v, ctx->arena);
1605
1763
  }
1606
1764
 
1607
- if (ctx->layouts) {
1765
+ if (ctx->layout) {
1608
1766
  const upb_msglayout_field *fields = m->layout->fields;
1609
1767
  int count = m->layout->field_count;
1610
1768
  bool found = false;
1611
- int i;
1612
- for (i = 0; i < count; i++) {
1769
+ for (int i = 0; i < count; i++) {
1613
1770
  if (fields[i].number == field_number) {
1614
1771
  f->layout_index = i;
1615
1772
  found = true;
@@ -1620,9 +1777,15 @@ static void create_fielddef(
1620
1777
  }
1621
1778
  } else {
1622
1779
  /* extension field. */
1623
- f = (upb_fielddef*)&ctx->file->exts[ctx->file->ext_count++];
1780
+ uint16_t layout_index = ctx->ext_count++;
1781
+ f = (upb_fielddef*)&ctx->file->exts[layout_index];
1782
+ f->layout_index = layout_index;
1624
1783
  f->is_extension_ = true;
1625
1784
  symtab_add(ctx, full_name, pack_def(f, UPB_DEFTYPE_FIELD));
1785
+ if (ctx->layout) {
1786
+ UPB_ASSERT(ctx->file->ext_layouts[f->layout_index]->field.number ==
1787
+ field_number);
1788
+ }
1626
1789
  }
1627
1790
 
1628
1791
  f->full_name = full_name;
@@ -1711,7 +1874,7 @@ static void create_enumdef(
1711
1874
  name = google_protobuf_EnumDescriptorProto_name(enum_proto);
1712
1875
  check_ident(ctx, name, false);
1713
1876
 
1714
- e = (upb_enumdef*)&ctx->file->enums[ctx->file->enum_count++];
1877
+ e = (upb_enumdef*)&ctx->file->enums[ctx->enum_count++];
1715
1878
  e->full_name = makefullname(ctx, prefix, name);
1716
1879
  symtab_add(ctx, e->full_name, pack_def(e, UPB_DEFTYPE_ENUM));
1717
1880
 
@@ -1721,6 +1884,8 @@ static void create_enumdef(
1721
1884
 
1722
1885
  e->file = ctx->file;
1723
1886
  e->defaultval = 0;
1887
+ e->value_count = n;
1888
+ e->values = symtab_alloc(ctx, sizeof(*e->values) * n);
1724
1889
 
1725
1890
  if (n == 0) {
1726
1891
  symtab_errf(ctx, "enums must contain at least one value (%s)",
@@ -1728,27 +1893,26 @@ static void create_enumdef(
1728
1893
  }
1729
1894
 
1730
1895
  for (i = 0; i < n; i++) {
1731
- const google_protobuf_EnumValueDescriptorProto *value = values[i];
1732
- upb_strview name = google_protobuf_EnumValueDescriptorProto_name(value);
1733
- char *name2 = strviewdup(ctx, name);
1734
- int32_t num = google_protobuf_EnumValueDescriptorProto_number(value);
1735
- upb_value v = upb_value_int32(num);
1896
+ const google_protobuf_EnumValueDescriptorProto *val_proto = values[i];
1897
+ upb_enumvaldef *val = (upb_enumvaldef*)&e->values[i];
1898
+ upb_strview name = google_protobuf_EnumValueDescriptorProto_name(val_proto);
1899
+ upb_value v = upb_value_constptr(val);
1900
+
1901
+ val->enum_ = e;
1902
+ val->full_name = makefullname(ctx, prefix, name);
1903
+ val->number = google_protobuf_EnumValueDescriptorProto_number(val_proto);
1904
+ symtab_add(ctx, val->full_name, pack_def(val, UPB_DEFTYPE_ENUMVAL));
1736
1905
 
1737
- if (i == 0 && e->file->syntax == UPB_SYNTAX_PROTO3 && num != 0) {
1906
+ if (i == 0 && e->file->syntax == UPB_SYNTAX_PROTO3 && val->number != 0) {
1738
1907
  symtab_errf(ctx, "for proto3, the first enum value must be zero (%s)",
1739
1908
  e->full_name);
1740
1909
  }
1741
1910
 
1742
- if (upb_strtable_lookup(&e->ntoi, name2, NULL)) {
1743
- symtab_errf(ctx, "duplicate enum label '%s'", name2);
1744
- }
1911
+ CHK_OOM(upb_strtable_insert(&e->ntoi, name.data, name.size, v, ctx->arena));
1745
1912
 
1746
- CHK_OOM(name2)
1747
- CHK_OOM(upb_strtable_insert(&e->ntoi, name2, strlen(name2), v, ctx->arena));
1748
-
1749
- if (!upb_inttable_lookup(&e->iton, num, NULL)) {
1750
- upb_value v = upb_value_cstr(name2);
1751
- CHK_OOM(upb_inttable_insert(&e->iton, num, v, ctx->arena));
1913
+ // Multiple enumerators can have the same number, first one wins.
1914
+ if (!upb_inttable_lookup(&e->iton, val->number, NULL)) {
1915
+ CHK_OOM(upb_inttable_insert(&e->iton, val->number, v, ctx->arena));
1752
1916
  }
1753
1917
  }
1754
1918
 
@@ -1763,34 +1927,44 @@ static void create_msgdef(symtab_addctx *ctx, const char *prefix,
1763
1927
  const google_protobuf_FieldDescriptorProto *const *fields;
1764
1928
  const google_protobuf_EnumDescriptorProto *const *enums;
1765
1929
  const google_protobuf_DescriptorProto *const *msgs;
1766
- size_t i, n_oneof, n_field, n;
1930
+ const google_protobuf_DescriptorProto_ExtensionRange *const *ext_ranges;
1931
+ size_t i, n_oneof, n_field, n_ext_range, n;
1767
1932
  upb_strview name;
1768
1933
 
1769
1934
  name = google_protobuf_DescriptorProto_name(msg_proto);
1770
1935
  check_ident(ctx, name, false);
1771
1936
 
1772
- m = (upb_msgdef*)&ctx->file->msgs[ctx->file->msg_count++];
1937
+ int msg_index = ctx->msg_count;
1938
+ m = (upb_msgdef*)&ctx->file->msgs[msg_index];
1773
1939
  m->full_name = makefullname(ctx, prefix, name);
1940
+ ctx->msg_count++;
1774
1941
  symtab_add(ctx, m->full_name, pack_def(m, UPB_DEFTYPE_MSG));
1775
1942
 
1776
1943
  oneofs = google_protobuf_DescriptorProto_oneof_decl(msg_proto, &n_oneof);
1777
1944
  fields = google_protobuf_DescriptorProto_field(msg_proto, &n_field);
1945
+ ext_ranges =
1946
+ google_protobuf_DescriptorProto_extension_range(msg_proto, &n_ext_range);
1778
1947
 
1779
1948
  CHK_OOM(upb_inttable_init(&m->itof, ctx->arena));
1780
1949
  CHK_OOM(upb_strtable_init(&m->ntof, n_oneof + n_field, ctx->arena));
1781
1950
 
1782
1951
  m->file = ctx->file;
1783
1952
  m->map_entry = false;
1953
+ m->is_message_set = false;
1954
+ m->message_set_ext = NULL;
1784
1955
 
1785
1956
  options = google_protobuf_DescriptorProto_options(msg_proto);
1786
1957
 
1787
1958
  if (options) {
1788
1959
  m->map_entry = google_protobuf_MessageOptions_map_entry(options);
1960
+ m->is_message_set =
1961
+ google_protobuf_MessageOptions_message_set_wire_format(options);
1789
1962
  }
1790
1963
 
1791
- if (ctx->layouts) {
1792
- m->layout = *ctx->layouts;
1793
- ctx->layouts++;
1964
+ if (ctx->layout) {
1965
+ /* create_fielddef() below depends on this being set. */
1966
+ m->layout = ctx->layout->msgs[msg_index];
1967
+ UPB_ASSERT(n_field == m->layout->field_count);
1794
1968
  } else {
1795
1969
  /* Allocate now (to allow cross-linking), populate later. */
1796
1970
  m->layout = symtab_alloc(
@@ -1809,6 +1983,15 @@ static void create_msgdef(symtab_addctx *ctx, const char *prefix,
1809
1983
  create_fielddef(ctx, m->full_name, m, fields[i]);
1810
1984
  }
1811
1985
 
1986
+ m->ext_range_count = n_ext_range;
1987
+ m->ext_ranges = symtab_alloc(ctx, sizeof(*m->ext_ranges) * n_ext_range);
1988
+ for (i = 0; i < n_ext_range; i++) {
1989
+ const google_protobuf_DescriptorProto_ExtensionRange *r = ext_ranges[i];
1990
+ upb_extrange *r_def = (upb_extrange*)&m->ext_ranges[i];
1991
+ r_def->start = google_protobuf_DescriptorProto_ExtensionRange_start(r);
1992
+ r_def->end = google_protobuf_DescriptorProto_ExtensionRange_end(r);
1993
+ }
1994
+
1812
1995
  finalize_oneofs(ctx, m);
1813
1996
  assign_msg_wellknowntype(m);
1814
1997
  upb_inttable_compact(&m->itof, ctx->arena);
@@ -1820,6 +2003,11 @@ static void create_msgdef(symtab_addctx *ctx, const char *prefix,
1820
2003
  create_enumdef(ctx, m->full_name, enums[i]);
1821
2004
  }
1822
2005
 
2006
+ fields = google_protobuf_DescriptorProto_extension(msg_proto, &n);
2007
+ for (i = 0; i < n; i++) {
2008
+ create_fielddef(ctx, m->full_name, NULL, fields[i]);
2009
+ }
2010
+
1823
2011
  msgs = google_protobuf_DescriptorProto_nested_type(msg_proto, &n);
1824
2012
  for (i = 0; i < n; i++) {
1825
2013
  create_msgdef(ctx, m->full_name, msgs[i]);
@@ -1876,6 +2064,22 @@ static void resolve_fielddef(symtab_addctx *ctx, const char *prefix,
1876
2064
 
1877
2065
  name = google_protobuf_FieldDescriptorProto_extendee(field_proto);
1878
2066
  f->msgdef = symtab_resolve(ctx, f, prefix, name, UPB_DEFTYPE_MSG);
2067
+
2068
+ const upb_msglayout_ext *ext = ctx->file->ext_layouts[f->layout_index];
2069
+ if (ctx->layout) {
2070
+ UPB_ASSERT(upb_fielddef_number(f) == ext->field.number);
2071
+ } else {
2072
+ upb_msglayout_ext *mut_ext = (upb_msglayout_ext*)ext;
2073
+ fill_fieldlayout(&mut_ext->field, f);
2074
+ mut_ext->field.presence = 0;
2075
+ mut_ext->field.offset = 0;
2076
+ mut_ext->field.submsg_index = 0;
2077
+ mut_ext->extendee = f->msgdef->layout;
2078
+ mut_ext->sub.submsg = f->sub.msgdef->layout;
2079
+ }
2080
+
2081
+ CHK_OOM(upb_inttable_insert(&ctx->symtab->exts, (uintptr_t)ext,
2082
+ upb_value_constptr(f), ctx->arena));
1879
2083
  }
1880
2084
 
1881
2085
  if ((upb_fielddef_issubmsg(f) || f->type_ == UPB_DESCRIPTOR_TYPE_ENUM) &&
@@ -1887,6 +2091,13 @@ static void resolve_fielddef(symtab_addctx *ctx, const char *prefix,
1887
2091
 
1888
2092
  if (upb_fielddef_issubmsg(f)) {
1889
2093
  f->sub.msgdef = symtab_resolve(ctx, f, prefix, name, UPB_DEFTYPE_MSG);
2094
+ if (f->is_extension_ && f->msgdef->is_message_set &&
2095
+ f->file == f->msgdef->file) {
2096
+ // TODO: When defs are restructured to follow message nesting, we can make
2097
+ // this check more robust. The actual rules for what make something
2098
+ // qualify as a MessageSet item are more strict.
2099
+ ((upb_msgdef*)f->sub.msgdef)->message_set_ext = f;
2100
+ }
1890
2101
  } else if (f->type_ == UPB_DESCRIPTOR_TYPE_ENUM) {
1891
2102
  f->sub.enumdef = symtab_resolve(ctx, f, prefix, name, UPB_DEFTYPE_ENUM);
1892
2103
  }
@@ -1934,10 +2145,26 @@ static void build_filedef(
1934
2145
  file->enums = symtab_alloc(ctx, sizeof(*file->enums) * file->enum_count);
1935
2146
  file->exts = symtab_alloc(ctx, sizeof(*file->exts) * file->ext_count);
1936
2147
 
1937
- /* In the second pass we increment these as defs are added. */
1938
- file->msg_count = 0;
1939
- file->enum_count = 0;
1940
- file->ext_count = 0;
2148
+ ctx->msg_count = 0;
2149
+ ctx->enum_count = 0;
2150
+ ctx->ext_count = 0;
2151
+
2152
+ if (ctx->layout) {
2153
+ /* We are using the ext layouts that were passed in. */
2154
+ file->ext_layouts = ctx->layout->exts;
2155
+ if (ctx->layout->ext_count != file->ext_count) {
2156
+ symtab_errf(ctx, "Extension count did not match layout (%d vs %d)",
2157
+ ctx->layout->ext_count, file->ext_count);
2158
+ }
2159
+ } else {
2160
+ /* We are building ext layouts from scratch. */
2161
+ file->ext_layouts =
2162
+ symtab_alloc(ctx, sizeof(*file->ext_layouts) * file->ext_count);
2163
+ upb_msglayout_ext *ext = symtab_alloc(ctx, sizeof(*ext) * file->ext_count);
2164
+ for (int i = 0; i < file->ext_count; i++) {
2165
+ file->ext_layouts[i] = &ext[i];
2166
+ }
2167
+ }
1941
2168
 
1942
2169
  if (!google_protobuf_FileDescriptorProto_has_name(file_proto)) {
1943
2170
  symtab_errf(ctx, "File has no name");
@@ -2018,11 +2245,12 @@ static void build_filedef(
2018
2245
 
2019
2246
  /* Create extensions. */
2020
2247
  exts = google_protobuf_FileDescriptorProto_extension(file_proto, &n);
2021
- file->exts = symtab_alloc(ctx, sizeof(*file->exts) * n);
2022
2248
  for (i = 0; i < n; i++) {
2023
2249
  create_fielddef(ctx, file->package, NULL, exts[i]);
2024
2250
  }
2025
2251
 
2252
+ UPB_ASSERT(ctx->ext_count == file->ext_count);
2253
+
2026
2254
  /* Now that all names are in the table, build layouts and resolve refs. */
2027
2255
  for (i = 0; i < (size_t)file->ext_count; i++) {
2028
2256
  resolve_fielddef(ctx, file->package, (upb_fielddef*)&file->exts[i]);
@@ -2036,25 +2264,28 @@ static void build_filedef(
2036
2264
  }
2037
2265
  }
2038
2266
 
2039
- if (!ctx->layouts) {
2267
+ if (!ctx->layout) {
2040
2268
  for (i = 0; i < (size_t)file->msg_count; i++) {
2041
2269
  const upb_msgdef *m = &file->msgs[i];
2042
2270
  make_layout(ctx, m);
2043
2271
  }
2044
2272
  }
2273
+
2274
+ CHK_OOM(
2275
+ _upb_extreg_add(ctx->symtab->extreg, file->ext_layouts, file->ext_count));
2045
2276
  }
2046
2277
 
2047
- static void remove_filedef(upb_symtab *s, upb_filedef *file) {
2278
+ static void remove_filedef(symtab_addctx *ctx, upb_symtab *s, upb_filedef *file) {
2048
2279
  int i;
2049
- for (i = 0; i < file->msg_count; i++) {
2280
+ for (i = 0; i < ctx->msg_count; i++) {
2050
2281
  const char *name = file->msgs[i].full_name;
2051
2282
  upb_strtable_remove(&s->syms, name, strlen(name), NULL);
2052
2283
  }
2053
- for (i = 0; i < file->enum_count; i++) {
2284
+ for (i = 0; i < ctx->enum_count; i++) {
2054
2285
  const char *name = file->enums[i].full_name;
2055
2286
  upb_strtable_remove(&s->syms, name, strlen(name), NULL);
2056
2287
  }
2057
- for (i = 0; i < file->ext_count; i++) {
2288
+ for (i = 0; i < ctx->ext_count; i++) {
2058
2289
  const char *name = file->exts[i].full_name;
2059
2290
  upb_strtable_remove(&s->syms, name, strlen(name), NULL);
2060
2291
  }
@@ -2062,7 +2293,7 @@ static void remove_filedef(upb_symtab *s, upb_filedef *file) {
2062
2293
 
2063
2294
  static const upb_filedef *_upb_symtab_addfile(
2064
2295
  upb_symtab *s, const google_protobuf_FileDescriptorProto *file_proto,
2065
- const upb_msglayout **layouts, upb_status *status) {
2296
+ const upb_msglayout_file *layout, upb_status *status) {
2066
2297
  symtab_addctx ctx;
2067
2298
  upb_strview name = google_protobuf_FileDescriptorProto_name(file_proto);
2068
2299
 
@@ -2073,7 +2304,7 @@ static const upb_filedef *_upb_symtab_addfile(
2073
2304
  }
2074
2305
 
2075
2306
  ctx.symtab = s;
2076
- ctx.layouts = layouts;
2307
+ ctx.layout = layout;
2077
2308
  ctx.status = status;
2078
2309
  ctx.file = NULL;
2079
2310
  ctx.arena = upb_arena_new();
@@ -2086,7 +2317,7 @@ static const upb_filedef *_upb_symtab_addfile(
2086
2317
  if (UPB_UNLIKELY(UPB_SETJMP(ctx.err))) {
2087
2318
  UPB_ASSERT(!upb_ok(status));
2088
2319
  if (ctx.file) {
2089
- remove_filedef(s, ctx.file);
2320
+ remove_filedef(&ctx, s, ctx.file);
2090
2321
  ctx.file = NULL;
2091
2322
  }
2092
2323
  } else {
@@ -2145,14 +2376,16 @@ bool _upb_symtab_loaddefinit(upb_symtab *s, const upb_def_init *init) {
2145
2376
  goto err;
2146
2377
  }
2147
2378
 
2148
- if (!_upb_symtab_addfile(s, file, init->layouts, &status)) goto err;
2379
+ if (!_upb_symtab_addfile(s, file, init->layout, &status)) goto err;
2149
2380
 
2150
2381
  upb_arena_free(arena);
2151
2382
  return true;
2152
2383
 
2153
2384
  err:
2154
- fprintf(stderr, "Error loading compiled-in descriptor: %s\n",
2155
- upb_status_errmsg(&status));
2385
+ fprintf(stderr,
2386
+ "Error loading compiled-in descriptor for file '%s' (this should "
2387
+ "never happen): %s\n",
2388
+ init->filename, upb_status_errmsg(&status));
2156
2389
  upb_arena_free(arena);
2157
2390
  return false;
2158
2391
  }
@@ -2165,4 +2398,16 @@ upb_arena *_upb_symtab_arena(const upb_symtab *s) {
2165
2398
  return s->arena;
2166
2399
  }
2167
2400
 
2401
+ const upb_fielddef *_upb_symtab_lookupextfield(const upb_symtab *s,
2402
+ const upb_msglayout_ext *ext) {
2403
+ upb_value v;
2404
+ bool ok = upb_inttable_lookup(&s->exts, (uintptr_t)ext, &v);
2405
+ UPB_ASSERT(ok);
2406
+ return upb_value_getconstptr(v);
2407
+ }
2408
+
2409
+ const upb_extreg *upb_symtab_extreg(const upb_symtab *s) {
2410
+ return s->extreg;
2411
+ }
2412
+
2168
2413
  #undef CHK_OOM