changeset 259:81c2af5fccd7 draft

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
author s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
date Fri, 20 Aug 2010 16:55:14 +0000
parents 97f8c31be574
children eceee9912324
files main.cpp noui.h rpc.cpp serialize.h util.cpp util.h
diffstat 6 files changed, 64 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/main.cpp
+++ b/main.cpp
@@ -1579,10 +1579,10 @@
     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;
     }
--- 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 @@
 }
 #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;
 }
--- a/rpc.cpp
+++ b/rpc.cpp
@@ -247,6 +247,7 @@
     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;
 }
 
--- a/serialize.h
+++ b/serialize.h
@@ -20,7 +20,7 @@
 class CAutoFile;
 
 static const int VERSION = 310;
-static const char* pszSubVer = ".4";
+static const char* pszSubVer = ".5";
 
 
 
--- a/util.cpp
+++ b/util.cpp
@@ -14,6 +14,7 @@
 bool fShutdown = false;
 bool fDaemon = false;
 bool fCommandLine = false;
+string strWarning;
 
 
 
@@ -742,14 +743,28 @@
     {
         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);
--- a/util.h
+++ b/util.h
@@ -143,6 +143,7 @@
 extern bool fShutdown;
 extern bool fDaemon;
 extern bool fCommandLine;
+extern string strWarning;
 
 void RandAddSeed();
 void RandAddSeedPerfmon();
@@ -298,6 +299,11 @@
     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)
 {