aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authors_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>2010-08-20 16:55:14 +0000
committers_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>2010-08-20 16:55:14 +0000
commit2201a0808ea240617a66823f98dda3433d2546b0 (patch)
tree236085e71879b66b05bf3266a2b52f7322d104ff
parent05454818dc7ed92f577a1a1ef6798049f17a52e7 (diff)
downloadbitcoin-2201a0808ea240617a66823f98dda3433d2546b0.tar.xz
warning message if clock is too far off
git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@141 1a98c847-1fd6-4fd8-948a-caf3550aa51b
-rw-r--r--main.cpp8
-rw-r--r--noui.h34
-rw-r--r--rpc.cpp1
-rw-r--r--serialize.h2
-rw-r--r--util.cpp27
-rw-r--r--util.h6
6 files changed, 64 insertions, 14 deletions
diff --git a/main.cpp b/main.cpp
index c2339182a5..aa1d67aac8 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1579,10 +1579,10 @@ bool CheckDiskSpace(int64 nAdditionalBytes)
if (nFreeBytesAvailable < (int64)15000000 + nAdditionalBytes)
{
fShutdown = true;
- printf("*** %s***\n", _("Warning: Disk space is low "));
-#ifdef GUI
- ThreadSafeMessageBox(_("Warning: Disk space is low "), "Bitcoin", wxOK | wxICON_EXCLAMATION);
-#endif
+ string strMessage = _("Warning: Disk space is low ");
+ strWarning = strMessage;
+ printf("*** %s\n", strMessage.c_str());
+ ThreadSafeMessageBox(strMessage, "Bitcoin", wxOK | wxICON_EXCLAMATION);
CreateThread(Shutdown, NULL);
return false;
}
diff --git a/noui.h b/noui.h
index 45ef4bc96b..47110e40b6 100644
--- a/noui.h
+++ b/noui.h
@@ -3,7 +3,35 @@
// file license.txt or http://www.opensource.org/licenses/mit-license.php.
-inline int MyMessageBox(const string& message, const string& caption="Message", int style=4, void* parent=NULL, int x=-1, int y=-1)
+typedef void wxWindow;
+#define wxYES 0x00000002
+#define wxOK 0x00000004
+#define wxNO 0x00000008
+#define wxYES_NO (wxYES|wxNO)
+#define wxCANCEL 0x00000010
+#define wxAPPLY 0x00000020
+#define wxCLOSE 0x00000040
+#define wxOK_DEFAULT 0x00000000
+#define wxYES_DEFAULT 0x00000000
+#define wxNO_DEFAULT 0x00000080
+#define wxCANCEL_DEFAULT 0x80000000
+#define wxICON_EXCLAMATION 0x00000100
+#define wxICON_HAND 0x00000200
+#define wxICON_WARNING wxICON_EXCLAMATION
+#define wxICON_ERROR wxICON_HAND
+#define wxICON_QUESTION 0x00000400
+#define wxICON_INFORMATION 0x00000800
+#define wxICON_STOP wxICON_HAND
+#define wxICON_ASTERISK wxICON_INFORMATION
+#define wxICON_MASK (0x00000100|0x00000200|0x00000400|0x00000800)
+#define wxFORWARD 0x00001000
+#define wxBACKWARD 0x00002000
+#define wxRESET 0x00004000
+#define wxHELP 0x00008000
+#define wxMORE 0x00010000
+#define wxSETUP 0x00020000
+
+inline int MyMessageBox(const string& message, const string& caption="Message", int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1)
{
printf("%s: %s\n", caption.c_str(), message.c_str());
fprintf(stderr, "%s: %s\n", caption.c_str(), message.c_str());
@@ -11,12 +39,12 @@ inline int MyMessageBox(const string& message, const string& caption="Message",
}
#define wxMessageBox MyMessageBox
-inline int ThreadSafeMessageBox(const string& message, const string& caption, int style, void* parent, int x, int y)
+inline int ThreadSafeMessageBox(const string& message, const string& caption, int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1)
{
return MyMessageBox(message, caption, style, parent, x, y);
}
-inline bool ThreadSafeAskFee(int64 nFeeRequired, const string& strCaption, void* parent)
+inline bool ThreadSafeAskFee(int64 nFeeRequired, const string& strCaption, wxWindow* parent)
{
return true;
}
diff --git a/rpc.cpp b/rpc.cpp
index 679951af23..a93a6bcff1 100644
--- a/rpc.cpp
+++ b/rpc.cpp
@@ -247,6 +247,7 @@ Value getinfo(const Array& params, bool fHelp)
obj.push_back(Pair("genproclimit", (int)(fLimitProcessors ? nLimitProcessors : -1)));
obj.push_back(Pair("difficulty", (double)GetDifficulty()));
obj.push_back(Pair("hashespersec", gethashespersec(params, false)));
+ obj.push_back(Pair("status", strWarning));
return obj;
}
diff --git a/serialize.h b/serialize.h
index 260e849754..2cc9ab3148 100644
--- a/serialize.h
+++ b/serialize.h
@@ -20,7 +20,7 @@ class CDataStream;
class CAutoFile;
static const int VERSION = 310;
-static const char* pszSubVer = ".4";
+static const char* pszSubVer = ".5";
diff --git a/util.cpp b/util.cpp
index 8f06e30870..2be841d07c 100644
--- a/util.cpp
+++ b/util.cpp
@@ -14,6 +14,7 @@ char pszSetDataDir[MAX_PATH] = "";
bool fShutdown = false;
bool fDaemon = false;
bool fCommandLine = false;
+string strWarning;
@@ -742,14 +743,28 @@ void AddTimeData(unsigned int ip, int64 nTime)
{
sort(vTimeOffsets.begin(), vTimeOffsets.end());
int64 nMedian = vTimeOffsets[vTimeOffsets.size()/2];
- nTimeOffset = nMedian;
- if ((nMedian > 0 ? nMedian : -nMedian) > 70 * 60)
+ // Only let other nodes change our time by so much
+ if (abs64(nMedian) < 70 * 60)
+ {
+ nTimeOffset = nMedian;
+ }
+ else
{
- // Only let other nodes change our clock so far before we
- // go to the NTP servers
- /// todo: Get time from NTP servers, then set a flag
- /// to make sure it doesn't get changed again
nTimeOffset = 0;
+ // If nobody else has the same time as us, give a warning
+ bool fMatch = false;
+ foreach(int64 nOffset, vTimeOffsets)
+ if (nOffset != 0 && abs64(nOffset) < 10 * 60)
+ fMatch = true;
+ static bool fDone;
+ if (!fMatch && !fDone)
+ {
+ fDone = true;
+ string strMessage = _("Warning: Check your system date and time, you may not be able to generate or receive the most recent blocks!");
+ strWarning = strMessage;
+ printf("*** %s\n", strMessage.c_str());
+ boost::thread(bind(ThreadSafeMessageBox, strMessage+" ", string("Bitcoin"), wxOK | wxICON_EXCLAMATION, (wxWindow*)NULL, -1, -1));
+ }
}
foreach(int64 n, vTimeOffsets)
printf("%+"PRI64d" ", n);
diff --git a/util.h b/util.h
index bf8cf300fd..f61896f40b 100644
--- a/util.h
+++ b/util.h
@@ -143,6 +143,7 @@ extern char pszSetDataDir[MAX_PATH];
extern bool fShutdown;
extern bool fDaemon;
extern bool fCommandLine;
+extern string strWarning;
void RandAddSeed();
void RandAddSeedPerfmon();
@@ -298,6 +299,11 @@ inline int64 roundint64(double d)
return (int64)(d > 0 ? d + 0.5 : d - 0.5);
}
+inline int64 abs64(int64 n)
+{
+ return (n >= 0 ? n : -n);
+}
+
template<typename T>
string HexStr(const T itbegin, const T itend, bool fSpaces=true)
{