X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fntp.cpp;h=b68110e72a4b761f0c7a875d59b275504adb6a1e;hb=6321f575f98c87bf172b1a451c7bfc3bdb6491dc;hp=35d6a73721a3d8ef5ea42f5c3ad53f4ac466a02b;hpb=9de5ff869fb469db2d821f4ecfda44657259ec26;p=novacoin.git diff --git a/src/ntp.cpp b/src/ntp.cpp index 35d6a73..b68110e 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 = 107; +int nServersCount = 118; -std::string NtpServers[107] = { +std::string NtpServers[118] = { // Microsoft "time.windows.com", @@ -92,7 +92,22 @@ std::string NtpServers[107] = { "time3.google.com", "time4.google.com", + // Hurricane Electric + "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", + "aviel.alpet.me", + "ntp.sampo.ru", + "ntp.szt.ru", "ntp.ix.ru", "ntp1.stratum2.ru", "ntp2.stratum2.ru", @@ -211,51 +226,6 @@ std::string NtpServers[107] = { // ... To be continued }; -bool InitWithRandom(SOCKET &sockfd, socklen_t &servlen, struct sockaddr *pcliaddr) { - int nAttempt = 0; - - while(nAttempt < 100) { - sockfd = -1; - nAttempt++; - - int nServerNum = GetRandInt(nServersCount); - - std::vector vIP; - bool fRet = LookupHost(NtpServers[nServerNum].c_str(), vIP, 10, true); - if (!fRet) - continue; - - struct sockaddr_in servaddr; - servaddr.sin_family = AF_INET; - servaddr.sin_port = htons(123); - - 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; -} - bool InitWithHost(std::string &strHostName, SOCKET &sockfd, socklen_t &servlen, struct sockaddr *pcliaddr) { sockfd = -1; @@ -296,6 +266,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 @@ -363,22 +344,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;