-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathNtpV3Packet.java
More file actions
319 lines (256 loc) · 6.69 KB
/
Copy pathNtpV3Packet.java
File metadata and controls
319 lines (256 loc) · 6.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package nts;
import java.io.IOException;
import java.net.DatagramPacket;
/**
* Interface for a NtpV3Packet with get/set methods corresponding to the fields in the NTP Data
* Message Header described in RFC 1305.
*/
public interface NtpV3Packet {
/** Standard NTP UDP port */
int NTP_PORT = 123;
/** {@value} */
int LI_NO_WARNING = 0;
/** {@value} */
int LI_LAST_MINUTE_HAS_61_SECONDS = 1;
/** {@value} */
int LI_LAST_MINUTE_HAS_59_SECONDS = 2;
/** {@value} */
int LI_ALARM_CONDITION = 3;
/** Mode option {@value}. */
int MODE_RESERVED = 0;
/** Mode option {@value}. */
int MODE_SYMMETRIC_ACTIVE = 1;
/** Mode option {@value}. */
int MODE_SYMMETRIC_PASSIVE = 2;
/** Mode option {@value}. */
int MODE_CLIENT = 3;
/** Mode option {@value}. */
int MODE_SERVER = 4;
/** Mode option {@value}. */
int MODE_BROADCAST = 5;
/** Mode option {@value}. */
int MODE_CONTROL_MESSAGE = 6;
/** Mode option {@value}. */
int MODE_PRIVATE = 7;
/** {@value} */
int NTP_MINPOLL = 4; // 16 seconds
/** {@value} */
int NTP_MAXPOLL = 14; // 16284 seconds
/** {@value} */
int NTP_MINCLOCK = 1;
/** {@value} */
int NTP_MAXCLOCK = 10;
/** {@value} */
int VERSION_3 = 3;
/** {@value} */
int VERSION_4 = 4;
//
// possible getType values such that other time-related protocols can have its information
// represented as NTP packets
//
/** {@value} */
String TYPE_NTP = "NTP"; // RFC-1305/2030
/** {@value} */
String TYPE_ICMP = "ICMP"; // RFC-792
/** {@value} */
String TYPE_TIME = "TIME"; // RFC-868
/** {@value} */
String TYPE_DAYTIME = "DAYTIME"; // RFC-867
/** Build a request packet */
void buildRequest();
/**
* @return a datagram packet with the NTP parts already filled in
*/
DatagramPacket getDatagramPacket();
/**
* @return a datagram packet with the NTP parts already filled in
*/
DatagramPacket getDatagramPacket(int sz);
/**
* @return leap indicator as defined in RFC-1305
*/
int getLeapIndicator();
/**
* @return mode as defined in RFC-1305
*/
int getMode();
/**
* @return mode as human readable string; e.g. 3=Client
*/
String getModeName();
/**
* @return the {@code originate} time as defined in RFC-1305
*/
TimeStamp getOriginateTimeStamp();
/**
* @return poll interval as defined in RFC-1305. Field range between NTP_MINPOLL and NTP_MAXPOLL.
*/
int getPoll();
/**
* @return precision as defined in RFC-1305
*/
int getPrecision();
/**
* @return the {@code receive} time as defined in RFC-1305
*/
TimeStamp getReceiveTimeStamp();
/**
* @return the reference id (32-bit code) as defined in RFC-1305
*/
int getReferenceId();
/**
* @return the reference id string
*/
String getReferenceIdString();
/**
* @return the reference time as defined in RFC-1305
*/
TimeStamp getReferenceTimeStamp();
/**
* @return root delay as defined in RFC-1305
*/
int getRootDelay();
/**
* @return root delay in milliseconds
*/
double getRootDelayInMillisDouble();
/**
* @return root dispersion as defined in RFC-1305
*/
int getRootDispersion();
/**
* @return root dispersion in milliseconds
*/
long getRootDispersionInMillis();
/**
* @return root dispersion in milliseconds
*/
double getRootDispersionInMillisDouble();
/**
* @return stratum as defined in RFC-1305
*/
int getStratum();
/**
* @return the {@code transmit} timestamp as defined in RFC-1305
*/
TimeStamp getTransmitTimeStamp();
/**
* Return type of time packet. The values (e.g. NTP, TIME, ICMP, ...) correspond to the protocol
* used to obtain the timing information.
*
* @return packet type string identifier
*/
String getType();
/**
* @return version as defined in RFC-1305
*/
int getVersion();
/**
* Sets the contents of this object from the datagram packet
*
* @param dp the packet
*/
void setDatagramPacket(DatagramPacket dp);
/**
* Sets leap indicator.
*
* @param li - leap indicator code
*/
void setLeapIndicator(int li);
/**
* Sets mode as defined in RFC-1305
*
* @param mode the mode to set
*/
void setMode(int mode);
/**
* Sets originate timestamp given NTP TimeStamp object.
*
* @param ts - timestamp
*/
void setOriginateTimeStamp(TimeStamp ts);
/**
* Sets poll interval as defined in RFC-1305. Field range between NTP_MINPOLL and NTP_MAXPOLL.
*
* @param poll the interval to set
*/
void setPoll(int poll);
/**
* Sets precision as defined in RFC-1305
*
* @param precision Precision
* @since 3.4
*/
void setPrecision(int precision);
/**
* Sets receive timestamp given NTP TimeStamp object.
*
* @param ts - timestamp
*/
void setReceiveTimeStamp(TimeStamp ts);
/**
* Sets reference clock identifier field.
*
* @param refId the clock id field to set
*/
void setReferenceId(int refId);
/**
* Sets the reference timestamp given NTP TimeStamp object.
*
* @param ts - timestamp
*/
void setReferenceTime(TimeStamp ts);
/**
* Sets root delay as defined in RFC-1305
*
* @param delay the delay to set
* @since 3.4
*/
void setRootDelay(int delay);
/**
* @param dispersion the value to set
* @since 3.4
*/
void setRootDispersion(int dispersion);
/**
* Sets stratum as defined in RFC-1305
*
* @param stratum the stratum to set
*/
void setStratum(int stratum);
/**
* Sets the {@code transmit} timestamp given NTP TimeStamp object.
*
* @param ts - timestamp
*/
void setTransmitTime(TimeStamp ts);
/**
* Sets version as defined in RFC-1305
*
* @param version the version to set
*/
void setVersion(int version);
/**
* Validate a response packet given a request packet
*
* @param req - The request packet
* @throws IOException - On failure
*/
void validate(NtpV3Packet req) throws IOException;
}