1 | // |
2 | // NTPPacket.h |
3 | // |
4 | // Library: Net |
5 | // Package: NTP |
6 | // Module: NTPPacket |
7 | // |
8 | // Definition of the NTPPacket class. |
9 | // |
10 | // Copyright (c) 2006, Applied Informatics Software Engineering GmbH. |
11 | // and Contributors. |
12 | // |
13 | // SPDX-License-Identifier: BSL-1.0 |
14 | // |
15 | |
16 | |
17 | #ifndef Net_NTPPacket_INCLUDED |
18 | #define Net_NTPPacket_INCLUDED |
19 | |
20 | |
21 | #include "Poco/Foundation.h" |
22 | #include "Poco/Net/Net.h" |
23 | #include "Poco/Timestamp.h" |
24 | |
25 | namespace Poco { |
26 | namespace Net { |
27 | |
28 | |
29 | class Net_API NTPPacket |
30 | /// This class is the NTP packet abstraction. |
31 | { |
32 | public: |
33 | NTPPacket(); |
34 | /// Creates an NTPPacket. |
35 | |
36 | NTPPacket(Poco::UInt8 *packet); |
37 | /// Creates an NTPPacket. |
38 | /// |
39 | /// Assumed to have at least 48 bytes. |
40 | |
41 | ~NTPPacket(); |
42 | /// Destroys the NTPPacket. |
43 | |
44 | void packet(Poco::UInt8 *packet) const; |
45 | /// Returns the NTP packet. |
46 | /// |
47 | /// Assumed to have at least 48 bytes. |
48 | |
49 | void setPacket(Poco::UInt8 *packet); |
50 | /// Returns the NTP packet. |
51 | /// |
52 | /// Assumed to have exactly 48 bytes. |
53 | |
54 | Poco::Int8 leapIndicator() const; |
55 | /// Returns the leap indicator. |
56 | |
57 | Poco::Int8 version() const; |
58 | /// Returns the version. |
59 | |
60 | Poco::Int8 mode() const; |
61 | /// Returns the mode. |
62 | |
63 | Poco::Int8 stratum() const; |
64 | /// Returns the stratum. |
65 | |
66 | Poco::Int8 pool() const; |
67 | /// Returns the pool. |
68 | |
69 | Poco::Int8 precision() const; |
70 | /// Returns the precision |
71 | |
72 | Poco::Int32 rootDelay() const; |
73 | /// Returns the root delay |
74 | |
75 | Poco::Int32 rootDispersion() const; |
76 | /// Returns the root dispersion |
77 | |
78 | Poco::Int32 referenceId() const; |
79 | /// Returns the reference id |
80 | |
81 | Poco::Int64 referenceTimestamp() const; |
82 | /// Returns the reference timestamp |
83 | |
84 | Poco::Int64 originateTimestamp() const; |
85 | /// Returns the originate timestamp |
86 | |
87 | Poco::Int64 receiveTimestamp() const; |
88 | /// Returns the receive timestamp |
89 | |
90 | Poco::Int64 transmitTimestamp() const; |
91 | /// Returns the transmit timestamp |
92 | |
93 | Poco::Timestamp referenceTime() const; |
94 | /// Returns the reference time |
95 | |
96 | Poco::Timestamp originateTime() const; |
97 | /// Returns the originate time |
98 | |
99 | Poco::Timestamp receiveTime() const; |
100 | /// Returns the receive time |
101 | |
102 | Poco::Timestamp transmitTime() const; |
103 | /// Returns the transmit time |
104 | private: |
105 | Poco::Timestamp convertTime(Poco::Int64 tm) const; |
106 | |
107 | Poco::Int8 _leapIndicator; |
108 | Poco::Int8 _version; |
109 | Poco::Int8 _mode; |
110 | Poco::Int8 _stratum; |
111 | Poco::Int8 _pool; |
112 | Poco::Int8 _precision; |
113 | Poco::Int32 _rootDelay; |
114 | Poco::Int32 _rootDispersion; |
115 | Poco::Int32 _referenceId; |
116 | Poco::Int64 _referenceTimestamp; |
117 | Poco::Int64 _originateTimestamp; |
118 | Poco::Int64 _receiveTimestamp; |
119 | Poco::Int64 _transmitTimestamp; |
120 | }; |
121 | |
122 | |
123 | // |
124 | // inlines |
125 | // |
126 | inline Poco::Int8 NTPPacket::leapIndicator() const |
127 | { |
128 | return _leapIndicator; |
129 | } |
130 | |
131 | |
132 | inline Poco::Int8 NTPPacket::version() const |
133 | { |
134 | return _version; |
135 | } |
136 | |
137 | |
138 | inline Poco::Int8 NTPPacket::mode() const |
139 | { |
140 | return _mode; |
141 | } |
142 | |
143 | |
144 | inline Poco::Int8 NTPPacket::stratum() const |
145 | { |
146 | return _stratum; |
147 | } |
148 | |
149 | |
150 | inline Poco::Int8 NTPPacket::pool() const |
151 | { |
152 | return _pool; |
153 | } |
154 | |
155 | |
156 | inline Poco::Int8 NTPPacket::precision() const |
157 | { |
158 | return _precision; |
159 | } |
160 | |
161 | |
162 | inline Poco::Int32 NTPPacket::rootDelay() const |
163 | { |
164 | return _rootDelay; |
165 | } |
166 | |
167 | |
168 | inline Poco::Int32 NTPPacket::rootDispersion() const |
169 | { |
170 | return _rootDispersion; |
171 | } |
172 | |
173 | |
174 | inline Poco::Int32 NTPPacket::referenceId() const |
175 | { |
176 | return _referenceId; |
177 | } |
178 | |
179 | |
180 | inline Poco::Int64 NTPPacket::referenceTimestamp() const |
181 | { |
182 | return _referenceTimestamp; |
183 | } |
184 | |
185 | |
186 | inline Poco::Int64 NTPPacket::originateTimestamp() const |
187 | { |
188 | return _originateTimestamp; |
189 | } |
190 | |
191 | |
192 | inline Poco::Int64 NTPPacket::receiveTimestamp() const |
193 | { |
194 | return _receiveTimestamp; |
195 | } |
196 | |
197 | |
198 | inline Poco::Int64 NTPPacket::transmitTimestamp() const |
199 | { |
200 | return _transmitTimestamp; |
201 | } |
202 | |
203 | |
204 | } } // namespace Poco::Net |
205 | |
206 | |
207 | #endif // Net_NTPPacket_INCLUDED |
208 | |