diff options
author | Pieter Wuille <pieter.wuille@gmail.com> | 2012-04-15 22:10:54 +0200 |
---|---|---|
committer | Pieter Wuille <pieter.wuille@gmail.com> | 2012-04-17 20:00:55 +0200 |
commit | ed6d0b5f852dc5f1c9407abecb5a9c6a7e42b4b2 (patch) | |
tree | 763b840f2619af642469d3894b88b682134f4425 | |
parent | b97d54355e8239273b50c54dbedfde16ed82fd73 (diff) |
Remove headers.h
39 files changed, 288 insertions, 328 deletions
diff --git a/bitcoin-qt.pro b/bitcoin-qt.pro index 14ee947c2f..f79216e8dc 100644 --- a/bitcoin-qt.pro +++ b/bitcoin-qt.pro @@ -119,7 +119,6 @@ HEADERS += src/qt/bitcoingui.h \ src/db.h \ src/script.h \ src/init.h \ - src/headers.h \ src/irc.h \ src/mruset.h \ src/json/json_spirit_writer_template.h \ diff --git a/src/addrman.h b/src/addrman.h index 7652df66ae..160f8f8ff3 100644 --- a/src/addrman.h +++ b/src/addrman.h @@ -6,7 +6,6 @@ #include "netbase.h" #include "protocol.h" -#include "util.h" #include <map> diff --git a/src/allocators.h b/src/allocators.h index 85d9cfbbb8..cdea66dd38 100644 --- a/src/allocators.h +++ b/src/allocators.h @@ -8,6 +8,9 @@ #include <string> #ifdef WIN32 +#ifdef _WIN32_WINNT +#undef _WIN32_WINNT +#endif #define _WIN32_WINNT 0x0501 #define WIN32_LEAN_AND_MEAN 1 #ifndef NOMINMAX diff --git a/src/base58.h b/src/base58.h index 90ce34b05b..24b7f3ab1b 100644 --- a/src/base58.h +++ b/src/base58.h @@ -19,6 +19,7 @@ #include <vector> #include "bignum.h" #include "key.h" +#include "util.h" static const char* pszBase58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; diff --git a/src/bignum.h b/src/bignum.h index daf5f6883a..cea8e1e357 100644 --- a/src/bignum.h +++ b/src/bignum.h @@ -9,7 +9,7 @@ #include <vector> #include <openssl/bn.h> -#include "util.h" +#include "util.h" // for uint64 /** Errors thrown by the bignum class */ class bignum_error : public std::runtime_error diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp index 9fafee320b..9294f9357a 100644 --- a/src/bitcoinrpc.cpp +++ b/src/bitcoinrpc.cpp @@ -3,10 +3,13 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" +#include "main.h" +#include "wallet.h" #include "db.h" #include "net.h" #include "init.h" +#include "ui_interface.h" + #undef printf #include <boost/asio.hpp> #include <boost/filesystem.hpp> diff --git a/src/checkpoints.cpp b/src/checkpoints.cpp index f5ce053870..cf56fa0695 100644 --- a/src/checkpoints.cpp +++ b/src/checkpoints.cpp @@ -5,9 +5,11 @@ #include <boost/assign/list_of.hpp> // for 'map_list_of()' #include <boost/foreach.hpp> -#include "headers.h" #include "checkpoints.h" +#include "main.h" +#include "uint256.h" + namespace Checkpoints { typedef std::map<int, uint256> MapCheckpoints; diff --git a/src/checkpoints.h b/src/checkpoints.h index 38902ac0a1..5d3228f3fc 100644 --- a/src/checkpoints.h +++ b/src/checkpoints.h @@ -5,7 +5,6 @@ #define BITCOIN_CHECKPOINT_H #include <map> -#include "util.h" class uint256; class CBlockIndex; diff --git a/src/compat.h b/src/compat.h index 882610031a..db340445b2 100644 --- a/src/compat.h +++ b/src/compat.h @@ -5,6 +5,28 @@ #ifndef _BITCOIN_COMPAT_H #define _BITCOIN_COMPAT_H 1 +#ifdef WIN32 +#define _WIN32_WINNT 0x0501 +#define WIN32_LEAN_AND_MEAN 1 +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include <winsock2.h> +#include <mswsock.h> +#include <ws2tcpip.h> +#else +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/fcntl.h> +#include <arpa/inet.h> +#include <netdb.h> +#include <net/if.h> +#include <ifaddrs.h> +#endif +#ifdef BSD +#include <netinet/in.h> +#endif + typedef u_int SOCKET; #ifdef WIN32 #define MSG_NOSIGNAL 0 @@ -39,4 +61,5 @@ inline int myclosesocket(SOCKET& hSocket) } #define closesocket(s) myclosesocket(s) + #endif diff --git a/src/crypter.cpp b/src/crypter.cpp index 2501305edc..5713faf120 100644 --- a/src/crypter.cpp +++ b/src/crypter.cpp @@ -6,13 +6,11 @@ #include <openssl/evp.h> #include <vector> #include <string> -#include "headers.h" #ifdef WIN32 #include <windows.h> #endif #include "crypter.h" -#include "main.h" #include "util.h" bool CCrypter::SetKeyFromPassphrase(const SecureString& strKeyData, const std::vector<unsigned char>& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod) diff --git a/src/db.cpp b/src/db.cpp index 2d136914c5..60dba3b353 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -3,13 +3,18 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" #include "db.h" -#include "net.h" +#include "util.h" +#include "main.h" +#include "wallet.h" #include <boost/version.hpp> #include <boost/filesystem.hpp> #include <boost/filesystem/fstream.hpp> +#ifndef WIN32 +#include "sys/stat.h" +#endif + using namespace std; using namespace boost; @@ -6,6 +6,8 @@ #define BITCOIN_DB_H #include "key.h" +#include "main.h" +#include "wallet.h" #include <map> #include <string> @@ -313,34 +315,6 @@ public: bool LoadAddresses(); -/** A key pool entry */ -class CKeyPool -{ -public: - int64 nTime; - std::vector<unsigned char> vchPubKey; - - CKeyPool() - { - nTime = GetTime(); - } - - CKeyPool(const std::vector<unsigned char>& vchPubKeyIn) - { - nTime = GetTime(); - vchPubKey = vchPubKeyIn; - } - - IMPLEMENT_SERIALIZE - ( - if (!(nType & SER_GETHASH)) - READWRITE(nVersion); - READWRITE(nTime); - READWRITE(vchPubKey); - ) -}; - - /** Error statuses for the wallet database */ enum DBErrors diff --git a/src/headers.h b/src/headers.h deleted file mode 100644 index ceee028977..0000000000 --- a/src/headers.h +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. - -#ifdef _MSC_VER -#pragma warning(disable:4786) -#pragma warning(disable:4804) -#pragma warning(disable:4805) -#pragma warning(disable:4717) -#endif -#ifdef _WIN32_WINNT -#undef _WIN32_WINNT -#endif -#define _WIN32_WINNT 0x0501 -#ifdef _WIN32_IE -#undef _WIN32_IE -#endif -#define _WIN32_IE 0x0400 -#define WIN32_LEAN_AND_MEAN 1 -#ifndef NOMINMAX -#define NOMINMAX -#endif -// Include boost/foreach here as it defines __STDC_LIMIT_MACROS on some systems. -#include <boost/foreach.hpp> - -#if (defined(__unix__) || defined(unix)) && !defined(USG) -#include <sys/param.h> // to get BSD define -#endif -#ifdef MAC_OSX -#ifndef BSD -#define BSD 1 -#endif -#endif -#include <openssl/buffer.h> -#include <openssl/ecdsa.h> -#include <openssl/evp.h> -#include <openssl/rand.h> -#include <openssl/sha.h> -#include <openssl/ripemd.h> -#include <db_cxx.h> -#include <stdio.h> -#include <stdlib.h> -#include <time.h> -#include <math.h> -#include <float.h> -#include <assert.h> -#include <iostream> -#include <sstream> -#include <string> -#include <vector> -#include <list> -#include <deque> -#include <map> - -#ifdef WIN32 -#include <windows.h> -#include <winsock2.h> -#include <mswsock.h> -#include <shlobj.h> -#include <shlwapi.h> -#include <io.h> -#include <process.h> -#include <malloc.h> -#else -#include <sys/time.h> -#include <sys/resource.h> -#include <sys/socket.h> -#include <sys/stat.h> -#include <arpa/inet.h> -#include <netdb.h> -#include <unistd.h> -#include <errno.h> -#include <net/if.h> -#include <ifaddrs.h> -#include <fcntl.h> -#include <signal.h> -#endif -#ifdef BSD -#include <netinet/in.h> -#endif - - -#include "serialize.h" -#include "uint256.h" -#include "util.h" -#include "bignum.h" -#include "base58.h" -#include "main.h" -#include "wallet.h" -#include "ui_interface.h" diff --git a/src/init.cpp b/src/init.cpp index 2be0027a5b..2f03f24eb0 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -2,19 +2,20 @@ // Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" #include "db.h" #include "bitcoinrpc.h" #include "net.h" #include "init.h" #include "strlcpy.h" +#include "util.h" +#include "ui_interface.h" #include <boost/filesystem.hpp> #include <boost/filesystem/fstream.hpp> #include <boost/filesystem/convenience.hpp> #include <boost/interprocess/sync/file_lock.hpp> -#ifdef WIN32 -#define strncasecmp strnicmp +#ifndef WIN32 +#include <signal.h> #endif using namespace std; @@ -583,145 +584,3 @@ bool AppInit2(int argc, char* argv[]) return true; } -#ifdef WIN32 -boost::filesystem::path StartupShortcutPath() -{ - return MyGetSpecialFolderPath(CSIDL_STARTUP, true) / "Bitcoin.lnk"; -} - -bool GetStartOnSystemStartup() -{ - return filesystem::exists(StartupShortcutPath()); -} - -bool SetStartOnSystemStartup(bool fAutoStart) -{ - // If the shortcut exists already, remove it for updating - boost::filesystem::remove(StartupShortcutPath()); - - if (fAutoStart) - { - CoInitialize(NULL); - - // Get a pointer to the IShellLink interface. - IShellLink* psl = NULL; - HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, - CLSCTX_INPROC_SERVER, IID_IShellLink, - reinterpret_cast<void**>(&psl)); - - if (SUCCEEDED(hres)) - { - // Get the current executable path - TCHAR pszExePath[MAX_PATH]; - GetModuleFileName(NULL, pszExePath, sizeof(pszExePath)); - - TCHAR pszArgs[5] = TEXT("-min"); - - // Set the path to the shortcut target - psl->SetPath(pszExePath); - PathRemoveFileSpec(pszExePath); - psl->SetWorkingDirectory(pszExePath); - psl->SetShowCmd(SW_SHOWMINNOACTIVE); - psl->SetArguments(pszArgs); - - // Query IShellLink for the IPersistFile interface for - // saving the shortcut in persistent storage. - IPersistFile* ppf = NULL; - hres = psl->QueryInterface(IID_IPersistFile, - reinterpret_cast<void**>(&ppf)); - if (SUCCEEDED(hres)) - { - WCHAR pwsz[MAX_PATH]; - // Ensure that the string is ANSI. - MultiByteToWideChar(CP_ACP, 0, StartupShortcutPath().string().c_str(), -1, pwsz, MAX_PATH); - // Save the link by calling IPersistFile::Save. - hres = ppf->Save(pwsz, TRUE); - ppf->Release(); - psl->Release(); - CoUninitialize(); - return true; - } - psl->Release(); - } - CoUninitialize(); - return false; - } - return true; -} - -#elif defined(LINUX) - -// Follow the Desktop Application Autostart Spec: -// http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html - -boost::filesystem::path GetAutostartDir() -{ - namespace fs = boost::filesystem; - - char* pszConfigHome = getenv("XDG_CONFIG_HOME"); - if (pszConfigHome) return fs::path(pszConfigHome) / "autostart"; - char* pszHome = getenv("HOME"); - if (pszHome) return fs::path(pszHome) / ".config" / "autostart"; - return fs::path(); -} - -boost::filesystem::path GetAutostartFilePath() -{ - return GetAutostartDir() / "bitcoin.desktop"; -} - -bool GetStartOnSystemStartup() -{ - boost::filesystem::ifstream optionFile(GetAutostartFilePath()); - if (!optionFile.good()) - return false; - // Scan through file for "Hidden=true": - string line; - while (!optionFile.eof()) - { - getline(optionFile, line); - if (line.find("Hidden") != string::npos && - line.find("true") != string::npos) - return false; - } - optionFile.close(); - - return true; -} - -bool SetStartOnSystemStartup(bool fAutoStart) -{ - if (!fAutoStart) - boost::filesystem::remove(GetAutostartFilePath()); - else - { - char pszExePath[MAX_PATH+1]; - memset(pszExePath, 0, sizeof(pszExePath)); - if (readlink("/proc/self/exe", pszExePath, sizeof(pszExePath)-1) == -1) - return false; - - boost::filesystem::create_directories(GetAutostartDir()); - - boost::filesystem::ofstream optionFile(GetAutostartFilePath(), ios_base::out|ios_base::trunc); - if (!optionFile.good()) - return false; - // Write a bitcoin.desktop file to the autostart directory: - optionFile << "[Desktop Entry]\n"; - optionFile << "Type=Application\n"; - optionFile << "Name=Bitcoin\n"; - optionFile << "Exec=" << pszExePath << " -min\n"; - optionFile << "Terminal=false\n"; - optionFile << "Hidden=false\n"; - optionFile.close(); - } - return true; -} -#else - -// TODO: OSX startup stuff; see: -// http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html - -bool GetStartOnSystemStartup() { return false; } -bool SetStartOnSystemStartup(bool fAutoStart) { return false; } - -#endif diff --git a/src/init.h b/src/init.h index 0d60e7549f..e3971c85e3 100644 --- a/src/init.h +++ b/src/init.h @@ -5,6 +5,8 @@ #ifndef BITCOIN_INIT_H #define BITCOIN_INIT_H +#include "wallet.h" + extern CWallet* pwalletMain; void Shutdown(void* parg); diff --git a/src/irc.cpp b/src/irc.cpp index d535f59c4c..237497055d 100644 --- a/src/irc.cpp +++ b/src/irc.cpp @@ -3,10 +3,10 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" #include "irc.h" #include "net.h" #include "strlcpy.h" +#include "base58.h" using namespace std; using namespace boost; diff --git a/src/keystore.cpp b/src/keystore.cpp index 7b46f6b07a..664f0b1242 100644 --- a/src/keystore.cpp +++ b/src/keystore.cpp @@ -3,9 +3,8 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" +#include "keystore.h" #include "crypter.h" -#include "db.h" #include "script.h" bool CKeyStore::GetPubKey(const CBitcoinAddress &address, std::vector<unsigned char> &vchPubKeyOut) const diff --git a/src/main.cpp b/src/main.cpp index 60b398c191..c2236d999f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,11 +2,11 @@ // Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" #include "checkpoints.h" #include "db.h" #include "net.h" #include "init.h" +#include "ui_interface.h" #include <boost/algorithm/string/replace.hpp> #include <boost/filesystem.hpp> #include <boost/filesystem/fstream.hpp> diff --git a/src/main.h b/src/main.h index c48252fbc4..a67449007f 100644 --- a/src/main.h +++ b/src/main.h @@ -9,7 +9,6 @@ #include "net.h" #include "key.h" #include "script.h" -#include "db.h" #include "version.h" #ifdef WIN32 @@ -35,8 +34,6 @@ static const unsigned int MAX_BLOCK_SIZE = 1000000; static const unsigned int MAX_BLOCK_SIZE_GEN = MAX_BLOCK_SIZE/2; static const int MAX_BLOCK_SIGOPS = MAX_BLOCK_SIZE/50; static const int MAX_ORPHAN_TRANSACTIONS = MAX_BLOCK_SIZE/100; -static const int64 COIN = 100000000; -static const int64 CENT = 1000000; static const int64 MIN_TX_FEE = 50000; static const int64 MIN_RELAY_TX_FEE = 10000; static const int64 MAX_MONEY = 21000000 * COIN; diff --git a/src/net.cpp b/src/net.cpp index 7d621ac594..38c0d3d582 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -3,13 +3,13 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" #include "irc.h" #include "db.h" #include "net.h" #include "init.h" #include "strlcpy.h" #include "addrman.h" +#include "ui_interface.h" #ifdef WIN32 #include <string.h> diff --git a/src/netbase.h b/src/netbase.h index 6a257cf9fa..00b6850b2a 100644 --- a/src/netbase.h +++ b/src/netbase.h @@ -7,27 +7,6 @@ #include <string> #include <vector> -#ifdef WIN32 -#define _WIN32_WINNT 0x0501 -#define WIN32_LEAN_AND_MEAN 1 -#ifndef NOMINMAX -#define NOMINMAX -#endif -#include <winsock2.h> -#include <mswsock.h> -#include <ws2tcpip.h> -#else -#include <sys/types.h> -#include <sys/socket.h> -#include <arpa/inet.h> -#include <netdb.h> -#include <net/if.h> -#include <ifaddrs.h> -#endif -#ifdef BSD -#include <netinet/in.h> -#endif - #include "serialize.h" #include "compat.h" diff --git a/src/noui.cpp b/src/noui.cpp index 077e460a70..08a08b439a 100644 --- a/src/noui.cpp +++ b/src/noui.cpp @@ -5,7 +5,6 @@ #include "ui_interface.h" #include <string> -#include "headers.h" #include "init.h" int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style) diff --git a/src/qt/addresstablemodel.cpp b/src/qt/addresstablemodel.cpp index 0239a167d7..7b95f51c04 100644 --- a/src/qt/addresstablemodel.cpp +++ b/src/qt/addresstablemodel.cpp @@ -2,7 +2,7 @@ #include "guiutil.h" #include "walletmodel.h" -#include "headers.h" +#include "wallet.h" #include <QFont> #include <QColor> diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index 463b2cfa79..dfcd2af3fc 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -7,7 +7,6 @@ #include "optionsmodel.h" #include "guiutil.h" -#include "headers.h" #include "init.h" #include "qtipcserver.h" diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index 284bee0e8e..cb602ce327 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -4,7 +4,7 @@ #include "addresstablemodel.h" #include "transactiontablemodel.h" -#include "headers.h" +#include "main.h" #include <QDateTime> diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index cb2473240e..f1e8a5f1bc 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -3,8 +3,6 @@ #include "walletmodel.h" #include "bitcoinunits.h" -#include "headers.h" - #include <QString> #include <QDateTime> #include <QDoubleValidator> diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index ed2225cbf5..736be7f708 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -2,8 +2,8 @@ #include "bitcoinunits.h" #include <QSettings> -#include "headers.h" #include "init.h" +#include "db.h" OptionsModel::OptionsModel(QObject *parent) : QAbstractListModel(parent) diff --git a/src/qt/qtipcserver.cpp b/src/qt/qtipcserver.cpp index 3c7889ca71..f7bccaaf02 100644 --- a/src/qt/qtipcserver.cpp +++ b/src/qt/qtipcserver.cpp @@ -7,7 +7,7 @@ #include <boost/tokenizer.hpp> #include <boost/date_time/posix_time/posix_time.hpp> -#include "headers.h" +#include "util.h" #include "qtipcserver.h" using namespace boost::interprocess; diff --git a/src/qt/transactiondesc.cpp b/src/qt/transactiondesc.cpp index dd7dd61390..286cddf2a9 100644 --- a/src/qt/transactiondesc.cpp +++ b/src/qt/transactiondesc.cpp @@ -3,7 +3,9 @@ #include "guiutil.h" #include "bitcoinunits.h" -#include "headers.h" +#include "main.h" +#include "wallet.h" +#include "db.h" #include "ui_interface.h" #include <QString> diff --git a/src/qt/transactionrecord.cpp b/src/qt/transactionrecord.cpp index 2f3b29cc97..32350eaa5a 100644 --- a/src/qt/transactionrecord.cpp +++ b/src/qt/transactionrecord.cpp @@ -1,6 +1,6 @@ #include "transactionrecord.h" -#include "headers.h" +#include "wallet.h" /* Return positive answer if transaction should be shown in list. */ diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp index 41c9db1123..5f505f444e 100644 --- a/src/qt/transactiontablemodel.cpp +++ b/src/qt/transactiontablemodel.cpp @@ -8,7 +8,7 @@ #include "addresstablemodel.h" #include "bitcoinunits.h" -#include "headers.h" +#include "wallet.h" #include <QLocale> #include <QList> diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp index 9c28a8abc8..8206394d2a 100644 --- a/src/qt/walletmodel.cpp +++ b/src/qt/walletmodel.cpp @@ -4,7 +4,7 @@ #include "addresstablemodel.h" #include "transactiontablemodel.h" -#include "headers.h" +#include "wallet.h" #include "db.h" // for BackupWallet #include <QSet> diff --git a/src/rpcdump.cpp b/src/rpcdump.cpp index 5bb4789cd3..1bc87e9217 100644 --- a/src/rpcdump.cpp +++ b/src/rpcdump.cpp @@ -2,9 +2,9 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" #include "init.h" // for pwalletMain #include "bitcoinrpc.h" +#include "ui_interface.h" #include <boost/lexical_cast.hpp> diff --git a/src/script.cpp b/src/script.cpp index 21f101e1c5..ac1f0405a8 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -2,11 +2,17 @@ // Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" +#include <boost/foreach.hpp> using namespace std; using namespace boost; +#include "script.h" +#include "keystore.h" +#include "bignum.h" +#include "key.h" +#include "main.h" + bool CheckSig(vector<unsigned char> vchSig, vector<unsigned char> vchPubKey, CScript scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType); diff --git a/src/strlcpy.h b/src/strlcpy.h index d4d1908e7a..2cc786e953 100644 --- a/src/strlcpy.h +++ b/src/strlcpy.h @@ -15,6 +15,10 @@ */ #ifndef BITCOIN_STRLCPY_H #define BITCOIN_STRLCPY_H + +#include <stdlib.h> +#include <string.h> + /* * Copy src to string dst of size siz. At most siz-1 characters * will be copied. Always NUL terminates (unless siz == 0). diff --git a/src/util.cpp b/src/util.cpp index c1e3c5a806..19005fc761 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -3,8 +3,9 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" +#include "util.h" #include "strlcpy.h" +#include "version.h" #include <boost/algorithm/string/join.hpp> // Work around clang compilation problem in Boost 1.46: @@ -24,6 +25,31 @@ namespace boost { #include <boost/interprocess/sync/interprocess_mutex.hpp> #include <boost/interprocess/sync/interprocess_recursive_mutex.hpp> #include <boost/foreach.hpp> +#include <openssl/crypto.h> +#include <openssl/rand.h> + +#ifdef WIN32 +#ifdef _MSC_VER +#pragma warning(disable:4786) +#pragma warning(disable:4804) +#pragma warning(disable:4805) +#pragma warning(disable:4717) +#endif +#ifdef _WIN32_WINNT +#undef _WIN32_WINNT +#endif +#define _WIN32_WINNT 0x0501 +#ifdef _WIN32_IE +#undef _WIN32_IE +#endif +#define _WIN32_IE 0x0400 +#define WIN32_LEAN_AND_MEAN 1 +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include "shlobj.h" +#include "shlwapi.h" +#endif using namespace std; using namespace boost; @@ -1064,6 +1090,149 @@ std::string FormatSubVersion(const std::string& name, int nClientVersion, const return ss.str(); } +#ifdef WIN32 +boost::filesystem::path static StartupShortcutPath() +{ + return MyGetSpecialFolderPath(CSIDL_STARTUP, true) / "Bitcoin.lnk"; +} + +bool GetStartOnSystemStartup() +{ + return filesystem::exists(StartupShortcutPath()); +} + +bool SetStartOnSystemStartup(bool fAutoStart) +{ + // If the shortcut exists already, remove it for updating + boost::filesystem::remove(StartupShortcutPath()); + + if (fAutoStart) + { + CoInitialize(NULL); + + // Get a pointer to the IShellLink interface. + IShellLink* psl = NULL; + HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, + CLSCTX_INPROC_SERVER, IID_IShellLink, + reinterpret_cast<void**>(&psl)); + + if (SUCCEEDED(hres)) + { + // Get the current executable path + TCHAR pszExePath[MAX_PATH]; + GetModuleFileName(NULL, pszExePath, sizeof(pszExePath)); + + TCHAR pszArgs[5] = TEXT("-min"); + + // Set the path to the shortcut target + psl->SetPath(pszExePath); + PathRemoveFileSpec(pszExePath); + psl->SetWorkingDirectory(pszExePath); + psl->SetShowCmd(SW_SHOWMINNOACTIVE); + psl->SetArguments(pszArgs); + + // Query IShellLink for the IPersistFile interface for + // saving the shortcut in persistent storage. + IPersistFile* ppf = NULL; + hres = psl->QueryInterface(IID_IPersistFile, + reinterpret_cast<void**>(&ppf)); + if (SUCCEEDED(hres)) + { + WCHAR pwsz[MAX_PATH]; + // Ensure that the string is ANSI. + MultiByteToWideChar(CP_ACP, 0, StartupShortcutPath().string().c_str(), -1, pwsz, MAX_PATH); + // Save the link by calling IPersistFile::Save. + hres = ppf->Save(pwsz, TRUE); + ppf->Release(); + psl->Release(); + CoUninitialize(); + return true; + } + psl->Release(); + } + CoUninitialize(); + return false; + } + return true; +} + +#elif defined(LINUX) + +// Follow the Desktop Application Autostart Spec: +// http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html + +boost::filesystem::path static GetAutostartDir() +{ + namespace fs = boost::filesystem; + + char* pszConfigHome = getenv("XDG_CONFIG_HOME"); + if (pszConfigHome) return fs::path(pszConfigHome) / "autostart"; + char* pszHome = getenv("HOME"); + if (pszHome) return fs::path(pszHome) / ".config" / "autostart"; + return fs::path(); +} + +boost::filesystem::path static GetAutostartFilePath() +{ + return GetAutostartDir() / "bitcoin.desktop"; +} + +bool GetStartOnSystemStartup() +{ + boost::filesystem::ifstream optionFile(GetAutostartFilePath()); + if (!optionFile.good()) + return false; + // Scan through file for "Hidden=true": + string line; + while (!optionFile.eof()) + { + getline(optionFile, line); + if (line.find("Hidden") != string::npos && + line.find("true") != string::npos) + return false; + } + optionFile.close(); + + return true; +} + +bool SetStartOnSystemStartup(bool fAutoStart) +{ + if (!fAutoStart) + boost::filesystem::remove(GetAutostartFilePath()); + else + { + char pszExePath[MAX_PATH+1]; + memset(pszExePath, 0, sizeof(pszExePath)); + if (readlink("/proc/self/exe", pszExePath, sizeof(pszExePath)-1) == -1) + return false; + + boost::filesystem::create_directories(GetAutostartDir()); + + boost::filesystem::ofstream optionFile(GetAutostartFilePath(), ios_base::out|ios_base::trunc); + if (!optionFile.good()) + return false; + // Write a bitcoin.desktop file to the autostart directory: + optionFile << "[Desktop Entry]\n"; + optionFile << "Type=Application\n"; + optionFile << "Name=Bitcoin\n"; + optionFile << "Exec=" << pszExePath << " -min\n"; + optionFile << "Terminal=false\n"; + optionFile << "Hidden=false\n"; + optionFile.close(); + } + return true; +} +#else + +// TODO: OSX startup stuff; see: +// http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html + +bool GetStartOnSystemStartup() { return false; } +bool SetStartOnSystemStartup(bool fAutoStart) { return false; } + +#endif + #ifdef DEBUG_LOCKORDER diff --git a/src/util.h b/src/util.h index f6cb3caa1d..a4424771ce 100644 --- a/src/util.h +++ b/src/util.h @@ -31,11 +31,15 @@ typedef int pid_t; /* define for windows compatiblity */ #include <openssl/sha.h> #include <openssl/ripemd.h> -#include "netbase.h" +#include "netbase.h" // for AddTimeData +#include "ui_interface.h" typedef long long int64; typedef unsigned long long uint64; +static const int64 COIN = 100000000; +static const int64 CENT = 1000000; + #define loop for (;;) #define BEGIN(a) ((char*)&(a)) #define END(a) ((char*)&((&(a))[1])) @@ -160,9 +164,8 @@ boost::filesystem::path GetConfigFile(); boost::filesystem::path GetPidFile(); void CreatePidFile(const boost::filesystem::path &path, pid_t pid); bool ReadConfigFile(std::map<std::string, std::string>& mapSettingsRet, std::map<std::string, std::vector<std::string> >& mapMultiSettingsRet); -#ifdef WIN32 -boost::filesystem::path MyGetSpecialFolderPath(int nFolder, bool fCreate); -#endif +bool GetStartOnSystemStartup(); +bool SetStartOnSystemStartup(bool fAutoStart); void ShrinkDebugFile(); int GetRandInt(int nMax); uint64 GetRand(uint64 nMax); diff --git a/src/wallet.cpp b/src/wallet.cpp index 9f531082a9..6a2bf022bb 100644 --- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -3,7 +3,6 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" #include "db.h" #include "crypter.h" @@ -137,6 +136,11 @@ bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase, return false; } +void CWallet::SetBestChain(const CBlockLocator& loc) +{ + CWalletDB walletdb(strWalletFile); + walletdb.WriteBestBlock(loc); +} // This class implements an addrIncoming entry that causes pre-0.4 // clients to crash on startup if reading a private-key-encrypted wallet. diff --git a/src/wallet.h b/src/wallet.h index b1ee40ab90..3d9387ff82 100644 --- a/src/wallet.h +++ b/src/wallet.h @@ -5,6 +5,7 @@ #ifndef BITCOIN_WALLET_H #define BITCOIN_WALLET_H +#include "main.h" #include "bignum.h" #include "key.h" #include "keystore.h" @@ -25,6 +26,34 @@ enum WalletFeature FEATURE_LATEST = 60000 }; + +/** A key pool entry */ +class CKeyPool +{ +public: + int64 nTime; + std::vector<unsigned char> vchPubKey; + + CKeyPool() + { + nTime = GetTime(); + } + + CKeyPool(const std::vector<unsigned char>& vchPubKeyIn) + { + nTime = GetTime(); + vchPubKey = vchPubKeyIn; + } + + IMPLEMENT_SERIALIZE + ( + if (!(nType & SER_GETHASH)) + READWRITE(nVersion); + READWRITE(nTime); + READWRITE(vchPubKey); + ) +}; + /** A CWallet is an extension of a keystore, which also maintains a set of transactions and balances, * and provides the ability to create new transactions. */ @@ -196,11 +225,7 @@ public: } return nChange; } - void SetBestChain(const CBlockLocator& loc) - { - CWalletDB walletdb(strWalletFile); - walletdb.WriteBestBlock(loc); - } + void SetBestChain(const CBlockLocator& loc); int LoadWallet(bool& fFirstRunRet); // bool BackupWallet(const std::string& strDest); |