-Copyright (c) 2009-2010 Satoshi Nakamoto
+Copyright (c) 2009-2011 Bitcoin Developers
Distributed under the MIT/X11 software license, see the accompanying
file license.txt or http://www.opensource.org/licenses/mit-license.php.
This product includes software developed by the OpenSSL Project for use in
Compilers Supported
-------------------
-MinGW GCC (recommended)
-http://tdm-gcc.tdragon.net/ has an easy installer. Go back a few versions
-for a little older gcc like gcc 4.4.?.
+MinGW GCC http://tdm-gcc.tdragon.net/
+ TDM-GCC with gcc 4.5.1 was used to build this release.
+MSYS 1.0.11 was also used (sh needed to compile some dependencies)
-MSVC 8.0 (2005) SP1 has been tested. Note: MSVC 7.0 and up have a habit of
-linking to runtime DLLs that are not installed on XP by default.
+
+Candidate releases were built with MSVC 10.0 (2010), but
+compiling with Visual C++ caused rendering artifacts when
+bitcoin was run.
Dependencies
------------
Libraries you need to download separately and build:
- default path download
-wxWidgets-2.9 \wxwidgets http://www.wxwidgets.org/downloads/
-OpenSSL \openssl http://www.openssl.org/source/
-Berkeley DB \db http://www.oracle.com/technology/software/products/berkeley-db/index.html
-Boost \boost http://www.boost.org/users/download/
+ default path download
+wxWidgets \wxwidgets-2.9.1-mgw http://www.wxwidgets.org/downloads/
+OpenSSL \openssl-1.0.0c-mgw http://www.openssl.org/source/
+Berkeley DB \db-4.7.25.NC-mgw http://www.oracle.com/technology/software/products/berkeley-db/index.html
+Boost \boost-1.43.0-mgw http://www.boost.org/users/download/
Their licenses:
wxWidgets LGPL 2.1 with very liberal exceptions
Boost MIT-like license
Versions used in this release:
-MinGW GCC 3.4.5
-wxWidgets 2.9.0
-OpenSSL 0.9.8k
+wxWidgets 2.9.1
+OpenSSL 1.0.0c
Berkeley DB 4.7.25.NC
-Boost 1.42.1
+Boost 1.43.0
Notes
uiproject.fbp. It generates uibase.cpp and uibase.h, which define base
classes that do the rote work of constructing all the UI elements.
-The release is built with GCC and then "strip bitcoin.exe" to strip the debug
-symbols, which reduces the executable size by about 90%.
-
-
wxWidgets
---------
-cd \wxwidgets\build\msw
-make -f makefile.gcc
- or
-nmake -f makefile.vc
-
+DOS shell:
+cd \wxWidgets-2.9.1-mgw\build\msw
+mingw32-make -f makefile.gcc
OpenSSL
-------
-If you want to exclude unused optional algorithms, a few patches are required.
-(instructions for OpenSSL v0.9.8k)
-
-Edit engines\e_gmp.c and engines\e_capi.c and add this #ifndef around
-the openssl/rsa.h include:
- #ifndef OPENSSL_NO_RSA
- #include <openssl/rsa.h>
- #endif
-
-Edit ms\mingw32.bat and replace the Configure line's parameters with this
-no-everything list. You have to put this in the batch file because batch
-files can't take more than nine command line parameters.
- perl Configure mingw threads no-rc2 no-rc4 no-rc5 no-idea no-des no-bf no-cast no-aes no-camellia no-seed no-rsa no-dh
+MSYS shell:
+un-tar sources with MSYS 'tar xfz' to avoid issue with symlinks (OpenSSL ticket 2377)
+change 'MAKE' env. variable from 'C:\MinGW32\bin\mingw32-make.exe' to '/c/MinGW32/bin/mingw32-make.exe'
-Also REM out the following line in ms\mingw32.bat after the mingw32-make
-line. The build fails after it's already finished building libeay32, which
-is all we care about, but the failure aborts the script before it runs
-dllwrap to generate libeay32.dll.
- REM if errorlevel 1 goto end
-
-Build
- cd \openssl
- ms\mingw32.bat
+cd /c/openssl-1.0.0c-mgw
+./config
+make
-If you're using MSVC, generate the .lib file
- lib /machine:i386 /def:ms\libeay32.def /out:out\libeay32.lib
+perl util/mkdef.pl 32 libeay enable-static-engine > libeay32.def
+dllwrap --dllname libeay32.dll --output-lib libeay32.a --def libeay32.def libcrypto.a -lws2_32 -lgdi32
+after that openssl libeay is in main source dir (openssl-1.0.0c-mgw)
Berkeley DB
-----------
-Using MinGW and MSYS:
-cd \db\build_unix
+MSYS shell:
+cd /c/db-4.7.25.NC-mgw/build_unix
sh ../dist/configure --enable-mingw --enable-cxx
make
Boost
-----
-download bjam.exe from
-http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=72941
-cd \boost
+DOS prompt:
+downloaded boost jam 3.1.18
+cd \boost-1.43.0-mgw
bjam toolset=gcc --build-type=complete stage
- or
-bjam toolset=msvc --build-type=complete stage
+
+Note:
+building with boost 1.45.0 failed because of boost ticket 4614, 4258
+builds fine with boost 1.43.0
+
+Bitcoin
+-------
+DOS prompt:
+cd \bitcoin
+mingw32-make bitcoin.exe bitcoind.exe -f makefile.mingw
+strip bitcoin.exe
+strip bitcoind.exe
keyUser.MakeNewKey();
if (!AddKey(keyUser))
return false;
- if (!SetAddressBookName(PubKeyToAddress(keyUser.GetPubKey()), "Your Address"))
+ if (!SetAddressBookName(PubKeyToAddress(keyUser.GetPubKey()), ""))
return false;
CWalletDB().WriteDefaultKey(keyUser.GetPubKey());
}
INCLUDEPATHS= \
- -I"/boost" \
- -I"/db/build_unix" \
- -I"/openssl/include" \
- -I"/wxwidgets/lib/gcc_lib/mswud" \
- -I"/wxwidgets/include"
+ -I"C:\boost-1.43.0-mgw" \
+ -I"C:\db-4.7.25.NC-mgw\build_unix" \
+ -I"C:\openssl-1.0.0c-mgw\include" \
+ -I"C:\wxWidgets-2.9.1-mgw\lib\gcc_lib\mswud" \
+ -I"C:\wxWidgets-2.9.1-mgw\include"
LIBPATHS= \
- -L"/boost/stage/lib" \
- -L"/db/build_unix" \
- -L"/openssl/out" \
- -L"/wxwidgets/lib/gcc_lib"
+ -L"C:\boost-1.43.0-mgw\stage\lib" \
+ -L"C:\db-4.7.25.NC-mgw\build_unix" \
+ -L"C:\openssl-1.0.0c-mgw" \
+ -L"C:\wxWidgets-2.9.1-mgw\lib\gcc_lib"
WXLIBS= \
-l wxmsw29ud_html -l wxmsw29ud_core -l wxmsw29ud_adv -l wxbase29ud -l wxtiffd -l wxjpegd -l wxpngd -l wxzlibd
LIBS= \
- -l libboost_system-mgw34-mt-d \
- -l libboost_filesystem-mgw34-mt-d \
- -l libboost_program_options-mgw34-mt-d \
- -l libboost_thread-mgw34-mt-d \
+ -l boost_system-mgw45-mt-s-1_43 \
+ -l boost_filesystem-mgw45-mt-s-1_43 \
+ -l boost_program_options-mgw45-mt-s-1_43 \
+ -l boost_thread-mgw45-mt-s-1_43 \
-l db_cxx \
-l eay32 \
-l kernel32 -l user32 -l gdi32 -l comdlg32 -l winspool -l winmm -l shell32 -l comctl32 -l ole32 -l oleaut32 -l uuid -l rpcrt4 -l advapi32 -l ws2_32 -l shlwapi
/I"/boost" \
/I"/db/build_windows" \
/I"/openssl/include" \
- /I"/wxwidgets/lib/vc_lib/mswud" \
+ /I"/wxwidgets/lib/vc_lib/mswu" \
/I"/wxwidgets/include"
LIBPATHS= \
/LIBPATH:"/boost/stage/lib" \
- /LIBPATH:"/db/build_windows/debug" \
- /LIBPATH:"/openssl/out" \
- /LIBPATH:"/wxwidgets/lib/vc_lib"
+ /LIBPATH:"/db/build_windows/Release" \
+ /LIBPATH:"/openssl/lib" \
+ /LIBPATH:"/wxwidgets/lib/vc_lib" \
+ /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmt.lib \
+ /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib \
+ /NODEFAULTLIB:msvcrtd.lib
-WXLIBS=wxmsw29ud_html.lib wxmsw29ud_core.lib wxmsw29ud_adv.lib wxbase29ud.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib
+WXLIBS=wxmsw29u.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib
LIBS= \
- libboost_system-vc80-mt-gd.lib \
- libboost_filesystem-vc80-mt-gd.lib \
- libboost_program_options-vc80-mt-gd.lib \
- libboost_thread-vc80-mt-gd.lib \
- libdb47sd.lib \
+ libboost_system-vc100-mt.lib \
+ libboost_filesystem-vc100-mt.lib \
+ libboost_program_options-vc100-mt.lib \
+ libboost_thread-vc100-mt.lib \
+ libdb47s.lib \
libeay32.lib \
kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib ws2_32.lib shlwapi.lib
DEFS=/DWIN32 /D__WXMSW__ /D_WINDOWS /DNOPCH
-DEBUGFLAGS=/Zi /D__WXDEBUG__
-CFLAGS=/c /nologo /MDd /EHsc /GR /Zm300 $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS)
+DEBUGFLAGS=/Os
+CFLAGS=/MD /c /nologo /EHsc /GR /Zm300 $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS)
HEADERS=headers.h strlcpy.h serialize.h uint256.h util.h key.h bignum.h base58.h \
script.h db.h net.h irc.h main.h rpc.h uibase.h ui.h noui.h init.h
rc $(INCLUDEPATHS) $(DEFS) /Fo$@ %s
bitcoin.exe: $(OBJS) obj\ui.obj obj\uibase.obj obj\ui.res
- link /nologo /DEBUG /SUBSYSTEM:WINDOWS /OUT:$@ $(LIBPATHS) $** $(WXLIBS) $(LIBS)
+ link /nologo /SUBSYSTEM:WINDOWS /OUT:$@ $(LIBPATHS) $** $(WXLIBS) $(LIBS)
.cpp{obj\nogui}.obj:
obj\nogui\init.obj: $(HEADERS)
bitcoind.exe: $(OBJS:obj\=obj\nogui\) obj\ui.res
- link /nologo /DEBUG /OUT:$@ $(LIBPATHS) $** $(LIBS)
+ link /nologo /OUT:$@ $(LIBPATHS) $** $(LIBS)
clean:
socklen_t len = sizeof(sockaddr);
SOCKET hSocket = accept(hListenSocket, (struct sockaddr*)&sockaddr, &len);
CAddress addr(sockaddr);
- bool fLimitConnections = false;
int nInbound = 0;
- if (mapArgs.count("-maxconnections"))
- fLimitConnections = true;
-
- if (fLimitConnections)
- {
- CRITICAL_BLOCK(cs_vNodes)
- foreach(CNode* pnode, vNodes)
- if (pnode->fInbound)
- nInbound++;
- }
+ CRITICAL_BLOCK(cs_vNodes)
+ foreach(CNode* pnode, vNodes)
+ if (pnode->fInbound)
+ nInbound++;
if (hSocket == INVALID_SOCKET)
{
if (WSAGetLastError() != WSAEWOULDBLOCK)
printf("socket error accept failed: %d\n", WSAGetLastError());
}
- else if (fLimitConnections && nInbound >= atoi(mapArgs["-maxconnections"]) - MAX_OUTBOUND_CONNECTIONS)
+ else if (nInbound >= GetArg("-maxconnections", 125) - MAX_OUTBOUND_CONNECTIONS)
{
closesocket(hSocket);
}
CDataStream& vRecv = pnode->vRecv;
unsigned int nPos = vRecv.size();
- // typical socket buffer is 8K-64K
- char pchBuf[0x10000];
- int nBytes = recv(pnode->hSocket, pchBuf, sizeof(pchBuf), MSG_DONTWAIT);
- if (nBytes > 0)
- {
- vRecv.resize(nPos + nBytes);
- memcpy(&vRecv[nPos], pchBuf, nBytes);
- pnode->nLastRecv = GetTime();
- }
- else if (nBytes == 0)
- {
- // socket closed gracefully
+ if (nPos > 1000*GetArg("-maxreceivebuffer", 2*1000)) {
if (!pnode->fDisconnect)
- printf("socket closed\n");
+ printf("socket recv flood control disconnect (%d bytes)\n", vRecv.size());
pnode->CloseSocketDisconnect();
}
- else if (nBytes < 0)
- {
- // error
- int nErr = WSAGetLastError();
- if (nErr != WSAEWOULDBLOCK && nErr != WSAEMSGSIZE && nErr != WSAEINTR && nErr != WSAEINPROGRESS)
+ else {
+ // typical socket buffer is 8K-64K
+ char pchBuf[0x10000];
+ int nBytes = recv(pnode->hSocket, pchBuf, sizeof(pchBuf), MSG_DONTWAIT);
+ if (nBytes > 0)
+ {
+ vRecv.resize(nPos + nBytes);
+ memcpy(&vRecv[nPos], pchBuf, nBytes);
+ pnode->nLastRecv = GetTime();
+ }
+ else if (nBytes == 0)
{
+ // socket closed gracefully
if (!pnode->fDisconnect)
- printf("socket recv error %d\n", nErr);
+ printf("socket closed\n");
pnode->CloseSocketDisconnect();
}
+ else if (nBytes < 0)
+ {
+ // error
+ int nErr = WSAGetLastError();
+ if (nErr != WSAEWOULDBLOCK && nErr != WSAEMSGSIZE && nErr != WSAEINTR && nErr != WSAEINPROGRESS)
+ {
+ if (!pnode->fDisconnect)
+ printf("socket recv error %d\n", nErr);
+ pnode->CloseSocketDisconnect();
+ }
+ }
}
}
}
pnode->CloseSocketDisconnect();
}
}
+ if (vSend.size() > 1000*GetArg("-maxsendbuffer", 256)) {
+ if (!pnode->fDisconnect)
+ printf("socket send flood control disconnect (%d bytes)\n", vSend.size());
+ pnode->CloseSocketDisconnect();
+ }
}
}
}
if (!pnode->fInbound)
nOutbound++;
int nMaxOutboundConnections = MAX_OUTBOUND_CONNECTIONS;
- if (mapArgs.count("-maxconnections"))
- nMaxOutboundConnections = min(nMaxOutboundConnections, atoi(mapArgs["-maxconnections"]));
+ nMaxOutboundConnections = min(nMaxOutboundConnections, (int)GetArg("-maxconnections", 125));
if (nOutbound < nMaxOutboundConnections)
break;
Sleep(2000);
for (map<uint256, CWalletTx>::iterator it = mapWallet.begin(); it != mapWallet.end(); ++it)
{
CWalletTx* wtx = &((*it).second);
- txByTime.insert(make_pair(wtx->GetTxTime(), TxPair(wtx, 0)));
+ txByTime.insert(make_pair(wtx->GetTxTime(), TxPair(wtx, (CAccountingEntry*)0)));
}
list<CAccountingEntry> acentries;
walletdb.ListAccountCreditDebit(strAccount, acentries);
foreach(CAccountingEntry& entry, acentries)
{
- txByTime.insert(make_pair(entry.nTime, TxPair(0, &entry)));
+ txByTime.insert(make_pair(entry.nTime, TxPair((CWalletTx*)0, &entry)));
}
// Now: iterate backwards until we have nCount items to return:
map<string, string> mapHeaders;
string strRequest;
- boost::thread api_caller(ReadHTTP, ref(stream), ref(mapHeaders), ref(strRequest));
+ boost::thread api_caller(ReadHTTP, boost::ref(stream), boost::ref(mapHeaders), boost::ref(strRequest));
if (!api_caller.timed_join(boost::posix_time::seconds(GetArg("-rpctimeout", 30))))
{ // Timed out:
acceptor.cancel();
class CAutoFile;
static const unsigned int MAX_SIZE = 0x02000000;
-static const int VERSION = 32000;
+static const int VERSION = 32001;
static const char* pszSubVer = "";
static const bool VERSION_IS_BETA = true;
typedef typename base::value_type value_type;
secure_allocator() throw() {}
secure_allocator(const secure_allocator& a) throw() : base(a) {}
+ template <typename U>
+ secure_allocator(const secure_allocator<U>& a) throw() : base(a) {}
~secure_allocator() throw() {}
template<typename _Other> struct rebind
{ typedef secure_allocator<_Other> other; };
-# Auto-generated by EclipseNSIS Script Wizard\r
-# 3.10.2009 19:00:28\r
-\r
Name Bitcoin\r
\r
RequestExecutionLevel highest\r
\r
# General Symbol Definitions\r
!define REGKEY "SOFTWARE\$(^Name)"\r
-!define VERSION 0.3.19\r
+!define VERSION 0.3.20\r
!define COMPANY "Bitcoin project"\r
!define URL http://www.bitcoin.org/\r
\r
!insertmacro MUI_LANGUAGE English\r
\r
# Installer attributes\r
-OutFile bitcoin-0.3.19-win32-setup.exe\r
+OutFile bitcoin-0.3.20-win32-setup.exe\r
InstallDir $PROGRAMFILES\Bitcoin\r
CRCCheck on\r
XPStyle on\r
ShowInstDetails show\r
-VIProductVersion 0.3.19.0\r
+VIProductVersion 0.3.20.0\r
VIAddVersionKey ProductName Bitcoin\r
VIAddVersionKey ProductVersion "${VERSION}"\r
VIAddVersionKey CompanyName "${COMPANY}"\r
SetOverwrite on\r
File bitcoin.exe\r
File libeay32.dll\r
- File mingwm10.dll\r
File license.txt\r
File readme.txt\r
SetOutPath $INSTDIR\daemon\r
Section /o -un.Main UNSEC0000\r
Delete /REBOOTOK $INSTDIR\bitcoin.exe\r
Delete /REBOOTOK $INSTDIR\libeay32.dll\r
- Delete /REBOOTOK $INSTDIR\mingwm10.dll\r
Delete /REBOOTOK $INSTDIR\license.txt\r
Delete /REBOOTOK $INSTDIR\readme.txt\r
RMDir /r /REBOOTOK $INSTDIR\daemon\r