]> Git Repo - VerusCoin.git/blob - src/bitcoind.cpp
Test
[VerusCoin.git] / src / bitcoind.cpp
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2013 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6 #include "clientversion.h"
7 #include "rpcserver.h"
8 #include "init.h"
9 #include "main.h"
10 #include "noui.h"
11 #include "scheduler.h"
12 #include "util.h"
13
14 #include <boost/algorithm/string/predicate.hpp>
15 #include <boost/filesystem.hpp>
16 #include <boost/thread.hpp>
17
18 /* Introduction text for doxygen: */
19
20 /*! \mainpage Developer documentation
21  *
22  * \section intro_sec Introduction
23  *
24  * This is the developer documentation of the reference client for an experimental new digital currency called Bitcoin (https://www.bitcoin.org/),
25  * which enables instant payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer technology to operate
26  * with no central authority: managing transactions and issuing money are carried out collectively by the network.
27  *
28  * The software is a community-driven open source project, released under the MIT license.
29  *
30  * \section Navigation
31  * Use the buttons <code>Namespaces</code>, <code>Classes</code> or <code>Files</code> at the top of the page to start navigating the code.
32  */
33
34 static bool fDaemon;
35 extern char ASSETCHAINS_SYMBOL[16];
36 void komodo_passport_iteration();
37
38 void WaitForShutdown(boost::thread_group* threadGroup)
39 {
40     bool fShutdown = ShutdownRequested();
41     // Tell the main threads to shutdown.
42     while (!fShutdown)
43     {
44         //fprintf(stderr,"call passport iteration\n");
45         if ( ASSETCHAINS_SYMBOL[0] == 0 )
46         {
47             komodo_passport_iteration();
48             MilliSleep(10000);
49         } else MilliSleep(1000);
50         fShutdown = ShutdownRequested();
51     }
52     if (threadGroup)
53     {
54         threadGroup->interrupt_all();
55         threadGroup->join_all();
56     }
57 }
58
59 //////////////////////////////////////////////////////////////////////////////
60 //
61 // Start
62 //
63 extern int32_t IS_KOMODO_NOTARY,USE_EXTERNAL_PUBKEY,ASSETCHAIN_INIT;
64 extern std::string NOTARY_PUBKEY;
65 int32_t komodo_is_issuer();
66 void komodo_passport_iteration();
67
68 bool AppInit(int argc, char* argv[])
69 {
70     boost::thread_group threadGroup;
71     CScheduler scheduler;
72
73     bool fRet = false;
74
75     //
76     // Parameters
77     //
78     // If Qt is used, parameters/komodo.conf are parsed in qt/bitcoin.cpp's main()
79     ParseParameters(argc, argv);
80
81     // Process help and version before taking care about datadir
82     if (mapArgs.count("-?") || mapArgs.count("-h") ||  mapArgs.count("-help") || mapArgs.count("-version"))
83     {
84         std::string strUsage = _("Komodo Daemon") + " " + _("version") + " " + FormatFullVersion() + "\n";
85
86         if (mapArgs.count("-version"))
87         {
88             strUsage += LicenseInfo();
89         }
90         else
91         {
92             strUsage += "\n" + _("Usage:") + "\n" +
93                   "  komodod [options]                     " + _("Start Komodo Daemon") + "\n";
94
95             strUsage += "\n" + HelpMessage(HMM_BITCOIND);
96         }
97
98         fprintf(stdout, "%s", strUsage.c_str());
99         return false;
100     }
101
102     try
103     {
104         void komodo_args();
105         komodo_args();
106         fprintf(stderr,"call komodo_args NOTARY_PUBKEY.(%s)\n",NOTARY_PUBKEY.c_str());
107         while ( ASSETCHAIN_INIT == 0 )
108         {
109             //if ( komodo_is_issuer() != 0 )
110             //    komodo_passport_iteration();
111             sleep(1);
112         }
113         printf("initialized %s\n",ASSETCHAINS_SYMBOL);
114         if (!boost::filesystem::is_directory(GetDataDir(false)))
115         {
116             fprintf(stderr, "Error: Specified data directory \"%s\" does not exist.\n", mapArgs["-datadir"].c_str());
117             return false;
118         }
119         try
120         {
121             ReadConfigFile(mapArgs, mapMultiArgs);
122         } catch (const missing_zcash_conf& e) {
123             fprintf(stderr,
124                 (_("Before starting zcashd, you need to create a configuration file:\n"
125                    "%s\n"
126                    "It can be completely empty! That indicates you are happy with the default\n"
127                    "configuration of zcashd. But requiring a configuration file to start ensures\n"
128                    "that zcashd won't accidentally compromise your privacy if there was a default\n"
129                    "option you needed to change.\n"
130                    "\n"
131                    "You can look at the example configuration file for suggestions of default\n"
132                    "options that you may want to change. It should be in one of these locations,\n"
133                    "depending on how you installed Zcash:\n") +
134                  _("- Source code:  %s\n"
135                    "- .deb package: %s\n")).c_str(),
136                 GetConfigFile().string().c_str(),
137                 "contrib/DEBIAN/examples/zcash.conf",
138                 "/usr/share/doc/zcash/examples/zcash.conf");
139             return false;
140         } catch (const std::exception& e) {
141             fprintf(stderr,"Error reading configuration file: %s\n", e.what());
142             return false;
143         }
144         // Check for -testnet or -regtest parameter (Params() calls are only valid after this clause)
145         if (!SelectParamsFromCommandLine()) {
146             fprintf(stderr, "Error: Invalid combination of -regtest and -testnet.\n");
147             return false;
148         }
149
150         // Command-line RPC
151         bool fCommandLine = false;
152         for (int i = 1; i < argc; i++)
153             if (!IsSwitchChar(argv[i][0]) && !boost::algorithm::istarts_with(argv[i], "komodo:"))
154                 fCommandLine = true;
155
156         if (fCommandLine)
157         {
158             fprintf(stderr, "Error: There is no RPC client functionality in komodod. Use the komodo-cli utility instead.\n");
159             exit(1);
160         }
161
162 #ifndef WIN32
163         fDaemon = GetBoolArg("-daemon", false);
164         if (fDaemon)
165         {
166             fprintf(stdout, "Komodo %s server starting\n",ASSETCHAINS_SYMBOL);
167
168             // Daemonize
169             pid_t pid = fork();
170             if (pid < 0)
171             {
172                 fprintf(stderr, "Error: fork() returned %d errno %d\n", pid, errno);
173                 return false;
174             }
175             if (pid > 0) // Parent process, pid is child process id
176             {
177                 return true;
178             }
179             // Child process falls through to rest of initialization
180
181             pid_t sid = setsid();
182             if (sid < 0)
183                 fprintf(stderr, "Error: setsid() returned %d errno %d\n", sid, errno);
184         }
185 #endif
186         SoftSetBoolArg("-server", true);
187
188         fRet = AppInit2(threadGroup, scheduler);
189     }
190     catch (const std::exception& e) {
191         PrintExceptionContinue(&e, "AppInit()");
192     } catch (...) {
193         PrintExceptionContinue(NULL, "AppInit()");
194     }
195     if (!fRet)
196     {
197         threadGroup.interrupt_all();
198         // threadGroup.join_all(); was left out intentionally here, because we didn't re-test all of
199         // the startup-failure cases to make sure they don't result in a hang due to some
200         // thread-blocking-waiting-for-another-thread-during-startup case
201     } else {
202         WaitForShutdown(&threadGroup);
203     }
204     Shutdown();
205
206     return fRet;
207 }
208
209 int main(int argc, char* argv[])
210 {
211     SetupEnvironment();
212
213     // Connect bitcoind signal handlers
214     noui_connect();
215
216     return (AppInit(argc, argv) ? 0 : 1);
217 }
This page took 0.035973 seconds and 4 git commands to generate.