PRCYCoin  2.0.0.7rc1
P2P Digital Currency
util.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2014 The Bitcoin developers
3 // Copyright (c) 2014-2015 The Dash developers
4 // Copyright (c) 2015-2018 The PIVX developers
5 // Copyright (c) 2018-2020 The DAPS Project developers
6 // Distributed under the MIT software license, see the accompanying
7 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
8 
13 #ifndef BITCOIN_UTIL_H
14 #define BITCOIN_UTIL_H
15 
16 #if defined(HAVE_CONFIG_H)
17 #include "config/prcycoin-config.h"
18 #endif
19 
20 #include "compat.h"
21 #include "fs.h"
22 #include "logging.h"
23 #include "tinyformat.h"
24 #include "utiltime.h"
25 #include "util/threadnames.h"
26 
27 #include <atomic>
28 #include <exception>
29 #include <map>
30 #include <stdint.h>
31 #include <string>
32 #include <vector>
33 
34 #include <boost/thread/exceptions.hpp>
35 #include "pubkey.h"
36 
37 extern const char * const DEFAULT_DEBUGLOGFILE;
38 
39 //PRCY only features
40 
41 extern bool fMasterNode;
42 extern bool fLiteMode;
43 extern bool fEnableSwiftTX;
44 extern int nSwiftTXDepth;
45 extern int64_t enforceMasternodePaymentsTime;
46 extern std::string strMasterNodeAddr;
47 extern int keysLoaded;
48 extern bool fSucessfullyLoaded;
49 extern std::vector<int64_t> obfuScationDenominations;
50 extern std::string strBudgetMode;
51 
52 extern std::map<std::string, std::string> mapArgs;
53 extern std::map<std::string, std::vector<std::string> > mapMultiArgs;
54 
55 extern std::string strMiscWarning;
56 
57 void SetupEnvironment();
58 bool SetupNetworking();
59 
60 template<typename... Args>
61 bool error(const char* fmt, const Args&... args)
62 {
63  LogPrintf("ERROR: %s\n", tfm::format(fmt, args...));
64  return false;
65 }
66 
67 void PrintExceptionContinue(const std::exception* pex, const char* pszThread);
68 void ParseParameters(int argc, const char* const argv[]);
69 void FileCommit(FILE* fileout);
70 bool TruncateFile(FILE* file, unsigned int length);
71 int RaiseFileDescriptorLimit(int nMinFD);
72 void AllocateFileRange(FILE* file, unsigned int offset, unsigned int length);
73 bool RenameOver(fs::path src, fs::path dest);
74 bool TryCreateDirectory(const fs::path& p);
75 fs::path GetDefaultDataDir();
76 const fs::path &GetDataDir(bool fNetSpecific = true);
77 void ClearDatadirCache();
78 fs::path GetConfigFile();
79 fs::path GetMasternodeConfigFile();
80 #ifndef WIN32
81 fs::path GetPidFile();
82 void CreatePidFile(const fs::path& path, pid_t pid);
83 #endif
84 void ReadConfigFile(std::map<std::string, std::string>& mapSettingsRet, std::map<std::string, std::vector<std::string> >& mapMultiSettingsRet);
85 #ifdef WIN32
86 fs::path GetSpecialFolderPath(int nFolder, bool fCreate = true);
87 #endif
88 fs::path GetTempPath();
89 
90 void runCommand(std::string strCommand);
91 
92 inline bool IsSwitchChar(char c)
93 {
94 #ifdef WIN32
95  return c == '-' || c == '/';
96 #else
97  return c == '-';
98 #endif
99 }
100 
108 std::string GetArg(const std::string& strArg, const std::string& strDefault);
109 
117 int64_t GetArg(const std::string& strArg, int64_t nDefault);
118 
126 bool GetBoolArg(const std::string& strArg, bool fDefault);
127 
135 bool SoftSetArg(const std::string& strArg, const std::string& strValue);
136 
144 bool SoftSetBoolArg(const std::string& strArg, bool fValue);
145 
152 std::string HelpMessageGroup(const std::string& message);
153 
161 std::string HelpMessageOpt(const std::string& option, const std::string& message);
162 
163 void SetThreadPriority(int nPriority);
164 
168 template <typename Callable>
169 void TraceThread(const char* name, Callable func)
170 {
171  std::string s = strprintf("prcycoin-%s", name);
172  util::ThreadRename(s.c_str());
173  try {
174  LogPrintf("%s thread start\n", name);
175  func();
176  LogPrintf("%s thread exit\n", name);
177  } catch (const boost::thread_interrupted&) {
178  LogPrintf("%s thread interrupt\n", name);
179  throw;
180  } catch (const std::exception& e) {
182  throw;
183  } catch (...) {
185  throw;
186  }
187 }
188 
189 fs::path AbsPathForConfigVal(const boost::filesystem::path& path, bool net_specific = true);
190 bool PointHashingSuccessively(const CPubKey& pk, const unsigned char* tweak, unsigned char* out);
191 
192 #endif // BITCOIN_UTIL_H
AbsPathForConfigVal
fs::path AbsPathForConfigVal(const boost::filesystem::path &path, bool net_specific=true)
strMasterNodeAddr
std::string strMasterNodeAddr
Definition: util.cpp:99
utiltime.h
tinyformat::format
void format(std::ostream &out, const char *fmt, const Args &... args)
Format list of arguments to the stream according to given format string.
Definition: tinyformat.h:958
nSwiftTXDepth
int nSwiftTXDepth
Definition: util.cpp:103
GetConfigFile
fs::path GetConfigFile()
Definition: util.cpp:383
strMiscWarning
std::string strMiscWarning
Definition: util.cpp:115
SetupEnvironment
void SetupEnvironment()
Definition: util.cpp:600
PrintExceptionContinue
void PrintExceptionContinue(const std::exception *pex, const char *pszThread)
Definition: util.cpp:309
fs.h
HelpMessageOpt
std::string HelpMessageOpt(const std::string &option, const std::string &message)
Format a string to be used as option description in help messages.
Definition: util.cpp:286
AllocateFileRange
void AllocateFileRange(FILE *file, unsigned int offset, unsigned int length)
this function tries to make a particular range of a file allocated (corresponding to disk space) it i...
Definition: util.cpp:531
SoftSetBoolArg
bool SoftSetBoolArg(const std::string &strArg, bool fValue)
Set a boolean argument if it doesn't already have a value.
Definition: util.cpp:270
GetBoolArg
bool GetBoolArg(const std::string &strArg, bool fDefault)
Return boolean argument or default value.
Definition: util.cpp:255
enforceMasternodePaymentsTime
int64_t enforceMasternodePaymentsTime
Definition: util.cpp:105
GetMasternodeConfigFile
fs::path GetMasternodeConfigFile()
Definition: util.cpp:389
RaiseFileDescriptorLimit
int RaiseFileDescriptorLimit(int nMinFD)
this function tries to raise the file descriptor limit to the requested number.
Definition: util.cpp:507
TruncateFile
bool TruncateFile(FILE *file, unsigned int length)
Definition: util.cpp:494
pubkey.h
runCommand
void runCommand(std::string strCommand)
Definition: util.cpp:593
IsSwitchChar
bool IsSwitchChar(char c)
Definition: util.h:92
obfuScationDenominations
std::vector< int64_t > obfuScationDenominations
All denominations used by obfuscation.
Definition: util.cpp:108
DEFAULT_DEBUGLOGFILE
const char *const DEFAULT_DEBUGLOGFILE
Server/client environment: argument handling, config file parsing, thread wrappers.
Definition: logging.cpp:12
tinyformat.h
ClearDatadirCache
void ClearDatadirCache()
Definition: util.cpp:377
prcycoin-config.h
compat.h
util::ThreadRename
void ThreadRename(std::string &&)
Rename a thread both in terms of an internal (in-memory) name as well as its system thread name.
Definition: threadnames.cpp:57
SetThreadPriority
void SetThreadPriority(int nPriority)
Definition: util.cpp:648
RenameOver
bool RenameOver(fs::path src, fs::path dest)
Definition: util.cpp:448
LogPrintf
#define LogPrintf(...)
Definition: logging.h:147
GetTempPath
fs::path GetTempPath()
Definition: util.cpp:588
ReadConfigFile
void ReadConfigFile(std::map< std::string, std::string > &mapSettingsRet, std::map< std::string, std::vector< std::string > > &mapMultiSettingsRet)
Definition: util.cpp:395
PointHashingSuccessively
bool PointHashingSuccessively(const CPubKey &pk, const unsigned char *tweak, unsigned char *out)
Definition: util.cpp:619
FileCommit
void FileCommit(FILE *fileout)
Definition: util.cpp:477
strBudgetMode
std::string strBudgetMode
Definition: util.cpp:109
name
const char * name
Definition: rest.cpp:34
GetArg
std::string GetArg(const std::string &strArg, const std::string &strDefault)
Return string argument or default value.
Definition: util.cpp:241
strprintf
#define strprintf
Definition: tinyformat.h:1056
SoftSetArg
bool SoftSetArg(const std::string &strArg, const std::string &strValue)
Set an argument if it doesn't already have a value.
Definition: util.cpp:262
CPubKey
An encapsulated public key.
Definition: pubkey.h:37
TryCreateDirectory
bool TryCreateDirectory(const fs::path &p)
Ignores exceptions thrown by Boost's create_directory if the requested directory exists.
Definition: util.cpp:464
GetDefaultDataDir
fs::path GetDefaultDataDir()
Definition: util.cpp:317
fEnableSwiftTX
bool fEnableSwiftTX
Definition: util.cpp:102
CreatePidFile
void CreatePidFile(const fs::path &path, pid_t pid)
Definition: util.cpp:438
mapArgs
std::map< std::string, std::string > mapArgs
Definition: util.cpp:111
logging.h
fMasterNode
bool fMasterNode
Definition: util.cpp:97
TraceThread
void TraceThread(const char *name, Callable func)
Definition: util.h:169
SetupNetworking
bool SetupNetworking()
Definition: util.cpp:636
fSucessfullyLoaded
bool fSucessfullyLoaded
Definition: util.cpp:106
keysLoaded
int keysLoaded
HelpMessageGroup
std::string HelpMessageGroup(const std::string &message)
Format a string to be used as group of options in help messages.
Definition: util.cpp:282
threadnames.h
ParseParameters
void ParseParameters(int argc, const char *const argv[])
Definition: util.cpp:208
GetDataDir
const fs::path & GetDataDir(bool fNetSpecific=true)
Definition: util.cpp:349
GetPidFile
fs::path GetPidFile()
Definition: util.cpp:432
error
bool error(const char *fmt, const Args &... args)
Definition: util.h:61
mapMultiArgs
std::map< std::string, std::vector< std::string > > mapMultiArgs
Definition: util.cpp:112
fLiteMode
bool fLiteMode
Definition: util.cpp:100