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.
- checksums.yaml +4 -4
- data/Makefile +560 -619
- data/include/grpc/grpc_security.h +8 -0
- data/include/grpc/grpc_security_constants.h +3 -0
- data/include/grpc/impl/codegen/grpc_types.h +7 -5
- data/include/grpc/impl/codegen/port_platform.h +0 -32
- data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
- data/src/core/ext/filters/client_channel/client_channel.cc +406 -261
- data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
- data/src/core/ext/filters/client_channel/config_selector.h +93 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +2 -0
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
- data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +39 -23
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +381 -72
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -48
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +21 -18
- data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +33 -28
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +1 -1
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +327 -123
- data/src/core/ext/filters/client_channel/xds/xds_api.h +72 -7
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +12 -23
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +112 -33
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +10 -10
- data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
- data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
- data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +383 -347
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +19 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +22 -27
- data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
- data/src/core/ext/transport/chttp2/transport/internal.h +13 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
- data/src/core/ext/transport/chttp2/transport/writing.cc +9 -14
- data/src/core/ext/transport/inproc/inproc_transport.cc +35 -15
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +80 -69
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +24 -23
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +66 -56
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +317 -311
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +9 -8
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +163 -169
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +4 -5
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +137 -117
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +105 -87
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +12 -13
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +49 -42
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +81 -65
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +648 -696
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +234 -199
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +13 -13
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +20 -18
- data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +18 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
- data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
- data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
- data/src/core/ext/upb-generated/validate/validate.upb.h +536 -535
- data/src/core/lib/channel/channel_trace.cc +2 -6
- data/src/core/lib/channel/channelz.cc +5 -15
- data/src/core/lib/gpr/log_linux.cc +6 -8
- data/src/core/lib/gpr/log_posix.cc +6 -8
- data/src/core/lib/gpr/string.cc +10 -9
- data/src/core/lib/gpr/string.h +4 -2
- data/src/core/lib/gprpp/global_config_env.cc +8 -6
- data/src/core/lib/http/httpcli.cc +13 -10
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
- data/src/core/lib/iomgr/error_cfstream.cc +9 -8
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
- data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
- data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
- data/src/core/lib/iomgr/ev_posix.cc +2 -0
- data/src/core/lib/iomgr/iomgr.cc +10 -0
- data/src/core/lib/iomgr/iomgr.h +10 -0
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
- data/src/core/lib/iomgr/port.h +1 -21
- data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
- data/src/core/lib/iomgr/resource_quota.cc +34 -31
- data/src/core/lib/iomgr/sockaddr_utils.cc +7 -5
- data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
- data/src/core/lib/iomgr/socket_windows.cc +4 -5
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
- data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
- data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
- data/src/core/lib/iomgr/tcp_custom.cc +1 -1
- data/src/core/lib/iomgr/tcp_custom.h +1 -1
- data/src/core/lib/iomgr/tcp_server.cc +3 -4
- data/src/core/lib/iomgr/tcp_server.h +7 -5
- data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
- data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
- data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
- data/src/core/lib/iomgr/timer_generic.cc +13 -12
- data/src/core/lib/iomgr/udp_server.cc +24 -23
- data/src/core/lib/iomgr/udp_server.h +5 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
- data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
- data/src/core/lib/json/json_reader.cc +20 -21
- data/src/core/lib/security/credentials/credentials.h +5 -3
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -9
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +10 -10
- data/src/core/lib/security/security_connector/security_connector.cc +2 -0
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
- data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
- data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
- data/src/core/lib/security/transport/auth_filters.h +0 -5
- data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
- data/src/core/lib/security/util/json_util.cc +12 -13
- data/src/core/lib/slice/slice.cc +38 -1
- data/src/core/lib/slice/slice_internal.h +1 -0
- data/src/core/lib/surface/call.cc +40 -41
- data/src/core/lib/surface/completion_queue.cc +271 -14
- data/src/core/lib/surface/completion_queue.h +8 -0
- data/src/core/lib/surface/init.cc +2 -0
- data/src/core/lib/surface/server.cc +565 -632
- data/src/core/lib/surface/server.h +34 -12
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/transport.h +6 -0
- data/src/core/lib/uri/uri_parser.cc +8 -15
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -0
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
- data/src/core/tsi/ssl_transport_security.cc +108 -11
- data/src/core/tsi/ssl_transport_security.h +14 -2
- data/src/core/tsi/transport_security_interface.h +5 -0
- data/src/ruby/bin/math_services_pb.rb +4 -4
- data/src/ruby/ext/grpc/extconf.rb +5 -2
- data/src/ruby/ext/grpc/rb_call.c +3 -2
- data/src/ruby/ext/grpc/rb_call.h +4 -0
- data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
- data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +2 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +25 -1
- data/src/ruby/spec/support/services.rb +10 -4
- data/src/ruby/spec/user_agent_spec.rb +74 -0
- data/third_party/boringssl-with-bazel/err_data.c +89 -83
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
- data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +33 -16
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +789 -715
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +17 -14
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +28 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +12 -9
- data/third_party/re2/re2/bitmap256.h +117 -0
- data/third_party/re2/re2/bitstate.cc +385 -0
- data/third_party/re2/re2/compile.cc +1279 -0
- data/third_party/re2/re2/dfa.cc +2130 -0
- data/third_party/re2/re2/filtered_re2.cc +121 -0
- data/third_party/re2/re2/filtered_re2.h +109 -0
- data/third_party/re2/re2/mimics_pcre.cc +197 -0
- data/third_party/re2/re2/nfa.cc +713 -0
- data/third_party/re2/re2/onepass.cc +623 -0
- data/third_party/re2/re2/parse.cc +2464 -0
- data/third_party/re2/re2/perl_groups.cc +119 -0
- data/third_party/re2/re2/pod_array.h +55 -0
- data/third_party/re2/re2/prefilter.cc +710 -0
- data/third_party/re2/re2/prefilter.h +108 -0
- data/third_party/re2/re2/prefilter_tree.cc +407 -0
- data/third_party/re2/re2/prefilter_tree.h +139 -0
- data/third_party/re2/re2/prog.cc +988 -0
- data/third_party/re2/re2/prog.h +436 -0
- data/third_party/re2/re2/re2.cc +1362 -0
- data/third_party/re2/re2/re2.h +1002 -0
- data/third_party/re2/re2/regexp.cc +980 -0
- data/third_party/re2/re2/regexp.h +659 -0
- data/third_party/re2/re2/set.cc +154 -0
- data/third_party/re2/re2/set.h +80 -0
- data/third_party/re2/re2/simplify.cc +657 -0
- data/third_party/re2/re2/sparse_array.h +392 -0
- data/third_party/re2/re2/sparse_set.h +264 -0
- data/third_party/re2/re2/stringpiece.cc +65 -0
- data/third_party/re2/re2/stringpiece.h +210 -0
- data/third_party/re2/re2/tostring.cc +351 -0
- data/third_party/re2/re2/unicode_casefold.cc +582 -0
- data/third_party/re2/re2/unicode_casefold.h +78 -0
- data/third_party/re2/re2/unicode_groups.cc +6269 -0
- data/third_party/re2/re2/unicode_groups.h +67 -0
- data/third_party/re2/re2/walker-inl.h +246 -0
- data/third_party/re2/util/benchmark.h +156 -0
- data/third_party/re2/util/flags.h +26 -0
- data/third_party/re2/util/logging.h +109 -0
- data/third_party/re2/util/malloc_counter.h +19 -0
- data/third_party/re2/util/mix.h +41 -0
- data/third_party/re2/util/mutex.h +148 -0
- data/third_party/re2/util/pcre.cc +1025 -0
- data/third_party/re2/util/pcre.h +681 -0
- data/third_party/re2/util/rune.cc +260 -0
- data/third_party/re2/util/strutil.cc +149 -0
- data/third_party/re2/util/strutil.h +21 -0
- data/third_party/re2/util/test.h +50 -0
- data/third_party/re2/util/utf.h +44 -0
- data/third_party/re2/util/util.h +42 -0
- data/third_party/upb/upb/decode.c +467 -504
- data/third_party/upb/upb/encode.c +163 -121
- data/third_party/upb/upb/msg.c +130 -64
- data/third_party/upb/upb/msg.h +418 -14
- data/third_party/upb/upb/port_def.inc +35 -6
- data/third_party/upb/upb/port_undef.inc +8 -1
- data/third_party/upb/upb/table.c +53 -75
- data/third_party/upb/upb/table.int.h +11 -43
- data/third_party/upb/upb/upb.c +148 -124
- data/third_party/upb/upb/upb.h +65 -147
- data/third_party/upb/upb/upb.hpp +86 -0
- metadata +90 -30
- data/third_party/upb/upb/generated_util.h +0 -105
data/third_party/upb/upb/msg.h
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
/*
|
2
|
-
**
|
3
|
-
**
|
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;
|
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
|
-
/**
|
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
|
-
/*
|
65
|
+
/* Used when a message is not extendable. */
|
50
66
|
typedef struct {
|
51
|
-
|
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
|
-
|
57
|
-
|
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
|
60
|
-
|
61
|
-
|
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 *
|
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_ */
|