001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018package org.apache.commons.net.ntp;
019
020import java.net.DatagramPacket;
021
022/**
023 * Interface for a NtpV3Packet with get/set methods corresponding to the fields in the NTP Data Message Header described in RFC 1305.
024 *
025 */
026public interface NtpV3Packet {
027
028    /**
029     * Standard NTP UDP port
030     */
031    int NTP_PORT = 123;
032
033    int LI_NO_WARNING = 0;
034    int LI_LAST_MINUTE_HAS_61_SECONDS = 1;
035    int LI_LAST_MINUTE_HAS_59_SECONDS = 2;
036    int LI_ALARM_CONDITION = 3;
037
038    /* mode options */
039    int MODE_RESERVED = 0;
040    int MODE_SYMMETRIC_ACTIVE = 1;
041    int MODE_SYMMETRIC_PASSIVE = 2;
042    int MODE_CLIENT = 3;
043    int MODE_SERVER = 4;
044    int MODE_BROADCAST = 5;
045    int MODE_CONTROL_MESSAGE = 6;
046    int MODE_PRIVATE = 7;
047
048    int NTP_MINPOLL = 4; // 16 seconds
049    int NTP_MAXPOLL = 14; // 16284 seconds
050
051    int NTP_MINCLOCK = 1;
052    int NTP_MAXCLOCK = 10;
053
054    int VERSION_3 = 3;
055    int VERSION_4 = 4;
056
057    /*
058     * possible getType values such that other time-related protocols can have its information represented as NTP packets
059     */
060    String TYPE_NTP = "NTP"; // RFC-1305/2030
061    String TYPE_ICMP = "ICMP"; // RFC-792
062    String TYPE_TIME = "TIME"; // RFC-868
063    String TYPE_DAYTIME = "DAYTIME"; // RFC-867
064
065    /**
066     * @return a datagram packet with the NTP parts already filled in
067     */
068    DatagramPacket getDatagramPacket();
069
070    /**
071     * @return leap indicator as defined in RFC-1305
072     */
073    int getLeapIndicator();
074
075    /**
076     * @return mode as defined in RFC-1305
077     */
078    int getMode();
079
080    /**
081     * @return mode as human readable string; e.g. 3=Client
082     */
083    String getModeName();
084
085    /**
086     * @return the originate time as defined in RFC-1305
087     */
088    TimeStamp getOriginateTimeStamp();
089
090    /**
091     * @return poll interval as defined in RFC-1305. Field range between NTP_MINPOLL and NTP_MAXPOLL.
092     */
093    int getPoll();
094
095    /**
096     * @return precision as defined in RFC-1305
097     */
098    int getPrecision();
099
100    /**
101     * @return the receive time as defined in RFC-1305
102     */
103    TimeStamp getReceiveTimeStamp();
104
105    /**
106     * @return the reference id (32-bit code) as defined in RFC-1305
107     */
108    int getReferenceId();
109
110    /**
111     * @return the reference id string
112     */
113    String getReferenceIdString();
114
115    /**
116     * @return the reference time as defined in RFC-1305
117     */
118    TimeStamp getReferenceTimeStamp();
119
120    /**
121     * @return root delay as defined in RFC-1305
122     */
123    int getRootDelay();
124
125    /**
126     * @return root delay in milliseconds
127     */
128    double getRootDelayInMillisDouble();
129
130    /**
131     * @return root dispersion as defined in RFC-1305
132     */
133    int getRootDispersion();
134
135    /**
136     * @return root dispersion in milliseconds
137     */
138    long getRootDispersionInMillis();
139
140    /**
141     * @return root dispersion in milliseconds
142     */
143    double getRootDispersionInMillisDouble();
144
145    /**
146     * @return stratum as defined in RFC-1305
147     */
148    int getStratum();
149
150    /**
151     * @return the transmit timestamp as defined in RFC-1305
152     */
153    TimeStamp getTransmitTimeStamp();
154
155    /**
156     * Return type of time packet. The values (e.g. NTP, TIME, ICMP, ...) correspond to the protocol used to obtain the timing information.
157     *
158     * @return packet type string identifier
159     */
160    String getType();
161
162    /**
163     * @return version as defined in RFC-1305
164     */
165    int getVersion();
166
167    /**
168     * Set the contents of this object from the datagram packet
169     *
170     * @param dp the packet
171     */
172    void setDatagramPacket(DatagramPacket dp);
173
174    /**
175     * Set leap indicator.
176     *
177     * @param li - leap indicator code
178     */
179    void setLeapIndicator(int li);
180
181    /**
182     * Set mode as defined in RFC-1305
183     *
184     * @param mode the mode to set
185     */
186    void setMode(int mode);
187
188    /**
189     * Set originate timestamp given NTP TimeStamp object.
190     *
191     * @param ts - timestamp
192     */
193    void setOriginateTimeStamp(TimeStamp ts);
194
195    /**
196     * Set poll interval as defined in RFC-1305. Field range between NTP_MINPOLL and NTP_MAXPOLL.
197     *
198     * @param poll the interval to set
199     */
200    void setPoll(int poll);
201
202    /**
203     * Set precision as defined in RFC-1305
204     *
205     * @param precision Precision
206     * @since 3.4
207     */
208    void setPrecision(int precision);
209
210    /**
211     * Set receive timestamp given NTP TimeStamp object.
212     *
213     * @param ts - timestamp
214     */
215    void setReceiveTimeStamp(TimeStamp ts);
216
217    /**
218     * Set reference clock identifier field.
219     *
220     * @param refId the clock id field to set
221     */
222    void setReferenceId(int refId);
223
224    /**
225     * Set the reference timestamp given NTP TimeStamp object.
226     *
227     * @param ts - timestamp
228     */
229    void setReferenceTime(TimeStamp ts);
230
231    /**
232     * Set root delay as defined in RFC-1305
233     *
234     * @param delay the delay to set
235     * @since 3.4
236     */
237    void setRootDelay(int delay);
238
239    /**
240     *
241     * @param dispersion the value to set
242     * @since 3.4
243     */
244    void setRootDispersion(int dispersion);
245
246    /**
247     * Set stratum as defined in RFC-1305
248     *
249     * @param stratum the stratum to set
250     */
251    void setStratum(int stratum);
252
253    /**
254     * Set the transmit timestamp given NTP TimeStamp object.
255     *
256     * @param ts - timestamp
257     */
258    void setTransmitTime(TimeStamp ts);
259
260    /**
261     * Set version as defined in RFC-1305
262     *
263     * @param version the version to set
264     */
265    void setVersion(int version);
266
267}