|
|
@ -31,7 +31,7 @@ string strMiscWarning; |
|
|
|
bool fTestNet = false; |
|
|
|
bool fTestNet = false; |
|
|
|
bool fNoListen = false; |
|
|
|
bool fNoListen = false; |
|
|
|
bool fLogTimestamps = false; |
|
|
|
bool fLogTimestamps = false; |
|
|
|
|
|
|
|
CMedianFilter<int64> vTimeOffsets(200,0); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -941,15 +941,12 @@ void AddTimeData(unsigned int ip, int64 nTime) |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
// Add data
|
|
|
|
// Add data
|
|
|
|
static vector<int64> vTimeOffsets; |
|
|
|
vTimeOffsets.input(nOffsetSample); |
|
|
|
if (vTimeOffsets.empty()) |
|
|
|
printf("Added time data, samples %d, offset %+"PRI64d" (%+"PRI64d" minutes)\n", vTimeOffsets.size(), nOffsetSample, nOffsetSample/60); |
|
|
|
vTimeOffsets.push_back(0); |
|
|
|
|
|
|
|
vTimeOffsets.push_back(nOffsetSample); |
|
|
|
|
|
|
|
printf("Added time data, samples %d, offset %+"PRI64d" (%+"PRI64d" minutes)\n", vTimeOffsets.size(), vTimeOffsets.back(), vTimeOffsets.back()/60); |
|
|
|
|
|
|
|
if (vTimeOffsets.size() >= 5 && vTimeOffsets.size() % 2 == 1) |
|
|
|
if (vTimeOffsets.size() >= 5 && vTimeOffsets.size() % 2 == 1) |
|
|
|
{ |
|
|
|
{ |
|
|
|
sort(vTimeOffsets.begin(), vTimeOffsets.end()); |
|
|
|
int64 nMedian = vTimeOffsets.median(); |
|
|
|
int64 nMedian = vTimeOffsets[vTimeOffsets.size()/2]; |
|
|
|
std::vector<int64> vSorted = vTimeOffsets.sorted(); |
|
|
|
// Only let other nodes change our time by so much
|
|
|
|
// Only let other nodes change our time by so much
|
|
|
|
if (abs64(nMedian) < 70 * 60) |
|
|
|
if (abs64(nMedian) < 70 * 60) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -964,7 +961,7 @@ void AddTimeData(unsigned int ip, int64 nTime) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// If nobody has a time different than ours but within 5 minutes of ours, give a warning
|
|
|
|
// If nobody has a time different than ours but within 5 minutes of ours, give a warning
|
|
|
|
bool fMatch = false; |
|
|
|
bool fMatch = false; |
|
|
|
BOOST_FOREACH(int64 nOffset, vTimeOffsets) |
|
|
|
BOOST_FOREACH(int64 nOffset, vSorted) |
|
|
|
if (nOffset != 0 && abs64(nOffset) < 5 * 60) |
|
|
|
if (nOffset != 0 && abs64(nOffset) < 5 * 60) |
|
|
|
fMatch = true; |
|
|
|
fMatch = true; |
|
|
|
|
|
|
|
|
|
|
@ -978,9 +975,12 @@ void AddTimeData(unsigned int ip, int64 nTime) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
BOOST_FOREACH(int64 n, vTimeOffsets) |
|
|
|
if (fDebug) { |
|
|
|
|
|
|
|
BOOST_FOREACH(int64 n, vSorted) |
|
|
|
printf("%+"PRI64d" ", n); |
|
|
|
printf("%+"PRI64d" ", n); |
|
|
|
printf("| nTimeOffset = %+"PRI64d" (%+"PRI64d" minutes)\n", nTimeOffset, nTimeOffset/60); |
|
|
|
printf("| "); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
printf("nTimeOffset = %+"PRI64d" (%+"PRI64d" minutes)\n", nTimeOffset, nTimeOffset/60); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|