grpc 1.28.0 → 1.30.2
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 +30 -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 +212 -241
- 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/auth_filters.h +0 -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/ext/grpc/rb_call_credentials.c +3 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/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_import2.proto +23 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +7 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +7 -1
- data/src/ruby/spec/support/services.rb +10 -4
- 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 +115 -39
- 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,122 @@
|
|
1
|
+
/* Layout and location of TZif files. */
|
2
|
+
|
3
|
+
#ifndef TZFILE_H
|
4
|
+
|
5
|
+
#define TZFILE_H
|
6
|
+
|
7
|
+
/*
|
8
|
+
** This file is in the public domain, so clarified as of
|
9
|
+
** 1996-06-05 by Arthur David Olson.
|
10
|
+
*/
|
11
|
+
|
12
|
+
/*
|
13
|
+
** This header is for use ONLY with the time conversion code.
|
14
|
+
** There is no guarantee that it will remain unchanged,
|
15
|
+
** or that it will remain at all.
|
16
|
+
** Do NOT copy it to any system include directory.
|
17
|
+
** Thank you!
|
18
|
+
*/
|
19
|
+
|
20
|
+
/*
|
21
|
+
** Information about time zone files.
|
22
|
+
*/
|
23
|
+
|
24
|
+
#ifndef TZDIR
|
25
|
+
#define TZDIR "/usr/share/zoneinfo" /* Time zone object file directory */
|
26
|
+
#endif /* !defined TZDIR */
|
27
|
+
|
28
|
+
#ifndef TZDEFAULT
|
29
|
+
#define TZDEFAULT "/etc/localtime"
|
30
|
+
#endif /* !defined TZDEFAULT */
|
31
|
+
|
32
|
+
#ifndef TZDEFRULES
|
33
|
+
#define TZDEFRULES "posixrules"
|
34
|
+
#endif /* !defined TZDEFRULES */
|
35
|
+
|
36
|
+
/* See Internet RFC 8536 for more details about the following format. */
|
37
|
+
|
38
|
+
/*
|
39
|
+
** Each file begins with. . .
|
40
|
+
*/
|
41
|
+
|
42
|
+
#define TZ_MAGIC "TZif"
|
43
|
+
|
44
|
+
struct tzhead {
|
45
|
+
char tzh_magic[4]; /* TZ_MAGIC */
|
46
|
+
char tzh_version[1]; /* '\0' or '2' or '3' as of 2013 */
|
47
|
+
char tzh_reserved[15]; /* reserved; must be zero */
|
48
|
+
char tzh_ttisutcnt[4]; /* coded number of trans. time flags */
|
49
|
+
char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */
|
50
|
+
char tzh_leapcnt[4]; /* coded number of leap seconds */
|
51
|
+
char tzh_timecnt[4]; /* coded number of transition times */
|
52
|
+
char tzh_typecnt[4]; /* coded number of local time types */
|
53
|
+
char tzh_charcnt[4]; /* coded number of abbr. chars */
|
54
|
+
};
|
55
|
+
|
56
|
+
/*
|
57
|
+
** . . .followed by. . .
|
58
|
+
**
|
59
|
+
** tzh_timecnt (char [4])s coded transition times a la time(2)
|
60
|
+
** tzh_timecnt (unsigned char)s types of local time starting at above
|
61
|
+
** tzh_typecnt repetitions of
|
62
|
+
** one (char [4]) coded UT offset in seconds
|
63
|
+
** one (unsigned char) used to set tm_isdst
|
64
|
+
** one (unsigned char) that's an abbreviation list index
|
65
|
+
** tzh_charcnt (char)s '\0'-terminated zone abbreviations
|
66
|
+
** tzh_leapcnt repetitions of
|
67
|
+
** one (char [4]) coded leap second transition times
|
68
|
+
** one (char [4]) total correction after above
|
69
|
+
** tzh_ttisstdcnt (char)s indexed by type; if 1, transition
|
70
|
+
** time is standard time, if 0,
|
71
|
+
** transition time is local (wall clock)
|
72
|
+
** time; if absent, transition times are
|
73
|
+
** assumed to be local time
|
74
|
+
** tzh_ttisutcnt (char)s indexed by type; if 1, transition
|
75
|
+
** time is UT, if 0, transition time is
|
76
|
+
** local time; if absent, transition
|
77
|
+
** times are assumed to be local time.
|
78
|
+
** When this is 1, the corresponding
|
79
|
+
** std/wall indicator must also be 1.
|
80
|
+
*/
|
81
|
+
|
82
|
+
/*
|
83
|
+
** If tzh_version is '2' or greater, the above is followed by a second instance
|
84
|
+
** of tzhead and a second instance of the data in which each coded transition
|
85
|
+
** time uses 8 rather than 4 chars,
|
86
|
+
** then a POSIX-TZ-environment-variable-style std::string for use in handling
|
87
|
+
** instants after the last transition time stored in the file
|
88
|
+
** (with nothing between the newlines if there is no POSIX representation for
|
89
|
+
** such instants).
|
90
|
+
**
|
91
|
+
** If tz_version is '3' or greater, the above is extended as follows.
|
92
|
+
** First, the POSIX TZ std::string's hour offset may range from -167
|
93
|
+
** through 167 as compared to the POSIX-required 0 through 24.
|
94
|
+
** Second, its DST start time may be January 1 at 00:00 and its stop
|
95
|
+
** time December 31 at 24:00 plus the difference between DST and
|
96
|
+
** standard time, indicating DST all year.
|
97
|
+
*/
|
98
|
+
|
99
|
+
/*
|
100
|
+
** In the current implementation, "tzset()" refuses to deal with files that
|
101
|
+
** exceed any of the limits below.
|
102
|
+
*/
|
103
|
+
|
104
|
+
#ifndef TZ_MAX_TIMES
|
105
|
+
#define TZ_MAX_TIMES 2000
|
106
|
+
#endif /* !defined TZ_MAX_TIMES */
|
107
|
+
|
108
|
+
#ifndef TZ_MAX_TYPES
|
109
|
+
/* This must be at least 17 for Europe/Samara and Europe/Vilnius. */
|
110
|
+
#define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */
|
111
|
+
#endif /* !defined TZ_MAX_TYPES */
|
112
|
+
|
113
|
+
#ifndef TZ_MAX_CHARS
|
114
|
+
#define TZ_MAX_CHARS 50 /* Maximum number of abbreviation characters */
|
115
|
+
/* (limited by what unsigned chars can hold) */
|
116
|
+
#endif /* !defined TZ_MAX_CHARS */
|
117
|
+
|
118
|
+
#ifndef TZ_MAX_LEAPS
|
119
|
+
#define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */
|
120
|
+
#endif /* !defined TZ_MAX_LEAPS */
|
121
|
+
|
122
|
+
#endif /* !defined TZFILE_H */
|
@@ -0,0 +1,115 @@
|
|
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
|
+
#include "absl/time/internal/cctz/include/cctz/zone_info_source.h"
|
16
|
+
|
17
|
+
#include "absl/base/config.h"
|
18
|
+
|
19
|
+
namespace absl {
|
20
|
+
ABSL_NAMESPACE_BEGIN
|
21
|
+
namespace time_internal {
|
22
|
+
namespace cctz {
|
23
|
+
|
24
|
+
// Defined out-of-line to avoid emitting a weak vtable in all TUs.
|
25
|
+
ZoneInfoSource::~ZoneInfoSource() {}
|
26
|
+
std::string ZoneInfoSource::Version() const { return std::string(); }
|
27
|
+
|
28
|
+
} // namespace cctz
|
29
|
+
} // namespace time_internal
|
30
|
+
ABSL_NAMESPACE_END
|
31
|
+
} // namespace absl
|
32
|
+
|
33
|
+
namespace absl {
|
34
|
+
ABSL_NAMESPACE_BEGIN
|
35
|
+
namespace time_internal {
|
36
|
+
namespace cctz_extension {
|
37
|
+
|
38
|
+
namespace {
|
39
|
+
|
40
|
+
// A default for cctz_extension::zone_info_source_factory, which simply
|
41
|
+
// defers to the fallback factory.
|
42
|
+
std::unique_ptr<absl::time_internal::cctz::ZoneInfoSource> DefaultFactory(
|
43
|
+
const std::string& name,
|
44
|
+
const std::function<
|
45
|
+
std::unique_ptr<absl::time_internal::cctz::ZoneInfoSource>(
|
46
|
+
const std::string& name)>& fallback_factory) {
|
47
|
+
return fallback_factory(name);
|
48
|
+
}
|
49
|
+
|
50
|
+
} // namespace
|
51
|
+
|
52
|
+
// A "weak" definition for cctz_extension::zone_info_source_factory.
|
53
|
+
// The user may override this with their own "strong" definition (see
|
54
|
+
// zone_info_source.h).
|
55
|
+
#if !defined(__has_attribute)
|
56
|
+
#define __has_attribute(x) 0
|
57
|
+
#endif
|
58
|
+
// MinGW is GCC on Windows, so while it asserts __has_attribute(weak), the
|
59
|
+
// Windows linker cannot handle that. Nor does the MinGW compiler know how to
|
60
|
+
// pass "#pragma comment(linker, ...)" to the Windows linker.
|
61
|
+
#if (__has_attribute(weak) || defined(__GNUC__)) && !defined(__MINGW32__)
|
62
|
+
ZoneInfoSourceFactory zone_info_source_factory __attribute__((weak)) =
|
63
|
+
DefaultFactory;
|
64
|
+
#elif defined(_MSC_VER) && !defined(__MINGW32__) && !defined(_LIBCPP_VERSION)
|
65
|
+
extern ZoneInfoSourceFactory zone_info_source_factory;
|
66
|
+
extern ZoneInfoSourceFactory default_factory;
|
67
|
+
ZoneInfoSourceFactory default_factory = DefaultFactory;
|
68
|
+
#if defined(_M_IX86)
|
69
|
+
#pragma comment( \
|
70
|
+
linker, \
|
71
|
+
"/alternatename:?zone_info_source_factory@cctz_extension@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
72
|
+
"@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
73
|
+
"@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
74
|
+
"@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
|
75
|
+
"@ABV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
76
|
+
"@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
77
|
+
"@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
|
78
|
+
"@@ZA=?default_factory@cctz_extension@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
79
|
+
"@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
80
|
+
"@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
81
|
+
"@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
|
82
|
+
"@ABV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
83
|
+
"@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
84
|
+
"@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
|
85
|
+
"@@ZA")
|
86
|
+
#elif defined(_M_IA_64) || defined(_M_AMD64) || defined(_M_ARM64)
|
87
|
+
#pragma comment( \
|
88
|
+
linker, \
|
89
|
+
"/alternatename:?zone_info_source_factory@cctz_extension@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
90
|
+
"@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
91
|
+
"@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
92
|
+
"@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
|
93
|
+
"@AEBV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
94
|
+
"@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
95
|
+
"@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
|
96
|
+
"@@ZEA=?default_factory@cctz_extension@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
97
|
+
"@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
98
|
+
"@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
99
|
+
"@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
|
100
|
+
"@AEBV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
101
|
+
"@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS \
|
102
|
+
"@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
|
103
|
+
"@@ZEA")
|
104
|
+
#else
|
105
|
+
#error Unsupported MSVC platform
|
106
|
+
#endif // _M_<PLATFORM>
|
107
|
+
#else
|
108
|
+
// Make it a "strong" definition if we have no other choice.
|
109
|
+
ZoneInfoSourceFactory zone_info_source_factory = DefaultFactory;
|
110
|
+
#endif
|
111
|
+
|
112
|
+
} // namespace cctz_extension
|
113
|
+
} // namespace time_internal
|
114
|
+
ABSL_NAMESPACE_END
|
115
|
+
} // namespace absl
|
@@ -0,0 +1,31 @@
|
|
1
|
+
// Copyright 2018 The Abseil Authors.
|
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
|
+
#include <chrono>
|
16
|
+
#include <cstdint>
|
17
|
+
|
18
|
+
namespace absl {
|
19
|
+
ABSL_NAMESPACE_BEGIN
|
20
|
+
namespace time_internal {
|
21
|
+
|
22
|
+
static int64_t GetCurrentTimeNanosFromSystem() {
|
23
|
+
return std::chrono::duration_cast<std::chrono::nanoseconds>(
|
24
|
+
std::chrono::system_clock::now() -
|
25
|
+
std::chrono::system_clock::from_time_t(0))
|
26
|
+
.count();
|
27
|
+
}
|
28
|
+
|
29
|
+
} // namespace time_internal
|
30
|
+
ABSL_NAMESPACE_END
|
31
|
+
} // namespace absl
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#include "absl/time/clock.h"
|
2
|
+
|
3
|
+
#include <sys/time.h>
|
4
|
+
#include <ctime>
|
5
|
+
#include <cstdint>
|
6
|
+
|
7
|
+
#include "absl/base/internal/raw_logging.h"
|
8
|
+
|
9
|
+
namespace absl {
|
10
|
+
ABSL_NAMESPACE_BEGIN
|
11
|
+
namespace time_internal {
|
12
|
+
|
13
|
+
static int64_t GetCurrentTimeNanosFromSystem() {
|
14
|
+
const int64_t kNanosPerSecond = 1000 * 1000 * 1000;
|
15
|
+
struct timespec ts;
|
16
|
+
ABSL_RAW_CHECK(clock_gettime(CLOCK_REALTIME, &ts) == 0,
|
17
|
+
"Failed to read real-time clock.");
|
18
|
+
return (int64_t{ts.tv_sec} * kNanosPerSecond +
|
19
|
+
int64_t{ts.tv_nsec});
|
20
|
+
}
|
21
|
+
|
22
|
+
} // namespace time_internal
|
23
|
+
ABSL_NAMESPACE_END
|
24
|
+
} // namespace absl
|
@@ -0,0 +1,499 @@
|
|
1
|
+
// Copyright 2017 The Abseil Authors.
|
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
|
+
// The implementation of the absl::Time class, which is declared in
|
16
|
+
// //absl/time.h.
|
17
|
+
//
|
18
|
+
// The representation for an absl::Time is an absl::Duration offset from the
|
19
|
+
// epoch. We use the traditional Unix epoch (1970-01-01 00:00:00 +0000)
|
20
|
+
// for convenience, but this is not exposed in the API and could be changed.
|
21
|
+
//
|
22
|
+
// NOTE: To keep type verbosity to a minimum, the following variable naming
|
23
|
+
// conventions are used throughout this file.
|
24
|
+
//
|
25
|
+
// tz: An absl::TimeZone
|
26
|
+
// ci: An absl::TimeZone::CivilInfo
|
27
|
+
// ti: An absl::TimeZone::TimeInfo
|
28
|
+
// cd: An absl::CivilDay or a cctz::civil_day
|
29
|
+
// cs: An absl::CivilSecond or a cctz::civil_second
|
30
|
+
// bd: An absl::Time::Breakdown
|
31
|
+
// cl: A cctz::time_zone::civil_lookup
|
32
|
+
// al: A cctz::time_zone::absolute_lookup
|
33
|
+
|
34
|
+
#include "absl/time/time.h"
|
35
|
+
|
36
|
+
#if defined(_MSC_VER)
|
37
|
+
#include <winsock2.h> // for timeval
|
38
|
+
#endif
|
39
|
+
|
40
|
+
#include <cstring>
|
41
|
+
#include <ctime>
|
42
|
+
#include <limits>
|
43
|
+
|
44
|
+
#include "absl/time/internal/cctz/include/cctz/civil_time.h"
|
45
|
+
#include "absl/time/internal/cctz/include/cctz/time_zone.h"
|
46
|
+
|
47
|
+
namespace cctz = absl::time_internal::cctz;
|
48
|
+
|
49
|
+
namespace absl {
|
50
|
+
ABSL_NAMESPACE_BEGIN
|
51
|
+
|
52
|
+
namespace {
|
53
|
+
|
54
|
+
inline cctz::time_point<cctz::seconds> unix_epoch() {
|
55
|
+
return std::chrono::time_point_cast<cctz::seconds>(
|
56
|
+
std::chrono::system_clock::from_time_t(0));
|
57
|
+
}
|
58
|
+
|
59
|
+
// Floors d to the next unit boundary closer to negative infinity.
|
60
|
+
inline int64_t FloorToUnit(absl::Duration d, absl::Duration unit) {
|
61
|
+
absl::Duration rem;
|
62
|
+
int64_t q = absl::IDivDuration(d, unit, &rem);
|
63
|
+
return (q > 0 ||
|
64
|
+
rem >= ZeroDuration() ||
|
65
|
+
q == std::numeric_limits<int64_t>::min()) ? q : q - 1;
|
66
|
+
}
|
67
|
+
|
68
|
+
inline absl::Time::Breakdown InfiniteFutureBreakdown() {
|
69
|
+
absl::Time::Breakdown bd;
|
70
|
+
bd.year = std::numeric_limits<int64_t>::max();
|
71
|
+
bd.month = 12;
|
72
|
+
bd.day = 31;
|
73
|
+
bd.hour = 23;
|
74
|
+
bd.minute = 59;
|
75
|
+
bd.second = 59;
|
76
|
+
bd.subsecond = absl::InfiniteDuration();
|
77
|
+
bd.weekday = 4;
|
78
|
+
bd.yearday = 365;
|
79
|
+
bd.offset = 0;
|
80
|
+
bd.is_dst = false;
|
81
|
+
bd.zone_abbr = "-00";
|
82
|
+
return bd;
|
83
|
+
}
|
84
|
+
|
85
|
+
inline absl::Time::Breakdown InfinitePastBreakdown() {
|
86
|
+
Time::Breakdown bd;
|
87
|
+
bd.year = std::numeric_limits<int64_t>::min();
|
88
|
+
bd.month = 1;
|
89
|
+
bd.day = 1;
|
90
|
+
bd.hour = 0;
|
91
|
+
bd.minute = 0;
|
92
|
+
bd.second = 0;
|
93
|
+
bd.subsecond = -absl::InfiniteDuration();
|
94
|
+
bd.weekday = 7;
|
95
|
+
bd.yearday = 1;
|
96
|
+
bd.offset = 0;
|
97
|
+
bd.is_dst = false;
|
98
|
+
bd.zone_abbr = "-00";
|
99
|
+
return bd;
|
100
|
+
}
|
101
|
+
|
102
|
+
inline absl::TimeZone::CivilInfo InfiniteFutureCivilInfo() {
|
103
|
+
TimeZone::CivilInfo ci;
|
104
|
+
ci.cs = CivilSecond::max();
|
105
|
+
ci.subsecond = InfiniteDuration();
|
106
|
+
ci.offset = 0;
|
107
|
+
ci.is_dst = false;
|
108
|
+
ci.zone_abbr = "-00";
|
109
|
+
return ci;
|
110
|
+
}
|
111
|
+
|
112
|
+
inline absl::TimeZone::CivilInfo InfinitePastCivilInfo() {
|
113
|
+
TimeZone::CivilInfo ci;
|
114
|
+
ci.cs = CivilSecond::min();
|
115
|
+
ci.subsecond = -InfiniteDuration();
|
116
|
+
ci.offset = 0;
|
117
|
+
ci.is_dst = false;
|
118
|
+
ci.zone_abbr = "-00";
|
119
|
+
return ci;
|
120
|
+
}
|
121
|
+
|
122
|
+
inline absl::TimeConversion InfiniteFutureTimeConversion() {
|
123
|
+
absl::TimeConversion tc;
|
124
|
+
tc.pre = tc.trans = tc.post = absl::InfiniteFuture();
|
125
|
+
tc.kind = absl::TimeConversion::UNIQUE;
|
126
|
+
tc.normalized = true;
|
127
|
+
return tc;
|
128
|
+
}
|
129
|
+
|
130
|
+
inline TimeConversion InfinitePastTimeConversion() {
|
131
|
+
absl::TimeConversion tc;
|
132
|
+
tc.pre = tc.trans = tc.post = absl::InfinitePast();
|
133
|
+
tc.kind = absl::TimeConversion::UNIQUE;
|
134
|
+
tc.normalized = true;
|
135
|
+
return tc;
|
136
|
+
}
|
137
|
+
|
138
|
+
// Makes a Time from sec, overflowing to InfiniteFuture/InfinitePast as
|
139
|
+
// necessary. If sec is min/max, then consult cs+tz to check for overlow.
|
140
|
+
Time MakeTimeWithOverflow(const cctz::time_point<cctz::seconds>& sec,
|
141
|
+
const cctz::civil_second& cs,
|
142
|
+
const cctz::time_zone& tz,
|
143
|
+
bool* normalized = nullptr) {
|
144
|
+
const auto max = cctz::time_point<cctz::seconds>::max();
|
145
|
+
const auto min = cctz::time_point<cctz::seconds>::min();
|
146
|
+
if (sec == max) {
|
147
|
+
const auto al = tz.lookup(max);
|
148
|
+
if (cs > al.cs) {
|
149
|
+
if (normalized) *normalized = true;
|
150
|
+
return absl::InfiniteFuture();
|
151
|
+
}
|
152
|
+
}
|
153
|
+
if (sec == min) {
|
154
|
+
const auto al = tz.lookup(min);
|
155
|
+
if (cs < al.cs) {
|
156
|
+
if (normalized) *normalized = true;
|
157
|
+
return absl::InfinitePast();
|
158
|
+
}
|
159
|
+
}
|
160
|
+
const auto hi = (sec - unix_epoch()).count();
|
161
|
+
return time_internal::FromUnixDuration(time_internal::MakeDuration(hi));
|
162
|
+
}
|
163
|
+
|
164
|
+
// Returns Mon=1..Sun=7.
|
165
|
+
inline int MapWeekday(const cctz::weekday& wd) {
|
166
|
+
switch (wd) {
|
167
|
+
case cctz::weekday::monday:
|
168
|
+
return 1;
|
169
|
+
case cctz::weekday::tuesday:
|
170
|
+
return 2;
|
171
|
+
case cctz::weekday::wednesday:
|
172
|
+
return 3;
|
173
|
+
case cctz::weekday::thursday:
|
174
|
+
return 4;
|
175
|
+
case cctz::weekday::friday:
|
176
|
+
return 5;
|
177
|
+
case cctz::weekday::saturday:
|
178
|
+
return 6;
|
179
|
+
case cctz::weekday::sunday:
|
180
|
+
return 7;
|
181
|
+
}
|
182
|
+
return 1;
|
183
|
+
}
|
184
|
+
|
185
|
+
bool FindTransition(const cctz::time_zone& tz,
|
186
|
+
bool (cctz::time_zone::*find_transition)(
|
187
|
+
const cctz::time_point<cctz::seconds>& tp,
|
188
|
+
cctz::time_zone::civil_transition* trans) const,
|
189
|
+
Time t, TimeZone::CivilTransition* trans) {
|
190
|
+
// Transitions are second-aligned, so we can discard any fractional part.
|
191
|
+
const auto tp = unix_epoch() + cctz::seconds(ToUnixSeconds(t));
|
192
|
+
cctz::time_zone::civil_transition tr;
|
193
|
+
if (!(tz.*find_transition)(tp, &tr)) return false;
|
194
|
+
trans->from = CivilSecond(tr.from);
|
195
|
+
trans->to = CivilSecond(tr.to);
|
196
|
+
return true;
|
197
|
+
}
|
198
|
+
|
199
|
+
} // namespace
|
200
|
+
|
201
|
+
//
|
202
|
+
// Time
|
203
|
+
//
|
204
|
+
|
205
|
+
absl::Time::Breakdown Time::In(absl::TimeZone tz) const {
|
206
|
+
if (*this == absl::InfiniteFuture()) return InfiniteFutureBreakdown();
|
207
|
+
if (*this == absl::InfinitePast()) return InfinitePastBreakdown();
|
208
|
+
|
209
|
+
const auto tp = unix_epoch() + cctz::seconds(time_internal::GetRepHi(rep_));
|
210
|
+
const auto al = cctz::time_zone(tz).lookup(tp);
|
211
|
+
const auto cs = al.cs;
|
212
|
+
const auto cd = cctz::civil_day(cs);
|
213
|
+
|
214
|
+
absl::Time::Breakdown bd;
|
215
|
+
bd.year = cs.year();
|
216
|
+
bd.month = cs.month();
|
217
|
+
bd.day = cs.day();
|
218
|
+
bd.hour = cs.hour();
|
219
|
+
bd.minute = cs.minute();
|
220
|
+
bd.second = cs.second();
|
221
|
+
bd.subsecond = time_internal::MakeDuration(0, time_internal::GetRepLo(rep_));
|
222
|
+
bd.weekday = MapWeekday(cctz::get_weekday(cd));
|
223
|
+
bd.yearday = cctz::get_yearday(cd);
|
224
|
+
bd.offset = al.offset;
|
225
|
+
bd.is_dst = al.is_dst;
|
226
|
+
bd.zone_abbr = al.abbr;
|
227
|
+
return bd;
|
228
|
+
}
|
229
|
+
|
230
|
+
//
|
231
|
+
// Conversions from/to other time types.
|
232
|
+
//
|
233
|
+
|
234
|
+
absl::Time FromUDate(double udate) {
|
235
|
+
return time_internal::FromUnixDuration(absl::Milliseconds(udate));
|
236
|
+
}
|
237
|
+
|
238
|
+
absl::Time FromUniversal(int64_t universal) {
|
239
|
+
return absl::UniversalEpoch() + 100 * absl::Nanoseconds(universal);
|
240
|
+
}
|
241
|
+
|
242
|
+
int64_t ToUnixNanos(Time t) {
|
243
|
+
if (time_internal::GetRepHi(time_internal::ToUnixDuration(t)) >= 0 &&
|
244
|
+
time_internal::GetRepHi(time_internal::ToUnixDuration(t)) >> 33 == 0) {
|
245
|
+
return (time_internal::GetRepHi(time_internal::ToUnixDuration(t)) *
|
246
|
+
1000 * 1000 * 1000) +
|
247
|
+
(time_internal::GetRepLo(time_internal::ToUnixDuration(t)) / 4);
|
248
|
+
}
|
249
|
+
return FloorToUnit(time_internal::ToUnixDuration(t), absl::Nanoseconds(1));
|
250
|
+
}
|
251
|
+
|
252
|
+
int64_t ToUnixMicros(Time t) {
|
253
|
+
if (time_internal::GetRepHi(time_internal::ToUnixDuration(t)) >= 0 &&
|
254
|
+
time_internal::GetRepHi(time_internal::ToUnixDuration(t)) >> 43 == 0) {
|
255
|
+
return (time_internal::GetRepHi(time_internal::ToUnixDuration(t)) *
|
256
|
+
1000 * 1000) +
|
257
|
+
(time_internal::GetRepLo(time_internal::ToUnixDuration(t)) / 4000);
|
258
|
+
}
|
259
|
+
return FloorToUnit(time_internal::ToUnixDuration(t), absl::Microseconds(1));
|
260
|
+
}
|
261
|
+
|
262
|
+
int64_t ToUnixMillis(Time t) {
|
263
|
+
if (time_internal::GetRepHi(time_internal::ToUnixDuration(t)) >= 0 &&
|
264
|
+
time_internal::GetRepHi(time_internal::ToUnixDuration(t)) >> 53 == 0) {
|
265
|
+
return (time_internal::GetRepHi(time_internal::ToUnixDuration(t)) * 1000) +
|
266
|
+
(time_internal::GetRepLo(time_internal::ToUnixDuration(t)) /
|
267
|
+
(4000 * 1000));
|
268
|
+
}
|
269
|
+
return FloorToUnit(time_internal::ToUnixDuration(t), absl::Milliseconds(1));
|
270
|
+
}
|
271
|
+
|
272
|
+
int64_t ToUnixSeconds(Time t) {
|
273
|
+
return time_internal::GetRepHi(time_internal::ToUnixDuration(t));
|
274
|
+
}
|
275
|
+
|
276
|
+
time_t ToTimeT(Time t) { return absl::ToTimespec(t).tv_sec; }
|
277
|
+
|
278
|
+
double ToUDate(Time t) {
|
279
|
+
return absl::FDivDuration(time_internal::ToUnixDuration(t),
|
280
|
+
absl::Milliseconds(1));
|
281
|
+
}
|
282
|
+
|
283
|
+
int64_t ToUniversal(absl::Time t) {
|
284
|
+
return absl::FloorToUnit(t - absl::UniversalEpoch(), absl::Nanoseconds(100));
|
285
|
+
}
|
286
|
+
|
287
|
+
absl::Time TimeFromTimespec(timespec ts) {
|
288
|
+
return time_internal::FromUnixDuration(absl::DurationFromTimespec(ts));
|
289
|
+
}
|
290
|
+
|
291
|
+
absl::Time TimeFromTimeval(timeval tv) {
|
292
|
+
return time_internal::FromUnixDuration(absl::DurationFromTimeval(tv));
|
293
|
+
}
|
294
|
+
|
295
|
+
timespec ToTimespec(Time t) {
|
296
|
+
timespec ts;
|
297
|
+
absl::Duration d = time_internal::ToUnixDuration(t);
|
298
|
+
if (!time_internal::IsInfiniteDuration(d)) {
|
299
|
+
ts.tv_sec = time_internal::GetRepHi(d);
|
300
|
+
if (ts.tv_sec == time_internal::GetRepHi(d)) { // no time_t narrowing
|
301
|
+
ts.tv_nsec = time_internal::GetRepLo(d) / 4; // floor
|
302
|
+
return ts;
|
303
|
+
}
|
304
|
+
}
|
305
|
+
if (d >= absl::ZeroDuration()) {
|
306
|
+
ts.tv_sec = std::numeric_limits<time_t>::max();
|
307
|
+
ts.tv_nsec = 1000 * 1000 * 1000 - 1;
|
308
|
+
} else {
|
309
|
+
ts.tv_sec = std::numeric_limits<time_t>::min();
|
310
|
+
ts.tv_nsec = 0;
|
311
|
+
}
|
312
|
+
return ts;
|
313
|
+
}
|
314
|
+
|
315
|
+
timeval ToTimeval(Time t) {
|
316
|
+
timeval tv;
|
317
|
+
timespec ts = absl::ToTimespec(t);
|
318
|
+
tv.tv_sec = ts.tv_sec;
|
319
|
+
if (tv.tv_sec != ts.tv_sec) { // narrowing
|
320
|
+
if (ts.tv_sec < 0) {
|
321
|
+
tv.tv_sec = std::numeric_limits<decltype(tv.tv_sec)>::min();
|
322
|
+
tv.tv_usec = 0;
|
323
|
+
} else {
|
324
|
+
tv.tv_sec = std::numeric_limits<decltype(tv.tv_sec)>::max();
|
325
|
+
tv.tv_usec = 1000 * 1000 - 1;
|
326
|
+
}
|
327
|
+
return tv;
|
328
|
+
}
|
329
|
+
tv.tv_usec = static_cast<int>(ts.tv_nsec / 1000); // suseconds_t
|
330
|
+
return tv;
|
331
|
+
}
|
332
|
+
|
333
|
+
Time FromChrono(const std::chrono::system_clock::time_point& tp) {
|
334
|
+
return time_internal::FromUnixDuration(time_internal::FromChrono(
|
335
|
+
tp - std::chrono::system_clock::from_time_t(0)));
|
336
|
+
}
|
337
|
+
|
338
|
+
std::chrono::system_clock::time_point ToChronoTime(absl::Time t) {
|
339
|
+
using D = std::chrono::system_clock::duration;
|
340
|
+
auto d = time_internal::ToUnixDuration(t);
|
341
|
+
if (d < ZeroDuration()) d = Floor(d, FromChrono(D{1}));
|
342
|
+
return std::chrono::system_clock::from_time_t(0) +
|
343
|
+
time_internal::ToChronoDuration<D>(d);
|
344
|
+
}
|
345
|
+
|
346
|
+
//
|
347
|
+
// TimeZone
|
348
|
+
//
|
349
|
+
|
350
|
+
absl::TimeZone::CivilInfo TimeZone::At(Time t) const {
|
351
|
+
if (t == absl::InfiniteFuture()) return InfiniteFutureCivilInfo();
|
352
|
+
if (t == absl::InfinitePast()) return InfinitePastCivilInfo();
|
353
|
+
|
354
|
+
const auto ud = time_internal::ToUnixDuration(t);
|
355
|
+
const auto tp = unix_epoch() + cctz::seconds(time_internal::GetRepHi(ud));
|
356
|
+
const auto al = cz_.lookup(tp);
|
357
|
+
|
358
|
+
TimeZone::CivilInfo ci;
|
359
|
+
ci.cs = CivilSecond(al.cs);
|
360
|
+
ci.subsecond = time_internal::MakeDuration(0, time_internal::GetRepLo(ud));
|
361
|
+
ci.offset = al.offset;
|
362
|
+
ci.is_dst = al.is_dst;
|
363
|
+
ci.zone_abbr = al.abbr;
|
364
|
+
return ci;
|
365
|
+
}
|
366
|
+
|
367
|
+
absl::TimeZone::TimeInfo TimeZone::At(CivilSecond ct) const {
|
368
|
+
const cctz::civil_second cs(ct);
|
369
|
+
const auto cl = cz_.lookup(cs);
|
370
|
+
|
371
|
+
TimeZone::TimeInfo ti;
|
372
|
+
switch (cl.kind) {
|
373
|
+
case cctz::time_zone::civil_lookup::UNIQUE:
|
374
|
+
ti.kind = TimeZone::TimeInfo::UNIQUE;
|
375
|
+
break;
|
376
|
+
case cctz::time_zone::civil_lookup::SKIPPED:
|
377
|
+
ti.kind = TimeZone::TimeInfo::SKIPPED;
|
378
|
+
break;
|
379
|
+
case cctz::time_zone::civil_lookup::REPEATED:
|
380
|
+
ti.kind = TimeZone::TimeInfo::REPEATED;
|
381
|
+
break;
|
382
|
+
}
|
383
|
+
ti.pre = MakeTimeWithOverflow(cl.pre, cs, cz_);
|
384
|
+
ti.trans = MakeTimeWithOverflow(cl.trans, cs, cz_);
|
385
|
+
ti.post = MakeTimeWithOverflow(cl.post, cs, cz_);
|
386
|
+
return ti;
|
387
|
+
}
|
388
|
+
|
389
|
+
bool TimeZone::NextTransition(Time t, CivilTransition* trans) const {
|
390
|
+
return FindTransition(cz_, &cctz::time_zone::next_transition, t, trans);
|
391
|
+
}
|
392
|
+
|
393
|
+
bool TimeZone::PrevTransition(Time t, CivilTransition* trans) const {
|
394
|
+
return FindTransition(cz_, &cctz::time_zone::prev_transition, t, trans);
|
395
|
+
}
|
396
|
+
|
397
|
+
//
|
398
|
+
// Conversions involving time zones.
|
399
|
+
//
|
400
|
+
|
401
|
+
absl::TimeConversion ConvertDateTime(int64_t year, int mon, int day, int hour,
|
402
|
+
int min, int sec, TimeZone tz) {
|
403
|
+
// Avoids years that are too extreme for CivilSecond to normalize.
|
404
|
+
if (year > 300000000000) return InfiniteFutureTimeConversion();
|
405
|
+
if (year < -300000000000) return InfinitePastTimeConversion();
|
406
|
+
|
407
|
+
const CivilSecond cs(year, mon, day, hour, min, sec);
|
408
|
+
const auto ti = tz.At(cs);
|
409
|
+
|
410
|
+
TimeConversion tc;
|
411
|
+
tc.pre = ti.pre;
|
412
|
+
tc.trans = ti.trans;
|
413
|
+
tc.post = ti.post;
|
414
|
+
switch (ti.kind) {
|
415
|
+
case TimeZone::TimeInfo::UNIQUE:
|
416
|
+
tc.kind = TimeConversion::UNIQUE;
|
417
|
+
break;
|
418
|
+
case TimeZone::TimeInfo::SKIPPED:
|
419
|
+
tc.kind = TimeConversion::SKIPPED;
|
420
|
+
break;
|
421
|
+
case TimeZone::TimeInfo::REPEATED:
|
422
|
+
tc.kind = TimeConversion::REPEATED;
|
423
|
+
break;
|
424
|
+
}
|
425
|
+
tc.normalized = false;
|
426
|
+
if (year != cs.year() || mon != cs.month() || day != cs.day() ||
|
427
|
+
hour != cs.hour() || min != cs.minute() || sec != cs.second()) {
|
428
|
+
tc.normalized = true;
|
429
|
+
}
|
430
|
+
return tc;
|
431
|
+
}
|
432
|
+
|
433
|
+
absl::Time FromTM(const struct tm& tm, absl::TimeZone tz) {
|
434
|
+
civil_year_t tm_year = tm.tm_year;
|
435
|
+
// Avoids years that are too extreme for CivilSecond to normalize.
|
436
|
+
if (tm_year > 300000000000ll) return InfiniteFuture();
|
437
|
+
if (tm_year < -300000000000ll) return InfinitePast();
|
438
|
+
int tm_mon = tm.tm_mon;
|
439
|
+
if (tm_mon == std::numeric_limits<int>::max()) {
|
440
|
+
tm_mon -= 12;
|
441
|
+
tm_year += 1;
|
442
|
+
}
|
443
|
+
const auto ti = tz.At(CivilSecond(tm_year + 1900, tm_mon + 1, tm.tm_mday,
|
444
|
+
tm.tm_hour, tm.tm_min, tm.tm_sec));
|
445
|
+
return tm.tm_isdst == 0 ? ti.post : ti.pre;
|
446
|
+
}
|
447
|
+
|
448
|
+
struct tm ToTM(absl::Time t, absl::TimeZone tz) {
|
449
|
+
struct tm tm = {};
|
450
|
+
|
451
|
+
const auto ci = tz.At(t);
|
452
|
+
const auto& cs = ci.cs;
|
453
|
+
tm.tm_sec = cs.second();
|
454
|
+
tm.tm_min = cs.minute();
|
455
|
+
tm.tm_hour = cs.hour();
|
456
|
+
tm.tm_mday = cs.day();
|
457
|
+
tm.tm_mon = cs.month() - 1;
|
458
|
+
|
459
|
+
// Saturates tm.tm_year in cases of over/underflow, accounting for the fact
|
460
|
+
// that tm.tm_year is years since 1900.
|
461
|
+
if (cs.year() < std::numeric_limits<int>::min() + 1900) {
|
462
|
+
tm.tm_year = std::numeric_limits<int>::min();
|
463
|
+
} else if (cs.year() > std::numeric_limits<int>::max()) {
|
464
|
+
tm.tm_year = std::numeric_limits<int>::max() - 1900;
|
465
|
+
} else {
|
466
|
+
tm.tm_year = static_cast<int>(cs.year() - 1900);
|
467
|
+
}
|
468
|
+
|
469
|
+
switch (GetWeekday(cs)) {
|
470
|
+
case Weekday::sunday:
|
471
|
+
tm.tm_wday = 0;
|
472
|
+
break;
|
473
|
+
case Weekday::monday:
|
474
|
+
tm.tm_wday = 1;
|
475
|
+
break;
|
476
|
+
case Weekday::tuesday:
|
477
|
+
tm.tm_wday = 2;
|
478
|
+
break;
|
479
|
+
case Weekday::wednesday:
|
480
|
+
tm.tm_wday = 3;
|
481
|
+
break;
|
482
|
+
case Weekday::thursday:
|
483
|
+
tm.tm_wday = 4;
|
484
|
+
break;
|
485
|
+
case Weekday::friday:
|
486
|
+
tm.tm_wday = 5;
|
487
|
+
break;
|
488
|
+
case Weekday::saturday:
|
489
|
+
tm.tm_wday = 6;
|
490
|
+
break;
|
491
|
+
}
|
492
|
+
tm.tm_yday = GetYearDay(cs) - 1;
|
493
|
+
tm.tm_isdst = ci.is_dst ? 1 : 0;
|
494
|
+
|
495
|
+
return tm;
|
496
|
+
}
|
497
|
+
|
498
|
+
ABSL_NAMESPACE_END
|
499
|
+
} // namespace absl
|