001    package org.apache.commons.net.ntp;
002    /*
003     * Copyright 2001-2005 The Apache Software Foundation
004     *
005     * Licensed under the Apache License, Version 2.0 (the "License");
006     * you may not use this file except in compliance with the License.
007     * 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    
018    import java.net.DatagramPacket;
019    
020    /**
021     * Interface for a NtpV3Packet with get/set methods corresponding to the fields
022     * in the NTP Data Message Header described in RFC 1305.
023     *
024     * @author Naz Irizarry, MITRE Corp
025     * @author Jason Mathews, MITRE Corp
026     * @version $Revision: 165675 $ $Date: 2005-05-02 21:09:55 +0100 (Mon, 02 May 2005) $
027     */
028    public interface NtpV3Packet
029    {
030    
031        /**
032         * Standard NTP UDP port
033         */
034        public static final int NTP_PORT = 123;
035    
036        public static final int LI_NO_WARNING = 0;
037        public static final int LI_LAST_MINUTE_HAS_61_SECONDS = 1;
038        public static final int LI_LAST_MINUTE_HAS_59_SECONDS = 2;
039        public static final int LI_ALARM_CONDITION = 3;
040    
041        /* mode options */
042        public static final int MODE_RESERVED = 0;
043        public static final int MODE_SYMMETRIC_ACTIVE = 1;
044        public static final int MODE_SYMMETRIC_PASSIVE = 2;
045        public static final int MODE_CLIENT = 3;
046        public static final int MODE_SERVER = 4;
047        public static final int MODE_BROADCAST = 5;
048        public static final int MODE_CONTROL_MESSAGE = 6;
049        public static final int MODE_PRIVATE = 7;
050    
051        public static final int NTP_MINPOLL = 4;  // 16 seconds
052        public static final int NTP_MAXPOLL = 14; // 16284 seconds
053    
054        public static final int NTP_MINCLOCK = 1;
055        public static final int NTP_MAXCLOCK = 10;
056    
057        public static final int VERSION_3 = 3;
058        public static final int VERSION_4 = 4;
059    
060        /* possible getType values such that other time-related protocols can
061         * have its information represented as NTP packets
062         */
063        public static final String TYPE_NTP = "NTP";         // RFC-1305/2030
064        public static final String TYPE_ICMP = "ICMP";       // RFC-792
065        public static final String TYPE_TIME = "TIME";       // RFC-868
066        public static final String TYPE_DAYTIME = "DAYTIME"; // RFC-867
067    
068        /**
069         * @return a datagram packet with the NTP parts already filled in
070         */
071        public DatagramPacket getDatagramPacket();
072    
073        /**
074         * Set the contents of this object from the datagram packet
075         */
076        public void setDatagramPacket(DatagramPacket dp);
077    
078        /**
079         * @return leap indicator as defined in RFC-1305
080         */
081        public int getLeapIndicator();
082    
083        /**
084         * Set leap indicator.
085         * @param li - leap indicator code
086         */
087        public void setLeapIndicator(int li);
088    
089        /**
090         * @return mode as defined in RFC-1305
091         */
092        public int getMode();
093    
094        /**
095         * @return mode as human readable string; e.g. 3=Client
096         */
097        public String getModeName();
098    
099        /**
100         * Set mode as defined in RFC-1305
101         */
102        public void setMode(int mode);
103    
104        /**
105         * @return poll interval as defined in RFC-1305.
106         * Field range between NTP_MINPOLL and NTP_MAXPOLL.
107         */
108        public int getPoll();
109    
110        /**
111         * Set poll interval as defined in RFC-1305.
112         * Field range between NTP_MINPOLL and NTP_MAXPOLL.
113         */
114        public void setPoll(int poll);
115    
116        /**
117         * @return precision as defined in RFC-1305
118         */
119        public int getPrecision();
120    
121        /**
122         * @return root delay as defined in RFC-1305
123         */
124        public int getRootDelay();
125    
126        /**
127         * @return root delay in milliseconds
128         */
129        public double getRootDelayInMillisDouble();
130    
131        /**
132         * @return root dispersion as defined in RFC-1305
133         */
134        public int getRootDispersion();
135    
136        /**
137         * @return root dispersion in milliseconds
138         */
139        public long getRootDispersionInMillis();
140    
141        /**
142         * @return root dispersion in milliseconds
143         */
144        public double getRootDispersionInMillisDouble();
145    
146        /**
147         * @return version as defined in RFC-1305
148         */
149        public int getVersion();
150    
151        /**
152         * Set version as defined in RFC-1305
153         */
154        public void setVersion(int mode);
155    
156        /**
157         * @return stratum as defined in RFC-1305
158         */
159        public int getStratum();
160    
161        /**
162         * Set stratum as defined in RFC-1305
163         */
164        public void setStratum(int stratum);
165    
166        /**
167         * @return the reference id string
168         */
169        public String getReferenceIdString();
170    
171        /**
172         * @return the reference id (32-bit code) as defined in RFC-1305
173         */
174        public int getReferenceId();
175    
176        /**
177         * Set reference clock identifier field.
178         * @param refId
179         */
180        public void setReferenceId(int refId);
181    
182        /**
183         * @return the transmit timestamp as defined in RFC-1305
184         */
185        public TimeStamp getTransmitTimeStamp();
186    
187        /**
188         * @return the reference time as defined in RFC-1305
189         */
190        public TimeStamp getReferenceTimeStamp();
191    
192        /**
193         * @return the originate time as defined in RFC-1305
194         */
195        public TimeStamp getOriginateTimeStamp();
196    
197        /**
198         * @return the receive time as defined in RFC-1305
199         */
200        public TimeStamp getReceiveTimeStamp();
201    
202        /**
203         * Set the transmit timestamp given NTP TimeStamp object.
204         * @param ts - timestamp
205         */
206        public void setTransmitTime(TimeStamp ts);
207    
208        /**
209         * Set the reference timestamp given NTP TimeStamp object.
210         * @param ts - timestamp
211         */
212        public void setReferenceTime(TimeStamp ts);
213    
214        /**
215         * Set originate timestamp given NTP TimeStamp object.
216         * @param ts - timestamp
217         */
218        public void setOriginateTimeStamp(TimeStamp ts);
219    
220        /**
221         * Set receive timestamp given NTP TimeStamp object.
222         * @param ts - timestamp
223         */
224        public void setReceiveTimeStamp(TimeStamp ts);
225    
226        /**
227         * Return type of time packet. The values (e.g. NTP, TIME, ICMP, ...)
228         * correspond to the protocol used to obtain the timing information.
229         *
230         * @return packet type string identifier
231         */
232        public String getType();
233    
234    }