grpc 1.30.1 → 1.32.0.pre1
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 +723 -15910
- data/include/grpc/grpc_security.h +31 -14
- data/include/grpc/grpc_security_constants.h +3 -0
- data/include/grpc/impl/codegen/README.md +22 -0
- data/include/grpc/impl/codegen/grpc_types.h +7 -5
- data/include/grpc/impl/codegen/port_platform.h +6 -33
- data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +470 -285
- data/src/core/ext/filters/client_channel/client_channel.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
- 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 +8 -1
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +8 -8
- data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy.h +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -36
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -13
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +29 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -4
- 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 +23 -13
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +18 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +22 -14
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +18 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +385 -78
- 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 +36 -51
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +383 -31
- 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/resolver_result_parsing.h +0 -1
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +38 -32
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
- data/src/core/ext/filters/client_channel/server_address.cc +40 -7
- data/src/core/ext/filters/client_channel/server_address.h +42 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +65 -24
- data/src/core/ext/filters/client_channel/subchannel.h +16 -4
- 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/max_age/max_age_filter.cc +2 -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/client/chttp2_connector.cc +87 -31
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +378 -348
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +7 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +10 -16
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +9 -9
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +256 -279
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +23 -28
- 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 +8 -9
- 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 +18 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +34 -71
- data/src/core/ext/transport/chttp2/transport/writing.cc +15 -19
- data/src/core/ext/transport/inproc/inproc_transport.cc +47 -27
- 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/config/accesslog/v3/accesslog.upb.c +224 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
- data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
- data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
- data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -9
- data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
- data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
- data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
- 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/expr/v1alpha1/syntax.upb.c +234 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
- 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 +39 -39
- 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 +34 -55
- 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/annotations/versioning.upb.c +27 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
- 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.c +11 -11
- data/src/core/ext/upb-generated/validate/validate.upb.h +537 -536
- data/src/core/ext/xds/xds_api.cc +2388 -0
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.h +120 -40
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +56 -25
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel.h +4 -4
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +3 -3
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_secure.cc +2 -5
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +94 -347
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +12 -45
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +2 -2
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +13 -13
- data/src/core/lib/channel/channel_trace.cc +2 -6
- data/src/core/lib/channel/channelz.cc +19 -30
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/channelz_registry.cc +3 -1
- 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/gpr/sync_posix.cc +2 -8
- 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.cc +5 -1
- data/src/core/lib/iomgr/endpoint.h +7 -3
- data/src/core/lib/iomgr/endpoint_cfstream.cc +32 -11
- 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/is_epollexclusive_available.cc +14 -0
- data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
- data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
- 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 +9 -6
- data/src/core/lib/iomgr/sockaddr_utils.h +3 -2
- 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 +33 -17
- data/src/core/lib/iomgr/tcp_custom.h +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +31 -13
- 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/tcp_windows.cc +26 -10
- 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/authorization/authorization_engine.cc +177 -0
- data/src/core/lib/security/authorization/authorization_engine.h +84 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
- data/src/core/lib/security/authorization/evaluate_args.h +59 -0
- data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
- data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
- 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 +64 -43
- 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 +11 -12
- 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/client_auth_filter.cc +10 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
- 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 +52 -53
- data/src/core/lib/surface/call.h +2 -1
- data/src/core/lib/surface/channel.cc +28 -20
- data/src/core/lib/surface/channel.h +12 -2
- data/src/core/lib/surface/completion_queue.cc +0 -5
- data/src/core/lib/surface/init.cc +1 -1
- data/src/core/lib/surface/server.cc +1102 -1347
- data/src/core/lib/surface/server.h +369 -71
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/authority_override.cc +38 -0
- data/src/core/lib/transport/authority_override.h +32 -0
- data/src/core/lib/transport/connectivity_state.cc +18 -13
- data/src/core/lib/transport/connectivity_state.h +18 -6
- data/src/core/lib/transport/error_utils.cc +13 -0
- data/src/core/lib/transport/error_utils.h +6 -0
- data/src/core/lib/transport/static_metadata.cc +295 -276
- data/src/core/lib/transport/static_metadata.h +80 -73
- data/src/core/lib/transport/transport.h +13 -0
- data/src/core/lib/uri/uri_parser.cc +30 -35
- data/src/core/lib/uri/uri_parser.h +3 -1
- 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 +24 -0
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
- data/src/core/tsi/ssl_transport_security.cc +102 -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 +54 -10
- data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -4
- 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/channel_credentials_spec.rb +10 -0
- data/src/ruby/spec/generic/active_call_spec.rb +19 -8
- 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/user_agent_spec.rb +74 -0
- data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
- data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
- data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
- data/third_party/abseil-cpp/absl/status/status.cc +447 -0
- data/third_party/abseil-cpp/absl/status/status.h +428 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
- data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
- data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
- data/third_party/abseil-cpp/absl/types/variant.h +861 -0
- data/third_party/boringssl-with-bazel/err_data.c +266 -254
- 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 +159 -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/hpke/hpke.c +456 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -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_sig.c +20 -0
- 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/arm_arch.h +52 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +72 -23
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
- 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 +800 -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 +21 -14
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +38 -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/t1_lib.cc +34 -9
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +17 -9
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
- 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 +517 -505
- data/third_party/upb/upb/encode.c +165 -123
- 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 -86
- data/third_party/upb/upb/table.int.h +11 -52
- data/third_party/upb/upb/upb.c +151 -125
- data/third_party/upb/upb/upb.h +91 -147
- data/third_party/upb/upb/upb.hpp +88 -0
- metadata +310 -148
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -1906
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -35
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -418
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -197
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -378
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -53
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1447
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -218
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -305
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -328
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -78
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -897
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -322
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -72
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -642
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -673
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -518
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -89
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -392
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -53
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -240
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -33
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -266
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -324
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -53
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -399
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -33
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -527
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -53
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -199
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -33
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -3032
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -134
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -53
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -725
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1132
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -50
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -134
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -144
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
- data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -87
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -112
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -62
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -249
- data/src/core/lib/security/transport/target_authority_table.cc +0 -75
- data/src/core/lib/security/transport/target_authority_table.h +0 -40
- data/src/core/lib/slice/slice_hash_table.h +0 -199
- data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
- data/third_party/upb/upb/generated_util.h +0 -105
@@ -0,0 +1,44 @@
|
|
1
|
+
/*
|
2
|
+
* The authors of this software are Rob Pike and Ken Thompson.
|
3
|
+
* Copyright (c) 2002 by Lucent Technologies.
|
4
|
+
* Permission to use, copy, modify, and distribute this software for any
|
5
|
+
* purpose without fee is hereby granted, provided that this entire notice
|
6
|
+
* is included in all copies of any software which is or includes a copy
|
7
|
+
* or modification of this software and in all copies of the supporting
|
8
|
+
* documentation for such software.
|
9
|
+
* THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
|
10
|
+
* WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
|
11
|
+
* REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
|
12
|
+
* OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
|
13
|
+
*
|
14
|
+
* This file and rune.cc have been converted to compile as C++ code
|
15
|
+
* in name space re2.
|
16
|
+
*/
|
17
|
+
|
18
|
+
#ifndef UTIL_UTF_H_
|
19
|
+
#define UTIL_UTF_H_
|
20
|
+
|
21
|
+
#include <stdint.h>
|
22
|
+
|
23
|
+
namespace re2 {
|
24
|
+
|
25
|
+
typedef signed int Rune; /* Code-point values in Unicode 4.0 are 21 bits wide.*/
|
26
|
+
|
27
|
+
enum
|
28
|
+
{
|
29
|
+
UTFmax = 4, /* maximum bytes per rune */
|
30
|
+
Runesync = 0x80, /* cannot represent part of a UTF sequence (<) */
|
31
|
+
Runeself = 0x80, /* rune and UTF sequences are the same (<) */
|
32
|
+
Runeerror = 0xFFFD, /* decoding error in UTF */
|
33
|
+
Runemax = 0x10FFFF, /* maximum rune value */
|
34
|
+
};
|
35
|
+
|
36
|
+
int runetochar(char* s, const Rune* r);
|
37
|
+
int chartorune(Rune* r, const char* s);
|
38
|
+
int fullrune(const char* s, int n);
|
39
|
+
int utflen(const char* s);
|
40
|
+
char* utfrune(const char*, Rune);
|
41
|
+
|
42
|
+
} // namespace re2
|
43
|
+
|
44
|
+
#endif // UTIL_UTF_H_
|
@@ -0,0 +1,42 @@
|
|
1
|
+
// Copyright 2009 The RE2 Authors. All Rights Reserved.
|
2
|
+
// Use of this source code is governed by a BSD-style
|
3
|
+
// license that can be found in the LICENSE file.
|
4
|
+
|
5
|
+
#ifndef UTIL_UTIL_H_
|
6
|
+
#define UTIL_UTIL_H_
|
7
|
+
|
8
|
+
#define arraysize(array) (sizeof(array)/sizeof((array)[0]))
|
9
|
+
|
10
|
+
#ifndef ATTRIBUTE_NORETURN
|
11
|
+
#if defined(__GNUC__)
|
12
|
+
#define ATTRIBUTE_NORETURN __attribute__((noreturn))
|
13
|
+
#elif defined(_MSC_VER)
|
14
|
+
#define ATTRIBUTE_NORETURN __declspec(noreturn)
|
15
|
+
#else
|
16
|
+
#define ATTRIBUTE_NORETURN
|
17
|
+
#endif
|
18
|
+
#endif
|
19
|
+
|
20
|
+
#ifndef ATTRIBUTE_UNUSED
|
21
|
+
#if defined(__GNUC__)
|
22
|
+
#define ATTRIBUTE_UNUSED __attribute__((unused))
|
23
|
+
#else
|
24
|
+
#define ATTRIBUTE_UNUSED
|
25
|
+
#endif
|
26
|
+
#endif
|
27
|
+
|
28
|
+
#ifndef FALLTHROUGH_INTENDED
|
29
|
+
#if defined(__clang__)
|
30
|
+
#define FALLTHROUGH_INTENDED [[clang::fallthrough]]
|
31
|
+
#elif defined(__GNUC__) && __GNUC__ >= 7
|
32
|
+
#define FALLTHROUGH_INTENDED [[gnu::fallthrough]]
|
33
|
+
#else
|
34
|
+
#define FALLTHROUGH_INTENDED do {} while (0)
|
35
|
+
#endif
|
36
|
+
#endif
|
37
|
+
|
38
|
+
#ifndef NO_THREAD_SAFETY_ANALYSIS
|
39
|
+
#define NO_THREAD_SAFETY_ANALYSIS
|
40
|
+
#endif
|
41
|
+
|
42
|
+
#endif // UTIL_UTIL_H_
|
@@ -1,609 +1,621 @@
|
|
1
1
|
|
2
|
+
#include <setjmp.h>
|
2
3
|
#include <string.h>
|
3
|
-
|
4
|
+
|
4
5
|
#include "upb/decode.h"
|
6
|
+
#include "upb/upb.h"
|
5
7
|
|
6
8
|
#include "upb/port_def.inc"
|
7
9
|
|
8
10
|
/* Maps descriptor type -> upb field type. */
|
9
|
-
const uint8_t
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
11
|
+
static const uint8_t desctype_to_fieldtype[] = {
|
12
|
+
-1, /* invalid descriptor type */
|
13
|
+
UPB_TYPE_DOUBLE, /* DOUBLE */
|
14
|
+
UPB_TYPE_FLOAT, /* FLOAT */
|
15
|
+
UPB_TYPE_INT64, /* INT64 */
|
16
|
+
UPB_TYPE_UINT64, /* UINT64 */
|
17
|
+
UPB_TYPE_INT32, /* INT32 */
|
18
|
+
UPB_TYPE_UINT64, /* FIXED64 */
|
19
|
+
UPB_TYPE_UINT32, /* FIXED32 */
|
20
|
+
UPB_TYPE_BOOL, /* BOOL */
|
21
|
+
UPB_TYPE_STRING, /* STRING */
|
22
|
+
UPB_TYPE_MESSAGE, /* GROUP */
|
23
|
+
UPB_TYPE_MESSAGE, /* MESSAGE */
|
24
|
+
UPB_TYPE_BYTES, /* BYTES */
|
25
|
+
UPB_TYPE_UINT32, /* UINT32 */
|
26
|
+
UPB_TYPE_ENUM, /* ENUM */
|
27
|
+
UPB_TYPE_INT32, /* SFIXED32 */
|
28
|
+
UPB_TYPE_INT64, /* SFIXED64 */
|
29
|
+
UPB_TYPE_INT32, /* SINT32 */
|
30
|
+
UPB_TYPE_INT64, /* SINT64 */
|
31
|
+
};
|
32
|
+
|
33
|
+
/* Maps descriptor type -> upb map size. */
|
34
|
+
static const uint8_t desctype_to_mapsize[] = {
|
35
|
+
-1, /* invalid descriptor type */
|
36
|
+
8, /* DOUBLE */
|
37
|
+
4, /* FLOAT */
|
38
|
+
8, /* INT64 */
|
39
|
+
8, /* UINT64 */
|
40
|
+
4, /* INT32 */
|
41
|
+
8, /* FIXED64 */
|
42
|
+
4, /* FIXED32 */
|
43
|
+
1, /* BOOL */
|
44
|
+
UPB_MAPTYPE_STRING, /* STRING */
|
45
|
+
sizeof(void *), /* GROUP */
|
46
|
+
sizeof(void *), /* MESSAGE */
|
47
|
+
UPB_MAPTYPE_STRING, /* BYTES */
|
48
|
+
4, /* UINT32 */
|
49
|
+
4, /* ENUM */
|
50
|
+
4, /* SFIXED32 */
|
51
|
+
8, /* SFIXED64 */
|
52
|
+
4, /* SINT32 */
|
53
|
+
8, /* SINT64 */
|
54
|
+
};
|
55
|
+
|
56
|
+
static const unsigned fixed32_ok = (1 << UPB_DTYPE_FLOAT) |
|
57
|
+
(1 << UPB_DTYPE_FIXED32) |
|
58
|
+
(1 << UPB_DTYPE_SFIXED32);
|
59
|
+
|
60
|
+
static const unsigned fixed64_ok = (1 << UPB_DTYPE_DOUBLE) |
|
61
|
+
(1 << UPB_DTYPE_FIXED64) |
|
62
|
+
(1 << UPB_DTYPE_SFIXED64);
|
63
|
+
|
64
|
+
/* Op: an action to be performed for a wire-type/field-type combination. */
|
65
|
+
#define OP_SCALAR_LG2(n) (n) /* n in [0, 2, 3] => op in [0, 2, 3] */
|
66
|
+
#define OP_STRING 4
|
67
|
+
#define OP_BYTES 5
|
68
|
+
#define OP_SUBMSG 6
|
69
|
+
/* Ops above are scalar-only. Repeated fields can use any op. */
|
70
|
+
#define OP_FIXPCK_LG2(n) (n + 5) /* n in [2, 3] => op in [7, 8] */
|
71
|
+
#define OP_VARPCK_LG2(n) (n + 9) /* n in [0, 2, 3] => op in [9, 11, 12] */
|
72
|
+
|
73
|
+
static const int8_t varint_ops[19] = {
|
74
|
+
-1, /* field not found */
|
75
|
+
-1, /* DOUBLE */
|
76
|
+
-1, /* FLOAT */
|
77
|
+
OP_SCALAR_LG2(3), /* INT64 */
|
78
|
+
OP_SCALAR_LG2(3), /* UINT64 */
|
79
|
+
OP_SCALAR_LG2(2), /* INT32 */
|
80
|
+
-1, /* FIXED64 */
|
81
|
+
-1, /* FIXED32 */
|
82
|
+
OP_SCALAR_LG2(0), /* BOOL */
|
83
|
+
-1, /* STRING */
|
84
|
+
-1, /* GROUP */
|
85
|
+
-1, /* MESSAGE */
|
86
|
+
-1, /* BYTES */
|
87
|
+
OP_SCALAR_LG2(2), /* UINT32 */
|
88
|
+
OP_SCALAR_LG2(2), /* ENUM */
|
89
|
+
-1, /* SFIXED32 */
|
90
|
+
-1, /* SFIXED64 */
|
91
|
+
OP_SCALAR_LG2(2), /* SINT32 */
|
92
|
+
OP_SCALAR_LG2(3), /* SINT64 */
|
93
|
+
};
|
94
|
+
|
95
|
+
static const int8_t delim_ops[37] = {
|
96
|
+
/* For non-repeated field type. */
|
97
|
+
-1, /* field not found */
|
98
|
+
-1, /* DOUBLE */
|
99
|
+
-1, /* FLOAT */
|
100
|
+
-1, /* INT64 */
|
101
|
+
-1, /* UINT64 */
|
102
|
+
-1, /* INT32 */
|
103
|
+
-1, /* FIXED64 */
|
104
|
+
-1, /* FIXED32 */
|
105
|
+
-1, /* BOOL */
|
106
|
+
OP_STRING, /* STRING */
|
107
|
+
-1, /* GROUP */
|
108
|
+
OP_SUBMSG, /* MESSAGE */
|
109
|
+
OP_BYTES, /* BYTES */
|
110
|
+
-1, /* UINT32 */
|
111
|
+
-1, /* ENUM */
|
112
|
+
-1, /* SFIXED32 */
|
113
|
+
-1, /* SFIXED64 */
|
114
|
+
-1, /* SINT32 */
|
115
|
+
-1, /* SINT64 */
|
116
|
+
/* For repeated field type. */
|
117
|
+
OP_FIXPCK_LG2(3), /* REPEATED DOUBLE */
|
118
|
+
OP_FIXPCK_LG2(2), /* REPEATED FLOAT */
|
119
|
+
OP_VARPCK_LG2(3), /* REPEATED INT64 */
|
120
|
+
OP_VARPCK_LG2(3), /* REPEATED UINT64 */
|
121
|
+
OP_VARPCK_LG2(2), /* REPEATED INT32 */
|
122
|
+
OP_FIXPCK_LG2(3), /* REPEATED FIXED64 */
|
123
|
+
OP_FIXPCK_LG2(2), /* REPEATED FIXED32 */
|
124
|
+
OP_VARPCK_LG2(0), /* REPEATED BOOL */
|
125
|
+
OP_STRING, /* REPEATED STRING */
|
126
|
+
OP_SUBMSG, /* REPEATED GROUP */
|
127
|
+
OP_SUBMSG, /* REPEATED MESSAGE */
|
128
|
+
OP_BYTES, /* REPEATED BYTES */
|
129
|
+
OP_VARPCK_LG2(2), /* REPEATED UINT32 */
|
130
|
+
OP_VARPCK_LG2(2), /* REPEATED ENUM */
|
131
|
+
OP_FIXPCK_LG2(2), /* REPEATED SFIXED32 */
|
132
|
+
OP_FIXPCK_LG2(3), /* REPEATED SFIXED64 */
|
133
|
+
OP_VARPCK_LG2(2), /* REPEATED SINT32 */
|
134
|
+
OP_VARPCK_LG2(3), /* REPEATED SINT64 */
|
29
135
|
};
|
30
136
|
|
31
137
|
/* Data pertaining to the parse. */
|
32
138
|
typedef struct {
|
33
|
-
const char *
|
34
|
-
const char *field_start; /* Start of this field. */
|
35
|
-
const char *limit; /* End of delimited region or end of buffer. */
|
139
|
+
const char *limit; /* End of delimited region or end of buffer. */
|
36
140
|
upb_arena *arena;
|
37
141
|
int depth;
|
38
|
-
uint32_t end_group;
|
142
|
+
uint32_t end_group; /* Set to field number of END_GROUP tag, if any. */
|
143
|
+
jmp_buf err;
|
39
144
|
} upb_decstate;
|
40
145
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
}
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
static
|
52
|
-
|
53
|
-
|
54
|
-
static
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
CHK(upb_decode_varint(ptr, limit, &u64) && u64 <= UINT32_MAX);
|
77
|
-
*val = (uint32_t)u64;
|
78
|
-
return true;
|
79
|
-
}
|
80
|
-
|
81
|
-
static bool upb_decode_64bit(const char **ptr, const char *limit,
|
82
|
-
uint64_t *val) {
|
83
|
-
CHK(limit - *ptr >= 8);
|
84
|
-
memcpy(val, *ptr, 8);
|
85
|
-
*ptr += 8;
|
86
|
-
return true;
|
87
|
-
}
|
88
|
-
|
89
|
-
static bool upb_decode_32bit(const char **ptr, const char *limit,
|
90
|
-
uint32_t *val) {
|
91
|
-
CHK(limit - *ptr >= 4);
|
92
|
-
memcpy(val, *ptr, 4);
|
93
|
-
*ptr += 4;
|
94
|
-
return true;
|
95
|
-
}
|
96
|
-
|
97
|
-
static int32_t upb_zzdecode_32(uint32_t n) {
|
98
|
-
return (n >> 1) ^ -(int32_t)(n & 1);
|
99
|
-
}
|
100
|
-
|
101
|
-
static int64_t upb_zzdecode_64(uint64_t n) {
|
102
|
-
return (n >> 1) ^ -(int64_t)(n & 1);
|
103
|
-
}
|
104
|
-
|
105
|
-
static bool upb_decode_string(const char **ptr, const char *limit,
|
106
|
-
int *outlen) {
|
107
|
-
uint32_t len;
|
108
|
-
|
109
|
-
CHK(upb_decode_varint32(ptr, limit, &len) &&
|
110
|
-
len < INT32_MAX &&
|
111
|
-
limit - *ptr >= (int32_t)len);
|
112
|
-
|
113
|
-
*outlen = len;
|
114
|
-
return true;
|
115
|
-
}
|
116
|
-
|
117
|
-
static void upb_set32(void *msg, size_t ofs, uint32_t val) {
|
118
|
-
memcpy((char*)msg + ofs, &val, sizeof(val));
|
119
|
-
}
|
120
|
-
|
121
|
-
static bool upb_append_unknown(upb_decstate *d, upb_decframe *frame) {
|
122
|
-
upb_msg_addunknown(frame->msg, d->field_start, d->ptr - d->field_start,
|
123
|
-
d->arena);
|
124
|
-
return true;
|
125
|
-
}
|
126
|
-
|
127
|
-
|
128
|
-
static bool upb_skip_unknownfielddata(upb_decstate *d, uint32_t tag,
|
129
|
-
uint32_t group_fieldnum) {
|
130
|
-
switch (tag & 7) {
|
131
|
-
case UPB_WIRE_TYPE_VARINT: {
|
132
|
-
uint64_t val;
|
133
|
-
return upb_decode_varint(&d->ptr, d->limit, &val);
|
134
|
-
}
|
135
|
-
case UPB_WIRE_TYPE_32BIT: {
|
136
|
-
uint32_t val;
|
137
|
-
return upb_decode_32bit(&d->ptr, d->limit, &val);
|
146
|
+
typedef union {
|
147
|
+
bool bool_val;
|
148
|
+
uint32_t uint32_val;
|
149
|
+
uint64_t uint64_val;
|
150
|
+
upb_strview str_val;
|
151
|
+
} wireval;
|
152
|
+
|
153
|
+
static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
154
|
+
const upb_msglayout *layout);
|
155
|
+
|
156
|
+
UPB_NORETURN static void decode_err(upb_decstate *d) { longjmp(d->err, 1); }
|
157
|
+
|
158
|
+
void decode_verifyutf8(upb_decstate *d, const char *buf, int len) {
|
159
|
+
static const uint8_t utf8_offset[] = {
|
160
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
161
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
162
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
163
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
164
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
165
|
+
1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
166
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
167
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
168
|
+
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
169
|
+
2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
170
|
+
4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
|
171
|
+
};
|
172
|
+
|
173
|
+
int i, j;
|
174
|
+
uint8_t offset;
|
175
|
+
|
176
|
+
i = 0;
|
177
|
+
while (i < len) {
|
178
|
+
offset = utf8_offset[(uint8_t)buf[i]];
|
179
|
+
if (offset == 0 || i + offset > len) {
|
180
|
+
decode_err(d);
|
138
181
|
}
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
case UPB_WIRE_TYPE_DELIMITED: {
|
144
|
-
int len;
|
145
|
-
CHK(upb_decode_string(&d->ptr, d->limit, &len));
|
146
|
-
d->ptr += len;
|
147
|
-
return true;
|
182
|
+
for (j = i + 1; j < i + offset; j++) {
|
183
|
+
if ((buf[j] & 0xc0) != 0x80) {
|
184
|
+
decode_err(d);
|
185
|
+
}
|
148
186
|
}
|
149
|
-
|
150
|
-
return upb_skip_unknowngroup(d, tag >> 3);
|
151
|
-
case UPB_WIRE_TYPE_END_GROUP:
|
152
|
-
return (tag >> 3) == group_fieldnum;
|
187
|
+
i += offset;
|
153
188
|
}
|
154
|
-
|
189
|
+
if (i != len) decode_err(d);
|
155
190
|
}
|
156
191
|
|
157
|
-
static bool
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
CHK(upb_skip_unknownfielddata(d, tag, field_number));
|
192
|
+
static bool decode_reserve(upb_decstate *d, upb_array *arr, size_t elem) {
|
193
|
+
bool need_realloc = arr->size - arr->len < elem;
|
194
|
+
if (need_realloc && !_upb_array_realloc(arr, arr->len + elem, d->arena)) {
|
195
|
+
decode_err(d);
|
162
196
|
}
|
163
|
-
|
164
|
-
CHK(d->end_group == field_number);
|
165
|
-
d->end_group = 0;
|
166
|
-
return true;
|
197
|
+
return need_realloc;
|
167
198
|
}
|
168
199
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
void *new_data;
|
176
|
-
upb_alloc *alloc = upb_arena_alloc(arena);
|
177
|
-
|
178
|
-
while (new_size < needed) {
|
179
|
-
new_size *= 2;
|
180
|
-
}
|
200
|
+
UPB_NOINLINE
|
201
|
+
static const char *decode_longvarint64(upb_decstate *d, const char *ptr,
|
202
|
+
const char *limit, uint64_t *val) {
|
203
|
+
uint8_t byte;
|
204
|
+
int bitpos = 0;
|
205
|
+
uint64_t out = 0;
|
181
206
|
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
207
|
+
do {
|
208
|
+
if (bitpos >= 70 || ptr == limit) decode_err(d);
|
209
|
+
byte = *ptr;
|
210
|
+
out |= (uint64_t)(byte & 0x7F) << bitpos;
|
211
|
+
ptr++;
|
212
|
+
bitpos += 7;
|
213
|
+
} while (byte & 0x80);
|
186
214
|
|
187
|
-
|
188
|
-
|
189
|
-
return true;
|
215
|
+
*val = out;
|
216
|
+
return ptr;
|
190
217
|
}
|
191
218
|
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
219
|
+
UPB_FORCEINLINE
|
220
|
+
static const char *decode_varint64(upb_decstate *d, const char *ptr,
|
221
|
+
const char *limit, uint64_t *val) {
|
222
|
+
if (UPB_LIKELY(ptr < limit && (*ptr & 0x80) == 0)) {
|
223
|
+
*val = (uint8_t)*ptr;
|
224
|
+
return ptr + 1;
|
225
|
+
} else {
|
226
|
+
return decode_longvarint64(d, ptr, limit, val);
|
196
227
|
}
|
197
|
-
return (char*)arr->data + (arr->len * elem_size);
|
198
228
|
}
|
199
229
|
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
return true;
|
209
|
-
}
|
210
|
-
|
211
|
-
static upb_array *upb_getarr(upb_decframe *frame,
|
212
|
-
const upb_msglayout_field *field) {
|
213
|
-
UPB_ASSERT(field->label == UPB_LABEL_REPEATED);
|
214
|
-
return *(upb_array**)&frame->msg[field->offset];
|
230
|
+
static const char *decode_varint32(upb_decstate *d, const char *ptr,
|
231
|
+
const char *limit, uint32_t *val) {
|
232
|
+
uint64_t u64;
|
233
|
+
ptr = decode_varint64(d, ptr, limit, &u64);
|
234
|
+
if (u64 > UINT32_MAX) decode_err(d);
|
235
|
+
*val = (uint32_t)u64;
|
236
|
+
return ptr;
|
215
237
|
}
|
216
238
|
|
217
|
-
static
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
239
|
+
static void decode_munge(int type, wireval *val) {
|
240
|
+
switch (type) {
|
241
|
+
case UPB_DESCRIPTOR_TYPE_BOOL:
|
242
|
+
val->bool_val = val->uint64_val != 0;
|
243
|
+
break;
|
244
|
+
case UPB_DESCRIPTOR_TYPE_SINT32: {
|
245
|
+
uint32_t n = val->uint32_val;
|
246
|
+
val->uint32_val = (n >> 1) ^ -(int32_t)(n & 1);
|
247
|
+
break;
|
248
|
+
}
|
249
|
+
case UPB_DESCRIPTOR_TYPE_SINT64: {
|
250
|
+
uint64_t n = val->uint64_val;
|
251
|
+
val->uint64_val = (n >> 1) ^ -(int64_t)(n & 1);
|
252
|
+
break;
|
253
|
+
}
|
254
|
+
case UPB_DESCRIPTOR_TYPE_INT32:
|
255
|
+
case UPB_DESCRIPTOR_TYPE_UINT32:
|
256
|
+
if (!_upb_isle()) {
|
257
|
+
/* The next stage will memcpy(dst, &val, 4) */
|
258
|
+
val->uint32_val = val->uint64_val;
|
259
|
+
}
|
260
|
+
break;
|
225
261
|
}
|
226
|
-
|
227
|
-
return arr;
|
228
262
|
}
|
229
263
|
|
230
|
-
static
|
231
|
-
|
232
|
-
|
233
|
-
upb_msg **submsg = (void*)(frame->msg + field->offset);
|
234
|
-
*subm = frame->layout->submsgs[field->submsg_index];
|
235
|
-
|
236
|
-
UPB_ASSERT(field->label != UPB_LABEL_REPEATED);
|
264
|
+
static const upb_msglayout_field *upb_find_field(const upb_msglayout *l,
|
265
|
+
uint32_t field_number) {
|
266
|
+
static upb_msglayout_field none = {0, 0, 0, 0, 0, 0};
|
237
267
|
|
238
|
-
|
239
|
-
|
240
|
-
|
268
|
+
/* Lots of optimization opportunities here. */
|
269
|
+
int i;
|
270
|
+
if (l == NULL) return &none;
|
271
|
+
for (i = 0; i < l->field_count; i++) {
|
272
|
+
if (l->fields[i].number == field_number) {
|
273
|
+
return &l->fields[i];
|
274
|
+
}
|
241
275
|
}
|
242
276
|
|
243
|
-
return
|
277
|
+
return &none; /* Unknown field. */
|
244
278
|
}
|
245
279
|
|
246
|
-
static upb_msg *
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
upb_array *arr = upb_getorcreatearr(frame, field);
|
251
|
-
|
252
|
-
UPB_ASSERT(field->label == UPB_LABEL_REPEATED);
|
253
|
-
UPB_ASSERT(field->descriptortype == UPB_DESCRIPTOR_TYPE_MESSAGE ||
|
254
|
-
field->descriptortype == UPB_DESCRIPTOR_TYPE_GROUP);
|
255
|
-
|
256
|
-
*subm = frame->layout->submsgs[field->submsg_index];
|
257
|
-
submsg = upb_msg_new(*subm, frame->state->arena);
|
258
|
-
CHK(submsg);
|
259
|
-
upb_array_add(arr, 1, sizeof(submsg), &submsg, frame->state->arena);
|
260
|
-
|
261
|
-
return submsg;
|
280
|
+
static upb_msg *decode_newsubmsg(upb_decstate *d, const upb_msglayout *layout,
|
281
|
+
const upb_msglayout_field *field) {
|
282
|
+
const upb_msglayout *subl = layout->submsgs[field->submsg_index];
|
283
|
+
return _upb_msg_new(subl, d->arena);
|
262
284
|
}
|
263
285
|
|
264
|
-
static void
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
286
|
+
static void decode_tosubmsg(upb_decstate *d, upb_msg *submsg,
|
287
|
+
const upb_msglayout *layout,
|
288
|
+
const upb_msglayout_field *field, upb_strview val) {
|
289
|
+
const upb_msglayout *subl = layout->submsgs[field->submsg_index];
|
290
|
+
const char *saved_limit = d->limit;
|
291
|
+
if (--d->depth < 0) decode_err(d);
|
292
|
+
d->limit = val.data + val.size;
|
293
|
+
decode_msg(d, val.data, submsg, subl);
|
294
|
+
d->limit = saved_limit;
|
295
|
+
if (d->end_group != 0) decode_err(d);
|
296
|
+
d->depth++;
|
275
297
|
}
|
276
298
|
|
277
|
-
static
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
field_mem = upb_array_reserve(arr, 1, size, frame->state->arena);
|
287
|
-
CHK(field_mem);
|
288
|
-
}
|
289
|
-
|
290
|
-
memcpy(field_mem, val, size);
|
291
|
-
return true;
|
299
|
+
static const char *decode_group(upb_decstate *d, const char *ptr,
|
300
|
+
upb_msg *submsg, const upb_msglayout *subl,
|
301
|
+
uint32_t number) {
|
302
|
+
if (--d->depth < 0) decode_err(d);
|
303
|
+
ptr = decode_msg(d, ptr, submsg, subl);
|
304
|
+
if (d->end_group != number) decode_err(d);
|
305
|
+
d->end_group = 0;
|
306
|
+
d->depth++;
|
307
|
+
return ptr;
|
292
308
|
}
|
293
309
|
|
294
|
-
static
|
310
|
+
static const char *decode_togroup(upb_decstate *d, const char *ptr,
|
311
|
+
upb_msg *submsg, const upb_msglayout *layout,
|
295
312
|
const upb_msglayout_field *field) {
|
296
|
-
|
297
|
-
|
298
|
-
UPB_ASSERT(arr->len < arr->size);
|
299
|
-
arr->len++;
|
300
|
-
} else if (field->presence < 0) {
|
301
|
-
upb_setoneofcase(frame, field);
|
302
|
-
} else if (field->presence > 0) {
|
303
|
-
upb_sethasbit(frame, field);
|
304
|
-
}
|
313
|
+
const upb_msglayout *subl = layout->submsgs[field->submsg_index];
|
314
|
+
return decode_group(d, ptr, submsg, subl, field->number);
|
305
315
|
}
|
306
316
|
|
307
|
-
static
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
d->limit = saved_limit;
|
315
|
-
CHK(d->end_group == 0);
|
316
|
-
return true;
|
317
|
-
}
|
317
|
+
static const char *decode_toarray(upb_decstate *d, const char *ptr,
|
318
|
+
upb_msg *msg, const upb_msglayout *layout,
|
319
|
+
const upb_msglayout_field *field, wireval val,
|
320
|
+
int op) {
|
321
|
+
upb_array **arrp = UPB_PTR_AT(msg, field->offset, void);
|
322
|
+
upb_array *arr = *arrp;
|
323
|
+
void *mem;
|
318
324
|
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
CHK(d->end_group == field_number);
|
326
|
-
d->end_group = 0;
|
327
|
-
return true;
|
328
|
-
}
|
329
|
-
|
330
|
-
static bool upb_decode_varintfield(upb_decstate *d, upb_decframe *frame,
|
331
|
-
const upb_msglayout_field *field) {
|
332
|
-
uint64_t val;
|
333
|
-
CHK(upb_decode_varint(&d->ptr, d->limit, &val));
|
325
|
+
if (!arr) {
|
326
|
+
upb_fieldtype_t type = desctype_to_fieldtype[field->descriptortype];
|
327
|
+
arr = _upb_array_new(d->arena, type);
|
328
|
+
if (!arr) decode_err(d);
|
329
|
+
*arrp = arr;
|
330
|
+
}
|
334
331
|
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
case
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
332
|
+
decode_reserve(d, arr, 1);
|
333
|
+
|
334
|
+
switch (op) {
|
335
|
+
case OP_SCALAR_LG2(0):
|
336
|
+
case OP_SCALAR_LG2(2):
|
337
|
+
case OP_SCALAR_LG2(3):
|
338
|
+
/* Append scalar value. */
|
339
|
+
mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << op, void);
|
340
|
+
arr->len++;
|
341
|
+
memcpy(mem, &val, 1 << op);
|
342
|
+
return ptr;
|
343
|
+
case OP_STRING:
|
344
|
+
decode_verifyutf8(d, val.str_val.data, val.str_val.size);
|
345
|
+
/* Fallthrough. */
|
346
|
+
case OP_BYTES:
|
347
|
+
/* Append bytes. */
|
348
|
+
mem =
|
349
|
+
UPB_PTR_AT(_upb_array_ptr(arr), arr->len * sizeof(upb_strview), void);
|
350
|
+
arr->len++;
|
351
|
+
memcpy(mem, &val, sizeof(upb_strview));
|
352
|
+
return ptr;
|
353
|
+
case OP_SUBMSG: {
|
354
|
+
/* Append submessage / group. */
|
355
|
+
upb_msg *submsg = decode_newsubmsg(d, layout, field);
|
356
|
+
*UPB_PTR_AT(_upb_array_ptr(arr), arr->len * sizeof(void *), upb_msg *) =
|
357
|
+
submsg;
|
358
|
+
arr->len++;
|
359
|
+
if (UPB_UNLIKELY(field->descriptortype == UPB_DTYPE_GROUP)) {
|
360
|
+
ptr = decode_togroup(d, ptr, submsg, layout, field);
|
361
|
+
} else {
|
362
|
+
decode_tosubmsg(d, submsg, layout, field, val.str_val);
|
363
|
+
}
|
364
|
+
return ptr;
|
351
365
|
}
|
352
|
-
case
|
353
|
-
|
354
|
-
|
355
|
-
|
366
|
+
case OP_FIXPCK_LG2(2):
|
367
|
+
case OP_FIXPCK_LG2(3): {
|
368
|
+
/* Fixed packed. */
|
369
|
+
int lg2 = op - OP_FIXPCK_LG2(0);
|
370
|
+
int mask = (1 << lg2) - 1;
|
371
|
+
size_t count = val.str_val.size >> lg2;
|
372
|
+
if ((val.str_val.size & mask) != 0) {
|
373
|
+
decode_err(d); /* Length isn't a round multiple of elem size. */
|
374
|
+
}
|
375
|
+
decode_reserve(d, arr, count);
|
376
|
+
mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void);
|
377
|
+
arr->len += count;
|
378
|
+
memcpy(mem, val.str_val.data, val.str_val.size);
|
379
|
+
return ptr;
|
356
380
|
}
|
357
|
-
case
|
358
|
-
|
359
|
-
|
360
|
-
|
381
|
+
case OP_VARPCK_LG2(0):
|
382
|
+
case OP_VARPCK_LG2(2):
|
383
|
+
case OP_VARPCK_LG2(3): {
|
384
|
+
/* Varint packed. */
|
385
|
+
int lg2 = op - OP_VARPCK_LG2(0);
|
386
|
+
int scale = 1 << lg2;
|
387
|
+
const char *ptr = val.str_val.data;
|
388
|
+
const char *end = ptr + val.str_val.size;
|
389
|
+
char *out = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void);
|
390
|
+
while (ptr < end) {
|
391
|
+
wireval elem;
|
392
|
+
ptr = decode_varint64(d, ptr, end, &elem.uint64_val);
|
393
|
+
decode_munge(field->descriptortype, &elem);
|
394
|
+
if (decode_reserve(d, arr, 1)) {
|
395
|
+
out = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void);
|
396
|
+
}
|
397
|
+
arr->len++;
|
398
|
+
memcpy(out, &elem, scale);
|
399
|
+
out += scale;
|
400
|
+
}
|
401
|
+
if (ptr != end) decode_err(d);
|
402
|
+
return ptr;
|
361
403
|
}
|
362
404
|
default:
|
363
|
-
|
405
|
+
UPB_UNREACHABLE();
|
364
406
|
}
|
365
|
-
|
366
|
-
upb_decode_setpresent(frame, field);
|
367
|
-
return true;
|
368
407
|
}
|
369
408
|
|
370
|
-
static
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
409
|
+
static void decode_tomap(upb_decstate *d, upb_msg *msg,
|
410
|
+
const upb_msglayout *layout,
|
411
|
+
const upb_msglayout_field *field, wireval val) {
|
412
|
+
upb_map **map_p = UPB_PTR_AT(msg, field->offset, upb_map *);
|
413
|
+
upb_map *map = *map_p;
|
414
|
+
upb_map_entry ent;
|
415
|
+
const upb_msglayout *entry = layout->submsgs[field->submsg_index];
|
416
|
+
|
417
|
+
if (!map) {
|
418
|
+
/* Lazily create map. */
|
419
|
+
const upb_msglayout *entry = layout->submsgs[field->submsg_index];
|
420
|
+
const upb_msglayout_field *key_field = &entry->fields[0];
|
421
|
+
const upb_msglayout_field *val_field = &entry->fields[1];
|
422
|
+
char key_size = desctype_to_mapsize[key_field->descriptortype];
|
423
|
+
char val_size = desctype_to_mapsize[val_field->descriptortype];
|
424
|
+
UPB_ASSERT(key_field->offset == 0);
|
425
|
+
UPB_ASSERT(val_field->offset == sizeof(upb_strview));
|
426
|
+
map = _upb_map_new(d->arena, key_size, val_size);
|
427
|
+
*map_p = map;
|
383
428
|
}
|
384
429
|
|
385
|
-
|
386
|
-
|
387
|
-
}
|
430
|
+
/* Parse map entry. */
|
431
|
+
memset(&ent, 0, sizeof(ent));
|
388
432
|
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
switch (field->descriptortype) {
|
395
|
-
case UPB_DESCRIPTOR_TYPE_FLOAT:
|
396
|
-
case UPB_DESCRIPTOR_TYPE_FIXED32:
|
397
|
-
case UPB_DESCRIPTOR_TYPE_SFIXED32:
|
398
|
-
CHK(upb_decode_addval(frame, field, &val, sizeof(val)));
|
399
|
-
break;
|
400
|
-
default:
|
401
|
-
return upb_append_unknown(d, frame);
|
433
|
+
if (entry->fields[1].descriptortype == UPB_DESCRIPTOR_TYPE_MESSAGE ||
|
434
|
+
entry->fields[1].descriptortype == UPB_DESCRIPTOR_TYPE_GROUP) {
|
435
|
+
/* Create proactively to handle the case where it doesn't appear. */
|
436
|
+
ent.v.val = upb_value_ptr(_upb_msg_new(entry->submsgs[0], d->arena));
|
402
437
|
}
|
403
438
|
|
404
|
-
|
405
|
-
return true;
|
406
|
-
}
|
407
|
-
|
408
|
-
static bool upb_decode_fixedpacked(upb_decstate *d, upb_array *arr,
|
409
|
-
uint32_t len, int elem_size) {
|
410
|
-
size_t elements = len / elem_size;
|
411
|
-
|
412
|
-
CHK((size_t)(elements * elem_size) == len);
|
413
|
-
CHK(upb_array_add(arr, elements, elem_size, d->ptr, d->arena));
|
414
|
-
d->ptr += len;
|
439
|
+
decode_tosubmsg(d, &ent.k, layout, field, val.str_val);
|
415
440
|
|
416
|
-
|
441
|
+
/* Insert into map. */
|
442
|
+
_upb_map_set(map, &ent.k, map->key_size, &ent.v, map->val_size, d->arena);
|
417
443
|
}
|
418
444
|
|
419
|
-
static
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
}
|
426
|
-
|
427
|
-
static bool upb_decode_toarray(upb_decstate *d, upb_decframe *frame,
|
428
|
-
const upb_msglayout_field *field, int len) {
|
429
|
-
upb_array *arr = upb_getorcreatearr(frame, field);
|
430
|
-
CHK(arr);
|
431
|
-
|
432
|
-
#define VARINT_CASE(ctype, decode) \
|
433
|
-
VARINT_CASE_EX(ctype, decode, decode)
|
434
|
-
|
435
|
-
#define VARINT_CASE_EX(ctype, decode, dtype) \
|
436
|
-
{ \
|
437
|
-
const char *ptr = d->ptr; \
|
438
|
-
const char *limit = ptr + len; \
|
439
|
-
while (ptr < limit) { \
|
440
|
-
uint64_t val; \
|
441
|
-
ctype decoded; \
|
442
|
-
CHK(upb_decode_varint(&ptr, limit, &val)); \
|
443
|
-
decoded = (decode)((dtype)val); \
|
444
|
-
CHK(upb_array_add(arr, 1, sizeof(decoded), &decoded, d->arena)); \
|
445
|
-
} \
|
446
|
-
d->ptr = ptr; \
|
447
|
-
return true; \
|
448
|
-
}
|
445
|
+
static const char *decode_tomsg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
446
|
+
const upb_msglayout *layout,
|
447
|
+
const upb_msglayout_field *field, wireval val,
|
448
|
+
int op) {
|
449
|
+
void *mem = UPB_PTR_AT(msg, field->offset, void);
|
450
|
+
int type = field->descriptortype;
|
449
451
|
|
450
|
-
|
451
|
-
|
452
|
-
case
|
453
|
-
|
454
|
-
|
452
|
+
/* Set presence if necessary. */
|
453
|
+
if (field->presence < 0) {
|
454
|
+
/* Oneof case */
|
455
|
+
uint32_t *oneof_case = _upb_oneofcase_field(msg, field);
|
456
|
+
if (op == OP_SUBMSG && *oneof_case != field->number) {
|
457
|
+
memset(mem, 0, sizeof(void*));
|
455
458
|
}
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
return upb_decode_fixedpacked(d, arr, len, sizeof(int32_t));
|
460
|
-
case UPB_DESCRIPTOR_TYPE_DOUBLE:
|
461
|
-
case UPB_DESCRIPTOR_TYPE_FIXED64:
|
462
|
-
case UPB_DESCRIPTOR_TYPE_SFIXED64:
|
463
|
-
return upb_decode_fixedpacked(d, arr, len, sizeof(int64_t));
|
464
|
-
case UPB_DESCRIPTOR_TYPE_INT32:
|
465
|
-
case UPB_DESCRIPTOR_TYPE_UINT32:
|
466
|
-
case UPB_DESCRIPTOR_TYPE_ENUM:
|
467
|
-
VARINT_CASE(uint32_t, uint32_t);
|
468
|
-
case UPB_DESCRIPTOR_TYPE_INT64:
|
469
|
-
case UPB_DESCRIPTOR_TYPE_UINT64:
|
470
|
-
VARINT_CASE(uint64_t, uint64_t);
|
471
|
-
case UPB_DESCRIPTOR_TYPE_BOOL:
|
472
|
-
VARINT_CASE(bool, bool);
|
473
|
-
case UPB_DESCRIPTOR_TYPE_SINT32:
|
474
|
-
VARINT_CASE_EX(int32_t, upb_zzdecode_32, uint32_t);
|
475
|
-
case UPB_DESCRIPTOR_TYPE_SINT64:
|
476
|
-
VARINT_CASE_EX(int64_t, upb_zzdecode_64, uint64_t);
|
477
|
-
case UPB_DESCRIPTOR_TYPE_MESSAGE: {
|
478
|
-
const upb_msglayout *subm;
|
479
|
-
upb_msg *submsg = upb_addmsg(frame, field, &subm);
|
480
|
-
CHK(submsg);
|
481
|
-
return upb_decode_msgfield(d, submsg, subm, len);
|
482
|
-
}
|
483
|
-
case UPB_DESCRIPTOR_TYPE_GROUP:
|
484
|
-
return upb_append_unknown(d, frame);
|
459
|
+
*oneof_case = field->number;
|
460
|
+
} else if (field->presence > 0) {
|
461
|
+
_upb_sethas_field(msg, field);
|
485
462
|
}
|
486
|
-
#undef VARINT_CASE
|
487
|
-
UPB_UNREACHABLE();
|
488
|
-
}
|
489
|
-
|
490
|
-
static bool upb_decode_delimitedfield(upb_decstate *d, upb_decframe *frame,
|
491
|
-
const upb_msglayout_field *field) {
|
492
|
-
int len;
|
493
|
-
|
494
|
-
CHK(upb_decode_string(&d->ptr, d->limit, &len));
|
495
463
|
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
break;
|
464
|
+
/* Store into message. */
|
465
|
+
switch (op) {
|
466
|
+
case OP_SUBMSG: {
|
467
|
+
upb_msg **submsgp = mem;
|
468
|
+
upb_msg *submsg = *submsgp;
|
469
|
+
if (!submsg) {
|
470
|
+
submsg = decode_newsubmsg(d, layout, field);
|
471
|
+
*submsgp = submsg;
|
505
472
|
}
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
CHK(upb_decode_msgfield(d, submsg, subm, len));
|
511
|
-
break;
|
473
|
+
if (UPB_UNLIKELY(type == UPB_DTYPE_GROUP)) {
|
474
|
+
ptr = decode_togroup(d, ptr, submsg, layout, field);
|
475
|
+
} else {
|
476
|
+
decode_tosubmsg(d, submsg, layout, field, val.str_val);
|
512
477
|
}
|
513
|
-
|
514
|
-
/* TODO(haberman): should we accept the last element of a packed? */
|
515
|
-
d->ptr += len;
|
516
|
-
return upb_append_unknown(d, frame);
|
517
|
-
}
|
518
|
-
upb_decode_setpresent(frame, field);
|
519
|
-
return true;
|
520
|
-
}
|
521
|
-
}
|
522
|
-
|
523
|
-
static const upb_msglayout_field *upb_find_field(const upb_msglayout *l,
|
524
|
-
uint32_t field_number) {
|
525
|
-
/* Lots of optimization opportunities here. */
|
526
|
-
int i;
|
527
|
-
for (i = 0; i < l->field_count; i++) {
|
528
|
-
if (l->fields[i].number == field_number) {
|
529
|
-
return &l->fields[i];
|
478
|
+
break;
|
530
479
|
}
|
480
|
+
case OP_STRING:
|
481
|
+
decode_verifyutf8(d, val.str_val.data, val.str_val.size);
|
482
|
+
/* Fallthrough. */
|
483
|
+
case OP_BYTES:
|
484
|
+
memcpy(mem, &val, sizeof(upb_strview));
|
485
|
+
break;
|
486
|
+
case OP_SCALAR_LG2(3):
|
487
|
+
memcpy(mem, &val, 8);
|
488
|
+
break;
|
489
|
+
case OP_SCALAR_LG2(2):
|
490
|
+
memcpy(mem, &val, 4);
|
491
|
+
break;
|
492
|
+
case OP_SCALAR_LG2(0):
|
493
|
+
memcpy(mem, &val, 1);
|
494
|
+
break;
|
495
|
+
default:
|
496
|
+
UPB_UNREACHABLE();
|
531
497
|
}
|
532
498
|
|
533
|
-
return
|
499
|
+
return ptr;
|
534
500
|
}
|
535
501
|
|
536
|
-
static
|
537
|
-
|
538
|
-
|
539
|
-
|
502
|
+
static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
503
|
+
const upb_msglayout *layout) {
|
504
|
+
while (ptr < d->limit) {
|
505
|
+
uint32_t tag;
|
506
|
+
const upb_msglayout_field *field;
|
507
|
+
int field_number;
|
508
|
+
int wire_type;
|
509
|
+
const char *field_start = ptr;
|
510
|
+
wireval val;
|
511
|
+
int op;
|
512
|
+
|
513
|
+
ptr = decode_varint32(d, ptr, d->limit, &tag);
|
514
|
+
field_number = tag >> 3;
|
515
|
+
wire_type = tag & 7;
|
540
516
|
|
541
|
-
|
542
|
-
CHK(upb_decode_varint32(&d->ptr, d->limit, &tag));
|
543
|
-
field_number = tag >> 3;
|
544
|
-
field = upb_find_field(frame->layout, field_number);
|
517
|
+
field = upb_find_field(layout, field_number);
|
545
518
|
|
546
|
-
|
547
|
-
switch (tag & 7) {
|
519
|
+
switch (wire_type) {
|
548
520
|
case UPB_WIRE_TYPE_VARINT:
|
549
|
-
|
521
|
+
ptr = decode_varint64(d, ptr, d->limit, &val.uint64_val);
|
522
|
+
op = varint_ops[field->descriptortype];
|
523
|
+
decode_munge(field->descriptortype, &val);
|
524
|
+
break;
|
550
525
|
case UPB_WIRE_TYPE_32BIT:
|
551
|
-
|
526
|
+
if (d->limit - ptr < 4) decode_err(d);
|
527
|
+
memcpy(&val.uint32_val, ptr, 4);
|
528
|
+
val.uint32_val = _upb_be_swap32(val.uint32_val);
|
529
|
+
ptr += 4;
|
530
|
+
op = OP_SCALAR_LG2(2);
|
531
|
+
if (((1 << field->descriptortype) & fixed32_ok) == 0) goto unknown;
|
532
|
+
break;
|
552
533
|
case UPB_WIRE_TYPE_64BIT:
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
534
|
+
if (d->limit - ptr < 8) decode_err(d);
|
535
|
+
memcpy(&val.uint64_val, ptr, 8);
|
536
|
+
val.uint64_val = _upb_be_swap64(val.uint64_val);
|
537
|
+
ptr += 8;
|
538
|
+
op = OP_SCALAR_LG2(3);
|
539
|
+
if (((1 << field->descriptortype) & fixed64_ok) == 0) goto unknown;
|
540
|
+
break;
|
541
|
+
case UPB_WIRE_TYPE_DELIMITED: {
|
542
|
+
uint32_t size;
|
543
|
+
int ndx = field->descriptortype;
|
544
|
+
if (_upb_isrepeated(field)) ndx += 18;
|
545
|
+
ptr = decode_varint32(d, ptr, d->limit, &size);
|
546
|
+
if (size >= INT32_MAX || (size_t)(d->limit - ptr) < size) {
|
547
|
+
decode_err(d); /* Length overflow. */
|
564
548
|
}
|
565
|
-
|
566
|
-
|
549
|
+
val.str_val.data = ptr;
|
550
|
+
val.str_val.size = size;
|
551
|
+
ptr += size;
|
552
|
+
op = delim_ops[ndx];
|
553
|
+
break;
|
567
554
|
}
|
555
|
+
case UPB_WIRE_TYPE_START_GROUP:
|
556
|
+
val.uint32_val = field_number;
|
557
|
+
op = OP_SUBMSG;
|
558
|
+
if (field->descriptortype != UPB_DTYPE_GROUP) goto unknown;
|
559
|
+
break;
|
568
560
|
case UPB_WIRE_TYPE_END_GROUP:
|
569
561
|
d->end_group = field_number;
|
570
|
-
return
|
562
|
+
return ptr;
|
571
563
|
default:
|
572
|
-
|
564
|
+
decode_err(d);
|
573
565
|
}
|
574
|
-
} else {
|
575
|
-
CHK(field_number != 0);
|
576
|
-
CHK(upb_skip_unknownfielddata(d, tag, -1));
|
577
|
-
CHK(upb_append_unknown(d, frame));
|
578
|
-
return true;
|
579
|
-
}
|
580
|
-
UPB_UNREACHABLE();
|
581
|
-
}
|
582
566
|
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
567
|
+
if (op >= 0) {
|
568
|
+
/* Parse, using op for dispatch. */
|
569
|
+
switch (field->label) {
|
570
|
+
case UPB_LABEL_REPEATED:
|
571
|
+
case _UPB_LABEL_PACKED:
|
572
|
+
ptr = decode_toarray(d, ptr, msg, layout, field, val, op);
|
573
|
+
break;
|
574
|
+
case _UPB_LABEL_MAP:
|
575
|
+
decode_tomap(d, msg, layout, field, val);
|
576
|
+
break;
|
577
|
+
default:
|
578
|
+
ptr = decode_tomsg(d, ptr, msg, layout, field, val, op);
|
579
|
+
break;
|
580
|
+
}
|
581
|
+
} else {
|
582
|
+
unknown:
|
583
|
+
/* Skip unknown field. */
|
584
|
+
if (field_number == 0) decode_err(d);
|
585
|
+
if (wire_type == UPB_WIRE_TYPE_START_GROUP) {
|
586
|
+
ptr = decode_group(d, ptr, NULL, NULL, field_number);
|
587
|
+
}
|
588
|
+
if (msg) {
|
589
|
+
if (!_upb_msg_addunknown(msg, field_start, ptr - field_start,
|
590
|
+
d->arena)) {
|
591
|
+
decode_err(d);
|
592
|
+
}
|
593
|
+
}
|
594
|
+
}
|
591
595
|
}
|
592
596
|
|
593
|
-
|
597
|
+
if (ptr != d->limit) decode_err(d);
|
598
|
+
return ptr;
|
594
599
|
}
|
595
600
|
|
596
601
|
bool upb_decode(const char *buf, size_t size, void *msg, const upb_msglayout *l,
|
597
602
|
upb_arena *arena) {
|
598
603
|
upb_decstate state;
|
599
|
-
state.ptr = buf;
|
600
604
|
state.limit = buf + size;
|
601
605
|
state.arena = arena;
|
602
606
|
state.depth = 64;
|
603
607
|
state.end_group = 0;
|
604
608
|
|
605
|
-
|
609
|
+
if (setjmp(state.err)) return false;
|
610
|
+
|
611
|
+
if (size == 0) return true;
|
612
|
+
decode_msg(&state, buf, msg, l);
|
613
|
+
|
606
614
|
return state.end_group == 0;
|
607
615
|
}
|
608
616
|
|
609
|
-
#undef
|
617
|
+
#undef OP_SCALAR_LG2
|
618
|
+
#undef OP_FIXPCK_LG2
|
619
|
+
#undef OP_VARPCK_LG2
|
620
|
+
#undef OP_STRING
|
621
|
+
#undef OP_SUBMSG
|