grpc 1.54.2 → 1.55.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (971) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +68 -37
  3. data/include/grpc/impl/grpc_types.h +2 -0
  4. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -1
  5. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -1
  6. data/src/core/ext/filters/client_channel/client_channel.cc +17 -23
  7. data/src/core/ext/filters/client_channel/client_channel.h +22 -16
  8. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +1 -1
  9. data/src/core/ext/filters/client_channel/client_channel_internal.h +8 -40
  10. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +2 -2
  11. data/src/core/ext/filters/client_channel/config_selector.h +5 -17
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +1 -1
  13. data/src/core/ext/filters/client_channel/http_proxy.cc +34 -1
  14. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +2 -2
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  17. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +5 -5
  18. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +3 -3
  19. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +44 -45
  20. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +2 -3
  21. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -3
  22. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +3 -3
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +4 -4
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +3 -3
  25. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +9 -9
  26. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +4 -4
  27. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +5 -4
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +19 -118
  29. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.h +30 -0
  30. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.cc +60 -0
  31. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.h +27 -0
  32. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +524 -0
  33. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.h +35 -0
  34. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +97 -0
  35. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.h +32 -0
  36. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -13
  37. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.h +24 -0
  38. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -2
  39. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +7 -34
  40. data/src/core/ext/filters/client_channel/retry_filter.cc +23 -55
  41. data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -8
  42. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +1 -1
  43. data/src/core/ext/filters/http/message_compress/compression_filter.cc +2 -2
  44. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +68 -69
  45. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +78 -23
  46. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +21 -0
  47. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +70 -0
  48. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +1 -7
  49. data/src/core/ext/transport/chttp2/transport/frame_ping.h +0 -3
  50. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -0
  51. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +176 -0
  52. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +325 -0
  53. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +567 -543
  54. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +150 -9
  55. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +47 -32
  56. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +18 -5
  57. data/src/core/ext/transport/chttp2/transport/internal.h +3 -4
  58. data/src/core/ext/transport/chttp2/transport/parsing.cc +12 -12
  59. data/src/core/ext/transport/chttp2/transport/writing.cc +14 -3
  60. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +87 -52
  61. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +414 -181
  62. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -60
  63. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +481 -224
  64. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +90 -55
  65. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +415 -188
  66. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +357 -210
  67. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1572 -729
  68. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +30 -17
  69. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +144 -47
  70. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +34 -21
  71. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +160 -62
  72. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +27 -14
  73. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +78 -38
  74. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +20 -11
  75. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +48 -26
  76. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +20 -11
  77. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +48 -26
  78. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +109 -62
  79. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +566 -244
  80. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +21 -12
  81. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +45 -30
  82. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +22 -19
  83. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +82 -29
  84. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +23 -16
  85. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +45 -30
  86. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +230 -143
  87. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +733 -404
  88. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +417 -264
  89. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1839 -899
  90. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -41
  91. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +286 -148
  92. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +531 -334
  93. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2017 -1131
  94. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -12
  95. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +45 -30
  96. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +89 -52
  97. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +347 -232
  98. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +264 -165
  99. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +888 -476
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +139 -80
  101. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +527 -274
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +22 -13
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +50 -36
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +380 -221
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1168 -611
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +166 -94
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +666 -292
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +18 -11
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +37 -26
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +21 -12
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +45 -30
  112. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +30 -17
  113. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +144 -47
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +274 -167
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +789 -440
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +228 -137
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +1100 -501
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -13
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +60 -37
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +350 -211
  121. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1072 -646
  122. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +33 -18
  123. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +117 -51
  124. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +34 -19
  125. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +118 -56
  126. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +38 -21
  127. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +148 -64
  128. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +31 -18
  129. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +143 -65
  130. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +22 -13
  131. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +51 -37
  132. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +78 -43
  133. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +265 -127
  134. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +145 -88
  135. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +438 -241
  136. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +115 -62
  137. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +559 -227
  138. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +18 -11
  139. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +35 -26
  140. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +175 -118
  141. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +857 -442
  142. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +172 -95
  143. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +864 -374
  144. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -27
  145. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +159 -110
  146. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +39 -18
  147. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +74 -56
  148. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +28 -15
  149. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +71 -45
  150. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +131 -74
  151. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +489 -249
  152. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +135 -80
  153. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +505 -245
  154. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +248 -139
  155. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +933 -433
  156. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +80 -49
  157. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +616 -201
  158. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +1283 -776
  159. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +5422 -2519
  160. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +49 -28
  161. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +164 -84
  162. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +228 -141
  163. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +738 -399
  164. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +20 -11
  165. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +48 -26
  166. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +21 -12
  167. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +45 -30
  168. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +32 -19
  169. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +70 -49
  170. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +27 -14
  171. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +110 -43
  172. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +46 -25
  173. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +259 -100
  174. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +21 -12
  175. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +45 -30
  176. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +18 -11
  177. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +35 -26
  178. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +42 -23
  179. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +108 -70
  180. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +7 -4
  181. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +21 -16
  182. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +43 -24
  183. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +110 -75
  184. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +30 -17
  185. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +95 -50
  186. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +16 -9
  187. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +73 -23
  188. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +60 -37
  189. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +150 -108
  190. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +74 -43
  191. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +357 -167
  192. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +44 -25
  193. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +114 -80
  194. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -20
  195. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +245 -82
  196. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +32 -19
  197. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +73 -51
  198. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +474 -296
  199. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2121 -1076
  200. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +18 -11
  201. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +35 -26
  202. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +34 -21
  203. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +112 -78
  204. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +72 -45
  205. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +193 -138
  206. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +34 -21
  207. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +119 -78
  208. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +18 -11
  209. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +35 -26
  210. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -4
  211. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +15 -10
  212. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +184 -96
  213. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +907 -360
  214. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +56 -33
  215. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +150 -101
  216. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +188 -111
  217. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +816 -419
  218. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +32 -19
  219. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +109 -53
  220. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +10 -7
  221. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +18 -14
  222. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +300 -177
  223. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1284 -522
  224. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +42 -23
  225. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +188 -75
  226. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +130 -83
  227. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +510 -238
  228. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +22 -13
  229. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +55 -34
  230. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +39 -26
  231. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +124 -68
  232. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +21 -12
  233. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +47 -30
  234. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +52 -29
  235. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +92 -62
  236. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +37 -20
  237. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +133 -63
  238. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +22 -13
  239. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +91 -40
  240. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -12
  241. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +50 -32
  242. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +18 -11
  243. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +37 -26
  244. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +46 -27
  245. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +101 -70
  246. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +13 -10
  247. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +25 -22
  248. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +40 -23
  249. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +161 -75
  250. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +31 -18
  251. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +114 -56
  252. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +46 -29
  253. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +139 -91
  254. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +65 -42
  255. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +200 -121
  256. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +80 -45
  257. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +208 -131
  258. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +34 -21
  259. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +74 -53
  260. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -4
  261. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +13 -8
  262. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +16 -9
  263. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +28 -18
  264. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +28 -15
  265. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +55 -34
  266. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +43 -22
  267. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +91 -53
  268. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +35 -20
  269. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +92 -57
  270. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +7 -4
  271. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +13 -8
  272. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -11
  273. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +48 -26
  274. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +23 -14
  275. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +61 -41
  276. data/src/core/ext/upb-generated/google/api/annotations.upb.c +14 -11
  277. data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -20
  278. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +255 -154
  279. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +934 -450
  280. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +299 -180
  281. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +946 -483
  282. data/src/core/ext/upb-generated/google/api/http.upb.c +68 -35
  283. data/src/core/ext/upb-generated/google/api/http.upb.h +284 -120
  284. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +22 -13
  285. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +95 -37
  286. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -10
  287. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +38 -22
  288. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +1018 -424
  289. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +3851 -1412
  290. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -10
  291. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +38 -22
  292. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +10 -7
  293. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +18 -14
  294. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +62 -39
  295. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +207 -102
  296. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -10
  297. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +38 -22
  298. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +90 -51
  299. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +157 -107
  300. data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -13
  301. data/src/core/ext/upb-generated/google/rpc/status.upb.h +95 -37
  302. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +59 -34
  303. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +154 -92
  304. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +43 -24
  305. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +118 -60
  306. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +250 -145
  307. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +919 -415
  308. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +34 -19
  309. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +76 -51
  310. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +25 -14
  311. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +45 -30
  312. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +144 -81
  313. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +405 -217
  314. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +51 -26
  315. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +153 -61
  316. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +173 -102
  317. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +855 -298
  318. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +68 -49
  319. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +155 -104
  320. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +26 -17
  321. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +55 -34
  322. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +12 -9
  323. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +31 -14
  324. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +26 -17
  325. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +55 -34
  326. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +23 -16
  327. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +45 -30
  328. data/src/core/ext/upb-generated/validate/validate.upb.c +845 -455
  329. data/src/core/ext/upb-generated/validate/validate.upb.h +4347 -1908
  330. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +68 -49
  331. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +155 -104
  332. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +26 -17
  333. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +55 -34
  334. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +12 -9
  335. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +31 -14
  336. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +65 -44
  337. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +137 -91
  338. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +23 -16
  339. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +45 -30
  340. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +16 -9
  341. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +28 -18
  342. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +21 -12
  343. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +45 -30
  344. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +37 -22
  345. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +96 -63
  346. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +26 -17
  347. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +52 -29
  348. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +21 -12
  349. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +45 -30
  350. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +23 -14
  351. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +62 -42
  352. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +44 -25
  353. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +169 -79
  354. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +27 -14
  355. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +65 -38
  356. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +69 -38
  357. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +167 -76
  358. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +21 -12
  359. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +89 -34
  360. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +18 -11
  361. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +35 -26
  362. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +32 -19
  363. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +150 -54
  364. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +10 -7
  365. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +18 -14
  366. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +34 -21
  367. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +161 -63
  368. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +162 -101
  369. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +501 -293
  370. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +85 -52
  371. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +430 -164
  372. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +24 -15
  373. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +53 -37
  374. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +40 -23
  375. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +161 -75
  376. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +37 -22
  377. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +92 -66
  378. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +43 -22
  379. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +91 -53
  380. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +21 -12
  381. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +45 -30
  382. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +1 -1
  383. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +6 -5
  384. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +1 -1
  385. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +6 -5
  386. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +1 -1
  387. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +6 -5
  388. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +1 -1
  389. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +6 -5
  390. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +1 -1
  391. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +6 -5
  392. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +1 -1
  393. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +6 -5
  394. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +1 -1
  395. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +6 -5
  396. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +1 -1
  397. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +6 -5
  398. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +1 -1
  399. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +6 -5
  400. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +1 -1
  401. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +6 -5
  402. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +1 -1
  403. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +6 -5
  404. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +1 -1
  405. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +6 -5
  406. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +1 -1
  407. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +6 -5
  408. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +1 -1
  409. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +6 -5
  410. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +252 -253
  411. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +6 -5
  412. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +1 -1
  413. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +6 -5
  414. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +1 -1
  415. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +6 -5
  416. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +1 -1
  417. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +6 -5
  418. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +1 -1
  419. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +6 -5
  420. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +1 -1
  421. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +6 -5
  422. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +1 -1
  423. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +6 -5
  424. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +1 -1
  425. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +6 -5
  426. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +1 -1
  427. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +6 -5
  428. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +13 -12
  429. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +11 -5
  430. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +1 -1
  431. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +6 -5
  432. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +1 -1
  433. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +6 -5
  434. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +1 -1
  435. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +6 -5
  436. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +1 -1
  437. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +6 -5
  438. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +1 -1
  439. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +6 -5
  440. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +1 -1
  441. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +6 -5
  442. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +44 -44
  443. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +6 -5
  444. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +1 -1
  445. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +6 -5
  446. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +1 -1
  447. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +6 -5
  448. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +1 -1
  449. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +6 -5
  450. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +1 -1
  451. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +6 -5
  452. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +1 -1
  453. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +6 -5
  454. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +1 -1
  455. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +6 -5
  456. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +1 -1
  457. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +6 -5
  458. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +1 -1
  459. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +6 -5
  460. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +1 -1
  461. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +6 -5
  462. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +1 -1
  463. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +6 -5
  464. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +1 -1
  465. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +6 -5
  466. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +1 -1
  467. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +6 -5
  468. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +1 -1
  469. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +6 -5
  470. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +1 -1
  471. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +6 -5
  472. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +1 -1
  473. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +6 -5
  474. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +1 -1
  475. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +6 -5
  476. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +134 -128
  477. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +11 -5
  478. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +1 -1
  479. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +6 -5
  480. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +1 -1
  481. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +6 -5
  482. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +1 -1
  483. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +6 -5
  484. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +1 -1
  485. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +6 -5
  486. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +1 -1
  487. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +6 -5
  488. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +1 -1
  489. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +6 -5
  490. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +1 -1
  491. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +6 -5
  492. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +1 -1
  493. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +6 -5
  494. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +1 -1
  495. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +6 -5
  496. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +1 -1
  497. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +6 -5
  498. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +1 -1
  499. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +6 -5
  500. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +1 -1
  501. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +6 -5
  502. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +1 -1
  503. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +6 -5
  504. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +1 -1
  505. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +6 -5
  506. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +1 -1
  507. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +6 -5
  508. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +1 -1
  509. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +6 -5
  510. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +1 -1
  511. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +6 -5
  512. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +1 -1
  513. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +6 -5
  514. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +1 -1
  515. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +6 -5
  516. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +1 -1
  517. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +6 -5
  518. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +1 -1
  519. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +6 -5
  520. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +379 -376
  521. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +6 -5
  522. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +1 -1
  523. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +6 -5
  524. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +1 -1
  525. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +6 -5
  526. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +138 -136
  527. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +6 -5
  528. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +1 -1
  529. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +6 -5
  530. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +1 -1
  531. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +6 -5
  532. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +1 -1
  533. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +6 -5
  534. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +1 -1
  535. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +6 -5
  536. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +1 -1
  537. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +6 -5
  538. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +1 -1
  539. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +6 -5
  540. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +12 -13
  541. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +6 -5
  542. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +1 -1
  543. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +6 -5
  544. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +1 -1
  545. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +6 -5
  546. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +1 -1
  547. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +6 -5
  548. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +1 -1
  549. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +6 -5
  550. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +1 -1
  551. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +6 -5
  552. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +1 -1
  553. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +6 -5
  554. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +1 -1
  555. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +6 -5
  556. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +1 -1
  557. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +6 -5
  558. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +1 -1
  559. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +6 -5
  560. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +1 -1
  561. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +6 -5
  562. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +1 -1
  563. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +6 -5
  564. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +1 -1
  565. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +6 -5
  566. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +1 -1
  567. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +6 -5
  568. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +1 -1
  569. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +6 -5
  570. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +1 -1
  571. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +6 -5
  572. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +1 -1
  573. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +6 -5
  574. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +1 -1
  575. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +6 -5
  576. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +1 -1
  577. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +6 -5
  578. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +1 -1
  579. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +6 -5
  580. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +1 -1
  581. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +6 -5
  582. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +1 -1
  583. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +6 -5
  584. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +1 -1
  585. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +6 -5
  586. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +1 -1
  587. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +6 -5
  588. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +1 -1
  589. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +6 -5
  590. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +1 -1
  591. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +6 -5
  592. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +1 -1
  593. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +6 -5
  594. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +1 -1
  595. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +6 -5
  596. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +1 -1
  597. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +6 -5
  598. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +1 -1
  599. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +6 -5
  600. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +1 -1
  601. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +6 -5
  602. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +329 -273
  603. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +11 -5
  604. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +1 -1
  605. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +6 -5
  606. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +1 -1
  607. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +6 -5
  608. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +1 -1
  609. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +6 -5
  610. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +1 -1
  611. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +6 -5
  612. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +1 -1
  613. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +6 -5
  614. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +1 -1
  615. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +6 -5
  616. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +1 -1
  617. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +6 -5
  618. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +1 -1
  619. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +6 -5
  620. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +1 -1
  621. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +6 -5
  622. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +1 -1
  623. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +6 -5
  624. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +1 -1
  625. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +6 -5
  626. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +1 -1
  627. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +6 -5
  628. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +1 -1
  629. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +6 -5
  630. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +1 -1
  631. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +6 -5
  632. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +1 -1
  633. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +6 -5
  634. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +1 -1
  635. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +6 -5
  636. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +1 -1
  637. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +6 -5
  638. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +1 -1
  639. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +6 -5
  640. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +1 -1
  641. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +6 -5
  642. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +1 -1
  643. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +6 -5
  644. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +1 -1
  645. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +6 -5
  646. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +1 -1
  647. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +6 -5
  648. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +1 -1
  649. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +6 -5
  650. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +1 -1
  651. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +6 -5
  652. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +1 -1
  653. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +6 -5
  654. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +1 -1
  655. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +6 -5
  656. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +1 -1
  657. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +6 -5
  658. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +1 -1
  659. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +6 -5
  660. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +1 -1
  661. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +6 -5
  662. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +1 -1
  663. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +6 -5
  664. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +1 -1
  665. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +6 -5
  666. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +1 -1
  667. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +6 -5
  668. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +1 -1
  669. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +6 -5
  670. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +1 -1
  671. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +6 -5
  672. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +1 -1
  673. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +6 -5
  674. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +1 -1
  675. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +6 -5
  676. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +1 -1
  677. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +6 -5
  678. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +1 -1
  679. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +6 -5
  680. data/src/core/ext/xds/certificate_provider_store.cc +4 -4
  681. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +7 -7
  682. data/src/core/ext/xds/upb_utils.h +1 -1
  683. data/src/core/ext/xds/xds_api.cc +34 -14
  684. data/src/core/ext/xds/xds_api.h +2 -2
  685. data/src/core/ext/xds/xds_bootstrap.cc +3 -3
  686. data/src/core/ext/xds/xds_bootstrap_grpc.cc +15 -15
  687. data/src/core/ext/xds/xds_client.cc +24 -3
  688. data/src/core/ext/xds/xds_client.h +1 -1
  689. data/src/core/ext/xds/xds_cluster.cc +26 -34
  690. data/src/core/ext/xds/xds_cluster.h +1 -2
  691. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +4 -3
  692. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +2 -2
  693. data/src/core/ext/xds/xds_common_types.cc +5 -4
  694. data/src/core/ext/xds/xds_endpoint.cc +5 -2
  695. data/src/core/ext/xds/xds_endpoint.h +1 -1
  696. data/src/core/ext/xds/xds_http_fault_filter.cc +2 -2
  697. data/src/core/ext/xds/xds_http_fault_filter.h +1 -1
  698. data/src/core/ext/xds/xds_http_filters.h +3 -2
  699. data/src/core/ext/xds/xds_http_rbac_filter.cc +6 -8
  700. data/src/core/ext/xds/xds_http_rbac_filter.h +1 -1
  701. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +2 -2
  702. data/src/core/ext/xds/xds_http_stateful_session_filter.h +1 -1
  703. data/src/core/ext/xds/xds_lb_policy_registry.cc +4 -22
  704. data/src/core/ext/xds/xds_listener.cc +10 -4
  705. data/src/core/ext/xds/xds_listener.h +1 -1
  706. data/src/core/ext/xds/xds_resource_type.h +2 -2
  707. data/src/core/ext/xds/xds_route_config.cc +8 -5
  708. data/src/core/ext/xds/xds_route_config.h +1 -1
  709. data/src/core/lib/backoff/random_early_detection.h +5 -0
  710. data/src/core/lib/channel/channelz.cc +5 -4
  711. data/src/core/lib/channel/channelz_registry.cc +7 -6
  712. data/src/core/lib/channel/connected_channel.cc +82 -27
  713. data/src/core/lib/channel/promise_based_filter.cc +2 -8
  714. data/src/core/lib/debug/trace.cc +16 -7
  715. data/src/core/lib/debug/trace.h +12 -4
  716. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +38 -43
  717. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -0
  718. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +29 -0
  719. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +3 -0
  720. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +6 -1
  721. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +3 -0
  722. data/src/core/lib/event_engine/shim.cc +2 -0
  723. data/src/core/lib/event_engine/trace.cc +1 -0
  724. data/src/core/lib/event_engine/trace.h +6 -0
  725. data/src/core/lib/experiments/experiments.cc +3 -0
  726. data/src/core/lib/experiments/experiments.h +4 -1
  727. data/src/core/lib/gpr/posix/time.cc +5 -0
  728. data/src/core/lib/gprpp/status_helper.cc +2 -2
  729. data/src/core/lib/gprpp/validation_errors.cc +8 -3
  730. data/src/core/lib/gprpp/validation_errors.h +16 -9
  731. data/src/core/lib/iomgr/buffer_list.h +0 -1
  732. data/src/core/lib/iomgr/socket_utils_posix.cc +3 -0
  733. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  734. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -0
  735. data/src/core/lib/iomgr/tcp_server_posix.cc +39 -14
  736. data/src/core/lib/iomgr/tcp_server_utils_posix.h +12 -0
  737. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -0
  738. data/src/core/lib/iomgr/timer_generic.cc +17 -16
  739. data/src/core/lib/json/json.h +61 -113
  740. data/src/core/lib/json/json_object_loader.cc +20 -20
  741. data/src/core/lib/json/json_object_loader.h +8 -3
  742. data/src/core/lib/json/json_reader.cc +58 -38
  743. data/src/core/lib/json/json_reader.h +34 -0
  744. data/src/core/lib/json/json_util.cc +6 -6
  745. data/src/core/lib/json/json_util.h +5 -4
  746. data/src/core/lib/json/json_writer.cc +19 -19
  747. data/src/core/lib/json/json_writer.h +33 -0
  748. data/src/core/lib/load_balancing/lb_policy_registry.cc +7 -7
  749. data/src/core/lib/promise/pipe.h +7 -0
  750. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +35 -37
  751. data/src/core/lib/security/credentials/external/external_account_credentials.cc +60 -62
  752. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +22 -21
  753. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +28 -27
  754. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -2
  755. data/src/core/lib/security/credentials/jwt/json_token.cc +6 -4
  756. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +8 -5
  757. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +39 -38
  758. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -16
  759. data/src/core/lib/security/util/json_util.cc +5 -5
  760. data/src/core/lib/service_config/service_config_impl.cc +11 -5
  761. data/src/core/lib/slice/slice.h +2 -0
  762. data/src/core/lib/surface/call.cc +71 -26
  763. data/src/core/lib/surface/call.h +1 -5
  764. data/src/core/lib/surface/completion_queue.cc +2 -1
  765. data/src/core/lib/surface/server.cc +47 -19
  766. data/src/core/lib/surface/validate_metadata.cc +37 -22
  767. data/src/core/lib/surface/validate_metadata.h +13 -3
  768. data/src/core/lib/surface/version.cc +2 -2
  769. data/src/core/lib/transport/batch_builder.h +9 -1
  770. data/src/core/lib/transport/metadata_batch.h +2 -59
  771. data/src/core/lib/transport/metadata_compression_traits.h +67 -0
  772. data/src/core/lib/transport/simple_slice_based_metadata.h +48 -0
  773. data/src/core/lib/transport/transport.h +3 -0
  774. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -4
  775. data/src/ruby/lib/grpc/version.rb +1 -1
  776. data/third_party/abseil-cpp/absl/base/config.h +1 -1
  777. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +33 -47
  778. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +7 -4
  779. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +32 -2
  780. data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +11 -12
  781. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +826 -0
  782. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +10 -12
  783. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +8 -10
  784. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +2 -1
  785. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +2 -1
  786. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +18 -14
  787. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +17 -21
  788. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +7 -3
  789. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +3 -4
  790. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -72
  791. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +4 -2
  792. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +4 -3
  793. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +7 -3
  794. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +4 -2
  795. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
  796. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +8 -8
  797. data/third_party/boringssl-with-bazel/src/include/openssl/kyber.h +128 -0
  798. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +8 -1
  799. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +1 -1
  800. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +8 -12
  801. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1 -10
  802. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +9 -2
  803. data/third_party/boringssl-with-bazel/src/ssl/internal.h +17 -17
  804. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +8 -4
  805. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +2 -2
  806. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +72 -5
  807. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +19 -21
  808. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +2 -1
  809. data/third_party/upb/upb/{table_internal.h → alloc.h} +6 -6
  810. data/third_party/upb/upb/arena.h +4 -193
  811. data/third_party/upb/upb/array.h +4 -51
  812. data/third_party/upb/upb/base/descriptor_constants.h +104 -0
  813. data/third_party/upb/upb/base/log2.h +57 -0
  814. data/third_party/upb/upb/{status.c → base/status.c} +2 -7
  815. data/third_party/upb/upb/base/status.h +66 -0
  816. data/third_party/upb/upb/base/string_view.h +75 -0
  817. data/third_party/upb/upb/{array.c → collections/array.c} +67 -36
  818. data/third_party/upb/upb/collections/array.h +85 -0
  819. data/third_party/upb/upb/collections/array_internal.h +135 -0
  820. data/third_party/upb/upb/{map.c → collections/map.c} +53 -26
  821. data/third_party/upb/upb/collections/map.h +135 -0
  822. data/third_party/upb/upb/collections/map_gencode_util.h +78 -0
  823. data/third_party/upb/upb/collections/map_internal.h +170 -0
  824. data/third_party/upb/upb/collections/map_sorter.c +166 -0
  825. data/third_party/upb/upb/collections/map_sorter_internal.h +109 -0
  826. data/third_party/upb/upb/{message_value.h → collections/message_value.h} +12 -13
  827. data/third_party/upb/upb/decode.h +3 -62
  828. data/third_party/upb/upb/def.h +4 -384
  829. data/third_party/upb/upb/def.hpp +3 -411
  830. data/third_party/upb/upb/encode.h +3 -48
  831. data/third_party/upb/upb/extension_registry.h +3 -52
  832. data/third_party/upb/upb/{table.c → hash/common.c} +52 -110
  833. data/third_party/upb/upb/hash/common.h +199 -0
  834. data/third_party/upb/upb/hash/int_table.h +102 -0
  835. data/third_party/upb/upb/hash/str_table.h +161 -0
  836. data/third_party/upb/upb/{json_decode.c → json/decode.c} +63 -98
  837. data/third_party/upb/upb/json/decode.h +52 -0
  838. data/third_party/upb/upb/{json_encode.c → json/encode.c} +69 -45
  839. data/third_party/upb/upb/json/encode.h +70 -0
  840. data/third_party/upb/upb/json_decode.h +4 -15
  841. data/third_party/upb/upb/json_encode.h +4 -33
  842. data/third_party/upb/upb/lex/atoi.c +68 -0
  843. data/third_party/upb/upb/lex/atoi.h +53 -0
  844. data/third_party/upb/upb/{upb.c → lex/round_trip.c} +2 -11
  845. data/third_party/upb/upb/{internal/upb.h → lex/round_trip.h} +17 -30
  846. data/third_party/upb/upb/lex/strtod.c +97 -0
  847. data/third_party/upb/upb/lex/strtod.h +46 -0
  848. data/third_party/upb/upb/lex/unicode.c +57 -0
  849. data/third_party/upb/upb/lex/unicode.h +77 -0
  850. data/third_party/upb/upb/map.h +4 -85
  851. data/third_party/upb/upb/mem/alloc.c +47 -0
  852. data/third_party/upb/upb/mem/alloc.h +98 -0
  853. data/third_party/upb/upb/mem/arena.c +367 -0
  854. data/third_party/upb/upb/mem/arena.h +160 -0
  855. data/third_party/upb/upb/mem/arena_internal.h +114 -0
  856. data/third_party/upb/upb/message/accessors.c +68 -0
  857. data/third_party/upb/upb/message/accessors.h +379 -0
  858. data/third_party/upb/upb/message/accessors_internal.h +325 -0
  859. data/third_party/upb/upb/message/extension_internal.h +83 -0
  860. data/third_party/upb/upb/message/internal.h +135 -0
  861. data/third_party/upb/upb/message/message.c +180 -0
  862. data/third_party/upb/upb/message/message.h +69 -0
  863. data/third_party/upb/upb/mini_table/common.c +128 -0
  864. data/third_party/upb/upb/mini_table/common.h +170 -0
  865. data/third_party/upb/upb/mini_table/common_internal.h +111 -0
  866. data/third_party/upb/upb/{mini_table.c → mini_table/decode.c} +513 -533
  867. data/third_party/upb/upb/mini_table/decode.h +179 -0
  868. data/third_party/upb/upb/mini_table/encode.c +300 -0
  869. data/third_party/upb/upb/mini_table/encode_internal.h +111 -0
  870. data/third_party/upb/upb/{mini_table.hpp → mini_table/encode_internal.hpp} +32 -8
  871. data/third_party/upb/upb/mini_table/enum_internal.h +88 -0
  872. data/third_party/upb/upb/mini_table/extension_internal.h +47 -0
  873. data/third_party/upb/upb/{extension_registry.c → mini_table/extension_registry.c} +27 -24
  874. data/third_party/upb/upb/mini_table/extension_registry.h +104 -0
  875. data/third_party/upb/upb/mini_table/field_internal.h +192 -0
  876. data/third_party/upb/upb/mini_table/file_internal.h +47 -0
  877. data/third_party/upb/upb/mini_table/message_internal.h +136 -0
  878. data/third_party/upb/upb/mini_table/sub_internal.h +38 -0
  879. data/third_party/upb/upb/mini_table/types.h +40 -0
  880. data/third_party/upb/upb/mini_table.h +4 -157
  881. data/third_party/upb/upb/msg.h +3 -38
  882. data/third_party/upb/upb/port/atomic.h +101 -0
  883. data/third_party/upb/upb/{port_def.inc → port/def.inc} +94 -27
  884. data/third_party/upb/upb/{port_undef.inc → port/undef.inc} +13 -3
  885. data/third_party/upb/upb/{internal → port}/vsnprintf_compat.h +5 -7
  886. data/third_party/upb/upb/reflection/common.h +67 -0
  887. data/third_party/upb/upb/reflection/def.h +42 -0
  888. data/third_party/upb/upb/reflection/def.hpp +610 -0
  889. data/third_party/upb/upb/reflection/def_builder.c +357 -0
  890. data/third_party/upb/upb/reflection/def_builder_internal.h +157 -0
  891. data/third_party/upb/upb/reflection/def_pool.c +462 -0
  892. data/third_party/upb/upb/reflection/def_pool.h +108 -0
  893. data/third_party/upb/upb/reflection/def_pool_internal.h +77 -0
  894. data/third_party/upb/upb/reflection/def_type.c +50 -0
  895. data/third_party/upb/upb/reflection/def_type.h +81 -0
  896. data/third_party/upb/upb/reflection/desc_state.c +53 -0
  897. data/third_party/upb/upb/reflection/desc_state_internal.h +64 -0
  898. data/third_party/upb/upb/reflection/enum_def.c +310 -0
  899. data/third_party/upb/upb/reflection/enum_def.h +80 -0
  900. data/third_party/upb/upb/reflection/enum_def_internal.h +56 -0
  901. data/third_party/upb/upb/reflection/enum_reserved_range.c +84 -0
  902. data/third_party/upb/upb/reflection/enum_reserved_range.h +51 -0
  903. data/third_party/upb/upb/reflection/enum_reserved_range_internal.h +55 -0
  904. data/third_party/upb/upb/reflection/enum_value_def.c +144 -0
  905. data/third_party/upb/upb/reflection/enum_value_def.h +57 -0
  906. data/third_party/upb/upb/reflection/enum_value_def_internal.h +57 -0
  907. data/third_party/upb/upb/reflection/extension_range.c +93 -0
  908. data/third_party/upb/upb/reflection/extension_range.h +55 -0
  909. data/third_party/upb/upb/reflection/extension_range_internal.h +54 -0
  910. data/third_party/upb/upb/reflection/field_def.c +930 -0
  911. data/third_party/upb/upb/reflection/field_def.h +91 -0
  912. data/third_party/upb/upb/reflection/field_def_internal.h +76 -0
  913. data/third_party/upb/upb/reflection/file_def.c +370 -0
  914. data/third_party/upb/upb/reflection/file_def.h +77 -0
  915. data/third_party/upb/upb/reflection/file_def_internal.h +57 -0
  916. data/third_party/upb/upb/reflection/message.c +233 -0
  917. data/third_party/upb/upb/reflection/message.h +102 -0
  918. data/third_party/upb/upb/reflection/message.hpp +37 -0
  919. data/third_party/upb/upb/reflection/message_def.c +718 -0
  920. data/third_party/upb/upb/reflection/message_def.h +174 -0
  921. data/third_party/upb/upb/reflection/message_def_internal.h +63 -0
  922. data/third_party/upb/upb/reflection/message_reserved_range.c +81 -0
  923. data/third_party/upb/upb/reflection/message_reserved_range.h +51 -0
  924. data/third_party/upb/upb/reflection/message_reserved_range_internal.h +55 -0
  925. data/third_party/upb/upb/reflection/method_def.c +124 -0
  926. data/third_party/upb/upb/reflection/method_def.h +59 -0
  927. data/third_party/upb/upb/reflection/method_def_internal.h +53 -0
  928. data/third_party/upb/upb/reflection/oneof_def.c +226 -0
  929. data/third_party/upb/upb/reflection/oneof_def.h +66 -0
  930. data/third_party/upb/upb/reflection/oneof_def_internal.h +57 -0
  931. data/third_party/upb/upb/reflection/service_def.c +128 -0
  932. data/third_party/upb/upb/reflection/service_def.h +60 -0
  933. data/third_party/upb/upb/reflection/service_def_internal.h +53 -0
  934. data/third_party/upb/upb/reflection.h +4 -78
  935. data/third_party/upb/upb/reflection.hpp +3 -7
  936. data/third_party/upb/upb/status.h +4 -34
  937. data/third_party/upb/upb/{collections.h → string_view.h} +7 -7
  938. data/third_party/upb/upb/{text_encode.c → text/encode.c} +74 -70
  939. data/third_party/upb/upb/text/encode.h +69 -0
  940. data/third_party/upb/upb/text_encode.h +4 -32
  941. data/third_party/upb/upb/upb.h +6 -151
  942. data/third_party/upb/upb/upb.hpp +10 -18
  943. data/third_party/upb/upb/wire/common.h +44 -0
  944. data/third_party/upb/upb/wire/common_internal.h +50 -0
  945. data/third_party/upb/upb/wire/decode.c +1343 -0
  946. data/third_party/upb/upb/wire/decode.h +108 -0
  947. data/third_party/upb/upb/{decode_fast.c → wire/decode_fast.c} +184 -225
  948. data/third_party/upb/upb/{decode_fast.h → wire/decode_fast.h} +21 -7
  949. data/third_party/upb/upb/{internal/decode.h → wire/decode_internal.h} +44 -92
  950. data/third_party/upb/upb/{encode.c → wire/encode.c} +114 -95
  951. data/third_party/upb/upb/wire/encode.h +92 -0
  952. data/third_party/upb/upb/wire/eps_copy_input_stream.c +39 -0
  953. data/third_party/upb/upb/wire/eps_copy_input_stream.h +425 -0
  954. data/third_party/upb/upb/wire/reader.c +67 -0
  955. data/third_party/upb/upb/wire/reader.h +227 -0
  956. data/third_party/upb/upb/wire/swap_internal.h +63 -0
  957. data/third_party/upb/upb/wire/types.h +41 -0
  958. data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-neon.c +1 -1
  959. data/third_party/{upb/third_party/utf8_range → utf8_range}/utf8_range.h +12 -0
  960. metadata +157 -40
  961. data/src/core/ext/transport/chttp2/transport/context_list.cc +0 -71
  962. data/src/core/ext/transport/chttp2/transport/context_list.h +0 -54
  963. data/third_party/upb/upb/arena.c +0 -277
  964. data/third_party/upb/upb/decode.c +0 -1221
  965. data/third_party/upb/upb/def.c +0 -3269
  966. data/third_party/upb/upb/internal/table.h +0 -385
  967. data/third_party/upb/upb/msg.c +0 -368
  968. data/third_party/upb/upb/msg_internal.h +0 -837
  969. data/third_party/upb/upb/reflection.c +0 -323
  970. /data/third_party/{upb/third_party/utf8_range → utf8_range}/naive.c +0 -0
  971. /data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-sse.c +0 -0
@@ -1,3269 +0,0 @@
1
- /*
2
- * Copyright (c) 2009-2021, Google LLC
3
- * All rights reserved.
4
- *
5
- * Redistribution and use in source and binary forms, with or without
6
- * modification, are permitted provided that the following conditions are met:
7
- * * Redistributions of source code must retain the above copyright
8
- * notice, this list of conditions and the following disclaimer.
9
- * * Redistributions in binary form must reproduce the above copyright
10
- * notice, this list of conditions and the following disclaimer in the
11
- * documentation and/or other materials provided with the distribution.
12
- * * Neither the name of Google LLC nor the
13
- * names of its contributors may be used to endorse or promote products
14
- * derived from this software without specific prior written permission.
15
- *
16
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
- * ARE DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY DIRECT,
20
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
- */
27
-
28
- #include "upb/def.h"
29
-
30
- #include <ctype.h>
31
- #include <errno.h>
32
- #include <setjmp.h>
33
- #include <stdlib.h>
34
- #include <string.h>
35
-
36
- #include "google/protobuf/descriptor.upb.h"
37
- #include "upb/mini_table.h"
38
- #include "upb/reflection.h"
39
-
40
- /* Must be last. */
41
- #include "upb/port_def.inc"
42
-
43
- typedef struct {
44
- size_t len;
45
- char str[1]; /* Null-terminated string data follows. */
46
- } str_t;
47
-
48
- /* The upb core does not generally have a concept of default instances. However
49
- * for descriptor options we make an exception since the max size is known and
50
- * modest (<200 bytes). All types can share a default instance since it is
51
- * initialized to zeroes.
52
- *
53
- * We have to allocate an extra pointer for upb's internal metadata. */
54
- static const char opt_default_buf[_UPB_MAXOPT_SIZE + sizeof(void*)] = {0};
55
- static const char* opt_default = &opt_default_buf[sizeof(void*)];
56
-
57
- struct upb_FieldDef {
58
- const google_protobuf_FieldOptions* opts;
59
- const upb_FileDef* file;
60
- const upb_MessageDef* msgdef;
61
- const char* full_name;
62
- const char* json_name;
63
- union {
64
- int64_t sint;
65
- uint64_t uint;
66
- double dbl;
67
- float flt;
68
- bool boolean;
69
- str_t* str;
70
- } defaultval;
71
- union {
72
- const upb_OneofDef* oneof;
73
- const upb_MessageDef* extension_scope;
74
- } scope;
75
- union {
76
- const upb_MessageDef* msgdef;
77
- const upb_EnumDef* enumdef;
78
- const google_protobuf_FieldDescriptorProto* unresolved;
79
- } sub;
80
- uint32_t number_;
81
- uint16_t index_;
82
- uint16_t layout_index; /* Index into msgdef->layout->fields or file->exts */
83
- bool has_default;
84
- bool is_extension_;
85
- bool packed_;
86
- bool proto3_optional_;
87
- bool has_json_name_;
88
- upb_FieldType type_;
89
- upb_Label label_;
90
- #if UINTPTR_MAX == 0xffffffff
91
- uint32_t padding; // Increase size to a multiple of 8.
92
- #endif
93
- };
94
-
95
- struct upb_ExtensionRange {
96
- const google_protobuf_ExtensionRangeOptions* opts;
97
- int32_t start;
98
- int32_t end;
99
- };
100
-
101
- struct upb_MessageDef {
102
- const google_protobuf_MessageOptions* opts;
103
- const upb_MiniTable* layout;
104
- const upb_FileDef* file;
105
- const upb_MessageDef* containing_type;
106
- const char* full_name;
107
-
108
- /* Tables for looking up fields by number and name. */
109
- upb_inttable itof;
110
- upb_strtable ntof;
111
-
112
- /* All nested defs.
113
- * MEM: We could save some space here by putting nested defs in a contiguous
114
- * region and calculating counts from offsets or vice-versa. */
115
- const upb_FieldDef* fields;
116
- const upb_OneofDef* oneofs;
117
- const upb_ExtensionRange* ext_ranges;
118
- const upb_MessageDef* nested_msgs;
119
- const upb_EnumDef* nested_enums;
120
- const upb_FieldDef* nested_exts;
121
- int field_count;
122
- int real_oneof_count;
123
- int oneof_count;
124
- int ext_range_count;
125
- int nested_msg_count;
126
- int nested_enum_count;
127
- int nested_ext_count;
128
- bool in_message_set;
129
- upb_WellKnown well_known_type;
130
- #if UINTPTR_MAX == 0xffffffff
131
- uint32_t padding; // Increase size to a multiple of 8.
132
- #endif
133
- };
134
-
135
- struct upb_EnumDef {
136
- const google_protobuf_EnumOptions* opts;
137
- const upb_MiniTable_Enum* layout; // Only for proto2.
138
- const upb_FileDef* file;
139
- const upb_MessageDef* containing_type; // Could be merged with "file".
140
- const char* full_name;
141
- upb_strtable ntoi;
142
- upb_inttable iton;
143
- const upb_EnumValueDef* values;
144
- int value_count;
145
- int32_t defaultval;
146
- #if UINTPTR_MAX == 0xffffffff
147
- uint32_t padding; // Increase size to a multiple of 8.
148
- #endif
149
- };
150
-
151
- struct upb_EnumValueDef {
152
- const google_protobuf_EnumValueOptions* opts;
153
- const upb_EnumDef* parent;
154
- const char* full_name;
155
- int32_t number;
156
- };
157
-
158
- struct upb_OneofDef {
159
- const google_protobuf_OneofOptions* opts;
160
- const upb_MessageDef* parent;
161
- const char* full_name;
162
- int field_count;
163
- bool synthetic;
164
- const upb_FieldDef** fields;
165
- upb_strtable ntof;
166
- upb_inttable itof;
167
- #if UINTPTR_MAX == 0xffffffff
168
- uint32_t padding; // Increase size to a multiple of 8.
169
- #endif
170
- };
171
-
172
- struct upb_FileDef {
173
- const google_protobuf_FileOptions* opts;
174
- const char* name;
175
- const char* package;
176
-
177
- const upb_FileDef** deps;
178
- const int32_t* public_deps;
179
- const int32_t* weak_deps;
180
- const upb_MessageDef* top_lvl_msgs;
181
- const upb_EnumDef* top_lvl_enums;
182
- const upb_FieldDef* top_lvl_exts;
183
- const upb_ServiceDef* services;
184
- const upb_MiniTable_Extension** ext_layouts;
185
- const upb_DefPool* symtab;
186
-
187
- int dep_count;
188
- int public_dep_count;
189
- int weak_dep_count;
190
- int top_lvl_msg_count;
191
- int top_lvl_enum_count;
192
- int top_lvl_ext_count;
193
- int service_count;
194
- int ext_count; /* All exts in the file. */
195
- upb_Syntax syntax;
196
- };
197
-
198
- struct upb_MethodDef {
199
- const google_protobuf_MethodOptions* opts;
200
- upb_ServiceDef* service;
201
- const char* full_name;
202
- const upb_MessageDef* input_type;
203
- const upb_MessageDef* output_type;
204
- int index;
205
- bool client_streaming;
206
- bool server_streaming;
207
- };
208
-
209
- struct upb_ServiceDef {
210
- const google_protobuf_ServiceOptions* opts;
211
- const upb_FileDef* file;
212
- const char* full_name;
213
- upb_MethodDef* methods;
214
- int method_count;
215
- int index;
216
- };
217
-
218
- struct upb_DefPool {
219
- upb_Arena* arena;
220
- upb_strtable syms; /* full_name -> packed def ptr */
221
- upb_strtable files; /* file_name -> upb_FileDef* */
222
- upb_inttable exts; /* upb_MiniTable_Extension* -> upb_FieldDef* */
223
- upb_ExtensionRegistry* extreg;
224
- size_t bytes_loaded;
225
- };
226
-
227
- /* Inside a symtab we store tagged pointers to specific def types. */
228
- typedef enum {
229
- UPB_DEFTYPE_MASK = 7,
230
-
231
- /* Only inside symtab table. */
232
- UPB_DEFTYPE_EXT = 0,
233
- UPB_DEFTYPE_MSG = 1,
234
- UPB_DEFTYPE_ENUM = 2,
235
- UPB_DEFTYPE_ENUMVAL = 3,
236
- UPB_DEFTYPE_SERVICE = 4,
237
-
238
- /* Only inside message table. */
239
- UPB_DEFTYPE_FIELD = 0,
240
- UPB_DEFTYPE_ONEOF = 1,
241
- UPB_DEFTYPE_FIELD_JSONNAME = 2,
242
-
243
- /* Only inside file table. */
244
- UPB_DEFTYPE_FILE = 0,
245
- UPB_DEFTYPE_LAYOUT = 1
246
- } upb_deftype_t;
247
-
248
- #define FIELD_TYPE_UNSPECIFIED 0
249
-
250
- static upb_deftype_t deftype(upb_value v) {
251
- uintptr_t num = (uintptr_t)upb_value_getconstptr(v);
252
- return num & UPB_DEFTYPE_MASK;
253
- }
254
-
255
- static const void* unpack_def(upb_value v, upb_deftype_t type) {
256
- uintptr_t num = (uintptr_t)upb_value_getconstptr(v);
257
- return (num & UPB_DEFTYPE_MASK) == type
258
- ? (const void*)(num & ~UPB_DEFTYPE_MASK)
259
- : NULL;
260
- }
261
-
262
- static upb_value pack_def(const void* ptr, upb_deftype_t type) {
263
- // Our 3-bit pointer tagging requires all pointers to be multiples of 8.
264
- // The arena will always yield 8-byte-aligned addresses, however we put
265
- // the defs into arrays. For each element in the array to be 8-byte-aligned,
266
- // the sizes of each def type must also be a multiple of 8.
267
- //
268
- // If any of these asserts fail, we need to add or remove padding on 32-bit
269
- // machines (64-bit machines will have 8-byte alignment already due to
270
- // pointers, which all of these structs have).
271
- UPB_ASSERT((sizeof(upb_FieldDef) & UPB_DEFTYPE_MASK) == 0);
272
- UPB_ASSERT((sizeof(upb_MessageDef) & UPB_DEFTYPE_MASK) == 0);
273
- UPB_ASSERT((sizeof(upb_EnumDef) & UPB_DEFTYPE_MASK) == 0);
274
- UPB_ASSERT((sizeof(upb_EnumValueDef) & UPB_DEFTYPE_MASK) == 0);
275
- UPB_ASSERT((sizeof(upb_ServiceDef) & UPB_DEFTYPE_MASK) == 0);
276
- UPB_ASSERT((sizeof(upb_OneofDef) & UPB_DEFTYPE_MASK) == 0);
277
- uintptr_t num = (uintptr_t)ptr;
278
- UPB_ASSERT((num & UPB_DEFTYPE_MASK) == 0);
279
- num |= type;
280
- return upb_value_constptr((const void*)num);
281
- }
282
-
283
- /* isalpha() etc. from <ctype.h> are locale-dependent, which we don't want. */
284
- static bool upb_isbetween(uint8_t c, uint8_t low, uint8_t high) {
285
- return c >= low && c <= high;
286
- }
287
-
288
- static char upb_ascii_lower(char ch) {
289
- // Per ASCII this will lower-case a letter. If the result is a letter, the
290
- // input was definitely a letter. If the output is not a letter, this may
291
- // have transformed the character unpredictably.
292
- return ch | 0x20;
293
- }
294
-
295
- static bool upb_isletter(char c) {
296
- char lower = upb_ascii_lower(c);
297
- return upb_isbetween(lower, 'a', 'z') || c == '_';
298
- }
299
-
300
- static bool upb_isalphanum(char c) {
301
- return upb_isletter(c) || upb_isbetween(c, '0', '9');
302
- }
303
-
304
- static const char* shortdefname(const char* fullname) {
305
- const char* p;
306
-
307
- if (fullname == NULL) {
308
- return NULL;
309
- } else if ((p = strrchr(fullname, '.')) == NULL) {
310
- /* No '.' in the name, return the full string. */
311
- return fullname;
312
- } else {
313
- /* Return one past the last '.'. */
314
- return p + 1;
315
- }
316
- }
317
-
318
- /* All submessage fields are lower than all other fields.
319
- * Secondly, fields are increasing in order. */
320
- uint32_t field_rank(const upb_FieldDef* f) {
321
- uint32_t ret = upb_FieldDef_Number(f);
322
- const uint32_t high_bit = 1 << 30;
323
- UPB_ASSERT(ret < high_bit);
324
- if (!upb_FieldDef_IsSubMessage(f)) ret |= high_bit;
325
- return ret;
326
- }
327
-
328
- int cmp_fields(const void* p1, const void* p2) {
329
- const upb_FieldDef* f1 = *(upb_FieldDef* const*)p1;
330
- const upb_FieldDef* f2 = *(upb_FieldDef* const*)p2;
331
- return field_rank(f1) - field_rank(f2);
332
- }
333
-
334
- static void upb_Status_setoom(upb_Status* status) {
335
- upb_Status_SetErrorMessage(status, "out of memory");
336
- }
337
-
338
- static void assign_msg_wellknowntype(upb_MessageDef* m) {
339
- const char* name = upb_MessageDef_FullName(m);
340
- if (name == NULL) {
341
- m->well_known_type = kUpb_WellKnown_Unspecified;
342
- return;
343
- }
344
- if (!strcmp(name, "google.protobuf.Any")) {
345
- m->well_known_type = kUpb_WellKnown_Any;
346
- } else if (!strcmp(name, "google.protobuf.FieldMask")) {
347
- m->well_known_type = kUpb_WellKnown_FieldMask;
348
- } else if (!strcmp(name, "google.protobuf.Duration")) {
349
- m->well_known_type = kUpb_WellKnown_Duration;
350
- } else if (!strcmp(name, "google.protobuf.Timestamp")) {
351
- m->well_known_type = kUpb_WellKnown_Timestamp;
352
- } else if (!strcmp(name, "google.protobuf.DoubleValue")) {
353
- m->well_known_type = kUpb_WellKnown_DoubleValue;
354
- } else if (!strcmp(name, "google.protobuf.FloatValue")) {
355
- m->well_known_type = kUpb_WellKnown_FloatValue;
356
- } else if (!strcmp(name, "google.protobuf.Int64Value")) {
357
- m->well_known_type = kUpb_WellKnown_Int64Value;
358
- } else if (!strcmp(name, "google.protobuf.UInt64Value")) {
359
- m->well_known_type = kUpb_WellKnown_UInt64Value;
360
- } else if (!strcmp(name, "google.protobuf.Int32Value")) {
361
- m->well_known_type = kUpb_WellKnown_Int32Value;
362
- } else if (!strcmp(name, "google.protobuf.UInt32Value")) {
363
- m->well_known_type = kUpb_WellKnown_UInt32Value;
364
- } else if (!strcmp(name, "google.protobuf.BoolValue")) {
365
- m->well_known_type = kUpb_WellKnown_BoolValue;
366
- } else if (!strcmp(name, "google.protobuf.StringValue")) {
367
- m->well_known_type = kUpb_WellKnown_StringValue;
368
- } else if (!strcmp(name, "google.protobuf.BytesValue")) {
369
- m->well_known_type = kUpb_WellKnown_BytesValue;
370
- } else if (!strcmp(name, "google.protobuf.Value")) {
371
- m->well_known_type = kUpb_WellKnown_Value;
372
- } else if (!strcmp(name, "google.protobuf.ListValue")) {
373
- m->well_known_type = kUpb_WellKnown_ListValue;
374
- } else if (!strcmp(name, "google.protobuf.Struct")) {
375
- m->well_known_type = kUpb_WellKnown_Struct;
376
- } else {
377
- m->well_known_type = kUpb_WellKnown_Unspecified;
378
- }
379
- }
380
-
381
- /* upb_EnumDef ****************************************************************/
382
-
383
- const google_protobuf_EnumOptions* upb_EnumDef_Options(const upb_EnumDef* e) {
384
- return e->opts;
385
- }
386
-
387
- bool upb_EnumDef_HasOptions(const upb_EnumDef* e) {
388
- return e->opts != (void*)opt_default;
389
- }
390
-
391
- const char* upb_EnumDef_FullName(const upb_EnumDef* e) { return e->full_name; }
392
-
393
- const char* upb_EnumDef_Name(const upb_EnumDef* e) {
394
- return shortdefname(e->full_name);
395
- }
396
-
397
- const upb_FileDef* upb_EnumDef_File(const upb_EnumDef* e) { return e->file; }
398
-
399
- const upb_MessageDef* upb_EnumDef_ContainingType(const upb_EnumDef* e) {
400
- return e->containing_type;
401
- }
402
-
403
- int32_t upb_EnumDef_Default(const upb_EnumDef* e) {
404
- UPB_ASSERT(upb_EnumDef_FindValueByNumber(e, e->defaultval));
405
- return e->defaultval;
406
- }
407
-
408
- int upb_EnumDef_ValueCount(const upb_EnumDef* e) { return e->value_count; }
409
-
410
- const upb_EnumValueDef* upb_EnumDef_FindValueByNameWithSize(
411
- const upb_EnumDef* def, const char* name, size_t len) {
412
- upb_value v;
413
- return upb_strtable_lookup2(&def->ntoi, name, len, &v)
414
- ? upb_value_getconstptr(v)
415
- : NULL;
416
- }
417
-
418
- const upb_EnumValueDef* upb_EnumDef_FindValueByNumber(const upb_EnumDef* def,
419
- int32_t num) {
420
- upb_value v;
421
- return upb_inttable_lookup(&def->iton, num, &v) ? upb_value_getconstptr(v)
422
- : NULL;
423
- }
424
-
425
- bool upb_EnumDef_CheckNumber(const upb_EnumDef* e, int32_t num) {
426
- // We could use upb_EnumDef_FindValueByNumber(e, num) != NULL, but we expect
427
- // this to be faster (especially for small numbers).
428
- return upb_MiniTable_Enum_CheckValue(e->layout, num);
429
- }
430
-
431
- const upb_EnumValueDef* upb_EnumDef_Value(const upb_EnumDef* e, int i) {
432
- UPB_ASSERT(0 <= i && i < e->value_count);
433
- return &e->values[i];
434
- }
435
-
436
- /* upb_EnumValueDef ***********************************************************/
437
-
438
- const google_protobuf_EnumValueOptions* upb_EnumValueDef_Options(
439
- const upb_EnumValueDef* e) {
440
- return e->opts;
441
- }
442
-
443
- bool upb_EnumValueDef_HasOptions(const upb_EnumValueDef* e) {
444
- return e->opts != (void*)opt_default;
445
- }
446
-
447
- const upb_EnumDef* upb_EnumValueDef_Enum(const upb_EnumValueDef* ev) {
448
- return ev->parent;
449
- }
450
-
451
- const char* upb_EnumValueDef_FullName(const upb_EnumValueDef* ev) {
452
- return ev->full_name;
453
- }
454
-
455
- const char* upb_EnumValueDef_Name(const upb_EnumValueDef* ev) {
456
- return shortdefname(ev->full_name);
457
- }
458
-
459
- int32_t upb_EnumValueDef_Number(const upb_EnumValueDef* ev) {
460
- return ev->number;
461
- }
462
-
463
- uint32_t upb_EnumValueDef_Index(const upb_EnumValueDef* ev) {
464
- // Compute index in our parent's array.
465
- return ev - ev->parent->values;
466
- }
467
-
468
- /* upb_ExtensionRange
469
- * ***************************************************************/
470
-
471
- const google_protobuf_ExtensionRangeOptions* upb_ExtensionRange_Options(
472
- const upb_ExtensionRange* r) {
473
- return r->opts;
474
- }
475
-
476
- bool upb_ExtensionRange_HasOptions(const upb_ExtensionRange* r) {
477
- return r->opts != (void*)opt_default;
478
- }
479
-
480
- int32_t upb_ExtensionRange_Start(const upb_ExtensionRange* e) {
481
- return e->start;
482
- }
483
-
484
- int32_t upb_ExtensionRange_End(const upb_ExtensionRange* e) { return e->end; }
485
-
486
- /* upb_FieldDef ***************************************************************/
487
-
488
- const google_protobuf_FieldOptions* upb_FieldDef_Options(
489
- const upb_FieldDef* f) {
490
- return f->opts;
491
- }
492
-
493
- bool upb_FieldDef_HasOptions(const upb_FieldDef* f) {
494
- return f->opts != (void*)opt_default;
495
- }
496
-
497
- const char* upb_FieldDef_FullName(const upb_FieldDef* f) {
498
- return f->full_name;
499
- }
500
-
501
- upb_CType upb_FieldDef_CType(const upb_FieldDef* f) {
502
- switch (f->type_) {
503
- case kUpb_FieldType_Double:
504
- return kUpb_CType_Double;
505
- case kUpb_FieldType_Float:
506
- return kUpb_CType_Float;
507
- case kUpb_FieldType_Int64:
508
- case kUpb_FieldType_SInt64:
509
- case kUpb_FieldType_SFixed64:
510
- return kUpb_CType_Int64;
511
- case kUpb_FieldType_Int32:
512
- case kUpb_FieldType_SFixed32:
513
- case kUpb_FieldType_SInt32:
514
- return kUpb_CType_Int32;
515
- case kUpb_FieldType_UInt64:
516
- case kUpb_FieldType_Fixed64:
517
- return kUpb_CType_UInt64;
518
- case kUpb_FieldType_UInt32:
519
- case kUpb_FieldType_Fixed32:
520
- return kUpb_CType_UInt32;
521
- case kUpb_FieldType_Enum:
522
- return kUpb_CType_Enum;
523
- case kUpb_FieldType_Bool:
524
- return kUpb_CType_Bool;
525
- case kUpb_FieldType_String:
526
- return kUpb_CType_String;
527
- case kUpb_FieldType_Bytes:
528
- return kUpb_CType_Bytes;
529
- case kUpb_FieldType_Group:
530
- case kUpb_FieldType_Message:
531
- return kUpb_CType_Message;
532
- }
533
- UPB_UNREACHABLE();
534
- }
535
-
536
- upb_FieldType upb_FieldDef_Type(const upb_FieldDef* f) { return f->type_; }
537
-
538
- uint32_t upb_FieldDef_Index(const upb_FieldDef* f) { return f->index_; }
539
-
540
- upb_Label upb_FieldDef_Label(const upb_FieldDef* f) { return f->label_; }
541
-
542
- uint32_t upb_FieldDef_Number(const upb_FieldDef* f) { return f->number_; }
543
-
544
- bool upb_FieldDef_IsExtension(const upb_FieldDef* f) {
545
- return f->is_extension_;
546
- }
547
-
548
- bool upb_FieldDef_IsPacked(const upb_FieldDef* f) { return f->packed_; }
549
-
550
- const char* upb_FieldDef_Name(const upb_FieldDef* f) {
551
- return shortdefname(f->full_name);
552
- }
553
-
554
- const char* upb_FieldDef_JsonName(const upb_FieldDef* f) {
555
- return f->json_name;
556
- }
557
-
558
- bool upb_FieldDef_HasJsonName(const upb_FieldDef* f) {
559
- return f->has_json_name_;
560
- }
561
-
562
- const upb_FileDef* upb_FieldDef_File(const upb_FieldDef* f) { return f->file; }
563
-
564
- const upb_MessageDef* upb_FieldDef_ContainingType(const upb_FieldDef* f) {
565
- return f->msgdef;
566
- }
567
-
568
- const upb_MessageDef* upb_FieldDef_ExtensionScope(const upb_FieldDef* f) {
569
- return f->is_extension_ ? f->scope.extension_scope : NULL;
570
- }
571
-
572
- const upb_OneofDef* upb_FieldDef_ContainingOneof(const upb_FieldDef* f) {
573
- return f->is_extension_ ? NULL : f->scope.oneof;
574
- }
575
-
576
- const upb_OneofDef* upb_FieldDef_RealContainingOneof(const upb_FieldDef* f) {
577
- const upb_OneofDef* oneof = upb_FieldDef_ContainingOneof(f);
578
- if (!oneof || upb_OneofDef_IsSynthetic(oneof)) return NULL;
579
- return oneof;
580
- }
581
-
582
- upb_MessageValue upb_FieldDef_Default(const upb_FieldDef* f) {
583
- UPB_ASSERT(!upb_FieldDef_IsSubMessage(f));
584
- upb_MessageValue ret;
585
-
586
- switch (upb_FieldDef_CType(f)) {
587
- case kUpb_CType_Bool:
588
- return (upb_MessageValue){.bool_val = f->defaultval.boolean};
589
- case kUpb_CType_Int64:
590
- return (upb_MessageValue){.int64_val = f->defaultval.sint};
591
- case kUpb_CType_UInt64:
592
- return (upb_MessageValue){.uint64_val = f->defaultval.uint};
593
- case kUpb_CType_Enum:
594
- case kUpb_CType_Int32:
595
- return (upb_MessageValue){.int32_val = (int32_t)f->defaultval.sint};
596
- case kUpb_CType_UInt32:
597
- return (upb_MessageValue){.uint32_val = (uint32_t)f->defaultval.uint};
598
- case kUpb_CType_Float:
599
- return (upb_MessageValue){.float_val = f->defaultval.flt};
600
- case kUpb_CType_Double:
601
- return (upb_MessageValue){.double_val = f->defaultval.dbl};
602
- case kUpb_CType_String:
603
- case kUpb_CType_Bytes: {
604
- str_t* str = f->defaultval.str;
605
- if (str) {
606
- return (upb_MessageValue){
607
- .str_val = (upb_StringView){.data = str->str, .size = str->len}};
608
- } else {
609
- return (upb_MessageValue){
610
- .str_val = (upb_StringView){.data = NULL, .size = 0}};
611
- }
612
- }
613
- default:
614
- UPB_UNREACHABLE();
615
- }
616
-
617
- return ret;
618
- }
619
-
620
- const upb_MessageDef* upb_FieldDef_MessageSubDef(const upb_FieldDef* f) {
621
- return upb_FieldDef_CType(f) == kUpb_CType_Message ? f->sub.msgdef : NULL;
622
- }
623
-
624
- const upb_EnumDef* upb_FieldDef_EnumSubDef(const upb_FieldDef* f) {
625
- return upb_FieldDef_CType(f) == kUpb_CType_Enum ? f->sub.enumdef : NULL;
626
- }
627
-
628
- const upb_MiniTable_Field* upb_FieldDef_MiniTable(const upb_FieldDef* f) {
629
- UPB_ASSERT(!upb_FieldDef_IsExtension(f));
630
- return &f->msgdef->layout->fields[f->layout_index];
631
- }
632
-
633
- const upb_MiniTable_Extension* _upb_FieldDef_ExtensionMiniTable(
634
- const upb_FieldDef* f) {
635
- UPB_ASSERT(upb_FieldDef_IsExtension(f));
636
- return f->file->ext_layouts[f->layout_index];
637
- }
638
-
639
- bool _upb_FieldDef_IsProto3Optional(const upb_FieldDef* f) {
640
- return f->proto3_optional_;
641
- }
642
-
643
- bool upb_FieldDef_IsSubMessage(const upb_FieldDef* f) {
644
- return upb_FieldDef_CType(f) == kUpb_CType_Message;
645
- }
646
-
647
- bool upb_FieldDef_IsString(const upb_FieldDef* f) {
648
- return upb_FieldDef_CType(f) == kUpb_CType_String ||
649
- upb_FieldDef_CType(f) == kUpb_CType_Bytes;
650
- }
651
-
652
- bool upb_FieldDef_IsOptional(const upb_FieldDef* f) {
653
- return upb_FieldDef_Label(f) == kUpb_Label_Optional;
654
- }
655
-
656
- bool upb_FieldDef_IsRequired(const upb_FieldDef* f) {
657
- return upb_FieldDef_Label(f) == kUpb_Label_Required;
658
- }
659
-
660
- bool upb_FieldDef_IsRepeated(const upb_FieldDef* f) {
661
- return upb_FieldDef_Label(f) == kUpb_Label_Repeated;
662
- }
663
-
664
- bool upb_FieldDef_IsPrimitive(const upb_FieldDef* f) {
665
- return !upb_FieldDef_IsString(f) && !upb_FieldDef_IsSubMessage(f);
666
- }
667
-
668
- bool upb_FieldDef_IsMap(const upb_FieldDef* f) {
669
- return upb_FieldDef_IsRepeated(f) && upb_FieldDef_IsSubMessage(f) &&
670
- upb_MessageDef_IsMapEntry(upb_FieldDef_MessageSubDef(f));
671
- }
672
-
673
- bool upb_FieldDef_HasDefault(const upb_FieldDef* f) { return f->has_default; }
674
-
675
- bool upb_FieldDef_HasSubDef(const upb_FieldDef* f) {
676
- return upb_FieldDef_IsSubMessage(f) ||
677
- upb_FieldDef_CType(f) == kUpb_CType_Enum;
678
- }
679
-
680
- bool upb_FieldDef_HasPresence(const upb_FieldDef* f) {
681
- if (upb_FieldDef_IsRepeated(f)) return false;
682
- return upb_FieldDef_IsSubMessage(f) || upb_FieldDef_ContainingOneof(f) ||
683
- f->file->syntax == kUpb_Syntax_Proto2;
684
- }
685
-
686
- static bool between(int32_t x, int32_t low, int32_t high) {
687
- return x >= low && x <= high;
688
- }
689
-
690
- bool upb_FieldDef_checklabel(int32_t label) { return between(label, 1, 3); }
691
- bool upb_FieldDef_checktype(int32_t type) { return between(type, 1, 11); }
692
- bool upb_FieldDef_checkintfmt(int32_t fmt) { return between(fmt, 1, 3); }
693
-
694
- bool upb_FieldDef_checkdescriptortype(int32_t type) {
695
- return between(type, 1, 18);
696
- }
697
-
698
- /* upb_MessageDef
699
- * *****************************************************************/
700
-
701
- const google_protobuf_MessageOptions* upb_MessageDef_Options(
702
- const upb_MessageDef* m) {
703
- return m->opts;
704
- }
705
-
706
- bool upb_MessageDef_HasOptions(const upb_MessageDef* m) {
707
- return m->opts != (void*)opt_default;
708
- }
709
-
710
- const char* upb_MessageDef_FullName(const upb_MessageDef* m) {
711
- return m->full_name;
712
- }
713
-
714
- const upb_FileDef* upb_MessageDef_File(const upb_MessageDef* m) {
715
- return m->file;
716
- }
717
-
718
- const upb_MessageDef* upb_MessageDef_ContainingType(const upb_MessageDef* m) {
719
- return m->containing_type;
720
- }
721
-
722
- const char* upb_MessageDef_Name(const upb_MessageDef* m) {
723
- return shortdefname(m->full_name);
724
- }
725
-
726
- upb_Syntax upb_MessageDef_Syntax(const upb_MessageDef* m) {
727
- return m->file->syntax;
728
- }
729
-
730
- const upb_FieldDef* upb_MessageDef_FindFieldByNumber(const upb_MessageDef* m,
731
- uint32_t i) {
732
- upb_value val;
733
- return upb_inttable_lookup(&m->itof, i, &val) ? upb_value_getconstptr(val)
734
- : NULL;
735
- }
736
-
737
- const upb_FieldDef* upb_MessageDef_FindFieldByNameWithSize(
738
- const upb_MessageDef* m, const char* name, size_t len) {
739
- upb_value val;
740
-
741
- if (!upb_strtable_lookup2(&m->ntof, name, len, &val)) {
742
- return NULL;
743
- }
744
-
745
- return unpack_def(val, UPB_DEFTYPE_FIELD);
746
- }
747
-
748
- const upb_OneofDef* upb_MessageDef_FindOneofByNameWithSize(
749
- const upb_MessageDef* m, const char* name, size_t len) {
750
- upb_value val;
751
-
752
- if (!upb_strtable_lookup2(&m->ntof, name, len, &val)) {
753
- return NULL;
754
- }
755
-
756
- return unpack_def(val, UPB_DEFTYPE_ONEOF);
757
- }
758
-
759
- bool upb_MessageDef_FindByNameWithSize(const upb_MessageDef* m,
760
- const char* name, size_t len,
761
- const upb_FieldDef** out_f,
762
- const upb_OneofDef** out_o) {
763
- upb_value val;
764
-
765
- if (!upb_strtable_lookup2(&m->ntof, name, len, &val)) {
766
- return false;
767
- }
768
-
769
- const upb_FieldDef* f = unpack_def(val, UPB_DEFTYPE_FIELD);
770
- const upb_OneofDef* o = unpack_def(val, UPB_DEFTYPE_ONEOF);
771
- if (out_f) *out_f = f;
772
- if (out_o) *out_o = o;
773
- return f || o; /* False if this was a JSON name. */
774
- }
775
-
776
- const upb_FieldDef* upb_MessageDef_FindByJsonNameWithSize(
777
- const upb_MessageDef* m, const char* name, size_t len) {
778
- upb_value val;
779
- const upb_FieldDef* f;
780
-
781
- if (!upb_strtable_lookup2(&m->ntof, name, len, &val)) {
782
- return NULL;
783
- }
784
-
785
- f = unpack_def(val, UPB_DEFTYPE_FIELD);
786
- if (!f) f = unpack_def(val, UPB_DEFTYPE_FIELD_JSONNAME);
787
-
788
- return f;
789
- }
790
-
791
- int upb_MessageDef_numfields(const upb_MessageDef* m) { return m->field_count; }
792
-
793
- int upb_MessageDef_numoneofs(const upb_MessageDef* m) { return m->oneof_count; }
794
-
795
- int upb_MessageDef_numrealoneofs(const upb_MessageDef* m) {
796
- return m->real_oneof_count;
797
- }
798
-
799
- int upb_MessageDef_ExtensionRangeCount(const upb_MessageDef* m) {
800
- return m->ext_range_count;
801
- }
802
-
803
- int upb_MessageDef_FieldCount(const upb_MessageDef* m) {
804
- return m->field_count;
805
- }
806
-
807
- int upb_MessageDef_OneofCount(const upb_MessageDef* m) {
808
- return m->oneof_count;
809
- }
810
-
811
- int upb_MessageDef_NestedMessageCount(const upb_MessageDef* m) {
812
- return m->nested_msg_count;
813
- }
814
-
815
- int upb_MessageDef_NestedEnumCount(const upb_MessageDef* m) {
816
- return m->nested_enum_count;
817
- }
818
-
819
- int upb_MessageDef_NestedExtensionCount(const upb_MessageDef* m) {
820
- return m->nested_ext_count;
821
- }
822
-
823
- int upb_MessageDef_realoneofcount(const upb_MessageDef* m) {
824
- return m->real_oneof_count;
825
- }
826
-
827
- const upb_MiniTable* upb_MessageDef_MiniTable(const upb_MessageDef* m) {
828
- return m->layout;
829
- }
830
-
831
- const upb_ExtensionRange* upb_MessageDef_ExtensionRange(const upb_MessageDef* m,
832
- int i) {
833
- UPB_ASSERT(0 <= i && i < m->ext_range_count);
834
- return &m->ext_ranges[i];
835
- }
836
-
837
- const upb_FieldDef* upb_MessageDef_Field(const upb_MessageDef* m, int i) {
838
- UPB_ASSERT(0 <= i && i < m->field_count);
839
- return &m->fields[i];
840
- }
841
-
842
- const upb_OneofDef* upb_MessageDef_Oneof(const upb_MessageDef* m, int i) {
843
- UPB_ASSERT(0 <= i && i < m->oneof_count);
844
- return &m->oneofs[i];
845
- }
846
-
847
- const upb_MessageDef* upb_MessageDef_NestedMessage(const upb_MessageDef* m,
848
- int i) {
849
- UPB_ASSERT(0 <= i && i < m->nested_msg_count);
850
- return &m->nested_msgs[i];
851
- }
852
-
853
- const upb_EnumDef* upb_MessageDef_NestedEnum(const upb_MessageDef* m, int i) {
854
- UPB_ASSERT(0 <= i && i < m->nested_enum_count);
855
- return &m->nested_enums[i];
856
- }
857
-
858
- const upb_FieldDef* upb_MessageDef_NestedExtension(const upb_MessageDef* m,
859
- int i) {
860
- UPB_ASSERT(0 <= i && i < m->nested_ext_count);
861
- return &m->nested_exts[i];
862
- }
863
-
864
- upb_WellKnown upb_MessageDef_WellKnownType(const upb_MessageDef* m) {
865
- return m->well_known_type;
866
- }
867
-
868
- /* upb_OneofDef ***************************************************************/
869
-
870
- const google_protobuf_OneofOptions* upb_OneofDef_Options(
871
- const upb_OneofDef* o) {
872
- return o->opts;
873
- }
874
-
875
- bool upb_OneofDef_HasOptions(const upb_OneofDef* o) {
876
- return o->opts != (void*)opt_default;
877
- }
878
-
879
- const char* upb_OneofDef_Name(const upb_OneofDef* o) {
880
- return shortdefname(o->full_name);
881
- }
882
-
883
- const upb_MessageDef* upb_OneofDef_ContainingType(const upb_OneofDef* o) {
884
- return o->parent;
885
- }
886
-
887
- int upb_OneofDef_FieldCount(const upb_OneofDef* o) { return o->field_count; }
888
-
889
- const upb_FieldDef* upb_OneofDef_Field(const upb_OneofDef* o, int i) {
890
- UPB_ASSERT(i < o->field_count);
891
- return o->fields[i];
892
- }
893
-
894
- int upb_OneofDef_numfields(const upb_OneofDef* o) { return o->field_count; }
895
-
896
- uint32_t upb_OneofDef_Index(const upb_OneofDef* o) {
897
- // Compute index in our parent's array.
898
- return o - o->parent->oneofs;
899
- }
900
-
901
- bool upb_OneofDef_IsSynthetic(const upb_OneofDef* o) { return o->synthetic; }
902
-
903
- const upb_FieldDef* upb_OneofDef_LookupNameWithSize(const upb_OneofDef* o,
904
- const char* name,
905
- size_t length) {
906
- upb_value val;
907
- return upb_strtable_lookup2(&o->ntof, name, length, &val)
908
- ? upb_value_getptr(val)
909
- : NULL;
910
- }
911
-
912
- const upb_FieldDef* upb_OneofDef_LookupNumber(const upb_OneofDef* o,
913
- uint32_t num) {
914
- upb_value val;
915
- return upb_inttable_lookup(&o->itof, num, &val) ? upb_value_getptr(val)
916
- : NULL;
917
- }
918
-
919
- /* upb_FileDef ****************************************************************/
920
-
921
- const google_protobuf_FileOptions* upb_FileDef_Options(const upb_FileDef* f) {
922
- return f->opts;
923
- }
924
-
925
- bool upb_FileDef_HasOptions(const upb_FileDef* f) {
926
- return f->opts != (void*)opt_default;
927
- }
928
-
929
- const char* upb_FileDef_Name(const upb_FileDef* f) { return f->name; }
930
-
931
- const char* upb_FileDef_Package(const upb_FileDef* f) { return f->package; }
932
-
933
- upb_Syntax upb_FileDef_Syntax(const upb_FileDef* f) { return f->syntax; }
934
-
935
- int upb_FileDef_TopLevelMessageCount(const upb_FileDef* f) {
936
- return f->top_lvl_msg_count;
937
- }
938
-
939
- int upb_FileDef_DependencyCount(const upb_FileDef* f) { return f->dep_count; }
940
-
941
- int upb_FileDef_PublicDependencyCount(const upb_FileDef* f) {
942
- return f->public_dep_count;
943
- }
944
-
945
- int upb_FileDef_WeakDependencyCount(const upb_FileDef* f) {
946
- return f->weak_dep_count;
947
- }
948
-
949
- const int32_t* _upb_FileDef_PublicDependencyIndexes(const upb_FileDef* f) {
950
- return f->public_deps;
951
- }
952
-
953
- const int32_t* _upb_FileDef_WeakDependencyIndexes(const upb_FileDef* f) {
954
- return f->weak_deps;
955
- }
956
-
957
- int upb_FileDef_TopLevelEnumCount(const upb_FileDef* f) {
958
- return f->top_lvl_enum_count;
959
- }
960
-
961
- int upb_FileDef_TopLevelExtensionCount(const upb_FileDef* f) {
962
- return f->top_lvl_ext_count;
963
- }
964
-
965
- int upb_FileDef_ServiceCount(const upb_FileDef* f) { return f->service_count; }
966
-
967
- const upb_FileDef* upb_FileDef_Dependency(const upb_FileDef* f, int i) {
968
- UPB_ASSERT(0 <= i && i < f->dep_count);
969
- return f->deps[i];
970
- }
971
-
972
- const upb_FileDef* upb_FileDef_PublicDependency(const upb_FileDef* f, int i) {
973
- UPB_ASSERT(0 <= i && i < f->public_dep_count);
974
- return f->deps[f->public_deps[i]];
975
- }
976
-
977
- const upb_FileDef* upb_FileDef_WeakDependency(const upb_FileDef* f, int i) {
978
- UPB_ASSERT(0 <= i && i < f->public_dep_count);
979
- return f->deps[f->weak_deps[i]];
980
- }
981
-
982
- const upb_MessageDef* upb_FileDef_TopLevelMessage(const upb_FileDef* f, int i) {
983
- UPB_ASSERT(0 <= i && i < f->top_lvl_msg_count);
984
- return &f->top_lvl_msgs[i];
985
- }
986
-
987
- const upb_EnumDef* upb_FileDef_TopLevelEnum(const upb_FileDef* f, int i) {
988
- UPB_ASSERT(0 <= i && i < f->top_lvl_enum_count);
989
- return &f->top_lvl_enums[i];
990
- }
991
-
992
- const upb_FieldDef* upb_FileDef_TopLevelExtension(const upb_FileDef* f, int i) {
993
- UPB_ASSERT(0 <= i && i < f->top_lvl_ext_count);
994
- return &f->top_lvl_exts[i];
995
- }
996
-
997
- const upb_ServiceDef* upb_FileDef_Service(const upb_FileDef* f, int i) {
998
- UPB_ASSERT(0 <= i && i < f->service_count);
999
- return &f->services[i];
1000
- }
1001
-
1002
- const upb_DefPool* upb_FileDef_Pool(const upb_FileDef* f) { return f->symtab; }
1003
-
1004
- /* upb_MethodDef **************************************************************/
1005
-
1006
- const google_protobuf_MethodOptions* upb_MethodDef_Options(
1007
- const upb_MethodDef* m) {
1008
- return m->opts;
1009
- }
1010
-
1011
- bool upb_MethodDef_HasOptions(const upb_MethodDef* m) {
1012
- return m->opts != (void*)opt_default;
1013
- }
1014
-
1015
- const char* upb_MethodDef_FullName(const upb_MethodDef* m) {
1016
- return m->full_name;
1017
- }
1018
-
1019
- int upb_MethodDef_Index(const upb_MethodDef* m) { return m->index; }
1020
-
1021
- const char* upb_MethodDef_Name(const upb_MethodDef* m) {
1022
- return shortdefname(m->full_name);
1023
- }
1024
-
1025
- const upb_ServiceDef* upb_MethodDef_Service(const upb_MethodDef* m) {
1026
- return m->service;
1027
- }
1028
-
1029
- const upb_MessageDef* upb_MethodDef_InputType(const upb_MethodDef* m) {
1030
- return m->input_type;
1031
- }
1032
-
1033
- const upb_MessageDef* upb_MethodDef_OutputType(const upb_MethodDef* m) {
1034
- return m->output_type;
1035
- }
1036
-
1037
- bool upb_MethodDef_ClientStreaming(const upb_MethodDef* m) {
1038
- return m->client_streaming;
1039
- }
1040
-
1041
- bool upb_MethodDef_ServerStreaming(const upb_MethodDef* m) {
1042
- return m->server_streaming;
1043
- }
1044
-
1045
- /* upb_ServiceDef *************************************************************/
1046
-
1047
- const google_protobuf_ServiceOptions* upb_ServiceDef_Options(
1048
- const upb_ServiceDef* s) {
1049
- return s->opts;
1050
- }
1051
-
1052
- bool upb_ServiceDef_HasOptions(const upb_ServiceDef* s) {
1053
- return s->opts != (void*)opt_default;
1054
- }
1055
-
1056
- const char* upb_ServiceDef_FullName(const upb_ServiceDef* s) {
1057
- return s->full_name;
1058
- }
1059
-
1060
- const char* upb_ServiceDef_Name(const upb_ServiceDef* s) {
1061
- return shortdefname(s->full_name);
1062
- }
1063
-
1064
- int upb_ServiceDef_Index(const upb_ServiceDef* s) { return s->index; }
1065
-
1066
- const upb_FileDef* upb_ServiceDef_File(const upb_ServiceDef* s) {
1067
- return s->file;
1068
- }
1069
-
1070
- int upb_ServiceDef_MethodCount(const upb_ServiceDef* s) {
1071
- return s->method_count;
1072
- }
1073
-
1074
- const upb_MethodDef* upb_ServiceDef_Method(const upb_ServiceDef* s, int i) {
1075
- return i < 0 || i >= s->method_count ? NULL : &s->methods[i];
1076
- }
1077
-
1078
- const upb_MethodDef* upb_ServiceDef_FindMethodByName(const upb_ServiceDef* s,
1079
- const char* name) {
1080
- for (int i = 0; i < s->method_count; i++) {
1081
- if (strcmp(name, upb_MethodDef_Name(&s->methods[i])) == 0) {
1082
- return &s->methods[i];
1083
- }
1084
- }
1085
- return NULL;
1086
- }
1087
-
1088
- /* upb_DefPool ****************************************************************/
1089
-
1090
- void upb_DefPool_Free(upb_DefPool* s) {
1091
- upb_Arena_Free(s->arena);
1092
- upb_gfree(s);
1093
- }
1094
-
1095
- upb_DefPool* upb_DefPool_New(void) {
1096
- upb_DefPool* s = upb_gmalloc(sizeof(*s));
1097
-
1098
- if (!s) {
1099
- return NULL;
1100
- }
1101
-
1102
- s->arena = upb_Arena_New();
1103
- s->bytes_loaded = 0;
1104
-
1105
- if (!upb_strtable_init(&s->syms, 32, s->arena) ||
1106
- !upb_strtable_init(&s->files, 4, s->arena) ||
1107
- !upb_inttable_init(&s->exts, s->arena)) {
1108
- goto err;
1109
- }
1110
-
1111
- s->extreg = upb_ExtensionRegistry_New(s->arena);
1112
- if (!s->extreg) goto err;
1113
- return s;
1114
-
1115
- err:
1116
- upb_Arena_Free(s->arena);
1117
- upb_gfree(s);
1118
- return NULL;
1119
- }
1120
-
1121
- static const void* symtab_lookup(const upb_DefPool* s, const char* sym,
1122
- upb_deftype_t type) {
1123
- upb_value v;
1124
- return upb_strtable_lookup(&s->syms, sym, &v) ? unpack_def(v, type) : NULL;
1125
- }
1126
-
1127
- static const void* symtab_lookup2(const upb_DefPool* s, const char* sym,
1128
- size_t size, upb_deftype_t type) {
1129
- upb_value v;
1130
- return upb_strtable_lookup2(&s->syms, sym, size, &v) ? unpack_def(v, type)
1131
- : NULL;
1132
- }
1133
-
1134
- const upb_MessageDef* upb_DefPool_FindMessageByName(const upb_DefPool* s,
1135
- const char* sym) {
1136
- return symtab_lookup(s, sym, UPB_DEFTYPE_MSG);
1137
- }
1138
-
1139
- const upb_MessageDef* upb_DefPool_FindMessageByNameWithSize(
1140
- const upb_DefPool* s, const char* sym, size_t len) {
1141
- return symtab_lookup2(s, sym, len, UPB_DEFTYPE_MSG);
1142
- }
1143
-
1144
- const upb_EnumDef* upb_DefPool_FindEnumByName(const upb_DefPool* s,
1145
- const char* sym) {
1146
- return symtab_lookup(s, sym, UPB_DEFTYPE_ENUM);
1147
- }
1148
-
1149
- const upb_EnumValueDef* upb_DefPool_FindEnumByNameval(const upb_DefPool* s,
1150
- const char* sym) {
1151
- return symtab_lookup(s, sym, UPB_DEFTYPE_ENUMVAL);
1152
- }
1153
-
1154
- const upb_FileDef* upb_DefPool_FindFileByName(const upb_DefPool* s,
1155
- const char* name) {
1156
- upb_value v;
1157
- return upb_strtable_lookup(&s->files, name, &v)
1158
- ? unpack_def(v, UPB_DEFTYPE_FILE)
1159
- : NULL;
1160
- }
1161
-
1162
- const upb_FileDef* upb_DefPool_FindFileByNameWithSize(const upb_DefPool* s,
1163
- const char* name,
1164
- size_t len) {
1165
- upb_value v;
1166
- return upb_strtable_lookup2(&s->files, name, len, &v)
1167
- ? unpack_def(v, UPB_DEFTYPE_FILE)
1168
- : NULL;
1169
- }
1170
-
1171
- const upb_FieldDef* upb_DefPool_FindExtensionByNameWithSize(
1172
- const upb_DefPool* s, const char* name, size_t size) {
1173
- upb_value v;
1174
- if (!upb_strtable_lookup2(&s->syms, name, size, &v)) return NULL;
1175
-
1176
- switch (deftype(v)) {
1177
- case UPB_DEFTYPE_FIELD:
1178
- return unpack_def(v, UPB_DEFTYPE_FIELD);
1179
- case UPB_DEFTYPE_MSG: {
1180
- const upb_MessageDef* m = unpack_def(v, UPB_DEFTYPE_MSG);
1181
- return m->in_message_set ? &m->nested_exts[0] : NULL;
1182
- }
1183
- default:
1184
- break;
1185
- }
1186
-
1187
- return NULL;
1188
- }
1189
-
1190
- const upb_FieldDef* upb_DefPool_FindExtensionByName(const upb_DefPool* s,
1191
- const char* sym) {
1192
- return upb_DefPool_FindExtensionByNameWithSize(s, sym, strlen(sym));
1193
- }
1194
-
1195
- const upb_ServiceDef* upb_DefPool_FindServiceByName(const upb_DefPool* s,
1196
- const char* name) {
1197
- return symtab_lookup(s, name, UPB_DEFTYPE_SERVICE);
1198
- }
1199
-
1200
- const upb_ServiceDef* upb_DefPool_FindServiceByNameWithSize(
1201
- const upb_DefPool* s, const char* name, size_t size) {
1202
- return symtab_lookup2(s, name, size, UPB_DEFTYPE_SERVICE);
1203
- }
1204
-
1205
- const upb_FileDef* upb_DefPool_FindFileContainingSymbol(const upb_DefPool* s,
1206
- const char* name) {
1207
- upb_value v;
1208
- // TODO(haberman): non-extension fields and oneofs.
1209
- if (upb_strtable_lookup(&s->syms, name, &v)) {
1210
- switch (deftype(v)) {
1211
- case UPB_DEFTYPE_EXT: {
1212
- const upb_FieldDef* f = unpack_def(v, UPB_DEFTYPE_EXT);
1213
- return upb_FieldDef_File(f);
1214
- }
1215
- case UPB_DEFTYPE_MSG: {
1216
- const upb_MessageDef* m = unpack_def(v, UPB_DEFTYPE_MSG);
1217
- return upb_MessageDef_File(m);
1218
- }
1219
- case UPB_DEFTYPE_ENUM: {
1220
- const upb_EnumDef* e = unpack_def(v, UPB_DEFTYPE_ENUM);
1221
- return upb_EnumDef_File(e);
1222
- }
1223
- case UPB_DEFTYPE_ENUMVAL: {
1224
- const upb_EnumValueDef* ev = unpack_def(v, UPB_DEFTYPE_ENUMVAL);
1225
- return upb_EnumDef_File(upb_EnumValueDef_Enum(ev));
1226
- }
1227
- case UPB_DEFTYPE_SERVICE: {
1228
- const upb_ServiceDef* service = unpack_def(v, UPB_DEFTYPE_SERVICE);
1229
- return upb_ServiceDef_File(service);
1230
- }
1231
- default:
1232
- UPB_UNREACHABLE();
1233
- }
1234
- }
1235
-
1236
- const char* last_dot = strrchr(name, '.');
1237
- if (last_dot) {
1238
- const upb_MessageDef* parent =
1239
- upb_DefPool_FindMessageByNameWithSize(s, name, last_dot - name);
1240
- if (parent) {
1241
- const char* shortname = last_dot + 1;
1242
- if (upb_MessageDef_FindByNameWithSize(parent, shortname,
1243
- strlen(shortname), NULL, NULL)) {
1244
- return upb_MessageDef_File(parent);
1245
- }
1246
- }
1247
- }
1248
-
1249
- return NULL;
1250
- }
1251
-
1252
- /* Code to build defs from descriptor protos. *********************************/
1253
-
1254
- /* There is a question of how much validation to do here. It will be difficult
1255
- * to perfectly match the amount of validation performed by proto2. But since
1256
- * this code is used to directly build defs from Ruby (for example) we do need
1257
- * to validate important constraints like uniqueness of names and numbers. */
1258
-
1259
- #define CHK_OOM(x) \
1260
- if (!(x)) { \
1261
- symtab_oomerr(ctx); \
1262
- }
1263
-
1264
- typedef struct {
1265
- upb_DefPool* symtab;
1266
- upb_FileDef* file; /* File we are building. */
1267
- upb_Arena* arena; /* Allocate defs here. */
1268
- upb_Arena* tmp_arena; /* For temporary allocations. */
1269
- const upb_MiniTable_File* layout; /* NULL if we should build layouts. */
1270
- int enum_count; /* Count of enums built so far. */
1271
- int msg_count; /* Count of messages built so far. */
1272
- int ext_count; /* Count of extensions built so far. */
1273
- upb_Status* status; /* Record errors here. */
1274
- jmp_buf err; /* longjmp() on error. */
1275
- } symtab_addctx;
1276
-
1277
- UPB_NORETURN UPB_NOINLINE UPB_PRINTF(2, 3) static void symtab_errf(
1278
- symtab_addctx* ctx, const char* fmt, ...) {
1279
- va_list argp;
1280
- va_start(argp, fmt);
1281
- upb_Status_VSetErrorFormat(ctx->status, fmt, argp);
1282
- va_end(argp);
1283
- UPB_LONGJMP(ctx->err, 1);
1284
- }
1285
-
1286
- UPB_NORETURN UPB_NOINLINE static void symtab_oomerr(symtab_addctx* ctx) {
1287
- upb_Status_setoom(ctx->status);
1288
- UPB_LONGJMP(ctx->err, 1);
1289
- }
1290
-
1291
- void* symtab_alloc(symtab_addctx* ctx, size_t bytes) {
1292
- if (bytes == 0) return NULL;
1293
- void* ret = upb_Arena_Malloc(ctx->arena, bytes);
1294
- if (!ret) symtab_oomerr(ctx);
1295
- return ret;
1296
- }
1297
-
1298
- // We want to copy the options verbatim into the destination options proto.
1299
- // We use serialize+parse as our deep copy.
1300
- #define SET_OPTIONS(target, desc_type, options_type, proto) \
1301
- if (google_protobuf_##desc_type##_has_options(proto)) { \
1302
- size_t size; \
1303
- char* pb = google_protobuf_##options_type##_serialize( \
1304
- google_protobuf_##desc_type##_options(proto), ctx->tmp_arena, &size); \
1305
- CHK_OOM(pb); \
1306
- target = google_protobuf_##options_type##_parse(pb, size, ctx->arena); \
1307
- CHK_OOM(target); \
1308
- } else { \
1309
- target = (const google_protobuf_##options_type*)opt_default; \
1310
- }
1311
-
1312
- static void check_ident(symtab_addctx* ctx, upb_StringView name, bool full) {
1313
- const char* str = name.data;
1314
- size_t len = name.size;
1315
- bool start = true;
1316
- size_t i;
1317
- for (i = 0; i < len; i++) {
1318
- char c = str[i];
1319
- if (c == '.') {
1320
- if (start || !full) {
1321
- symtab_errf(ctx, "invalid name: unexpected '.' (%.*s)", (int)len, str);
1322
- }
1323
- start = true;
1324
- } else if (start) {
1325
- if (!upb_isletter(c)) {
1326
- symtab_errf(
1327
- ctx,
1328
- "invalid name: path components must start with a letter (%.*s)",
1329
- (int)len, str);
1330
- }
1331
- start = false;
1332
- } else {
1333
- if (!upb_isalphanum(c)) {
1334
- symtab_errf(ctx, "invalid name: non-alphanumeric character (%.*s)",
1335
- (int)len, str);
1336
- }
1337
- }
1338
- }
1339
- if (start) {
1340
- symtab_errf(ctx, "invalid name: empty part (%.*s)", (int)len, str);
1341
- }
1342
- }
1343
-
1344
- static size_t div_round_up(size_t n, size_t d) { return (n + d - 1) / d; }
1345
-
1346
- static size_t upb_MessageValue_sizeof(upb_CType type) {
1347
- switch (type) {
1348
- case kUpb_CType_Double:
1349
- case kUpb_CType_Int64:
1350
- case kUpb_CType_UInt64:
1351
- return 8;
1352
- case kUpb_CType_Enum:
1353
- case kUpb_CType_Int32:
1354
- case kUpb_CType_UInt32:
1355
- case kUpb_CType_Float:
1356
- return 4;
1357
- case kUpb_CType_Bool:
1358
- return 1;
1359
- case kUpb_CType_Message:
1360
- return sizeof(void*);
1361
- case kUpb_CType_Bytes:
1362
- case kUpb_CType_String:
1363
- return sizeof(upb_StringView);
1364
- }
1365
- UPB_UNREACHABLE();
1366
- }
1367
-
1368
- static uint8_t upb_msg_fielddefsize(const upb_FieldDef* f) {
1369
- if (upb_MessageDef_IsMapEntry(upb_FieldDef_ContainingType(f))) {
1370
- upb_MapEntry ent;
1371
- UPB_ASSERT(sizeof(ent.k) == sizeof(ent.v));
1372
- return sizeof(ent.k);
1373
- } else if (upb_FieldDef_IsRepeated(f)) {
1374
- return sizeof(void*);
1375
- } else {
1376
- return upb_MessageValue_sizeof(upb_FieldDef_CType(f));
1377
- }
1378
- }
1379
-
1380
- static uint32_t upb_MiniTable_place(symtab_addctx* ctx, upb_MiniTable* l,
1381
- size_t size, const upb_MessageDef* m) {
1382
- size_t ofs = UPB_ALIGN_UP(l->size, size);
1383
- size_t next = ofs + size;
1384
-
1385
- if (next > UINT16_MAX) {
1386
- symtab_errf(ctx, "size of message %s exceeded max size of %zu bytes",
1387
- upb_MessageDef_FullName(m), (size_t)UINT16_MAX);
1388
- }
1389
-
1390
- l->size = next;
1391
- return ofs;
1392
- }
1393
-
1394
- static int field_number_cmp(const void* p1, const void* p2) {
1395
- const upb_MiniTable_Field* f1 = p1;
1396
- const upb_MiniTable_Field* f2 = p2;
1397
- return f1->number - f2->number;
1398
- }
1399
-
1400
- static void assign_layout_indices(const upb_MessageDef* m, upb_MiniTable* l,
1401
- upb_MiniTable_Field* fields) {
1402
- int i;
1403
- int n = upb_MessageDef_numfields(m);
1404
- int dense_below = 0;
1405
- for (i = 0; i < n; i++) {
1406
- upb_FieldDef* f =
1407
- (upb_FieldDef*)upb_MessageDef_FindFieldByNumber(m, fields[i].number);
1408
- UPB_ASSERT(f);
1409
- f->layout_index = i;
1410
- if (i < UINT8_MAX && fields[i].number == i + 1 &&
1411
- (i == 0 || fields[i - 1].number == i)) {
1412
- dense_below = i + 1;
1413
- }
1414
- }
1415
- l->dense_below = dense_below;
1416
- }
1417
-
1418
- static uint8_t map_descriptortype(const upb_FieldDef* f) {
1419
- uint8_t type = upb_FieldDef_Type(f);
1420
- /* See TableDescriptorType() in upbc/generator.cc for details and
1421
- * rationale of these exceptions. */
1422
- if (type == kUpb_FieldType_String && f->file->syntax == kUpb_Syntax_Proto2) {
1423
- return kUpb_FieldType_Bytes;
1424
- } else if (type == kUpb_FieldType_Enum &&
1425
- (f->sub.enumdef->file->syntax == kUpb_Syntax_Proto3 ||
1426
- UPB_TREAT_PROTO2_ENUMS_LIKE_PROTO3 ||
1427
- // TODO(https://github.com/protocolbuffers/upb/issues/541):
1428
- // fix map enum values to check for unknown enum values and put
1429
- // them in the unknown field set.
1430
- upb_MessageDef_IsMapEntry(upb_FieldDef_ContainingType(f)))) {
1431
- return kUpb_FieldType_Int32;
1432
- }
1433
- return type;
1434
- }
1435
-
1436
- static void fill_fieldlayout(upb_MiniTable_Field* field,
1437
- const upb_FieldDef* f) {
1438
- field->number = upb_FieldDef_Number(f);
1439
- field->descriptortype = map_descriptortype(f);
1440
-
1441
- if (upb_FieldDef_IsMap(f)) {
1442
- field->mode =
1443
- kUpb_FieldMode_Map | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift);
1444
- } else if (upb_FieldDef_IsRepeated(f)) {
1445
- field->mode =
1446
- kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift);
1447
- } else {
1448
- /* Maps descriptor type -> elem_size_lg2. */
1449
- static const uint8_t sizes[] = {
1450
- -1, /* invalid descriptor type */
1451
- kUpb_FieldRep_8Byte, /* DOUBLE */
1452
- kUpb_FieldRep_4Byte, /* FLOAT */
1453
- kUpb_FieldRep_8Byte, /* INT64 */
1454
- kUpb_FieldRep_8Byte, /* UINT64 */
1455
- kUpb_FieldRep_4Byte, /* INT32 */
1456
- kUpb_FieldRep_8Byte, /* FIXED64 */
1457
- kUpb_FieldRep_4Byte, /* FIXED32 */
1458
- kUpb_FieldRep_1Byte, /* BOOL */
1459
- kUpb_FieldRep_StringView, /* STRING */
1460
- kUpb_FieldRep_Pointer, /* GROUP */
1461
- kUpb_FieldRep_Pointer, /* MESSAGE */
1462
- kUpb_FieldRep_StringView, /* BYTES */
1463
- kUpb_FieldRep_4Byte, /* UINT32 */
1464
- kUpb_FieldRep_4Byte, /* ENUM */
1465
- kUpb_FieldRep_4Byte, /* SFIXED32 */
1466
- kUpb_FieldRep_8Byte, /* SFIXED64 */
1467
- kUpb_FieldRep_4Byte, /* SINT32 */
1468
- kUpb_FieldRep_8Byte, /* SINT64 */
1469
- };
1470
- field->mode = kUpb_FieldMode_Scalar |
1471
- (sizes[field->descriptortype] << kUpb_FieldRep_Shift);
1472
- }
1473
-
1474
- if (upb_FieldDef_IsPacked(f)) {
1475
- field->mode |= kUpb_LabelFlags_IsPacked;
1476
- }
1477
-
1478
- if (upb_FieldDef_IsExtension(f)) {
1479
- field->mode |= kUpb_LabelFlags_IsExtension;
1480
- }
1481
- }
1482
-
1483
- /* This function is the dynamic equivalent of message_layout.{cc,h} in upbc.
1484
- * It computes a dynamic layout for all of the fields in |m|. */
1485
- static void make_layout(symtab_addctx* ctx, const upb_MessageDef* m) {
1486
- upb_MiniTable* l = (upb_MiniTable*)m->layout;
1487
- size_t field_count = upb_MessageDef_numfields(m);
1488
- size_t sublayout_count = 0;
1489
- upb_MiniTable_Sub* subs;
1490
- upb_MiniTable_Field* fields;
1491
-
1492
- memset(l, 0, sizeof(*l) + sizeof(_upb_FastTable_Entry));
1493
-
1494
- /* Count sub-messages. */
1495
- for (size_t i = 0; i < field_count; i++) {
1496
- const upb_FieldDef* f = &m->fields[i];
1497
- if (upb_FieldDef_IsSubMessage(f)) {
1498
- sublayout_count++;
1499
- }
1500
- if (upb_FieldDef_CType(f) == kUpb_CType_Enum &&
1501
- f->sub.enumdef->file->syntax == kUpb_Syntax_Proto2) {
1502
- sublayout_count++;
1503
- }
1504
- }
1505
-
1506
- fields = symtab_alloc(ctx, field_count * sizeof(*fields));
1507
- subs = symtab_alloc(ctx, sublayout_count * sizeof(*subs));
1508
-
1509
- l->field_count = upb_MessageDef_numfields(m);
1510
- l->fields = fields;
1511
- l->subs = subs;
1512
- l->table_mask = 0;
1513
- l->required_count = 0;
1514
-
1515
- if (upb_MessageDef_ExtensionRangeCount(m) > 0) {
1516
- if (google_protobuf_MessageOptions_message_set_wire_format(m->opts)) {
1517
- l->ext = kUpb_ExtMode_IsMessageSet;
1518
- } else {
1519
- l->ext = kUpb_ExtMode_Extendable;
1520
- }
1521
- } else {
1522
- l->ext = kUpb_ExtMode_NonExtendable;
1523
- }
1524
-
1525
- /* TODO(haberman): initialize fast tables so that reflection-based parsing
1526
- * can get the same speeds as linked-in types. */
1527
- l->fasttable[0].field_parser = &fastdecode_generic;
1528
- l->fasttable[0].field_data = 0;
1529
-
1530
- if (upb_MessageDef_IsMapEntry(m)) {
1531
- /* TODO(haberman): refactor this method so this special case is more
1532
- * elegant. */
1533
- const upb_FieldDef* key = upb_MessageDef_FindFieldByNumber(m, 1);
1534
- const upb_FieldDef* val = upb_MessageDef_FindFieldByNumber(m, 2);
1535
- fields[0].number = 1;
1536
- fields[1].number = 2;
1537
- fields[0].mode = kUpb_FieldMode_Scalar;
1538
- fields[1].mode = kUpb_FieldMode_Scalar;
1539
- fields[0].presence = 0;
1540
- fields[1].presence = 0;
1541
- fields[0].descriptortype = map_descriptortype(key);
1542
- fields[1].descriptortype = map_descriptortype(val);
1543
- fields[0].offset = 0;
1544
- fields[1].offset = sizeof(upb_StringView);
1545
- fields[1].submsg_index = 0;
1546
-
1547
- if (upb_FieldDef_CType(val) == kUpb_CType_Message) {
1548
- subs[0].submsg = upb_FieldDef_MessageSubDef(val)->layout;
1549
- }
1550
-
1551
- upb_FieldDef* fielddefs = (upb_FieldDef*)&m->fields[0];
1552
- UPB_ASSERT(fielddefs[0].number_ == 1);
1553
- UPB_ASSERT(fielddefs[1].number_ == 2);
1554
- fielddefs[0].layout_index = 0;
1555
- fielddefs[1].layout_index = 1;
1556
-
1557
- l->field_count = 2;
1558
- l->size = 2 * sizeof(upb_StringView);
1559
- l->size = UPB_ALIGN_UP(l->size, 8);
1560
- l->dense_below = 2;
1561
- return;
1562
- }
1563
-
1564
- /* Allocate data offsets in three stages:
1565
- *
1566
- * 1. hasbits.
1567
- * 2. regular fields.
1568
- * 3. oneof fields.
1569
- *
1570
- * OPT: There is a lot of room for optimization here to minimize the size.
1571
- */
1572
-
1573
- /* Assign hasbits for required fields first. */
1574
- size_t hasbit = 0;
1575
-
1576
- for (int i = 0; i < m->field_count; i++) {
1577
- const upb_FieldDef* f = &m->fields[i];
1578
- upb_MiniTable_Field* field = &fields[upb_FieldDef_Index(f)];
1579
- if (upb_FieldDef_Label(f) == kUpb_Label_Required) {
1580
- field->presence = ++hasbit;
1581
- if (hasbit >= 63) {
1582
- symtab_errf(ctx, "Message with >=63 required fields: %s",
1583
- upb_MessageDef_FullName(m));
1584
- }
1585
- l->required_count++;
1586
- }
1587
- }
1588
-
1589
- /* Allocate hasbits and set basic field attributes. */
1590
- sublayout_count = 0;
1591
- for (int i = 0; i < m->field_count; i++) {
1592
- const upb_FieldDef* f = &m->fields[i];
1593
- upb_MiniTable_Field* field = &fields[upb_FieldDef_Index(f)];
1594
-
1595
- fill_fieldlayout(field, f);
1596
-
1597
- if (field->descriptortype == kUpb_FieldType_Message ||
1598
- field->descriptortype == kUpb_FieldType_Group) {
1599
- field->submsg_index = sublayout_count++;
1600
- subs[field->submsg_index].submsg = upb_FieldDef_MessageSubDef(f)->layout;
1601
- } else if (field->descriptortype == kUpb_FieldType_Enum) {
1602
- field->submsg_index = sublayout_count++;
1603
- subs[field->submsg_index].subenum = upb_FieldDef_EnumSubDef(f)->layout;
1604
- UPB_ASSERT(subs[field->submsg_index].subenum);
1605
- }
1606
-
1607
- if (upb_FieldDef_Label(f) == kUpb_Label_Required) {
1608
- /* Hasbit was already assigned. */
1609
- } else if (upb_FieldDef_HasPresence(f) &&
1610
- !upb_FieldDef_RealContainingOneof(f)) {
1611
- /* We don't use hasbit 0, so that 0 can indicate "no presence" in the
1612
- * table. This wastes one hasbit, but we don't worry about it for now. */
1613
- field->presence = ++hasbit;
1614
- } else {
1615
- field->presence = 0;
1616
- }
1617
- }
1618
-
1619
- /* Account for space used by hasbits. */
1620
- l->size = hasbit ? div_round_up(hasbit + 1, 8) : 0;
1621
-
1622
- /* Allocate non-oneof fields. */
1623
- for (int i = 0; i < m->field_count; i++) {
1624
- const upb_FieldDef* f = &m->fields[i];
1625
- size_t field_size = upb_msg_fielddefsize(f);
1626
- size_t index = upb_FieldDef_Index(f);
1627
-
1628
- if (upb_FieldDef_RealContainingOneof(f)) {
1629
- /* Oneofs are handled separately below. */
1630
- continue;
1631
- }
1632
-
1633
- fields[index].offset = upb_MiniTable_place(ctx, l, field_size, m);
1634
- }
1635
-
1636
- /* Allocate oneof fields. Each oneof field consists of a uint32 for the case
1637
- * and space for the actual data. */
1638
- for (int i = 0; i < m->oneof_count; i++) {
1639
- const upb_OneofDef* o = &m->oneofs[i];
1640
- size_t case_size = sizeof(uint32_t); /* Could potentially optimize this. */
1641
- size_t field_size = 0;
1642
- uint32_t case_offset;
1643
- uint32_t data_offset;
1644
-
1645
- if (upb_OneofDef_IsSynthetic(o)) continue;
1646
-
1647
- if (o->field_count == 0) {
1648
- symtab_errf(ctx, "Oneof must have at least one field (%s)", o->full_name);
1649
- }
1650
-
1651
- /* Calculate field size: the max of all field sizes. */
1652
- for (int j = 0; j < o->field_count; j++) {
1653
- const upb_FieldDef* f = o->fields[j];
1654
- field_size = UPB_MAX(field_size, upb_msg_fielddefsize(f));
1655
- }
1656
-
1657
- /* Align and allocate case offset. */
1658
- case_offset = upb_MiniTable_place(ctx, l, case_size, m);
1659
- data_offset = upb_MiniTable_place(ctx, l, field_size, m);
1660
-
1661
- for (int i = 0; i < o->field_count; i++) {
1662
- const upb_FieldDef* f = o->fields[i];
1663
- fields[upb_FieldDef_Index(f)].offset = data_offset;
1664
- fields[upb_FieldDef_Index(f)].presence = ~case_offset;
1665
- }
1666
- }
1667
-
1668
- /* Size of the entire structure should be a multiple of its greatest
1669
- * alignment. TODO: track overall alignment for real? */
1670
- l->size = UPB_ALIGN_UP(l->size, 8);
1671
-
1672
- /* Sort fields by number. */
1673
- if (fields) {
1674
- qsort(fields, upb_MessageDef_numfields(m), sizeof(*fields),
1675
- field_number_cmp);
1676
- }
1677
- assign_layout_indices(m, l, fields);
1678
- }
1679
-
1680
- static char* strviewdup(symtab_addctx* ctx, upb_StringView view) {
1681
- char* ret = upb_strdup2(view.data, view.size, ctx->arena);
1682
- CHK_OOM(ret);
1683
- return ret;
1684
- }
1685
-
1686
- static bool streql2(const char* a, size_t n, const char* b) {
1687
- return n == strlen(b) && memcmp(a, b, n) == 0;
1688
- }
1689
-
1690
- static bool streql_view(upb_StringView view, const char* b) {
1691
- return streql2(view.data, view.size, b);
1692
- }
1693
-
1694
- static const char* makefullname(symtab_addctx* ctx, const char* prefix,
1695
- upb_StringView name) {
1696
- if (prefix) {
1697
- /* ret = prefix + '.' + name; */
1698
- size_t n = strlen(prefix);
1699
- char* ret = symtab_alloc(ctx, n + name.size + 2);
1700
- strcpy(ret, prefix);
1701
- ret[n] = '.';
1702
- memcpy(&ret[n + 1], name.data, name.size);
1703
- ret[n + 1 + name.size] = '\0';
1704
- return ret;
1705
- } else {
1706
- return strviewdup(ctx, name);
1707
- }
1708
- }
1709
-
1710
- static void finalize_oneofs(symtab_addctx* ctx, upb_MessageDef* m) {
1711
- int i;
1712
- int synthetic_count = 0;
1713
- upb_OneofDef* mutable_oneofs = (upb_OneofDef*)m->oneofs;
1714
-
1715
- for (i = 0; i < m->oneof_count; i++) {
1716
- upb_OneofDef* o = &mutable_oneofs[i];
1717
-
1718
- if (o->synthetic && o->field_count != 1) {
1719
- symtab_errf(ctx, "Synthetic oneofs must have one field, not %d: %s",
1720
- o->field_count, upb_OneofDef_Name(o));
1721
- }
1722
-
1723
- if (o->synthetic) {
1724
- synthetic_count++;
1725
- } else if (synthetic_count != 0) {
1726
- symtab_errf(ctx, "Synthetic oneofs must be after all other oneofs: %s",
1727
- upb_OneofDef_Name(o));
1728
- }
1729
-
1730
- o->fields = symtab_alloc(ctx, sizeof(upb_FieldDef*) * o->field_count);
1731
- o->field_count = 0;
1732
- }
1733
-
1734
- for (i = 0; i < m->field_count; i++) {
1735
- const upb_FieldDef* f = &m->fields[i];
1736
- upb_OneofDef* o = (upb_OneofDef*)upb_FieldDef_ContainingOneof(f);
1737
- if (o) {
1738
- o->fields[o->field_count++] = f;
1739
- }
1740
- }
1741
-
1742
- m->real_oneof_count = m->oneof_count - synthetic_count;
1743
- }
1744
-
1745
- size_t getjsonname(const char* name, char* buf, size_t len) {
1746
- size_t src, dst = 0;
1747
- bool ucase_next = false;
1748
-
1749
- #define WRITE(byte) \
1750
- ++dst; \
1751
- if (dst < len) \
1752
- buf[dst - 1] = byte; \
1753
- else if (dst == len) \
1754
- buf[dst - 1] = '\0'
1755
-
1756
- if (!name) {
1757
- WRITE('\0');
1758
- return 0;
1759
- }
1760
-
1761
- /* Implement the transformation as described in the spec:
1762
- * 1. upper case all letters after an underscore.
1763
- * 2. remove all underscores.
1764
- */
1765
- for (src = 0; name[src]; src++) {
1766
- if (name[src] == '_') {
1767
- ucase_next = true;
1768
- continue;
1769
- }
1770
-
1771
- if (ucase_next) {
1772
- WRITE(toupper(name[src]));
1773
- ucase_next = false;
1774
- } else {
1775
- WRITE(name[src]);
1776
- }
1777
- }
1778
-
1779
- WRITE('\0');
1780
- return dst;
1781
-
1782
- #undef WRITE
1783
- }
1784
-
1785
- static char* makejsonname(symtab_addctx* ctx, const char* name) {
1786
- size_t size = getjsonname(name, NULL, 0);
1787
- char* json_name = symtab_alloc(ctx, size);
1788
- getjsonname(name, json_name, size);
1789
- return json_name;
1790
- }
1791
-
1792
- /* Adds a symbol |v| to the symtab, which must be a def pointer previously
1793
- * packed with pack_def(). The def's pointer to upb_FileDef* must be set before
1794
- * adding, so we know which entries to remove if building this file fails. */
1795
- static void symtab_add(symtab_addctx* ctx, const char* name, upb_value v) {
1796
- // TODO: table should support an operation "tryinsert" to avoid the double
1797
- // lookup.
1798
- if (upb_strtable_lookup(&ctx->symtab->syms, name, NULL)) {
1799
- symtab_errf(ctx, "duplicate symbol '%s'", name);
1800
- }
1801
- size_t len = strlen(name);
1802
- CHK_OOM(upb_strtable_insert(&ctx->symtab->syms, name, len, v,
1803
- ctx->symtab->arena));
1804
- }
1805
-
1806
- static bool remove_component(char* base, size_t* len) {
1807
- if (*len == 0) return false;
1808
-
1809
- for (size_t i = *len - 1; i > 0; i--) {
1810
- if (base[i] == '.') {
1811
- *len = i;
1812
- return true;
1813
- }
1814
- }
1815
-
1816
- *len = 0;
1817
- return true;
1818
- }
1819
-
1820
- /* Given a symbol and the base symbol inside which it is defined, find the
1821
- * symbol's definition in t. */
1822
- static const void* symtab_resolveany(symtab_addctx* ctx,
1823
- const char* from_name_dbg,
1824
- const char* base, upb_StringView sym,
1825
- upb_deftype_t* type) {
1826
- const upb_strtable* t = &ctx->symtab->syms;
1827
- if (sym.size == 0) goto notfound;
1828
- upb_value v;
1829
- if (sym.data[0] == '.') {
1830
- /* Symbols starting with '.' are absolute, so we do a single lookup.
1831
- * Slice to omit the leading '.' */
1832
- if (!upb_strtable_lookup2(t, sym.data + 1, sym.size - 1, &v)) {
1833
- goto notfound;
1834
- }
1835
- } else {
1836
- /* Remove components from base until we find an entry or run out. */
1837
- size_t baselen = base ? strlen(base) : 0;
1838
- char* tmp = malloc(sym.size + baselen + 1);
1839
- while (1) {
1840
- char* p = tmp;
1841
- if (baselen) {
1842
- memcpy(p, base, baselen);
1843
- p[baselen] = '.';
1844
- p += baselen + 1;
1845
- }
1846
- memcpy(p, sym.data, sym.size);
1847
- p += sym.size;
1848
- if (upb_strtable_lookup2(t, tmp, p - tmp, &v)) {
1849
- break;
1850
- }
1851
- if (!remove_component(tmp, &baselen)) {
1852
- free(tmp);
1853
- goto notfound;
1854
- }
1855
- }
1856
- free(tmp);
1857
- }
1858
-
1859
- *type = deftype(v);
1860
- return unpack_def(v, *type);
1861
-
1862
- notfound:
1863
- symtab_errf(ctx, "couldn't resolve name '" UPB_STRINGVIEW_FORMAT "'",
1864
- UPB_STRINGVIEW_ARGS(sym));
1865
- }
1866
-
1867
- static const void* symtab_resolve(symtab_addctx* ctx, const char* from_name_dbg,
1868
- const char* base, upb_StringView sym,
1869
- upb_deftype_t type) {
1870
- upb_deftype_t found_type;
1871
- const void* ret =
1872
- symtab_resolveany(ctx, from_name_dbg, base, sym, &found_type);
1873
- if (ret && found_type != type) {
1874
- symtab_errf(ctx,
1875
- "type mismatch when resolving %s: couldn't find "
1876
- "name " UPB_STRINGVIEW_FORMAT " with type=%d",
1877
- from_name_dbg, UPB_STRINGVIEW_ARGS(sym), (int)type);
1878
- }
1879
- return ret;
1880
- }
1881
-
1882
- static void create_oneofdef(
1883
- symtab_addctx* ctx, upb_MessageDef* m,
1884
- const google_protobuf_OneofDescriptorProto* oneof_proto,
1885
- const upb_OneofDef* _o) {
1886
- upb_OneofDef* o = (upb_OneofDef*)_o;
1887
- upb_StringView name = google_protobuf_OneofDescriptorProto_name(oneof_proto);
1888
- upb_value v;
1889
-
1890
- o->parent = m;
1891
- o->full_name = makefullname(ctx, m->full_name, name);
1892
- o->field_count = 0;
1893
- o->synthetic = false;
1894
-
1895
- SET_OPTIONS(o->opts, OneofDescriptorProto, OneofOptions, oneof_proto);
1896
-
1897
- upb_value existing_v;
1898
- if (upb_strtable_lookup2(&m->ntof, name.data, name.size, &existing_v)) {
1899
- symtab_errf(ctx, "duplicate oneof name (%s)", o->full_name);
1900
- }
1901
-
1902
- v = pack_def(o, UPB_DEFTYPE_ONEOF);
1903
- CHK_OOM(upb_strtable_insert(&m->ntof, name.data, name.size, v, ctx->arena));
1904
-
1905
- CHK_OOM(upb_inttable_init(&o->itof, ctx->arena));
1906
- CHK_OOM(upb_strtable_init(&o->ntof, 4, ctx->arena));
1907
- }
1908
-
1909
- static str_t* newstr(symtab_addctx* ctx, const char* data, size_t len) {
1910
- str_t* ret = symtab_alloc(ctx, sizeof(*ret) + len);
1911
- CHK_OOM(ret);
1912
- ret->len = len;
1913
- if (len) memcpy(ret->str, data, len);
1914
- ret->str[len] = '\0';
1915
- return ret;
1916
- }
1917
-
1918
- static bool upb_DefPool_TryGetChar(const char** src, const char* end,
1919
- char* ch) {
1920
- if (*src == end) return false;
1921
- *ch = **src;
1922
- *src += 1;
1923
- return true;
1924
- }
1925
-
1926
- static char upb_DefPool_TryGetHexDigit(symtab_addctx* ctx,
1927
- const upb_FieldDef* f, const char** src,
1928
- const char* end) {
1929
- char ch;
1930
- if (!upb_DefPool_TryGetChar(src, end, &ch)) return -1;
1931
- if ('0' <= ch && ch <= '9') {
1932
- return ch - '0';
1933
- }
1934
- ch = upb_ascii_lower(ch);
1935
- if ('a' <= ch && ch <= 'f') {
1936
- return ch - 'a' + 0xa;
1937
- }
1938
- *src -= 1; // Char wasn't actually a hex digit.
1939
- return -1;
1940
- }
1941
-
1942
- static char upb_DefPool_ParseHexEscape(symtab_addctx* ctx,
1943
- const upb_FieldDef* f, const char** src,
1944
- const char* end) {
1945
- char hex_digit = upb_DefPool_TryGetHexDigit(ctx, f, src, end);
1946
- if (hex_digit < 0) {
1947
- symtab_errf(ctx,
1948
- "\\x cannot be followed by non-hex digit in field '%s' default",
1949
- upb_FieldDef_FullName(f));
1950
- return 0;
1951
- }
1952
- unsigned int ret = hex_digit;
1953
- while ((hex_digit = upb_DefPool_TryGetHexDigit(ctx, f, src, end)) >= 0) {
1954
- ret = (ret << 4) | hex_digit;
1955
- }
1956
- if (ret > 0xff) {
1957
- symtab_errf(ctx, "Value of hex escape in field %s exceeds 8 bits",
1958
- upb_FieldDef_FullName(f));
1959
- return 0;
1960
- }
1961
- return ret;
1962
- }
1963
-
1964
- char upb_DefPool_TryGetOctalDigit(const char** src, const char* end) {
1965
- char ch;
1966
- if (!upb_DefPool_TryGetChar(src, end, &ch)) return -1;
1967
- if ('0' <= ch && ch <= '7') {
1968
- return ch - '0';
1969
- }
1970
- *src -= 1; // Char wasn't actually an octal digit.
1971
- return -1;
1972
- }
1973
-
1974
- static char upb_DefPool_ParseOctalEscape(symtab_addctx* ctx,
1975
- const upb_FieldDef* f,
1976
- const char** src, const char* end) {
1977
- char ch = 0;
1978
- for (int i = 0; i < 3; i++) {
1979
- char digit;
1980
- if ((digit = upb_DefPool_TryGetOctalDigit(src, end)) >= 0) {
1981
- ch = (ch << 3) | digit;
1982
- }
1983
- }
1984
- return ch;
1985
- }
1986
-
1987
- static char upb_DefPool_ParseEscape(symtab_addctx* ctx, const upb_FieldDef* f,
1988
- const char** src, const char* end) {
1989
- char ch;
1990
- if (!upb_DefPool_TryGetChar(src, end, &ch)) {
1991
- symtab_errf(ctx, "unterminated escape sequence in field %s",
1992
- upb_FieldDef_FullName(f));
1993
- return 0;
1994
- }
1995
- switch (ch) {
1996
- case 'a':
1997
- return '\a';
1998
- case 'b':
1999
- return '\b';
2000
- case 'f':
2001
- return '\f';
2002
- case 'n':
2003
- return '\n';
2004
- case 'r':
2005
- return '\r';
2006
- case 't':
2007
- return '\t';
2008
- case 'v':
2009
- return '\v';
2010
- case '\\':
2011
- return '\\';
2012
- case '\'':
2013
- return '\'';
2014
- case '\"':
2015
- return '\"';
2016
- case '?':
2017
- return '\?';
2018
- case 'x':
2019
- case 'X':
2020
- return upb_DefPool_ParseHexEscape(ctx, f, src, end);
2021
- case '0':
2022
- case '1':
2023
- case '2':
2024
- case '3':
2025
- case '4':
2026
- case '5':
2027
- case '6':
2028
- case '7':
2029
- *src -= 1;
2030
- return upb_DefPool_ParseOctalEscape(ctx, f, src, end);
2031
- }
2032
- symtab_errf(ctx, "Unknown escape sequence: \\%c", ch);
2033
- }
2034
-
2035
- static str_t* unescape(symtab_addctx* ctx, const upb_FieldDef* f,
2036
- const char* data, size_t len) {
2037
- // Size here is an upper bound; escape sequences could ultimately shrink it.
2038
- str_t* ret = symtab_alloc(ctx, sizeof(*ret) + len);
2039
- char* dst = &ret->str[0];
2040
- const char* src = data;
2041
- const char* end = data + len;
2042
-
2043
- while (src < end) {
2044
- if (*src == '\\') {
2045
- src++;
2046
- *dst++ = upb_DefPool_ParseEscape(ctx, f, &src, end);
2047
- } else {
2048
- *dst++ = *src++;
2049
- }
2050
- }
2051
-
2052
- ret->len = dst - &ret->str[0];
2053
- return ret;
2054
- }
2055
-
2056
- static void parse_default(symtab_addctx* ctx, const char* str, size_t len,
2057
- upb_FieldDef* f) {
2058
- char* end;
2059
- char nullz[64];
2060
- errno = 0;
2061
-
2062
- switch (upb_FieldDef_CType(f)) {
2063
- case kUpb_CType_Int32:
2064
- case kUpb_CType_Int64:
2065
- case kUpb_CType_UInt32:
2066
- case kUpb_CType_UInt64:
2067
- case kUpb_CType_Double:
2068
- case kUpb_CType_Float:
2069
- /* Standard C number parsing functions expect null-terminated strings. */
2070
- if (len >= sizeof(nullz) - 1) {
2071
- symtab_errf(ctx, "Default too long: %.*s", (int)len, str);
2072
- }
2073
- memcpy(nullz, str, len);
2074
- nullz[len] = '\0';
2075
- str = nullz;
2076
- break;
2077
- default:
2078
- break;
2079
- }
2080
-
2081
- switch (upb_FieldDef_CType(f)) {
2082
- case kUpb_CType_Int32: {
2083
- long val = strtol(str, &end, 0);
2084
- if (val > INT32_MAX || val < INT32_MIN || errno == ERANGE || *end) {
2085
- goto invalid;
2086
- }
2087
- f->defaultval.sint = val;
2088
- break;
2089
- }
2090
- case kUpb_CType_Enum: {
2091
- const upb_EnumDef* e = f->sub.enumdef;
2092
- const upb_EnumValueDef* ev =
2093
- upb_EnumDef_FindValueByNameWithSize(e, str, len);
2094
- if (!ev) {
2095
- goto invalid;
2096
- }
2097
- f->defaultval.sint = ev->number;
2098
- break;
2099
- }
2100
- case kUpb_CType_Int64: {
2101
- long long val = strtoll(str, &end, 0);
2102
- if (val > INT64_MAX || val < INT64_MIN || errno == ERANGE || *end) {
2103
- goto invalid;
2104
- }
2105
- f->defaultval.sint = val;
2106
- break;
2107
- }
2108
- case kUpb_CType_UInt32: {
2109
- unsigned long val = strtoul(str, &end, 0);
2110
- if (val > UINT32_MAX || errno == ERANGE || *end) {
2111
- goto invalid;
2112
- }
2113
- f->defaultval.uint = val;
2114
- break;
2115
- }
2116
- case kUpb_CType_UInt64: {
2117
- unsigned long long val = strtoull(str, &end, 0);
2118
- if (val > UINT64_MAX || errno == ERANGE || *end) {
2119
- goto invalid;
2120
- }
2121
- f->defaultval.uint = val;
2122
- break;
2123
- }
2124
- case kUpb_CType_Double: {
2125
- double val = strtod(str, &end);
2126
- if (errno == ERANGE || *end) {
2127
- goto invalid;
2128
- }
2129
- f->defaultval.dbl = val;
2130
- break;
2131
- }
2132
- case kUpb_CType_Float: {
2133
- float val = strtof(str, &end);
2134
- if (errno == ERANGE || *end) {
2135
- goto invalid;
2136
- }
2137
- f->defaultval.flt = val;
2138
- break;
2139
- }
2140
- case kUpb_CType_Bool: {
2141
- if (streql2(str, len, "false")) {
2142
- f->defaultval.boolean = false;
2143
- } else if (streql2(str, len, "true")) {
2144
- f->defaultval.boolean = true;
2145
- } else {
2146
- goto invalid;
2147
- }
2148
- break;
2149
- }
2150
- case kUpb_CType_String:
2151
- f->defaultval.str = newstr(ctx, str, len);
2152
- break;
2153
- case kUpb_CType_Bytes:
2154
- f->defaultval.str = unescape(ctx, f, str, len);
2155
- break;
2156
- case kUpb_CType_Message:
2157
- /* Should not have a default value. */
2158
- symtab_errf(ctx, "Message should not have a default (%s)",
2159
- upb_FieldDef_FullName(f));
2160
- }
2161
-
2162
- return;
2163
-
2164
- invalid:
2165
- symtab_errf(ctx, "Invalid default '%.*s' for field %s of type %d", (int)len,
2166
- str, upb_FieldDef_FullName(f), (int)upb_FieldDef_Type(f));
2167
- }
2168
-
2169
- static void set_default_default(symtab_addctx* ctx, upb_FieldDef* f) {
2170
- switch (upb_FieldDef_CType(f)) {
2171
- case kUpb_CType_Int32:
2172
- case kUpb_CType_Int64:
2173
- f->defaultval.sint = 0;
2174
- break;
2175
- case kUpb_CType_UInt64:
2176
- case kUpb_CType_UInt32:
2177
- f->defaultval.uint = 0;
2178
- break;
2179
- case kUpb_CType_Double:
2180
- case kUpb_CType_Float:
2181
- f->defaultval.dbl = 0;
2182
- break;
2183
- case kUpb_CType_String:
2184
- case kUpb_CType_Bytes:
2185
- f->defaultval.str = newstr(ctx, NULL, 0);
2186
- break;
2187
- case kUpb_CType_Bool:
2188
- f->defaultval.boolean = false;
2189
- break;
2190
- case kUpb_CType_Enum:
2191
- f->defaultval.sint = f->sub.enumdef->values[0].number;
2192
- case kUpb_CType_Message:
2193
- break;
2194
- }
2195
- }
2196
-
2197
- static void create_fielddef(
2198
- symtab_addctx* ctx, const char* prefix, upb_MessageDef* m,
2199
- const google_protobuf_FieldDescriptorProto* field_proto,
2200
- const upb_FieldDef* _f, bool is_extension) {
2201
- upb_FieldDef* f = (upb_FieldDef*)_f;
2202
- upb_StringView name;
2203
- const char* full_name;
2204
- const char* json_name;
2205
- const char* shortname;
2206
- int32_t field_number;
2207
-
2208
- f->file = ctx->file; /* Must happen prior to symtab_add(). */
2209
-
2210
- if (!google_protobuf_FieldDescriptorProto_has_name(field_proto)) {
2211
- symtab_errf(ctx, "field has no name");
2212
- }
2213
-
2214
- name = google_protobuf_FieldDescriptorProto_name(field_proto);
2215
- check_ident(ctx, name, false);
2216
- full_name = makefullname(ctx, prefix, name);
2217
- shortname = shortdefname(full_name);
2218
-
2219
- if (google_protobuf_FieldDescriptorProto_has_json_name(field_proto)) {
2220
- json_name = strviewdup(
2221
- ctx, google_protobuf_FieldDescriptorProto_json_name(field_proto));
2222
- f->has_json_name_ = true;
2223
- } else {
2224
- json_name = makejsonname(ctx, shortname);
2225
- f->has_json_name_ = false;
2226
- }
2227
-
2228
- field_number = google_protobuf_FieldDescriptorProto_number(field_proto);
2229
-
2230
- f->full_name = full_name;
2231
- f->json_name = json_name;
2232
- f->label_ = (int)google_protobuf_FieldDescriptorProto_label(field_proto);
2233
- f->number_ = field_number;
2234
- f->scope.oneof = NULL;
2235
- f->proto3_optional_ =
2236
- google_protobuf_FieldDescriptorProto_proto3_optional(field_proto);
2237
-
2238
- bool has_type = google_protobuf_FieldDescriptorProto_has_type(field_proto);
2239
- bool has_type_name =
2240
- google_protobuf_FieldDescriptorProto_has_type_name(field_proto);
2241
-
2242
- f->type_ = (int)google_protobuf_FieldDescriptorProto_type(field_proto);
2243
-
2244
- if (has_type) {
2245
- switch (f->type_) {
2246
- case kUpb_FieldType_Message:
2247
- case kUpb_FieldType_Group:
2248
- case kUpb_FieldType_Enum:
2249
- if (!has_type_name) {
2250
- symtab_errf(ctx, "field of type %d requires type name (%s)",
2251
- (int)f->type_, full_name);
2252
- }
2253
- break;
2254
- default:
2255
- if (has_type_name) {
2256
- symtab_errf(ctx, "invalid type for field with type_name set (%s, %d)",
2257
- full_name, (int)f->type_);
2258
- }
2259
- }
2260
- } else if (has_type_name) {
2261
- f->type_ =
2262
- FIELD_TYPE_UNSPECIFIED; // We'll fill this in in resolve_fielddef().
2263
- }
2264
-
2265
- if (!is_extension) {
2266
- /* direct message field. */
2267
- upb_value v, field_v, json_v, existing_v;
2268
- size_t json_size;
2269
-
2270
- if (field_number <= 0 || field_number > kUpb_MaxFieldNumber) {
2271
- symtab_errf(ctx, "invalid field number (%u)", field_number);
2272
- }
2273
-
2274
- f->index_ = f - m->fields;
2275
- f->msgdef = m;
2276
- f->is_extension_ = false;
2277
-
2278
- field_v = pack_def(f, UPB_DEFTYPE_FIELD);
2279
- json_v = pack_def(f, UPB_DEFTYPE_FIELD_JSONNAME);
2280
- v = upb_value_constptr(f);
2281
- json_size = strlen(json_name);
2282
-
2283
- if (upb_strtable_lookup(&m->ntof, shortname, &existing_v)) {
2284
- symtab_errf(ctx, "duplicate field name (%s)", shortname);
2285
- }
2286
-
2287
- CHK_OOM(upb_strtable_insert(&m->ntof, name.data, name.size, field_v,
2288
- ctx->arena));
2289
-
2290
- if (strcmp(shortname, json_name) != 0) {
2291
- if (upb_strtable_lookup(&m->ntof, json_name, &v)) {
2292
- symtab_errf(ctx, "duplicate json_name (%s)", json_name);
2293
- } else {
2294
- CHK_OOM(upb_strtable_insert(&m->ntof, json_name, json_size, json_v,
2295
- ctx->arena));
2296
- }
2297
- }
2298
-
2299
- if (upb_inttable_lookup(&m->itof, field_number, NULL)) {
2300
- symtab_errf(ctx, "duplicate field number (%u)", field_number);
2301
- }
2302
-
2303
- CHK_OOM(upb_inttable_insert(&m->itof, field_number, v, ctx->arena));
2304
-
2305
- if (ctx->layout) {
2306
- const upb_MiniTable_Field* fields = m->layout->fields;
2307
- int count = m->layout->field_count;
2308
- bool found = false;
2309
- for (int i = 0; i < count; i++) {
2310
- if (fields[i].number == field_number) {
2311
- f->layout_index = i;
2312
- found = true;
2313
- break;
2314
- }
2315
- }
2316
- UPB_ASSERT(found);
2317
- }
2318
- } else {
2319
- /* extension field. */
2320
- f->is_extension_ = true;
2321
- f->scope.extension_scope = m;
2322
- symtab_add(ctx, full_name, pack_def(f, UPB_DEFTYPE_EXT));
2323
- f->layout_index = ctx->ext_count++;
2324
- if (ctx->layout) {
2325
- UPB_ASSERT(ctx->file->ext_layouts[f->layout_index]->field.number ==
2326
- field_number);
2327
- }
2328
- }
2329
-
2330
- if (f->type_ < kUpb_FieldType_Double || f->type_ > kUpb_FieldType_SInt64) {
2331
- symtab_errf(ctx, "invalid type for field %s (%d)", f->full_name, f->type_);
2332
- }
2333
-
2334
- if (f->label_ < kUpb_Label_Optional || f->label_ > kUpb_Label_Repeated) {
2335
- symtab_errf(ctx, "invalid label for field %s (%d)", f->full_name,
2336
- f->label_);
2337
- }
2338
-
2339
- /* We can't resolve the subdef or (in the case of extensions) the containing
2340
- * message yet, because it may not have been defined yet. We stash a pointer
2341
- * to the field_proto until later when we can properly resolve it. */
2342
- f->sub.unresolved = field_proto;
2343
-
2344
- if (f->label_ == kUpb_Label_Required &&
2345
- f->file->syntax == kUpb_Syntax_Proto3) {
2346
- symtab_errf(ctx, "proto3 fields cannot be required (%s)", f->full_name);
2347
- }
2348
-
2349
- if (google_protobuf_FieldDescriptorProto_has_oneof_index(field_proto)) {
2350
- uint32_t oneof_index = google_protobuf_FieldDescriptorProto_oneof_index(field_proto);
2351
- upb_OneofDef* oneof;
2352
- upb_value v = upb_value_constptr(f);
2353
-
2354
- if (upb_FieldDef_Label(f) != kUpb_Label_Optional) {
2355
- symtab_errf(ctx, "fields in oneof must have OPTIONAL label (%s)",
2356
- f->full_name);
2357
- }
2358
-
2359
- if (!m) {
2360
- symtab_errf(ctx, "oneof_index provided for extension field (%s)",
2361
- f->full_name);
2362
- }
2363
-
2364
- if (oneof_index >= m->oneof_count) {
2365
- symtab_errf(ctx, "oneof_index out of range (%s)", f->full_name);
2366
- }
2367
-
2368
- oneof = (upb_OneofDef*)&m->oneofs[oneof_index];
2369
- f->scope.oneof = oneof;
2370
-
2371
- oneof->field_count++;
2372
- if (f->proto3_optional_) {
2373
- oneof->synthetic = true;
2374
- }
2375
- CHK_OOM(upb_inttable_insert(&oneof->itof, f->number_, v, ctx->arena));
2376
- CHK_OOM(
2377
- upb_strtable_insert(&oneof->ntof, name.data, name.size, v, ctx->arena));
2378
- } else {
2379
- if (f->proto3_optional_) {
2380
- symtab_errf(ctx, "field with proto3_optional was not in a oneof (%s)",
2381
- f->full_name);
2382
- }
2383
- }
2384
-
2385
- SET_OPTIONS(f->opts, FieldDescriptorProto, FieldOptions, field_proto);
2386
-
2387
- if (google_protobuf_FieldOptions_has_packed(f->opts)) {
2388
- f->packed_ = google_protobuf_FieldOptions_packed(f->opts);
2389
- } else {
2390
- /* Repeated fields default to packed for proto3 only. */
2391
- f->packed_ = upb_FieldDef_IsPrimitive(f) &&
2392
- f->label_ == kUpb_Label_Repeated &&
2393
- f->file->syntax == kUpb_Syntax_Proto3;
2394
- }
2395
- }
2396
-
2397
- static void create_service(
2398
- symtab_addctx* ctx, const google_protobuf_ServiceDescriptorProto* svc_proto,
2399
- const upb_ServiceDef* _s) {
2400
- upb_ServiceDef* s = (upb_ServiceDef*)_s;
2401
- upb_StringView name;
2402
- const google_protobuf_MethodDescriptorProto* const* methods;
2403
- size_t i, n;
2404
-
2405
- s->file = ctx->file; /* Must happen prior to symtab_add. */
2406
-
2407
- name = google_protobuf_ServiceDescriptorProto_name(svc_proto);
2408
- check_ident(ctx, name, false);
2409
- s->full_name = makefullname(ctx, ctx->file->package, name);
2410
- symtab_add(ctx, s->full_name, pack_def(s, UPB_DEFTYPE_SERVICE));
2411
-
2412
- methods = google_protobuf_ServiceDescriptorProto_method(svc_proto, &n);
2413
-
2414
- s->method_count = n;
2415
- s->methods = symtab_alloc(ctx, sizeof(*s->methods) * n);
2416
-
2417
- SET_OPTIONS(s->opts, ServiceDescriptorProto, ServiceOptions, svc_proto);
2418
-
2419
- for (i = 0; i < n; i++) {
2420
- const google_protobuf_MethodDescriptorProto* method_proto = methods[i];
2421
- upb_MethodDef* m = (upb_MethodDef*)&s->methods[i];
2422
- upb_StringView name =
2423
- google_protobuf_MethodDescriptorProto_name(method_proto);
2424
-
2425
- m->service = s;
2426
- m->full_name = makefullname(ctx, s->full_name, name);
2427
- m->index = i;
2428
- m->client_streaming =
2429
- google_protobuf_MethodDescriptorProto_client_streaming(method_proto);
2430
- m->server_streaming =
2431
- google_protobuf_MethodDescriptorProto_server_streaming(method_proto);
2432
- m->input_type = symtab_resolve(
2433
- ctx, m->full_name, m->full_name,
2434
- google_protobuf_MethodDescriptorProto_input_type(method_proto),
2435
- UPB_DEFTYPE_MSG);
2436
- m->output_type = symtab_resolve(
2437
- ctx, m->full_name, m->full_name,
2438
- google_protobuf_MethodDescriptorProto_output_type(method_proto),
2439
- UPB_DEFTYPE_MSG);
2440
-
2441
- SET_OPTIONS(m->opts, MethodDescriptorProto, MethodOptions, method_proto);
2442
- }
2443
- }
2444
-
2445
- static int count_bits_debug(uint64_t x) {
2446
- // For assertions only, speed does not matter.
2447
- int n = 0;
2448
- while (x) {
2449
- if (x & 1) n++;
2450
- x >>= 1;
2451
- }
2452
- return n;
2453
- }
2454
-
2455
- static int compare_int32(const void* a_ptr, const void* b_ptr) {
2456
- int32_t a = *(int32_t*)a_ptr;
2457
- int32_t b = *(int32_t*)b_ptr;
2458
- return a < b ? -1 : (a == b ? 0 : 1);
2459
- }
2460
-
2461
- upb_MiniTable_Enum* create_enumlayout(symtab_addctx* ctx,
2462
- const upb_EnumDef* e) {
2463
- int n = 0;
2464
- uint64_t mask = 0;
2465
-
2466
- for (int i = 0; i < e->value_count; i++) {
2467
- uint32_t val = (uint32_t)e->values[i].number;
2468
- if (val < 64) {
2469
- mask |= 1ULL << val;
2470
- } else {
2471
- n++;
2472
- }
2473
- }
2474
-
2475
- int32_t* values = symtab_alloc(ctx, sizeof(*values) * n);
2476
-
2477
- if (n) {
2478
- int32_t* p = values;
2479
-
2480
- // Add values outside the bitmask range to the list, as described in the
2481
- // comments for upb_MiniTable_Enum.
2482
- for (int i = 0; i < e->value_count; i++) {
2483
- int32_t val = e->values[i].number;
2484
- if ((uint32_t)val >= 64) {
2485
- *p++ = val;
2486
- }
2487
- }
2488
- UPB_ASSERT(p == values + n);
2489
- }
2490
-
2491
- // Enums can have duplicate values; we must sort+uniq them.
2492
- if (values) qsort(values, n, sizeof(*values), &compare_int32);
2493
-
2494
- int dst = 0;
2495
- for (int i = 0; i < n; dst++) {
2496
- int32_t val = values[i];
2497
- while (i < n && values[i] == val) i++; // Skip duplicates.
2498
- values[dst] = val;
2499
- }
2500
- n = dst;
2501
-
2502
- UPB_ASSERT(upb_inttable_count(&e->iton) == n + count_bits_debug(mask));
2503
-
2504
- upb_MiniTable_Enum* layout = symtab_alloc(ctx, sizeof(*layout));
2505
- layout->value_count = n;
2506
- layout->mask = mask;
2507
- layout->values = values;
2508
-
2509
- return layout;
2510
- }
2511
-
2512
- static void create_enumvaldef(
2513
- symtab_addctx* ctx, const char* prefix,
2514
- const google_protobuf_EnumValueDescriptorProto* val_proto, upb_EnumDef* e,
2515
- int i) {
2516
- upb_EnumValueDef* val = (upb_EnumValueDef*)&e->values[i];
2517
- upb_StringView name =
2518
- google_protobuf_EnumValueDescriptorProto_name(val_proto);
2519
- upb_value v = upb_value_constptr(val);
2520
-
2521
- val->parent = e; /* Must happen prior to symtab_add(). */
2522
- val->full_name = makefullname(ctx, prefix, name);
2523
- val->number = google_protobuf_EnumValueDescriptorProto_number(val_proto);
2524
- symtab_add(ctx, val->full_name, pack_def(val, UPB_DEFTYPE_ENUMVAL));
2525
-
2526
- SET_OPTIONS(val->opts, EnumValueDescriptorProto, EnumValueOptions, val_proto);
2527
-
2528
- if (i == 0 && e->file->syntax == kUpb_Syntax_Proto3 && val->number != 0) {
2529
- symtab_errf(ctx, "for proto3, the first enum value must be zero (%s)",
2530
- e->full_name);
2531
- }
2532
-
2533
- CHK_OOM(upb_strtable_insert(&e->ntoi, name.data, name.size, v, ctx->arena));
2534
-
2535
- // Multiple enumerators can have the same number, first one wins.
2536
- if (!upb_inttable_lookup(&e->iton, val->number, NULL)) {
2537
- CHK_OOM(upb_inttable_insert(&e->iton, val->number, v, ctx->arena));
2538
- }
2539
- }
2540
-
2541
- static void create_enumdef(
2542
- symtab_addctx* ctx, const char* prefix,
2543
- const google_protobuf_EnumDescriptorProto* enum_proto,
2544
- const upb_MessageDef* containing_type, const upb_EnumDef* _e) {
2545
- upb_EnumDef* e = (upb_EnumDef*)_e;
2546
- ;
2547
- const google_protobuf_EnumValueDescriptorProto* const* values;
2548
- upb_StringView name;
2549
- size_t i, n;
2550
-
2551
- e->file = ctx->file; /* Must happen prior to symtab_add() */
2552
- e->containing_type = containing_type;
2553
-
2554
- name = google_protobuf_EnumDescriptorProto_name(enum_proto);
2555
- check_ident(ctx, name, false);
2556
-
2557
- e->full_name = makefullname(ctx, prefix, name);
2558
- symtab_add(ctx, e->full_name, pack_def(e, UPB_DEFTYPE_ENUM));
2559
-
2560
- values = google_protobuf_EnumDescriptorProto_value(enum_proto, &n);
2561
- CHK_OOM(upb_strtable_init(&e->ntoi, n, ctx->arena));
2562
- CHK_OOM(upb_inttable_init(&e->iton, ctx->arena));
2563
-
2564
- e->defaultval = 0;
2565
- e->value_count = n;
2566
- e->values = symtab_alloc(ctx, sizeof(*e->values) * n);
2567
-
2568
- if (n == 0) {
2569
- symtab_errf(ctx, "enums must contain at least one value (%s)",
2570
- e->full_name);
2571
- }
2572
-
2573
- SET_OPTIONS(e->opts, EnumDescriptorProto, EnumOptions, enum_proto);
2574
-
2575
- for (i = 0; i < n; i++) {
2576
- create_enumvaldef(ctx, prefix, values[i], e, i);
2577
- }
2578
-
2579
- upb_inttable_compact(&e->iton, ctx->arena);
2580
-
2581
- if (e->file->syntax == kUpb_Syntax_Proto2) {
2582
- if (ctx->layout) {
2583
- UPB_ASSERT(ctx->enum_count < ctx->layout->enum_count);
2584
- e->layout = ctx->layout->enums[ctx->enum_count++];
2585
- UPB_ASSERT(upb_inttable_count(&e->iton) ==
2586
- e->layout->value_count + count_bits_debug(e->layout->mask));
2587
- } else {
2588
- e->layout = create_enumlayout(ctx, e);
2589
- }
2590
- } else {
2591
- e->layout = NULL;
2592
- }
2593
- }
2594
-
2595
- static void msgdef_create_nested(
2596
- symtab_addctx* ctx, const google_protobuf_DescriptorProto* msg_proto,
2597
- upb_MessageDef* m);
2598
-
2599
- static void create_msgdef(symtab_addctx* ctx, const char* prefix,
2600
- const google_protobuf_DescriptorProto* msg_proto,
2601
- const upb_MessageDef* containing_type,
2602
- const upb_MessageDef* _m) {
2603
- upb_MessageDef* m = (upb_MessageDef*)_m;
2604
- const google_protobuf_OneofDescriptorProto* const* oneofs;
2605
- const google_protobuf_FieldDescriptorProto* const* fields;
2606
- const google_protobuf_DescriptorProto_ExtensionRange* const* ext_ranges;
2607
- size_t i, n_oneof, n_field, n_ext_range;
2608
- upb_StringView name;
2609
-
2610
- m->file = ctx->file; /* Must happen prior to symtab_add(). */
2611
- m->containing_type = containing_type;
2612
-
2613
- name = google_protobuf_DescriptorProto_name(msg_proto);
2614
- check_ident(ctx, name, false);
2615
-
2616
- m->full_name = makefullname(ctx, prefix, name);
2617
- symtab_add(ctx, m->full_name, pack_def(m, UPB_DEFTYPE_MSG));
2618
-
2619
- oneofs = google_protobuf_DescriptorProto_oneof_decl(msg_proto, &n_oneof);
2620
- fields = google_protobuf_DescriptorProto_field(msg_proto, &n_field);
2621
- ext_ranges =
2622
- google_protobuf_DescriptorProto_extension_range(msg_proto, &n_ext_range);
2623
-
2624
- CHK_OOM(upb_inttable_init(&m->itof, ctx->arena));
2625
- CHK_OOM(upb_strtable_init(&m->ntof, n_oneof + n_field, ctx->arena));
2626
-
2627
- if (ctx->layout) {
2628
- /* create_fielddef() below depends on this being set. */
2629
- UPB_ASSERT(ctx->msg_count < ctx->layout->msg_count);
2630
- m->layout = ctx->layout->msgs[ctx->msg_count++];
2631
- UPB_ASSERT(n_field == m->layout->field_count);
2632
- } else {
2633
- /* Allocate now (to allow cross-linking), populate later. */
2634
- m->layout =
2635
- symtab_alloc(ctx, sizeof(*m->layout) + sizeof(_upb_FastTable_Entry));
2636
- }
2637
-
2638
- SET_OPTIONS(m->opts, DescriptorProto, MessageOptions, msg_proto);
2639
-
2640
- m->oneof_count = n_oneof;
2641
- m->oneofs = symtab_alloc(ctx, sizeof(*m->oneofs) * n_oneof);
2642
- for (i = 0; i < n_oneof; i++) {
2643
- create_oneofdef(ctx, m, oneofs[i], &m->oneofs[i]);
2644
- }
2645
-
2646
- m->field_count = n_field;
2647
- m->fields = symtab_alloc(ctx, sizeof(*m->fields) * n_field);
2648
- for (i = 0; i < n_field; i++) {
2649
- create_fielddef(ctx, m->full_name, m, fields[i], &m->fields[i],
2650
- /* is_extension= */ false);
2651
- }
2652
-
2653
- m->ext_range_count = n_ext_range;
2654
- m->ext_ranges = symtab_alloc(ctx, sizeof(*m->ext_ranges) * n_ext_range);
2655
- for (i = 0; i < n_ext_range; i++) {
2656
- const google_protobuf_DescriptorProto_ExtensionRange* r = ext_ranges[i];
2657
- upb_ExtensionRange* r_def = (upb_ExtensionRange*)&m->ext_ranges[i];
2658
- int32_t start = google_protobuf_DescriptorProto_ExtensionRange_start(r);
2659
- int32_t end = google_protobuf_DescriptorProto_ExtensionRange_end(r);
2660
- int32_t max =
2661
- google_protobuf_MessageOptions_message_set_wire_format(m->opts)
2662
- ? INT32_MAX
2663
- : kUpb_MaxFieldNumber + 1;
2664
-
2665
- // A full validation would also check that each range is disjoint, and that
2666
- // none of the fields overlap with the extension ranges, but we are just
2667
- // sanity checking here.
2668
- if (start < 1 || end <= start || end > max) {
2669
- symtab_errf(ctx, "Extension range (%d, %d) is invalid, message=%s\n",
2670
- (int)start, (int)end, m->full_name);
2671
- }
2672
-
2673
- r_def->start = start;
2674
- r_def->end = end;
2675
- SET_OPTIONS(r_def->opts, DescriptorProto_ExtensionRange,
2676
- ExtensionRangeOptions, r);
2677
- }
2678
-
2679
- finalize_oneofs(ctx, m);
2680
- assign_msg_wellknowntype(m);
2681
- upb_inttable_compact(&m->itof, ctx->arena);
2682
- msgdef_create_nested(ctx, msg_proto, m);
2683
- }
2684
-
2685
- static void msgdef_create_nested(
2686
- symtab_addctx* ctx, const google_protobuf_DescriptorProto* msg_proto,
2687
- upb_MessageDef* m) {
2688
- size_t n;
2689
-
2690
- const google_protobuf_EnumDescriptorProto* const* enums =
2691
- google_protobuf_DescriptorProto_enum_type(msg_proto, &n);
2692
- m->nested_enum_count = n;
2693
- m->nested_enums = symtab_alloc(ctx, sizeof(*m->nested_enums) * n);
2694
- for (size_t i = 0; i < n; i++) {
2695
- m->nested_enum_count = i + 1;
2696
- create_enumdef(ctx, m->full_name, enums[i], m, &m->nested_enums[i]);
2697
- }
2698
-
2699
- const google_protobuf_FieldDescriptorProto* const* exts =
2700
- google_protobuf_DescriptorProto_extension(msg_proto, &n);
2701
- m->nested_ext_count = n;
2702
- m->nested_exts = symtab_alloc(ctx, sizeof(*m->nested_exts) * n);
2703
- for (size_t i = 0; i < n; i++) {
2704
- create_fielddef(ctx, m->full_name, m, exts[i], &m->nested_exts[i],
2705
- /* is_extension= */ true);
2706
- ((upb_FieldDef*)&m->nested_exts[i])->index_ = i;
2707
- }
2708
-
2709
- const google_protobuf_DescriptorProto* const* msgs =
2710
- google_protobuf_DescriptorProto_nested_type(msg_proto, &n);
2711
- m->nested_msg_count = n;
2712
- m->nested_msgs = symtab_alloc(ctx, sizeof(*m->nested_msgs) * n);
2713
- for (size_t i = 0; i < n; i++) {
2714
- create_msgdef(ctx, m->full_name, msgs[i], m, &m->nested_msgs[i]);
2715
- }
2716
- }
2717
-
2718
- static void resolve_subdef(symtab_addctx* ctx, const char* prefix,
2719
- upb_FieldDef* f) {
2720
- const google_protobuf_FieldDescriptorProto* field_proto = f->sub.unresolved;
2721
- upb_StringView name =
2722
- google_protobuf_FieldDescriptorProto_type_name(field_proto);
2723
- bool has_name =
2724
- google_protobuf_FieldDescriptorProto_has_type_name(field_proto);
2725
- switch ((int)f->type_) {
2726
- case FIELD_TYPE_UNSPECIFIED: {
2727
- // Type was not specified and must be inferred.
2728
- UPB_ASSERT(has_name);
2729
- upb_deftype_t type;
2730
- const void* def =
2731
- symtab_resolveany(ctx, f->full_name, prefix, name, &type);
2732
- switch (type) {
2733
- case UPB_DEFTYPE_ENUM:
2734
- f->sub.enumdef = def;
2735
- f->type_ = kUpb_FieldType_Enum;
2736
- break;
2737
- case UPB_DEFTYPE_MSG:
2738
- f->sub.msgdef = def;
2739
- f->type_ = kUpb_FieldType_Message; // It appears there is no way of
2740
- // this being a group.
2741
- break;
2742
- default:
2743
- symtab_errf(ctx, "Couldn't resolve type name for field %s",
2744
- f->full_name);
2745
- }
2746
- }
2747
- case kUpb_FieldType_Message:
2748
- case kUpb_FieldType_Group:
2749
- UPB_ASSERT(has_name);
2750
- f->sub.msgdef =
2751
- symtab_resolve(ctx, f->full_name, prefix, name, UPB_DEFTYPE_MSG);
2752
- break;
2753
- case kUpb_FieldType_Enum:
2754
- UPB_ASSERT(has_name);
2755
- f->sub.enumdef =
2756
- symtab_resolve(ctx, f->full_name, prefix, name, UPB_DEFTYPE_ENUM);
2757
- break;
2758
- default:
2759
- // No resolution necessary.
2760
- break;
2761
- }
2762
- }
2763
-
2764
- static void resolve_extension(
2765
- symtab_addctx* ctx, const char* prefix, upb_FieldDef* f,
2766
- const google_protobuf_FieldDescriptorProto* field_proto) {
2767
- if (!google_protobuf_FieldDescriptorProto_has_extendee(field_proto)) {
2768
- symtab_errf(ctx, "extension for field '%s' had no extendee", f->full_name);
2769
- }
2770
-
2771
- upb_StringView name =
2772
- google_protobuf_FieldDescriptorProto_extendee(field_proto);
2773
- const upb_MessageDef* m =
2774
- symtab_resolve(ctx, f->full_name, prefix, name, UPB_DEFTYPE_MSG);
2775
- f->msgdef = m;
2776
-
2777
- bool found = false;
2778
-
2779
- for (int i = 0, n = m->ext_range_count; i < n; i++) {
2780
- const upb_ExtensionRange* r = &m->ext_ranges[i];
2781
- if (r->start <= f->number_ && f->number_ < r->end) {
2782
- found = true;
2783
- break;
2784
- }
2785
- }
2786
-
2787
- if (!found) {
2788
- symtab_errf(ctx,
2789
- "field number %u in extension %s has no extension range in "
2790
- "message %s",
2791
- (unsigned)f->number_, f->full_name, f->msgdef->full_name);
2792
- }
2793
-
2794
- const upb_MiniTable_Extension* ext = ctx->file->ext_layouts[f->layout_index];
2795
- if (ctx->layout) {
2796
- UPB_ASSERT(upb_FieldDef_Number(f) == ext->field.number);
2797
- } else {
2798
- upb_MiniTable_Extension* mut_ext = (upb_MiniTable_Extension*)ext;
2799
- fill_fieldlayout(&mut_ext->field, f);
2800
- mut_ext->field.presence = 0;
2801
- mut_ext->field.offset = 0;
2802
- mut_ext->field.submsg_index = 0;
2803
- mut_ext->extendee = f->msgdef->layout;
2804
- mut_ext->sub.submsg = f->sub.msgdef->layout;
2805
- }
2806
-
2807
- CHK_OOM(upb_inttable_insert(&ctx->symtab->exts, (uintptr_t)ext,
2808
- upb_value_constptr(f), ctx->arena));
2809
- }
2810
-
2811
- static void resolve_default(
2812
- symtab_addctx* ctx, upb_FieldDef* f,
2813
- const google_protobuf_FieldDescriptorProto* field_proto) {
2814
- // Have to delay resolving of the default value until now because of the enum
2815
- // case, since enum defaults are specified with a label.
2816
- if (google_protobuf_FieldDescriptorProto_has_default_value(field_proto)) {
2817
- upb_StringView defaultval =
2818
- google_protobuf_FieldDescriptorProto_default_value(field_proto);
2819
-
2820
- if (f->file->syntax == kUpb_Syntax_Proto3) {
2821
- symtab_errf(ctx, "proto3 fields cannot have explicit defaults (%s)",
2822
- f->full_name);
2823
- }
2824
-
2825
- if (upb_FieldDef_IsSubMessage(f)) {
2826
- symtab_errf(ctx, "message fields cannot have explicit defaults (%s)",
2827
- f->full_name);
2828
- }
2829
-
2830
- parse_default(ctx, defaultval.data, defaultval.size, f);
2831
- f->has_default = true;
2832
- } else {
2833
- set_default_default(ctx, f);
2834
- f->has_default = false;
2835
- }
2836
- }
2837
-
2838
- static void resolve_fielddef(symtab_addctx* ctx, const char* prefix,
2839
- upb_FieldDef* f) {
2840
- // We have to stash this away since resolve_subdef() may overwrite it.
2841
- const google_protobuf_FieldDescriptorProto* field_proto = f->sub.unresolved;
2842
-
2843
- resolve_subdef(ctx, prefix, f);
2844
- resolve_default(ctx, f, field_proto);
2845
-
2846
- if (f->is_extension_) {
2847
- resolve_extension(ctx, prefix, f, field_proto);
2848
- }
2849
- }
2850
-
2851
- static void resolve_msgdef(symtab_addctx* ctx, upb_MessageDef* m) {
2852
- for (int i = 0; i < m->field_count; i++) {
2853
- resolve_fielddef(ctx, m->full_name, (upb_FieldDef*)&m->fields[i]);
2854
- }
2855
-
2856
- m->in_message_set = false;
2857
- for (int i = 0; i < m->nested_ext_count; i++) {
2858
- upb_FieldDef* ext = (upb_FieldDef*)&m->nested_exts[i];
2859
- resolve_fielddef(ctx, m->full_name, ext);
2860
- if (ext->type_ == kUpb_FieldType_Message &&
2861
- ext->label_ == kUpb_Label_Optional && ext->sub.msgdef == m &&
2862
- google_protobuf_MessageOptions_message_set_wire_format(
2863
- ext->msgdef->opts)) {
2864
- m->in_message_set = true;
2865
- }
2866
- }
2867
-
2868
- if (!ctx->layout) make_layout(ctx, m);
2869
-
2870
- for (int i = 0; i < m->nested_msg_count; i++) {
2871
- resolve_msgdef(ctx, (upb_MessageDef*)&m->nested_msgs[i]);
2872
- }
2873
- }
2874
-
2875
- static int count_exts_in_msg(const google_protobuf_DescriptorProto* msg_proto) {
2876
- size_t n;
2877
- google_protobuf_DescriptorProto_extension(msg_proto, &n);
2878
- int ext_count = n;
2879
-
2880
- const google_protobuf_DescriptorProto* const* nested_msgs =
2881
- google_protobuf_DescriptorProto_nested_type(msg_proto, &n);
2882
- for (size_t i = 0; i < n; i++) {
2883
- ext_count += count_exts_in_msg(nested_msgs[i]);
2884
- }
2885
-
2886
- return ext_count;
2887
- }
2888
-
2889
- static void build_filedef(
2890
- symtab_addctx* ctx, upb_FileDef* file,
2891
- const google_protobuf_FileDescriptorProto* file_proto) {
2892
- const google_protobuf_DescriptorProto* const* msgs;
2893
- const google_protobuf_EnumDescriptorProto* const* enums;
2894
- const google_protobuf_FieldDescriptorProto* const* exts;
2895
- const google_protobuf_ServiceDescriptorProto* const* services;
2896
- const upb_StringView* strs;
2897
- const int32_t* public_deps;
2898
- const int32_t* weak_deps;
2899
- size_t i, n;
2900
-
2901
- file->symtab = ctx->symtab;
2902
-
2903
- /* Count all extensions in the file, to build a flat array of layouts. */
2904
- google_protobuf_FileDescriptorProto_extension(file_proto, &n);
2905
- int ext_count = n;
2906
- msgs = google_protobuf_FileDescriptorProto_message_type(file_proto, &n);
2907
- for (int i = 0; i < n; i++) {
2908
- ext_count += count_exts_in_msg(msgs[i]);
2909
- }
2910
- file->ext_count = ext_count;
2911
-
2912
- if (ctx->layout) {
2913
- /* We are using the ext layouts that were passed in. */
2914
- file->ext_layouts = ctx->layout->exts;
2915
- if (ctx->layout->ext_count != file->ext_count) {
2916
- symtab_errf(ctx, "Extension count did not match layout (%d vs %d)",
2917
- ctx->layout->ext_count, file->ext_count);
2918
- }
2919
- } else {
2920
- /* We are building ext layouts from scratch. */
2921
- file->ext_layouts =
2922
- symtab_alloc(ctx, sizeof(*file->ext_layouts) * file->ext_count);
2923
- upb_MiniTable_Extension* ext =
2924
- symtab_alloc(ctx, sizeof(*ext) * file->ext_count);
2925
- for (int i = 0; i < file->ext_count; i++) {
2926
- file->ext_layouts[i] = &ext[i];
2927
- }
2928
- }
2929
-
2930
- if (!google_protobuf_FileDescriptorProto_has_name(file_proto)) {
2931
- symtab_errf(ctx, "File has no name");
2932
- }
2933
-
2934
- file->name =
2935
- strviewdup(ctx, google_protobuf_FileDescriptorProto_name(file_proto));
2936
-
2937
- if (google_protobuf_FileDescriptorProto_has_package(file_proto)) {
2938
- upb_StringView package =
2939
- google_protobuf_FileDescriptorProto_package(file_proto);
2940
- check_ident(ctx, package, true);
2941
- file->package = strviewdup(ctx, package);
2942
- } else {
2943
- file->package = NULL;
2944
- }
2945
-
2946
- if (google_protobuf_FileDescriptorProto_has_syntax(file_proto)) {
2947
- upb_StringView syntax =
2948
- google_protobuf_FileDescriptorProto_syntax(file_proto);
2949
-
2950
- if (streql_view(syntax, "proto2")) {
2951
- file->syntax = kUpb_Syntax_Proto2;
2952
- } else if (streql_view(syntax, "proto3")) {
2953
- file->syntax = kUpb_Syntax_Proto3;
2954
- } else {
2955
- symtab_errf(ctx, "Invalid syntax '" UPB_STRINGVIEW_FORMAT "'",
2956
- UPB_STRINGVIEW_ARGS(syntax));
2957
- }
2958
- } else {
2959
- file->syntax = kUpb_Syntax_Proto2;
2960
- }
2961
-
2962
- /* Read options. */
2963
- SET_OPTIONS(file->opts, FileDescriptorProto, FileOptions, file_proto);
2964
-
2965
- /* Verify dependencies. */
2966
- strs = google_protobuf_FileDescriptorProto_dependency(file_proto, &n);
2967
- file->dep_count = n;
2968
- file->deps = symtab_alloc(ctx, sizeof(*file->deps) * n);
2969
-
2970
- for (i = 0; i < n; i++) {
2971
- upb_StringView str = strs[i];
2972
- file->deps[i] =
2973
- upb_DefPool_FindFileByNameWithSize(ctx->symtab, str.data, str.size);
2974
- if (!file->deps[i]) {
2975
- symtab_errf(ctx,
2976
- "Depends on file '" UPB_STRINGVIEW_FORMAT
2977
- "', but it has not been loaded",
2978
- UPB_STRINGVIEW_ARGS(str));
2979
- }
2980
- }
2981
-
2982
- public_deps =
2983
- google_protobuf_FileDescriptorProto_public_dependency(file_proto, &n);
2984
- file->public_dep_count = n;
2985
- file->public_deps = symtab_alloc(ctx, sizeof(*file->public_deps) * n);
2986
- int32_t* mutable_public_deps = (int32_t*)file->public_deps;
2987
- for (i = 0; i < n; i++) {
2988
- if (public_deps[i] >= file->dep_count) {
2989
- symtab_errf(ctx, "public_dep %d is out of range", (int)public_deps[i]);
2990
- }
2991
- mutable_public_deps[i] = public_deps[i];
2992
- }
2993
-
2994
- weak_deps =
2995
- google_protobuf_FileDescriptorProto_weak_dependency(file_proto, &n);
2996
- file->weak_dep_count = n;
2997
- file->weak_deps = symtab_alloc(ctx, sizeof(*file->weak_deps) * n);
2998
- int32_t* mutable_weak_deps = (int32_t*)file->weak_deps;
2999
- for (i = 0; i < n; i++) {
3000
- if (weak_deps[i] >= file->dep_count) {
3001
- symtab_errf(ctx, "weak_dep %d is out of range", (int)weak_deps[i]);
3002
- }
3003
- mutable_weak_deps[i] = weak_deps[i];
3004
- }
3005
-
3006
- /* Create enums. */
3007
- enums = google_protobuf_FileDescriptorProto_enum_type(file_proto, &n);
3008
- file->top_lvl_enum_count = n;
3009
- file->top_lvl_enums = symtab_alloc(ctx, sizeof(*file->top_lvl_enums) * n);
3010
- for (i = 0; i < n; i++) {
3011
- create_enumdef(ctx, file->package, enums[i], NULL, &file->top_lvl_enums[i]);
3012
- }
3013
-
3014
- /* Create extensions. */
3015
- exts = google_protobuf_FileDescriptorProto_extension(file_proto, &n);
3016
- file->top_lvl_ext_count = n;
3017
- file->top_lvl_exts = symtab_alloc(ctx, sizeof(*file->top_lvl_exts) * n);
3018
- for (i = 0; i < n; i++) {
3019
- create_fielddef(ctx, file->package, NULL, exts[i], &file->top_lvl_exts[i],
3020
- /* is_extension= */ true);
3021
- ((upb_FieldDef*)&file->top_lvl_exts[i])->index_ = i;
3022
- }
3023
-
3024
- /* Create messages. */
3025
- msgs = google_protobuf_FileDescriptorProto_message_type(file_proto, &n);
3026
- file->top_lvl_msg_count = n;
3027
- file->top_lvl_msgs = symtab_alloc(ctx, sizeof(*file->top_lvl_msgs) * n);
3028
- for (i = 0; i < n; i++) {
3029
- create_msgdef(ctx, file->package, msgs[i], NULL, &file->top_lvl_msgs[i]);
3030
- }
3031
-
3032
- /* Create services. */
3033
- services = google_protobuf_FileDescriptorProto_service(file_proto, &n);
3034
- file->service_count = n;
3035
- file->services = symtab_alloc(ctx, sizeof(*file->services) * n);
3036
- for (i = 0; i < n; i++) {
3037
- create_service(ctx, services[i], &file->services[i]);
3038
- ((upb_ServiceDef*)&file->services[i])->index = i;
3039
- }
3040
-
3041
- /* Now that all names are in the table, build layouts and resolve refs. */
3042
- for (i = 0; i < (size_t)file->top_lvl_ext_count; i++) {
3043
- resolve_fielddef(ctx, file->package, (upb_FieldDef*)&file->top_lvl_exts[i]);
3044
- }
3045
-
3046
- for (i = 0; i < (size_t)file->top_lvl_msg_count; i++) {
3047
- resolve_msgdef(ctx, (upb_MessageDef*)&file->top_lvl_msgs[i]);
3048
- }
3049
-
3050
- if (file->ext_count) {
3051
- CHK_OOM(_upb_extreg_add(ctx->symtab->extreg, file->ext_layouts,
3052
- file->ext_count));
3053
- }
3054
- }
3055
-
3056
- static void remove_filedef(upb_DefPool* s, upb_FileDef* file) {
3057
- intptr_t iter = UPB_INTTABLE_BEGIN;
3058
- upb_StringView key;
3059
- upb_value val;
3060
- while (upb_strtable_next2(&s->syms, &key, &val, &iter)) {
3061
- const upb_FileDef* f;
3062
- switch (deftype(val)) {
3063
- case UPB_DEFTYPE_EXT:
3064
- f = upb_FieldDef_File(unpack_def(val, UPB_DEFTYPE_EXT));
3065
- break;
3066
- case UPB_DEFTYPE_MSG:
3067
- f = upb_MessageDef_File(unpack_def(val, UPB_DEFTYPE_MSG));
3068
- break;
3069
- case UPB_DEFTYPE_ENUM:
3070
- f = upb_EnumDef_File(unpack_def(val, UPB_DEFTYPE_ENUM));
3071
- break;
3072
- case UPB_DEFTYPE_ENUMVAL:
3073
- f = upb_EnumDef_File(
3074
- upb_EnumValueDef_Enum(unpack_def(val, UPB_DEFTYPE_ENUMVAL)));
3075
- break;
3076
- case UPB_DEFTYPE_SERVICE:
3077
- f = upb_ServiceDef_File(unpack_def(val, UPB_DEFTYPE_SERVICE));
3078
- break;
3079
- default:
3080
- UPB_UNREACHABLE();
3081
- }
3082
-
3083
- if (f == file) upb_strtable_removeiter(&s->syms, &iter);
3084
- }
3085
- }
3086
-
3087
- static const upb_FileDef* _upb_DefPool_AddFile(
3088
- upb_DefPool* s, const google_protobuf_FileDescriptorProto* file_proto,
3089
- const upb_MiniTable_File* layout, upb_Status* status) {
3090
- symtab_addctx ctx;
3091
- upb_StringView name = google_protobuf_FileDescriptorProto_name(file_proto);
3092
- upb_value v;
3093
-
3094
- if (upb_strtable_lookup2(&s->files, name.data, name.size, &v)) {
3095
- if (unpack_def(v, UPB_DEFTYPE_FILE)) {
3096
- upb_Status_SetErrorFormat(status, "duplicate file name (%.*s)",
3097
- UPB_STRINGVIEW_ARGS(name));
3098
- return NULL;
3099
- }
3100
- const upb_MiniTable_File* registered = unpack_def(v, UPB_DEFTYPE_LAYOUT);
3101
- UPB_ASSERT(registered);
3102
- if (layout && layout != registered) {
3103
- upb_Status_SetErrorFormat(
3104
- status, "tried to build with a different layout (filename=%.*s)",
3105
- UPB_STRINGVIEW_ARGS(name));
3106
- return NULL;
3107
- }
3108
- layout = registered;
3109
- }
3110
-
3111
- ctx.symtab = s;
3112
- ctx.layout = layout;
3113
- ctx.msg_count = 0;
3114
- ctx.enum_count = 0;
3115
- ctx.ext_count = 0;
3116
- ctx.status = status;
3117
- ctx.file = NULL;
3118
- ctx.arena = upb_Arena_New();
3119
- ctx.tmp_arena = upb_Arena_New();
3120
-
3121
- if (!ctx.arena || !ctx.tmp_arena) {
3122
- if (ctx.arena) upb_Arena_Free(ctx.arena);
3123
- if (ctx.tmp_arena) upb_Arena_Free(ctx.tmp_arena);
3124
- upb_Status_setoom(status);
3125
- return NULL;
3126
- }
3127
-
3128
- if (UPB_UNLIKELY(UPB_SETJMP(ctx.err))) {
3129
- UPB_ASSERT(!upb_Status_IsOk(status));
3130
- if (ctx.file) {
3131
- remove_filedef(s, ctx.file);
3132
- ctx.file = NULL;
3133
- }
3134
- } else {
3135
- ctx.file = symtab_alloc(&ctx, sizeof(*ctx.file));
3136
- build_filedef(&ctx, ctx.file, file_proto);
3137
- upb_strtable_insert(&s->files, name.data, name.size,
3138
- pack_def(ctx.file, UPB_DEFTYPE_FILE), ctx.arena);
3139
- UPB_ASSERT(upb_Status_IsOk(status));
3140
- upb_Arena_Fuse(s->arena, ctx.arena);
3141
- }
3142
-
3143
- upb_Arena_Free(ctx.arena);
3144
- upb_Arena_Free(ctx.tmp_arena);
3145
- return ctx.file;
3146
- }
3147
-
3148
- const upb_FileDef* upb_DefPool_AddFile(
3149
- upb_DefPool* s, const google_protobuf_FileDescriptorProto* file_proto,
3150
- upb_Status* status) {
3151
- return _upb_DefPool_AddFile(s, file_proto, NULL, status);
3152
- }
3153
-
3154
- /* Include here since we want most of this file to be stdio-free. */
3155
- #include <stdio.h>
3156
-
3157
- bool _upb_DefPool_LoadDefInitEx(upb_DefPool* s, const _upb_DefPool_Init* init,
3158
- bool rebuild_minitable) {
3159
- /* Since this function should never fail (it would indicate a bug in upb) we
3160
- * print errors to stderr instead of returning error status to the user. */
3161
- _upb_DefPool_Init** deps = init->deps;
3162
- google_protobuf_FileDescriptorProto* file;
3163
- upb_Arena* arena;
3164
- upb_Status status;
3165
-
3166
- upb_Status_Clear(&status);
3167
-
3168
- if (upb_DefPool_FindFileByName(s, init->filename)) {
3169
- return true;
3170
- }
3171
-
3172
- arena = upb_Arena_New();
3173
-
3174
- for (; *deps; deps++) {
3175
- if (!_upb_DefPool_LoadDefInitEx(s, *deps, rebuild_minitable)) goto err;
3176
- }
3177
-
3178
- file = google_protobuf_FileDescriptorProto_parse_ex(
3179
- init->descriptor.data, init->descriptor.size, NULL,
3180
- kUpb_DecodeOption_AliasString, arena);
3181
- s->bytes_loaded += init->descriptor.size;
3182
-
3183
- if (!file) {
3184
- upb_Status_SetErrorFormat(
3185
- &status,
3186
- "Failed to parse compiled-in descriptor for file '%s'. This should "
3187
- "never happen.",
3188
- init->filename);
3189
- goto err;
3190
- }
3191
-
3192
- const upb_MiniTable_File* mt = rebuild_minitable ? NULL : init->layout;
3193
- if (!_upb_DefPool_AddFile(s, file, mt, &status)) {
3194
- goto err;
3195
- }
3196
-
3197
- upb_Arena_Free(arena);
3198
- return true;
3199
-
3200
- err:
3201
- fprintf(stderr,
3202
- "Error loading compiled-in descriptor for file '%s' (this should "
3203
- "never happen): %s\n",
3204
- init->filename, upb_Status_ErrorMessage(&status));
3205
- upb_Arena_Free(arena);
3206
- return false;
3207
- }
3208
-
3209
- size_t _upb_DefPool_BytesLoaded(const upb_DefPool* s) {
3210
- return s->bytes_loaded;
3211
- }
3212
-
3213
- upb_Arena* _upb_DefPool_Arena(const upb_DefPool* s) { return s->arena; }
3214
-
3215
- const upb_FieldDef* _upb_DefPool_FindExtensionByMiniTable(
3216
- const upb_DefPool* s, const upb_MiniTable_Extension* ext) {
3217
- upb_value v;
3218
- bool ok = upb_inttable_lookup(&s->exts, (uintptr_t)ext, &v);
3219
- UPB_ASSERT(ok);
3220
- return upb_value_getconstptr(v);
3221
- }
3222
-
3223
- const upb_FieldDef* upb_DefPool_FindExtensionByNumber(const upb_DefPool* s,
3224
- const upb_MessageDef* m,
3225
- int32_t fieldnum) {
3226
- const upb_MiniTable* l = upb_MessageDef_MiniTable(m);
3227
- const upb_MiniTable_Extension* ext = _upb_extreg_get(s->extreg, l, fieldnum);
3228
- return ext ? _upb_DefPool_FindExtensionByMiniTable(s, ext) : NULL;
3229
- }
3230
-
3231
- bool _upb_DefPool_registerlayout(upb_DefPool* s, const char* filename,
3232
- const upb_MiniTable_File* file) {
3233
- if (upb_DefPool_FindFileByName(s, filename)) return false;
3234
- upb_value v = pack_def(file, UPB_DEFTYPE_LAYOUT);
3235
- return upb_strtable_insert(&s->files, filename, strlen(filename), v,
3236
- s->arena);
3237
- }
3238
-
3239
- const upb_ExtensionRegistry* upb_DefPool_ExtensionRegistry(
3240
- const upb_DefPool* s) {
3241
- return s->extreg;
3242
- }
3243
-
3244
- const upb_FieldDef** upb_DefPool_GetAllExtensions(const upb_DefPool* s,
3245
- const upb_MessageDef* m,
3246
- size_t* count) {
3247
- size_t n = 0;
3248
- intptr_t iter = UPB_INTTABLE_BEGIN;
3249
- uintptr_t key;
3250
- upb_value val;
3251
- // This is O(all exts) instead of O(exts for m). If we need this to be
3252
- // efficient we may need to make extreg into a two-level table, or have a
3253
- // second per-message index.
3254
- while (upb_inttable_next2(&s->exts, &key, &val, &iter)) {
3255
- const upb_FieldDef* f = upb_value_getconstptr(val);
3256
- if (upb_FieldDef_ContainingType(f) == m) n++;
3257
- }
3258
- const upb_FieldDef** exts = malloc(n * sizeof(*exts));
3259
- iter = UPB_INTTABLE_BEGIN;
3260
- size_t i = 0;
3261
- while (upb_inttable_next2(&s->exts, &key, &val, &iter)) {
3262
- const upb_FieldDef* f = upb_value_getconstptr(val);
3263
- if (upb_FieldDef_ContainingType(f) == m) exts[i++] = f;
3264
- }
3265
- *count = n;
3266
- return exts;
3267
- }
3268
-
3269
- #undef CHK_OOM