Move quiche_time_utils to platform/default.
PiperOrigin-RevId: 355511520
Change-Id: I81552118e4d7354c154b57d2dd286e2e76ec5638
diff --git a/common/platform/api/quiche_time_utils.h b/common/platform/api/quiche_time_utils.h
index e1e59f0..9a957b0 100644
--- a/common/platform/api/quiche_time_utils.h
+++ b/common/platform/api/quiche_time_utils.h
@@ -7,7 +7,7 @@
#include <cstdint>
-#include "net/quiche/common/platform/impl/quiche_time_utils_impl.h"
+#include "quiche_platform_impl/quiche_time_utils_impl.h"
namespace quiche {
diff --git a/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.cc b/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.cc
new file mode 100644
index 0000000..1c6889f
--- /dev/null
+++ b/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.cc
@@ -0,0 +1,52 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "quiche_platform_impl/quiche_time_utils_impl.h"
+
+#include "absl/time/civil_time.h"
+#include "absl/time/time.h"
+
+namespace quiche {
+
+namespace {
+absl::optional<int64_t> QuicheUtcDateTimeToUnixSecondsInner(int year,
+ int month,
+ int day,
+ int hour,
+ int minute,
+ int second) {
+ const absl::CivilSecond civil_time(year, month, day, hour, minute, second);
+ if (second != 60 &&
+ (civil_time.year() != year || civil_time.month() != month ||
+ civil_time.day() != day || civil_time.hour() != hour ||
+ civil_time.minute() != minute || civil_time.second() != second)) {
+ return absl::nullopt;
+ }
+
+ const absl::Time time = absl::FromCivil(civil_time, absl::UTCTimeZone());
+ return absl::ToUnixSeconds(time);
+}
+} // namespace
+
+absl::optional<int64_t> QuicheUtcDateTimeToUnixSecondsImpl(int year,
+ int month,
+ int day,
+ int hour,
+ int minute,
+ int second) {
+ // Handle leap seconds without letting any other irregularities happen.
+ if (second == 60) {
+ auto previous_second = QuicheUtcDateTimeToUnixSecondsInner(
+ year, month, day, hour, minute, second - 1);
+ if (!previous_second.has_value()) {
+ return absl::nullopt;
+ }
+ return *previous_second + 1;
+ }
+
+ return QuicheUtcDateTimeToUnixSecondsInner(year, month, day, hour, minute,
+ second);
+}
+
+} // namespace quiche
diff --git a/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h b/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h
new file mode 100644
index 0000000..56a08db
--- /dev/null
+++ b/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h
@@ -0,0 +1,23 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef QUICHE_COMMON_PLATFORM_IMPL_QUICHE_TIME_UTILS_IMPL_H_
+#define QUICHE_COMMON_PLATFORM_IMPL_QUICHE_TIME_UTILS_IMPL_H_
+
+#include <cstdint>
+
+#include "absl/types/optional.h"
+
+namespace quiche {
+
+absl::optional<int64_t> QuicheUtcDateTimeToUnixSecondsImpl(int year,
+ int month,
+ int day,
+ int hour,
+ int minute,
+ int second);
+
+} // namespace quiche
+
+#endif // QUICHE_COMMON_PLATFORM_IMPL_QUICHE_TIME_UTILS_IMPL_H_