grpc 1.54.3 → 1.58.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1696) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +642 -322
  3. data/include/grpc/event_engine/event_engine.h +26 -36
  4. data/include/grpc/event_engine/memory_allocator.h +2 -2
  5. data/include/grpc/grpc_audit_logging.h +96 -0
  6. data/include/grpc/grpc_security.h +19 -0
  7. data/include/grpc/impl/channel_arg_names.h +371 -0
  8. data/include/grpc/impl/grpc_types.h +1 -348
  9. data/include/grpc/module.modulemap +3 -0
  10. data/include/grpc/support/json.h +218 -0
  11. data/include/grpc/support/port_platform.h +29 -23
  12. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +7 -2
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +2 -1
  14. data/src/core/ext/filters/client_channel/backend_metric.cc +4 -1
  15. data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
  16. data/src/core/ext/filters/client_channel/client_channel.cc +145 -125
  17. data/src/core/ext/filters/client_channel/client_channel.h +24 -16
  18. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +20 -19
  19. data/src/core/ext/filters/client_channel/client_channel_internal.h +22 -59
  20. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +2 -2
  21. data/src/core/ext/filters/client_channel/config_selector.h +9 -36
  22. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  23. data/src/core/ext/filters/client_channel/http_proxy.cc +40 -2
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +27 -53
  25. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +23 -9
  26. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +25 -35
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +86 -138
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +2 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +5 -4
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -2
  32. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +480 -0
  33. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +52 -0
  34. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +202 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +6 -9
  36. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +2 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +136 -78
  38. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +9 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +168 -104
  40. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.h +20 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +16 -45
  42. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +22 -14
  43. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
  44. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +73 -129
  45. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -5
  46. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +57 -22
  47. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
  48. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +54 -45
  49. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +19 -54
  50. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +57 -116
  51. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +8 -0
  52. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +35 -86
  53. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -69
  54. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +70 -141
  55. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +26 -65
  56. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +28 -96
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +21 -123
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.h +30 -0
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +102 -11
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +44 -37
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +4 -1
  62. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.cc +66 -0
  63. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.h +27 -0
  64. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +586 -0
  65. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.h +35 -0
  66. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +97 -0
  67. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.h +32 -0
  68. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +3 -14
  69. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.h +24 -0
  70. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +30 -28
  71. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +10 -4
  72. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +1 -0
  73. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +25 -13
  74. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +420 -275
  75. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +32 -1
  76. data/src/core/ext/filters/client_channel/retry_filter.cc +39 -2530
  77. data/src/core/ext/filters/client_channel/retry_filter.h +92 -1
  78. data/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.cc +2052 -0
  79. data/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.h +442 -0
  80. data/src/core/ext/filters/client_channel/retry_service_config.cc +10 -9
  81. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +40 -90
  82. data/src/core/ext/filters/client_channel/subchannel.cc +17 -199
  83. data/src/core/ext/filters/client_channel/subchannel.h +14 -48
  84. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +3 -0
  85. data/src/core/ext/filters/deadline/deadline_filter.cc +1 -1
  86. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +1 -1
  87. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -0
  88. data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
  89. data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -7
  90. data/src/core/ext/filters/http/server/http_server_filter.cc +1 -1
  91. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -0
  92. data/src/core/ext/filters/rbac/rbac_filter.cc +40 -111
  93. data/src/core/ext/filters/rbac/rbac_filter.h +12 -30
  94. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +162 -72
  95. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
  96. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +164 -88
  97. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -7
  98. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -0
  99. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -16
  100. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +541 -542
  101. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +21 -0
  102. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +70 -0
  103. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +6569 -174
  104. data/src/core/ext/transport/chttp2/transport/decode_huff.h +2278 -441
  105. data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
  106. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -27
  107. data/src/core/ext/transport/chttp2/transport/frame_ping.h +0 -3
  108. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -0
  109. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +176 -0
  110. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +326 -0
  111. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +631 -547
  112. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +157 -11
  113. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +48 -33
  114. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +19 -5
  115. data/src/core/ext/transport/chttp2/transport/internal.h +42 -80
  116. data/src/core/ext/transport/chttp2/transport/parsing.cc +43 -22
  117. data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc +80 -0
  118. data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.h +55 -0
  119. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +98 -0
  120. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +73 -0
  121. data/src/core/ext/transport/chttp2/transport/writing.cc +96 -94
  122. data/src/core/ext/transport/inproc/inproc_transport.cc +1 -0
  123. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +87 -52
  124. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +414 -181
  125. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -60
  126. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +481 -224
  127. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +90 -55
  128. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +415 -188
  129. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +357 -210
  130. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1572 -729
  131. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +30 -17
  132. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +144 -47
  133. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +34 -21
  134. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +160 -62
  135. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +27 -14
  136. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +78 -38
  137. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +20 -11
  138. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +48 -26
  139. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +20 -11
  140. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +48 -26
  141. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +109 -62
  142. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +566 -244
  143. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +21 -12
  144. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +45 -30
  145. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +22 -19
  146. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +82 -29
  147. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +23 -16
  148. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +45 -30
  149. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +255 -147
  150. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +876 -404
  151. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +417 -264
  152. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1839 -899
  153. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -41
  154. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +286 -148
  155. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +531 -334
  156. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2017 -1131
  157. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -12
  158. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +45 -30
  159. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +89 -52
  160. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +347 -232
  161. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +264 -165
  162. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +888 -476
  163. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +139 -80
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +527 -274
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +22 -13
  166. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +50 -36
  167. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +380 -221
  168. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1168 -611
  169. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +157 -92
  170. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +627 -292
  171. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +18 -11
  172. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +37 -26
  173. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +21 -12
  174. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +45 -30
  175. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +30 -17
  176. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +144 -47
  177. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +279 -167
  178. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +818 -440
  179. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +232 -137
  180. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +1164 -500
  181. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -13
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +60 -37
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +369 -211
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1114 -646
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +33 -18
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +117 -51
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +34 -19
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +118 -56
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +38 -21
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +148 -64
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +31 -18
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +143 -65
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +22 -13
  194. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +51 -37
  195. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +78 -43
  196. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +265 -127
  197. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +145 -88
  198. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +438 -241
  199. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +115 -62
  200. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +559 -227
  201. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +18 -11
  202. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +35 -26
  203. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +175 -118
  204. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +857 -442
  205. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +172 -95
  206. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +864 -374
  207. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -27
  208. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +159 -110
  209. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +39 -18
  210. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +74 -56
  211. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +29 -15
  212. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +92 -45
  213. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +131 -74
  214. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +489 -249
  215. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +163 -84
  216. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +680 -240
  217. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +248 -139
  218. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +933 -433
  219. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +80 -49
  220. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +616 -201
  221. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +1283 -776
  222. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +5422 -2519
  223. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +49 -28
  224. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +164 -84
  225. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +228 -141
  226. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +738 -399
  227. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +20 -11
  228. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +48 -26
  229. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +21 -12
  230. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +45 -30
  231. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +32 -19
  232. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +70 -49
  233. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +27 -14
  234. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +110 -43
  235. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +46 -25
  236. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +259 -100
  237. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +21 -12
  238. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +45 -30
  239. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +18 -11
  240. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +35 -26
  241. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +42 -23
  242. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +108 -70
  243. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +7 -4
  244. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +21 -16
  245. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +43 -24
  246. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +110 -75
  247. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +30 -17
  248. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +95 -50
  249. data/src/core/ext/upb-generated/envoy/data/accesslog/v3/accesslog.upb.c +558 -0
  250. data/src/core/ext/upb-generated/envoy/data/accesslog/v3/accesslog.upb.h +2710 -0
  251. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +16 -9
  252. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +73 -23
  253. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +60 -37
  254. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +150 -108
  255. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +93 -43
  256. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +386 -167
  257. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +44 -25
  258. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +114 -80
  259. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +68 -22
  260. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +355 -82
  261. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +32 -19
  262. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +73 -51
  263. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +504 -300
  264. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2243 -1075
  265. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +18 -11
  266. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +35 -26
  267. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +35 -21
  268. 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
  269. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +72 -45
  270. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +193 -138
  271. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.c +47 -0
  272. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.h +93 -0
  273. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +34 -21
  274. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +119 -78
  275. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +18 -11
  276. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +35 -26
  277. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -4
  278. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +15 -10
  279. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +184 -96
  280. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +907 -360
  281. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +56 -33
  282. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +150 -101
  283. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +188 -111
  284. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +816 -419
  285. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +32 -19
  286. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +109 -53
  287. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +10 -7
  288. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +18 -14
  289. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +300 -177
  290. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1284 -522
  291. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +42 -23
  292. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +188 -75
  293. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +130 -83
  294. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +510 -238
  295. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +22 -13
  296. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +55 -34
  297. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +39 -26
  298. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +124 -68
  299. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +21 -12
  300. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +47 -30
  301. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +52 -29
  302. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +92 -62
  303. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +37 -20
  304. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +133 -63
  305. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +22 -13
  306. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +91 -40
  307. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -12
  308. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +50 -32
  309. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +18 -11
  310. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +37 -26
  311. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +46 -27
  312. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +101 -70
  313. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +13 -10
  314. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +25 -22
  315. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +40 -23
  316. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +161 -75
  317. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +31 -18
  318. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +114 -56
  319. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +46 -29
  320. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +139 -91
  321. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +65 -42
  322. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +200 -121
  323. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +80 -45
  324. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +208 -131
  325. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +34 -21
  326. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +74 -53
  327. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -4
  328. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +13 -8
  329. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +16 -9
  330. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +28 -18
  331. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +28 -15
  332. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +55 -34
  333. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +43 -22
  334. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +91 -53
  335. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +35 -20
  336. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +92 -57
  337. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +7 -4
  338. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +13 -8
  339. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -11
  340. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +48 -26
  341. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +23 -14
  342. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +61 -41
  343. data/src/core/ext/upb-generated/google/api/annotations.upb.c +14 -11
  344. data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -20
  345. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +255 -154
  346. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +934 -450
  347. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +299 -180
  348. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +946 -483
  349. data/src/core/ext/upb-generated/google/api/http.upb.c +68 -35
  350. data/src/core/ext/upb-generated/google/api/http.upb.h +284 -120
  351. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +22 -13
  352. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +95 -37
  353. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -10
  354. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +38 -22
  355. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +1018 -424
  356. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +3851 -1412
  357. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -10
  358. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +38 -22
  359. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +10 -7
  360. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +18 -14
  361. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +62 -39
  362. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +207 -102
  363. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -10
  364. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +38 -22
  365. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +90 -51
  366. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +157 -107
  367. data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -13
  368. data/src/core/ext/upb-generated/google/rpc/status.upb.h +95 -37
  369. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +59 -34
  370. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +154 -92
  371. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +43 -24
  372. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +118 -60
  373. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +250 -145
  374. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +919 -415
  375. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +34 -19
  376. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +76 -51
  377. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +25 -14
  378. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +45 -30
  379. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +144 -81
  380. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +405 -217
  381. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +51 -26
  382. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +153 -61
  383. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +173 -102
  384. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +855 -298
  385. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +68 -49
  386. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +155 -104
  387. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +26 -17
  388. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +55 -34
  389. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +12 -9
  390. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +31 -14
  391. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +26 -17
  392. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +55 -34
  393. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +23 -16
  394. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +45 -30
  395. data/src/core/ext/upb-generated/validate/validate.upb.c +845 -455
  396. data/src/core/ext/upb-generated/validate/validate.upb.h +4347 -1908
  397. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +68 -49
  398. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +155 -104
  399. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +26 -17
  400. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +55 -34
  401. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +12 -9
  402. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +31 -14
  403. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +65 -44
  404. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +137 -91
  405. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +23 -16
  406. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +45 -30
  407. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +16 -9
  408. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +28 -18
  409. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +21 -12
  410. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +45 -30
  411. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +37 -22
  412. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +96 -63
  413. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +26 -17
  414. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +52 -29
  415. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +21 -12
  416. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +45 -30
  417. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +23 -14
  418. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +62 -42
  419. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +44 -25
  420. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +169 -79
  421. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +27 -14
  422. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +65 -38
  423. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +78 -38
  424. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +182 -76
  425. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +21 -12
  426. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +89 -34
  427. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +18 -11
  428. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +35 -26
  429. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +32 -19
  430. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +150 -54
  431. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +10 -7
  432. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +18 -14
  433. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +34 -21
  434. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +161 -63
  435. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +162 -101
  436. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +501 -293
  437. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +85 -52
  438. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +430 -164
  439. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +24 -15
  440. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +53 -37
  441. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +40 -23
  442. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +161 -75
  443. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +37 -22
  444. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +92 -66
  445. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +43 -22
  446. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +91 -53
  447. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +21 -12
  448. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +45 -30
  449. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +1 -1
  450. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +6 -5
  451. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +1 -1
  452. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +6 -5
  453. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +1 -1
  454. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +6 -5
  455. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +1 -1
  456. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +6 -5
  457. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +1 -1
  458. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +6 -5
  459. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +1 -1
  460. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +6 -5
  461. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +1 -1
  462. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +6 -5
  463. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +1 -1
  464. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +6 -5
  465. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +1 -1
  466. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +6 -5
  467. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +1 -1
  468. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +6 -5
  469. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +1 -1
  470. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +6 -5
  471. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +1 -1
  472. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +6 -5
  473. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +1 -1
  474. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +6 -5
  475. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +89 -77
  476. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +11 -5
  477. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +252 -253
  478. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +6 -5
  479. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +1 -1
  480. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +6 -5
  481. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +1 -1
  482. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +6 -5
  483. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +1 -1
  484. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +6 -5
  485. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +1 -1
  486. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +6 -5
  487. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +1 -1
  488. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +6 -5
  489. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +1 -1
  490. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +6 -5
  491. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +1 -1
  492. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +6 -5
  493. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +1 -1
  494. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +6 -5
  495. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +1 -1
  496. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +6 -5
  497. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +1 -1
  498. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +6 -5
  499. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +1 -1
  500. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +6 -5
  501. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +1 -1
  502. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +6 -5
  503. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +163 -161
  504. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +6 -5
  505. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +130 -119
  506. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +6 -5
  507. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +1 -1
  508. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +6 -5
  509. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +142 -136
  510. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +6 -5
  511. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +1 -1
  512. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +6 -5
  513. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +1 -1
  514. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +6 -5
  515. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +1 -1
  516. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +6 -5
  517. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +1 -1
  518. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +6 -5
  519. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +1 -1
  520. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +6 -5
  521. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +1 -1
  522. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +6 -5
  523. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +1 -1
  524. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +6 -5
  525. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +1 -1
  526. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +6 -5
  527. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +1 -1
  528. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +6 -5
  529. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +1 -1
  530. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +6 -5
  531. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +1 -1
  532. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +6 -5
  533. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +1 -1
  534. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +6 -5
  535. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +1 -1
  536. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +6 -5
  537. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +20 -13
  538. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +6 -5
  539. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +1 -1
  540. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +6 -5
  541. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +39 -31
  542. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +11 -5
  543. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +134 -128
  544. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +11 -5
  545. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +1 -1
  546. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +6 -5
  547. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +1 -1
  548. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +6 -5
  549. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +1 -1
  550. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +6 -5
  551. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +1 -1
  552. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +6 -5
  553. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +1 -1
  554. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +6 -5
  555. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +1 -1
  556. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +6 -5
  557. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +1 -1
  558. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +6 -5
  559. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +1 -1
  560. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +6 -5
  561. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +1 -1
  562. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +6 -5
  563. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +1 -1
  564. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +6 -5
  565. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +1 -1
  566. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +6 -5
  567. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +1 -1
  568. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +6 -5
  569. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +1 -1
  570. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +6 -5
  571. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +1 -1
  572. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +6 -5
  573. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +1 -1
  574. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +6 -5
  575. data/src/core/ext/upbdefs-generated/envoy/data/accesslog/v3/accesslog.upbdefs.c +402 -0
  576. data/src/core/ext/upbdefs-generated/envoy/data/accesslog/v3/accesslog.upbdefs.h +111 -0
  577. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +1 -1
  578. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +6 -5
  579. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +1 -1
  580. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +6 -5
  581. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +81 -75
  582. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +6 -5
  583. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +1 -1
  584. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +6 -5
  585. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +64 -48
  586. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +11 -5
  587. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +1 -1
  588. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +6 -5
  589. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +495 -470
  590. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +11 -5
  591. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +1 -1
  592. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +6 -5
  593. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +1 -1
  594. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +6 -5
  595. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +138 -136
  596. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +6 -5
  597. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +1 -1
  598. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +6 -5
  599. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +1 -1
  600. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +6 -5
  601. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +1 -1
  602. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +6 -5
  603. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +1 -1
  604. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +6 -5
  605. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +1 -1
  606. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +6 -5
  607. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +1 -1
  608. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +6 -5
  609. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +12 -13
  610. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +6 -5
  611. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +1 -1
  612. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +6 -5
  613. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +1 -1
  614. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +6 -5
  615. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +1 -1
  616. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +6 -5
  617. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +1 -1
  618. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +6 -5
  619. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +1 -1
  620. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +6 -5
  621. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +1 -1
  622. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +6 -5
  623. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +1 -1
  624. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +6 -5
  625. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +1 -1
  626. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +6 -5
  627. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +30 -30
  628. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +6 -5
  629. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +1 -1
  630. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +6 -5
  631. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +1 -1
  632. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +6 -5
  633. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +1 -1
  634. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +6 -5
  635. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +1 -1
  636. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +6 -5
  637. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +1 -1
  638. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +6 -5
  639. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +1 -1
  640. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +6 -5
  641. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +1 -1
  642. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +6 -5
  643. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +1 -1
  644. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +6 -5
  645. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +1 -1
  646. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +6 -5
  647. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +1 -1
  648. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +6 -5
  649. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +1 -1
  650. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +6 -5
  651. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +1 -1
  652. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +6 -5
  653. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +1 -1
  654. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +6 -5
  655. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +1 -1
  656. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +6 -5
  657. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +1 -1
  658. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +6 -5
  659. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +1 -1
  660. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +6 -5
  661. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +1 -1
  662. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +6 -5
  663. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +1 -1
  664. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +6 -5
  665. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +1 -1
  666. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +6 -5
  667. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +1 -1
  668. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +6 -5
  669. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +1 -1
  670. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +6 -5
  671. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +329 -273
  672. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +11 -5
  673. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +1 -1
  674. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +6 -5
  675. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +1 -1
  676. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +6 -5
  677. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +1 -1
  678. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +6 -5
  679. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +1 -1
  680. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +6 -5
  681. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +1 -1
  682. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +6 -5
  683. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +1 -1
  684. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +6 -5
  685. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +1 -1
  686. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +6 -5
  687. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +1 -1
  688. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +6 -5
  689. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +1 -1
  690. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +6 -5
  691. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +1 -1
  692. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +6 -5
  693. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +1 -1
  694. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +6 -5
  695. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +1 -1
  696. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +6 -5
  697. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +1 -1
  698. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +6 -5
  699. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +1 -1
  700. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +6 -5
  701. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +1 -1
  702. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +6 -5
  703. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +1 -1
  704. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +6 -5
  705. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +1 -1
  706. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +6 -5
  707. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +1 -1
  708. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +6 -5
  709. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +1 -1
  710. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +6 -5
  711. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +1 -1
  712. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +6 -5
  713. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +1 -1
  714. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +6 -5
  715. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +1 -1
  716. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +6 -5
  717. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +1 -1
  718. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +6 -5
  719. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +1 -1
  720. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +6 -5
  721. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +1 -1
  722. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +6 -5
  723. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +1 -1
  724. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +6 -5
  725. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +1 -1
  726. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +6 -5
  727. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +1 -1
  728. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +6 -5
  729. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +1 -1
  730. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +6 -5
  731. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +1 -1
  732. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +6 -5
  733. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +1 -1
  734. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +6 -5
  735. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +1 -1
  736. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +6 -5
  737. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +1 -1
  738. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +6 -5
  739. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +1 -1
  740. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +6 -5
  741. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +1 -1
  742. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +6 -5
  743. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +1 -1
  744. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +6 -5
  745. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +1 -1
  746. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +6 -5
  747. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +1 -1
  748. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +6 -5
  749. data/src/core/ext/xds/certificate_provider_store.cc +8 -13
  750. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  751. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  752. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  753. data/src/core/ext/xds/upb_utils.h +1 -1
  754. data/src/core/ext/xds/xds_api.cc +41 -18
  755. data/src/core/ext/xds/xds_api.h +5 -4
  756. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  757. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  758. data/src/core/ext/xds/xds_bootstrap.cc +3 -3
  759. data/src/core/ext/xds/xds_bootstrap_grpc.cc +65 -50
  760. data/src/core/ext/xds/xds_bootstrap_grpc.h +10 -13
  761. data/src/core/ext/xds/xds_client.cc +29 -7
  762. data/src/core/ext/xds/xds_client.h +1 -1
  763. data/src/core/ext/xds/xds_client_grpc.cc +12 -6
  764. data/src/core/ext/xds/xds_client_grpc.h +16 -2
  765. data/src/core/ext/xds/xds_client_stats.h +11 -1
  766. data/src/core/ext/xds/xds_cluster.cc +70 -67
  767. data/src/core/ext/xds/xds_cluster.h +1 -2
  768. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +15 -11
  769. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +2 -2
  770. data/src/core/ext/xds/xds_common_types.cc +8 -5
  771. data/src/core/ext/xds/xds_endpoint.cc +9 -9
  772. data/src/core/ext/xds/xds_endpoint.h +1 -1
  773. data/src/core/ext/xds/xds_health_status.cc +0 -17
  774. data/src/core/ext/xds/xds_health_status.h +5 -25
  775. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -14
  776. data/src/core/ext/xds/xds_http_fault_filter.h +1 -1
  777. data/src/core/ext/xds/xds_http_filters.h +3 -2
  778. data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -72
  779. data/src/core/ext/xds/xds_http_rbac_filter.h +1 -1
  780. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -12
  781. data/src/core/ext/xds/xds_http_stateful_session_filter.h +1 -1
  782. data/src/core/ext/xds/xds_lb_policy_registry.cc +60 -36
  783. data/src/core/ext/xds/xds_listener.cc +11 -4
  784. data/src/core/ext/xds/xds_listener.h +1 -1
  785. data/src/core/ext/xds/xds_resource_type.h +2 -2
  786. data/src/core/ext/xds/xds_route_config.cc +52 -8
  787. data/src/core/ext/xds/xds_route_config.h +1 -1
  788. data/src/core/ext/xds/xds_transport_grpc.cc +2 -1
  789. data/src/core/lib/address_utils/parse_address.cc +63 -1
  790. data/src/core/lib/address_utils/parse_address.h +8 -0
  791. data/src/core/lib/address_utils/sockaddr_utils.cc +46 -1
  792. data/src/core/lib/address_utils/sockaddr_utils.h +2 -2
  793. data/src/core/lib/avl/avl.h +15 -173
  794. data/src/core/lib/backoff/random_early_detection.h +5 -0
  795. data/src/core/lib/channel/call_tracer.cc +289 -0
  796. data/src/core/lib/channel/call_tracer.h +35 -0
  797. data/src/core/lib/channel/channel_args.cc +120 -46
  798. data/src/core/lib/channel/channel_args.h +52 -4
  799. data/src/core/lib/channel/channel_trace.cc +16 -12
  800. data/src/core/lib/channel/channelz.cc +163 -135
  801. data/src/core/lib/channel/channelz.h +42 -35
  802. data/src/core/lib/channel/channelz_registry.cc +24 -20
  803. data/src/core/lib/channel/connected_channel.cc +103 -35
  804. data/src/core/lib/channel/promise_based_filter.cc +6 -13
  805. data/src/core/lib/channel/promise_based_filter.h +3 -0
  806. data/src/core/lib/compression/compression_internal.cc +8 -7
  807. data/src/core/lib/config/config_vars.cc +20 -18
  808. data/src/core/lib/config/config_vars.h +4 -4
  809. data/src/core/lib/config/load_config.cc +13 -0
  810. data/src/core/lib/config/load_config.h +6 -0
  811. data/src/core/lib/debug/event_log.h +1 -1
  812. data/src/core/lib/debug/stats_data.cc +93 -21
  813. data/src/core/lib/debug/stats_data.h +42 -1
  814. data/src/core/lib/debug/trace.cc +31 -56
  815. data/src/core/lib/debug/trace.h +14 -4
  816. data/src/core/lib/event_engine/ares_resolver.cc +712 -0
  817. data/src/core/lib/event_engine/ares_resolver.h +150 -0
  818. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +218 -0
  819. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  820. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  821. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  822. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  823. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +229 -0
  824. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +117 -0
  825. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  826. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  827. data/src/core/lib/event_engine/event_engine.cc +0 -12
  828. data/src/core/lib/event_engine/forkable.cc +62 -43
  829. data/src/core/lib/event_engine/forkable.h +15 -0
  830. data/src/core/lib/event_engine/grpc_polled_fd.h +73 -0
  831. data/src/core/lib/event_engine/handle_containers.h +0 -4
  832. data/src/core/lib/event_engine/poller.h +2 -2
  833. data/src/core/lib/event_engine/posix.h +4 -0
  834. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +5 -7
  835. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +29 -9
  836. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +10 -1
  837. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +197 -0
  838. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  839. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +28 -14
  840. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +12 -1
  841. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +90 -47
  842. data/src/core/lib/event_engine/posix_engine/posix_engine.h +21 -14
  843. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +41 -31
  844. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +9 -8
  845. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +4 -2
  846. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +49 -3
  847. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +9 -0
  848. data/src/core/lib/event_engine/posix_engine/timer.h +10 -37
  849. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  850. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -0
  851. data/src/core/lib/event_engine/shim.cc +9 -1
  852. data/src/core/lib/event_engine/tcp_socket_utils.cc +67 -7
  853. data/src/core/lib/event_engine/tcp_socket_utils.h +3 -0
  854. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  855. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  856. data/src/core/lib/event_engine/thread_pool/thread_count.cc +58 -0
  857. data/src/core/lib/event_engine/thread_pool/thread_count.h +161 -0
  858. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool.h} +21 -9
  859. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +47 -0
  860. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +517 -0
  861. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +223 -0
  862. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +157 -0
  863. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +104 -0
  864. data/src/core/lib/event_engine/trace.cc +1 -0
  865. data/src/core/lib/event_engine/trace.h +6 -0
  866. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  867. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  868. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  869. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  870. data/src/core/lib/event_engine/windows/windows_endpoint.cc +60 -59
  871. data/src/core/lib/event_engine/windows/windows_endpoint.h +17 -13
  872. data/src/core/lib/event_engine/windows/windows_engine.cc +21 -18
  873. data/src/core/lib/event_engine/windows/windows_engine.h +14 -18
  874. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  875. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  876. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  877. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  878. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  879. data/src/core/lib/experiments/config.cc +112 -29
  880. data/src/core/lib/experiments/config.h +33 -5
  881. data/src/core/lib/experiments/experiments.cc +226 -61
  882. data/src/core/lib/experiments/experiments.h +95 -29
  883. data/src/core/lib/gpr/log_internal.h +55 -0
  884. data/src/core/lib/gpr/posix/time.cc +5 -0
  885. data/src/core/lib/gprpp/crash.cc +10 -0
  886. data/src/core/lib/gprpp/crash.h +3 -0
  887. data/src/core/lib/gprpp/dual_ref_counted.h +9 -9
  888. data/src/core/lib/gprpp/fork.cc +8 -9
  889. data/src/core/lib/gprpp/fork.h +6 -5
  890. data/src/core/lib/gprpp/if_list.h +4530 -0
  891. data/src/core/lib/gprpp/orphanable.h +3 -3
  892. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  893. data/src/core/lib/gprpp/per_cpu.h +29 -6
  894. data/src/core/lib/gprpp/ref_counted.h +9 -7
  895. data/src/core/lib/gprpp/ref_counted_string.cc +44 -0
  896. data/src/core/lib/gprpp/ref_counted_string.h +146 -0
  897. data/src/core/lib/gprpp/sorted_pack.h +3 -12
  898. data/src/core/lib/gprpp/status_helper.cc +2 -2
  899. data/src/core/lib/gprpp/status_helper.h +16 -15
  900. data/src/core/lib/gprpp/time.cc +1 -0
  901. data/src/core/lib/gprpp/time.h +13 -1
  902. data/src/core/lib/gprpp/type_list.h +32 -0
  903. data/src/core/lib/gprpp/validation_errors.cc +8 -3
  904. data/src/core/lib/gprpp/validation_errors.h +16 -9
  905. data/src/core/lib/gprpp/work_serializer.cc +36 -0
  906. data/src/core/lib/gprpp/work_serializer.h +5 -0
  907. data/src/core/lib/http/httpcli.h +6 -9
  908. data/src/core/lib/http/httpcli_security_connector.cc +1 -0
  909. data/src/core/lib/iomgr/buffer_list.cc +2 -0
  910. data/src/core/lib/iomgr/buffer_list.h +0 -1
  911. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  912. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  913. data/src/core/lib/iomgr/error.cc +32 -2
  914. data/src/core/lib/iomgr/error.h +9 -10
  915. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  916. data/src/core/lib/iomgr/ev_epoll1_linux.cc +15 -10
  917. data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
  918. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +22 -23
  919. data/src/core/lib/iomgr/exec_ctx.h +11 -0
  920. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  921. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  922. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  923. data/src/core/lib/iomgr/pollset.h +4 -5
  924. data/src/core/lib/iomgr/port.h +10 -0
  925. data/src/core/lib/iomgr/resolve_address.cc +13 -1
  926. data/src/core/lib/iomgr/resolve_address.h +17 -3
  927. data/src/core/lib/iomgr/sockaddr_posix.h +7 -0
  928. data/src/core/lib/iomgr/socket_utils_common_posix.cc +33 -2
  929. data/src/core/lib/iomgr/socket_utils_posix.cc +5 -0
  930. data/src/core/lib/iomgr/socket_utils_posix.h +9 -0
  931. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  932. data/src/core/lib/iomgr/socket_windows.h +9 -2
  933. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  934. data/src/core/lib/iomgr/tcp_client_posix.cc +8 -1
  935. data/src/core/lib/iomgr/tcp_posix.cc +24 -7
  936. data/src/core/lib/iomgr/tcp_server_posix.cc +145 -106
  937. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  938. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -2
  939. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  940. data/src/core/lib/iomgr/tcp_windows.cc +1 -3
  941. data/src/core/lib/iomgr/timer_generic.cc +17 -16
  942. data/src/core/lib/iomgr/vsock.cc +59 -0
  943. data/src/core/lib/iomgr/vsock.h +38 -0
  944. data/src/core/lib/iomgr/wakeup_fd_posix.h +3 -6
  945. data/src/core/lib/json/json.h +2 -218
  946. data/src/core/lib/json/json_object_loader.cc +24 -25
  947. data/src/core/lib/json/json_object_loader.h +30 -18
  948. data/src/core/lib/json/json_reader.cc +69 -42
  949. data/src/core/lib/json/json_reader.h +34 -0
  950. data/src/core/lib/json/json_util.cc +10 -15
  951. data/src/core/lib/json/json_util.h +5 -4
  952. data/src/core/lib/json/json_writer.cc +24 -25
  953. data/src/core/lib/json/json_writer.h +33 -0
  954. data/src/core/lib/load_balancing/delegating_helper.h +115 -0
  955. data/src/core/lib/load_balancing/lb_policy.h +33 -0
  956. data/src/core/lib/load_balancing/lb_policy_registry.cc +9 -8
  957. data/src/core/lib/load_balancing/subchannel_interface.h +6 -0
  958. data/src/core/lib/matchers/matchers.cc +3 -4
  959. data/src/core/lib/matchers/matchers.h +2 -1
  960. data/src/core/lib/promise/activity.cc +5 -0
  961. data/src/core/lib/promise/activity.h +10 -0
  962. data/src/core/lib/promise/detail/basic_seq.h +1 -372
  963. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  964. data/src/core/lib/promise/detail/seq_state.h +2076 -0
  965. data/src/core/lib/promise/party.cc +31 -13
  966. data/src/core/lib/promise/party.h +12 -3
  967. data/src/core/lib/promise/pipe.h +16 -2
  968. data/src/core/lib/promise/prioritized_race.h +95 -0
  969. data/src/core/lib/promise/seq.h +19 -2
  970. data/src/core/lib/promise/sleep.cc +2 -1
  971. data/src/core/lib/promise/sleep.h +5 -10
  972. data/src/core/lib/promise/try_seq.h +34 -2
  973. data/src/core/lib/resolver/resolver_factory.h +3 -2
  974. data/src/core/lib/resolver/server_address.cc +9 -102
  975. data/src/core/lib/resolver/server_address.h +10 -70
  976. data/src/core/lib/resource_quota/api.cc +1 -0
  977. data/src/core/lib/resource_quota/arena.cc +2 -0
  978. data/src/core/lib/resource_quota/arena.h +42 -8
  979. data/src/core/lib/resource_quota/memory_quota.cc +7 -8
  980. data/src/core/lib/resource_quota/memory_quota.h +2 -3
  981. data/src/core/lib/resource_quota/resource_quota.h +1 -0
  982. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  983. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  984. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  985. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  986. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  987. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  988. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  989. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  990. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  991. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  992. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  993. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  994. data/src/core/lib/security/credentials/channel_creds_registry.h +51 -27
  995. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +169 -9
  996. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  997. data/src/core/lib/security/credentials/composite/composite_credentials.h +3 -1
  998. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +54 -49
  999. data/src/core/lib/security/credentials/external/aws_request_signer.cc +8 -0
  1000. data/src/core/lib/security/credentials/external/external_account_credentials.cc +104 -65
  1001. data/src/core/lib/security/credentials/external/external_account_credentials.h +6 -0
  1002. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +23 -21
  1003. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +29 -27
  1004. data/src/core/lib/security/credentials/fake/fake_credentials.cc +30 -38
  1005. data/src/core/lib/security/credentials/fake/fake_credentials.h +28 -0
  1006. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +6 -2
  1007. data/src/core/lib/security/credentials/jwt/json_token.cc +36 -16
  1008. data/src/core/lib/security/credentials/jwt/json_token.h +4 -0
  1009. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +10 -5
  1010. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +82 -38
  1011. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +18 -16
  1012. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -0
  1013. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +4 -0
  1014. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +8 -0
  1015. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +5 -1
  1016. data/src/core/lib/security/credentials/tls/tls_credentials.cc +2 -1
  1017. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -1
  1018. data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -0
  1019. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +2 -5
  1020. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -0
  1021. data/src/core/lib/security/security_connector/ssl_utils.cc +3 -1
  1022. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  1023. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -1
  1024. data/src/core/lib/security/transport/client_auth_filter.cc +8 -5
  1025. data/src/core/lib/security/transport/security_handshaker.cc +1 -0
  1026. data/src/core/lib/security/transport/server_auth_filter.cc +2 -0
  1027. data/src/core/lib/security/util/json_util.cc +6 -5
  1028. data/src/core/lib/service_config/service_config_call_data.h +54 -20
  1029. data/src/core/lib/service_config/service_config_impl.cc +13 -6
  1030. data/src/core/lib/slice/slice.h +18 -0
  1031. data/src/core/lib/surface/call.cc +159 -73
  1032. data/src/core/lib/surface/call.h +1 -5
  1033. data/src/core/lib/surface/channel.cc +1 -0
  1034. data/src/core/lib/surface/completion_queue.cc +18 -3
  1035. data/src/core/lib/surface/init.cc +1 -0
  1036. data/src/core/lib/surface/server.cc +106 -75
  1037. data/src/core/lib/surface/server.h +1 -15
  1038. data/src/core/lib/surface/validate_metadata.cc +37 -22
  1039. data/src/core/lib/surface/validate_metadata.h +13 -3
  1040. data/src/core/lib/surface/version.cc +2 -2
  1041. data/src/core/lib/transport/batch_builder.cc +15 -12
  1042. data/src/core/lib/transport/batch_builder.h +48 -36
  1043. data/src/core/lib/transport/metadata_batch.cc +7 -7
  1044. data/src/core/lib/transport/metadata_batch.h +88 -107
  1045. data/src/core/lib/transport/metadata_compression_traits.h +67 -0
  1046. data/src/core/lib/transport/parsed_metadata.h +34 -20
  1047. data/src/core/lib/transport/simple_slice_based_metadata.h +55 -0
  1048. data/src/core/lib/transport/transport.h +3 -0
  1049. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -6
  1050. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  1051. data/src/core/tsi/alts/crypt/aes_gcm.cc +27 -2
  1052. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +4 -6
  1053. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -2
  1054. data/src/core/tsi/ssl_transport_security.cc +44 -9
  1055. data/src/core/tsi/ssl_transport_security.h +13 -1
  1056. data/src/ruby/bin/math_pb.rb +24 -18
  1057. data/src/ruby/ext/grpc/extconf.rb +27 -27
  1058. data/src/ruby/ext/grpc/rb_call.c +62 -39
  1059. data/src/ruby/ext/grpc/rb_call_credentials.c +0 -1
  1060. data/src/ruby/ext/grpc/rb_channel.c +109 -84
  1061. data/src/ruby/ext/grpc/rb_channel.h +1 -0
  1062. data/src/ruby/ext/grpc/rb_channel_args.c +16 -2
  1063. data/src/ruby/ext/grpc/rb_channel_args.h +4 -0
  1064. data/src/ruby/ext/grpc/rb_channel_credentials.c +0 -1
  1065. data/src/ruby/ext/grpc/rb_compression_options.c +0 -1
  1066. data/src/ruby/ext/grpc/rb_event_thread.c +22 -6
  1067. data/src/ruby/ext/grpc/rb_event_thread.h +1 -0
  1068. data/src/ruby/ext/grpc/rb_grpc.c +192 -30
  1069. data/src/ruby/ext/grpc/rb_grpc.h +8 -2
  1070. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  1071. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  1072. data/src/ruby/ext/grpc/rb_server.c +62 -45
  1073. data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
  1074. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
  1075. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
  1076. data/src/ruby/lib/grpc/generic/active_call.rb +9 -14
  1077. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  1078. data/src/ruby/lib/grpc/version.rb +1 -1
  1079. data/src/ruby/pb/grpc/health/v1/health_pb.rb +24 -13
  1080. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +24 -3
  1081. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +25 -111
  1082. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +25 -2
  1083. data/src/ruby/pb/test/client.rb +16 -0
  1084. data/src/ruby/spec/generic/rpc_server_spec.rb +3 -3
  1085. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -2
  1086. data/third_party/abseil-cpp/absl/base/attributes.h +58 -5
  1087. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  1088. data/third_party/abseil-cpp/absl/base/casts.h +8 -8
  1089. data/third_party/abseil-cpp/absl/base/config.h +89 -106
  1090. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +26 -1
  1091. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +2 -2
  1092. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +50 -39
  1093. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +2 -1
  1094. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +17 -18
  1095. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +32 -3
  1096. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +24 -4
  1097. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +31 -73
  1098. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +9 -8
  1099. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -11
  1100. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +23 -32
  1101. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +2 -3
  1102. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1103. data/third_party/abseil-cpp/absl/base/policy_checks.h +3 -3
  1104. data/third_party/abseil-cpp/absl/base/prefetch.h +198 -0
  1105. data/third_party/abseil-cpp/absl/container/fixed_array.h +54 -29
  1106. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -1
  1107. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -2
  1108. data/third_party/abseil-cpp/absl/container/inlined_vector.h +167 -79
  1109. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  1110. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +3 -21
  1111. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +1 -1
  1112. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +46 -0
  1113. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -0
  1114. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +85 -26
  1115. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +35 -18
  1116. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +70 -29
  1117. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +437 -236
  1118. data/third_party/abseil-cpp/absl/crc/crc32c.h +8 -1
  1119. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +14 -8
  1120. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -35
  1121. data/third_party/abseil-cpp/absl/crc/internal/crc.h +2 -10
  1122. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +1 -1
  1123. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +1 -1
  1124. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +4 -4
  1125. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +8 -10
  1126. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +17 -19
  1127. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +8 -8
  1128. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +2 -1
  1129. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +59 -23
  1130. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +1 -1
  1131. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +1 -1
  1132. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +1 -1
  1133. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +43 -19
  1134. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -0
  1135. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +1 -1
  1136. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc +1 -1
  1137. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -2
  1138. data/third_party/abseil-cpp/absl/flags/internal/flag.h +16 -15
  1139. data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +1 -1
  1140. data/third_party/abseil-cpp/absl/flags/marshalling.cc +43 -2
  1141. data/third_party/abseil-cpp/absl/flags/marshalling.h +5 -0
  1142. data/third_party/abseil-cpp/absl/functional/any_invocable.h +9 -1
  1143. data/third_party/abseil-cpp/absl/functional/bind_front.h +1 -1
  1144. data/third_party/abseil-cpp/absl/functional/function_ref.h +3 -3
  1145. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +37 -24
  1146. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +19 -9
  1147. data/third_party/abseil-cpp/absl/hash/hash.h +7 -4
  1148. data/third_party/abseil-cpp/absl/hash/internal/hash.h +38 -15
  1149. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +6 -0
  1150. data/third_party/abseil-cpp/absl/meta/type_traits.h +48 -373
  1151. data/third_party/abseil-cpp/absl/numeric/bits.h +4 -4
  1152. data/third_party/abseil-cpp/absl/numeric/int128.cc +20 -8
  1153. data/third_party/abseil-cpp/absl/numeric/int128.h +36 -39
  1154. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +0 -3
  1155. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +47 -30
  1156. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -3
  1157. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  1158. data/third_party/abseil-cpp/absl/random/internal/platform.h +1 -1
  1159. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +4 -0
  1160. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +1 -1
  1161. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +1 -1
  1162. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +1 -1
  1163. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +4 -0
  1164. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +12 -24
  1165. data/third_party/abseil-cpp/absl/status/status.cc +11 -7
  1166. data/third_party/abseil-cpp/absl/status/status.h +11 -2
  1167. data/third_party/abseil-cpp/absl/status/statusor.h +22 -8
  1168. data/third_party/abseil-cpp/absl/strings/ascii.cc +54 -6
  1169. data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -4
  1170. data/third_party/abseil-cpp/absl/strings/charconv.h +2 -2
  1171. data/third_party/abseil-cpp/absl/strings/cord.cc +1 -2
  1172. data/third_party/abseil-cpp/absl/strings/cord.h +32 -5
  1173. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +23 -1
  1174. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +18 -0
  1175. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +2 -5
  1176. data/third_party/abseil-cpp/absl/strings/escaping.cc +10 -32
  1177. data/third_party/abseil-cpp/absl/strings/escaping.h +1 -1
  1178. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +2 -4
  1179. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +3 -3
  1180. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +0 -1
  1181. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +15 -13
  1182. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +13 -4
  1183. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +8 -0
  1184. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +5 -3
  1185. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +4 -7
  1186. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +8 -0
  1187. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +2 -2
  1188. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +46 -20
  1189. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +1 -34
  1190. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +2 -1
  1191. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +23 -0
  1192. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +1 -0
  1193. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +2 -77
  1194. data/third_party/abseil-cpp/absl/strings/internal/memutil.h +4 -112
  1195. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +1 -1
  1196. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +10 -31
  1197. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -8
  1198. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +5 -20
  1199. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +1 -0
  1200. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +1 -1
  1201. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +9 -9
  1202. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +56 -6
  1203. data/third_party/abseil-cpp/absl/strings/match.cc +87 -0
  1204. data/third_party/abseil-cpp/absl/strings/match.h +19 -0
  1205. data/third_party/abseil-cpp/absl/strings/numbers.cc +154 -122
  1206. data/third_party/abseil-cpp/absl/strings/numbers.h +1 -6
  1207. data/third_party/abseil-cpp/absl/strings/str_cat.cc +7 -50
  1208. data/third_party/abseil-cpp/absl/strings/str_cat.h +83 -15
  1209. data/third_party/abseil-cpp/absl/strings/str_format.h +6 -3
  1210. data/third_party/abseil-cpp/absl/strings/str_split.cc +9 -6
  1211. data/third_party/abseil-cpp/absl/strings/string_view.cc +26 -4
  1212. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +5 -0
  1213. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +63 -43
  1214. data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +111 -0
  1215. data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.h +63 -0
  1216. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +11 -7
  1217. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +225 -0
  1218. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +122 -114
  1219. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +12 -8
  1220. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +10 -1
  1221. data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +167 -0
  1222. data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.h +60 -0
  1223. data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +122 -0
  1224. data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.h +65 -0
  1225. data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +91 -0
  1226. data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.h +56 -0
  1227. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +19 -113
  1228. data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +42 -0
  1229. data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.h +90 -0
  1230. data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +151 -0
  1231. data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.h +70 -0
  1232. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +407 -411
  1233. data/third_party/abseil-cpp/absl/synchronization/mutex.h +152 -118
  1234. data/third_party/abseil-cpp/absl/time/clock.cc +6 -7
  1235. data/third_party/abseil-cpp/absl/time/duration.cc +24 -26
  1236. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -0
  1237. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1238. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +3 -3
  1239. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +8 -6
  1240. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +6 -3
  1241. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +4 -2
  1242. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +4 -0
  1243. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +322 -295
  1244. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +8 -17
  1245. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +51 -33
  1246. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +7 -2
  1247. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +128 -2
  1248. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +1 -1
  1249. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +5 -1
  1250. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +34 -34
  1251. data/third_party/abseil-cpp/absl/time/time.cc +9 -2
  1252. data/third_party/abseil-cpp/absl/time/time.h +115 -15
  1253. data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -52
  1254. data/third_party/abseil-cpp/absl/types/internal/span.h +2 -2
  1255. data/third_party/abseil-cpp/absl/types/internal/variant.h +2 -2
  1256. data/third_party/abseil-cpp/absl/types/optional.h +15 -13
  1257. data/third_party/abseil-cpp/absl/types/span.h +1 -2
  1258. data/third_party/boringssl-with-bazel/err_data.c +554 -553
  1259. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +7 -3
  1260. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  1261. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +7 -7
  1262. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +6 -6
  1263. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +34 -1
  1264. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +11 -4
  1265. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  1266. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  1267. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  1268. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +9 -7
  1269. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +40 -55
  1270. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +7 -7
  1271. data/third_party/boringssl-with-bazel/src/crypto/bio/errno.c +92 -0
  1272. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +14 -54
  1273. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +23 -22
  1274. data/third_party/boringssl-with-bazel/src/crypto/bio/internal.h +16 -6
  1275. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  1276. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +4 -4
  1277. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +11 -2
  1278. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  1279. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +1 -1
  1280. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +19 -1
  1281. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +8 -1
  1282. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  1283. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  1284. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  1285. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +31 -192
  1286. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +3 -7
  1287. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +8 -0
  1288. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +3 -2
  1289. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_fuchsia.c +0 -1
  1290. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_linux.c +0 -2
  1291. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_freebsd.c → cpu_aarch64_openbsd.c} +23 -24
  1292. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_sysreg.c +93 -0
  1293. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_win.c +1 -1
  1294. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +0 -1
  1295. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.c +0 -2
  1296. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +55 -50
  1297. data/third_party/boringssl-with-bazel/src/crypto/{cpu_arm.c → curve25519/curve25519_64_adx.c} +4 -24
  1298. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +2834 -7442
  1299. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +26 -8
  1300. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +4 -0
  1301. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +5 -0
  1302. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  1303. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +20 -0
  1304. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +110 -72
  1305. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +4 -3
  1306. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +42 -34
  1307. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +17 -11
  1308. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  1309. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +23 -21
  1310. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +35 -12
  1311. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +2 -4
  1312. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +3 -7
  1313. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  1314. data/third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c +3 -3
  1315. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +7 -6
  1316. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +34 -72
  1317. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  1318. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +12 -5
  1319. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +5 -6
  1320. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +12 -6
  1321. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +17 -18
  1322. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +51 -15
  1323. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +7 -7
  1324. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +5 -6
  1325. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +37 -8
  1326. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +41 -19
  1327. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +9 -0
  1328. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/builtin_curves.h +277 -0
  1329. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +204 -428
  1330. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +4 -4
  1331. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +31 -64
  1332. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +17 -13
  1333. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +105 -143
  1334. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +19 -19
  1335. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +16 -18
  1336. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +27 -30
  1337. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +23 -26
  1338. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  1339. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +24 -24
  1340. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +21 -37
  1341. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +31 -31
  1342. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +16 -16
  1343. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  1344. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +11 -5
  1345. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +2 -2
  1346. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  1347. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  1348. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  1349. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  1350. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  1351. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  1352. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  1353. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +40 -26
  1354. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +21 -7
  1355. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +38 -19
  1356. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +2 -41
  1357. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +76 -16
  1358. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  1359. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  1360. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +126 -233
  1361. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +113 -24
  1362. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +4 -7
  1363. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  1364. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  1365. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +169 -6
  1366. data/third_party/boringssl-with-bazel/src/crypto/internal.h +216 -87
  1367. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +32 -2
  1368. data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +11 -12
  1369. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +834 -0
  1370. data/third_party/boringssl-with-bazel/src/crypto/mem.c +7 -8
  1371. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +25 -46
  1372. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  1373. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  1374. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +3 -3
  1375. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +3 -3
  1376. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +7 -7
  1377. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +8 -5
  1378. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
  1379. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +7 -6
  1380. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c +6 -12
  1381. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/getentropy.c +52 -0
  1382. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{fuchsia.c → ios.c} +8 -8
  1383. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/trusty.c +38 -0
  1384. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +41 -19
  1385. data/third_party/boringssl-with-bazel/src/crypto/{refcount_c11.c → refcount.c} +11 -17
  1386. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  1387. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  1388. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +152 -72
  1389. data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +0 -8
  1390. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +6 -35
  1391. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +5 -26
  1392. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  1393. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +240 -72
  1394. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  1395. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -130
  1396. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  1397. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  1398. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +10 -20
  1399. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +0 -3
  1400. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +3 -2
  1401. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  1402. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +18 -14
  1403. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  1404. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +1 -141
  1405. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +1 -3
  1406. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +19 -25
  1407. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  1408. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +8 -4
  1409. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +8 -12
  1410. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +22 -24
  1411. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -72
  1412. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +22 -29
  1413. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  1414. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +9 -7
  1415. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +1 -1
  1416. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +7 -7
  1417. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  1418. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  1419. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +2 -3
  1420. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  1421. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  1422. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  1423. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +20 -52
  1424. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  1425. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +11 -9
  1426. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  1427. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -3
  1428. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  1429. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +4 -119
  1430. data/third_party/boringssl-with-bazel/src/include/openssl/asm_base.h +207 -0
  1431. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +11 -4
  1432. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +37 -112
  1433. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +19 -13
  1434. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  1435. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +0 -2
  1436. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +6 -0
  1437. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +5 -1
  1438. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -1
  1439. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +0 -21
  1440. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +28 -11
  1441. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +19 -6
  1442. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +14 -10
  1443. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +34 -2
  1444. data/third_party/boringssl-with-bazel/src/include/openssl/kyber.h +128 -0
  1445. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  1446. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +8 -1
  1447. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  1448. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +13 -14
  1449. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -62
  1450. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +26 -19
  1451. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +275 -96
  1452. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +242 -223
  1453. data/third_party/boringssl-with-bazel/src/include/openssl/target.h +201 -0
  1454. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +1 -25
  1455. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  1456. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  1457. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +760 -614
  1458. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +45 -12
  1459. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  1460. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +10 -68
  1461. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +20 -20
  1462. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +33 -18
  1463. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
  1464. data/third_party/boringssl-with-bazel/src/ssl/internal.h +86 -46
  1465. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  1466. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +8 -4
  1467. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +209 -209
  1468. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +6 -6
  1469. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +76 -118
  1470. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +209 -33
  1471. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  1472. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +19 -21
  1473. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  1474. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +2 -1
  1475. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -3
  1476. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  1477. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  1478. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_adx.h +691 -0
  1479. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  1480. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  1481. data/third_party/cares/cares/include/ares.h +23 -1
  1482. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  1483. data/third_party/cares/cares/include/ares_rules.h +2 -2
  1484. data/third_party/cares/cares/include/ares_version.h +3 -3
  1485. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  1486. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  1487. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  1488. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  1489. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  1490. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  1491. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  1492. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  1493. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  1494. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  1495. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  1496. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  1497. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  1498. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  1499. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  1500. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  1501. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  1502. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  1503. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  1504. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  1505. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  1506. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  1507. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  1508. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  1509. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  1510. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  1511. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  1512. data/third_party/upb/upb/{table_internal.h → alloc.h} +6 -6
  1513. data/third_party/upb/upb/arena.h +4 -193
  1514. data/third_party/upb/upb/array.h +4 -51
  1515. data/third_party/upb/upb/base/descriptor_constants.h +104 -0
  1516. data/third_party/upb/upb/base/log2.h +57 -0
  1517. data/third_party/upb/upb/{status.c → base/status.c} +2 -7
  1518. data/third_party/upb/upb/base/status.h +66 -0
  1519. data/third_party/upb/upb/base/string_view.h +75 -0
  1520. data/third_party/upb/upb/{array.c → collections/array.c} +67 -36
  1521. data/third_party/upb/upb/collections/array.h +85 -0
  1522. data/third_party/upb/upb/collections/array_internal.h +135 -0
  1523. data/third_party/upb/upb/{map.c → collections/map.c} +53 -26
  1524. data/third_party/upb/upb/collections/map.h +135 -0
  1525. data/third_party/upb/upb/collections/map_gencode_util.h +78 -0
  1526. data/third_party/upb/upb/collections/map_internal.h +170 -0
  1527. data/third_party/upb/upb/collections/map_sorter.c +166 -0
  1528. data/third_party/upb/upb/collections/map_sorter_internal.h +109 -0
  1529. data/third_party/upb/upb/{message_value.h → collections/message_value.h} +12 -13
  1530. data/third_party/upb/upb/decode.h +3 -62
  1531. data/third_party/upb/upb/def.h +4 -384
  1532. data/third_party/upb/upb/def.hpp +3 -411
  1533. data/third_party/upb/upb/encode.h +3 -48
  1534. data/third_party/upb/upb/extension_registry.h +3 -52
  1535. data/third_party/upb/upb/{table.c → hash/common.c} +52 -110
  1536. data/third_party/upb/upb/hash/common.h +199 -0
  1537. data/third_party/upb/upb/hash/int_table.h +102 -0
  1538. data/third_party/upb/upb/hash/str_table.h +161 -0
  1539. data/third_party/upb/upb/{json_decode.c → json/decode.c} +63 -98
  1540. data/third_party/upb/upb/json/decode.h +52 -0
  1541. data/third_party/upb/upb/{json_encode.c → json/encode.c} +69 -45
  1542. data/third_party/upb/upb/json/encode.h +70 -0
  1543. data/third_party/upb/upb/json_decode.h +4 -15
  1544. data/third_party/upb/upb/json_encode.h +4 -33
  1545. data/third_party/upb/upb/lex/atoi.c +68 -0
  1546. data/third_party/upb/upb/lex/atoi.h +53 -0
  1547. data/third_party/upb/upb/{upb.c → lex/round_trip.c} +2 -11
  1548. data/third_party/upb/upb/{internal/upb.h → lex/round_trip.h} +17 -30
  1549. data/third_party/upb/upb/lex/strtod.c +97 -0
  1550. data/third_party/upb/upb/lex/strtod.h +46 -0
  1551. data/third_party/upb/upb/lex/unicode.c +57 -0
  1552. data/third_party/upb/upb/lex/unicode.h +77 -0
  1553. data/third_party/upb/upb/map.h +4 -85
  1554. data/third_party/upb/upb/mem/alloc.c +47 -0
  1555. data/third_party/upb/upb/mem/alloc.h +98 -0
  1556. data/third_party/upb/upb/mem/arena.c +367 -0
  1557. data/third_party/upb/upb/mem/arena.h +160 -0
  1558. data/third_party/upb/upb/mem/arena_internal.h +114 -0
  1559. data/third_party/upb/upb/message/accessors.c +68 -0
  1560. data/third_party/upb/upb/message/accessors.h +379 -0
  1561. data/third_party/upb/upb/message/accessors_internal.h +325 -0
  1562. data/third_party/upb/upb/message/extension_internal.h +83 -0
  1563. data/third_party/upb/upb/message/internal.h +135 -0
  1564. data/third_party/upb/upb/message/message.c +180 -0
  1565. data/third_party/upb/upb/message/message.h +69 -0
  1566. data/third_party/upb/upb/mini_table/common.c +128 -0
  1567. data/third_party/upb/upb/mini_table/common.h +170 -0
  1568. data/third_party/upb/upb/mini_table/common_internal.h +111 -0
  1569. data/third_party/upb/upb/{mini_table.c → mini_table/decode.c} +513 -533
  1570. data/third_party/upb/upb/mini_table/decode.h +179 -0
  1571. data/third_party/upb/upb/mini_table/encode.c +300 -0
  1572. data/third_party/upb/upb/mini_table/encode_internal.h +111 -0
  1573. data/third_party/upb/upb/{mini_table.hpp → mini_table/encode_internal.hpp} +32 -8
  1574. data/third_party/upb/upb/mini_table/enum_internal.h +88 -0
  1575. data/third_party/upb/upb/mini_table/extension_internal.h +47 -0
  1576. data/third_party/upb/upb/{extension_registry.c → mini_table/extension_registry.c} +27 -24
  1577. data/third_party/upb/upb/mini_table/extension_registry.h +104 -0
  1578. data/third_party/upb/upb/mini_table/field_internal.h +192 -0
  1579. data/third_party/upb/upb/mini_table/file_internal.h +47 -0
  1580. data/third_party/upb/upb/mini_table/message_internal.h +136 -0
  1581. data/third_party/upb/upb/mini_table/sub_internal.h +38 -0
  1582. data/third_party/upb/upb/mini_table/types.h +40 -0
  1583. data/third_party/upb/upb/msg.h +3 -38
  1584. data/third_party/upb/upb/port/atomic.h +101 -0
  1585. data/third_party/upb/upb/{port_def.inc → port/def.inc} +94 -27
  1586. data/third_party/upb/upb/{port_undef.inc → port/undef.inc} +13 -3
  1587. data/third_party/upb/upb/{internal → port}/vsnprintf_compat.h +5 -7
  1588. data/third_party/upb/upb/reflection/common.h +67 -0
  1589. data/third_party/upb/upb/reflection/def.h +42 -0
  1590. data/third_party/upb/upb/reflection/def.hpp +610 -0
  1591. data/third_party/upb/upb/reflection/def_builder.c +357 -0
  1592. data/third_party/upb/upb/reflection/def_builder_internal.h +157 -0
  1593. data/third_party/upb/upb/reflection/def_pool.c +462 -0
  1594. data/third_party/upb/upb/reflection/def_pool.h +108 -0
  1595. data/third_party/upb/upb/reflection/def_pool_internal.h +77 -0
  1596. data/third_party/upb/upb/reflection/def_type.c +50 -0
  1597. data/third_party/upb/upb/reflection/def_type.h +81 -0
  1598. data/third_party/upb/upb/reflection/desc_state.c +53 -0
  1599. data/third_party/upb/upb/reflection/desc_state_internal.h +64 -0
  1600. data/third_party/upb/upb/reflection/enum_def.c +310 -0
  1601. data/third_party/upb/upb/reflection/enum_def.h +80 -0
  1602. data/third_party/upb/upb/reflection/enum_def_internal.h +56 -0
  1603. data/third_party/upb/upb/reflection/enum_reserved_range.c +84 -0
  1604. data/third_party/upb/upb/reflection/enum_reserved_range.h +51 -0
  1605. data/third_party/upb/upb/reflection/enum_reserved_range_internal.h +55 -0
  1606. data/third_party/upb/upb/reflection/enum_value_def.c +144 -0
  1607. data/third_party/upb/upb/reflection/enum_value_def.h +57 -0
  1608. data/third_party/upb/upb/reflection/enum_value_def_internal.h +57 -0
  1609. data/third_party/upb/upb/reflection/extension_range.c +93 -0
  1610. data/third_party/upb/upb/reflection/extension_range.h +55 -0
  1611. data/third_party/upb/upb/reflection/extension_range_internal.h +54 -0
  1612. data/third_party/upb/upb/reflection/field_def.c +930 -0
  1613. data/third_party/upb/upb/reflection/field_def.h +91 -0
  1614. data/third_party/upb/upb/reflection/field_def_internal.h +76 -0
  1615. data/third_party/upb/upb/reflection/file_def.c +370 -0
  1616. data/third_party/upb/upb/reflection/file_def.h +77 -0
  1617. data/third_party/upb/upb/reflection/file_def_internal.h +57 -0
  1618. data/third_party/upb/upb/reflection/message.c +233 -0
  1619. data/third_party/upb/upb/reflection/message.h +102 -0
  1620. data/third_party/upb/upb/reflection/message.hpp +37 -0
  1621. data/third_party/upb/upb/reflection/message_def.c +718 -0
  1622. data/third_party/upb/upb/reflection/message_def.h +174 -0
  1623. data/third_party/upb/upb/reflection/message_def_internal.h +63 -0
  1624. data/third_party/upb/upb/reflection/message_reserved_range.c +81 -0
  1625. data/third_party/upb/upb/reflection/message_reserved_range.h +51 -0
  1626. data/third_party/upb/upb/reflection/message_reserved_range_internal.h +55 -0
  1627. data/third_party/upb/upb/reflection/method_def.c +124 -0
  1628. data/third_party/upb/upb/reflection/method_def.h +59 -0
  1629. data/third_party/upb/upb/reflection/method_def_internal.h +53 -0
  1630. data/third_party/upb/upb/reflection/oneof_def.c +226 -0
  1631. data/third_party/upb/upb/reflection/oneof_def.h +66 -0
  1632. data/third_party/upb/upb/reflection/oneof_def_internal.h +57 -0
  1633. data/third_party/upb/upb/reflection/service_def.c +128 -0
  1634. data/third_party/upb/upb/reflection/service_def.h +60 -0
  1635. data/third_party/upb/upb/reflection/service_def_internal.h +53 -0
  1636. data/third_party/upb/upb/reflection.h +4 -78
  1637. data/third_party/upb/upb/reflection.hpp +3 -7
  1638. data/third_party/upb/upb/status.h +4 -34
  1639. data/third_party/upb/upb/{collections.h → string_view.h} +7 -7
  1640. data/third_party/upb/upb/{text_encode.c → text/encode.c} +74 -70
  1641. data/third_party/upb/upb/text/encode.h +69 -0
  1642. data/third_party/upb/upb/text_encode.h +4 -32
  1643. data/third_party/upb/upb/upb.h +6 -151
  1644. data/third_party/upb/upb/upb.hpp +10 -18
  1645. data/third_party/upb/upb/wire/common.h +44 -0
  1646. data/third_party/upb/upb/wire/common_internal.h +50 -0
  1647. data/third_party/upb/upb/wire/decode.c +1343 -0
  1648. data/third_party/upb/upb/wire/decode.h +108 -0
  1649. data/third_party/upb/upb/{decode_fast.c → wire/decode_fast.c} +184 -225
  1650. data/third_party/upb/upb/{decode_fast.h → wire/decode_fast.h} +21 -7
  1651. data/third_party/upb/upb/{internal/decode.h → wire/decode_internal.h} +44 -92
  1652. data/third_party/upb/upb/{encode.c → wire/encode.c} +114 -95
  1653. data/third_party/upb/upb/wire/encode.h +92 -0
  1654. data/third_party/upb/upb/wire/eps_copy_input_stream.c +39 -0
  1655. data/third_party/upb/upb/wire/eps_copy_input_stream.h +425 -0
  1656. data/third_party/upb/upb/wire/reader.c +67 -0
  1657. data/third_party/upb/upb/wire/reader.h +227 -0
  1658. data/third_party/upb/upb/wire/swap_internal.h +63 -0
  1659. data/third_party/upb/upb/wire/types.h +41 -0
  1660. data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-neon.c +1 -1
  1661. data/third_party/{upb/third_party/utf8_range → utf8_range}/utf8_range.h +12 -0
  1662. metadata +258 -82
  1663. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  1664. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  1665. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +0 -42
  1666. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h +0 -64
  1667. data/src/core/ext/transport/chttp2/transport/context_list.cc +0 -71
  1668. data/src/core/ext/transport/chttp2/transport/context_list.h +0 -54
  1669. data/src/core/ext/transport/chttp2/transport/stream_map.cc +0 -177
  1670. data/src/core/ext/transport/chttp2/transport/stream_map.h +0 -68
  1671. data/src/core/lib/promise/detail/basic_join.h +0 -197
  1672. data/src/core/lib/promise/detail/switch.h +0 -1455
  1673. data/src/core/lib/promise/try_join.h +0 -82
  1674. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -403
  1675. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +0 -52
  1676. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
  1677. data/third_party/re2/util/benchmark.h +0 -156
  1678. data/third_party/re2/util/flags.h +0 -26
  1679. data/third_party/re2/util/malloc_counter.h +0 -19
  1680. data/third_party/re2/util/pcre.cc +0 -1025
  1681. data/third_party/re2/util/pcre.h +0 -681
  1682. data/third_party/re2/util/test.h +0 -50
  1683. data/third_party/upb/upb/arena.c +0 -277
  1684. data/third_party/upb/upb/decode.c +0 -1221
  1685. data/third_party/upb/upb/def.c +0 -3269
  1686. data/third_party/upb/upb/internal/table.h +0 -385
  1687. data/third_party/upb/upb/mini_table.h +0 -189
  1688. data/third_party/upb/upb/msg.c +0 -368
  1689. data/third_party/upb/upb/msg_internal.h +0 -837
  1690. data/third_party/upb/upb/reflection.c +0 -323
  1691. data/third_party/zlib/gzclose.c +0 -25
  1692. data/third_party/zlib/gzlib.c +0 -639
  1693. data/third_party/zlib/gzread.c +0 -650
  1694. data/third_party/zlib/gzwrite.c +0 -677
  1695. /data/third_party/{upb/third_party/utf8_range → utf8_range}/naive.c +0 -0
  1696. /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