#define _WIN32_IE 0x0400\r
#define WIN32_LEAN_AND_MEAN 1\r
#define __STDC_LIMIT_MACROS // to enable UINT64_MAX from stdint.h\r
+#if (defined(__unix__) || defined(unix)) && !defined(USG)\r
+#include <sys/param.h> // to get BSD define\r
+#endif\r
+#ifdef __WXMAC_OSX__\r
+#ifndef BSD\r
+#define BSD 1\r
+#endif\r
+#endif\r
#ifdef GUI\r
#include <wx/wx.h>\r
#include <wx/stdpaths.h>\r
#include <wx/utils.h>\r
#include <wx/clipbrd.h>\r
#include <wx/taskbar.h>\r
-#else\r
-#ifdef __WXMAC_OSX__\r
-#define __WXMAC__ 1\r
-#define __WXOSX__ 1\r
-#define __BSD__ 1\r
-#endif\r
#endif\r
#include <openssl/buffer.h>\r
#include <openssl/ecdsa.h>\r
#include <ifaddrs.h>\r
#include <fcntl.h>\r
#endif\r
-#ifdef __BSD__\r
+#ifdef BSD\r
#include <netinet/in.h>\r
#endif\r
\r
ParseParameters(argc, argv);\r
\r
if (mapArgs.count("-datadir"))\r
- strlcpy(pszSetDataDir, mapArgs["-datadir"].c_str(), sizeof(pszSetDataDir));\r
+ {\r
+ filesystem::path pathDataDir = filesystem::system_complete(mapArgs["-datadir"]);\r
+ strlcpy(pszSetDataDir, pathDataDir.string().c_str(), sizeof(pszSetDataDir));\r
+ }\r
\r
ReadConfigFile(mapArgs, mapMultiArgs); // Must be done after processing datadir\r
\r
}\r
}\r
\r
+ if (mapArgs.count("-paytxfee"))\r
+ {\r
+ if (!ParseMoney(mapArgs["-paytxfee"], nTransactionFee))\r
+ {\r
+ wxMessageBox(_("Invalid amount for -paytxfee=<amount>"), "Bitcoin");\r
+ return false;\r
+ }\r
+ }\r
+\r
//\r
// Create the main window and start the node\r
//\r
if (mapArgs.count("-server") || fDaemon)\r
CreateThread(ThreadRPCServer, NULL);\r
\r
-#ifdef GUI\r
+#if defined(__WXMSW__) && defined(GUI)\r
if (fFirstRun)\r
SetStartOnSystemStartup(true);\r
#endif\r
msgstr "Von: "
#: ../../../ui.cpp:634
-msgid "From: unknown, Received with: "
-msgstr "Von: Unbekannt, Empfangen durch: "
+msgid "Received with: "
+msgstr "Empfangen durch: "
#: ../../../ui.cpp:676
msgid "Payment to yourself"
msgid "Will appear as \"From: Unknown\""
msgstr "Wird als \"Von: Unbekannt\" erscheinen"
+#: ../../../ui.cpp:1681
+msgid "n/a"
+msgstr "Unbekannt"
+
+#: ../../../ui.cpp:1681
+msgid "Unknown"
+msgstr "Unbekannt"
+
#: ../../../ui.cpp:1682
msgid "Can't include a message when sending to a Bitcoin address"
msgstr "Beim überweisen an eine Bitcoin-Adresse kann keine Nachricht angegeben werden."
msgstr "De: "
#: ../../../ui.cpp:634
-msgid "From: unknown, Received with: "
-msgstr "De: desconocido, Recibido con: "
+msgid "Received with: "
+msgstr "Recibido con: "
#: ../../../ui.cpp:676
msgid "Payment to yourself"
msgid "Will appear as \"From: Unknown\""
msgstr "Aparecera como \"De: Desconocido\""
+#: ../../../ui.cpp:1696
+msgid "n/a"
+msgstr "Desconocido"
+
+#: ../../../ui.cpp:1696
+msgid "Unknown"
+msgstr "Desconocido"
+
#: ../../../ui.cpp:1697
msgid "Can't include a message when sending to a Bitcoin address"
msgstr "No se ha podido incluir un mensaje mientras se enviaba la direccion Bitcoin"
msgstr "De: "
#: ../../../ui.cpp:634
-msgid "From: unknown, Received with: "
-msgstr "De: Inconnu, reçu depuis: "
+msgid "Received with: "
+msgstr "Reçu depuis: "
#: ../../../ui.cpp:676
msgid "Payment to yourself"
msgid "Will appear as \"From: Unknown\""
msgstr "Apparaîtra ainsi \"De: Inconnu\""
+#: ../../../ui.cpp:1681
+msgid "n/a"
+msgstr "Inconnu"
+
+#: ../../../ui.cpp:1681
+msgid "Unknown"
+msgstr "Inconnu"
+
#: ../../../ui.cpp:1697
msgid "Can't include a message when sending to a Bitcoin address"
msgstr "Impossible d'inclure un message lors d'un envoi à une adresse Bitcoin"
msgstr "Da: "
#: ../../../ui.cpp:634
-msgid "From: unknown, Received with: "
-msgstr "Da: sconosciuto, Ricevuto con: "
+msgid "Received with: "
+msgstr "Ricevuto con: "
#: ../../../ui.cpp:676
msgid "Payment to yourself"
msgid "Will appear as \"From: Unknown\""
msgstr "Apparirà come \"Da: Sconosciuto\""
+#: ../../../ui.cpp:1681
+msgid "n/a"
+msgstr "Sconosciuto"
+
+#: ../../../ui.cpp:1681
+msgid "Unknown"
+msgstr "Sconosciuto"
+
#: ../../../ui.cpp:1682
msgid "Can't include a message when sending to a Bitcoin address"
msgstr "Non si può includere un messaggio quando si invia attraverso l'indirizzo Bitcoin"
msgstr "Van: "
#: ../../../ui.cpp:634
-msgid "From: unknown, Received with: "
-msgstr "Van: onbekend, Ontvangen met: "
+msgid "Received with: "
+msgstr "Ontvangen met: "
#: ../../../ui.cpp:676
msgid "Payment to yourself"
msgid "Will appear as \"From: Unknown\""
msgstr "Word vertoont als \"Van: Onbekend\""
+#: ../../../ui.cpp:1681
+msgid "n/a"
+msgstr "Onbekend"
+
+#: ../../../ui.cpp:1681
+msgid "Unknown"
+msgstr "Onbekend"
+
#: ../../../ui.cpp:1682
msgid "Can't include a message when sending to a Bitcoin address"
msgstr "Kan geen mededeling versturen bij gebruik van Bitcoin adressen"
msgstr "Remetente: "\r
\r
#: ../../../ui.cpp:634\r
-msgid "From: unknown, Received with: "\r
-msgstr "Remetente: desconhecido, Recebido por: "\r
+msgid "Received with: "\r
+msgstr "Recebido por: "\r
\r
#: ../../../ui.cpp:676\r
msgid "Payment to yourself"\r
msgid "Will appear as \"From: Unknown\""\r
msgstr "Irá aparecer como \"De: Desconhecido\""\r
\r
+#: ../../../ui.cpp:1681\r
+msgid "n/a"\r
+msgstr "Desconhecido"\r
+\r
+#: ../../../ui.cpp:1681\r
+msgid "Unknown"\r
+msgstr "Desconhecido"\r
+\r
#: ../../../ui.cpp:1682\r
msgid "Can't include a message when sending to a Bitcoin address"\r
msgstr "Não é possível incluir uma mensagem ao enviar para um endereço Bitcoin"\r
// This includes all nodes that are currently online,\r
// since they rebroadcast an addr every 24 hours\r
pfrom->vAddrToSend.clear();\r
- int64 nSince = GetAdjustedTime() - 24 * 60 * 60; // in the last 24 hours\r
+ int64 nSince = GetAdjustedTime() - 12 * 60 * 60; // in the last 12 hours\r
CRITICAL_BLOCK(cs_mapAddresses)\r
{\r
unsigned int nSize = mapAddresses.size();\r
SOCKET hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);\r
if (hSocket == INVALID_SOCKET)\r
return false;\r
-#if defined(__BSD__) || defined(__WXMAC_OSX__)\r
+#ifdef BSD\r
int set = 1;\r
setsockopt(hSocket, SOL_SOCKET, SO_NOSIGPIPE, (void*)&set, sizeof(int));\r
#endif\r
\r
unsigned int pnSeed[] =\r
{\r
+ // 2010/06\r
0x35218252, 0x9c9c9618, 0xda6bacad, 0xb9aca862, 0x97c235c6,\r
0x146f9562, 0xb67b9e4b, 0x87cf4bc0, 0xb83945d0, 0x984333ad,\r
0xbbeec555, 0x6f0eb440, 0xe0005318, 0x7797e460, 0xddc60fcc,\r
0xdd3462d0, 0x4e4d1448, 0x171df645, 0x84ee1155,\r
0x248ac445, 0x0e634444, 0x0ded1b63, 0x30c01e60,\r
0xa2b9a094, 0x29e4fd43, 0x9ce61b4c, 0xdae09744,\r
+\r
+ // 2010/08\r
+ 0x5ae6bf43, 0x460be257, 0x7245c0cf, 0x4e0f028d, 0x26501760, 0x38643255, 0x67094f4f, 0x480449b8,\r
+ 0x16545143, 0x1f082e5a, 0xaa428018, 0xe411e793, 0x14c1f862, 0x2726105b, 0x9b33ea50, 0xeeef86ca,\r
+ 0xe3210d44, 0x0dca8b63, 0x3f9dfb18, 0x860340ad, 0xf33ba17a, 0x9018375c, 0x1de4e353, 0x0fa52dcb,\r
+ 0x89c4555b, 0x109cf37b, 0x28c55b40, 0x04c801ae, 0x275c1e80, 0x6f7f745d, 0x7a2a5653, 0xa28e26d8,\r
+ 0xa4e65db2, 0x99a06580, 0xf253ba44, 0x82cf6ab8, 0x859c2e8e, 0xf71a815d, 0xc18f1454, 0x71c8a943,\r
+ 0x90d24e18, 0x311789b2, 0x74aba645, 0xde0bbfc3, 0xad724fad, 0xbf1ae15e, 0xbaa6fb54, 0x06e4d145,\r
+ 0x51528645, 0x72120cd4, 0xd4cfd145, 0x0a7afed8, 0x9b9a5fad, 0x9e9ff45e, 0x10128355, 0xd44e8646,\r
+ 0x04a07b47, 0x5fc9d547, 0xe0491e45, 0xbac21b41, 0x7aa31bae, 0x10483c5f, 0x94a23055, 0x73d9dc47,\r
+ 0x1a99c247, 0x822fe847, 0x7e57ba48, 0xb19ea843, 0xa60621b2, 0x778cf163, 0x125c6556, 0xf94ba44f,\r
+ 0xa61a0948, 0x6c839e4b, 0x29af5348, 0x68d84845, 0x752b95c3, 0xcf0d4663, 0x08e11e56, 0x75109550,\r
+ 0x5f24b94c, 0x42426d4d, 0xfbbc0a4c, 0x70a9a246, 0xda7837cb, 0xae2a986d, 0xe283c358, 0x0c7ca954,\r
+ 0x8e9bde59, 0x61521760, 0x6884444c, 0xa194e548, 0x9b8809cc, 0x16e96a8f, 0x956ff859, 0xfad5e555,\r
+ 0x0ea70c80, 0x5b4ce26d, 0x7984444c, 0x1080d24a, 0x22a686cf, 0x6bf8c2ad, 0xb0f7485f, 0x06b66e56,\r
+ 0x668373bc, 0x75506279, 0x3868694e, 0x12a5954b, 0x3a8b62d1, 0xb74fcbad, 0xa7dc3360, 0xc070b359,\r
+ 0xa2b87242, 0xc45cab7c, 0x69882050, 0x14a5464b, 0x386acad5, 0x80b85db2, 0x1f78a062, 0xc608c55b,\r
+ 0x4257d543, 0x7636ad80, 0x4432d655, 0xb2114d4b, 0x32639bd9, 0xadd75db2, 0x9be5a362, 0x6831bc5e,\r
+ 0xf7f77046, 0x8f35ba81, 0x09bb4e59, 0xd0fb6b4e, 0xc5daa445, 0x9c611618, 0x355dcc62, 0xf2cf435e,\r
+ 0x31e72c46, 0xdd8a43ad, 0x171f9c5b, 0xb4c2e355, 0xbe8af945, 0x613d3942, 0xe6f9e863, 0x7a3d855f,\r
+ 0xa66adc47, 0x261089b2, 0x5a27105b, 0x6c28105b, 0xdd247946, 0xe6c3a445, 0x43a1ec63, 0x99b4dd5f,\r
+ 0xb6834347, 0x5e9649bc, 0xf9dd545d, 0x6ae4c15b, 0xa5318a47, 0x7984ec47, 0x93a73b63, 0x0c60195f,\r
+ 0xa5c85e4b, 0xa0a36dc2, 0x0739a95e, 0x3d44c15b, 0xfb940f4b, 0xd67c9148, 0x614f9876, 0x0a241c5f,\r
+ 0xad9da74c, 0x4459abc8, 0x12e71b5f, 0x1c534a5d, 0x8ff5fc50, 0x2ca8864b, 0xd894fd80, 0x82ab3160,\r
+ 0x390d804e, 0x2cf310cc, 0x680dad80, 0x691be15e, 0x5a8f4652, 0xaad0784d, 0x0d2431ad,\r
};\r
\r
\r
return false;\r
}\r
\r
-#if defined(__BSD__) || defined(__WXMAC_OSX__)\r
+#ifdef BSD\r
// Different way of disabling SIGPIPE on BSD\r
setsockopt(hListenSocket, SOL_SOCKET, SO_NOSIGPIPE, (void*)&nOne, sizeof(int));\r
#endif\r
printf("ThreadRPCServer method=%s\n", strMethod.c_str());\r
\r
// Observe lockdown\r
- if (IsLockdown() && strMethod != "help" && strMethod != "stop" && strMethod != "getgenerate" && strMethod != "setgenerate")\r
- throw runtime_error("WARNING: Displayed transactions may not be correct! You may need to upgrade.");\r
+ if (IsLockdown() && !mapArgs.count("-overridesafety") && strMethod != "help" && strMethod != "stop" && strMethod != "getgenerate" && strMethod != "setgenerate")\r
+ throw runtime_error("WARNING: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade.");\r
\r
// Execute\r
map<string, rpcfn_type>::iterator mi = mapCallTable.find(strMethod);\r
class CAutoFile;\r
\r
static const int VERSION = 308;\r
-static const char* pszSubVer = ".3";\r
+static const char* pszSubVer = ".4";\r
\r
\r
\r
{\r
string strOut;\r
bool fOneSpace = false;\r
- foreach(int c, strIn)\r
+ foreach(unsigned char c, strIn)\r
{\r
if (isspace(c))\r
{\r
{\r
//strDescription += _("Received payment to ");\r
//strDescription += _("Received with address ");\r
- strDescription += _("From: unknown, Received with: ");\r
+ strDescription += _("Received with: ");\r
string strAddress = PubKeyToAddress(vchPubKey);\r
map<string, string>::iterator mi = mapAddressBook.find(strAddress);\r
if (mi != mapAddressBook.end() && !(*mi).second.empty())\r
}\r
else\r
{\r
+ char pszExePath[MAX_PATH+1];\r
+ memset(pszExePath, 0, sizeof(pszExePath));\r
+ if (readlink("/proc/self/exe", pszExePath, sizeof(pszExePath)-1) == -1)\r
+ return;\r
+\r
boost::filesystem::create_directories(GetAutostartDir());\r
\r
boost::filesystem::ofstream optionFile(GetAutostartFilePath(), ios_base::out|ios_base::trunc);\r
return;\r
}\r
// Write a bitcoin.desktop file to the autostart directory:\r
- char pszExePath[MAX_PATH+1];\r
- memset(pszExePath, 0, sizeof(pszExePath));\r
- readlink("/proc/self/exe", pszExePath, sizeof(pszExePath)-1);\r
optionFile << "[Desktop Entry]\n";\r
optionFile << "Type=Application\n";\r
optionFile << "Name=Bitcoin\n";\r
{\r
strFromSave = m_textCtrlFrom->GetValue();\r
strMessageSave = m_textCtrlMessage->GetValue();\r
- m_textCtrlFrom->SetValue(_("Will appear as \"From: Unknown\""));\r
+ m_textCtrlFrom->SetValue(_("n/a"));\r
m_textCtrlMessage->SetValue(_("Can't include a message when sending to a Bitcoin address"));\r
}\r
else if (fEnable && !fEnabledPrev)\r
template<typename T1>\r
inline uint256 Hash(const T1 pbegin, const T1 pend)\r
{\r
+ static unsigned char pblank[1];\r
uint256 hash1;\r
- SHA256((unsigned char*)&pbegin[0], (pend - pbegin) * sizeof(pbegin[0]), (unsigned char*)&hash1);\r
+ SHA256((pbegin == pend ? pblank : (unsigned char*)&pbegin[0]), (pend - pbegin) * sizeof(pbegin[0]), (unsigned char*)&hash1);\r
uint256 hash2;\r
SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2);\r
return hash2;\r
inline uint256 Hash(const T1 p1begin, const T1 p1end,\r
const T2 p2begin, const T2 p2end)\r
{\r
+ static unsigned char pblank[1];\r
uint256 hash1;\r
SHA256_CTX ctx;\r
SHA256_Init(&ctx);\r
- SHA256_Update(&ctx, (unsigned char*)&p1begin[0], (p1end - p1begin) * sizeof(p1begin[0]));\r
- SHA256_Update(&ctx, (unsigned char*)&p2begin[0], (p2end - p2begin) * sizeof(p2begin[0]));\r
+ SHA256_Update(&ctx, (p1begin == p1end ? pblank : (unsigned char*)&p1begin[0]), (p1end - p1begin) * sizeof(p1begin[0]));\r
+ SHA256_Update(&ctx, (p2begin == p2end ? pblank : (unsigned char*)&p2begin[0]), (p2end - p2begin) * sizeof(p2begin[0]));\r
SHA256_Final((unsigned char*)&hash1, &ctx);\r
uint256 hash2;\r
SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2);\r
const T2 p2begin, const T2 p2end,\r
const T3 p3begin, const T3 p3end)\r
{\r
+ static unsigned char pblank[1];\r
uint256 hash1;\r
SHA256_CTX ctx;\r
SHA256_Init(&ctx);\r
- SHA256_Update(&ctx, (unsigned char*)&p1begin[0], (p1end - p1begin) * sizeof(p1begin[0]));\r
- SHA256_Update(&ctx, (unsigned char*)&p2begin[0], (p2end - p2begin) * sizeof(p2begin[0]));\r
- SHA256_Update(&ctx, (unsigned char*)&p3begin[0], (p3end - p3begin) * sizeof(p3begin[0]));\r
+ SHA256_Update(&ctx, (p1begin == p1end ? pblank : (unsigned char*)&p1begin[0]), (p1end - p1begin) * sizeof(p1begin[0]));\r
+ SHA256_Update(&ctx, (p2begin == p2end ? pblank : (unsigned char*)&p2begin[0]), (p2end - p2begin) * sizeof(p2begin[0]));\r
+ SHA256_Update(&ctx, (p3begin == p3end ? pblank : (unsigned char*)&p3begin[0]), (p3end - p3begin) * sizeof(p3begin[0]));\r
SHA256_Final((unsigned char*)&hash1, &ctx);\r
uint256 hash2;\r
SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2);\r