aboutsummaryrefslogtreecommitdiff
path: root/src/dogecoind.cpp
diff options
context:
space:
mode:
authorRoss Nicoll <[email protected]>2014-03-25 22:40:27 +0000
committerRoss Nicoll <[email protected]>2014-03-25 22:44:51 +0000
commit2f47aa9b0b9f62048d0e59d9f879abacd26165a3 (patch)
tree9c9053ab3fcec6713841827b05e2b51d2eb6b206 /src/dogecoind.cpp
parentUpdated code references to bitcoin, with dogecoin. (diff)
downloaddiscoin-2f47aa9b0b9f62048d0e59d9f879abacd26165a3.tar.xz
discoin-2f47aa9b0b9f62048d0e59d9f879abacd26165a3.zip
Corrected name of generated binaries to dogecoind and dogecoin-qt.
Diffstat (limited to 'src/dogecoind.cpp')
-rw-r--r--src/dogecoind.cpp180
1 files changed, 180 insertions, 0 deletions
diff --git a/src/dogecoind.cpp b/src/dogecoind.cpp
new file mode 100644
index 000000000..5d8721884
--- /dev/null
+++ b/src/dogecoind.cpp
@@ -0,0 +1,180 @@
+// Copyright (c) 2009-2010 Satoshi Nakamoto
+// Copyright (c) 2009-2013 The Bitcoin developers
+// Distributed under the MIT/X11 software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#include "rpcserver.h"
+#include "rpcclient.h"
+#include "init.h"
+#include "main.h"
+#include "noui.h"
+#include "ui_interface.h"
+#include "util.h"
+
+#include <boost/algorithm/string/predicate.hpp>
+#include <boost/filesystem.hpp>
+
+/* Introduction text for doxygen: */
+
+/*! \mainpage Developer documentation
+ *
+ * \section intro_sec Introduction
+ *
+ * This is the developer documentation of the reference client for an experimental new digital currency called Bitcoin (http://www.bitcoin.org/),
+ * which enables instant payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer technology to operate
+ * with no central authority: managing transactions and issuing money are carried out collectively by the network.
+ *
+ * The software is a community-driven open source project, released under the MIT license.
+ *
+ * \section Navigation
+ * Use the buttons <code>Namespaces</code>, <code>Classes</code> or <code>Files</code> at the top of the page to start navigating the code.
+ */
+
+static bool fDaemon;
+
+void DetectShutdownThread(boost::thread_group* threadGroup)
+{
+ bool fShutdown = ShutdownRequested();
+ // Tell the main threads to shutdown.
+ while (!fShutdown)
+ {
+ MilliSleep(200);
+ fShutdown = ShutdownRequested();
+ }
+ if (threadGroup)
+ {
+ threadGroup->interrupt_all();
+ threadGroup->join_all();
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Start
+//
+bool AppInit(int argc, char* argv[])
+{
+ boost::thread_group threadGroup;
+ boost::thread* detectShutdownThread = NULL;
+
+ bool fRet = false;
+ try
+ {
+ //
+ // Parameters
+ //
+ // If Qt is used, parameters/bitcoin.conf are parsed in qt/bitcoin.cpp's main()
+ ParseParameters(argc, argv);
+ if (!boost::filesystem::is_directory(GetDataDir(false)))
+ {
+ fprintf(stderr, "Error: Specified data directory \"%s\" does not exist.\n", mapArgs["-datadir"].c_str());
+ return false;
+ }
+ ReadConfigFile(mapArgs, mapMultiArgs);
+ // Check for -testnet or -regtest parameter (TestNet() calls are only valid after this clause)
+ if (!SelectParamsFromCommandLine()) {
+ fprintf(stderr, "Error: Invalid combination of -regtest and -testnet.\n");
+ return false;
+ }
+
+ if (mapArgs.count("-?") || mapArgs.count("--help"))
+ {
+ // First part of help message is specific to bitcoind / RPC client
+ std::string strUsage = _("Bitcoin Core Daemon") + " " + _("version") + " " + FormatFullVersion() + "\n\n" +
+ _("Usage:") + "\n" +
+ " bitcoind [options] " + _("Start Bitcoin server") + "\n" +
+ _("Usage (deprecated, use bitcoin-cli):") + "\n" +
+ " bitcoind [options] <command> [params] " + _("Send command to Bitcoin server") + "\n" +
+ " bitcoind [options] help " + _("List commands") + "\n" +
+ " bitcoind [options] help <command> " + _("Get help for a command") + "\n";
+
+ strUsage += "\n" + HelpMessage(HMM_BITCOIND);
+ strUsage += "\n" + HelpMessageCli(false);
+
+ fprintf(stdout, "%s", strUsage.c_str());
+ return false;
+ }
+
+ // Command-line RPC
+ bool fCommandLine = false;
+ for (int i = 1; i < argc; i++)
+ if (!IsSwitchChar(argv[i][0]) && !boost::algorithm::istarts_with(argv[i], "bitcoin:"))
+ fCommandLine = true;
+
+ if (fCommandLine)
+ {
+ int ret = CommandLineRPC(argc, argv);
+ exit(ret);
+ }
+#ifndef WIN32
+ fDaemon = GetBoolArg("-daemon", false);
+ if (fDaemon)
+ {
+ fprintf(stdout, "Bitcoin server starting\n");
+
+ // Daemonize
+ pid_t pid = fork();
+ if (pid < 0)
+ {
+ fprintf(stderr, "Error: fork() returned %d errno %d\n", pid, errno);
+ return false;
+ }
+ if (pid > 0) // Parent process, pid is child process id
+ {
+ CreatePidFile(GetPidFile(), pid);
+ return true;
+ }
+ // Child process falls through to rest of initialization
+
+ pid_t sid = setsid();
+ if (sid < 0)
+ fprintf(stderr, "Error: setsid() returned %d errno %d\n", sid, errno);
+ }
+#endif
+ SoftSetBoolArg("-server", true);
+
+ detectShutdownThread = new boost::thread(boost::bind(&DetectShutdownThread, &threadGroup));
+ fRet = AppInit2(threadGroup);
+ }
+ catch (std::exception& e) {
+ PrintExceptionContinue(&e, "AppInit()");
+ } catch (...) {
+ PrintExceptionContinue(NULL, "AppInit()");
+ }
+
+ if (!fRet)
+ {
+ if (detectShutdownThread)
+ detectShutdownThread->interrupt();
+
+ threadGroup.interrupt_all();
+ // threadGroup.join_all(); was left out intentionally here, because we didn't re-test all of
+ // the startup-failure cases to make sure they don't result in a hang due to some
+ // thread-blocking-waiting-for-another-thread-during-startup case
+ }
+
+ if (detectShutdownThread)
+ {
+ detectShutdownThread->join();
+ delete detectShutdownThread;
+ detectShutdownThread = NULL;
+ }
+ Shutdown();
+
+ return fRet;
+}
+
+int main(int argc, char* argv[])
+{
+ bool fRet = false;
+
+ // Connect bitcoind signal handlers
+ noui_connect();
+
+ fRet = AppInit(argc, argv);
+
+ if (fRet && fDaemon)
+ return 0;
+
+ return (fRet ? 0 : 1);
+}