X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=blobdiff_plain;f=src%2Fntp.cpp;h=76b0afdf34d8fed2032cc12fa425b2a4c74700e4;hp=7118af90527ec149f1a365baea143b11cc046916;hb=4ca0237ec0d2825004fa3aa2b00a94da2a083b8b;hpb=388835f3cc1346477a6b500786fb283d3a2712cc diff --git a/src/ntp.cpp b/src/ntp.cpp index 7118af9..76b0afd 100644 --- a/src/ntp.cpp +++ b/src/ntp.cpp @@ -52,7 +52,7 @@ typedef struct { } l_fp; -inline void Ntp2Unix(uint32_t &n, time_t &u) { +inline void Ntp2Unix(const uint32_t &n, time_t &u) { // Ntp's time scale starts in 1900, Unix in 1970. u = n - 0x83aa7e80; // 2208988800 1970 - 1900 in seconds @@ -80,9 +80,12 @@ struct pkt { uint8_t mac[5 * sizeof(uint32_t)]; /* mac */ }; -const int nServersCount = 162; +const int nServersCount = 154; + +std::string NtpServers[nServersCount] = { + // Apple + "time.apple.com", -std::string NtpServers[162] = { // Microsoft "time.windows.com", @@ -96,12 +99,6 @@ std::string NtpServers[162] = { "clock.sjc.he.net", "clock.nyc.he.net", - // SixXS - "ntp.sixxs.net", - "ntp.eu.sixxs.net", - "ntp.us.sixxs.net", - "ntp.ap.sixxs.net", - // Russian Federation "ntp.karelia.pro", "ntp.alpet.me", @@ -114,12 +111,11 @@ std::string NtpServers[162] = { "ntp3.stratum2.ru", "ntp4.stratum2.ru", "ntp5.stratum2.ru", - "ntp6.stratum2.ru", - "ntp7.stratum2.ru", "ntp1.stratum1.ru", "ntp2.stratum1.ru", "ntp3.stratum1.ru", "ntp4.stratum1.ru", + "ntp5.stratum1.ru", "ntp1.vniiftri.ru", "ntp2.vniiftri.ru", "ntp3.vniiftri.ru", @@ -143,14 +139,18 @@ std::string NtpServers[162] = { "sundial.columbia.edu", "ntp-1.ece.cmu.edu", "ntp-2.ece.cmu.edu", + "ntp-3.ece.cmu.edu", "ntp1.cs.wisc.edu", "ntp2.cs.wisc.edu", "ntp3.cs.wisc.edu", + "ntp4.cs.wisc.edu", "ntp-01.caltech.edu", "ntp-02.caltech.edu", "ntp-03.caltech.edu", "ntp-04.caltech.edu", + "nist0-pa.ustiming.org", "nist1-pa.ustiming.org", + "nist2-pa.ustiming.org", "time.nist.gov", "time-a.nist.gov", "time-b.nist.gov", @@ -159,19 +159,14 @@ std::string NtpServers[162] = { "time-nw.nist.gov", "nist1-macon.macon.ga.us", "nist.netservicesgroup.com", - "nisttime.carsoncity.k12.mi.us", - "nist1-lnk.binary.net", "wwv.nist.gov", "time-a.timefreq.bldrdoc.gov", "time-b.timefreq.bldrdoc.gov", "time-c.timefreq.bldrdoc.gov", "utcnist.colorado.edu", "utcnist2.colorado.edu", - "ntp-nist.ldsbc.net", "nist1-lv.ustiming.org", "time-nw.nist.gov", - "nist-time-server.eoni.com", - "nist-time-server.eoni.com", "ntp1.bu.edu", "ntp2.bu.edu", "ntp3.bu.edu", @@ -179,7 +174,6 @@ std::string NtpServers[162] = { "1.us.pool.ntp.org", "2.us.pool.ntp.org", "3.us.pool.ntp.org", - "wwv.otc.psu.edu", "otc1.psu.edu", "otc2.psu.edu", "now.okstate.edu", @@ -243,8 +237,6 @@ std::string NtpServers[162] = { "time.nrc.ca", "timelord.uregina.ca", "tock.utoronto.ca", - "www1.cmc.ec.gc.ca", - "www2.cmc.ec.gc.ca", "0.ca.pool.ntp.org", "1.ca.pool.ntp.org", "2.ca.pool.ntp.org", @@ -280,8 +272,9 @@ std::string NtpServers[162] = { // ... To be continued }; -bool InitWithHost(std::string &strHostName, SOCKET &sockfd, socklen_t &servlen, struct sockaddr *pcliaddr) { - sockfd = -1; +bool InitWithHost(const std::string &strHostName, SOCKET &sockfd, socklen_t &servlen, struct sockaddr *pcliaddr) { + + sockfd = INVALID_SOCKET; std::vector vIP; bool fRet = LookupHost(strHostName.c_str(), vIP, 10, true); @@ -295,7 +288,7 @@ bool InitWithHost(std::string &strHostName, SOCKET &sockfd, socklen_t &servlen, bool found = false; for(unsigned int i = 0; i < vIP.size(); i++) { - if ((found = vIP[i].GetInAddr(&servaddr.sin_addr))) { + if ((found = vIP[i].GetInAddr(&servaddr.sin_addr)) != false) { break; } } @@ -333,6 +326,8 @@ bool InitWithRandom(SOCKET &sockfd, socklen_t &servlen, struct sockaddr *pcliadd } int64_t DoReq(SOCKET sockfd, socklen_t servlen, struct sockaddr cliaddr) { + + #ifdef WIN32 u_long nOne = 1; if (ioctlsocket(sockfd, FIONBIO, &nOne) == SOCKET_ERROR) { @@ -344,8 +339,11 @@ int64_t DoReq(SOCKET sockfd, socklen_t servlen, struct sockaddr cliaddr) { return -2; } + struct timeval timeout = {10, 0}; struct pkt *msg = new pkt; struct pkt *prt = new pkt; + time_t seconds_transmit; + int len = 48; msg->li_vn_mode=227; msg->stratum=0; @@ -363,29 +361,30 @@ int64_t DoReq(SOCKET sockfd, socklen_t servlen, struct sockaddr cliaddr) { msg->xmt.Ul_i.Xl_i=0; msg->xmt.Ul_f.Xl_f=0; - int len=48; int retcode = sendto(sockfd, (char *) msg, len, 0, &cliaddr, servlen); if (retcode < 0) { printf("sendto() failed: %d\n", retcode); - return -3; + seconds_transmit = -3; + goto _end; } fd_set fdset; - struct timeval timeout = {10, 0}; FD_ZERO(&fdset); FD_SET(sockfd, &fdset); retcode = select(sockfd + 1, &fdset, NULL, NULL, &timeout); if (retcode <= 0) { printf("recvfrom() error\n"); - return -4; + seconds_transmit = -4; + goto _end; } recvfrom(sockfd, (char *) msg, len, 0, NULL, NULL); ntohl_fp(&msg->xmt, &prt->xmt); - time_t seconds_transmit; Ntp2Unix(prt->xmt.Ul_i.Xl_ui, seconds_transmit); + _end: + delete msg; delete prt; @@ -404,12 +403,12 @@ int64_t NtpGetTime(CNetAddr& ip) { ip = CNetAddr(((sockaddr_in *)&cliaddr)->sin_addr); int64_t nTime = DoReq(sockfd, servlen, cliaddr); - closesocket(sockfd); + CloseSocket(sockfd); return nTime; } -int64_t NtpGetTime(std::string &strHostName) +int64_t NtpGetTime(const std::string &strHostName) { struct sockaddr cliaddr; @@ -421,7 +420,7 @@ int64_t NtpGetTime(std::string &strHostName) int64_t nTime = DoReq(sockfd, servlen, cliaddr); - closesocket(sockfd); + CloseSocket(sockfd); return nTime; } @@ -438,7 +437,7 @@ int64_t GetNtpOffset() { } void ThreadNtpSamples(void* parg) { - const int64_t nMaxOffset = 86400; // Not a real limit, just sanity threshold. + const int64_t nMaxOffset = nOneDay; // Not a real limit, just sanity threshold. printf("Trying to find NTP server at localhost...\n");