#include "net.h"
#include "init.h"
#include "util.h"
+#include "ntp.h"
#include "ui_interface.h"
#include "checkpoints.h"
#include <boost/format.hpp>
if (fServer)
NewThread(ThreadRPCServer, NULL);
+ // ********************************************************* Step 12: add time data from four random NTP servers.
+ uiInterface.InitMessage(_("Synchronizing time through NTP..."));
+ printf("Synchronizing time through NTP...\n");
+ int i = 0;
+ while(i < 4) {
+ CNetAddr ip;
+ int64_t nTime = NtpGetTime(ip);
+
+ if (nTime > 0 && nTime != 2085978496) { // Skip the deliberately wrong timestamps
+ AddTimeData(ip, nTime);
+ printf("AddTimeData(%s, %" PRId64 ")\n", ip.ToString().c_str(), nTime);
+ }
+
+ i++;
+ }
+ uiInterface.InitMessage(_("Done"));
+ printf("Done\n");
// ********************************************************* Step 12: finished
uiInterface.InitMessage(_("Done loading"));
return nTime;
}
+int64_t NtpGetTime(CNetAddr& ip)
+{
+ struct sockaddr cliaddr;
+
+ SOCKET sockfd;
+ socklen_t servlen;
+
+ if (!InitWithRandom(sockfd, servlen, &cliaddr))
+ return -1;
+
+ ip = CNetAddr(((sockaddr_in *)&cliaddr)->sin_addr);
+ int64_t nTime = DoReq(sockfd, servlen, cliaddr);
+
+ closesocket(sockfd);
+
+ return nTime;
+}
+
int64_t NtpGetTime(std::string &strHostName)
{
struct sockaddr cliaddr;
+// Get time from random server.
int64_t NtpGetTime();
-int64_t NtpGetTime(std::string &strHostName);
+// Get time from random server and return server address.
+int64_t NtpGetTime(CNetAddr& ip);
+
+// Get time from provided server.
+int64_t NtpGetTime(std::string &strHostName);