Methods Summary |
---|
public java.net.DatagramPacket | getDatagramPacket()Returns the datagram packet with the NTP details already filled in.
if (dp == null)
synchronized(this) {
if (dp == null) {
dp = new DatagramPacket(buf, buf.length);
dp.setPort(NTP_PORT);
}
}
return dp;
|
private int | getInt(int index)
int i = ui(buf[index]) << 24 |
ui(buf[index + 1]) << 16 |
ui(buf[index + 2]) << 8 |
ui(buf[index + 3]);
return i;
|
public int | getLeapIndicator()Returns leap indicator as defined in RFC-1305 which is a two-bit code:
0=no warning
1=last minute has 61 seconds
2=last minute has 59 seconds
3=alarm condition (clock not synchronized)
return (ui(buf[LI_INDEX]) >> LI_SHIFT) & 0x3;
|
private long | getLong(int index)Get Long value represented by bits starting at specified index.
long i = ul(buf[index]) << 56 |
ul(buf[index + 1]) << 48 |
ul(buf[index + 2]) << 40 |
ul(buf[index + 3]) << 32 |
ul(buf[index + 4]) << 24 |
ul(buf[index + 5]) << 16 |
ul(buf[index + 6]) << 8 |
ul(buf[index + 7]);
return i;
|
public int | getMode()Returns mode as defined in RFC-1305 which is a 3-bit integer
whose value is indicated by the MODE_xxx parameters.
return (ui(buf[MODE_INDEX]) >> MODE_SHIFT) & 0x7;
|
public java.lang.String | getModeName()Return human-readable name of message mode type as described in
RFC 1305.
return NtpUtils.getModeName(getMode());
|
public TimeStamp | getOriginateTimeStamp()Returns the originate time as defined in RFC-1305.
return getTimestamp(ORIGINATE_TIMESTAMP_INDEX);
|
public int | getPoll()Returns poll interval as defined in RFC-1305, which is an eight-bit
signed integer indicating the maximum interval between successive
messages, in seconds to the nearest power of two (e.g. value of six
indicates an interval of 64 seconds. The values that can appear in
this field range from NTP_MINPOLL to NTP_MAXPOLL inclusive.
return (int) (buf[POLL_INDEX]);
|
public int | getPrecision()Returns precision as defined in RFC-1305 encoded as an 8-bit signed
integer (seconds to nearest power of two).
Values normally range from -6 to -20.
return (int) buf[PRECISION_INDEX];
|
public TimeStamp | getReceiveTimeStamp()Returns receive timestamp as defined in RFC-1305.
return getTimestamp(RECEIVE_TIMESTAMP_INDEX);
|
public int | getReferenceId()Returns the reference id as defined in RFC-1305, which is
a 32-bit integer whose value is dependent on several criteria.
return getInt(REFERENCE_ID_INDEX);
|
public java.lang.String | getReferenceIdString()Returns the reference id string. String cannot be null but
value is dependent on the version of the NTP spec supported
and stratum level. Value can be an empty string, clock type string,
IP address, or a hex string.
int version = getVersion();
int stratum = getStratum();
if (version == VERSION_3 || version == VERSION_4) {
if (stratum == 0 || stratum == 1) {
return idAsString(); // 4-character ASCII string (e.g. GPS, USNO)
}
// in NTPv4 servers this is latest transmit timestamp of ref source
if (version == VERSION_4)
return idAsHex();
}
// Stratum 2 and higher this is a four-octet IPv4 address
// of the primary reference host.
if (stratum >= 2) {
return idAsIPAddress();
}
return idAsHex();
|
public TimeStamp | getReferenceTimeStamp()Returns the reference time as defined in RFC-1305.
return getTimestamp(REFERENCE_TIMESTAMP_INDEX);
|
public int | getRootDelay()Return root delay as defined in RFC-1305, which is the total roundtrip delay
to the primary reference source, in seconds. Values can take positive and
negative values, depending on clock precision and skew.
return getInt(ROOT_DELAY_INDEX);
|
public double | getRootDelayInMillisDouble()Return root delay as defined in RFC-1305 in milliseconds, which is
the total roundtrip delay to the primary reference source, in
seconds. Values can take positive and negative values, depending
on clock precision and skew.
double l = getRootDelay();
return l / 65.536;
|
public int | getRootDispersion()Returns root dispersion as defined in RFC-1305.
return getInt(ROOT_DISPERSION_INDEX);
|
public long | getRootDispersionInMillis()Returns root dispersion (as defined in RFC-1305) in milliseconds.
long l = getRootDispersion();
return (l * 1000) / 65536L;
|
public double | getRootDispersionInMillisDouble()Returns root dispersion (as defined in RFC-1305) in milliseconds
as double precision value.
double l = getRootDispersion();
return l / 65.536;
|
public int | getStratum()Returns Stratum as defined in RFC-1305, which indicates the stratum level
of the local clock, with values defined as follows: 0=unspecified,
1=primary ref clock, and all others a secondary reference (via NTP).
return ui(buf[STRATUM_INDEX]);
|
private TimeStamp | getTimestamp(int index)Get NTP Timestamp at specified starting index.
return new TimeStamp(getLong(index));
|
public TimeStamp | getTransmitTimeStamp()Returns the transmit timestamp as defined in RFC-1305.
return getTimestamp(TRANSMIT_TIMESTAMP_INDEX);
|
public java.lang.String | getType()Return type of time packet. The values (e.g. NTP, TIME, ICMP, ...)
correspond to the protocol used to obtain the timing information.
return "NTP";
|
public int | getVersion()Returns NTP version number as defined in RFC-1305.
return (ui(buf[VERSION_INDEX]) >> VERSION_SHIFT) & 0x7;
|
private java.lang.String | idAsHex()
return Integer.toHexString(getReferenceId());
|
private java.lang.String | idAsIPAddress()Returns Reference id as dotted IP address.
return ui(buf[REFERENCE_ID_INDEX]) + "." +
ui(buf[REFERENCE_ID_INDEX + 1]) + "." +
ui(buf[REFERENCE_ID_INDEX + 2]) + "." +
ui(buf[REFERENCE_ID_INDEX + 3]);
|
private java.lang.String | idAsString()
String id = "";
for (int i = 0; i <= 3; i++) {
char c = (char) buf[REFERENCE_ID_INDEX + i];
if (c == 0) break; // 0-terminated string
id = id + c;
}
return id;
|
public void | setDatagramPacket(java.net.DatagramPacket srcDp)Set the contents of this object from source datagram packet.
byte[] incomingBuf = srcDp.getData();
int len = srcDp.getLength();
if (len > buf.length)
len = buf.length;
System.arraycopy(incomingBuf, 0, buf, 0, len);
|
public void | setLeapIndicator(int li)Set leap indicator as defined in RFC-1305.
buf[LI_INDEX] = (byte) (buf[LI_INDEX] & 0x3F | ((li & 0x3) << LI_SHIFT));
|
public void | setMode(int mode)Set mode as defined in RFC-1305.
buf[MODE_INDEX] = (byte) (buf[MODE_INDEX] & 0xF8 | mode & 0x7);
|
public void | setOriginateTimeStamp(TimeStamp ts)Set originate timestamp given NTP TimeStamp object.
If ts is null then zero time is used.
setTimestamp(ORIGINATE_TIMESTAMP_INDEX, ts);
|
public void | setPoll(int poll)Set poll interval as defined in RFC-1305.
buf[POLL_INDEX] = (byte) (poll & 0xFF);
|
public void | setPrecision(int precision)Set precision as defined in RFC-1305.
buf[PRECISION_INDEX] = (byte) (precision & 0xFF);
|
public void | setReceiveTimeStamp(TimeStamp ts)Set receive timestamp given NTP TimeStamp object.
If ts is null then zero time is used.
setTimestamp(RECEIVE_TIMESTAMP_INDEX, ts);
|
public void | setReferenceId(int refId)Set reference clock identifier field with 32-bit unsigned integer value.
See RFC-1305 for description.
for (int i = 3; i >= 0; i--) {
buf[REFERENCE_ID_INDEX + i] = (byte) (refId & 0xff);
refId >>>= 8; // shift right one-byte
}
|
public void | setReferenceTime(TimeStamp ts)Set Reference time with NTP timestamp. If ts is null
then zero time is used.
setTimestamp(REFERENCE_TIMESTAMP_INDEX, ts);
|
public void | setStratum(int stratum)Set stratum level as defined in RFC-1305.
buf[STRATUM_INDEX] = (byte) (stratum & 0xFF);
|
private void | setTimestamp(int index, TimeStamp t)Sets the NTP timestamp at the given array index.
long ntpTime = (t == null) ? 0 : t.ntpValue();
// copy 64-bits from Long value into 8 x 8-bit bytes of array
// one byte at a time shifting 8-bits for each position.
for (int i = 7; i >= 0; i--) {
buf[index + i] = (byte) (ntpTime & 0xFF);
ntpTime >>>= 8; // shift to next byte
}
// buf[index] |= 0x80; // only set if 1900 baseline....
|
public void | setTransmitTime(TimeStamp ts)Set transmit time with NTP timestamp.
If ts is null then zero time is used.
setTimestamp(TRANSMIT_TIMESTAMP_INDEX, ts);
|
public void | setVersion(int version)Set NTP version as defined in RFC-1305.
buf[VERSION_INDEX] = (byte) (buf[VERSION_INDEX] & 0xC7 | ((version & 0x7) << VERSION_SHIFT));
|
public java.lang.String | toString()Returns details of NTP packet as a string.
return "[" +
"version:" + getVersion() +
", mode:" + getMode() +
", poll:" + getPoll() +
", precision:" + getPrecision() +
", delay:" + getRootDelay() +
", dispersion(ms):" + getRootDispersionInMillisDouble() +
", id:" + getReferenceIdString() +
", xmitTime:" + getTransmitTimeStamp().toDateString() +
" ]";
|
protected static final int | ui(byte b)Convert byte to unsigned integer.
Java only has signed types so we have to do
more work to get unsigned ops.
int i = b & 0xFF;
return i;
|
protected static final long | ul(byte b)Convert byte to unsigned long.
Java only has signed types so we have to do
more work to get unsigned ops
long i = b & 0xFF;
return i;
|