grpc 1.28.0 → 1.30.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +7694 -11190
- data/include/grpc/grpc.h +2 -2
- data/include/grpc/grpc_security.h +22 -9
- data/include/grpc/grpc_security_constants.h +1 -0
- data/include/grpc/impl/codegen/grpc_types.h +19 -21
- data/include/grpc/impl/codegen/port_platform.h +6 -2
- data/include/grpc/module.modulemap +24 -39
- data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +203 -236
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
- data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
- data/src/core/ext/filters/client_channel/http_proxy.cc +17 -10
- data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
- data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +240 -301
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +84 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -2
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
- data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
- data/src/core/ext/filters/client_channel/resolver.cc +5 -8
- data/src/core/ext/filters/client_channel/resolver.h +12 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +73 -59
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +16 -20
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +184 -133
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +40 -43
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +32 -5
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
- data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +16 -16
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +20 -31
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -3
- data/src/core/ext/filters/client_channel/server_address.cc +6 -9
- data/src/core/ext/filters/client_channel/server_address.h +6 -12
- data/src/core/ext/filters/client_channel/service_config.cc +104 -144
- data/src/core/ext/filters/client_channel/service_config.h +28 -98
- data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
- data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
- data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
- data/src/core/ext/filters/client_channel/subchannel.h +35 -11
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +348 -221
- data/src/core/ext/filters/client_channel/xds/xds_api.h +37 -37
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +44 -49
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
- data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +532 -339
- data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +31 -19
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
- data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +7 -10
- data/src/core/ext/filters/message_size/message_size_filter.h +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +23 -22
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
- data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +15 -8
- data/src/core/ext/transport/inproc/inproc_transport.cc +19 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -875
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +43 -7
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +47 -26
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +115 -65
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +28 -13
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +88 -6
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +16 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +63 -41
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +173 -77
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +90 -30
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
- data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
- data/src/core/ext/upb-generated/validate/validate.upb.h +69 -63
- data/src/core/lib/channel/channel_args.cc +15 -14
- data/src/core/lib/channel/channel_args.h +3 -1
- data/src/core/lib/channel/channel_stack.h +20 -13
- data/src/core/lib/channel/channelz.cc +5 -6
- data/src/core/lib/channel/channelz.h +3 -2
- data/src/core/lib/channel/channelz_registry.cc +5 -3
- data/src/core/lib/channel/connected_channel.cc +7 -5
- data/src/core/lib/channel/context.h +1 -1
- data/src/core/lib/channel/handshaker.cc +11 -13
- data/src/core/lib/channel/handshaker.h +4 -2
- data/src/core/lib/channel/handshaker_registry.cc +5 -17
- data/src/core/lib/channel/status_util.cc +2 -3
- data/src/core/lib/compression/message_compress.cc +5 -1
- data/src/core/lib/debug/stats.cc +21 -27
- data/src/core/lib/debug/stats.h +3 -1
- data/src/core/lib/gpr/spinlock.h +2 -3
- data/src/core/lib/gpr/string.cc +2 -26
- data/src/core/lib/gpr/string.h +0 -16
- data/src/core/lib/gpr/sync_abseil.cc +2 -0
- data/src/core/lib/gpr/time.cc +4 -0
- data/src/core/lib/gpr/time_posix.cc +1 -1
- data/src/core/lib/gprpp/atomic.h +6 -6
- data/src/core/lib/gprpp/fork.cc +1 -1
- data/src/core/lib/gprpp/host_port.cc +29 -35
- data/src/core/lib/gprpp/host_port.h +14 -17
- data/src/core/lib/gprpp/map.h +5 -11
- data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
- data/src/core/lib/http/format_request.cc +46 -65
- data/src/core/lib/http/httpcli.cc +2 -3
- data/src/core/lib/http/httpcli.h +2 -3
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- data/src/core/lib/http/parser.h +2 -3
- data/src/core/lib/iomgr/buffer_list.h +22 -21
- data/src/core/lib/iomgr/call_combiner.h +3 -2
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
- data/src/core/lib/iomgr/closure.h +2 -3
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
- data/src/core/lib/iomgr/endpoint_pair.h +2 -3
- data/src/core/lib/iomgr/error.cc +6 -9
- data/src/core/lib/iomgr/error.h +0 -1
- data/src/core/lib/iomgr/ev_apple.cc +356 -0
- data/src/core/lib/iomgr/ev_apple.h +43 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
- data/src/core/lib/iomgr/ev_epollex_linux.cc +2 -3
- data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
- data/src/core/lib/iomgr/ev_posix.cc +2 -3
- data/src/core/lib/iomgr/exec_ctx.h +14 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
- data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
- data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
- data/src/core/lib/iomgr/port.h +1 -0
- data/src/core/lib/iomgr/python_util.h +46 -0
- data/src/core/lib/iomgr/resolve_address.h +4 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
- data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
- data/src/core/lib/iomgr/resource_quota.cc +4 -6
- data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
- data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
- data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
- data/src/core/lib/iomgr/socket_mutator.h +2 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
- data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
- data/src/core/lib/iomgr/tcp_client_posix.cc +8 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
- data/src/core/lib/iomgr/tcp_custom.cc +2 -3
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
- data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
- data/src/core/lib/iomgr/tcp_uv.cc +3 -2
- data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
- data/src/core/lib/iomgr/timer_generic.cc +2 -3
- data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
- data/src/core/lib/iomgr/timer_heap.h +2 -3
- data/src/core/lib/iomgr/udp_server.cc +9 -14
- data/src/core/lib/json/json.h +3 -2
- data/src/core/lib/json/json_reader.cc +5 -5
- data/src/core/lib/json/json_writer.cc +13 -12
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
- data/src/core/lib/security/credentials/credentials.cc +0 -84
- data/src/core/lib/security/credentials/credentials.h +8 -59
- data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +3 -8
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
- data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +55 -27
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -11
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -25
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +59 -12
- data/src/core/lib/security/security_connector/ssl_utils.h +12 -10
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +77 -51
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
- data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
- data/src/core/lib/slice/slice_intern.cc +2 -3
- data/src/core/lib/slice/slice_internal.h +14 -0
- data/src/core/lib/slice/slice_utils.h +9 -0
- data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
- data/src/core/lib/surface/call.cc +2 -3
- data/src/core/lib/surface/call_log_batch.cc +50 -58
- data/src/core/lib/surface/channel.cc +53 -31
- data/src/core/lib/surface/channel.h +35 -4
- data/src/core/lib/surface/channel_ping.cc +2 -3
- data/src/core/lib/surface/completion_queue.cc +33 -33
- data/src/core/lib/surface/event_string.cc +18 -25
- data/src/core/lib/surface/event_string.h +3 -1
- data/src/core/lib/surface/init_secure.cc +1 -4
- data/src/core/lib/surface/server.cc +570 -369
- data/src/core/lib/surface/server.h +32 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/byte_stream.h +7 -2
- data/src/core/lib/transport/connectivity_state.cc +7 -6
- data/src/core/lib/transport/connectivity_state.h +5 -3
- data/src/core/lib/transport/metadata.cc +3 -3
- data/src/core/lib/transport/metadata_batch.h +2 -3
- data/src/core/lib/transport/static_metadata.h +1 -1
- data/src/core/lib/transport/status_conversion.cc +6 -14
- data/src/core/lib/transport/transport.cc +2 -3
- data/src/core/lib/transport/transport.h +3 -2
- data/src/core/lib/transport/transport_op_string.cc +61 -102
- data/src/core/lib/uri/uri_parser.h +2 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
- data/src/core/tsi/fake_transport_security.cc +10 -15
- data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
- data/src/core/tsi/ssl_transport_security.cc +52 -39
- data/src/core/tsi/ssl_transport_security.h +8 -8
- data/src/core/tsi/ssl_types.h +0 -2
- data/src/core/tsi/transport_security.h +6 -9
- data/src/core/tsi/transport_security_grpc.h +2 -3
- data/src/core/tsi/transport_security_interface.h +3 -3
- data/src/ruby/ext/grpc/rb_call.c +9 -1
- data/src/ruby/lib/grpc/errors.rb +103 -42
- data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
- data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
- data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
- data/src/ruby/lib/grpc/generic/service.rb +5 -4
- data/src/ruby/lib/grpc/structs.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +5 -3
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
- data/src/ruby/spec/debug_message_spec.rb +134 -0
- data/src/ruby/spec/generic/service_spec.rb +2 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
- data/src/ruby/spec/testdata/ca.pem +18 -13
- data/src/ruby/spec/testdata/client.key +26 -14
- data/src/ruby/spec/testdata/client.pem +18 -12
- data/src/ruby/spec/testdata/server1.key +26 -14
- data/src/ruby/spec/testdata/server1.pem +20 -14
- data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
- data/third_party/abseil-cpp/absl/time/clock.h +74 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
- data/third_party/abseil-cpp/absl/time/format.cc +153 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
- data/third_party/abseil-cpp/absl/time/time.cc +499 -0
- data/third_party/abseil-cpp/absl/time/time.h +1584 -0
- data/third_party/boringssl-with-bazel/err_data.c +329 -297
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
- data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
- data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
- data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +14 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +432 -160
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +172 -77
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
- data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +14 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +64 -5
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -27
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
- metadata +111 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
- data/src/core/lib/gprpp/string_view.h +0 -60
- data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
@@ -0,0 +1,384 @@
|
|
1
|
+
// Copyright 2016 Google Inc. All Rights Reserved.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
// A library for translating between absolute times (represented by
|
16
|
+
// std::chrono::time_points of the std::chrono::system_clock) and civil
|
17
|
+
// times (represented by cctz::civil_second) using the rules defined by
|
18
|
+
// a time zone (cctz::time_zone).
|
19
|
+
|
20
|
+
#ifndef ABSL_TIME_INTERNAL_CCTZ_TIME_ZONE_H_
|
21
|
+
#define ABSL_TIME_INTERNAL_CCTZ_TIME_ZONE_H_
|
22
|
+
|
23
|
+
#include <chrono>
|
24
|
+
#include <cstdint>
|
25
|
+
#include <string>
|
26
|
+
#include <utility>
|
27
|
+
|
28
|
+
#include "absl/base/config.h"
|
29
|
+
#include "absl/time/internal/cctz/include/cctz/civil_time.h"
|
30
|
+
|
31
|
+
namespace absl {
|
32
|
+
ABSL_NAMESPACE_BEGIN
|
33
|
+
namespace time_internal {
|
34
|
+
namespace cctz {
|
35
|
+
|
36
|
+
// Convenience aliases. Not intended as public API points.
|
37
|
+
template <typename D>
|
38
|
+
using time_point = std::chrono::time_point<std::chrono::system_clock, D>;
|
39
|
+
using seconds = std::chrono::duration<std::int_fast64_t>;
|
40
|
+
using sys_seconds = seconds; // Deprecated. Use cctz::seconds instead.
|
41
|
+
|
42
|
+
namespace detail {
|
43
|
+
template <typename D>
|
44
|
+
inline std::pair<time_point<seconds>, D> split_seconds(
|
45
|
+
const time_point<D>& tp) {
|
46
|
+
auto sec = std::chrono::time_point_cast<seconds>(tp);
|
47
|
+
auto sub = tp - sec;
|
48
|
+
if (sub.count() < 0) {
|
49
|
+
sec -= seconds(1);
|
50
|
+
sub += seconds(1);
|
51
|
+
}
|
52
|
+
return {sec, std::chrono::duration_cast<D>(sub)};
|
53
|
+
}
|
54
|
+
inline std::pair<time_point<seconds>, seconds> split_seconds(
|
55
|
+
const time_point<seconds>& tp) {
|
56
|
+
return {tp, seconds::zero()};
|
57
|
+
}
|
58
|
+
} // namespace detail
|
59
|
+
|
60
|
+
// cctz::time_zone is an opaque, small, value-type class representing a
|
61
|
+
// geo-political region within which particular rules are used for mapping
|
62
|
+
// between absolute and civil times. Time zones are named using the TZ
|
63
|
+
// identifiers from the IANA Time Zone Database, such as "America/Los_Angeles"
|
64
|
+
// or "Australia/Sydney". Time zones are created from factory functions such
|
65
|
+
// as load_time_zone(). Note: strings like "PST" and "EDT" are not valid TZ
|
66
|
+
// identifiers.
|
67
|
+
//
|
68
|
+
// Example:
|
69
|
+
// cctz::time_zone utc = cctz::utc_time_zone();
|
70
|
+
// cctz::time_zone pst = cctz::fixed_time_zone(std::chrono::hours(-8));
|
71
|
+
// cctz::time_zone loc = cctz::local_time_zone();
|
72
|
+
// cctz::time_zone lax;
|
73
|
+
// if (!cctz::load_time_zone("America/Los_Angeles", &lax)) { ... }
|
74
|
+
//
|
75
|
+
// See also:
|
76
|
+
// - http://www.iana.org/time-zones
|
77
|
+
// - https://en.wikipedia.org/wiki/Zoneinfo
|
78
|
+
class time_zone {
|
79
|
+
public:
|
80
|
+
time_zone() : time_zone(nullptr) {} // Equivalent to UTC
|
81
|
+
time_zone(const time_zone&) = default;
|
82
|
+
time_zone& operator=(const time_zone&) = default;
|
83
|
+
|
84
|
+
std::string name() const;
|
85
|
+
|
86
|
+
// An absolute_lookup represents the civil time (cctz::civil_second) within
|
87
|
+
// this time_zone at the given absolute time (time_point). There are
|
88
|
+
// additionally a few other fields that may be useful when working with
|
89
|
+
// older APIs, such as std::tm.
|
90
|
+
//
|
91
|
+
// Example:
|
92
|
+
// const cctz::time_zone tz = ...
|
93
|
+
// const auto tp = std::chrono::system_clock::now();
|
94
|
+
// const cctz::time_zone::absolute_lookup al = tz.lookup(tp);
|
95
|
+
struct absolute_lookup {
|
96
|
+
civil_second cs;
|
97
|
+
// Note: The following fields exist for backward compatibility with older
|
98
|
+
// APIs. Accessing these fields directly is a sign of imprudent logic in
|
99
|
+
// the calling code. Modern time-related code should only access this data
|
100
|
+
// indirectly by way of cctz::format().
|
101
|
+
int offset; // civil seconds east of UTC
|
102
|
+
bool is_dst; // is offset non-standard?
|
103
|
+
const char* abbr; // time-zone abbreviation (e.g., "PST")
|
104
|
+
};
|
105
|
+
absolute_lookup lookup(const time_point<seconds>& tp) const;
|
106
|
+
template <typename D>
|
107
|
+
absolute_lookup lookup(const time_point<D>& tp) const {
|
108
|
+
return lookup(detail::split_seconds(tp).first);
|
109
|
+
}
|
110
|
+
|
111
|
+
// A civil_lookup represents the absolute time(s) (time_point) that
|
112
|
+
// correspond to the given civil time (cctz::civil_second) within this
|
113
|
+
// time_zone. Usually the given civil time represents a unique instant
|
114
|
+
// in time, in which case the conversion is unambiguous. However,
|
115
|
+
// within this time zone, the given civil time may be skipped (e.g.,
|
116
|
+
// during a positive UTC offset shift), or repeated (e.g., during a
|
117
|
+
// negative UTC offset shift). To account for these possibilities,
|
118
|
+
// civil_lookup is richer than just a single time_point.
|
119
|
+
//
|
120
|
+
// In all cases the civil_lookup::kind enum will indicate the nature
|
121
|
+
// of the given civil-time argument, and the pre, trans, and post
|
122
|
+
// members will give the absolute time answers using the pre-transition
|
123
|
+
// offset, the transition point itself, and the post-transition offset,
|
124
|
+
// respectively (all three times are equal if kind == UNIQUE). If any
|
125
|
+
// of these three absolute times is outside the representable range of a
|
126
|
+
// time_point<seconds> the field is set to its maximum/minimum value.
|
127
|
+
//
|
128
|
+
// Example:
|
129
|
+
// cctz::time_zone lax;
|
130
|
+
// if (!cctz::load_time_zone("America/Los_Angeles", &lax)) { ... }
|
131
|
+
//
|
132
|
+
// // A unique civil time.
|
133
|
+
// auto jan01 = lax.lookup(cctz::civil_second(2011, 1, 1, 0, 0, 0));
|
134
|
+
// // jan01.kind == cctz::time_zone::civil_lookup::UNIQUE
|
135
|
+
// // jan01.pre is 2011/01/01 00:00:00 -0800
|
136
|
+
// // jan01.trans is 2011/01/01 00:00:00 -0800
|
137
|
+
// // jan01.post is 2011/01/01 00:00:00 -0800
|
138
|
+
//
|
139
|
+
// // A Spring DST transition, when there is a gap in civil time.
|
140
|
+
// auto mar13 = lax.lookup(cctz::civil_second(2011, 3, 13, 2, 15, 0));
|
141
|
+
// // mar13.kind == cctz::time_zone::civil_lookup::SKIPPED
|
142
|
+
// // mar13.pre is 2011/03/13 03:15:00 -0700
|
143
|
+
// // mar13.trans is 2011/03/13 03:00:00 -0700
|
144
|
+
// // mar13.post is 2011/03/13 01:15:00 -0800
|
145
|
+
//
|
146
|
+
// // A Fall DST transition, when civil times are repeated.
|
147
|
+
// auto nov06 = lax.lookup(cctz::civil_second(2011, 11, 6, 1, 15, 0));
|
148
|
+
// // nov06.kind == cctz::time_zone::civil_lookup::REPEATED
|
149
|
+
// // nov06.pre is 2011/11/06 01:15:00 -0700
|
150
|
+
// // nov06.trans is 2011/11/06 01:00:00 -0800
|
151
|
+
// // nov06.post is 2011/11/06 01:15:00 -0800
|
152
|
+
struct civil_lookup {
|
153
|
+
enum civil_kind {
|
154
|
+
UNIQUE, // the civil time was singular (pre == trans == post)
|
155
|
+
SKIPPED, // the civil time did not exist (pre >= trans > post)
|
156
|
+
REPEATED, // the civil time was ambiguous (pre < trans <= post)
|
157
|
+
} kind;
|
158
|
+
time_point<seconds> pre; // uses the pre-transition offset
|
159
|
+
time_point<seconds> trans; // instant of civil-offset change
|
160
|
+
time_point<seconds> post; // uses the post-transition offset
|
161
|
+
};
|
162
|
+
civil_lookup lookup(const civil_second& cs) const;
|
163
|
+
|
164
|
+
// Finds the time of the next/previous offset change in this time zone.
|
165
|
+
//
|
166
|
+
// By definition, next_transition(tp, &trans) returns false when tp has
|
167
|
+
// its maximum value, and prev_transition(tp, &trans) returns false
|
168
|
+
// when tp has its minimum value. If the zone has no transitions, the
|
169
|
+
// result will also be false no matter what the argument.
|
170
|
+
//
|
171
|
+
// Otherwise, when tp has its minimum value, next_transition(tp, &trans)
|
172
|
+
// returns true and sets trans to the first recorded transition. Chains
|
173
|
+
// of calls to next_transition()/prev_transition() will eventually return
|
174
|
+
// false, but it is unspecified exactly when next_transition(tp, &trans)
|
175
|
+
// jumps to false, or what time is set by prev_transition(tp, &trans) for
|
176
|
+
// a very distant tp.
|
177
|
+
//
|
178
|
+
// Note: Enumeration of time-zone transitions is for informational purposes
|
179
|
+
// only. Modern time-related code should not care about when offset changes
|
180
|
+
// occur.
|
181
|
+
//
|
182
|
+
// Example:
|
183
|
+
// cctz::time_zone nyc;
|
184
|
+
// if (!cctz::load_time_zone("America/New_York", &nyc)) { ... }
|
185
|
+
// const auto now = std::chrono::system_clock::now();
|
186
|
+
// auto tp = cctz::time_point<cctz::seconds>::min();
|
187
|
+
// cctz::time_zone::civil_transition trans;
|
188
|
+
// while (tp <= now && nyc.next_transition(tp, &trans)) {
|
189
|
+
// // transition: trans.from -> trans.to
|
190
|
+
// tp = nyc.lookup(trans.to).trans;
|
191
|
+
// }
|
192
|
+
struct civil_transition {
|
193
|
+
civil_second from; // the civil time we jump from
|
194
|
+
civil_second to; // the civil time we jump to
|
195
|
+
};
|
196
|
+
bool next_transition(const time_point<seconds>& tp,
|
197
|
+
civil_transition* trans) const;
|
198
|
+
template <typename D>
|
199
|
+
bool next_transition(const time_point<D>& tp, civil_transition* trans) const {
|
200
|
+
return next_transition(detail::split_seconds(tp).first, trans);
|
201
|
+
}
|
202
|
+
bool prev_transition(const time_point<seconds>& tp,
|
203
|
+
civil_transition* trans) const;
|
204
|
+
template <typename D>
|
205
|
+
bool prev_transition(const time_point<D>& tp, civil_transition* trans) const {
|
206
|
+
return prev_transition(detail::split_seconds(tp).first, trans);
|
207
|
+
}
|
208
|
+
|
209
|
+
// version() and description() provide additional information about the
|
210
|
+
// time zone. The content of each of the returned strings is unspecified,
|
211
|
+
// however, when the IANA Time Zone Database is the underlying data source
|
212
|
+
// the version() std::string will be in the familar form (e.g, "2018e") or
|
213
|
+
// empty when unavailable.
|
214
|
+
//
|
215
|
+
// Note: These functions are for informational or testing purposes only.
|
216
|
+
std::string version() const; // empty when unknown
|
217
|
+
std::string description() const;
|
218
|
+
|
219
|
+
// Relational operators.
|
220
|
+
friend bool operator==(time_zone lhs, time_zone rhs) {
|
221
|
+
return &lhs.effective_impl() == &rhs.effective_impl();
|
222
|
+
}
|
223
|
+
friend bool operator!=(time_zone lhs, time_zone rhs) { return !(lhs == rhs); }
|
224
|
+
|
225
|
+
template <typename H>
|
226
|
+
friend H AbslHashValue(H h, time_zone tz) {
|
227
|
+
return H::combine(std::move(h), &tz.effective_impl());
|
228
|
+
}
|
229
|
+
|
230
|
+
class Impl;
|
231
|
+
|
232
|
+
private:
|
233
|
+
explicit time_zone(const Impl* impl) : impl_(impl) {}
|
234
|
+
const Impl& effective_impl() const; // handles implicit UTC
|
235
|
+
const Impl* impl_;
|
236
|
+
};
|
237
|
+
|
238
|
+
// Loads the named time zone. May perform I/O on the initial load.
|
239
|
+
// If the name is invalid, or some other kind of error occurs, returns
|
240
|
+
// false and "*tz" is set to the UTC time zone.
|
241
|
+
bool load_time_zone(const std::string& name, time_zone* tz);
|
242
|
+
|
243
|
+
// Returns a time_zone representing UTC. Cannot fail.
|
244
|
+
time_zone utc_time_zone();
|
245
|
+
|
246
|
+
// Returns a time zone that is a fixed offset (seconds east) from UTC.
|
247
|
+
// Note: If the absolute value of the offset is greater than 24 hours
|
248
|
+
// you'll get UTC (i.e., zero offset) instead.
|
249
|
+
time_zone fixed_time_zone(const seconds& offset);
|
250
|
+
|
251
|
+
// Returns a time zone representing the local time zone. Falls back to UTC.
|
252
|
+
// Note: local_time_zone.name() may only be something like "localtime".
|
253
|
+
time_zone local_time_zone();
|
254
|
+
|
255
|
+
// Returns the civil time (cctz::civil_second) within the given time zone at
|
256
|
+
// the given absolute time (time_point). Since the additional fields provided
|
257
|
+
// by the time_zone::absolute_lookup struct should rarely be needed in modern
|
258
|
+
// code, this convert() function is simpler and should be preferred.
|
259
|
+
template <typename D>
|
260
|
+
inline civil_second convert(const time_point<D>& tp, const time_zone& tz) {
|
261
|
+
return tz.lookup(tp).cs;
|
262
|
+
}
|
263
|
+
|
264
|
+
// Returns the absolute time (time_point) that corresponds to the given civil
|
265
|
+
// time within the given time zone. If the civil time is not unique (i.e., if
|
266
|
+
// it was either repeated or non-existent), then the returned time_point is
|
267
|
+
// the best estimate that preserves relative order. That is, this function
|
268
|
+
// guarantees that if cs1 < cs2, then convert(cs1, tz) <= convert(cs2, tz).
|
269
|
+
inline time_point<seconds> convert(const civil_second& cs,
|
270
|
+
const time_zone& tz) {
|
271
|
+
const time_zone::civil_lookup cl = tz.lookup(cs);
|
272
|
+
if (cl.kind == time_zone::civil_lookup::SKIPPED) return cl.trans;
|
273
|
+
return cl.pre;
|
274
|
+
}
|
275
|
+
|
276
|
+
namespace detail {
|
277
|
+
using femtoseconds = std::chrono::duration<std::int_fast64_t, std::femto>;
|
278
|
+
std::string format(const std::string&, const time_point<seconds>&,
|
279
|
+
const femtoseconds&, const time_zone&);
|
280
|
+
bool parse(const std::string&, const std::string&, const time_zone&,
|
281
|
+
time_point<seconds>*, femtoseconds*, std::string* err = nullptr);
|
282
|
+
} // namespace detail
|
283
|
+
|
284
|
+
// Formats the given time_point in the given cctz::time_zone according to
|
285
|
+
// the provided format string. Uses strftime()-like formatting options,
|
286
|
+
// with the following extensions:
|
287
|
+
//
|
288
|
+
// - %Ez - RFC3339-compatible numeric UTC offset (+hh:mm or -hh:mm)
|
289
|
+
// - %E*z - Full-resolution numeric UTC offset (+hh:mm:ss or -hh:mm:ss)
|
290
|
+
// - %E#S - Seconds with # digits of fractional precision
|
291
|
+
// - %E*S - Seconds with full fractional precision (a literal '*')
|
292
|
+
// - %E#f - Fractional seconds with # digits of precision
|
293
|
+
// - %E*f - Fractional seconds with full precision (a literal '*')
|
294
|
+
// - %E4Y - Four-character years (-999 ... -001, 0000, 0001 ... 9999)
|
295
|
+
//
|
296
|
+
// Note that %E0S behaves like %S, and %E0f produces no characters. In
|
297
|
+
// contrast %E*f always produces at least one digit, which may be '0'.
|
298
|
+
//
|
299
|
+
// Note that %Y produces as many characters as it takes to fully render the
|
300
|
+
// year. A year outside of [-999:9999] when formatted with %E4Y will produce
|
301
|
+
// more than four characters, just like %Y.
|
302
|
+
//
|
303
|
+
// Tip: Format strings should include the UTC offset (e.g., %z, %Ez, or %E*z)
|
304
|
+
// so that the resulting string uniquely identifies an absolute time.
|
305
|
+
//
|
306
|
+
// Example:
|
307
|
+
// cctz::time_zone lax;
|
308
|
+
// if (!cctz::load_time_zone("America/Los_Angeles", &lax)) { ... }
|
309
|
+
// auto tp = cctz::convert(cctz::civil_second(2013, 1, 2, 3, 4, 5), lax);
|
310
|
+
// std::string f = cctz::format("%H:%M:%S", tp, lax); // "03:04:05"
|
311
|
+
// f = cctz::format("%H:%M:%E3S", tp, lax); // "03:04:05.000"
|
312
|
+
template <typename D>
|
313
|
+
inline std::string format(const std::string& fmt, const time_point<D>& tp,
|
314
|
+
const time_zone& tz) {
|
315
|
+
const auto p = detail::split_seconds(tp);
|
316
|
+
const auto n = std::chrono::duration_cast<detail::femtoseconds>(p.second);
|
317
|
+
return detail::format(fmt, p.first, n, tz);
|
318
|
+
}
|
319
|
+
|
320
|
+
// Parses an input string according to the provided format string and
|
321
|
+
// returns the corresponding time_point. Uses strftime()-like formatting
|
322
|
+
// options, with the same extensions as cctz::format(), but with the
|
323
|
+
// exceptions that %E#S is interpreted as %E*S, and %E#f as %E*f. %Ez
|
324
|
+
// and %E*z also accept the same inputs.
|
325
|
+
//
|
326
|
+
// %Y consumes as many numeric characters as it can, so the matching data
|
327
|
+
// should always be terminated with a non-numeric. %E4Y always consumes
|
328
|
+
// exactly four characters, including any sign.
|
329
|
+
//
|
330
|
+
// Unspecified fields are taken from the default date and time of ...
|
331
|
+
//
|
332
|
+
// "1970-01-01 00:00:00.0 +0000"
|
333
|
+
//
|
334
|
+
// For example, parsing a string of "15:45" (%H:%M) will return a time_point
|
335
|
+
// that represents "1970-01-01 15:45:00.0 +0000".
|
336
|
+
//
|
337
|
+
// Note that parse() returns time instants, so it makes most sense to parse
|
338
|
+
// fully-specified date/time strings that include a UTC offset (%z, %Ez, or
|
339
|
+
// %E*z).
|
340
|
+
//
|
341
|
+
// Note also that parse() only heeds the fields year, month, day, hour,
|
342
|
+
// minute, (fractional) second, and UTC offset. Other fields, like weekday (%a
|
343
|
+
// or %A), while parsed for syntactic validity, are ignored in the conversion.
|
344
|
+
//
|
345
|
+
// Date and time fields that are out-of-range will be treated as errors rather
|
346
|
+
// than normalizing them like cctz::civil_second() would do. For example, it
|
347
|
+
// is an error to parse the date "Oct 32, 2013" because 32 is out of range.
|
348
|
+
//
|
349
|
+
// A second of ":60" is normalized to ":00" of the following minute with
|
350
|
+
// fractional seconds discarded. The following table shows how the given
|
351
|
+
// seconds and subseconds will be parsed:
|
352
|
+
//
|
353
|
+
// "59.x" -> 59.x // exact
|
354
|
+
// "60.x" -> 00.0 // normalized
|
355
|
+
// "00.x" -> 00.x // exact
|
356
|
+
//
|
357
|
+
// Errors are indicated by returning false.
|
358
|
+
//
|
359
|
+
// Example:
|
360
|
+
// const cctz::time_zone tz = ...
|
361
|
+
// std::chrono::system_clock::time_point tp;
|
362
|
+
// if (cctz::parse("%Y-%m-%d", "2015-10-09", tz, &tp)) {
|
363
|
+
// ...
|
364
|
+
// }
|
365
|
+
template <typename D>
|
366
|
+
inline bool parse(const std::string& fmt, const std::string& input,
|
367
|
+
const time_zone& tz, time_point<D>* tpp) {
|
368
|
+
time_point<seconds> sec;
|
369
|
+
detail::femtoseconds fs;
|
370
|
+
const bool b = detail::parse(fmt, input, tz, &sec, &fs);
|
371
|
+
if (b) {
|
372
|
+
// TODO: Return false if unrepresentable as a time_point<D>.
|
373
|
+
*tpp = std::chrono::time_point_cast<D>(sec);
|
374
|
+
*tpp += std::chrono::duration_cast<D>(fs);
|
375
|
+
}
|
376
|
+
return b;
|
377
|
+
}
|
378
|
+
|
379
|
+
} // namespace cctz
|
380
|
+
} // namespace time_internal
|
381
|
+
ABSL_NAMESPACE_END
|
382
|
+
} // namespace absl
|
383
|
+
|
384
|
+
#endif // ABSL_TIME_INTERNAL_CCTZ_TIME_ZONE_H_
|
@@ -0,0 +1,102 @@
|
|
1
|
+
// Copyright 2016 Google Inc. All Rights Reserved.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef ABSL_TIME_INTERNAL_CCTZ_ZONE_INFO_SOURCE_H_
|
16
|
+
#define ABSL_TIME_INTERNAL_CCTZ_ZONE_INFO_SOURCE_H_
|
17
|
+
|
18
|
+
#include <cstddef>
|
19
|
+
#include <functional>
|
20
|
+
#include <memory>
|
21
|
+
#include <string>
|
22
|
+
|
23
|
+
#include "absl/base/config.h"
|
24
|
+
|
25
|
+
namespace absl {
|
26
|
+
ABSL_NAMESPACE_BEGIN
|
27
|
+
namespace time_internal {
|
28
|
+
namespace cctz {
|
29
|
+
|
30
|
+
// A stdio-like interface for providing zoneinfo data for a particular zone.
|
31
|
+
class ZoneInfoSource {
|
32
|
+
public:
|
33
|
+
virtual ~ZoneInfoSource();
|
34
|
+
|
35
|
+
virtual std::size_t Read(void* ptr, std::size_t size) = 0; // like fread()
|
36
|
+
virtual int Skip(std::size_t offset) = 0; // like fseek()
|
37
|
+
|
38
|
+
// Until the zoneinfo data supports versioning information, we provide
|
39
|
+
// a way for a ZoneInfoSource to indicate it out-of-band. The default
|
40
|
+
// implementation returns an empty std::string.
|
41
|
+
virtual std::string Version() const;
|
42
|
+
};
|
43
|
+
|
44
|
+
} // namespace cctz
|
45
|
+
} // namespace time_internal
|
46
|
+
ABSL_NAMESPACE_END
|
47
|
+
} // namespace absl
|
48
|
+
|
49
|
+
namespace absl {
|
50
|
+
ABSL_NAMESPACE_BEGIN
|
51
|
+
namespace time_internal {
|
52
|
+
namespace cctz_extension {
|
53
|
+
|
54
|
+
// A function-pointer type for a factory that returns a ZoneInfoSource
|
55
|
+
// given the name of a time zone and a fallback factory. Returns null
|
56
|
+
// when the data for the named zone cannot be found.
|
57
|
+
using ZoneInfoSourceFactory =
|
58
|
+
std::unique_ptr<absl::time_internal::cctz::ZoneInfoSource> (*)(
|
59
|
+
const std::string&,
|
60
|
+
const std::function<std::unique_ptr<
|
61
|
+
absl::time_internal::cctz::ZoneInfoSource>(const std::string&)>&);
|
62
|
+
|
63
|
+
// The user can control the mapping of zone names to zoneinfo data by
|
64
|
+
// providing a definition for cctz_extension::zone_info_source_factory.
|
65
|
+
// For example, given functions my_factory() and my_other_factory() that
|
66
|
+
// can return a ZoneInfoSource for a named zone, we could inject them into
|
67
|
+
// cctz::load_time_zone() with:
|
68
|
+
//
|
69
|
+
// namespace cctz_extension {
|
70
|
+
// namespace {
|
71
|
+
// std::unique_ptr<cctz::ZoneInfoSource> CustomFactory(
|
72
|
+
// const std::string& name,
|
73
|
+
// const std::function<std::unique_ptr<cctz::ZoneInfoSource>(
|
74
|
+
// const std::string& name)>& fallback_factory) {
|
75
|
+
// if (auto zip = my_factory(name)) return zip;
|
76
|
+
// if (auto zip = fallback_factory(name)) return zip;
|
77
|
+
// if (auto zip = my_other_factory(name)) return zip;
|
78
|
+
// return nullptr;
|
79
|
+
// }
|
80
|
+
// } // namespace
|
81
|
+
// ZoneInfoSourceFactory zone_info_source_factory = CustomFactory;
|
82
|
+
// } // namespace cctz_extension
|
83
|
+
//
|
84
|
+
// This might be used, say, to use zoneinfo data embedded in the program,
|
85
|
+
// or read from a (possibly compressed) file archive, or both.
|
86
|
+
//
|
87
|
+
// cctz_extension::zone_info_source_factory() will be called:
|
88
|
+
// (1) from the same thread as the cctz::load_time_zone() call,
|
89
|
+
// (2) only once for any zone name, and
|
90
|
+
// (3) serially (i.e., no concurrent execution).
|
91
|
+
//
|
92
|
+
// The fallback factory obtains zoneinfo data by reading files in ${TZDIR},
|
93
|
+
// and it is used automatically when no zone_info_source_factory definition
|
94
|
+
// is linked into the program.
|
95
|
+
extern ZoneInfoSourceFactory zone_info_source_factory;
|
96
|
+
|
97
|
+
} // namespace cctz_extension
|
98
|
+
} // namespace time_internal
|
99
|
+
ABSL_NAMESPACE_END
|
100
|
+
} // namespace absl
|
101
|
+
|
102
|
+
#endif // ABSL_TIME_INTERNAL_CCTZ_ZONE_INFO_SOURCE_H_
|