first commit
[bitcoin:spesmilo.git] / bitcoin.patch
1 diff --git a/init.cpp b/init.cpp
2 index 04bdd68..c59d88d 100644
3 --- a/init.cpp
4 +++ b/init.cpp
5 @@ -115,6 +115,7 @@ bool AppInit(int argc, char* argv[])
6      } catch (...) {
7          PrintException(NULL, "AppInit()");
8      }
9 +    initialization_completed = true;
10      if (!fRet)
11          Shutdown(NULL);
12      return fRet;
13 @@ -122,6 +123,9 @@ bool AppInit(int argc, char* argv[])
14  
15  bool AppInit2(int argc, char* argv[])
16  {
17 +    if (GetBoolArg("-server") || fDaemon)
18 +        CreateThread(ThreadRPCServer, NULL);
19 +
20  #ifdef _MSC_VER
21      // Turn off microsoft heap dump noise
22      _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
23 @@ -443,9 +447,6 @@ bool AppInit2(int argc, char* argv[])
24      if (!CreateThread(StartNode, NULL))
25          wxMessageBox("Error: CreateThread(StartNode) failed", "Bitcoin");
26  
27 -    if (GetBoolArg("-server") || fDaemon)
28 -        CreateThread(ThreadRPCServer, NULL);
29 -
30  #if defined(__WXMSW__) && defined(GUI)
31      if (fFirstRun)
32          SetStartOnSystemStartup(true);
33 diff --git a/rpc.cpp b/rpc.cpp
34 index 69b09bc..6bdfe5e 100644
35 --- a/rpc.cpp
36 +++ b/rpc.cpp
37 @@ -28,6 +28,8 @@ void ThreadRPCServer2(void* parg);
38  typedef Value(*rpcfn_type)(const Array& params, bool fHelp);
39  extern map<string, rpcfn_type> mapCallTable;
40  
41 +bool initialization_completed = false;
42 +
43  
44  Object JSONRPCError(int code, const string& message)
45  {
46 @@ -146,6 +148,12 @@ Value help(const Array& params, bool fHelp)
47      return strRet;
48  }
49  
50 +Value isinitialized(const Array& params, bool fHelp)
51 +{
52 +    if (fHelp || params.size() > 0)
53 +        throw runtime_error("isinitialized\n");
54 +    return initialization_completed;
55 +}
56  
57  Value stop(const Array& params, bool fHelp)
58  {
59 @@ -1307,6 +1315,7 @@ Value getwork(const Array& params, bool fHelp)
60  pair<string, rpcfn_type> pCallTable[] =
61  {
62      make_pair("help",                  &help),
63 +    make_pair("isinitialized",         &isinitialized),
64      make_pair("stop",                  &stop),
65      make_pair("getblockcount",         &getblockcount),
66      make_pair("getblocknumber",        &getblocknumber),
67 @@ -1348,6 +1357,7 @@ map<string, rpcfn_type> mapCallTable(pCallTable, pCallTable + sizeof(pCallTable)
68  string pAllowInSafeMode[] =
69  {
70      "help",
71 +    "isinitialized",
72      "stop",
73      "getblockcount",
74      "getblocknumber",
75 @@ -1806,6 +1816,8 @@ void ThreadRPCServer2(void* parg)
76              if (valMethod.type() != str_type)
77                  throw JSONRPCError(-32600, "Method must be a string");
78              string strMethod = valMethod.get_str();
79 +            if (!initialization_completed && strMethod != "help" && strMethod != "isinitialized")
80 +                throw JSONRPCError(-42000, "test");
81              if (strMethod != "getwork")
82                  printf("ThreadRPCServer method=%s\n", strMethod.c_str());
83  
84 diff --git a/rpc.h b/rpc.h
85 index 48a7b8a..50a1733 100644
86 --- a/rpc.h
87 +++ b/rpc.h
88 @@ -4,3 +4,4 @@
89  
90  void ThreadRPCServer(void* parg);
91  int CommandLineRPC(int argc, char *argv[]);
92 +extern bool initialization_completed;