grpc 1.30.0 → 1.31.1

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

Potentially problematic release.


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

Files changed (383) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +560 -619
  3. data/include/grpc/grpc_security.h +8 -0
  4. data/include/grpc/grpc_security_constants.h +3 -0
  5. data/include/grpc/impl/codegen/grpc_types.h +7 -5
  6. data/include/grpc/impl/codegen/port_platform.h +0 -32
  7. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
  8. data/src/core/ext/filters/client_channel/client_channel.cc +406 -261
  9. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  10. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  11. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +2 -0
  13. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
  15. data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +39 -23
  17. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
  18. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -4
  19. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +381 -72
  20. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
  22. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
  23. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
  24. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
  25. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
  26. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -48
  27. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  28. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +21 -18
  29. data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
  30. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
  31. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +33 -28
  32. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
  33. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  34. data/src/core/ext/filters/client_channel/subchannel.cc +1 -1
  35. data/src/core/ext/filters/client_channel/xds/xds_api.cc +327 -123
  36. data/src/core/ext/filters/client_channel/xds/xds_api.h +72 -7
  37. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +12 -23
  38. data/src/core/ext/filters/client_channel/xds/xds_client.cc +112 -33
  39. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +10 -10
  40. data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
  41. data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
  42. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
  43. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  44. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
  45. data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
  46. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +383 -347
  47. data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
  48. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
  49. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
  50. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
  51. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +19 -4
  52. data/src/core/ext/transport/chttp2/transport/flow_control.cc +22 -27
  53. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  54. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  55. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  56. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  57. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  58. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
  59. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  60. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  61. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  62. data/src/core/ext/transport/chttp2/transport/internal.h +13 -0
  63. data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
  64. data/src/core/ext/transport/chttp2/transport/writing.cc +9 -14
  65. data/src/core/ext/transport/inproc/inproc_transport.cc +35 -15
  66. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  67. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  68. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -1
  69. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +80 -69
  70. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +24 -23
  71. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +66 -56
  72. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
  73. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +2 -2
  74. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +317 -311
  75. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
  76. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
  77. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
  78. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
  79. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +9 -8
  80. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +1 -1
  81. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +163 -169
  82. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
  83. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +4 -5
  84. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
  85. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +137 -117
  86. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
  87. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +105 -87
  88. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +12 -13
  89. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -1
  90. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
  91. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
  92. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -1
  93. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
  94. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
  95. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +49 -42
  96. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
  97. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
  98. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +81 -65
  99. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
  100. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +1 -1
  101. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
  102. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
  103. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
  104. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
  105. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
  106. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +7 -7
  107. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +648 -696
  108. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
  109. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
  110. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -1
  111. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
  112. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +234 -199
  113. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
  114. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +13 -13
  115. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
  116. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +20 -18
  117. data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
  118. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +18 -17
  119. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
  120. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
  121. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
  122. data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
  123. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
  124. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
  125. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  126. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  127. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  128. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  129. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +3 -3
  130. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
  131. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  132. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  133. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  134. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
  135. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  136. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  137. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  138. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  139. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  140. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  141. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  142. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  143. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  144. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  145. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  146. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  147. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
  148. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  149. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  150. data/src/core/ext/upb-generated/validate/validate.upb.h +536 -535
  151. data/src/core/lib/channel/channel_trace.cc +2 -6
  152. data/src/core/lib/channel/channelz.cc +5 -15
  153. data/src/core/lib/gpr/log_linux.cc +6 -8
  154. data/src/core/lib/gpr/log_posix.cc +6 -8
  155. data/src/core/lib/gpr/string.cc +10 -9
  156. data/src/core/lib/gpr/string.h +4 -2
  157. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  158. data/src/core/lib/http/httpcli.cc +13 -10
  159. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  160. data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
  161. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  162. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  163. data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
  164. data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
  165. data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
  166. data/src/core/lib/iomgr/ev_posix.cc +2 -0
  167. data/src/core/lib/iomgr/iomgr.cc +10 -0
  168. data/src/core/lib/iomgr/iomgr.h +10 -0
  169. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  170. data/src/core/lib/iomgr/port.h +1 -21
  171. data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
  172. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
  173. data/src/core/lib/iomgr/resource_quota.cc +34 -31
  174. data/src/core/lib/iomgr/sockaddr_utils.cc +7 -5
  175. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  176. data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
  177. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  178. data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
  179. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  180. data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
  181. data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
  182. data/src/core/lib/iomgr/tcp_custom.cc +1 -1
  183. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  184. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  185. data/src/core/lib/iomgr/tcp_server.h +7 -5
  186. data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
  187. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
  188. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  189. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
  190. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
  191. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  192. data/src/core/lib/iomgr/timer_generic.cc +13 -12
  193. data/src/core/lib/iomgr/udp_server.cc +24 -23
  194. data/src/core/lib/iomgr/udp_server.h +5 -2
  195. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  196. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  197. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  198. data/src/core/lib/json/json_reader.cc +20 -21
  199. data/src/core/lib/security/credentials/credentials.h +5 -3
  200. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  201. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -9
  202. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  203. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
  204. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
  205. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  206. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  207. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
  208. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +10 -10
  209. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  210. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  211. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
  212. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
  213. data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
  214. data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
  215. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
  216. data/src/core/lib/security/transport/auth_filters.h +0 -5
  217. data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
  218. data/src/core/lib/security/util/json_util.cc +12 -13
  219. data/src/core/lib/slice/slice.cc +38 -1
  220. data/src/core/lib/slice/slice_internal.h +1 -0
  221. data/src/core/lib/surface/call.cc +40 -41
  222. data/src/core/lib/surface/completion_queue.cc +271 -14
  223. data/src/core/lib/surface/completion_queue.h +8 -0
  224. data/src/core/lib/surface/init.cc +2 -0
  225. data/src/core/lib/surface/server.cc +565 -632
  226. data/src/core/lib/surface/server.h +34 -12
  227. data/src/core/lib/surface/version.cc +2 -2
  228. data/src/core/lib/transport/transport.h +6 -0
  229. data/src/core/lib/uri/uri_parser.cc +8 -15
  230. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  231. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
  232. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -0
  233. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  234. data/src/core/tsi/ssl_transport_security.cc +108 -11
  235. data/src/core/tsi/ssl_transport_security.h +14 -2
  236. data/src/core/tsi/transport_security_interface.h +5 -0
  237. data/src/ruby/bin/math_services_pb.rb +4 -4
  238. data/src/ruby/ext/grpc/extconf.rb +5 -2
  239. data/src/ruby/ext/grpc/rb_call.c +3 -2
  240. data/src/ruby/ext/grpc/rb_call.h +4 -0
  241. data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
  242. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  243. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  244. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  245. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  246. data/src/ruby/lib/grpc/version.rb +1 -1
  247. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  248. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
  249. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
  250. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  251. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +2 -0
  252. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  253. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  254. data/src/ruby/spec/pb/codegen/package_option_spec.rb +25 -1
  255. data/src/ruby/spec/support/services.rb +10 -4
  256. data/src/ruby/spec/user_agent_spec.rb +74 -0
  257. data/third_party/boringssl-with-bazel/err_data.c +89 -83
  258. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  259. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  260. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  261. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  262. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  263. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  264. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  265. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  266. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  267. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  268. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  269. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  270. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  271. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  272. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  282. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
  283. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  284. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  285. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
  286. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
  287. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
  288. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  289. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  290. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  291. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  292. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  293. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  294. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
  295. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  296. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
  297. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  298. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  299. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  300. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  301. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  302. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  303. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  304. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  305. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
  306. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  307. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +33 -16
  308. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
  309. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +789 -715
  310. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
  311. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
  312. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
  313. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
  314. data/third_party/boringssl-with-bazel/src/ssl/internal.h +17 -14
  315. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
  316. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +28 -0
  317. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
  318. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  319. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
  320. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
  321. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +12 -9
  322. data/third_party/re2/re2/bitmap256.h +117 -0
  323. data/third_party/re2/re2/bitstate.cc +385 -0
  324. data/third_party/re2/re2/compile.cc +1279 -0
  325. data/third_party/re2/re2/dfa.cc +2130 -0
  326. data/third_party/re2/re2/filtered_re2.cc +121 -0
  327. data/third_party/re2/re2/filtered_re2.h +109 -0
  328. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  329. data/third_party/re2/re2/nfa.cc +713 -0
  330. data/third_party/re2/re2/onepass.cc +623 -0
  331. data/third_party/re2/re2/parse.cc +2464 -0
  332. data/third_party/re2/re2/perl_groups.cc +119 -0
  333. data/third_party/re2/re2/pod_array.h +55 -0
  334. data/third_party/re2/re2/prefilter.cc +710 -0
  335. data/third_party/re2/re2/prefilter.h +108 -0
  336. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  337. data/third_party/re2/re2/prefilter_tree.h +139 -0
  338. data/third_party/re2/re2/prog.cc +988 -0
  339. data/third_party/re2/re2/prog.h +436 -0
  340. data/third_party/re2/re2/re2.cc +1362 -0
  341. data/third_party/re2/re2/re2.h +1002 -0
  342. data/third_party/re2/re2/regexp.cc +980 -0
  343. data/third_party/re2/re2/regexp.h +659 -0
  344. data/third_party/re2/re2/set.cc +154 -0
  345. data/third_party/re2/re2/set.h +80 -0
  346. data/third_party/re2/re2/simplify.cc +657 -0
  347. data/third_party/re2/re2/sparse_array.h +392 -0
  348. data/third_party/re2/re2/sparse_set.h +264 -0
  349. data/third_party/re2/re2/stringpiece.cc +65 -0
  350. data/third_party/re2/re2/stringpiece.h +210 -0
  351. data/third_party/re2/re2/tostring.cc +351 -0
  352. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  353. data/third_party/re2/re2/unicode_casefold.h +78 -0
  354. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  355. data/third_party/re2/re2/unicode_groups.h +67 -0
  356. data/third_party/re2/re2/walker-inl.h +246 -0
  357. data/third_party/re2/util/benchmark.h +156 -0
  358. data/third_party/re2/util/flags.h +26 -0
  359. data/third_party/re2/util/logging.h +109 -0
  360. data/third_party/re2/util/malloc_counter.h +19 -0
  361. data/third_party/re2/util/mix.h +41 -0
  362. data/third_party/re2/util/mutex.h +148 -0
  363. data/third_party/re2/util/pcre.cc +1025 -0
  364. data/third_party/re2/util/pcre.h +681 -0
  365. data/third_party/re2/util/rune.cc +260 -0
  366. data/third_party/re2/util/strutil.cc +149 -0
  367. data/third_party/re2/util/strutil.h +21 -0
  368. data/third_party/re2/util/test.h +50 -0
  369. data/third_party/re2/util/utf.h +44 -0
  370. data/third_party/re2/util/util.h +42 -0
  371. data/third_party/upb/upb/decode.c +467 -504
  372. data/third_party/upb/upb/encode.c +163 -121
  373. data/third_party/upb/upb/msg.c +130 -64
  374. data/third_party/upb/upb/msg.h +418 -14
  375. data/third_party/upb/upb/port_def.inc +35 -6
  376. data/third_party/upb/upb/port_undef.inc +8 -1
  377. data/third_party/upb/upb/table.c +53 -75
  378. data/third_party/upb/upb/table.int.h +11 -43
  379. data/third_party/upb/upb/upb.c +148 -124
  380. data/third_party/upb/upb/upb.h +65 -147
  381. data/third_party/upb/upb/upb.hpp +86 -0
  382. metadata +90 -30
  383. data/third_party/upb/upb/generated_util.h +0 -105
@@ -1,7 +1,6 @@
1
1
  /*
2
- ** Data structures for message tables, used for parsing and serialization.
3
- ** This are much lighter-weight than full reflection, but they are do not
4
- ** have enough information to convert to text format, JSON, etc.
2
+ ** Our memory representation for parsing tables and messages themselves.
3
+ ** Functions in this file are used by generated code and possibly reflection.
5
4
  **
6
5
  ** The definitions in this file are internal to upb.
7
6
  **/
@@ -11,12 +10,18 @@
11
10
 
12
11
  #include <stdint.h>
13
12
  #include <string.h>
13
+
14
+ #include "upb/table.int.h"
14
15
  #include "upb/upb.h"
15
16
 
17
+ #include "upb/port_def.inc"
18
+
16
19
  #ifdef __cplusplus
17
20
  extern "C" {
18
21
  #endif
19
22
 
23
+ #define PTR_AT(msg, ofs, type) (type*)((const char*)msg + ofs)
24
+
20
25
  typedef void upb_msg;
21
26
 
22
27
  /** upb_msglayout *************************************************************/
@@ -25,13 +30,20 @@ typedef void upb_msg;
25
30
  * members are public so generated code can initialize them, but users MUST NOT
26
31
  * read or write any of its members. */
27
32
 
33
+ /* These aren't real labels according to descriptor.proto, but in the table we
34
+ * use these for map/packed fields instead of UPB_LABEL_REPEATED. */
35
+ enum {
36
+ _UPB_LABEL_MAP = 4,
37
+ _UPB_LABEL_PACKED = 7 /* Low 3 bits are common with UPB_LABEL_REPEATED. */
38
+ };
39
+
28
40
  typedef struct {
29
41
  uint32_t number;
30
42
  uint16_t offset;
31
- int16_t presence; /* If >0, hasbit_index+1. If <0, oneof_index+1. */
43
+ int16_t presence; /* If >0, hasbit_index. If <0, ~oneof_index. */
32
44
  uint16_t submsg_index; /* undefined if descriptortype != MESSAGE or GROUP. */
33
45
  uint8_t descriptortype;
34
- uint8_t label;
46
+ uint8_t label; /* google.protobuf.Label or _UPB_LABEL_* above. */
35
47
  } upb_msglayout_field;
36
48
 
37
49
  typedef struct upb_msglayout {
@@ -44,26 +56,418 @@ typedef struct upb_msglayout {
44
56
  bool extendable;
45
57
  } upb_msglayout;
46
58
 
47
- /** Message internal representation *******************************************/
59
+ /** upb_msg *******************************************************************/
60
+
61
+ /* Internal members of a upb_msg. We can change this without breaking binary
62
+ * compatibility. We put these before the user's data. The user's upb_msg*
63
+ * points after the upb_msg_internal. */
48
64
 
49
- /* Our internal representation for repeated fields. */
65
+ /* Used when a message is not extendable. */
50
66
  typedef struct {
51
- void *data; /* Each element is element_size. */
67
+ char *unknown;
68
+ size_t unknown_len;
69
+ size_t unknown_size;
70
+ } upb_msg_internal;
71
+
72
+ /* Used when a message is extendable. */
73
+ typedef struct {
74
+ upb_inttable *extdict;
75
+ upb_msg_internal base;
76
+ } upb_msg_internal_withext;
77
+
78
+ /* Maps upb_fieldtype_t -> memory size. */
79
+ extern char _upb_fieldtype_to_size[12];
80
+
81
+ /* Creates a new messages with the given layout on the given arena. */
82
+ upb_msg *_upb_msg_new(const upb_msglayout *l, upb_arena *a);
83
+
84
+ /* Clears the given message. */
85
+ void _upb_msg_clear(upb_msg *msg, const upb_msglayout *l);
86
+
87
+ /* Discards the unknown fields for this message only. */
88
+ void _upb_msg_discardunknown_shallow(upb_msg *msg);
89
+
90
+ /* Adds unknown data (serialized protobuf data) to the given message. The data
91
+ * is copied into the message instance. */
92
+ bool _upb_msg_addunknown(upb_msg *msg, const char *data, size_t len,
93
+ upb_arena *arena);
94
+
95
+ /* Returns a reference to the message's unknown data. */
96
+ const char *upb_msg_getunknown(const upb_msg *msg, size_t *len);
97
+
98
+ /** Hasbit access *************************************************************/
99
+
100
+ UPB_INLINE bool _upb_hasbit(const upb_msg *msg, size_t idx) {
101
+ return (*PTR_AT(msg, idx / 8, const char) & (1 << (idx % 8))) != 0;
102
+ }
103
+
104
+ UPB_INLINE void _upb_sethas(const upb_msg *msg, size_t idx) {
105
+ (*PTR_AT(msg, idx / 8, char)) |= (char)(1 << (idx % 8));
106
+ }
107
+
108
+ UPB_INLINE void _upb_clearhas(const upb_msg *msg, size_t idx) {
109
+ (*PTR_AT(msg, idx / 8, char)) &= (char)(~(1 << (idx % 8)));
110
+ }
111
+
112
+ UPB_INLINE size_t _upb_msg_hasidx(const upb_msglayout_field *f) {
113
+ UPB_ASSERT(f->presence > 0);
114
+ return f->presence;
115
+ }
116
+
117
+ UPB_INLINE bool _upb_hasbit_field(const upb_msg *msg,
118
+ const upb_msglayout_field *f) {
119
+ return _upb_hasbit(msg, _upb_msg_hasidx(f));
120
+ }
121
+
122
+ UPB_INLINE void _upb_sethas_field(const upb_msg *msg,
123
+ const upb_msglayout_field *f) {
124
+ _upb_sethas(msg, _upb_msg_hasidx(f));
125
+ }
126
+
127
+ UPB_INLINE void _upb_clearhas_field(const upb_msg *msg,
128
+ const upb_msglayout_field *f) {
129
+ _upb_clearhas(msg, _upb_msg_hasidx(f));
130
+ }
131
+
132
+ /** Oneof case access *********************************************************/
133
+
134
+ UPB_INLINE uint32_t *_upb_oneofcase(upb_msg *msg, size_t case_ofs) {
135
+ return PTR_AT(msg, case_ofs, uint32_t);
136
+ }
137
+
138
+ UPB_INLINE uint32_t _upb_getoneofcase(const void *msg, size_t case_ofs) {
139
+ return *PTR_AT(msg, case_ofs, uint32_t);
140
+ }
141
+
142
+ UPB_INLINE size_t _upb_oneofcase_ofs(const upb_msglayout_field *f) {
143
+ UPB_ASSERT(f->presence < 0);
144
+ return ~(ptrdiff_t)f->presence;
145
+ }
146
+
147
+ UPB_INLINE uint32_t *_upb_oneofcase_field(upb_msg *msg,
148
+ const upb_msglayout_field *f) {
149
+ return _upb_oneofcase(msg, _upb_oneofcase_ofs(f));
150
+ }
151
+
152
+ UPB_INLINE uint32_t _upb_getoneofcase_field(const upb_msg *msg,
153
+ const upb_msglayout_field *f) {
154
+ return _upb_getoneofcase(msg, _upb_oneofcase_ofs(f));
155
+ }
156
+
157
+ UPB_INLINE bool _upb_has_submsg_nohasbit(const upb_msg *msg, size_t ofs) {
158
+ return *PTR_AT(msg, ofs, const upb_msg*) != NULL;
159
+ }
160
+
161
+ UPB_INLINE bool _upb_isrepeated(const upb_msglayout_field *field) {
162
+ return (field->label & 3) == UPB_LABEL_REPEATED;
163
+ }
164
+
165
+ UPB_INLINE bool _upb_repeated_or_map(const upb_msglayout_field *field) {
166
+ return field->label >= UPB_LABEL_REPEATED;
167
+ }
168
+
169
+ /** upb_array *****************************************************************/
170
+
171
+ /* Our internal representation for repeated fields. */
172
+ typedef struct {
173
+ uintptr_t data; /* Tagged ptr: low 3 bits of ptr are lg2(elem size). */
52
174
  size_t len; /* Measured in elements. */
53
175
  size_t size; /* Measured in elements. */
54
176
  } upb_array;
55
177
 
56
- upb_msg *upb_msg_new(const upb_msglayout *l, upb_arena *a);
57
- upb_msg *upb_msg_new(const upb_msglayout *l, upb_arena *a);
178
+ UPB_INLINE const void *_upb_array_constptr(const upb_array *arr) {
179
+ return (void*)(arr->data & ~(uintptr_t)7);
180
+ }
58
181
 
59
- void upb_msg_addunknown(upb_msg *msg, const char *data, size_t len,
60
- upb_arena *arena);
61
- const char *upb_msg_getunknown(const upb_msg *msg, size_t *len);
182
+ UPB_INLINE void *_upb_array_ptr(upb_array *arr) {
183
+ return (void*)_upb_array_constptr(arr);
184
+ }
185
+
186
+ /* Creates a new array on the given arena. */
187
+ upb_array *_upb_array_new(upb_arena *a, upb_fieldtype_t type);
188
+
189
+ /* Resizes the capacity of the array to be at least min_size. */
190
+ bool _upb_array_realloc(upb_array *arr, size_t min_size, upb_arena *arena);
191
+
192
+ /* Fallback functions for when the accessors require a resize. */
193
+ void *_upb_array_resize_fallback(upb_array **arr_ptr, size_t size,
194
+ upb_fieldtype_t type, upb_arena *arena);
195
+ bool _upb_array_append_fallback(upb_array **arr_ptr, const void *value,
196
+ upb_fieldtype_t type, upb_arena *arena);
197
+
198
+ UPB_INLINE bool _upb_array_reserve(upb_array *arr, size_t size,
199
+ upb_arena *arena) {
200
+ if (arr->size < size) return _upb_array_realloc(arr, size, arena);
201
+ return true;
202
+ }
62
203
 
63
- upb_array *upb_array_new(upb_arena *a);
204
+ UPB_INLINE bool _upb_array_resize(upb_array *arr, size_t size,
205
+ upb_arena *arena) {
206
+ if (!_upb_array_reserve(arr, size, arena)) return false;
207
+ arr->len = size;
208
+ return true;
209
+ }
210
+
211
+ UPB_INLINE const void *_upb_array_accessor(const void *msg, size_t ofs,
212
+ size_t *size) {
213
+ const upb_array *arr = *PTR_AT(msg, ofs, const upb_array*);
214
+ if (arr) {
215
+ if (size) *size = arr->len;
216
+ return _upb_array_constptr(arr);
217
+ } else {
218
+ if (size) *size = 0;
219
+ return NULL;
220
+ }
221
+ }
222
+
223
+ UPB_INLINE void *_upb_array_mutable_accessor(void *msg, size_t ofs,
224
+ size_t *size) {
225
+ upb_array *arr = *PTR_AT(msg, ofs, upb_array*);
226
+ if (arr) {
227
+ if (size) *size = arr->len;
228
+ return _upb_array_ptr(arr);
229
+ } else {
230
+ if (size) *size = 0;
231
+ return NULL;
232
+ }
233
+ }
234
+
235
+ UPB_INLINE void *_upb_array_resize_accessor(void *msg, size_t ofs, size_t size,
236
+ upb_fieldtype_t type,
237
+ upb_arena *arena) {
238
+ upb_array **arr_ptr = PTR_AT(msg, ofs, upb_array*);
239
+ upb_array *arr = *arr_ptr;
240
+ if (!arr || arr->size < size) {
241
+ return _upb_array_resize_fallback(arr_ptr, size, type, arena);
242
+ }
243
+ arr->len = size;
244
+ return _upb_array_ptr(arr);
245
+ }
246
+
247
+
248
+ UPB_INLINE bool _upb_array_append_accessor(void *msg, size_t ofs,
249
+ size_t elem_size,
250
+ upb_fieldtype_t type,
251
+ const void *value,
252
+ upb_arena *arena) {
253
+ upb_array **arr_ptr = PTR_AT(msg, ofs, upb_array*);
254
+ upb_array *arr = *arr_ptr;
255
+ void* ptr;
256
+ if (!arr || arr->len == arr->size) {
257
+ return _upb_array_append_fallback(arr_ptr, value, type, arena);
258
+ }
259
+ ptr = _upb_array_ptr(arr);
260
+ memcpy(PTR_AT(ptr, arr->len * elem_size, char), value, elem_size);
261
+ arr->len++;
262
+ return true;
263
+ }
264
+
265
+ /** upb_map *******************************************************************/
266
+
267
+ /* Right now we use strmaps for everything. We'll likely want to use
268
+ * integer-specific maps for integer-keyed maps.*/
269
+ typedef struct {
270
+ /* Size of key and val, based on the map type. Strings are represented as '0'
271
+ * because they must be handled specially. */
272
+ char key_size;
273
+ char val_size;
274
+
275
+ upb_strtable table;
276
+ } upb_map;
277
+
278
+ /* Map entries aren't actually stored, they are only used during parsing. For
279
+ * parsing, it helps a lot if all map entry messages have the same layout.
280
+ * The compiler and def.c must ensure that all map entries have this layout. */
281
+ typedef struct {
282
+ upb_msg_internal internal;
283
+ union {
284
+ upb_strview str; /* For str/bytes. */
285
+ upb_value val; /* For all other types. */
286
+ } k;
287
+ union {
288
+ upb_strview str; /* For str/bytes. */
289
+ upb_value val; /* For all other types. */
290
+ } v;
291
+ } upb_map_entry;
292
+
293
+ /* Creates a new map on the given arena with this key/value type. */
294
+ upb_map *_upb_map_new(upb_arena *a, size_t key_size, size_t value_size);
295
+
296
+ /* Converting between internal table representation and user values.
297
+ *
298
+ * _upb_map_tokey() and _upb_map_fromkey() are inverses.
299
+ * _upb_map_tovalue() and _upb_map_fromvalue() are inverses.
300
+ *
301
+ * These functions account for the fact that strings are treated differently
302
+ * from other types when stored in a map.
303
+ */
304
+
305
+ UPB_INLINE upb_strview _upb_map_tokey(const void *key, size_t size) {
306
+ if (size == UPB_MAPTYPE_STRING) {
307
+ return *(upb_strview*)key;
308
+ } else {
309
+ return upb_strview_make((const char*)key, size);
310
+ }
311
+ }
312
+
313
+ UPB_INLINE void _upb_map_fromkey(upb_strview key, void* out, size_t size) {
314
+ if (size == UPB_MAPTYPE_STRING) {
315
+ memcpy(out, &key, sizeof(key));
316
+ } else {
317
+ memcpy(out, key.data, size);
318
+ }
319
+ }
320
+
321
+ UPB_INLINE upb_value _upb_map_tovalue(const void *val, size_t size,
322
+ upb_arena *a) {
323
+ upb_value ret = {0};
324
+ if (size == UPB_MAPTYPE_STRING) {
325
+ upb_strview *strp = (upb_strview*)upb_arena_malloc(a, sizeof(*strp));
326
+ *strp = *(upb_strview*)val;
327
+ memcpy(&ret, &strp, sizeof(strp));
328
+ } else {
329
+ memcpy(&ret, val, size);
330
+ }
331
+ return ret;
332
+ }
333
+
334
+ UPB_INLINE void _upb_map_fromvalue(upb_value val, void* out, size_t size) {
335
+ if (size == UPB_MAPTYPE_STRING) {
336
+ const upb_strview *strp = (const upb_strview*)upb_value_getptr(val);
337
+ memcpy(out, strp, sizeof(upb_strview));
338
+ } else {
339
+ memcpy(out, &val, size);
340
+ }
341
+ }
342
+
343
+ /* Map operations, shared by reflection and generated code. */
344
+
345
+ UPB_INLINE size_t _upb_map_size(const upb_map *map) {
346
+ return map->table.t.count;
347
+ }
348
+
349
+ UPB_INLINE bool _upb_map_get(const upb_map *map, const void *key,
350
+ size_t key_size, void *val, size_t val_size) {
351
+ upb_value tabval;
352
+ upb_strview k = _upb_map_tokey(key, key_size);
353
+ bool ret = upb_strtable_lookup2(&map->table, k.data, k.size, &tabval);
354
+ if (ret && val) {
355
+ _upb_map_fromvalue(tabval, val, val_size);
356
+ }
357
+ return ret;
358
+ }
359
+
360
+ UPB_INLINE void* _upb_map_next(const upb_map *map, size_t *iter) {
361
+ upb_strtable_iter it;
362
+ it.t = &map->table;
363
+ it.index = *iter;
364
+ upb_strtable_next(&it);
365
+ *iter = it.index;
366
+ if (upb_strtable_done(&it)) return NULL;
367
+ return (void*)str_tabent(&it);
368
+ }
369
+
370
+ UPB_INLINE bool _upb_map_set(upb_map *map, const void *key, size_t key_size,
371
+ void *val, size_t val_size, upb_arena *arena) {
372
+ upb_strview strkey = _upb_map_tokey(key, key_size);
373
+ upb_value tabval = _upb_map_tovalue(val, val_size, arena);
374
+ upb_alloc *a = upb_arena_alloc(arena);
375
+
376
+ /* TODO(haberman): add overwrite operation to minimize number of lookups. */
377
+ upb_strtable_remove3(&map->table, strkey.data, strkey.size, NULL, a);
378
+ return upb_strtable_insert3(&map->table, strkey.data, strkey.size, tabval, a);
379
+ }
380
+
381
+ UPB_INLINE bool _upb_map_delete(upb_map *map, const void *key, size_t key_size) {
382
+ upb_strview k = _upb_map_tokey(key, key_size);
383
+ return upb_strtable_remove3(&map->table, k.data, k.size, NULL, NULL);
384
+ }
385
+
386
+ UPB_INLINE void _upb_map_clear(upb_map *map) {
387
+ upb_strtable_clear(&map->table);
388
+ }
389
+
390
+ /* Message map operations, these get the map from the message first. */
391
+
392
+ UPB_INLINE size_t _upb_msg_map_size(const upb_msg *msg, size_t ofs) {
393
+ upb_map *map = *UPB_PTR_AT(msg, ofs, upb_map *);
394
+ return map ? _upb_map_size(map) : 0;
395
+ }
396
+
397
+ UPB_INLINE bool _upb_msg_map_get(const upb_msg *msg, size_t ofs,
398
+ const void *key, size_t key_size, void *val,
399
+ size_t val_size) {
400
+ upb_map *map = *UPB_PTR_AT(msg, ofs, upb_map *);
401
+ if (!map) return false;
402
+ return _upb_map_get(map, key, key_size, val, val_size);
403
+ }
404
+
405
+ UPB_INLINE void *_upb_msg_map_next(const upb_msg *msg, size_t ofs,
406
+ size_t *iter) {
407
+ upb_map *map = *UPB_PTR_AT(msg, ofs, upb_map *);
408
+ if (!map) return NULL;
409
+ return _upb_map_next(map, iter);
410
+ }
411
+
412
+ UPB_INLINE bool _upb_msg_map_set(upb_msg *msg, size_t ofs, const void *key,
413
+ size_t key_size, void *val, size_t val_size,
414
+ upb_arena *arena) {
415
+ upb_map **map = PTR_AT(msg, ofs, upb_map *);
416
+ if (!*map) {
417
+ *map = _upb_map_new(arena, key_size, val_size);
418
+ }
419
+ return _upb_map_set(*map, key, key_size, val, val_size, arena);
420
+ }
421
+
422
+ UPB_INLINE bool _upb_msg_map_delete(upb_msg *msg, size_t ofs, const void *key,
423
+ size_t key_size) {
424
+ upb_map *map = *UPB_PTR_AT(msg, ofs, upb_map *);
425
+ if (!map) return false;
426
+ return _upb_map_delete(map, key, key_size);
427
+ }
428
+
429
+ UPB_INLINE void _upb_msg_map_clear(upb_msg *msg, size_t ofs) {
430
+ upb_map *map = *UPB_PTR_AT(msg, ofs, upb_map *);
431
+ if (!map) return;
432
+ _upb_map_clear(map);
433
+ }
434
+
435
+ /* Accessing map key/value from a pointer, used by generated code only. */
436
+
437
+ UPB_INLINE void _upb_msg_map_key(const void* msg, void* key, size_t size) {
438
+ const upb_tabent *ent = (const upb_tabent*)msg;
439
+ uint32_t u32len;
440
+ upb_strview k;
441
+ k.data = upb_tabstr(ent->key, &u32len);
442
+ k.size = u32len;
443
+ _upb_map_fromkey(k, key, size);
444
+ }
445
+
446
+ UPB_INLINE void _upb_msg_map_value(const void* msg, void* val, size_t size) {
447
+ const upb_tabent *ent = (const upb_tabent*)msg;
448
+ upb_value v;
449
+ _upb_value_setval(&v, ent->val.val);
450
+ _upb_map_fromvalue(v, val, size);
451
+ }
452
+
453
+ UPB_INLINE void _upb_msg_map_set_value(void* msg, const void* val, size_t size) {
454
+ upb_tabent *ent = (upb_tabent*)msg;
455
+ /* This is like _upb_map_tovalue() except the entry already exists so we can
456
+ * reuse the allocated upb_strview for string fields. */
457
+ if (size == UPB_MAPTYPE_STRING) {
458
+ upb_strview *strp = (upb_strview*)ent->val.val;
459
+ memcpy(strp, val, sizeof(*strp));
460
+ } else {
461
+ memcpy(&ent->val.val, val, size);
462
+ }
463
+ }
464
+
465
+ #undef PTR_AT
64
466
 
65
467
  #ifdef __cplusplus
66
468
  } /* extern "C" */
67
469
  #endif
68
470
 
471
+ #include "upb/port_undef.inc"
472
+
69
473
  #endif /* UPB_MSG_H_ */