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