| // Copyright 2017 The Fuchsia 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 "garnet/bin/network_time_service/service.h" |
| |
| #include <lib/syslog/cpp/macros.h> |
| #include <zircon/syscalls.h> |
| |
| #include <fstream> |
| |
| namespace network_time_service { |
| |
| TimeServiceImpl::TimeServiceImpl(std::unique_ptr<sys::ComponentContext> context, |
| const char server_config_path[], const char rtc_device_path[]) |
| : context_(std::move(context)), time_server_(server_config_path, rtc_device_path) { |
| context_->outgoing()->AddPublicService(deprecated_bindings_.GetHandler(this)); |
| } |
| |
| TimeServiceImpl::~TimeServiceImpl() = default; |
| |
| void TimeServiceImpl::Update(uint8_t num_retries, UpdateCallback callback) { |
| std::optional<zx::time_utc> result = time_server_.UpdateSystemTime(num_retries); |
| if (!result) { |
| FX_LOGS(ERROR) << "Failed to update system time after " << static_cast<int>(num_retries) |
| << " attempts"; |
| } |
| std::unique_ptr<fuchsia::deprecatedtimezone::UpdatedTime> update = nullptr; |
| if (result) { |
| update = fuchsia::deprecatedtimezone::UpdatedTime::New(); |
| update->utc_time = result->get(); |
| } |
| callback(std::move(update)); |
| } |
| |
| } // namespace network_time_service |