grpc 1.34.0 → 1.42.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (1545) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +978 -2868
  3. data/etc/roots.pem +592 -899
  4. data/include/grpc/byte_buffer.h +1 -1
  5. data/include/grpc/byte_buffer_reader.h +1 -1
  6. data/include/grpc/compression.h +1 -1
  7. data/include/grpc/event_engine/README.md +38 -0
  8. data/include/grpc/event_engine/endpoint_config.h +43 -0
  9. data/include/grpc/event_engine/event_engine.h +375 -0
  10. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  11. data/include/grpc/event_engine/memory_allocator.h +210 -0
  12. data/include/grpc/event_engine/port.h +39 -0
  13. data/include/grpc/fork.h +1 -1
  14. data/include/grpc/grpc.h +49 -4
  15. data/include/grpc/grpc_posix.h +5 -2
  16. data/include/grpc/grpc_security.h +127 -14
  17. data/include/grpc/grpc_security_constants.h +16 -0
  18. data/include/grpc/impl/codegen/atm.h +5 -3
  19. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  20. data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
  21. data/include/grpc/impl/codegen/atm_windows.h +6 -0
  22. data/include/grpc/impl/codegen/byte_buffer.h +3 -1
  23. data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -0
  24. data/include/grpc/impl/codegen/compression_types.h +2 -0
  25. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  26. data/include/grpc/impl/codegen/fork.h +2 -0
  27. data/include/grpc/impl/codegen/gpr_slice.h +2 -0
  28. data/include/grpc/impl/codegen/gpr_types.h +2 -0
  29. data/include/grpc/impl/codegen/grpc_types.h +49 -25
  30. data/include/grpc/impl/codegen/log.h +2 -2
  31. data/include/grpc/impl/codegen/port_platform.h +81 -22
  32. data/include/grpc/impl/codegen/propagation_bits.h +2 -0
  33. data/include/grpc/impl/codegen/slice.h +2 -0
  34. data/include/grpc/impl/codegen/status.h +2 -0
  35. data/include/grpc/impl/codegen/sync.h +8 -5
  36. data/include/grpc/impl/codegen/sync_abseil.h +2 -0
  37. data/include/grpc/impl/codegen/sync_custom.h +2 -0
  38. data/include/grpc/impl/codegen/sync_generic.h +3 -0
  39. data/include/grpc/impl/codegen/sync_posix.h +4 -2
  40. data/include/grpc/impl/codegen/sync_windows.h +6 -0
  41. data/include/grpc/module.modulemap +14 -14
  42. data/include/grpc/slice.h +1 -1
  43. data/include/grpc/slice_buffer.h +3 -3
  44. data/include/grpc/status.h +1 -1
  45. data/include/grpc/support/atm.h +1 -1
  46. data/include/grpc/support/atm_gcc_atomic.h +1 -1
  47. data/include/grpc/support/atm_gcc_sync.h +1 -1
  48. data/include/grpc/support/atm_windows.h +1 -1
  49. data/include/grpc/support/log.h +1 -1
  50. data/include/grpc/support/port_platform.h +1 -1
  51. data/include/grpc/support/sync.h +4 -4
  52. data/include/grpc/support/sync_abseil.h +1 -1
  53. data/include/grpc/support/sync_custom.h +1 -1
  54. data/include/grpc/support/sync_generic.h +1 -1
  55. data/include/grpc/support/sync_posix.h +1 -1
  56. data/include/grpc/support/sync_windows.h +1 -1
  57. data/include/grpc/support/time.h +9 -9
  58. data/src/core/ext/filters/census/grpc_context.cc +1 -0
  59. data/src/core/ext/filters/client_channel/backend_metric.cc +20 -24
  60. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -4
  61. data/src/core/ext/filters/client_channel/backup_poller.h +1 -0
  62. data/src/core/ext/filters/client_channel/channel_connectivity.cc +158 -202
  63. data/src/core/ext/filters/client_channel/client_channel.cc +2009 -3145
  64. data/src/core/ext/filters/client_channel/client_channel.h +559 -60
  65. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -5
  66. data/src/core/ext/filters/client_channel/client_channel_channelz.h +2 -2
  67. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -1
  68. data/src/core/ext/filters/client_channel/client_channel_factory.h +18 -19
  69. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -14
  70. data/src/core/ext/filters/client_channel/config_selector.cc +2 -1
  71. data/src/core/ext/filters/client_channel/config_selector.h +33 -9
  72. data/src/core/ext/filters/client_channel/connector.h +19 -19
  73. data/src/core/ext/filters/client_channel/dynamic_filters.cc +190 -0
  74. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  75. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
  76. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -11
  77. data/src/core/ext/filters/client_channel/health/health_check_client.cc +53 -50
  78. data/src/core/ext/filters/client_channel/health/health_check_client.h +35 -33
  79. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +37 -34
  80. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -2
  81. data/src/core/ext/filters/client_channel/http_proxy.cc +36 -20
  82. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -2
  83. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +12 -21
  84. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +246 -166
  85. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  86. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  87. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  88. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +3 -5
  89. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +2 -2
  90. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +4 -3
  91. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +5 -6
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  93. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +37 -30
  94. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +53 -55
  95. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +757 -0
  96. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +37 -0
  97. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  98. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +16 -18
  99. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -3
  100. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +24 -27
  101. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +385 -135
  102. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -8
  103. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  104. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +57 -71
  105. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +43 -64
  106. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1362 -0
  107. data/src/core/ext/filters/client_channel/lb_policy.cc +6 -17
  108. data/src/core/ext/filters/client_channel/lb_policy.h +93 -93
  109. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -1
  110. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -11
  111. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  112. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  113. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
  114. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  115. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +76 -88
  116. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -33
  117. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  118. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -9
  119. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +26 -23
  120. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +473 -74
  121. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +27 -2
  122. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  123. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  124. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +45 -35
  125. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +43 -46
  126. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  127. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +384 -0
  128. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +22 -35
  129. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +466 -254
  130. data/src/core/ext/filters/client_channel/resolver.cc +5 -5
  131. data/src/core/ext/filters/client_channel/resolver.h +4 -15
  132. data/src/core/ext/filters/client_channel/resolver_factory.h +8 -6
  133. data/src/core/ext/filters/client_channel/resolver_registry.cc +43 -44
  134. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
  135. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +42 -252
  136. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +25 -54
  137. data/src/core/ext/filters/client_channel/retry_filter.cc +2573 -0
  138. data/src/core/ext/filters/{workarounds/workaround_cronet_compression_filter.h → client_channel/retry_filter.h} +9 -6
  139. data/src/core/ext/filters/client_channel/retry_service_config.cc +316 -0
  140. data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
  141. data/src/core/ext/filters/client_channel/retry_throttle.cc +20 -49
  142. data/src/core/ext/filters/client_channel/retry_throttle.h +3 -1
  143. data/src/core/ext/filters/client_channel/server_address.cc +10 -1
  144. data/src/core/ext/filters/client_channel/server_address.h +31 -0
  145. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +54 -40
  146. data/src/core/ext/filters/client_channel/subchannel.cc +179 -329
  147. data/src/core/ext/filters/client_channel/subchannel.h +101 -158
  148. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +38 -9
  149. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +21 -10
  150. data/src/core/ext/filters/client_idle/client_idle_filter.cc +47 -223
  151. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  152. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  153. data/src/core/ext/filters/deadline/deadline_filter.cc +33 -34
  154. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +503 -0
  155. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  156. data/src/core/ext/filters/fault_injection/service_config_parser.cc +181 -0
  157. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  158. data/src/core/ext/filters/http/client/http_client_filter.cc +77 -69
  159. data/src/core/ext/filters/http/client_authority_filter.cc +19 -19
  160. data/src/core/ext/filters/http/http_filters_plugin.cc +53 -68
  161. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +42 -35
  162. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +29 -30
  163. data/src/core/ext/filters/http/server/http_server_filter.cc +104 -95
  164. data/src/core/ext/filters/max_age/max_age_filter.cc +71 -68
  165. data/src/core/ext/filters/message_size/message_size_filter.cc +43 -41
  166. data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
  167. data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +17 -16
  168. data/src/core/ext/{filters/client_channel → service_config}/service_config.h +11 -10
  169. data/src/core/ext/{filters/client_channel → service_config}/service_config_call_data.h +23 -19
  170. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +9 -9
  171. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +15 -10
  172. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
  173. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +37 -23
  174. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  175. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +42 -35
  176. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +32 -16
  177. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +51 -62
  178. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +664 -236
  179. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
  180. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +13 -5
  181. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +25 -11
  182. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +61 -22
  183. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -2
  184. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  185. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  186. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +264 -223
  187. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +16 -2
  188. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  189. data/src/core/ext/transport/chttp2/transport/context_list.h +5 -6
  190. data/src/core/ext/transport/chttp2/transport/flow_control.cc +59 -40
  191. data/src/core/ext/transport/chttp2/transport/flow_control.h +23 -17
  192. data/src/core/ext/transport/chttp2/transport/frame_data.cc +28 -24
  193. data/src/core/ext/transport/chttp2/transport/frame_data.h +11 -10
  194. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +21 -20
  195. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +7 -6
  196. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +13 -13
  197. data/src/core/ext/transport/chttp2/transport/frame_ping.h +8 -6
  198. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -15
  199. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +7 -6
  200. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +49 -17
  201. data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -7
  202. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +22 -19
  203. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
  204. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +41 -0
  205. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +311 -665
  206. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +240 -70
  207. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +107 -0
  208. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +86 -0
  209. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +69 -0
  210. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +865 -1172
  211. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +100 -81
  212. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +146 -0
  213. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +137 -0
  214. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +46 -0
  215. data/src/core/{lib/transport/authority_override.h → ext/transport/chttp2/transport/hpack_utils.h} +8 -12
  216. data/src/core/ext/transport/chttp2/transport/internal.h +40 -33
  217. data/src/core/ext/transport/chttp2/transport/parsing.cc +156 -286
  218. data/src/core/ext/transport/chttp2/transport/popularity_count.h +60 -0
  219. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -2
  220. data/src/core/ext/transport/chttp2/transport/varint.cc +13 -7
  221. data/src/core/ext/transport/chttp2/transport/varint.h +39 -28
  222. data/src/core/ext/transport/chttp2/transport/writing.cc +69 -54
  223. data/src/core/ext/transport/inproc/inproc_transport.cc +204 -160
  224. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  225. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1591 -0
  226. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +1 -1
  227. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +2 -1
  228. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +3 -3
  229. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +15 -2
  230. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +48 -49
  231. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +245 -56
  232. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +371 -0
  233. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1554 -0
  234. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +16 -16
  235. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +66 -21
  236. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +178 -142
  237. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +795 -314
  238. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +4 -4
  239. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +21 -7
  240. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +25 -24
  241. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +70 -23
  242. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +29 -29
  243. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +138 -47
  244. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -5
  245. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +23 -8
  246. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +147 -75
  247. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +522 -96
  248. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +27 -27
  249. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +116 -49
  250. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +3 -3
  251. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +15 -2
  252. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +9 -9
  253. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +42 -14
  254. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +63 -63
  255. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +228 -63
  256. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +57 -56
  257. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +244 -98
  258. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +5 -5
  259. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +25 -11
  260. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +125 -57
  261. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +533 -89
  262. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +3 -4
  263. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +15 -2
  264. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
  265. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +133 -0
  266. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +8 -8
  267. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +17 -4
  268. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +15 -8
  269. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +56 -9
  270. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
  271. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +96 -0
  272. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +16 -17
  273. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +81 -40
  274. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +56 -22
  275. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +223 -34
  276. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
  277. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +137 -72
  278. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +3 -3
  279. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +19 -5
  280. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +48 -38
  281. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +276 -103
  282. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +51 -45
  283. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +203 -62
  284. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
  285. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +177 -0
  286. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +10 -9
  287. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +55 -22
  288. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  289. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +536 -0
  290. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +153 -0
  291. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +550 -0
  292. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +51 -44
  293. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +165 -43
  294. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +35 -16
  295. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +148 -40
  296. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +339 -279
  297. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +1466 -543
  298. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +10 -10
  299. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +48 -10
  300. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +6 -7
  301. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +32 -6
  302. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  303. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +73 -0
  304. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  305. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +298 -0
  306. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +79 -0
  307. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +303 -0
  308. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +42 -0
  309. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +123 -0
  310. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +151 -112
  311. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +693 -244
  312. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +1 -2
  313. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +2 -1
  314. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +52 -32
  315. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +231 -59
  316. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +15 -18
  317. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +51 -28
  318. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +45 -44
  319. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +178 -74
  320. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +2 -2
  321. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +15 -2
  322. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +2 -2
  323. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +15 -2
  324. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +58 -51
  325. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +221 -135
  326. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +2 -5
  327. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +15 -2
  328. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +2 -5
  329. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +15 -2
  330. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +9 -10
  331. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +46 -19
  332. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +2 -4
  333. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +15 -2
  334. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +2 -2
  335. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +15 -2
  336. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +121 -0
  337. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +468 -0
  338. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
  339. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +205 -0
  340. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +9 -8
  341. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +44 -14
  342. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  343. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +96 -0
  344. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +4 -4
  345. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +15 -2
  346. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +3 -3
  347. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +15 -2
  348. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +10 -9
  349. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +51 -12
  350. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +10 -11
  351. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +31 -6
  352. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  353. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +136 -0
  354. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +11 -11
  355. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +41 -4
  356. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +15 -15
  357. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +96 -11
  358. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +19 -19
  359. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +77 -14
  360. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +1 -1
  361. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +2 -1
  362. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +6 -6
  363. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +30 -5
  364. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +10 -10
  365. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +41 -4
  366. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +5 -5
  367. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +15 -2
  368. data/src/core/ext/upb-generated/google/api/annotations.upb.c +1 -1
  369. data/src/core/ext/upb-generated/google/api/annotations.upb.h +2 -1
  370. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +62 -62
  371. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +227 -84
  372. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +86 -69
  373. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +256 -72
  374. data/src/core/ext/upb-generated/google/api/http.upb.c +18 -18
  375. data/src/core/ext/upb-generated/google/api/http.upb.h +47 -10
  376. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +4 -4
  377. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +15 -2
  378. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +154 -154
  379. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +645 -320
  380. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +4 -4
  381. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +15 -2
  382. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +2 -2
  383. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +15 -2
  384. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
  385. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +44 -7
  386. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +4 -4
  387. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +15 -2
  388. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +19 -19
  389. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +119 -10
  390. data/src/core/ext/upb-generated/google/rpc/status.upb.c +5 -5
  391. data/src/core/ext/upb-generated/google/rpc/status.upb.h +18 -5
  392. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
  393. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +19 -5
  394. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +63 -63
  395. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +220 -87
  396. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -8
  397. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +36 -9
  398. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +5 -5
  399. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +28 -3
  400. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
  401. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +146 -35
  402. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  403. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  404. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +8 -8
  405. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +41 -4
  406. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +4 -6
  407. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +15 -2
  408. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +1 -1
  409. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +2 -1
  410. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +4 -4
  411. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +17 -4
  412. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +3 -3
  413. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +15 -2
  414. data/src/core/ext/upb-generated/validate/validate.upb.c +243 -227
  415. data/src/core/ext/upb-generated/validate/validate.upb.h +626 -253
  416. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  417. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  418. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +28 -0
  419. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +66 -0
  420. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  421. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +155 -0
  422. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  423. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +90 -0
  424. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
  425. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +100 -0
  426. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  427. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +178 -0
  428. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  429. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +91 -0
  430. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  431. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  432. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +33 -0
  433. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  434. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  435. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  436. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +15 -7
  437. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -170
  438. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +424 -0
  439. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +120 -0
  440. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +467 -429
  441. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +12 -2
  442. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +12 -9
  443. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +156 -109
  444. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +25 -0
  445. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +89 -88
  446. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +156 -153
  447. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +240 -168
  448. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +20 -0
  449. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +4 -7
  450. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -0
  451. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  452. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +37 -20
  453. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -0
  454. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  455. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +56 -59
  456. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +90 -63
  457. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +10 -0
  458. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +137 -122
  459. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  460. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +136 -120
  461. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -0
  462. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  463. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +31 -26
  464. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  465. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  466. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +152 -0
  467. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +75 -0
  468. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +69 -51
  469. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +5 -0
  470. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +748 -681
  471. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +15 -0
  472. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +22 -25
  473. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  474. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  475. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  476. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  477. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +123 -0
  478. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  479. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +79 -0
  480. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  481. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +435 -379
  482. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +10 -0
  483. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +12 -16
  484. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +121 -91
  485. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +5 -0
  486. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +45 -53
  487. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +182 -180
  488. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +92 -102
  489. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
  490. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +32 -42
  491. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +30 -40
  492. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +4 -7
  493. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +38 -44
  494. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +163 -0
  495. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +55 -0
  496. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -0
  497. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  498. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +14 -13
  499. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  500. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  501. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +35 -32
  502. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
  503. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  504. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  505. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +8 -7
  506. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +100 -100
  507. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +9 -8
  508. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +8 -8
  509. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +8 -8
  510. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +9 -8
  511. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +8 -8
  512. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +4 -4
  513. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
  514. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
  515. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
  516. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
  517. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
  518. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +182 -157
  519. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  520. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  521. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +43 -0
  522. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  523. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +63 -0
  524. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  525. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +46 -0
  526. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  527. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +50 -0
  528. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  529. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +68 -0
  530. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  531. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +51 -0
  532. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  533. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  534. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  535. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  536. data/src/core/ext/xds/certificate_provider_registry.cc +2 -2
  537. data/src/core/ext/xds/certificate_provider_store.cc +10 -7
  538. data/src/core/ext/xds/certificate_provider_store.h +15 -10
  539. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +28 -3
  540. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +3 -6
  541. data/src/core/ext/xds/xds_api.cc +2654 -808
  542. data/src/core/ext/xds/xds_api.h +460 -154
  543. data/src/core/ext/xds/xds_bootstrap.cc +139 -188
  544. data/src/core/ext/xds/xds_bootstrap.h +34 -18
  545. data/src/core/ext/xds/xds_certificate_provider.cc +237 -72
  546. data/src/core/ext/xds/xds_certificate_provider.h +104 -27
  547. data/src/core/ext/xds/xds_channel_args.h +5 -2
  548. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  549. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  550. data/src/core/ext/xds/xds_client.cc +985 -429
  551. data/src/core/ext/xds/xds_client.h +100 -51
  552. data/src/core/ext/xds/xds_client_stats.cc +18 -16
  553. data/src/core/ext/xds/xds_client_stats.h +12 -11
  554. data/src/core/ext/xds/xds_http_fault_filter.cc +227 -0
  555. data/src/core/ext/xds/xds_http_fault_filter.h +64 -0
  556. data/src/core/ext/xds/xds_http_filters.cc +116 -0
  557. data/src/core/ext/xds/xds_http_filters.h +133 -0
  558. data/src/core/ext/xds/xds_server_config_fetcher.cc +544 -0
  559. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +72 -68
  560. data/src/core/lib/{iomgr → address_utils}/parse_address.h +20 -16
  561. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +131 -15
  562. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +37 -7
  563. data/src/core/lib/avl/avl.cc +5 -5
  564. data/src/core/lib/backoff/backoff.cc +1 -1
  565. data/src/core/lib/channel/call_tracer.h +85 -0
  566. data/src/core/lib/channel/channel_args.cc +34 -15
  567. data/src/core/lib/channel/channel_args.h +9 -0
  568. data/src/core/lib/channel/channel_stack.cc +27 -12
  569. data/src/core/lib/channel/channel_stack.h +18 -10
  570. data/src/core/lib/channel/channel_stack_builder.cc +6 -16
  571. data/src/core/lib/channel/channel_stack_builder.h +1 -9
  572. data/src/core/lib/channel/channel_trace.cc +5 -4
  573. data/src/core/lib/channel/channel_trace.h +3 -2
  574. data/src/core/lib/channel/channelz.cc +162 -63
  575. data/src/core/lib/channel/channelz.h +62 -31
  576. data/src/core/lib/channel/channelz_registry.cc +22 -7
  577. data/src/core/lib/channel/channelz_registry.h +1 -2
  578. data/src/core/lib/channel/connected_channel.cc +6 -7
  579. data/src/core/lib/channel/connected_channel.h +1 -2
  580. data/src/core/lib/channel/context.h +3 -0
  581. data/src/core/lib/channel/handshaker.cc +13 -53
  582. data/src/core/lib/channel/handshaker.h +7 -25
  583. data/src/core/lib/channel/handshaker_factory.h +10 -2
  584. data/src/core/lib/channel/handshaker_registry.cc +15 -70
  585. data/src/core/lib/channel/handshaker_registry.h +29 -12
  586. data/src/core/lib/channel/status_util.cc +12 -2
  587. data/src/core/lib/channel/status_util.h +11 -2
  588. data/src/core/lib/compression/algorithm_metadata.h +1 -0
  589. data/src/core/lib/compression/compression.cc +2 -2
  590. data/src/core/lib/compression/compression_args.cc +11 -7
  591. data/src/core/lib/compression/compression_internal.cc +4 -6
  592. data/src/core/lib/compression/compression_internal.h +1 -1
  593. data/src/core/lib/compression/message_compress.cc +2 -2
  594. data/src/core/lib/compression/stream_compression.cc +2 -1
  595. data/src/core/lib/compression/stream_compression.h +3 -2
  596. data/src/core/lib/compression/stream_compression_gzip.cc +2 -1
  597. data/src/core/lib/compression/stream_compression_gzip.h +1 -1
  598. data/src/core/lib/compression/stream_compression_identity.cc +2 -1
  599. data/src/core/lib/compression/stream_compression_identity.h +1 -1
  600. data/src/core/lib/config/core_configuration.cc +96 -0
  601. data/src/core/lib/config/core_configuration.h +146 -0
  602. data/src/core/lib/debug/stats.cc +1 -1
  603. data/src/core/lib/debug/stats.h +4 -3
  604. data/src/core/lib/debug/stats_data.cc +15 -14
  605. data/src/core/lib/debug/stats_data.h +14 -13
  606. data/src/core/lib/debug/trace.cc +1 -0
  607. data/src/core/lib/debug/trace.h +2 -1
  608. data/src/core/lib/event_engine/endpoint_config.cc +45 -0
  609. data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
  610. data/src/core/lib/event_engine/event_engine.cc +50 -0
  611. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  612. data/src/core/lib/event_engine/sockaddr.h +44 -0
  613. data/src/core/lib/gpr/alloc.cc +7 -5
  614. data/src/core/lib/gpr/atm.cc +1 -1
  615. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  616. data/src/core/lib/gpr/env_linux.cc +1 -2
  617. data/src/core/lib/gpr/env_posix.cc +2 -3
  618. data/src/core/lib/gpr/log.cc +61 -19
  619. data/src/core/lib/gpr/log_android.cc +3 -2
  620. data/src/core/lib/gpr/log_linux.cc +10 -5
  621. data/src/core/lib/gpr/log_posix.cc +9 -4
  622. data/src/core/lib/gpr/log_windows.cc +3 -1
  623. data/src/core/lib/gpr/murmur_hash.cc +4 -2
  624. data/src/core/lib/gpr/spinlock.h +10 -2
  625. data/src/core/lib/gpr/string.cc +24 -23
  626. data/src/core/lib/gpr/string.h +7 -8
  627. data/src/core/lib/gpr/sync.cc +6 -6
  628. data/src/core/lib/gpr/sync_abseil.cc +10 -12
  629. data/src/core/lib/gpr/sync_posix.cc +3 -3
  630. data/src/core/lib/gpr/sync_windows.cc +2 -2
  631. data/src/core/lib/gpr/time.cc +15 -14
  632. data/src/core/lib/gpr/time_windows.cc +3 -2
  633. data/src/core/lib/gpr/tls.h +119 -40
  634. data/src/core/lib/gpr/tmpfile_posix.cc +1 -2
  635. data/src/core/lib/gpr/useful.h +79 -32
  636. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  637. data/src/core/lib/gprpp/arena.cc +2 -1
  638. data/src/core/lib/gprpp/arena.h +18 -7
  639. data/src/core/lib/gprpp/atomic_utils.h +47 -0
  640. data/src/core/lib/gprpp/bitset.h +188 -0
  641. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  642. data/src/core/lib/gprpp/construct_destruct.h +39 -0
  643. data/src/core/lib/gprpp/dual_ref_counted.h +28 -29
  644. data/src/core/lib/gprpp/fork.cc +14 -12
  645. data/src/core/lib/gprpp/fork.h +4 -4
  646. data/src/core/lib/gprpp/global_config.h +1 -2
  647. data/src/core/lib/gprpp/global_config_env.cc +7 -7
  648. data/src/core/lib/gprpp/global_config_generic.h +2 -2
  649. data/src/core/lib/gprpp/manual_constructor.h +9 -6
  650. data/src/core/lib/gprpp/match.h +73 -0
  651. data/src/core/lib/gprpp/memory.h +9 -3
  652. data/src/core/lib/gprpp/mpscq.cc +9 -9
  653. data/src/core/lib/gprpp/mpscq.h +6 -5
  654. data/src/core/lib/gprpp/orphanable.h +6 -6
  655. data/src/core/lib/gprpp/overload.h +59 -0
  656. data/src/core/lib/gprpp/ref_counted.h +48 -34
  657. data/src/core/lib/gprpp/ref_counted_ptr.h +11 -1
  658. data/src/core/lib/gprpp/status_helper.cc +427 -0
  659. data/src/core/lib/gprpp/status_helper.h +194 -0
  660. data/src/core/lib/gprpp/sync.h +106 -43
  661. data/src/core/lib/gprpp/table.h +411 -0
  662. data/src/core/lib/gprpp/thd.h +1 -1
  663. data/src/core/lib/gprpp/thd_posix.cc +11 -6
  664. data/src/core/lib/gprpp/thd_windows.cc +7 -12
  665. data/src/core/lib/gprpp/time_util.cc +77 -0
  666. data/src/core/lib/gprpp/time_util.h +42 -0
  667. data/src/core/lib/http/format_request.cc +1 -0
  668. data/src/core/lib/http/format_request.h +1 -0
  669. data/src/core/lib/http/httpcli.cc +203 -185
  670. data/src/core/lib/http/httpcli.h +5 -3
  671. data/src/core/lib/http/httpcli_security_connector.cc +19 -18
  672. data/src/core/lib/http/parser.cc +19 -20
  673. data/src/core/lib/http/parser.h +5 -4
  674. data/src/core/lib/iomgr/buffer_list.cc +10 -11
  675. data/src/core/lib/iomgr/buffer_list.h +6 -8
  676. data/src/core/lib/iomgr/call_combiner.cc +46 -21
  677. data/src/core/lib/iomgr/call_combiner.h +12 -14
  678. data/src/core/lib/iomgr/cfstream_handle.cc +6 -6
  679. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  680. data/src/core/lib/iomgr/closure.h +7 -6
  681. data/src/core/lib/iomgr/combiner.cc +25 -36
  682. data/src/core/lib/iomgr/combiner.h +3 -2
  683. data/src/core/lib/iomgr/dualstack_socket_posix.cc +1 -0
  684. data/src/core/lib/iomgr/endpoint.cc +1 -5
  685. data/src/core/lib/iomgr/endpoint.h +3 -5
  686. data/src/core/lib/iomgr/endpoint_cfstream.cc +27 -39
  687. data/src/core/lib/iomgr/endpoint_cfstream.h +1 -1
  688. data/src/core/lib/iomgr/endpoint_pair.h +1 -0
  689. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +32 -0
  690. data/src/core/lib/iomgr/endpoint_pair_posix.cc +15 -11
  691. data/src/core/lib/iomgr/endpoint_pair_windows.cc +17 -9
  692. data/src/core/lib/iomgr/error.cc +277 -105
  693. data/src/core/lib/iomgr/error.h +280 -114
  694. data/src/core/lib/iomgr/error_cfstream.cc +10 -4
  695. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  696. data/src/core/lib/iomgr/error_internal.h +7 -2
  697. data/src/core/lib/iomgr/ev_apple.cc +16 -13
  698. data/src/core/lib/iomgr/ev_apple.h +1 -1
  699. data/src/core/lib/iomgr/ev_epoll1_linux.cc +53 -53
  700. data/src/core/lib/iomgr/ev_epollex_linux.cc +81 -81
  701. data/src/core/lib/iomgr/ev_poll_posix.cc +70 -68
  702. data/src/core/lib/iomgr/ev_posix.cc +13 -13
  703. data/src/core/lib/iomgr/ev_posix.h +9 -9
  704. data/src/core/lib/iomgr/event_engine/closure.cc +77 -0
  705. data/src/core/lib/iomgr/event_engine/closure.h +42 -0
  706. data/src/core/lib/iomgr/event_engine/endpoint.cc +173 -0
  707. data/src/core/lib/iomgr/event_engine/endpoint.h +52 -0
  708. data/src/core/lib/iomgr/event_engine/iomgr.cc +104 -0
  709. data/src/core/lib/iomgr/event_engine/iomgr.h +42 -0
  710. data/src/core/lib/iomgr/event_engine/pollset.cc +88 -0
  711. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  712. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  713. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
  714. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
  715. data/src/core/lib/iomgr/event_engine/resolver.cc +114 -0
  716. data/src/core/lib/iomgr/event_engine/tcp.cc +293 -0
  717. data/src/core/lib/iomgr/event_engine/timer.cc +62 -0
  718. data/src/core/lib/iomgr/exec_ctx.cc +14 -11
  719. data/src/core/lib/iomgr/exec_ctx.h +21 -28
  720. data/src/core/lib/iomgr/executor/mpmcqueue.cc +15 -16
  721. data/src/core/lib/iomgr/executor/mpmcqueue.h +7 -11
  722. data/src/core/lib/iomgr/executor/threadpool.cc +4 -5
  723. data/src/core/lib/iomgr/executor/threadpool.h +5 -4
  724. data/src/core/lib/iomgr/executor.cc +19 -33
  725. data/src/core/lib/iomgr/executor.h +3 -3
  726. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -2
  727. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +2 -2
  728. data/src/core/lib/iomgr/internal_errqueue.cc +3 -2
  729. data/src/core/lib/iomgr/iocp_windows.cc +1 -0
  730. data/src/core/lib/iomgr/iomgr.cc +6 -4
  731. data/src/core/lib/iomgr/iomgr.h +3 -3
  732. data/src/core/lib/iomgr/iomgr_custom.cc +3 -3
  733. data/src/core/lib/iomgr/iomgr_custom.h +2 -2
  734. data/src/core/lib/iomgr/iomgr_internal.cc +8 -12
  735. data/src/core/lib/iomgr/iomgr_internal.h +6 -5
  736. data/src/core/lib/iomgr/iomgr_posix.cc +3 -2
  737. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -13
  738. data/src/core/lib/iomgr/iomgr_windows.cc +2 -3
  739. data/src/core/lib/iomgr/is_epollexclusive_available.cc +4 -4
  740. data/src/core/lib/iomgr/load_file.cc +6 -6
  741. data/src/core/lib/iomgr/load_file.h +2 -2
  742. data/src/core/lib/iomgr/lockfree_event.cc +38 -15
  743. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  744. data/src/core/lib/iomgr/polling_entity.cc +2 -2
  745. data/src/core/lib/iomgr/pollset.cc +5 -5
  746. data/src/core/lib/iomgr/pollset.h +9 -9
  747. data/src/core/lib/iomgr/pollset_custom.cc +10 -11
  748. data/src/core/lib/iomgr/pollset_custom.h +3 -1
  749. data/src/core/lib/iomgr/pollset_set_custom.cc +2 -3
  750. data/src/core/lib/iomgr/pollset_set_windows.cc +1 -0
  751. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  752. data/src/core/lib/iomgr/port.h +7 -10
  753. data/src/core/lib/iomgr/python_util.h +4 -3
  754. data/src/core/lib/iomgr/resolve_address.cc +14 -9
  755. data/src/core/lib/iomgr/resolve_address.h +12 -10
  756. data/src/core/lib/iomgr/resolve_address_custom.cc +14 -13
  757. data/src/core/lib/iomgr/resolve_address_custom.h +3 -4
  758. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -14
  759. data/src/core/lib/iomgr/resolve_address_windows.cc +10 -12
  760. data/src/core/lib/iomgr/resource_quota.cc +152 -62
  761. data/src/core/lib/iomgr/resource_quota.h +66 -17
  762. data/src/core/lib/iomgr/sockaddr.h +2 -1
  763. data/src/core/lib/iomgr/socket_factory_posix.cc +8 -7
  764. data/src/core/lib/iomgr/socket_factory_posix.h +1 -0
  765. data/src/core/lib/iomgr/socket_mutator.cc +20 -6
  766. data/src/core/lib/iomgr/socket_mutator.h +27 -3
  767. data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -27
  768. data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
  769. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
  770. data/src/core/lib/iomgr/socket_utils_posix.h +22 -22
  771. data/src/core/lib/iomgr/socket_utils_windows.cc +2 -2
  772. data/src/core/lib/iomgr/tcp_client.cc +5 -3
  773. data/src/core/lib/iomgr/tcp_client.h +4 -0
  774. data/src/core/lib/iomgr/tcp_client_cfstream.cc +18 -26
  775. data/src/core/lib/iomgr/tcp_client_custom.cc +19 -27
  776. data/src/core/lib/iomgr/tcp_client_posix.cc +56 -47
  777. data/src/core/lib/iomgr/tcp_client_posix.h +8 -6
  778. data/src/core/lib/iomgr/tcp_client_windows.cc +23 -14
  779. data/src/core/lib/iomgr/tcp_custom.cc +46 -55
  780. data/src/core/lib/iomgr/tcp_custom.h +15 -13
  781. data/src/core/lib/iomgr/tcp_posix.cc +119 -145
  782. data/src/core/lib/iomgr/tcp_posix.h +19 -12
  783. data/src/core/lib/iomgr/tcp_server.cc +9 -7
  784. data/src/core/lib/iomgr/tcp_server.h +18 -14
  785. data/src/core/lib/iomgr/tcp_server_custom.cc +63 -73
  786. data/src/core/lib/iomgr/tcp_server_posix.cc +49 -35
  787. data/src/core/lib/iomgr/tcp_server_utils_posix.h +16 -12
  788. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +22 -20
  789. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +11 -12
  790. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  791. data/src/core/lib/iomgr/tcp_server_windows.cc +40 -36
  792. data/src/core/lib/iomgr/tcp_windows.cc +21 -40
  793. data/src/core/lib/iomgr/tcp_windows.h +4 -3
  794. data/src/core/lib/iomgr/timer.cc +1 -0
  795. data/src/core/lib/iomgr/timer.h +7 -3
  796. data/src/core/lib/iomgr/timer_custom.cc +7 -6
  797. data/src/core/lib/iomgr/timer_custom.h +1 -1
  798. data/src/core/lib/iomgr/timer_generic.cc +32 -62
  799. data/src/core/lib/iomgr/timer_generic.h +1 -0
  800. data/src/core/lib/iomgr/timer_heap.cc +2 -3
  801. data/src/core/lib/iomgr/timer_manager.cc +4 -4
  802. data/src/core/lib/iomgr/unix_sockets_posix.cc +21 -24
  803. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -5
  804. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  805. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  806. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +2 -1
  807. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +6 -7
  808. data/src/core/lib/iomgr/wakeup_fd_posix.cc +4 -3
  809. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  810. data/src/core/lib/iomgr/work_serializer.cc +4 -4
  811. data/src/core/lib/iomgr/work_serializer.h +18 -2
  812. data/src/core/lib/json/json.h +11 -1
  813. data/src/core/lib/json/json_reader.cc +14 -23
  814. data/src/core/lib/json/json_util.cc +68 -0
  815. data/src/core/lib/json/json_util.h +65 -115
  816. data/src/core/lib/json/json_writer.cc +0 -3
  817. data/src/core/lib/matchers/matchers.cc +327 -0
  818. data/src/core/lib/matchers/matchers.h +160 -0
  819. data/src/core/lib/profiling/basic_timers.cc +8 -6
  820. data/src/core/lib/profiling/stap_timers.cc +2 -2
  821. data/src/core/lib/security/authorization/authorization_engine.h +13 -53
  822. data/src/core/lib/security/authorization/authorization_policy_provider.h +33 -0
  823. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  824. data/src/core/lib/security/authorization/evaluate_args.cc +126 -66
  825. data/src/core/lib/security/authorization/evaluate_args.h +47 -15
  826. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +171 -0
  827. data/src/core/lib/security/authorization/sdk_server_authz_filter.h +67 -0
  828. data/src/core/lib/security/context/security_context.cc +15 -11
  829. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  830. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  831. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  832. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +2 -2
  833. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  834. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +2 -2
  835. data/src/core/lib/security/credentials/composite/composite_credentials.cc +9 -8
  836. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  837. data/src/core/lib/security/credentials/credentials.cc +16 -14
  838. data/src/core/lib/security/credentials/credentials.h +11 -5
  839. data/src/core/lib/security/credentials/credentials_metadata.cc +2 -3
  840. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +404 -0
  841. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +81 -0
  842. data/src/core/lib/security/credentials/external/aws_request_signer.cc +20 -14
  843. data/src/core/lib/security/credentials/external/aws_request_signer.h +2 -3
  844. data/src/core/lib/security/credentials/external/external_account_credentials.cc +270 -54
  845. data/src/core/lib/security/credentials/external/external_account_credentials.h +16 -12
  846. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +8 -8
  847. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -6
  848. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +26 -26
  849. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -12
  850. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  851. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  852. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -2
  853. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +92 -31
  854. data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -3
  855. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  856. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +18 -5
  857. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -7
  858. data/src/core/lib/security/credentials/jwt/json_token.h +2 -1
  859. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +34 -17
  860. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +13 -5
  861. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +15 -22
  862. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +3 -3
  863. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  864. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  865. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +57 -66
  866. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +11 -9
  867. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +10 -12
  868. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  869. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +11 -10
  870. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -3
  871. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +12 -15
  872. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +20 -21
  873. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +382 -5
  874. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +74 -1
  875. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +5 -1
  876. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +2 -3
  877. data/src/core/lib/security/credentials/tls/tls_credentials.cc +3 -2
  878. data/src/core/lib/security/credentials/tls/tls_credentials.h +1 -1
  879. data/src/core/lib/security/credentials/tls/tls_utils.cc +123 -0
  880. data/src/core/lib/security/credentials/tls/tls_utils.h +51 -0
  881. data/src/core/lib/security/credentials/xds/xds_credentials.cc +209 -10
  882. data/src/core/lib/security/credentials/xds/xds_credentials.h +27 -9
  883. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +14 -4
  884. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +20 -12
  885. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +50 -17
  886. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +35 -8
  887. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +1 -0
  888. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +4 -4
  889. data/src/core/lib/security/security_connector/local/local_security_connector.cc +23 -10
  890. data/src/core/lib/security/security_connector/security_connector.cc +12 -6
  891. data/src/core/lib/security/security_connector/security_connector.h +10 -5
  892. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +24 -17
  893. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +1 -2
  894. data/src/core/lib/security/security_connector/ssl_utils.cc +41 -14
  895. data/src/core/lib/security/security_connector/ssl_utils.h +16 -23
  896. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +156 -113
  897. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +67 -52
  898. data/src/core/lib/security/transport/auth_filters.h +1 -0
  899. data/src/core/lib/security/transport/client_auth_filter.cc +27 -21
  900. data/src/core/lib/security/transport/secure_endpoint.cc +10 -20
  901. data/src/core/lib/security/transport/secure_endpoint.h +1 -0
  902. data/src/core/lib/security/transport/security_handshaker.cc +158 -90
  903. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  904. data/src/core/lib/security/transport/server_auth_filter.cc +20 -16
  905. data/src/core/lib/security/transport/tsi_error.cc +5 -6
  906. data/src/core/lib/security/transport/tsi_error.h +2 -1
  907. data/src/core/lib/security/util/json_util.cc +8 -10
  908. data/src/core/lib/security/util/json_util.h +1 -1
  909. data/src/core/lib/slice/percent_encoding.cc +73 -30
  910. data/src/core/lib/slice/percent_encoding.h +29 -28
  911. data/src/core/lib/slice/slice.cc +14 -21
  912. data/src/core/lib/{gpr/tls_pthread.cc → slice/slice_api.cc} +15 -6
  913. data/src/core/lib/slice/slice_buffer.cc +6 -7
  914. data/src/core/lib/slice/slice_intern.cc +19 -27
  915. data/src/core/lib/slice/slice_internal.h +4 -246
  916. data/src/core/lib/slice/slice_refcount.cc +17 -0
  917. data/src/core/lib/slice/slice_refcount.h +121 -0
  918. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  919. data/src/core/lib/slice/slice_split.cc +100 -0
  920. data/src/core/lib/slice/slice_split.h +40 -0
  921. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  922. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  923. data/src/core/lib/slice/static_slice.cc +529 -0
  924. data/src/core/lib/slice/static_slice.h +331 -0
  925. data/src/core/lib/surface/api_trace.cc +2 -1
  926. data/src/core/lib/surface/api_trace.h +1 -0
  927. data/src/core/lib/surface/builtins.cc +49 -0
  928. data/src/core/lib/surface/builtins.h +26 -0
  929. data/src/core/lib/surface/byte_buffer_reader.cc +1 -1
  930. data/src/core/lib/surface/call.cc +198 -186
  931. data/src/core/lib/surface/call.h +10 -5
  932. data/src/core/lib/surface/call_details.cc +10 -10
  933. data/src/core/lib/surface/call_log_batch.cc +2 -2
  934. data/src/core/lib/surface/channel.cc +57 -51
  935. data/src/core/lib/surface/channel.h +19 -14
  936. data/src/core/lib/surface/channel_init.cc +23 -76
  937. data/src/core/lib/surface/channel_init.h +52 -44
  938. data/src/core/lib/surface/channel_ping.cc +2 -3
  939. data/src/core/lib/surface/channel_stack_type.cc +2 -1
  940. data/src/core/lib/surface/completion_queue.cc +140 -145
  941. data/src/core/lib/surface/completion_queue.h +18 -17
  942. data/src/core/lib/surface/completion_queue_factory.cc +3 -3
  943. data/src/core/lib/surface/completion_queue_factory.h +1 -0
  944. data/src/core/lib/surface/event_string.cc +1 -0
  945. data/src/core/lib/surface/init.cc +18 -65
  946. data/src/core/lib/surface/init.h +10 -2
  947. data/src/core/lib/surface/init_secure.cc +36 -14
  948. data/src/core/lib/surface/lame_client.cc +62 -61
  949. data/src/core/lib/surface/lame_client.h +5 -0
  950. data/src/core/lib/surface/metadata_array.cc +2 -2
  951. data/src/core/lib/surface/server.cc +167 -116
  952. data/src/core/lib/surface/server.h +140 -40
  953. data/src/core/lib/surface/validate_metadata.cc +55 -24
  954. data/src/core/lib/surface/validate_metadata.h +3 -2
  955. data/src/core/lib/surface/version.cc +2 -2
  956. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  957. data/src/core/lib/transport/byte_stream.cc +5 -5
  958. data/src/core/lib/transport/byte_stream.h +9 -8
  959. data/src/core/lib/transport/connectivity_state.cc +9 -6
  960. data/src/core/lib/transport/connectivity_state.h +8 -6
  961. data/src/core/lib/transport/error_utils.cc +64 -27
  962. data/src/core/lib/transport/error_utils.h +13 -7
  963. data/src/core/lib/transport/metadata.cc +47 -22
  964. data/src/core/lib/transport/metadata.h +15 -12
  965. data/src/core/lib/transport/metadata_batch.cc +41 -339
  966. data/src/core/lib/transport/metadata_batch.h +932 -68
  967. data/src/core/lib/transport/parsed_metadata.h +263 -0
  968. data/src/core/lib/transport/pid_controller.cc +4 -4
  969. data/src/core/lib/transport/static_metadata.cc +715 -847
  970. data/src/core/lib/transport/static_metadata.h +115 -379
  971. data/src/core/lib/transport/status_metadata.cc +5 -3
  972. data/src/core/lib/transport/transport.cc +8 -8
  973. data/src/core/lib/transport/transport.h +12 -10
  974. data/src/core/lib/transport/transport_op_string.cc +46 -26
  975. data/src/core/lib/uri/uri_parser.cc +131 -249
  976. data/src/core/lib/uri/uri_parser.h +57 -21
  977. data/src/core/plugin_registry/grpc_plugin_registry.cc +101 -44
  978. data/src/core/tsi/alts/crypt/aes_gcm.cc +6 -3
  979. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  980. data/src/core/tsi/alts/crypt/gsec.h +5 -0
  981. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  982. data/src/core/tsi/alts/frame_protector/frame_handler.cc +18 -17
  983. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +27 -33
  984. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +2 -3
  985. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +57 -51
  986. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  987. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  988. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
  989. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +2 -2
  990. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  991. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  992. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +6 -6
  993. data/src/core/tsi/fake_transport_security.cc +31 -12
  994. data/src/core/tsi/local_transport_security.cc +36 -73
  995. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -3
  996. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  997. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +20 -55
  998. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -7
  999. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -2
  1000. data/src/core/tsi/ssl_transport_security.cc +115 -77
  1001. data/src/core/tsi/ssl_transport_security.h +12 -14
  1002. data/src/core/tsi/transport_security.cc +21 -9
  1003. data/src/core/tsi/transport_security.h +16 -1
  1004. data/src/core/tsi/transport_security_grpc.h +1 -0
  1005. data/src/core/tsi/transport_security_interface.h +27 -1
  1006. data/src/ruby/bin/math_services_pb.rb +1 -1
  1007. data/src/ruby/ext/grpc/extconf.rb +21 -8
  1008. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -1
  1009. data/src/ruby/ext/grpc/rb_call.c +5 -5
  1010. data/src/ruby/ext/grpc/rb_call_credentials.c +5 -5
  1011. data/src/ruby/ext/grpc/rb_channel.c +19 -8
  1012. data/src/ruby/ext/grpc/rb_channel_args.c +2 -2
  1013. data/src/ruby/ext/grpc/rb_channel_credentials.c +15 -5
  1014. data/src/ruby/ext/grpc/rb_channel_credentials.h +5 -0
  1015. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
  1016. data/src/ruby/ext/grpc/rb_compression_options.c +6 -5
  1017. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  1018. data/src/ruby/ext/grpc/rb_event_thread.c +4 -2
  1019. data/src/ruby/ext/grpc/rb_grpc.c +9 -4
  1020. data/src/ruby/ext/grpc/rb_grpc.h +1 -0
  1021. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +24 -0
  1022. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +50 -14
  1023. data/src/ruby/ext/grpc/rb_server.c +19 -6
  1024. data/src/ruby/ext/grpc/rb_server_credentials.c +22 -6
  1025. data/src/ruby/ext/grpc/rb_server_credentials.h +5 -0
  1026. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +218 -0
  1027. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +37 -0
  1028. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +170 -0
  1029. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +37 -0
  1030. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
  1031. data/src/ruby/lib/grpc/version.rb +1 -1
  1032. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  1033. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +35 -0
  1034. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  1035. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +23 -5
  1036. data/src/ruby/spec/call_spec.rb +1 -1
  1037. data/src/ruby/spec/channel_credentials_spec.rb +32 -0
  1038. data/src/ruby/spec/channel_spec.rb +17 -6
  1039. data/src/ruby/spec/client_auth_spec.rb +27 -1
  1040. data/src/ruby/spec/client_server_spec.rb +1 -1
  1041. data/src/ruby/spec/errors_spec.rb +1 -1
  1042. data/src/ruby/spec/generic/active_call_spec.rb +2 -2
  1043. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  1044. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  1045. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
  1046. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  1047. data/src/ruby/spec/server_spec.rb +22 -0
  1048. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  1049. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  1050. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  1051. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  1052. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  1053. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  1054. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  1055. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  1056. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  1057. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  1058. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  1059. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  1060. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  1061. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  1062. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  1063. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  1064. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  1065. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  1066. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +9 -6
  1067. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +54 -48
  1068. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  1069. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  1070. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  1071. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  1072. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  1073. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  1074. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1075. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  1076. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  1077. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  1078. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  1079. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  1080. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  1081. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  1082. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  1083. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  1084. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  1085. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  1086. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  1087. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  1088. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  1089. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  1090. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  1091. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  1092. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  1093. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  1094. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  1095. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  1096. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  1097. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  1098. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  1099. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  1100. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  1101. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  1102. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  1103. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  1104. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  1105. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  1106. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  1107. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  1108. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +396 -0
  1109. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  1110. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  1111. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  1112. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  1113. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  1114. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  1115. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  1116. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  1117. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  1118. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  1119. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  1120. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  1121. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  1122. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  1123. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  1124. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  1125. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  1126. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  1127. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  1128. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  1129. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  1130. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  1131. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  1132. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  1133. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  1134. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  1135. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  1136. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  1137. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  1138. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  1139. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  1140. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  1141. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  1142. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -0
  1143. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  1144. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  1145. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  1146. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  1147. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  1148. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  1149. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  1150. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  1151. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  1152. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  1153. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  1154. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  1155. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  1156. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  1157. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  1158. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  1159. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  1160. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  1161. data/third_party/boringssl-with-bazel/err_data.c +756 -724
  1162. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +55 -50
  1163. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +22 -23
  1164. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  1165. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
  1166. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +6 -1
  1167. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
  1168. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +16 -23
  1169. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +26 -24
  1170. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  1171. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  1172. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +269 -272
  1173. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  1174. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +3 -3
  1175. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +22 -10
  1176. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +3 -42
  1177. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +1 -1
  1178. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +16 -16
  1179. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  1180. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  1181. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +196 -0
  1182. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +35 -86
  1183. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +326 -281
  1184. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +15 -26
  1185. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +20 -75
  1186. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  1187. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +3 -2
  1188. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +1 -1
  1189. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
  1190. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  1191. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  1192. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  1193. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  1194. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  1195. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  1196. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  1197. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +156 -0
  1198. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  1199. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  1200. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  1201. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +68 -45
  1202. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  1203. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +49 -65
  1204. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  1205. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  1206. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +101 -3
  1207. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  1208. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +14 -3
  1209. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  1210. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  1211. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  1212. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  1213. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  1214. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  1215. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  1216. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +31 -3
  1217. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  1218. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  1219. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
  1220. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  1221. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +4 -1
  1222. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  1223. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +28 -12
  1224. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  1225. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +15 -4
  1226. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  1227. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  1228. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +32 -16
  1229. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +35 -2
  1230. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  1231. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  1232. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  1233. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
  1234. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +9 -0
  1235. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  1236. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  1237. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +16 -0
  1238. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -2
  1239. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  1240. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  1241. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  1242. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +56 -72
  1243. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +56 -73
  1244. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  1245. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  1246. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  1247. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  1248. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  1249. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  1250. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  1251. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +30 -9
  1252. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +123 -44
  1253. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +30 -20
  1254. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +50 -33
  1255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +65 -41
  1256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  1257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +161 -9
  1258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +93 -107
  1259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +91 -113
  1260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +50 -86
  1261. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +400 -325
  1262. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +219 -121
  1263. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +9 -2
  1264. data/third_party/boringssl-with-bazel/src/crypto/internal.h +125 -0
  1265. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +253 -0
  1266. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +28 -23
  1267. data/third_party/boringssl-with-bazel/src/crypto/mem.c +28 -9
  1268. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +10 -6
  1269. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  1270. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  1271. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  1272. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  1273. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  1274. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  1275. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
  1276. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +156 -15
  1277. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  1278. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +11 -8
  1279. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  1280. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  1281. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +1 -0
  1282. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +4 -0
  1283. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +4 -0
  1284. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/is_fips.c → rand_extra/passive.c} +16 -11
  1285. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +5 -1
  1286. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +4 -0
  1287. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  1288. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  1289. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  1290. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  1291. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +15 -11
  1292. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +1 -1
  1293. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -0
  1294. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  1295. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +345 -13
  1296. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  1297. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +20 -5
  1298. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +10 -5
  1299. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  1300. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  1301. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +7 -2
  1302. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +24 -47
  1303. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +4 -31
  1304. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +12 -9
  1305. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +1 -5
  1306. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  1307. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
  1308. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +17 -24
  1309. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
  1310. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +26 -23
  1311. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +25 -69
  1312. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +54 -74
  1313. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +61 -23
  1314. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  1315. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  1316. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -19
  1317. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -16
  1318. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
  1319. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +15 -13
  1320. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +2 -0
  1321. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +23 -21
  1322. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  1323. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  1324. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  1325. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
  1326. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  1327. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +50 -14
  1328. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +5 -2
  1329. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +23 -0
  1330. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
  1331. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  1332. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
  1333. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
  1334. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
  1335. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +27 -8
  1336. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +28 -18
  1337. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +6 -3
  1338. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +26 -25
  1339. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +10 -12
  1340. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -2
  1341. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +7 -1
  1342. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
  1343. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  1344. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +27 -36
  1345. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  1346. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  1347. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -13
  1348. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +2 -2
  1349. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +7 -6
  1350. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +86 -44
  1351. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
  1352. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +69 -4
  1353. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1026 -615
  1354. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -176
  1355. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +63 -13
  1356. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  1357. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  1358. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  1359. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +32 -7
  1360. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  1361. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +23 -6
  1362. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
  1363. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  1364. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  1365. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
  1366. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +10 -2
  1367. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +20 -2
  1368. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
  1369. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  1370. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +38 -51
  1371. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  1372. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  1373. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +350 -0
  1374. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +14 -12
  1375. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +4 -205
  1376. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +12 -3
  1377. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +26 -6
  1378. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  1379. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +33 -8
  1380. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  1381. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +5 -2
  1382. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +104 -63
  1383. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +39 -16
  1384. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +406 -108
  1385. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +48 -36
  1386. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1425 -377
  1387. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -679
  1388. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +188 -49
  1389. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +16 -18
  1390. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  1391. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1084 -0
  1392. data/third_party/boringssl-with-bazel/src/ssl/{t1_lib.cc → extensions.cc} +847 -622
  1393. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
  1394. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +92 -44
  1395. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +314 -217
  1396. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +177 -35
  1397. data/third_party/boringssl-with-bazel/src/ssl/internal.h +491 -152
  1398. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  1399. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -2
  1400. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  1401. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
  1402. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  1403. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  1404. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +34 -31
  1405. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +60 -112
  1406. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  1407. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +136 -104
  1408. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  1409. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +12 -17
  1410. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
  1411. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +28 -23
  1412. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
  1413. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +79 -34
  1414. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +235 -178
  1415. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +160 -91
  1416. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +269 -118
  1417. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  1418. data/third_party/re2/re2/compile.cc +91 -109
  1419. data/third_party/re2/re2/dfa.cc +27 -39
  1420. data/third_party/re2/re2/filtered_re2.cc +18 -2
  1421. data/third_party/re2/re2/filtered_re2.h +10 -5
  1422. data/third_party/re2/re2/nfa.cc +1 -1
  1423. data/third_party/re2/re2/parse.cc +42 -23
  1424. data/third_party/re2/re2/perl_groups.cc +34 -34
  1425. data/third_party/re2/re2/prefilter.cc +3 -2
  1426. data/third_party/re2/re2/prog.cc +182 -4
  1427. data/third_party/re2/re2/prog.h +28 -9
  1428. data/third_party/re2/re2/re2.cc +87 -118
  1429. data/third_party/re2/re2/re2.h +156 -141
  1430. data/third_party/re2/re2/regexp.cc +12 -5
  1431. data/third_party/re2/re2/regexp.h +8 -2
  1432. data/third_party/re2/re2/set.cc +31 -9
  1433. data/third_party/re2/re2/set.h +9 -4
  1434. data/third_party/re2/re2/simplify.cc +11 -3
  1435. data/third_party/re2/re2/tostring.cc +1 -1
  1436. data/third_party/re2/re2/walker-inl.h +1 -1
  1437. data/third_party/re2/util/mutex.h +2 -2
  1438. data/third_party/re2/util/pcre.h +3 -3
  1439. data/third_party/upb/upb/decode.c +354 -204
  1440. data/third_party/upb/upb/decode.h +50 -3
  1441. data/third_party/upb/upb/decode_fast.c +1053 -0
  1442. data/third_party/upb/upb/decode_fast.h +153 -0
  1443. data/third_party/upb/upb/decode_internal.h +193 -0
  1444. data/third_party/upb/upb/def.c +609 -610
  1445. data/third_party/upb/upb/def.h +57 -50
  1446. data/third_party/upb/upb/def.hpp +66 -123
  1447. data/third_party/upb/upb/encode.c +267 -176
  1448. data/third_party/upb/upb/encode.h +56 -4
  1449. data/third_party/upb/upb/msg.c +304 -84
  1450. data/third_party/upb/upb/msg.h +76 -441
  1451. data/third_party/upb/upb/msg_internal.h +687 -0
  1452. data/third_party/upb/upb/port_def.inc +156 -82
  1453. data/third_party/upb/upb/port_undef.inc +41 -8
  1454. data/third_party/upb/upb/reflection.c +64 -55
  1455. data/third_party/upb/upb/reflection.h +36 -8
  1456. data/third_party/upb/upb/reflection.hpp +37 -0
  1457. data/third_party/upb/upb/table.c +238 -276
  1458. data/third_party/upb/upb/{table.int.h → table_internal.h} +66 -181
  1459. data/third_party/upb/upb/text_encode.c +77 -26
  1460. data/third_party/upb/upb/text_encode.h +30 -1
  1461. data/third_party/upb/upb/upb.c +75 -47
  1462. data/third_party/upb/upb/upb.h +72 -13
  1463. data/third_party/upb/upb/upb.hpp +28 -4
  1464. data/third_party/upb/upb/upb_internal.h +58 -0
  1465. data/third_party/xxhash/xxhash.h +5325 -0
  1466. metadata +287 -137
  1467. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -909
  1468. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
  1469. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +0 -179
  1470. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  1471. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +0 -38
  1472. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -355
  1473. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -138
  1474. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -210
  1475. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  1476. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  1477. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  1478. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  1479. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +0 -242
  1480. data/src/core/ext/transport/chttp2/transport/hpack_table.h +0 -148
  1481. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  1482. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  1483. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +0 -28
  1484. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -53
  1485. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
  1486. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -129
  1487. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
  1488. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -77
  1489. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +0 -36
  1490. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -85
  1491. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
  1492. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -160
  1493. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
  1494. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -84
  1495. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  1496. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -117
  1497. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
  1498. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
  1499. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
  1500. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
  1501. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
  1502. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
  1503. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
  1504. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
  1505. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
  1506. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
  1507. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
  1508. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
  1509. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +0 -265
  1510. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +0 -104
  1511. data/src/core/lib/gpr/arena.h +0 -47
  1512. data/src/core/lib/gpr/tls_gcc.h +0 -52
  1513. data/src/core/lib/gpr/tls_msvc.h +0 -54
  1514. data/src/core/lib/gpr/tls_pthread.h +0 -56
  1515. data/src/core/lib/gpr/tls_stdcpp.h +0 -48
  1516. data/src/core/lib/gprpp/atomic.h +0 -104
  1517. data/src/core/lib/gprpp/map.h +0 -53
  1518. data/src/core/lib/iomgr/endpoint_pair_uv.cc +0 -40
  1519. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  1520. data/src/core/lib/iomgr/iomgr_uv.cc +0 -43
  1521. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  1522. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  1523. data/src/core/lib/iomgr/pollset_uv.cc +0 -93
  1524. data/src/core/lib/iomgr/pollset_uv.h +0 -32
  1525. data/src/core/lib/iomgr/sockaddr_custom.h +0 -54
  1526. data/src/core/lib/iomgr/socket_utils_uv.cc +0 -49
  1527. data/src/core/lib/iomgr/tcp_uv.cc +0 -419
  1528. data/src/core/lib/iomgr/timer_uv.cc +0 -66
  1529. data/src/core/lib/iomgr/udp_server.cc +0 -748
  1530. data/src/core/lib/iomgr/udp_server.h +0 -104
  1531. data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
  1532. data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
  1533. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
  1534. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
  1535. data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
  1536. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
  1537. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
  1538. data/src/core/lib/transport/authority_override.cc +0 -38
  1539. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  1540. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
  1541. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  1542. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +0 -104
  1543. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -237
  1544. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
  1545. data/third_party/upb/upb/port.c +0 -26
@@ -1,12 +1,42 @@
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" AND
17
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
+ * DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY
20
+ * DIRECT, 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
+ */
1
27
 
2
28
  #include "upb/def.h"
3
29
 
4
30
  #include <ctype.h>
5
31
  #include <errno.h>
32
+ #include <setjmp.h>
6
33
  #include <stdlib.h>
7
34
  #include <string.h>
35
+
8
36
  #include "google/protobuf/descriptor.upb.h"
37
+ #include "upb/reflection.h"
9
38
 
39
+ /* Must be last. */
10
40
  #include "upb/port_def.inc"
11
41
 
12
42
  typedef struct {
@@ -14,15 +44,6 @@ typedef struct {
14
44
  char str[1]; /* Null-terminated string data follows. */
15
45
  } str_t;
16
46
 
17
- static str_t *newstr(upb_alloc *alloc, const char *data, size_t len) {
18
- str_t *ret = upb_malloc(alloc, sizeof(*ret) + len);
19
- if (!ret) return NULL;
20
- ret->len = len;
21
- if (len) memcpy(ret->str, data, len);
22
- ret->str[len] = '\0';
23
- return ret;
24
- }
25
-
26
47
  struct upb_fielddef {
27
48
  const upb_filedef *file;
28
49
  const upb_msgdef *msgdef;
@@ -45,7 +66,6 @@ struct upb_fielddef {
45
66
  uint32_t number_;
46
67
  uint16_t index_;
47
68
  uint16_t layout_index;
48
- uint32_t selector_base; /* Used to index into a upb::Handlers table. */
49
69
  bool is_extension_;
50
70
  bool lazy_;
51
71
  bool packed_;
@@ -58,8 +78,6 @@ struct upb_msgdef {
58
78
  const upb_msglayout *layout;
59
79
  const upb_filedef *file;
60
80
  const char *full_name;
61
- uint32_t selector_count;
62
- uint32_t submsg_field_count;
63
81
 
64
82
  /* Tables for looking up fields by number and name. */
65
83
  upb_inttable itof;
@@ -89,7 +107,9 @@ struct upb_enumdef {
89
107
  struct upb_oneofdef {
90
108
  const upb_msgdef *parent;
91
109
  const char *full_name;
92
- uint32_t index;
110
+ int field_count;
111
+ bool synthetic;
112
+ const upb_fielddef **fields;
93
113
  upb_strtable ntof;
94
114
  upb_inttable itof;
95
115
  };
@@ -99,23 +119,25 @@ struct upb_filedef {
99
119
  const char *package;
100
120
  const char *phpprefix;
101
121
  const char *phpnamespace;
102
- upb_syntax_t syntax;
103
122
 
104
123
  const upb_filedef **deps;
105
124
  const upb_msgdef *msgs;
106
125
  const upb_enumdef *enums;
107
126
  const upb_fielddef *exts;
127
+ const upb_symtab *symtab;
108
128
 
109
129
  int dep_count;
110
130
  int msg_count;
111
131
  int enum_count;
112
132
  int ext_count;
133
+ upb_syntax_t syntax;
113
134
  };
114
135
 
115
136
  struct upb_symtab {
116
137
  upb_arena *arena;
117
138
  upb_strtable syms; /* full_name -> packed def ptr */
118
139
  upb_strtable files; /* file_name -> upb_filedef* */
140
+ size_t bytes_loaded;
119
141
  };
120
142
 
121
143
  /* Inside a symtab we store tagged pointers to specific def types. */
@@ -154,38 +176,6 @@ static bool upb_isalphanum(char c) {
154
176
  return upb_isletter(c) || upb_isbetween(c, '0', '9');
155
177
  }
156
178
 
157
- static bool upb_isident(upb_strview name, bool full, upb_status *s) {
158
- const char *str = name.data;
159
- size_t len = name.size;
160
- bool start = true;
161
- size_t i;
162
- for (i = 0; i < len; i++) {
163
- char c = str[i];
164
- if (c == '.') {
165
- if (start || !full) {
166
- upb_status_seterrf(s, "invalid name: unexpected '.' (%s)", str);
167
- return false;
168
- }
169
- start = true;
170
- } else if (start) {
171
- if (!upb_isletter(c)) {
172
- upb_status_seterrf(
173
- s, "invalid name: path components must start with a letter (%s)",
174
- str);
175
- return false;
176
- }
177
- start = false;
178
- } else {
179
- if (!upb_isalphanum(c)) {
180
- upb_status_seterrf(s, "invalid name: non-alphanumeric character (%s)",
181
- str);
182
- return false;
183
- }
184
- }
185
- }
186
- return !start;
187
- }
188
-
189
179
  static const char *shortdefname(const char *fullname) {
190
180
  const char *p;
191
181
 
@@ -217,113 +207,10 @@ int cmp_fields(const void *p1, const void *p2) {
217
207
  return field_rank(f1) - field_rank(f2);
218
208
  }
219
209
 
220
- /* A few implementation details of handlers. We put these here to avoid
221
- * a def -> handlers dependency. */
222
-
223
- #define UPB_STATIC_SELECTOR_COUNT 3 /* Warning: also in upb/handlers.h. */
224
-
225
- static uint32_t upb_handlers_selectorbaseoffset(const upb_fielddef *f) {
226
- return upb_fielddef_isseq(f) ? 2 : 0;
227
- }
228
-
229
- static uint32_t upb_handlers_selectorcount(const upb_fielddef *f) {
230
- uint32_t ret = 1;
231
- if (upb_fielddef_isseq(f)) ret += 2; /* STARTSEQ/ENDSEQ */
232
- if (upb_fielddef_isstring(f)) ret += 2; /* [STRING]/STARTSTR/ENDSTR */
233
- if (upb_fielddef_issubmsg(f)) {
234
- /* ENDSUBMSG (STARTSUBMSG is at table beginning) */
235
- ret += 0;
236
- if (upb_fielddef_lazy(f)) {
237
- /* STARTSTR/ENDSTR/STRING (for lazy) */
238
- ret += 3;
239
- }
240
- }
241
- return ret;
242
- }
243
-
244
210
  static void upb_status_setoom(upb_status *status) {
245
211
  upb_status_seterrmsg(status, "out of memory");
246
212
  }
247
213
 
248
- static bool assign_msg_indices(upb_msgdef *m, upb_status *s) {
249
- /* Sort fields. upb internally relies on UPB_TYPE_MESSAGE fields having the
250
- * lowest indexes, but we do not publicly guarantee this. */
251
- upb_msg_field_iter j;
252
- int i;
253
- uint32_t selector;
254
- int n = upb_msgdef_numfields(m);
255
- upb_fielddef **fields;
256
-
257
- if (n == 0) {
258
- m->selector_count = UPB_STATIC_SELECTOR_COUNT;
259
- m->submsg_field_count = 0;
260
- return true;
261
- }
262
-
263
- fields = upb_gmalloc(n * sizeof(*fields));
264
- if (!fields) {
265
- upb_status_setoom(s);
266
- return false;
267
- }
268
-
269
- m->submsg_field_count = 0;
270
- for(i = 0, upb_msg_field_begin(&j, m);
271
- !upb_msg_field_done(&j);
272
- upb_msg_field_next(&j), i++) {
273
- upb_fielddef *f = upb_msg_iter_field(&j);
274
- UPB_ASSERT(f->msgdef == m);
275
- if (upb_fielddef_issubmsg(f)) {
276
- m->submsg_field_count++;
277
- }
278
- fields[i] = f;
279
- }
280
-
281
- qsort(fields, n, sizeof(*fields), cmp_fields);
282
-
283
- selector = UPB_STATIC_SELECTOR_COUNT + m->submsg_field_count;
284
- for (i = 0; i < n; i++) {
285
- upb_fielddef *f = fields[i];
286
- f->index_ = i;
287
- f->selector_base = selector + upb_handlers_selectorbaseoffset(f);
288
- selector += upb_handlers_selectorcount(f);
289
- }
290
- m->selector_count = selector;
291
-
292
- upb_gfree(fields);
293
- return true;
294
- }
295
-
296
- static bool check_oneofs(upb_msgdef *m, upb_status *s) {
297
- int i;
298
- int first_synthetic = -1;
299
- upb_oneofdef *mutable_oneofs = (upb_oneofdef*)m->oneofs;
300
-
301
- for (i = 0; i < m->oneof_count; i++) {
302
- mutable_oneofs[i].index = i;
303
-
304
- if (upb_oneofdef_issynthetic(&mutable_oneofs[i])) {
305
- if (first_synthetic == -1) {
306
- first_synthetic = i;
307
- }
308
- } else {
309
- if (first_synthetic != -1) {
310
- upb_status_seterrf(
311
- s, "Synthetic oneofs must be after all other oneofs: %s",
312
- upb_oneofdef_name(&mutable_oneofs[i]));
313
- return false;
314
- }
315
- }
316
- }
317
-
318
- if (first_synthetic == -1) {
319
- m->real_oneof_count = m->oneof_count;
320
- } else {
321
- m->real_oneof_count = first_synthetic;
322
- }
323
-
324
- return true;
325
- }
326
-
327
214
  static void assign_msg_wellknowntype(upb_msgdef *m) {
328
215
  const char *name = upb_msgdef_fullname(m);
329
216
  if (name == NULL) {
@@ -411,8 +298,7 @@ bool upb_enumdef_ntoi(const upb_enumdef *def, const char *name,
411
298
 
412
299
  const char *upb_enumdef_iton(const upb_enumdef *def, int32_t num) {
413
300
  upb_value v;
414
- return upb_inttable_lookup32(&def->iton, num, &v) ?
415
- upb_value_getcstr(v) : NULL;
301
+ return upb_inttable_lookup(&def->iton, num, &v) ? upb_value_getcstr(v) : NULL;
416
302
  }
417
303
 
418
304
  const char *upb_enum_iter_name(upb_enum_iter *iter) {
@@ -501,10 +387,6 @@ const char *upb_fielddef_jsonname(const upb_fielddef *f) {
501
387
  return f->json_name;
502
388
  }
503
389
 
504
- uint32_t upb_fielddef_selectorbase(const upb_fielddef *f) {
505
- return f->selector_base;
506
- }
507
-
508
390
  const upb_filedef *upb_fielddef_file(const upb_fielddef *f) {
509
391
  return f->file;
510
392
  }
@@ -522,6 +404,23 @@ const upb_oneofdef *upb_fielddef_realcontainingoneof(const upb_fielddef *f) {
522
404
  return f->oneof;
523
405
  }
524
406
 
407
+ upb_msgval upb_fielddef_default(const upb_fielddef *f) {
408
+ UPB_ASSERT(!upb_fielddef_issubmsg(f));
409
+ upb_msgval ret;
410
+ if (upb_fielddef_isstring(f)) {
411
+ str_t *str = f->defaultval.str;
412
+ if (str) {
413
+ ret.str_val.data = str->str;
414
+ ret.str_val.size = str->len;
415
+ } else {
416
+ ret.str_val.size = 0;
417
+ }
418
+ } else {
419
+ memcpy(&ret, &f->defaultval, 8);
420
+ }
421
+ return ret;
422
+ }
423
+
525
424
  static void chkdefaulttype(const upb_fielddef *f, int ctype) {
526
425
  UPB_UNUSED(f);
527
426
  UPB_UNUSED(ctype);
@@ -650,18 +549,10 @@ upb_syntax_t upb_msgdef_syntax(const upb_msgdef *m) {
650
549
  return m->file->syntax;
651
550
  }
652
551
 
653
- size_t upb_msgdef_selectorcount(const upb_msgdef *m) {
654
- return m->selector_count;
655
- }
656
-
657
- uint32_t upb_msgdef_submsgfieldcount(const upb_msgdef *m) {
658
- return m->submsg_field_count;
659
- }
660
-
661
552
  const upb_fielddef *upb_msgdef_itof(const upb_msgdef *m, uint32_t i) {
662
553
  upb_value val;
663
- return upb_inttable_lookup32(&m->itof, i, &val) ?
664
- upb_value_getconstptr(val) : NULL;
554
+ return upb_inttable_lookup(&m->itof, i, &val) ? upb_value_getconstptr(val)
555
+ : NULL;
665
556
  }
666
557
 
667
558
  const upb_fielddef *upb_msgdef_ntof(const upb_msgdef *m, const char *name,
@@ -726,15 +617,32 @@ int upb_msgdef_numrealoneofs(const upb_msgdef *m) {
726
617
  return m->real_oneof_count;
727
618
  }
728
619
 
620
+ int upb_msgdef_fieldcount(const upb_msgdef *m) {
621
+ return m->field_count;
622
+ }
623
+
624
+ int upb_msgdef_oneofcount(const upb_msgdef *m) {
625
+ return m->oneof_count;
626
+ }
627
+
628
+ int upb_msgdef_realoneofcount(const upb_msgdef *m) {
629
+ return m->real_oneof_count;
630
+ }
631
+
729
632
  const upb_msglayout *upb_msgdef_layout(const upb_msgdef *m) {
730
633
  return m->layout;
731
634
  }
732
635
 
733
- const upb_fielddef *_upb_msgdef_field(const upb_msgdef *m, int i) {
734
- if (i >= m->field_count) return NULL;
636
+ const upb_fielddef *upb_msgdef_field(const upb_msgdef *m, int i) {
637
+ UPB_ASSERT(i >= 0 && i < m->field_count);
735
638
  return &m->fields[i];
736
639
  }
737
640
 
641
+ const upb_oneofdef *upb_msgdef_oneof(const upb_msgdef *m, int i) {
642
+ UPB_ASSERT(i >= 0 && i < m->oneof_count);
643
+ return &m->oneofs[i];
644
+ }
645
+
738
646
  bool upb_msgdef_mapentry(const upb_msgdef *m) {
739
647
  return m->map_entry;
740
648
  }
@@ -822,22 +730,25 @@ const upb_msgdef *upb_oneofdef_containingtype(const upb_oneofdef *o) {
822
730
  return o->parent;
823
731
  }
824
732
 
733
+ int upb_oneofdef_fieldcount(const upb_oneofdef *o) {
734
+ return o->field_count;
735
+ }
736
+
737
+ const upb_fielddef *upb_oneofdef_field(const upb_oneofdef *o, int i) {
738
+ UPB_ASSERT(i < o->field_count);
739
+ return o->fields[i];
740
+ }
741
+
825
742
  int upb_oneofdef_numfields(const upb_oneofdef *o) {
826
- return (int)upb_strtable_count(&o->ntof);
743
+ return o->field_count;
827
744
  }
828
745
 
829
746
  uint32_t upb_oneofdef_index(const upb_oneofdef *o) {
830
- return o->index;
747
+ return o - o->parent->oneofs;
831
748
  }
832
749
 
833
750
  bool upb_oneofdef_issynthetic(const upb_oneofdef *o) {
834
- upb_inttable_iter iter;
835
- const upb_fielddef *f;
836
- upb_inttable_begin(&iter, &o->itof);
837
- if (upb_oneofdef_numfields(o) != 1) return false;
838
- f = upb_value_getptr(upb_inttable_iter_value(&iter));
839
- UPB_ASSERT(f);
840
- return f->proto3_optional_;
751
+ return o->synthetic;
841
752
  }
842
753
 
843
754
  const upb_fielddef *upb_oneofdef_ntof(const upb_oneofdef *o,
@@ -849,8 +760,8 @@ const upb_fielddef *upb_oneofdef_ntof(const upb_oneofdef *o,
849
760
 
850
761
  const upb_fielddef *upb_oneofdef_itof(const upb_oneofdef *o, uint32_t num) {
851
762
  upb_value val;
852
- return upb_inttable_lookup32(&o->itof, num, &val) ?
853
- upb_value_getptr(val) : NULL;
763
+ return upb_inttable_lookup(&o->itof, num, &val) ? upb_value_getptr(val)
764
+ : NULL;
854
765
  }
855
766
 
856
767
  void upb_oneof_begin(upb_oneof_iter *iter, const upb_oneofdef *o) {
@@ -873,7 +784,186 @@ void upb_oneof_iter_setdone(upb_oneof_iter *iter) {
873
784
  upb_inttable_iter_setdone(iter);
874
785
  }
875
786
 
876
- /* Dynamic Layout Generation. *************************************************/
787
+ /* upb_filedef ****************************************************************/
788
+
789
+ const char *upb_filedef_name(const upb_filedef *f) {
790
+ return f->name;
791
+ }
792
+
793
+ const char *upb_filedef_package(const upb_filedef *f) {
794
+ return f->package;
795
+ }
796
+
797
+ const char *upb_filedef_phpprefix(const upb_filedef *f) {
798
+ return f->phpprefix;
799
+ }
800
+
801
+ const char *upb_filedef_phpnamespace(const upb_filedef *f) {
802
+ return f->phpnamespace;
803
+ }
804
+
805
+ upb_syntax_t upb_filedef_syntax(const upb_filedef *f) {
806
+ return f->syntax;
807
+ }
808
+
809
+ int upb_filedef_msgcount(const upb_filedef *f) {
810
+ return f->msg_count;
811
+ }
812
+
813
+ int upb_filedef_depcount(const upb_filedef *f) {
814
+ return f->dep_count;
815
+ }
816
+
817
+ int upb_filedef_enumcount(const upb_filedef *f) {
818
+ return f->enum_count;
819
+ }
820
+
821
+ const upb_filedef *upb_filedef_dep(const upb_filedef *f, int i) {
822
+ return i < 0 || i >= f->dep_count ? NULL : f->deps[i];
823
+ }
824
+
825
+ const upb_msgdef *upb_filedef_msg(const upb_filedef *f, int i) {
826
+ return i < 0 || i >= f->msg_count ? NULL : &f->msgs[i];
827
+ }
828
+
829
+ const upb_enumdef *upb_filedef_enum(const upb_filedef *f, int i) {
830
+ return i < 0 || i >= f->enum_count ? NULL : &f->enums[i];
831
+ }
832
+
833
+ const upb_symtab *upb_filedef_symtab(const upb_filedef *f) {
834
+ return f->symtab;
835
+ }
836
+
837
+ void upb_symtab_free(upb_symtab *s) {
838
+ upb_arena_free(s->arena);
839
+ upb_gfree(s);
840
+ }
841
+
842
+ upb_symtab *upb_symtab_new(void) {
843
+ upb_symtab *s = upb_gmalloc(sizeof(*s));
844
+
845
+ if (!s) {
846
+ return NULL;
847
+ }
848
+
849
+ s->arena = upb_arena_new();
850
+ s->bytes_loaded = 0;
851
+
852
+ if (!upb_strtable_init(&s->syms, 32, s->arena) ||
853
+ !upb_strtable_init(&s->files, 4, s->arena)) {
854
+ upb_arena_free(s->arena);
855
+ upb_gfree(s);
856
+ s = NULL;
857
+ }
858
+ return s;
859
+ }
860
+
861
+ const upb_msgdef *upb_symtab_lookupmsg(const upb_symtab *s, const char *sym) {
862
+ upb_value v;
863
+ return upb_strtable_lookup(&s->syms, sym, &v) ?
864
+ unpack_def(v, UPB_DEFTYPE_MSG) : NULL;
865
+ }
866
+
867
+ const upb_msgdef *upb_symtab_lookupmsg2(const upb_symtab *s, const char *sym,
868
+ size_t len) {
869
+ upb_value v;
870
+ return upb_strtable_lookup2(&s->syms, sym, len, &v) ?
871
+ unpack_def(v, UPB_DEFTYPE_MSG) : NULL;
872
+ }
873
+
874
+ const upb_enumdef *upb_symtab_lookupenum(const upb_symtab *s, const char *sym) {
875
+ upb_value v;
876
+ return upb_strtable_lookup(&s->syms, sym, &v) ?
877
+ unpack_def(v, UPB_DEFTYPE_ENUM) : NULL;
878
+ }
879
+
880
+ const upb_filedef *upb_symtab_lookupfile(const upb_symtab *s, const char *name) {
881
+ upb_value v;
882
+ return upb_strtable_lookup(&s->files, name, &v) ? upb_value_getconstptr(v)
883
+ : NULL;
884
+ }
885
+
886
+ const upb_filedef *upb_symtab_lookupfile2(
887
+ const upb_symtab *s, const char *name, size_t len) {
888
+ upb_value v;
889
+ return upb_strtable_lookup2(&s->files, name, len, &v) ?
890
+ upb_value_getconstptr(v) : NULL;
891
+ }
892
+
893
+ int upb_symtab_filecount(const upb_symtab *s) {
894
+ return (int)upb_strtable_count(&s->files);
895
+ }
896
+
897
+ /* Code to build defs from descriptor protos. *********************************/
898
+
899
+ /* There is a question of how much validation to do here. It will be difficult
900
+ * to perfectly match the amount of validation performed by proto2. But since
901
+ * this code is used to directly build defs from Ruby (for example) we do need
902
+ * to validate important constraints like uniqueness of names and numbers. */
903
+
904
+ #define CHK_OOM(x) if (!(x)) { symtab_oomerr(ctx); }
905
+
906
+ typedef struct {
907
+ upb_symtab *symtab;
908
+ upb_filedef *file; /* File we are building. */
909
+ upb_arena *arena; /* Allocate defs here. */
910
+ const upb_msglayout **layouts; /* NULL if we should build layouts. */
911
+ upb_status *status; /* Record errors here. */
912
+ jmp_buf err; /* longjmp() on error. */
913
+ } symtab_addctx;
914
+
915
+ UPB_NORETURN UPB_NOINLINE UPB_PRINTF(2, 3)
916
+ static void symtab_errf(symtab_addctx *ctx, const char *fmt, ...) {
917
+ va_list argp;
918
+ va_start(argp, fmt);
919
+ upb_status_vseterrf(ctx->status, fmt, argp);
920
+ va_end(argp);
921
+ UPB_LONGJMP(ctx->err, 1);
922
+ }
923
+
924
+ UPB_NORETURN UPB_NOINLINE
925
+ static void symtab_oomerr(symtab_addctx *ctx) {
926
+ upb_status_setoom(ctx->status);
927
+ UPB_LONGJMP(ctx->err, 1);
928
+ }
929
+
930
+ void *symtab_alloc(symtab_addctx *ctx, size_t bytes) {
931
+ void *ret = upb_arena_malloc(ctx->arena, bytes);
932
+ if (!ret) symtab_oomerr(ctx);
933
+ return ret;
934
+ }
935
+
936
+ static void check_ident(symtab_addctx *ctx, upb_strview name, bool full) {
937
+ const char *str = name.data;
938
+ size_t len = name.size;
939
+ bool start = true;
940
+ size_t i;
941
+ for (i = 0; i < len; i++) {
942
+ char c = str[i];
943
+ if (c == '.') {
944
+ if (start || !full) {
945
+ symtab_errf(ctx, "invalid name: unexpected '.' (%.*s)", (int)len, str);
946
+ }
947
+ start = true;
948
+ } else if (start) {
949
+ if (!upb_isletter(c)) {
950
+ symtab_errf(
951
+ ctx,
952
+ "invalid name: path components must start with a letter (%.*s)",
953
+ (int)len, str);
954
+ }
955
+ start = false;
956
+ } else {
957
+ if (!upb_isalphanum(c)) {
958
+ symtab_errf(ctx, "invalid name: non-alphanumeric character (%.*s)",
959
+ (int)len, str);
960
+ }
961
+ }
962
+ }
963
+ if (start) {
964
+ symtab_errf(ctx, "invalid name: empty part (%.*s)", (int)len, str);
965
+ }
966
+ }
877
967
 
878
968
  static size_t div_round_up(size_t n, size_t d) {
879
969
  return (n + d - 1) / d;
@@ -928,42 +1018,80 @@ static int field_number_cmp(const void *p1, const void *p2) {
928
1018
  return f1->number - f2->number;
929
1019
  }
930
1020
 
931
- static void assign_layout_indices(const upb_msgdef *m, upb_msglayout_field *fields) {
1021
+ static void assign_layout_indices(const upb_msgdef *m, upb_msglayout *l,
1022
+ upb_msglayout_field *fields) {
932
1023
  int i;
933
1024
  int n = upb_msgdef_numfields(m);
1025
+ int dense_below = 0;
934
1026
  for (i = 0; i < n; i++) {
935
1027
  upb_fielddef *f = (upb_fielddef*)upb_msgdef_itof(m, fields[i].number);
936
1028
  UPB_ASSERT(f);
937
1029
  f->layout_index = i;
1030
+ if (i < UINT8_MAX && fields[i].number == i + 1 &&
1031
+ (i == 0 || fields[i-1].number == i)) {
1032
+ dense_below = i + 1;
1033
+ }
1034
+ }
1035
+ l->dense_below = dense_below;
1036
+ }
1037
+
1038
+ static void fill_fieldlayout(upb_msglayout_field *field, const upb_fielddef *f) {
1039
+ field->number = upb_fielddef_number(f);
1040
+ field->descriptortype = upb_fielddef_descriptortype(f);
1041
+
1042
+ if (field->descriptortype == UPB_DTYPE_STRING &&
1043
+ f->file->syntax == UPB_SYNTAX_PROTO2) {
1044
+ /* See TableDescriptorType() in upbc/generator.cc for details and
1045
+ * rationale. */
1046
+ field->descriptortype = UPB_DTYPE_BYTES;
1047
+ }
1048
+
1049
+ if (upb_fielddef_ismap(f)) {
1050
+ field->mode = _UPB_MODE_MAP;
1051
+ } else if (upb_fielddef_isseq(f)) {
1052
+ field->mode = _UPB_MODE_ARRAY;
1053
+ } else {
1054
+ field->mode = _UPB_MODE_SCALAR;
1055
+ }
1056
+
1057
+ if (upb_fielddef_packed(f)) {
1058
+ field->mode |= _UPB_MODE_IS_PACKED;
938
1059
  }
939
1060
  }
940
1061
 
941
1062
  /* This function is the dynamic equivalent of message_layout.{cc,h} in upbc.
942
1063
  * It computes a dynamic layout for all of the fields in |m|. */
943
- static bool make_layout(const upb_symtab *symtab, const upb_msgdef *m) {
1064
+ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
944
1065
  upb_msglayout *l = (upb_msglayout*)m->layout;
945
1066
  upb_msg_field_iter it;
946
1067
  upb_msg_oneof_iter oit;
947
1068
  size_t hasbit;
948
- size_t submsg_count = m->submsg_field_count;
1069
+ size_t field_count = upb_msgdef_numfields(m);
1070
+ size_t submsg_count = 0;
949
1071
  const upb_msglayout **submsgs;
950
1072
  upb_msglayout_field *fields;
951
- upb_alloc *alloc = upb_arena_alloc(symtab->arena);
952
1073
 
953
- memset(l, 0, sizeof(*l));
1074
+ memset(l, 0, sizeof(*l) + sizeof(_upb_fasttable_entry));
954
1075
 
955
- fields = upb_malloc(alloc, upb_msgdef_numfields(m) * sizeof(*fields));
956
- submsgs = upb_malloc(alloc, submsg_count * sizeof(*submsgs));
957
-
958
- if ((!fields && upb_msgdef_numfields(m)) ||
959
- (!submsgs && submsg_count)) {
960
- /* OOM. */
961
- return false;
1076
+ /* Count sub-messages. */
1077
+ for (size_t i = 0; i < field_count; i++) {
1078
+ if (upb_fielddef_issubmsg(&m->fields[i])) {
1079
+ submsg_count++;
1080
+ }
962
1081
  }
963
1082
 
1083
+ fields = symtab_alloc(ctx, field_count * sizeof(*fields));
1084
+ submsgs = symtab_alloc(ctx, submsg_count * sizeof(*submsgs));
1085
+
964
1086
  l->field_count = upb_msgdef_numfields(m);
965
1087
  l->fields = fields;
966
1088
  l->submsgs = submsgs;
1089
+ l->table_mask = 0;
1090
+
1091
+ /* TODO(haberman): initialize fast tables so that reflection-based parsing
1092
+ * can get the same speeds as linked-in types. */
1093
+ l->fasttable[0].field_parser = &fastdecode_generic;
1094
+ l->fasttable[0].field_data = 0;
967
1095
 
968
1096
  if (upb_msgdef_mapentry(m)) {
969
1097
  /* TODO(haberman): refactor this method so this special case is more
@@ -972,8 +1100,8 @@ static bool make_layout(const upb_symtab *symtab, const upb_msgdef *m) {
972
1100
  const upb_fielddef *val = upb_msgdef_itof(m, 2);
973
1101
  fields[0].number = 1;
974
1102
  fields[1].number = 2;
975
- fields[0].label = UPB_LABEL_OPTIONAL;
976
- fields[1].label = UPB_LABEL_OPTIONAL;
1103
+ fields[0].mode = _UPB_MODE_SCALAR;
1104
+ fields[1].mode = _UPB_MODE_SCALAR;
977
1105
  fields[0].presence = 0;
978
1106
  fields[1].presence = 0;
979
1107
  fields[0].descriptortype = upb_fielddef_descriptortype(key);
@@ -989,7 +1117,7 @@ static bool make_layout(const upb_symtab *symtab, const upb_msgdef *m) {
989
1117
  l->field_count = 2;
990
1118
  l->size = 2 * sizeof(upb_strview);
991
1119
  l->size = UPB_ALIGN_UP(l->size, 8);
992
- return true;
1120
+ return;
993
1121
  }
994
1122
 
995
1123
  /* Allocate data offsets in three stages:
@@ -1009,22 +1137,7 @@ static bool make_layout(const upb_symtab *symtab, const upb_msgdef *m) {
1009
1137
  upb_fielddef* f = upb_msg_iter_field(&it);
1010
1138
  upb_msglayout_field *field = &fields[upb_fielddef_index(f)];
1011
1139
 
1012
- field->number = upb_fielddef_number(f);
1013
- field->descriptortype = upb_fielddef_descriptortype(f);
1014
- field->label = upb_fielddef_label(f);
1015
-
1016
- if (field->descriptortype == UPB_DTYPE_STRING &&
1017
- f->file->syntax == UPB_SYNTAX_PROTO2) {
1018
- /* See TableDescriptorType() in upbc/generator.cc for details and
1019
- * rationale. */
1020
- field->descriptortype = UPB_DTYPE_BYTES;
1021
- }
1022
-
1023
- if (upb_fielddef_ismap(f)) {
1024
- field->label = _UPB_LABEL_MAP;
1025
- } else if (upb_fielddef_packed(f)) {
1026
- field->label = _UPB_LABEL_PACKED;
1027
- }
1140
+ fill_fieldlayout(field, f);
1028
1141
 
1029
1142
  if (upb_fielddef_issubmsg(f)) {
1030
1143
  const upb_msgdef *subm = upb_fielddef_msgsubdef(f);
@@ -1100,33 +1213,11 @@ static bool make_layout(const upb_symtab *symtab, const upb_msgdef *m) {
1100
1213
 
1101
1214
  /* Sort fields by number. */
1102
1215
  qsort(fields, upb_msgdef_numfields(m), sizeof(*fields), field_number_cmp);
1103
- assign_layout_indices(m, fields);
1104
-
1105
- return true;
1216
+ assign_layout_indices(m, l, fields);
1106
1217
  }
1107
1218
 
1108
- /* Code to build defs from descriptor protos. *********************************/
1109
-
1110
- /* There is a question of how much validation to do here. It will be difficult
1111
- * to perfectly match the amount of validation performed by proto2. But since
1112
- * this code is used to directly build defs from Ruby (for example) we do need
1113
- * to validate important constraints like uniqueness of names and numbers. */
1114
-
1115
- #define CHK(x) if (!(x)) { return false; }
1116
- #define CHK_OOM(x) if (!(x)) { upb_status_setoom(ctx->status); return false; }
1117
-
1118
- typedef struct {
1119
- const upb_symtab *symtab;
1120
- upb_filedef *file; /* File we are building. */
1121
- upb_alloc *alloc; /* Allocate defs here. */
1122
- upb_alloc *tmp; /* Alloc for addtab and any other tmp data. */
1123
- upb_strtable *addtab; /* full_name -> packed def ptr for new defs */
1124
- const upb_msglayout **layouts; /* NULL if we should build layouts. */
1125
- upb_status *status; /* Record errors here. */
1126
- } symtab_addctx;
1127
-
1128
- static char* strviewdup(const symtab_addctx *ctx, upb_strview view) {
1129
- return upb_strdup2(view.data, view.size, ctx->alloc);
1219
+ static char *strviewdup(symtab_addctx *ctx, upb_strview view) {
1220
+ return upb_strdup2(view.data, view.size, ctx->arena);
1130
1221
  }
1131
1222
 
1132
1223
  static bool streql2(const char *a, size_t n, const char *b) {
@@ -1137,13 +1228,12 @@ static bool streql_view(upb_strview view, const char *b) {
1137
1228
  return streql2(view.data, view.size, b);
1138
1229
  }
1139
1230
 
1140
- static const char *makefullname(const symtab_addctx *ctx, const char *prefix,
1231
+ static const char *makefullname(symtab_addctx *ctx, const char *prefix,
1141
1232
  upb_strview name) {
1142
1233
  if (prefix) {
1143
1234
  /* ret = prefix + '.' + name; */
1144
1235
  size_t n = strlen(prefix);
1145
- char *ret = upb_malloc(ctx->alloc, n + name.size + 2);
1146
- CHK_OOM(ret);
1236
+ char *ret = symtab_alloc(ctx, n + name.size + 2);
1147
1237
  strcpy(ret, prefix);
1148
1238
  ret[n] = '.';
1149
1239
  memcpy(&ret[n + 1], name.data, name.size);
@@ -1154,6 +1244,41 @@ static const char *makefullname(const symtab_addctx *ctx, const char *prefix,
1154
1244
  }
1155
1245
  }
1156
1246
 
1247
+ static void finalize_oneofs(symtab_addctx *ctx, upb_msgdef *m) {
1248
+ int i;
1249
+ int synthetic_count = 0;
1250
+ upb_oneofdef *mutable_oneofs = (upb_oneofdef*)m->oneofs;
1251
+
1252
+ for (i = 0; i < m->oneof_count; i++) {
1253
+ upb_oneofdef *o = &mutable_oneofs[i];
1254
+
1255
+ if (o->synthetic && o->field_count != 1) {
1256
+ symtab_errf(ctx, "Synthetic oneofs must have one field, not %d: %s",
1257
+ o->field_count, upb_oneofdef_name(o));
1258
+ }
1259
+
1260
+ if (o->synthetic) {
1261
+ synthetic_count++;
1262
+ } else if (synthetic_count != 0) {
1263
+ symtab_errf(ctx, "Synthetic oneofs must be after all other oneofs: %s",
1264
+ upb_oneofdef_name(o));
1265
+ }
1266
+
1267
+ o->fields = symtab_alloc(ctx, sizeof(upb_fielddef *) * o->field_count);
1268
+ o->field_count = 0;
1269
+ }
1270
+
1271
+ for (i = 0; i < m->field_count; i++) {
1272
+ const upb_fielddef *f = &m->fields[i];
1273
+ upb_oneofdef *o = (upb_oneofdef*)f->oneof;
1274
+ if (o) {
1275
+ o->fields[o->field_count++] = f;
1276
+ }
1277
+ }
1278
+
1279
+ m->real_oneof_count = m->oneof_count - synthetic_count;
1280
+ }
1281
+
1157
1282
  size_t getjsonname(const char *name, char *buf, size_t len) {
1158
1283
  size_t src, dst = 0;
1159
1284
  bool ucase_next = false;
@@ -1192,76 +1317,58 @@ size_t getjsonname(const char *name, char *buf, size_t len) {
1192
1317
  #undef WRITE
1193
1318
  }
1194
1319
 
1195
- static char* makejsonname(const char* name, upb_alloc *alloc) {
1320
+ static char* makejsonname(symtab_addctx *ctx, const char* name) {
1196
1321
  size_t size = getjsonname(name, NULL, 0);
1197
- char* json_name = upb_malloc(alloc, size);
1322
+ char* json_name = symtab_alloc(ctx, size);
1198
1323
  getjsonname(name, json_name, size);
1199
1324
  return json_name;
1200
1325
  }
1201
1326
 
1202
- static bool symtab_add(const symtab_addctx *ctx, const char *name,
1203
- upb_value v) {
1204
- upb_value tmp;
1205
- if (upb_strtable_lookup(ctx->addtab, name, &tmp) ||
1206
- upb_strtable_lookup(&ctx->symtab->syms, name, &tmp)) {
1207
- upb_status_seterrf(ctx->status, "duplicate symbol '%s'", name);
1208
- return false;
1327
+ static void symtab_add(symtab_addctx *ctx, const char *name, upb_value v) {
1328
+ if (upb_strtable_lookup(&ctx->symtab->syms, name, NULL)) {
1329
+ symtab_errf(ctx, "duplicate symbol '%s'", name);
1209
1330
  }
1210
-
1211
- CHK_OOM(upb_strtable_insert3(ctx->addtab, name, strlen(name), v, ctx->tmp));
1212
- return true;
1331
+ size_t len = strlen(name);
1332
+ CHK_OOM(upb_strtable_insert(&ctx->symtab->syms, name, len, v,
1333
+ ctx->symtab->arena));
1213
1334
  }
1214
1335
 
1215
1336
  /* Given a symbol and the base symbol inside which it is defined, find the
1216
1337
  * symbol's definition in t. */
1217
- static bool resolvename(const upb_strtable *t, const upb_fielddef *f,
1218
- const char *base, upb_strview sym,
1219
- upb_deftype_t type, upb_status *status,
1220
- const void **def) {
1221
- if(sym.size == 0) return false;
1338
+ static const void *symtab_resolve(symtab_addctx *ctx, const upb_fielddef *f,
1339
+ const char *base, upb_strview sym,
1340
+ upb_deftype_t type) {
1341
+ const upb_strtable *t = &ctx->symtab->syms;
1342
+ if(sym.size == 0) goto notfound;
1222
1343
  if(sym.data[0] == '.') {
1223
1344
  /* Symbols starting with '.' are absolute, so we do a single lookup.
1224
1345
  * Slice to omit the leading '.' */
1225
1346
  upb_value v;
1226
1347
  if (!upb_strtable_lookup2(t, sym.data + 1, sym.size - 1, &v)) {
1227
- return false;
1348
+ goto notfound;
1228
1349
  }
1229
1350
 
1230
- *def = unpack_def(v, type);
1231
-
1232
- if (!*def) {
1233
- upb_status_seterrf(status,
1234
- "type mismatch when resolving field %s, name %s",
1235
- f->full_name, sym.data);
1236
- return false;
1351
+ const void *ret = unpack_def(v, type);
1352
+ if (!ret) {
1353
+ symtab_errf(ctx, "type mismatch when resolving field %s, name %s",
1354
+ f->full_name, sym.data);
1237
1355
  }
1238
-
1239
- return true;
1356
+ return ret;
1240
1357
  } else {
1241
1358
  /* Remove components from base until we find an entry or run out.
1242
1359
  * TODO: This branch is totally broken, but currently not used. */
1243
1360
  (void)base;
1244
1361
  UPB_ASSERT(false);
1245
- return false;
1362
+ goto notfound;
1246
1363
  }
1247
- }
1248
1364
 
1249
- const void *symtab_resolve(const symtab_addctx *ctx, const upb_fielddef *f,
1250
- const char *base, upb_strview sym,
1251
- upb_deftype_t type) {
1252
- const void *ret;
1253
- if (!resolvename(ctx->addtab, f, base, sym, type, ctx->status, &ret) &&
1254
- !resolvename(&ctx->symtab->syms, f, base, sym, type, ctx->status, &ret)) {
1255
- if (upb_ok(ctx->status)) {
1256
- upb_status_seterrf(ctx->status, "couldn't resolve name '%s'", sym.data);
1257
- }
1258
- return false;
1259
- }
1260
- return ret;
1365
+ notfound:
1366
+ symtab_errf(ctx, "couldn't resolve name '" UPB_STRVIEW_FORMAT "'",
1367
+ UPB_STRVIEW_ARGS(sym));
1261
1368
  }
1262
1369
 
1263
- static bool create_oneofdef(
1264
- const symtab_addctx *ctx, upb_msgdef *m,
1370
+ static void create_oneofdef(
1371
+ symtab_addctx *ctx, upb_msgdef *m,
1265
1372
  const google_protobuf_OneofDescriptorProto *oneof_proto) {
1266
1373
  upb_oneofdef *o;
1267
1374
  upb_strview name = google_protobuf_OneofDescriptorProto_name(oneof_proto);
@@ -1270,18 +1377,27 @@ static bool create_oneofdef(
1270
1377
  o = (upb_oneofdef*)&m->oneofs[m->oneof_count++];
1271
1378
  o->parent = m;
1272
1379
  o->full_name = makefullname(ctx, m->full_name, name);
1380
+ o->field_count = 0;
1381
+ o->synthetic = false;
1273
1382
 
1274
1383
  v = pack_def(o, UPB_DEFTYPE_ONEOF);
1275
- CHK_OOM(symtab_add(ctx, o->full_name, v));
1276
- CHK_OOM(upb_strtable_insert3(&m->ntof, name.data, name.size, v, ctx->alloc));
1384
+ symtab_add(ctx, o->full_name, v);
1385
+ CHK_OOM(upb_strtable_insert(&m->ntof, name.data, name.size, v, ctx->arena));
1277
1386
 
1278
- CHK_OOM(upb_inttable_init2(&o->itof, UPB_CTYPE_CONSTPTR, ctx->alloc));
1279
- CHK_OOM(upb_strtable_init2(&o->ntof, UPB_CTYPE_CONSTPTR, ctx->alloc));
1387
+ CHK_OOM(upb_inttable_init(&o->itof, ctx->arena));
1388
+ CHK_OOM(upb_strtable_init(&o->ntof, 4, ctx->arena));
1389
+ }
1280
1390
 
1281
- return true;
1391
+ static str_t *newstr(symtab_addctx *ctx, const char *data, size_t len) {
1392
+ str_t *ret = symtab_alloc(ctx, sizeof(*ret) + len);
1393
+ if (!ret) return NULL;
1394
+ ret->len = len;
1395
+ if (len) memcpy(ret->str, data, len);
1396
+ ret->str[len] = '\0';
1397
+ return ret;
1282
1398
  }
1283
1399
 
1284
- static bool parse_default(const symtab_addctx *ctx, const char *str, size_t len,
1400
+ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
1285
1401
  upb_fielddef *f) {
1286
1402
  char *end;
1287
1403
  char nullz[64];
@@ -1296,7 +1412,7 @@ static bool parse_default(const symtab_addctx *ctx, const char *str, size_t len,
1296
1412
  case UPB_TYPE_FLOAT:
1297
1413
  /* Standard C number parsing functions expect null-terminated strings. */
1298
1414
  if (len >= sizeof(nullz) - 1) {
1299
- return false;
1415
+ symtab_errf(ctx, "Default too long: %.*s", (int)len, str);
1300
1416
  }
1301
1417
  memcpy(nullz, str, len);
1302
1418
  nullz[len] = '\0';
@@ -1309,47 +1425,58 @@ static bool parse_default(const symtab_addctx *ctx, const char *str, size_t len,
1309
1425
  switch (upb_fielddef_type(f)) {
1310
1426
  case UPB_TYPE_INT32: {
1311
1427
  long val = strtol(str, &end, 0);
1312
- CHK(val <= INT32_MAX && val >= INT32_MIN && errno != ERANGE && !*end);
1428
+ if (val > INT32_MAX || val < INT32_MIN || errno == ERANGE || *end) {
1429
+ goto invalid;
1430
+ }
1313
1431
  f->defaultval.sint = val;
1314
1432
  break;
1315
1433
  }
1316
1434
  case UPB_TYPE_ENUM: {
1317
1435
  const upb_enumdef *e = f->sub.enumdef;
1318
1436
  int32_t val;
1319
- CHK(upb_enumdef_ntoi(e, str, len, &val));
1437
+ if (!upb_enumdef_ntoi(e, str, len, &val)) {
1438
+ goto invalid;
1439
+ }
1320
1440
  f->defaultval.sint = val;
1321
1441
  break;
1322
1442
  }
1323
1443
  case UPB_TYPE_INT64: {
1324
- /* XXX: Need to write our own strtoll, since it's not available in c89. */
1325
- int64_t val = strtol(str, &end, 0);
1326
- CHK(val <= INT64_MAX && val >= INT64_MIN && errno != ERANGE && !*end);
1444
+ long long val = strtoll(str, &end, 0);
1445
+ if (val > INT64_MAX || val < INT64_MIN || errno == ERANGE || *end) {
1446
+ goto invalid;
1447
+ }
1327
1448
  f->defaultval.sint = val;
1328
1449
  break;
1329
1450
  }
1330
1451
  case UPB_TYPE_UINT32: {
1331
1452
  unsigned long val = strtoul(str, &end, 0);
1332
- CHK(val <= UINT32_MAX && errno != ERANGE && !*end);
1453
+ if (val > UINT32_MAX || errno == ERANGE || *end) {
1454
+ goto invalid;
1455
+ }
1333
1456
  f->defaultval.uint = val;
1334
1457
  break;
1335
1458
  }
1336
1459
  case UPB_TYPE_UINT64: {
1337
- /* XXX: Need to write our own strtoull, since it's not available in c89. */
1338
- uint64_t val = strtoul(str, &end, 0);
1339
- CHK(val <= UINT64_MAX && errno != ERANGE && !*end);
1460
+ unsigned long long val = strtoull(str, &end, 0);
1461
+ if (val > UINT64_MAX || errno == ERANGE || *end) {
1462
+ goto invalid;
1463
+ }
1340
1464
  f->defaultval.uint = val;
1341
1465
  break;
1342
1466
  }
1343
1467
  case UPB_TYPE_DOUBLE: {
1344
1468
  double val = strtod(str, &end);
1345
- CHK(errno != ERANGE && !*end);
1469
+ if (errno == ERANGE || *end) {
1470
+ goto invalid;
1471
+ }
1346
1472
  f->defaultval.dbl = val;
1347
1473
  break;
1348
1474
  }
1349
1475
  case UPB_TYPE_FLOAT: {
1350
- /* XXX: Need to write our own strtof, since it's not available in c89. */
1351
- float val = strtod(str, &end);
1352
- CHK(errno != ERANGE && !*end);
1476
+ float val = strtof(str, &end);
1477
+ if (errno == ERANGE || *end) {
1478
+ goto invalid;
1479
+ }
1353
1480
  f->defaultval.flt = val;
1354
1481
  break;
1355
1482
  }
@@ -1359,25 +1486,30 @@ static bool parse_default(const symtab_addctx *ctx, const char *str, size_t len,
1359
1486
  } else if (streql2(str, len, "true")) {
1360
1487
  f->defaultval.boolean = true;
1361
1488
  } else {
1362
- return false;
1363
1489
  }
1364
1490
  break;
1365
1491
  }
1366
1492
  case UPB_TYPE_STRING:
1367
- f->defaultval.str = newstr(ctx->alloc, str, len);
1493
+ f->defaultval.str = newstr(ctx, str, len);
1368
1494
  break;
1369
1495
  case UPB_TYPE_BYTES:
1370
1496
  /* XXX: need to interpret the C-escaped value. */
1371
- f->defaultval.str = newstr(ctx->alloc, str, len);
1497
+ f->defaultval.str = newstr(ctx, str, len);
1372
1498
  break;
1373
1499
  case UPB_TYPE_MESSAGE:
1374
1500
  /* Should not have a default value. */
1375
- return false;
1501
+ symtab_errf(ctx, "Message should not have a default (%s)",
1502
+ upb_fielddef_fullname(f));
1376
1503
  }
1377
- return true;
1504
+
1505
+ return;
1506
+
1507
+ invalid:
1508
+ symtab_errf(ctx, "Invalid default '%.*s' for field %s", (int)len, str,
1509
+ upb_fielddef_fullname(f));
1378
1510
  }
1379
1511
 
1380
- static void set_default_default(const symtab_addctx *ctx, upb_fielddef *f) {
1512
+ static void set_default_default(symtab_addctx *ctx, upb_fielddef *f) {
1381
1513
  switch (upb_fielddef_type(f)) {
1382
1514
  case UPB_TYPE_INT32:
1383
1515
  case UPB_TYPE_INT64:
@@ -1394,7 +1526,7 @@ static void set_default_default(const symtab_addctx *ctx, upb_fielddef *f) {
1394
1526
  break;
1395
1527
  case UPB_TYPE_STRING:
1396
1528
  case UPB_TYPE_BYTES:
1397
- f->defaultval.str = newstr(ctx->alloc, NULL, 0);
1529
+ f->defaultval.str = newstr(ctx, NULL, 0);
1398
1530
  break;
1399
1531
  case UPB_TYPE_BOOL:
1400
1532
  f->defaultval.boolean = false;
@@ -1404,10 +1536,9 @@ static void set_default_default(const symtab_addctx *ctx, upb_fielddef *f) {
1404
1536
  }
1405
1537
  }
1406
1538
 
1407
- static bool create_fielddef(
1408
- const symtab_addctx *ctx, const char *prefix, upb_msgdef *m,
1539
+ static void create_fielddef(
1540
+ symtab_addctx *ctx, const char *prefix, upb_msgdef *m,
1409
1541
  const google_protobuf_FieldDescriptorProto *field_proto) {
1410
- upb_alloc *alloc = ctx->alloc;
1411
1542
  upb_fielddef *f;
1412
1543
  const google_protobuf_FieldOptions *options;
1413
1544
  upb_strview name;
@@ -1417,12 +1548,11 @@ static bool create_fielddef(
1417
1548
  uint32_t field_number;
1418
1549
 
1419
1550
  if (!google_protobuf_FieldDescriptorProto_has_name(field_proto)) {
1420
- upb_status_seterrmsg(ctx->status, "field has no name");
1421
- return false;
1551
+ symtab_errf(ctx, "field has no name (%s)", upb_msgdef_fullname(m));
1422
1552
  }
1423
1553
 
1424
1554
  name = google_protobuf_FieldDescriptorProto_name(field_proto);
1425
- CHK(upb_isident(name, false, ctx->status));
1555
+ check_ident(ctx, name, false);
1426
1556
  full_name = makefullname(ctx, prefix, name);
1427
1557
  shortname = shortdefname(full_name);
1428
1558
 
@@ -1430,14 +1560,13 @@ static bool create_fielddef(
1430
1560
  json_name = strviewdup(
1431
1561
  ctx, google_protobuf_FieldDescriptorProto_json_name(field_proto));
1432
1562
  } else {
1433
- json_name = makejsonname(shortname, ctx->alloc);
1563
+ json_name = makejsonname(ctx, shortname);
1434
1564
  }
1435
1565
 
1436
1566
  field_number = google_protobuf_FieldDescriptorProto_number(field_proto);
1437
1567
 
1438
1568
  if (field_number == 0 || field_number > UPB_MAX_FIELDNUMBER) {
1439
- upb_status_seterrf(ctx->status, "invalid field number (%u)", field_number);
1440
- return false;
1569
+ symtab_errf(ctx, "invalid field number (%u)", field_number);
1441
1570
  }
1442
1571
 
1443
1572
  if (m) {
@@ -1445,24 +1574,21 @@ static bool create_fielddef(
1445
1574
  upb_value v, field_v, json_v;
1446
1575
  size_t json_size;
1447
1576
 
1448
- f = (upb_fielddef*)&m->fields[m->field_count++];
1577
+ f = (upb_fielddef*)&m->fields[m->field_count];
1578
+ f->index_ = m->field_count++;
1449
1579
  f->msgdef = m;
1450
1580
  f->is_extension_ = false;
1451
1581
 
1452
1582
  if (upb_strtable_lookup(&m->ntof, shortname, NULL)) {
1453
- upb_status_seterrf(ctx->status, "duplicate field name (%s)", shortname);
1454
- return false;
1583
+ symtab_errf(ctx, "duplicate field name (%s)", shortname);
1455
1584
  }
1456
1585
 
1457
1586
  if (upb_strtable_lookup(&m->ntof, json_name, NULL)) {
1458
- upb_status_seterrf(ctx->status, "duplicate json_name (%s)", json_name);
1459
- return false;
1587
+ symtab_errf(ctx, "duplicate json_name (%s)", json_name);
1460
1588
  }
1461
1589
 
1462
1590
  if (upb_inttable_lookup(&m->itof, field_number, NULL)) {
1463
- upb_status_seterrf(ctx->status, "duplicate field number (%u)",
1464
- field_number);
1465
- return false;
1591
+ symtab_errf(ctx, "duplicate field number (%u)", field_number);
1466
1592
  }
1467
1593
 
1468
1594
  field_v = pack_def(f, UPB_DEFTYPE_FIELD);
@@ -1470,12 +1596,12 @@ static bool create_fielddef(
1470
1596
  v = upb_value_constptr(f);
1471
1597
  json_size = strlen(json_name);
1472
1598
 
1473
- CHK_OOM(
1474
- upb_strtable_insert3(&m->ntof, name.data, name.size, field_v, alloc));
1475
- CHK_OOM(upb_inttable_insert2(&m->itof, field_number, v, alloc));
1599
+ CHK_OOM(upb_strtable_insert(&m->ntof, name.data, name.size, field_v,
1600
+ ctx->arena));
1601
+ CHK_OOM(upb_inttable_insert(&m->itof, field_number, v, ctx->arena));
1476
1602
 
1477
1603
  if (strcmp(shortname, json_name) != 0) {
1478
- upb_strtable_insert3(&m->ntof, json_name, json_size, json_v, alloc);
1604
+ upb_strtable_insert(&m->ntof, json_name, json_size, json_v, ctx->arena);
1479
1605
  }
1480
1606
 
1481
1607
  if (ctx->layouts) {
@@ -1496,7 +1622,7 @@ static bool create_fielddef(
1496
1622
  /* extension field. */
1497
1623
  f = (upb_fielddef*)&ctx->file->exts[ctx->file->ext_count++];
1498
1624
  f->is_extension_ = true;
1499
- CHK_OOM(symtab_add(ctx, full_name, pack_def(f, UPB_DEFTYPE_FIELD)));
1625
+ symtab_add(ctx, full_name, pack_def(f, UPB_DEFTYPE_FIELD));
1500
1626
  }
1501
1627
 
1502
1628
  f->full_name = full_name;
@@ -1515,9 +1641,7 @@ static bool create_fielddef(
1515
1641
  f->sub.unresolved = field_proto;
1516
1642
 
1517
1643
  if (f->label_ == UPB_LABEL_REQUIRED && f->file->syntax == UPB_SYNTAX_PROTO3) {
1518
- upb_status_seterrf(ctx->status, "proto3 fields cannot be required (%s)",
1519
- f->full_name);
1520
- return false;
1644
+ symtab_errf(ctx, "proto3 fields cannot be required (%s)", f->full_name);
1521
1645
  }
1522
1646
 
1523
1647
  if (google_protobuf_FieldDescriptorProto_has_oneof_index(field_proto)) {
@@ -1527,32 +1651,35 @@ static bool create_fielddef(
1527
1651
  upb_value v = upb_value_constptr(f);
1528
1652
 
1529
1653
  if (upb_fielddef_label(f) != UPB_LABEL_OPTIONAL) {
1530
- upb_status_seterrf(ctx->status,
1531
- "fields in oneof must have OPTIONAL label (%s)",
1532
- f->full_name);
1533
- return false;
1654
+ symtab_errf(ctx, "fields in oneof must have OPTIONAL label (%s)",
1655
+ f->full_name);
1534
1656
  }
1535
1657
 
1536
1658
  if (!m) {
1537
- upb_status_seterrf(ctx->status,
1538
- "oneof_index provided for extension field (%s)",
1539
- f->full_name);
1540
- return false;
1659
+ symtab_errf(ctx, "oneof_index provided for extension field (%s)",
1660
+ f->full_name);
1541
1661
  }
1542
1662
 
1543
1663
  if (oneof_index >= m->oneof_count) {
1544
- upb_status_seterrf(ctx->status, "oneof_index out of range (%s)",
1545
- f->full_name);
1546
- return false;
1664
+ symtab_errf(ctx, "oneof_index out of range (%s)", f->full_name);
1547
1665
  }
1548
1666
 
1549
- oneof = (upb_oneofdef*)&m->oneofs[oneof_index];
1667
+ oneof = (upb_oneofdef *)&m->oneofs[oneof_index];
1550
1668
  f->oneof = oneof;
1551
1669
 
1552
- CHK(upb_inttable_insert2(&oneof->itof, f->number_, v, alloc));
1553
- CHK(upb_strtable_insert3(&oneof->ntof, name.data, name.size, v, alloc));
1670
+ oneof->field_count++;
1671
+ if (f->proto3_optional_) {
1672
+ oneof->synthetic = true;
1673
+ }
1674
+ CHK_OOM(upb_inttable_insert(&oneof->itof, f->number_, v, ctx->arena));
1675
+ CHK_OOM(
1676
+ upb_strtable_insert(&oneof->ntof, name.data, name.size, v, ctx->arena));
1554
1677
  } else {
1555
1678
  f->oneof = NULL;
1679
+ if (f->proto3_optional_) {
1680
+ symtab_errf(ctx, "field with proto3_optional was not in a oneof (%s)",
1681
+ f->full_name);
1682
+ }
1556
1683
  }
1557
1684
 
1558
1685
  options = google_protobuf_FieldDescriptorProto_has_options(field_proto) ?
@@ -1571,12 +1698,10 @@ static bool create_fielddef(
1571
1698
  } else {
1572
1699
  f->lazy_ = false;
1573
1700
  }
1574
-
1575
- return true;
1576
1701
  }
1577
1702
 
1578
- static bool create_enumdef(
1579
- const symtab_addctx *ctx, const char *prefix,
1703
+ static void create_enumdef(
1704
+ symtab_addctx *ctx, const char *prefix,
1580
1705
  const google_protobuf_EnumDescriptorProto *enum_proto) {
1581
1706
  upb_enumdef *e;
1582
1707
  const google_protobuf_EnumValueDescriptorProto *const *values;
@@ -1584,25 +1709,22 @@ static bool create_enumdef(
1584
1709
  size_t i, n;
1585
1710
 
1586
1711
  name = google_protobuf_EnumDescriptorProto_name(enum_proto);
1587
- CHK(upb_isident(name, false, ctx->status));
1712
+ check_ident(ctx, name, false);
1588
1713
 
1589
1714
  e = (upb_enumdef*)&ctx->file->enums[ctx->file->enum_count++];
1590
1715
  e->full_name = makefullname(ctx, prefix, name);
1591
- CHK_OOM(symtab_add(ctx, e->full_name, pack_def(e, UPB_DEFTYPE_ENUM)));
1716
+ symtab_add(ctx, e->full_name, pack_def(e, UPB_DEFTYPE_ENUM));
1592
1717
 
1593
- CHK_OOM(upb_strtable_init2(&e->ntoi, UPB_CTYPE_INT32, ctx->alloc));
1594
- CHK_OOM(upb_inttable_init2(&e->iton, UPB_CTYPE_CSTR, ctx->alloc));
1718
+ values = google_protobuf_EnumDescriptorProto_value(enum_proto, &n);
1719
+ CHK_OOM(upb_strtable_init(&e->ntoi, n, ctx->arena));
1720
+ CHK_OOM(upb_inttable_init(&e->iton, ctx->arena));
1595
1721
 
1596
1722
  e->file = ctx->file;
1597
1723
  e->defaultval = 0;
1598
1724
 
1599
- values = google_protobuf_EnumDescriptorProto_value(enum_proto, &n);
1600
-
1601
1725
  if (n == 0) {
1602
- upb_status_seterrf(ctx->status,
1603
- "enums must contain at least one value (%s)",
1604
- e->full_name);
1605
- return false;
1726
+ symtab_errf(ctx, "enums must contain at least one value (%s)",
1727
+ e->full_name);
1606
1728
  }
1607
1729
 
1608
1730
  for (i = 0; i < n; i++) {
@@ -1613,33 +1735,27 @@ static bool create_enumdef(
1613
1735
  upb_value v = upb_value_int32(num);
1614
1736
 
1615
1737
  if (i == 0 && e->file->syntax == UPB_SYNTAX_PROTO3 && num != 0) {
1616
- upb_status_seterrf(ctx->status,
1617
- "for proto3, the first enum value must be zero (%s)",
1618
- e->full_name);
1619
- return false;
1738
+ symtab_errf(ctx, "for proto3, the first enum value must be zero (%s)",
1739
+ e->full_name);
1620
1740
  }
1621
1741
 
1622
1742
  if (upb_strtable_lookup(&e->ntoi, name2, NULL)) {
1623
- upb_status_seterrf(ctx->status, "duplicate enum label '%s'", name2);
1624
- return false;
1743
+ symtab_errf(ctx, "duplicate enum label '%s'", name2);
1625
1744
  }
1626
1745
 
1627
1746
  CHK_OOM(name2)
1628
- CHK_OOM(
1629
- upb_strtable_insert3(&e->ntoi, name2, strlen(name2), v, ctx->alloc));
1747
+ CHK_OOM(upb_strtable_insert(&e->ntoi, name2, strlen(name2), v, ctx->arena));
1630
1748
 
1631
1749
  if (!upb_inttable_lookup(&e->iton, num, NULL)) {
1632
1750
  upb_value v = upb_value_cstr(name2);
1633
- CHK_OOM(upb_inttable_insert2(&e->iton, num, v, ctx->alloc));
1751
+ CHK_OOM(upb_inttable_insert(&e->iton, num, v, ctx->arena));
1634
1752
  }
1635
1753
  }
1636
1754
 
1637
- upb_inttable_compact2(&e->iton, ctx->alloc);
1638
-
1639
- return true;
1755
+ upb_inttable_compact(&e->iton, ctx->arena);
1640
1756
  }
1641
1757
 
1642
- static bool create_msgdef(symtab_addctx *ctx, const char *prefix,
1758
+ static void create_msgdef(symtab_addctx *ctx, const char *prefix,
1643
1759
  const google_protobuf_DescriptorProto *msg_proto) {
1644
1760
  upb_msgdef *m;
1645
1761
  const google_protobuf_MessageOptions *options;
@@ -1647,18 +1763,21 @@ static bool create_msgdef(symtab_addctx *ctx, const char *prefix,
1647
1763
  const google_protobuf_FieldDescriptorProto *const *fields;
1648
1764
  const google_protobuf_EnumDescriptorProto *const *enums;
1649
1765
  const google_protobuf_DescriptorProto *const *msgs;
1650
- size_t i, n;
1766
+ size_t i, n_oneof, n_field, n;
1651
1767
  upb_strview name;
1652
1768
 
1653
1769
  name = google_protobuf_DescriptorProto_name(msg_proto);
1654
- CHK(upb_isident(name, false, ctx->status));
1770
+ check_ident(ctx, name, false);
1655
1771
 
1656
1772
  m = (upb_msgdef*)&ctx->file->msgs[ctx->file->msg_count++];
1657
1773
  m->full_name = makefullname(ctx, prefix, name);
1658
- CHK_OOM(symtab_add(ctx, m->full_name, pack_def(m, UPB_DEFTYPE_MSG)));
1774
+ symtab_add(ctx, m->full_name, pack_def(m, UPB_DEFTYPE_MSG));
1775
+
1776
+ oneofs = google_protobuf_DescriptorProto_oneof_decl(msg_proto, &n_oneof);
1777
+ fields = google_protobuf_DescriptorProto_field(msg_proto, &n_field);
1659
1778
 
1660
- CHK_OOM(upb_inttable_init2(&m->itof, UPB_CTYPE_CONSTPTR, ctx->alloc));
1661
- CHK_OOM(upb_strtable_init2(&m->ntof, UPB_CTYPE_CONSTPTR, ctx->alloc));
1779
+ CHK_OOM(upb_inttable_init(&m->itof, ctx->arena));
1780
+ CHK_OOM(upb_strtable_init(&m->ntof, n_oneof + n_field, ctx->arena));
1662
1781
 
1663
1782
  m->file = ctx->file;
1664
1783
  m->map_entry = false;
@@ -1674,119 +1793,102 @@ static bool create_msgdef(symtab_addctx *ctx, const char *prefix,
1674
1793
  ctx->layouts++;
1675
1794
  } else {
1676
1795
  /* Allocate now (to allow cross-linking), populate later. */
1677
- m->layout = upb_malloc(ctx->alloc, sizeof(*m->layout));
1796
+ m->layout = symtab_alloc(
1797
+ ctx, sizeof(*m->layout) + sizeof(_upb_fasttable_entry));
1678
1798
  }
1679
1799
 
1680
- oneofs = google_protobuf_DescriptorProto_oneof_decl(msg_proto, &n);
1681
1800
  m->oneof_count = 0;
1682
- m->oneofs = upb_malloc(ctx->alloc, sizeof(*m->oneofs) * n);
1683
- for (i = 0; i < n; i++) {
1684
- CHK(create_oneofdef(ctx, m, oneofs[i]));
1801
+ m->oneofs = symtab_alloc(ctx, sizeof(*m->oneofs) * n_oneof);
1802
+ for (i = 0; i < n_oneof; i++) {
1803
+ create_oneofdef(ctx, m, oneofs[i]);
1685
1804
  }
1686
1805
 
1687
- fields = google_protobuf_DescriptorProto_field(msg_proto, &n);
1688
1806
  m->field_count = 0;
1689
- m->fields = upb_malloc(ctx->alloc, sizeof(*m->fields) * n);
1690
- for (i = 0; i < n; i++) {
1691
- CHK(create_fielddef(ctx, m->full_name, m, fields[i]));
1807
+ m->fields = symtab_alloc(ctx, sizeof(*m->fields) * n_field);
1808
+ for (i = 0; i < n_field; i++) {
1809
+ create_fielddef(ctx, m->full_name, m, fields[i]);
1692
1810
  }
1693
1811
 
1694
- CHK(assign_msg_indices(m, ctx->status));
1695
- CHK(check_oneofs(m, ctx->status));
1812
+ finalize_oneofs(ctx, m);
1696
1813
  assign_msg_wellknowntype(m);
1697
- upb_inttable_compact2(&m->itof, ctx->alloc);
1814
+ upb_inttable_compact(&m->itof, ctx->arena);
1698
1815
 
1699
1816
  /* This message is built. Now build nested messages and enums. */
1700
1817
 
1701
1818
  enums = google_protobuf_DescriptorProto_enum_type(msg_proto, &n);
1702
1819
  for (i = 0; i < n; i++) {
1703
- CHK(create_enumdef(ctx, m->full_name, enums[i]));
1820
+ create_enumdef(ctx, m->full_name, enums[i]);
1704
1821
  }
1705
1822
 
1706
1823
  msgs = google_protobuf_DescriptorProto_nested_type(msg_proto, &n);
1707
1824
  for (i = 0; i < n; i++) {
1708
- CHK(create_msgdef(ctx, m->full_name, msgs[i]));
1825
+ create_msgdef(ctx, m->full_name, msgs[i]);
1709
1826
  }
1710
-
1711
- return true;
1712
1827
  }
1713
1828
 
1714
- typedef struct {
1715
- int msg_count;
1716
- int enum_count;
1717
- int ext_count;
1718
- } decl_counts;
1719
-
1720
1829
  static void count_types_in_msg(const google_protobuf_DescriptorProto *msg_proto,
1721
- decl_counts *counts) {
1830
+ upb_filedef *file) {
1722
1831
  const google_protobuf_DescriptorProto *const *msgs;
1723
1832
  size_t i, n;
1724
1833
 
1725
- counts->msg_count++;
1834
+ file->msg_count++;
1726
1835
 
1727
1836
  msgs = google_protobuf_DescriptorProto_nested_type(msg_proto, &n);
1728
1837
  for (i = 0; i < n; i++) {
1729
- count_types_in_msg(msgs[i], counts);
1838
+ count_types_in_msg(msgs[i], file);
1730
1839
  }
1731
1840
 
1732
1841
  google_protobuf_DescriptorProto_enum_type(msg_proto, &n);
1733
- counts->enum_count += n;
1842
+ file->enum_count += n;
1734
1843
 
1735
1844
  google_protobuf_DescriptorProto_extension(msg_proto, &n);
1736
- counts->ext_count += n;
1845
+ file->ext_count += n;
1737
1846
  }
1738
1847
 
1739
1848
  static void count_types_in_file(
1740
1849
  const google_protobuf_FileDescriptorProto *file_proto,
1741
- decl_counts *counts) {
1850
+ upb_filedef *file) {
1742
1851
  const google_protobuf_DescriptorProto *const *msgs;
1743
1852
  size_t i, n;
1744
1853
 
1745
1854
  msgs = google_protobuf_FileDescriptorProto_message_type(file_proto, &n);
1746
1855
  for (i = 0; i < n; i++) {
1747
- count_types_in_msg(msgs[i], counts);
1856
+ count_types_in_msg(msgs[i], file);
1748
1857
  }
1749
1858
 
1750
1859
  google_protobuf_FileDescriptorProto_enum_type(file_proto, &n);
1751
- counts->enum_count += n;
1860
+ file->enum_count += n;
1752
1861
 
1753
1862
  google_protobuf_FileDescriptorProto_extension(file_proto, &n);
1754
- counts->ext_count += n;
1863
+ file->ext_count += n;
1755
1864
  }
1756
1865
 
1757
- static bool resolve_fielddef(const symtab_addctx *ctx, const char *prefix,
1866
+ static void resolve_fielddef(symtab_addctx *ctx, const char *prefix,
1758
1867
  upb_fielddef *f) {
1759
1868
  upb_strview name;
1760
1869
  const google_protobuf_FieldDescriptorProto *field_proto = f->sub.unresolved;
1761
1870
 
1762
1871
  if (f->is_extension_) {
1763
1872
  if (!google_protobuf_FieldDescriptorProto_has_extendee(field_proto)) {
1764
- upb_status_seterrf(ctx->status,
1765
- "extension for field '%s' had no extendee",
1766
- f->full_name);
1767
- return false;
1873
+ symtab_errf(ctx, "extension for field '%s' had no extendee",
1874
+ f->full_name);
1768
1875
  }
1769
1876
 
1770
1877
  name = google_protobuf_FieldDescriptorProto_extendee(field_proto);
1771
1878
  f->msgdef = symtab_resolve(ctx, f, prefix, name, UPB_DEFTYPE_MSG);
1772
- CHK(f->msgdef);
1773
1879
  }
1774
1880
 
1775
1881
  if ((upb_fielddef_issubmsg(f) || f->type_ == UPB_DESCRIPTOR_TYPE_ENUM) &&
1776
1882
  !google_protobuf_FieldDescriptorProto_has_type_name(field_proto)) {
1777
- upb_status_seterrf(ctx->status, "field '%s' is missing type name",
1778
- f->full_name);
1779
- return false;
1883
+ symtab_errf(ctx, "field '%s' is missing type name", f->full_name);
1780
1884
  }
1781
1885
 
1782
1886
  name = google_protobuf_FieldDescriptorProto_type_name(field_proto);
1783
1887
 
1784
1888
  if (upb_fielddef_issubmsg(f)) {
1785
1889
  f->sub.msgdef = symtab_resolve(ctx, f, prefix, name, UPB_DEFTYPE_MSG);
1786
- CHK(f->sub.msgdef);
1787
1890
  } else if (f->type_ == UPB_DESCRIPTOR_TYPE_ENUM) {
1788
1891
  f->sub.enumdef = symtab_resolve(ctx, f, prefix, name, UPB_DEFTYPE_ENUM);
1789
- CHK(f->sub.enumdef);
1790
1892
  }
1791
1893
 
1792
1894
  /* Have to delay resolving of the default value until now because of the enum
@@ -1796,63 +1898,49 @@ static bool resolve_fielddef(const symtab_addctx *ctx, const char *prefix,
1796
1898
  google_protobuf_FieldDescriptorProto_default_value(field_proto);
1797
1899
 
1798
1900
  if (f->file->syntax == UPB_SYNTAX_PROTO3) {
1799
- upb_status_seterrf(ctx->status,
1800
- "proto3 fields cannot have explicit defaults (%s)",
1801
- f->full_name);
1802
- return false;
1901
+ symtab_errf(ctx, "proto3 fields cannot have explicit defaults (%s)",
1902
+ f->full_name);
1803
1903
  }
1804
1904
 
1805
1905
  if (upb_fielddef_issubmsg(f)) {
1806
- upb_status_seterrf(ctx->status,
1807
- "message fields cannot have explicit defaults (%s)",
1808
- f->full_name);
1809
- return false;
1906
+ symtab_errf(ctx, "message fields cannot have explicit defaults (%s)",
1907
+ f->full_name);
1810
1908
  }
1811
1909
 
1812
- if (!parse_default(ctx, defaultval.data, defaultval.size, f)) {
1813
- upb_status_seterrf(ctx->status,
1814
- "couldn't parse default '" UPB_STRVIEW_FORMAT
1815
- "' for field (%s)",
1816
- UPB_STRVIEW_ARGS(defaultval), f->full_name);
1817
- return false;
1818
- }
1910
+ parse_default(ctx, defaultval.data, defaultval.size, f);
1819
1911
  } else {
1820
1912
  set_default_default(ctx, f);
1821
1913
  }
1822
-
1823
- return true;
1824
1914
  }
1825
1915
 
1826
- static bool build_filedef(
1916
+ static void build_filedef(
1827
1917
  symtab_addctx *ctx, upb_filedef *file,
1828
1918
  const google_protobuf_FileDescriptorProto *file_proto) {
1829
- upb_alloc *alloc = ctx->alloc;
1830
1919
  const google_protobuf_FileOptions *file_options_proto;
1831
1920
  const google_protobuf_DescriptorProto *const *msgs;
1832
1921
  const google_protobuf_EnumDescriptorProto *const *enums;
1833
1922
  const google_protobuf_FieldDescriptorProto *const *exts;
1834
1923
  const upb_strview* strs;
1835
1924
  size_t i, n;
1836
- decl_counts counts = {0, 0, 0};
1837
-
1838
- count_types_in_file(file_proto, &counts);
1839
1925
 
1840
- file->msgs = upb_malloc(alloc, sizeof(*file->msgs) * counts.msg_count);
1841
- file->enums = upb_malloc(alloc, sizeof(*file->enums) * counts.enum_count);
1842
- file->exts = upb_malloc(alloc, sizeof(*file->exts) * counts.ext_count);
1926
+ file->symtab = ctx->symtab;
1843
1927
 
1844
- CHK_OOM(counts.msg_count == 0 || file->msgs);
1845
- CHK_OOM(counts.enum_count == 0 || file->enums);
1846
- CHK_OOM(counts.ext_count == 0 || file->exts);
1928
+ /* One pass to count and allocate. */
1929
+ file->msg_count = 0;
1930
+ file->enum_count = 0;
1931
+ file->ext_count = 0;
1932
+ count_types_in_file(file_proto, file);
1933
+ file->msgs = symtab_alloc(ctx, sizeof(*file->msgs) * file->msg_count);
1934
+ file->enums = symtab_alloc(ctx, sizeof(*file->enums) * file->enum_count);
1935
+ file->exts = symtab_alloc(ctx, sizeof(*file->exts) * file->ext_count);
1847
1936
 
1848
- /* We increment these as defs are added. */
1937
+ /* In the second pass we increment these as defs are added. */
1849
1938
  file->msg_count = 0;
1850
1939
  file->enum_count = 0;
1851
1940
  file->ext_count = 0;
1852
1941
 
1853
1942
  if (!google_protobuf_FileDescriptorProto_has_name(file_proto)) {
1854
- upb_status_seterrmsg(ctx->status, "File has no name");
1855
- return false;
1943
+ symtab_errf(ctx, "File has no name");
1856
1944
  }
1857
1945
 
1858
1946
  file->name =
@@ -1863,7 +1951,7 @@ static bool build_filedef(
1863
1951
  if (google_protobuf_FileDescriptorProto_has_package(file_proto)) {
1864
1952
  upb_strview package =
1865
1953
  google_protobuf_FileDescriptorProto_package(file_proto);
1866
- CHK(upb_isident(package, true, ctx->status));
1954
+ check_ident(ctx, package, true);
1867
1955
  file->package = strviewdup(ctx, package);
1868
1956
  } else {
1869
1957
  file->package = NULL;
@@ -1878,9 +1966,8 @@ static bool build_filedef(
1878
1966
  } else if (streql_view(syntax, "proto3")) {
1879
1967
  file->syntax = UPB_SYNTAX_PROTO3;
1880
1968
  } else {
1881
- upb_status_seterrf(ctx->status, "Invalid syntax '" UPB_STRVIEW_FORMAT "'",
1882
- UPB_STRVIEW_ARGS(syntax));
1883
- return false;
1969
+ symtab_errf(ctx, "Invalid syntax '" UPB_STRVIEW_FORMAT "'",
1970
+ UPB_STRVIEW_ARGS(syntax));
1884
1971
  }
1885
1972
  } else {
1886
1973
  file->syntax = UPB_SYNTAX_PROTO2;
@@ -1902,19 +1989,17 @@ static bool build_filedef(
1902
1989
 
1903
1990
  /* Verify dependencies. */
1904
1991
  strs = google_protobuf_FileDescriptorProto_dependency(file_proto, &n);
1905
- file->deps = upb_malloc(alloc, sizeof(*file->deps) * n) ;
1906
- CHK_OOM(n == 0 || file->deps);
1992
+ file->deps = symtab_alloc(ctx, sizeof(*file->deps) * n);
1907
1993
 
1908
1994
  for (i = 0; i < n; i++) {
1909
1995
  upb_strview dep_name = strs[i];
1910
1996
  upb_value v;
1911
1997
  if (!upb_strtable_lookup2(&ctx->symtab->files, dep_name.data,
1912
1998
  dep_name.size, &v)) {
1913
- upb_status_seterrf(ctx->status,
1914
- "Depends on file '" UPB_STRVIEW_FORMAT
1915
- "', but it has not been loaded",
1916
- UPB_STRVIEW_ARGS(dep_name));
1917
- return false;
1999
+ symtab_errf(ctx,
2000
+ "Depends on file '" UPB_STRVIEW_FORMAT
2001
+ "', but it has not been loaded",
2002
+ UPB_STRVIEW_ARGS(dep_name));
1918
2003
  }
1919
2004
  file->deps[i] = upb_value_getconstptr(v);
1920
2005
  }
@@ -1922,194 +2007,99 @@ static bool build_filedef(
1922
2007
  /* Create messages. */
1923
2008
  msgs = google_protobuf_FileDescriptorProto_message_type(file_proto, &n);
1924
2009
  for (i = 0; i < n; i++) {
1925
- CHK(create_msgdef(ctx, file->package, msgs[i]));
2010
+ create_msgdef(ctx, file->package, msgs[i]);
1926
2011
  }
1927
2012
 
1928
2013
  /* Create enums. */
1929
2014
  enums = google_protobuf_FileDescriptorProto_enum_type(file_proto, &n);
1930
2015
  for (i = 0; i < n; i++) {
1931
- CHK(create_enumdef(ctx, file->package, enums[i]));
2016
+ create_enumdef(ctx, file->package, enums[i]);
1932
2017
  }
1933
2018
 
1934
2019
  /* Create extensions. */
1935
2020
  exts = google_protobuf_FileDescriptorProto_extension(file_proto, &n);
1936
- file->exts = upb_malloc(alloc, sizeof(*file->exts) * n);
1937
- CHK_OOM(n == 0 || file->exts);
2021
+ file->exts = symtab_alloc(ctx, sizeof(*file->exts) * n);
1938
2022
  for (i = 0; i < n; i++) {
1939
- CHK(create_fielddef(ctx, file->package, NULL, exts[i]));
2023
+ create_fielddef(ctx, file->package, NULL, exts[i]);
1940
2024
  }
1941
2025
 
1942
2026
  /* Now that all names are in the table, build layouts and resolve refs. */
1943
2027
  for (i = 0; i < (size_t)file->ext_count; i++) {
1944
- CHK(resolve_fielddef(ctx, file->package, (upb_fielddef*)&file->exts[i]));
2028
+ resolve_fielddef(ctx, file->package, (upb_fielddef*)&file->exts[i]);
1945
2029
  }
1946
2030
 
1947
2031
  for (i = 0; i < (size_t)file->msg_count; i++) {
1948
2032
  const upb_msgdef *m = &file->msgs[i];
1949
2033
  int j;
1950
2034
  for (j = 0; j < m->field_count; j++) {
1951
- CHK(resolve_fielddef(ctx, m->full_name, (upb_fielddef*)&m->fields[j]));
2035
+ resolve_fielddef(ctx, m->full_name, (upb_fielddef*)&m->fields[j]);
1952
2036
  }
1953
2037
  }
1954
2038
 
1955
2039
  if (!ctx->layouts) {
1956
2040
  for (i = 0; i < (size_t)file->msg_count; i++) {
1957
2041
  const upb_msgdef *m = &file->msgs[i];
1958
- make_layout(ctx->symtab, m);
2042
+ make_layout(ctx, m);
1959
2043
  }
1960
2044
  }
1961
-
1962
- return true;
1963
- }
1964
-
1965
- static bool upb_symtab_addtotabs(upb_symtab *s, symtab_addctx *ctx) {
1966
- const upb_filedef *file = ctx->file;
1967
- upb_alloc *alloc = upb_arena_alloc(s->arena);
1968
- upb_strtable_iter iter;
1969
-
1970
- CHK_OOM(upb_strtable_insert3(&s->files, file->name, strlen(file->name),
1971
- upb_value_constptr(file), alloc));
1972
-
1973
- upb_strtable_begin(&iter, ctx->addtab);
1974
- for (; !upb_strtable_done(&iter); upb_strtable_next(&iter)) {
1975
- upb_strview key = upb_strtable_iter_key(&iter);
1976
- upb_value value = upb_strtable_iter_value(&iter);
1977
- CHK_OOM(upb_strtable_insert3(&s->syms, key.data, key.size, value, alloc));
1978
- }
1979
-
1980
- return true;
1981
- }
1982
-
1983
- /* upb_filedef ****************************************************************/
1984
-
1985
- const char *upb_filedef_name(const upb_filedef *f) {
1986
- return f->name;
1987
- }
1988
-
1989
- const char *upb_filedef_package(const upb_filedef *f) {
1990
- return f->package;
1991
- }
1992
-
1993
- const char *upb_filedef_phpprefix(const upb_filedef *f) {
1994
- return f->phpprefix;
1995
- }
1996
-
1997
- const char *upb_filedef_phpnamespace(const upb_filedef *f) {
1998
- return f->phpnamespace;
1999
2045
  }
2000
2046
 
2001
- upb_syntax_t upb_filedef_syntax(const upb_filedef *f) {
2002
- return f->syntax;
2003
- }
2004
-
2005
- int upb_filedef_msgcount(const upb_filedef *f) {
2006
- return f->msg_count;
2007
- }
2008
-
2009
- int upb_filedef_depcount(const upb_filedef *f) {
2010
- return f->dep_count;
2011
- }
2012
-
2013
- int upb_filedef_enumcount(const upb_filedef *f) {
2014
- return f->enum_count;
2015
- }
2016
-
2017
- const upb_filedef *upb_filedef_dep(const upb_filedef *f, int i) {
2018
- return i < 0 || i >= f->dep_count ? NULL : f->deps[i];
2019
- }
2020
-
2021
- const upb_msgdef *upb_filedef_msg(const upb_filedef *f, int i) {
2022
- return i < 0 || i >= f->msg_count ? NULL : &f->msgs[i];
2023
- }
2024
-
2025
- const upb_enumdef *upb_filedef_enum(const upb_filedef *f, int i) {
2026
- return i < 0 || i >= f->enum_count ? NULL : &f->enums[i];
2027
- }
2028
-
2029
- void upb_symtab_free(upb_symtab *s) {
2030
- upb_arena_free(s->arena);
2031
- upb_gfree(s);
2032
- }
2033
-
2034
- upb_symtab *upb_symtab_new(void) {
2035
- upb_symtab *s = upb_gmalloc(sizeof(*s));
2036
- upb_alloc *alloc;
2037
-
2038
- if (!s) {
2039
- return NULL;
2047
+ static void remove_filedef(upb_symtab *s, upb_filedef *file) {
2048
+ int i;
2049
+ for (i = 0; i < file->msg_count; i++) {
2050
+ const char *name = file->msgs[i].full_name;
2051
+ upb_strtable_remove(&s->syms, name, strlen(name), NULL);
2040
2052
  }
2041
-
2042
- s->arena = upb_arena_new();
2043
- alloc = upb_arena_alloc(s->arena);
2044
-
2045
- if (!upb_strtable_init2(&s->syms, UPB_CTYPE_CONSTPTR, alloc) ||
2046
- !upb_strtable_init2(&s->files, UPB_CTYPE_CONSTPTR, alloc)) {
2047
- upb_arena_free(s->arena);
2048
- upb_gfree(s);
2049
- s = NULL;
2053
+ for (i = 0; i < file->enum_count; i++) {
2054
+ const char *name = file->enums[i].full_name;
2055
+ upb_strtable_remove(&s->syms, name, strlen(name), NULL);
2056
+ }
2057
+ for (i = 0; i < file->ext_count; i++) {
2058
+ const char *name = file->exts[i].full_name;
2059
+ upb_strtable_remove(&s->syms, name, strlen(name), NULL);
2050
2060
  }
2051
- return s;
2052
- }
2053
-
2054
- const upb_msgdef *upb_symtab_lookupmsg(const upb_symtab *s, const char *sym) {
2055
- upb_value v;
2056
- return upb_strtable_lookup(&s->syms, sym, &v) ?
2057
- unpack_def(v, UPB_DEFTYPE_MSG) : NULL;
2058
- }
2059
-
2060
- const upb_msgdef *upb_symtab_lookupmsg2(const upb_symtab *s, const char *sym,
2061
- size_t len) {
2062
- upb_value v;
2063
- return upb_strtable_lookup2(&s->syms, sym, len, &v) ?
2064
- unpack_def(v, UPB_DEFTYPE_MSG) : NULL;
2065
- }
2066
-
2067
- const upb_enumdef *upb_symtab_lookupenum(const upb_symtab *s, const char *sym) {
2068
- upb_value v;
2069
- return upb_strtable_lookup(&s->syms, sym, &v) ?
2070
- unpack_def(v, UPB_DEFTYPE_ENUM) : NULL;
2071
- }
2072
-
2073
- const upb_filedef *upb_symtab_lookupfile(const upb_symtab *s, const char *name) {
2074
- upb_value v;
2075
- return upb_strtable_lookup(&s->files, name, &v) ? upb_value_getconstptr(v)
2076
- : NULL;
2077
- }
2078
-
2079
- const upb_filedef *upb_symtab_lookupfile2(
2080
- const upb_symtab *s, const char *name, size_t len) {
2081
- upb_value v;
2082
- return upb_strtable_lookup2(&s->files, name, len, &v) ?
2083
- upb_value_getconstptr(v) : NULL;
2084
- }
2085
-
2086
- int upb_symtab_filecount(const upb_symtab *s) {
2087
- return (int)upb_strtable_count(&s->files);
2088
2061
  }
2089
2062
 
2090
2063
  static const upb_filedef *_upb_symtab_addfile(
2091
2064
  upb_symtab *s, const google_protobuf_FileDescriptorProto *file_proto,
2092
2065
  const upb_msglayout **layouts, upb_status *status) {
2093
- upb_arena *tmparena = upb_arena_new();
2094
- upb_strtable addtab;
2095
- upb_alloc *alloc = upb_arena_alloc(s->arena);
2096
- upb_filedef *file = upb_malloc(alloc, sizeof(*file));
2097
- bool ok;
2098
2066
  symtab_addctx ctx;
2067
+ upb_strview name = google_protobuf_FileDescriptorProto_name(file_proto);
2068
+
2069
+ if (upb_strtable_lookup2(&s->files, name.data, name.size, NULL)) {
2070
+ upb_status_seterrf(status, "duplicate file name (%.*s)",
2071
+ UPB_STRVIEW_ARGS(name));
2072
+ return NULL;
2073
+ }
2099
2074
 
2100
- ctx.file = file;
2101
2075
  ctx.symtab = s;
2102
- ctx.alloc = alloc;
2103
- ctx.tmp = upb_arena_alloc(tmparena);
2104
- ctx.addtab = &addtab;
2105
2076
  ctx.layouts = layouts;
2106
2077
  ctx.status = status;
2078
+ ctx.file = NULL;
2079
+ ctx.arena = upb_arena_new();
2107
2080
 
2108
- ok = file && upb_strtable_init2(&addtab, UPB_CTYPE_CONSTPTR, ctx.tmp) &&
2109
- build_filedef(&ctx, file, file_proto) && upb_symtab_addtotabs(s, &ctx);
2081
+ if (!ctx.arena) {
2082
+ upb_status_setoom(status);
2083
+ return NULL;
2084
+ }
2110
2085
 
2111
- upb_arena_free(tmparena);
2112
- return ok ? file : NULL;
2086
+ if (UPB_UNLIKELY(UPB_SETJMP(ctx.err))) {
2087
+ UPB_ASSERT(!upb_ok(status));
2088
+ if (ctx.file) {
2089
+ remove_filedef(s, ctx.file);
2090
+ ctx.file = NULL;
2091
+ }
2092
+ } else {
2093
+ ctx.file = symtab_alloc(&ctx, sizeof(*ctx.file));
2094
+ build_filedef(&ctx, ctx.file, file_proto);
2095
+ upb_strtable_insert(&s->files, name.data, name.size,
2096
+ upb_value_constptr(ctx.file), ctx.arena);
2097
+ UPB_ASSERT(upb_ok(status));
2098
+ upb_arena_fuse(s->arena, ctx.arena);
2099
+ }
2100
+
2101
+ upb_arena_free(ctx.arena);
2102
+ return ctx.file;
2113
2103
  }
2114
2104
 
2115
2105
  const upb_filedef *upb_symtab_addfile(
@@ -2141,8 +2131,10 @@ bool _upb_symtab_loaddefinit(upb_symtab *s, const upb_def_init *init) {
2141
2131
  if (!_upb_symtab_loaddefinit(s, *deps)) goto err;
2142
2132
  }
2143
2133
 
2144
- file = google_protobuf_FileDescriptorProto_parse(
2145
- init->descriptor.data, init->descriptor.size, arena);
2134
+ file = google_protobuf_FileDescriptorProto_parse_ex(
2135
+ init->descriptor.data, init->descriptor.size, NULL, UPB_DECODE_ALIAS,
2136
+ arena);
2137
+ s->bytes_loaded += init->descriptor.size;
2146
2138
 
2147
2139
  if (!file) {
2148
2140
  upb_status_seterrf(
@@ -2165,5 +2157,12 @@ err:
2165
2157
  return false;
2166
2158
  }
2167
2159
 
2168
- #undef CHK
2160
+ size_t _upb_symtab_bytesloaded(const upb_symtab *s) {
2161
+ return s->bytes_loaded;
2162
+ }
2163
+
2164
+ upb_arena *_upb_symtab_arena(const upb_symtab *s) {
2165
+ return s->arena;
2166
+ }
2167
+
2169
2168
  #undef CHK_OOM