00001
00002
00003
00004
00006
00007 #ifndef _ROKU_INCLUDE_CASCADE_NET_CASCADESNTPCLIENT_H
00008 #define _ROKU_INCLUDE_CASCADE_NET_CASCADESNTPCLIENT_H
00009
00010 #include <cascade/CascadeObject.h>
00011 #include <cascade/util/CascadeTime.h>
00012
00014
00015 class CascadeSNTPClient : public CascadeObject
00016 {
00017 #ifndef DOXY_SKIP
00018 public:
00019 struct InternetTimeStruct;
00020 #endif
00021
00022 public:
00023 CascadeSNTPClient();
00024 virtual ~CascadeSNTPClient();
00025
00026 public:
00027 enum { kDefaultTimeout = 5000 };
00028 bool FetchInternetTime(const char * pServerName, InternetTimeStruct & timeStructToSet, u32 nTimeoutMS = kDefaultTimeout);
00029
00030 public:
00031 struct TimeStamp
00032 {
00033 public:
00034 inline bool operator == (const TimeStamp & that) const { return ((m_seconds == that.m_seconds) && (m_fractional == that.m_fractional)) ? true : false; }
00035 inline bool operator != (const TimeStamp & that) const { return ((m_seconds != that.m_seconds) || (m_fractional != that.m_fractional)) ? true : false; }
00036 public:
00037 unsigned long m_seconds;
00038 unsigned long m_fractional;
00039 };
00040
00041 struct Packet
00042 {
00043 public:
00044 unsigned char m_flags;
00045 unsigned char m_stratum;
00046 unsigned char m_poll;
00047 unsigned char m_precision;
00048 unsigned long m_rootDelay;
00049 unsigned long m_rootDispersion;
00050 unsigned long m_refID;
00051 TimeStamp m_refTimeStamp;
00052 TimeStamp m_originateTimeStamp;
00053 TimeStamp m_receiveTimeStamp;
00054 TimeStamp m_transmitTimeStamp;
00055 };
00056
00057 struct InternetTimeStruct
00058 {
00059 public:
00060 CascadeTime::TimeBase m_timeBase;
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070 u32 m_nRoundTripDelayMilliseconds;
00071
00072 Packet m_packetSent;
00073
00074 Packet m_packetReceived;
00075
00076 };
00077
00078 enum
00079 {
00080 kFlagsLeapIndicatorMask = 0xC0,
00081 kFlagsLeapIndicatorNone = 0x00,
00082 kFlagsLeapIndicatorLong = 0x40,
00083 kFlagsLeapIndicatorShort = 0x80,
00084 kFlagsLeapIndicatorAlarm = 0xC0,
00085 kFlagsVersionMask = 0x38,
00086 kFlagsVersion1 = 0x08,
00087 kFlagsVersion2 = 0x10,
00088 kFlagsVersion3 = 0x18,
00089 kFlagsModeMask = 0x07,
00090 kFlagsModeActive = 0x01,
00091 kFlagsModePassive = 0x02,
00092 kFlagsModeClient = 0x03,
00093 kFlagsModeServer = 0x04,
00094 kFlagsModeBroadcast = 0x05,
00095 kFlagsModeControl = 0x06,
00096 };
00097
00098 private:
00099 class Client;
00100 Client * m_pClient;
00101 };
00102
00103 #endif // #ifndef _ROKU_INCLUDE_CASCADE_NET_CASCADESNTPCLIENT_H
00104
00106
00108
00109