| // 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. |
| |
| #ifndef GARNET_BIN_NETWORK_TIME_ROUGHTIME_SERVER_H_ |
| #define GARNET_BIN_NETWORK_TIME_ROUGHTIME_SERVER_H_ |
| |
| #include <protocol.h> |
| #include <stdint.h> |
| #include <string.h> |
| |
| #include <lib/zx/time.h> |
| |
| #include <map> |
| #include <optional> |
| #include <string> |
| #include <utility> |
| |
| namespace time_server { |
| |
| enum Status { |
| OK, |
| NOT_SUPPORTED, // Server conf is invalid/not supported |
| BAD_RESPONSE, // Bad response from server, most probably can't verify |
| // certificate |
| NETWORK_ERROR // Either timeout while poll or error with other network |
| // operations |
| }; |
| |
| class RoughTimeServer { |
| public: |
| bool IsValid() const; |
| std::pair<Status, std::optional<zx::time_utc>> GetTimeFromServer() const; |
| RoughTimeServer(std::string name, std::string address, uint8_t public_key[], int public_key_len) |
| : name_(std::move(name)), address_(std::move(address)) { |
| if (public_key_len != roughtime::kPublicKeyLength) { |
| valid_ = false; |
| return; |
| } |
| valid_ = true; |
| memcpy(public_key_, public_key, roughtime::kPublicKeyLength); |
| } |
| ~RoughTimeServer() = default; |
| |
| private: |
| bool valid_ = false; |
| mutable bool logged_once_ = false; |
| std::string name_; |
| std::string address_; |
| uint8_t public_key_[roughtime::kPublicKeyLength]; |
| }; |
| |
| } // namespace time_server |
| |
| #endif // GARNET_BIN_NETWORK_TIME_ROUGHTIME_SERVER_H_ |