annotate init.cpp @ 279:f70e033b871e draft

Russian translation by eurekafag git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@160 1a98c847-1fd6-4fd8-948a-caf3550aa51b
author s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
date Mon, 04 Oct 2010 01:40:50 +0000
parents eb048502574e
children 163e140e74f5 0ec96f552f62
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
264
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
2 // Distributed under the MIT/X11 software license, see the accompanying
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
3 // file license.txt or http://www.opensource.org/licenses/mit-license.php.
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
4
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
5 #include "headers.h"
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
6
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
7
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
8
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
9
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
10
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
11
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
12
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
13 //////////////////////////////////////////////////////////////////////////////
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
14 //
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
15 // Shutdown
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
16 //
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
17
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
18 void ExitTimeout(void* parg)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
19 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
20 #ifdef __WXMSW__
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
21 Sleep(5000);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
22 ExitProcess(0);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
23 #endif
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
24 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
25
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
26 void Shutdown(void* parg)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
27 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
28 static CCriticalSection cs_Shutdown;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
29 static bool fTaken;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
30 bool fFirstThread;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
31 CRITICAL_BLOCK(cs_Shutdown)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
32 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
33 fFirstThread = !fTaken;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
34 fTaken = true;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
35 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
36 static bool fExit;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
37 if (fFirstThread)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
38 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
39 fShutdown = true;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
40 nTransactionsUpdated++;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
41 DBFlush(false);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
42 StopNode();
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
43 DBFlush(true);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
44 CreateThread(ExitTimeout, NULL);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
45 Sleep(50);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
46 printf("Bitcoin exiting\n\n");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
47 fExit = true;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
48 exit(0);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
49 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
50 else
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
51 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
52 while (!fExit)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
53 Sleep(500);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
54 Sleep(100);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
55 ExitThread(0);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
56 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
57 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
58
268
f7d27372246c Gavin Andresen: clean shutdown on SIGTERM
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 267
diff changeset
59 void HandleSIGTERM(int)
f7d27372246c Gavin Andresen: clean shutdown on SIGTERM
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 267
diff changeset
60 {
f7d27372246c Gavin Andresen: clean shutdown on SIGTERM
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 267
diff changeset
61 fRequestShutdown = true;
f7d27372246c Gavin Andresen: clean shutdown on SIGTERM
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 267
diff changeset
62 }
f7d27372246c Gavin Andresen: clean shutdown on SIGTERM
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 267
diff changeset
63
264
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
64
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
65
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
66
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
67
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
68
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
69 //////////////////////////////////////////////////////////////////////////////
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
70 //
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
71 // Start
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
72 //
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
73
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
74 #ifndef GUI
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
75 int main(int argc, char* argv[])
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
76 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
77 for (int i = 1; i < argc; i++)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
78 if (!IsSwitchChar(argv[i][0]))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
79 fCommandLine = true;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
80 fDaemon = !fCommandLine;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
81
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
82 #ifdef __WXGTK__
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
83 if (!fCommandLine)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
84 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
85 // Daemonize
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
86 pid_t pid = fork();
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
87 if (pid < 0)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
88 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
89 fprintf(stderr, "Error: fork() returned %d errno %d\n", pid, errno);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
90 return 1;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
91 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
92 if (pid > 0)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
93 pthread_exit((void*)0);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
94 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
95 #endif
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
96
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
97 if (!AppInit(argc, argv))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
98 return 1;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
99
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
100 while (!fShutdown)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
101 Sleep(1000000);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
102 return 0;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
103 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
104 #endif
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
105
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
106 bool AppInit(int argc, char* argv[])
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
107 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
108 bool fRet = false;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
109 try
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
110 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
111 fRet = AppInit2(argc, argv);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
112 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
113 catch (std::exception& e) {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
114 PrintException(&e, "AppInit()");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
115 } catch (...) {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
116 PrintException(NULL, "AppInit()");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
117 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
118 if (!fRet)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
119 Shutdown(NULL);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
120 return fRet;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
121 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
122
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
123 bool AppInit2(int argc, char* argv[])
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
124 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
125 #ifdef _MSC_VER
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
126 // Turn off microsoft heap dump noise
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
127 _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
128 _CrtSetReportFile(_CRT_WARN, CreateFileA("NUL", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0));
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
129 #endif
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
130 #if _MSC_VER >= 1400
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
131 // Disable confusing "helpful" text message on abort, ctrl-c
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
132 _set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
133 #endif
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
134 #ifndef __WXMSW__
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
135 umask(077);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
136 #endif
268
f7d27372246c Gavin Andresen: clean shutdown on SIGTERM
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 267
diff changeset
137 #ifndef __WXMSW__
f7d27372246c Gavin Andresen: clean shutdown on SIGTERM
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 267
diff changeset
138 // Clean shutdown on SIGTERM
f7d27372246c Gavin Andresen: clean shutdown on SIGTERM
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 267
diff changeset
139 struct sigaction sa;
f7d27372246c Gavin Andresen: clean shutdown on SIGTERM
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 267
diff changeset
140 sa.sa_handler = HandleSIGTERM;
f7d27372246c Gavin Andresen: clean shutdown on SIGTERM
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 267
diff changeset
141 sigemptyset(&sa.sa_mask);
f7d27372246c Gavin Andresen: clean shutdown on SIGTERM
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 267
diff changeset
142 sa.sa_flags = 0;
f7d27372246c Gavin Andresen: clean shutdown on SIGTERM
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 267
diff changeset
143 sigaction(SIGTERM, &sa, NULL);
f7d27372246c Gavin Andresen: clean shutdown on SIGTERM
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 267
diff changeset
144 #endif
264
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
145
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
146 //
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
147 // Parameters
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
148 //
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
149 ParseParameters(argc, argv);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
150
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
151 if (mapArgs.count("-datadir"))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
152 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
153 filesystem::path pathDataDir = filesystem::system_complete(mapArgs["-datadir"]);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
154 strlcpy(pszSetDataDir, pathDataDir.string().c_str(), sizeof(pszSetDataDir));
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
155 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
156
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
157 ReadConfigFile(mapArgs, mapMultiArgs); // Must be done after processing datadir
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
158
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
159 if (mapArgs.count("-?") || mapArgs.count("--help"))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
160 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
161 string strUsage = string() +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
162 _("Usage:") + "\t\t\t\t\t\t\t\t\t\t\n" +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
163 " bitcoin [options] \t " + "\n" +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
164 " bitcoin [options] <command> [params]\t " + _("Send command to -server or bitcoind\n") +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
165 " bitcoin [options] help \t\t " + _("List commands\n") +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
166 " bitcoin [options] help <command> \t\t " + _("Get help for a command\n") +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
167 _("Options:\n") +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
168 " -conf=<file> \t " + _("Specify configuration file (default: bitcoin.conf)\n") +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
169 " -gen \t " + _("Generate coins\n") +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
170 " -gen=0 \t " + _("Don't generate coins\n") +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
171 " -min \t " + _("Start minimized\n") +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
172 " -datadir=<dir> \t " + _("Specify data directory\n") +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
173 " -proxy=<ip:port>\t " + _("Connect through socks4 proxy\n") +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
174 " -addnode=<ip> \t " + _("Add a node to connect to\n") +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
175 " -connect=<ip> \t " + _("Connect only to the specified node\n") +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
176 " -server \t " + _("Accept command line and JSON-RPC commands\n") +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
177 " -daemon \t " + _("Run in the background as a daemon and accept commands\n") +
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
178 " -? \t " + _("This help message\n");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
179
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
180 #if defined(__WXMSW__) && defined(GUI)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
181 // Tabs make the columns line up in the message box
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
182 wxMessageBox(strUsage, "Bitcoin", wxOK);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
183 #else
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
184 // Remove tabs
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
185 strUsage.erase(std::remove(strUsage.begin(), strUsage.end(), '\t'), strUsage.end());
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
186 fprintf(stderr, "%s", strUsage.c_str());
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
187 #endif
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
188 return false;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
189 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
190
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
191 if (mapArgs.count("-debug"))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
192 fDebug = true;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
193
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
194 if (mapArgs.count("-printtodebugger"))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
195 fPrintToDebugger = true;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
196
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
197 if (fCommandLine)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
198 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
199 int ret = CommandLineRPC(argc, argv);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
200 exit(ret);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
201 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
202
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
203 if (!fDebug && !pszSetDataDir[0])
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
204 ShrinkDebugFile();
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
205 printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
277
eb048502574e don't count or spend payments until they have 1 confirmation,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 268
diff changeset
206 printf("Bitcoin version %s%s beta\n", FormatVersion(VERSION).c_str(), pszSubVer);
264
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
207 #ifdef GUI
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
208 printf("OS version %s\n", ((string)wxGetOsDescription()).c_str());
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
209 printf("System default language is %d %s\n", g_locale.GetSystemLanguage(), ((string)g_locale.GetSysName()).c_str());
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
210 printf("Language file %s (%s)\n", (string("locale/") + (string)g_locale.GetCanonicalName() + "/LC_MESSAGES/bitcoin.mo").c_str(), ((string)g_locale.GetLocale()).c_str());
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
211 #endif
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
212 printf("Default data directory %s\n", GetDefaultDataDir().c_str());
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
213
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
214 if (mapArgs.count("-loadblockindextest"))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
215 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
216 CTxDB txdb("r");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
217 txdb.LoadBlockIndex();
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
218 PrintBlockTree();
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
219 return false;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
220 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
221
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
222 //
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
223 // Limit to single instance per user
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
224 // Required to protect the database files if we're going to keep deleting log.*
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
225 //
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
226 #if defined(__WXMSW__) && defined(GUI)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
227 // todo: wxSingleInstanceChecker wasn't working on Linux, never deleted its lock file
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
228 // maybe should go by whether successfully bind port 8333 instead
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
229 wxString strMutexName = wxString("bitcoin_running.") + getenv("HOMEPATH");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
230 for (int i = 0; i < strMutexName.size(); i++)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
231 if (!isalnum(strMutexName[i]))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
232 strMutexName[i] = '.';
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
233 wxSingleInstanceChecker* psingleinstancechecker = new wxSingleInstanceChecker(strMutexName);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
234 if (psingleinstancechecker->IsAnotherRunning())
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
235 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
236 printf("Existing instance found\n");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
237 unsigned int nStart = GetTime();
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
238 loop
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
239 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
240 // TODO: find out how to do this in Linux, or replace with wxWidgets commands
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
241 // Show the previous instance and exit
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
242 HWND hwndPrev = FindWindowA("wxWindowClassNR", "Bitcoin");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
243 if (hwndPrev)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
244 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
245 if (IsIconic(hwndPrev))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
246 ShowWindow(hwndPrev, SW_RESTORE);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
247 SetForegroundWindow(hwndPrev);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
248 return false;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
249 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
250
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
251 if (GetTime() > nStart + 60)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
252 return false;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
253
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
254 // Resume this instance if the other exits
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
255 delete psingleinstancechecker;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
256 Sleep(1000);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
257 psingleinstancechecker = new wxSingleInstanceChecker(strMutexName);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
258 if (!psingleinstancechecker->IsAnotherRunning())
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
259 break;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
260 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
261 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
262 #endif
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
263
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
264 // Bind to the port early so we can tell if another instance is already running.
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
265 // This is a backup to wxSingleInstanceChecker, which doesn't work on Linux.
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
266 string strErrors;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
267 if (!BindListenPort(strErrors))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
268 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
269 wxMessageBox(strErrors, "Bitcoin");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
270 return false;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
271 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
272
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
273 //
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
274 // Load data files
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
275 //
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
276 if (fDaemon)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
277 fprintf(stdout, "bitcoin server starting\n");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
278 strErrors = "";
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
279 int64 nStart;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
280
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
281 printf("Loading addresses...\n");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
282 nStart = GetTimeMillis();
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
283 if (!LoadAddresses())
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
284 strErrors += _("Error loading addr.dat \n");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
285 printf(" addresses %15"PRI64d"ms\n", GetTimeMillis() - nStart);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
286
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
287 printf("Loading block index...\n");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
288 nStart = GetTimeMillis();
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
289 if (!LoadBlockIndex())
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
290 strErrors += _("Error loading blkindex.dat \n");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
291 printf(" block index %15"PRI64d"ms\n", GetTimeMillis() - nStart);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
292
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
293 printf("Loading wallet...\n");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
294 nStart = GetTimeMillis();
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
295 bool fFirstRun;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
296 if (!LoadWallet(fFirstRun))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
297 strErrors += _("Error loading wallet.dat \n");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
298 printf(" wallet %15"PRI64d"ms\n", GetTimeMillis() - nStart);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
299
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
300 printf("Done loading\n");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
301
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
302 //// debug print
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
303 printf("mapBlockIndex.size() = %d\n", mapBlockIndex.size());
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
304 printf("nBestHeight = %d\n", nBestHeight);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
305 printf("mapKeys.size() = %d\n", mapKeys.size());
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
306 printf("mapPubKeys.size() = %d\n", mapPubKeys.size());
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
307 printf("mapWallet.size() = %d\n", mapWallet.size());
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
308 printf("mapAddressBook.size() = %d\n", mapAddressBook.size());
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
309
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
310 if (!strErrors.empty())
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
311 {
267
32694c9fc1c5 cleanup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 264
diff changeset
312 wxMessageBox(strErrors, "Bitcoin", wxOK | wxICON_ERROR);
264
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
313 return false;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
314 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
315
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
316 // Add wallet transactions that aren't already in a block to mapTransactions
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
317 ReacceptWalletTransactions();
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
318
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
319 //
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
320 // Parameters
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
321 //
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
322 if (mapArgs.count("-printblockindex") || mapArgs.count("-printblocktree"))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
323 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
324 PrintBlockTree();
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
325 return false;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
326 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
327
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
328 if (mapArgs.count("-printblock"))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
329 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
330 string strMatch = mapArgs["-printblock"];
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
331 int nFound = 0;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
332 for (map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.begin(); mi != mapBlockIndex.end(); ++mi)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
333 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
334 uint256 hash = (*mi).first;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
335 if (strncmp(hash.ToString().c_str(), strMatch.c_str(), strMatch.size()) == 0)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
336 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
337 CBlockIndex* pindex = (*mi).second;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
338 CBlock block;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
339 block.ReadFromDisk(pindex);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
340 block.BuildMerkleTree();
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
341 block.print();
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
342 printf("\n");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
343 nFound++;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
344 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
345 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
346 if (nFound == 0)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
347 printf("No blocks matching %s were found\n", strMatch.c_str());
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
348 return false;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
349 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
350
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
351 if (mapArgs.count("-gen"))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
352 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
353 if (mapArgs["-gen"].empty())
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
354 fGenerateBitcoins = true;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
355 else
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
356 fGenerateBitcoins = (atoi(mapArgs["-gen"].c_str()) != 0);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
357 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
358
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
359 if (mapArgs.count("-proxy"))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
360 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
361 fUseProxy = true;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
362 addrProxy = CAddress(mapArgs["-proxy"]);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
363 if (!addrProxy.IsValid())
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
364 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
365 wxMessageBox(_("Invalid -proxy address"), "Bitcoin");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
366 return false;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
367 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
368 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
369
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
370 if (mapArgs.count("-addnode"))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
371 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
372 foreach(string strAddr, mapMultiArgs["-addnode"])
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
373 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
374 CAddress addr(strAddr, NODE_NETWORK);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
375 addr.nTime = 0; // so it won't relay unless successfully connected
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
376 if (addr.IsValid())
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
377 AddAddress(addr);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
378 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
379 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
380
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
381 if (mapArgs.count("-paytxfee"))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
382 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
383 if (!ParseMoney(mapArgs["-paytxfee"], nTransactionFee))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
384 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
385 wxMessageBox(_("Invalid amount for -paytxfee=<amount>"), "Bitcoin");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
386 return false;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
387 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
388 if (nTransactionFee > 1 * COIN)
267
32694c9fc1c5 cleanup,
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 264
diff changeset
389 wxMessageBox(_("Warning: -paytxfee is set very high. This is the transaction fee you will pay if you send a transaction."), "Bitcoin", wxOK | wxICON_EXCLAMATION);
264
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
390 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
391
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
392 //
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
393 // Create the main window and start the node
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
394 //
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
395 #ifdef GUI
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
396 if (!fDaemon)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
397 CreateMainWindow();
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
398 #endif
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
399
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
400 if (!CheckDiskSpace())
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
401 return false;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
402
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
403 RandAddSeedPerfmon();
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
404
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
405 if (!CreateThread(StartNode, NULL))
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
406 wxMessageBox("Error: CreateThread(StartNode) failed", "Bitcoin");
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
407
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
408 if (mapArgs.count("-server") || fDaemon)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
409 CreateThread(ThreadRPCServer, NULL);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
410
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
411 #if defined(__WXMSW__) && defined(GUI)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
412 if (fFirstRun)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
413 SetStartOnSystemStartup(true);
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
414 #endif
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
415
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
416 return true;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 226
diff changeset
417 }