X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Futil.cpp;h=8f896d7d3c71216f08c056f9a61bb912c402026e;hb=36ea307baa89088cae666d3c9134e386c08c9d57;hp=43c803807c9479d9d9fcad6d04106abb7bc087a5;hpb=3c3a7223dfbcc00eaa778f93276374aeb400c828;p=novacoin.git diff --git a/src/util.cpp b/src/util.cpp index 43c8038..8f896d7 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -588,6 +588,20 @@ int64_t GetArg(const std::string& strArg, int64_t nDefault) return nDefault; } +int32_t GetArgInt(const std::string& strArg, int32_t nDefault) +{ + if (mapArgs.count(strArg)) + return strtol(mapArgs[strArg]); + return nDefault; +} + +uint32_t GetArgUInt(const std::string& strArg, uint32_t nDefault) +{ + if (mapArgs.count(strArg)) + return strtoul(mapArgs[strArg]); + return nDefault; +} + bool GetBoolArg(const std::string& strArg, bool fDefault) { if (mapArgs.count(strArg)) @@ -1155,7 +1169,7 @@ string randomStrGen(int length) { void createConf() { - srand(time(NULL)); + srand(static_cast(time(NULL))); ofstream pConf; #if BOOST_FILESYSTEM_VERSION >= 3 @@ -1272,7 +1286,7 @@ void ShrinkDebugFile() // Restart the file with some of the end char pch[200000]; fseek(file, -((long long)sizeof(pch)), SEEK_END); - int nBytes = fread(pch, 1, sizeof(pch), file); + size_t nBytes = fread(pch, 1, sizeof(pch), file); fclose(file); file = fopen(pathLog.string().c_str(), "w"); @@ -1298,25 +1312,36 @@ void ShrinkDebugFile() // - Median of other nodes clocks // - The user (asking the user to fix the system clock if the first two disagree) // -static int64_t nMockTime = 0; // For unit testing +// System clock int64_t GetTime() { - if (nMockTime) return nMockTime; - return time(NULL); } -void SetMockTime(int64_t nMockTimeIn) -{ - nMockTime = nMockTimeIn; -} +// Trusted NTP offset or median of NTP samples. +extern int64_t nNtpOffset; -static int64_t nTimeOffset = 0; +// Median of time samples given by other nodes. +static int64_t nNodesOffset = INT64_MAX; +// Select time offset: int64_t GetTimeOffset() { - return nTimeOffset; + // If NTP and system clock are in agreement within 40 minutes, then use NTP. + if (abs64(nNtpOffset) < 40 * 60) + return nNtpOffset; + + // If not, then choose between median peer time and system clock. + if (abs64(nNodesOffset) < 70 * 60) + return nNodesOffset; + + return 0; +} + +int64_t GetNodesOffset() +{ + return nNodesOffset; } int64_t GetAdjustedTime() @@ -1343,17 +1368,18 @@ void AddTimeData(const CNetAddr& ip, int64_t nTime) // Only let other nodes change our time by so much if (abs64(nMedian) < 70 * 60) { - nTimeOffset = nMedian; + nNodesOffset = nMedian; } else { - nTimeOffset = 0; + nNodesOffset = INT64_MAX; static bool fDone; if (!fDone) { - // If nobody has a time different than ours but within 5 minutes of ours, give a warning bool fMatch = false; + + // If nobody has a time different than ours but within 5 minutes of ours, give a warning BOOST_FOREACH(int64_t nOffset, vSorted) if (nOffset != 0 && abs64(nOffset) < 5 * 60) fMatch = true; @@ -1373,17 +1399,11 @@ void AddTimeData(const CNetAddr& ip, int64_t nTime) printf("%+" PRId64 " ", n); printf("| "); } - printf("nTimeOffset = %+" PRId64 " (%+" PRId64 " minutes)\n", nTimeOffset, nTimeOffset/60); + if (nNodesOffset != INT64_MAX) + printf("nNodesOffset = %+" PRId64 " (%+" PRId64 " minutes)\n", nNodesOffset, nNodesOffset/60); } } - - - - - - - string FormatVersion(int nVersion) { if (nVersion%100 == 0)