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 /***
019 * Common NtpUtils Helper class.
020 *
021 * @author Jason Mathews, MITRE Corp
022 *
023 * @version $Revision: 165675 $ $Date: 2005-05-02 21:09:55 +0100 (Mon, 02 May 2005) $
024 */
025 public final class NtpUtils {
026
027 /***
028 * Returns 32-bit integer address to IPv4 address string "%d.%d.%d.%d" format.
029 *
030 * @param address the 32-bit address
031 * @return the raw IP address in a string format.
032 */
033 public static String getHostAddress(int address)
034 {
035 return ((address >>> 24) & 0xFF) + "." +
036 ((address >>> 16) & 0xFF) + "." +
037 ((address >>> 8) & 0xFF) + "." +
038 ((address >>> 0) & 0xFF);
039 }
040
041 /***
042 * Returns NTP packet reference identifier as IP address.
043 *
044 * @param packet NTP packet
045 * @return the packet reference id (as IP address) in "%d.%d.%d.%d" format.
046 */
047 public static String getRefAddress(NtpV3Packet packet)
048 {
049 int address = (packet == null) ? 0 : packet.getReferenceId();
050 return getHostAddress(address);
051 }
052
053 /***
054 * Get refId as reference clock string (e.g. GPS, WWV, LCL). If string is
055 * invalid (non-ASCII character) then returns empty string "".
056 * For details refer to the <A HREF="http://www.eecis.udel.edu/~mills/ntp/html/refclock.html#list">Comprehensive
057 * List of Clock Drivers</A>.
058 *
059 * @param message
060 * @return reference clock string if primary NTP server
061 */
062 public static String getReferenceClock(NtpV3Packet message) {
063 if (message == null)
064 return "";
065 int refId = message.getReferenceId();
066 if (refId == 0)
067 return "";
068 StringBuffer buf = new StringBuffer(4);
069 // start at highest-order byte (0x4c434c00 -> LCL)
070 for (int shiftBits = 24; shiftBits >= 0; shiftBits -= 8)
071 {
072 char c = (char) ((refId >>> shiftBits) & 0xff);
073 if (c == 0) break; // 0-terminated ASCII string
074 if (!Character.isLetterOrDigit(c))
075 return "";
076 buf.append(c);
077 }
078 return buf.toString();
079 }
080
081 /***
082 * Return human-readable name of message mode type (RFC 1305).
083 *
084 * @param mode
085 * @return mode name
086 */
087 public static String getModeName(int mode)
088 {
089 switch (mode) {
090 case NtpV3Packet.MODE_RESERVED:
091 return "Reserved";
092 case NtpV3Packet.MODE_SYMMETRIC_ACTIVE:
093 return "Symmetric Active";
094 case NtpV3Packet.MODE_SYMMETRIC_PASSIVE:
095 return "Symmetric Passive";
096 case NtpV3Packet.MODE_CLIENT:
097 return "Client";
098 case NtpV3Packet.MODE_SERVER:
099 return "Server";
100 case NtpV3Packet.MODE_BROADCAST:
101 return "Broadcast";
102 case NtpV3Packet.MODE_CONTROL_MESSAGE:
103 return "Control";
104 case NtpV3Packet.MODE_PRIVATE:
105 return "Private";
106 default:
107 return "Unknown";
108 }
109 }
110
111 }