3#ifndef _TIME_SHIELD_NTP_CLIENT_CORE_HPP_INCLUDED
4#define _TIME_SHIELD_NTP_CLIENT_CORE_HPP_INCLUDED
20 const std::string& host,
24 int64_t& out_offset_us,
25 int64_t& out_delay_us,
26 int& out_stratum)
noexcept {
51 if (!transport.transact(req, out_error_code)) {
52 if (out_error_code == 0) {
58 uint64_t arrival_us = 0;
64 if (!
parse_server_packet(reply, arrival_us, out_offset_us, out_delay_us, out_stratum, out_error_code)) {
65 if (out_error_code == 0) {
78 if (v < 0)
return false;
79 out =
static_cast<uint64_t
>(v);
Abstract UDP transport interface for NTP queries.
Core NTP query logic that parses packets and computes offsets.
static bool get_now_us(uint64_t &out) noexcept
Read current realtime clock in microseconds.
bool query(IUdpTransport &transport, const std::string &host, int port, int timeout_ms, int &out_error_code, int64_t &out_offset_us, int64_t &out_delay_us, int &out_stratum) noexcept
Perform one NTP transaction using a UDP transport.
int64_t now_realtime_us()
Get current real time in microseconds using a platform-specific method.
static bool parse_server_packet(const NtpPacket &pkt, uint64_t arrival_us, int64_t &offset_us, int64_t &delay_us, int &stratum, int &out_error_code) noexcept
Parse server response and compute offset and delay.
static void fill_client_packet(NtpPacket &pkt, uint64_t now_us)
Fill an NTP client request packet using local time.
Main namespace for the Time Shield library.
NTP packet layout (48 bytes).
UDP request parameters for NTP transactions.
std::size_t send_size
Outgoing payload size in bytes.
int timeout_ms
Receive timeout in milliseconds.
std::string host
Target host name or IP address.
std::size_t recv_size
Receive buffer size in bytes.
const void * send_data
Pointer to outgoing payload.
void * recv_data
Pointer to receive buffer.