X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fntp.cpp;h=1d43fdbb7a656e39c7ec9c19cc661530c23ab9df;hb=7b1fc4e89eec43568d7ac94d4f30e50cee1d52ab;hp=efedce8dc4fae1ace0d6e8b6ba20161093612ca2;hpb=b71fb9d52ca6df5c303bdffa3144f36a0f969781;p=novacoin.git diff --git a/src/ntp.cpp b/src/ntp.cpp index efedce8..1d43fdb 100644 --- a/src/ntp.cpp +++ b/src/ntp.cpp @@ -80,9 +80,9 @@ struct pkt { uint8_t mac[5 * sizeof(uint32_t)]; /* mac */ }; -int nServersCount = 118; +const int nServersCount = 147; -std::string NtpServers[118] = { +std::string NtpServers[147] = { // Microsoft "time.windows.com", @@ -137,6 +137,15 @@ std::string NtpServers[118] = { "3.ru.pool.ntp.org", // United States + "tock.cs.unlv.edu", + "timex.cs.columbia.edu", + "tick.cs.unlv.edu", + "sundial.columbia.edu", + "ntp-1.ece.cmu.edu", + "ntp-2.ece.cmu.edu", + "ntp1.cs.wisc.edu", + "ntp2.cs.wisc.edu", + "ntp3.cs.wisc.edu", "ntp-01.caltech.edu", "ntp-02.caltech.edu", "ntp-03.caltech.edu", @@ -208,6 +217,7 @@ std::string NtpServers[118] = { // United Kingdom "ntp2d.mcc.ac.uk", "ntp2c.mcc.ac.uk", + "ntp2b.mcc.ac.uk", "ntp.exnet.com", "ntp.cis.strath.ac.uk", "ntppub.le.ac.uk", @@ -216,6 +226,19 @@ std::string NtpServers[118] = { "2.uk.pool.ntp.org", "3.uk.pool.ntp.org", + // Canada + "chime.utoronto.ca", + "tick.utoronto.ca", + "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", + "3.ca.pool.ntp.org", + // Japan "ntp.nict.jp", "0.jp.pool.ntp.org", @@ -223,53 +246,22 @@ std::string NtpServers[118] = { "2.jp.pool.ntp.org", "3.jp.pool.ntp.org", - // ... To be continued -}; - -bool InitWithRandom(SOCKET &sockfd, socklen_t &servlen, struct sockaddr *pcliaddr) { - int nAttempt = 0; - - while(nAttempt < 100) { - sockfd = -1; - nAttempt++; + // Australia + "ntp.cs.mu.oz.au", + "augean.eleceng.adelaide.edu.au", + "0.au.pool.ntp.org", + "1.au.pool.ntp.org", + "2.au.pool.ntp.org", + "3.au.pool.ntp.org", - int nServerNum = GetRandInt(nServersCount); - - std::vector vIP; - bool fRet = LookupHost(NtpServers[nServerNum].c_str(), vIP, 10, true); - if (!fRet) - continue; + // Slovenia + "time.ijs.si", - struct sockaddr_in servaddr; - servaddr.sin_family = AF_INET; - servaddr.sin_port = htons(123); + // ??? + "clepsydra.dec.com", - bool found = false; - for(unsigned int i = 0; i < vIP.size(); i++) { - if ((found = vIP[i].GetInAddr(&servaddr.sin_addr))) { - break; - } - } - - if (!found) - continue; - - sockfd = socket(AF_INET, SOCK_DGRAM, 0); - - if (sockfd == INVALID_SOCKET) - continue; // socket initialization error - - if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) == -1 ) { - continue; // "connection" error - } - - *pcliaddr = *((struct sockaddr *) &servaddr); - servlen = sizeof(servaddr); - return true; - } - - return false; -} + // ... To be continued +}; bool InitWithHost(std::string &strHostName, SOCKET &sockfd, socklen_t &servlen, struct sockaddr *pcliaddr) { sockfd = -1; @@ -311,6 +303,17 @@ bool InitWithHost(std::string &strHostName, SOCKET &sockfd, socklen_t &servlen, return true; } +bool InitWithRandom(SOCKET &sockfd, socklen_t &servlen, struct sockaddr *pcliaddr) { + + for (int nAttempt = 0; nAttempt < nServersCount; nAttempt++) { + int nServerNum = GetRandInt(nServersCount); + if (InitWithHost(NtpServers[nServerNum], sockfd, servlen, pcliaddr)) { + return true; + } + } + + return false; +} int64_t DoReq(SOCKET sockfd, socklen_t servlen, struct sockaddr cliaddr) { #ifdef WIN32 @@ -378,22 +381,6 @@ int64_t DoReq(SOCKET sockfd, socklen_t servlen, struct sockaddr cliaddr) { return (seconds_receive + seconds_transmit) / 2; } -int64_t NtpGetTime() { - struct sockaddr cliaddr; - - SOCKET sockfd; - socklen_t servlen; - - if (!InitWithRandom(sockfd, servlen, &cliaddr)) - return -1; - - int64_t nTime = DoReq(sockfd, servlen, cliaddr); - - closesocket(sockfd); - - return nTime; -} - int64_t NtpGetTime(CNetAddr& ip) { struct sockaddr cliaddr;