1
1
// Copyright (c) 2009-2010 Satoshi Nakamoto
2
2
// Distributed under the MIT/X11 software license, see the accompanying
3
3
// file license.txt or http://www.opensource.org/licenses/mit-license.php.
10
#include <sys/types.h>
12
#include <sys/resource.h>
18
#include <boost/thread.hpp>
19
#include <boost/interprocess/sync/interprocess_recursive_mutex.hpp>
20
#include <boost/date_time/gregorian/gregorian_types.hpp>
21
#include <boost/date_time/posix_time/posix_time_types.hpp>
23
#include <openssl/sha.h>
24
#include <openssl/ripemd.h>
6
27
#if defined(_MSC_VER) || defined(__BORLANDC__)
154
176
void RandAddSeedPerfmon();
155
177
int OutputDebugStringF(const char* pszFormat, ...);
156
178
int my_snprintf(char* buffer, size_t limit, const char* format, ...);
157
string strprintf(const char* format, ...);
179
std::string strprintf(const char* format, ...);
158
180
bool error(const char* format, ...);
159
181
void LogException(std::exception* pex, const char* pszThread);
160
182
void PrintException(std::exception* pex, const char* pszThread);
161
183
void PrintExceptionContinue(std::exception* pex, const char* pszThread);
162
void ParseString(const string& str, char c, vector<string>& v);
163
string FormatMoney(int64 n, bool fPlus=false);
164
bool ParseMoney(const string& str, int64& nRet);
184
void ParseString(const std::string& str, char c, std::vector<std::string>& v);
185
std::string FormatMoney(int64 n, bool fPlus=false);
186
bool ParseMoney(const std::string& str, int64& nRet);
165
187
bool ParseMoney(const char* pszIn, int64& nRet);
166
vector<unsigned char> ParseHex(const char* psz);
167
vector<unsigned char> ParseHex(const string& str);
188
std::vector<unsigned char> ParseHex(const char* psz);
189
std::vector<unsigned char> ParseHex(const std::string& str);
168
190
void ParseParameters(int argc, char* argv[]);
169
191
const char* wxGetTranslation(const char* psz);
170
192
bool WildcardMatch(const char* psz, const char* mask);
171
bool WildcardMatch(const string& str, const string& mask);
193
bool WildcardMatch(const std::string& str, const std::string& mask);
172
194
int GetFilesize(FILE* file);
173
195
void GetDataDir(char* pszDirRet);
174
string GetConfigFile();
176
void CreatePidFile(string pidFile, pid_t pid);
177
void ReadConfigFile(map<string, string>& mapSettingsRet, map<string, vector<string> >& mapMultiSettingsRet);
196
std::string GetConfigFile();
197
std::string GetPidFile();
198
void CreatePidFile(std::string pidFile, pid_t pid);
199
void ReadConfigFile(std::map<std::string, std::string>& mapSettingsRet, std::map<std::string, std::vector<std::string> >& mapMultiSettingsRet);
179
string MyGetSpecialFolderPath(int nFolder, bool fCreate);
201
std::string MyGetSpecialFolderPath(int nFolder, bool fCreate);
181
string GetDefaultDataDir();
203
std::string GetDefaultDataDir();
204
std::string GetDataDir();
183
205
void ShrinkDebugFile();
184
206
int GetRandInt(int nMax);
185
207
uint64 GetRand(uint64 nMax);
187
209
int64 GetAdjustedTime();
188
210
void AddTimeData(unsigned int ip, int64 nTime);
189
string FormatFullVersion();
211
std::string FormatFullVersion();
319
341
template<typename T>
320
string HexStr(const T itbegin, const T itend, bool fSpaces=false)
342
std::string HexStr(const T itbegin, const T itend, bool fSpaces=false)
322
344
if (itbegin == itend)
324
346
const unsigned char* pbegin = (const unsigned char*)&itbegin[0];
325
347
const unsigned char* pend = pbegin + (itend - itbegin) * sizeof(itbegin[0]);
327
349
str.reserve((pend-pbegin) * (fSpaces ? 3 : 2));
328
350
for (const unsigned char* p = pbegin; p != pend; p++)
329
351
str += strprintf((fSpaces && p != pend-1 ? "%02x " : "%02x"), *p);
333
inline string HexStr(const vector<unsigned char>& vch, bool fSpaces=false)
355
inline std::string HexStr(const std::vector<unsigned char>& vch, bool fSpaces=false)
335
357
return HexStr(vch.begin(), vch.end(), fSpaces);
338
360
template<typename T>
339
string HexNumStr(const T itbegin, const T itend, bool f0x=true)
361
std::string HexNumStr(const T itbegin, const T itend, bool f0x=true)
341
363
if (itbegin == itend)
343
365
const unsigned char* pbegin = (const unsigned char*)&itbegin[0];
344
366
const unsigned char* pend = pbegin + (itend - itbegin) * sizeof(itbegin[0]);
345
string str = (f0x ? "0x" : "");
367
std::string str = (f0x ? "0x" : "");
346
368
str.reserve(str.size() + (pend-pbegin) * 2);
347
369
for (const unsigned char* p = pend-1; p >= pbegin; p--)
348
370
str += strprintf("%02x", *p);
352
inline string HexNumStr(const vector<unsigned char>& vch, bool f0x=true)
374
inline std::string HexNumStr(const std::vector<unsigned char>& vch, bool f0x=true)
354
376
return HexNumStr(vch.begin(), vch.end(), f0x);
381
403
inline int64 GetTimeMillis()
383
return (posix_time::ptime(posix_time::microsec_clock::universal_time()) -
384
posix_time::ptime(gregorian::date(1970,1,1))).total_milliseconds();
405
return (boost::posix_time::ptime(boost::posix_time::microsec_clock::universal_time()) -
406
boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_milliseconds();
387
inline string DateTimeStrFormat(const char* pszFormat, int64 nTime)
409
inline std::string DateTimeStrFormat(const char* pszFormat, int64 nTime)
389
411
time_t n = nTime;
390
412
struct tm* ptmTime = gmtime(&n);
412
inline string GetArg(const string& strArg, const string& strDefault)
434
inline std::string GetArg(const std::string& strArg, const std::string& strDefault)
414
436
if (mapArgs.count(strArg))
415
437
return mapArgs[strArg];
416
438
return strDefault;
419
inline int64 GetArg(const string& strArg, int64 nDefault)
441
inline int64 GetArg(const std::string& strArg, int64 nDefault)
421
443
if (mapArgs.count(strArg))
422
444
return atoi64(mapArgs[strArg]);
426
inline bool GetBoolArg(const string& strArg)
448
inline bool GetBoolArg(const std::string& strArg)
428
450
if (mapArgs.count(strArg))