Manual merge of jaromil's source tree reorg commit.
authorJeff Garzik <jeff@garzik.org>
Mon, 9 May 2011 18:00:14 +0000 (14:00 -0400)
committerJeff Garzik <jgarzik@pobox.com>
Mon, 9 May 2011 18:00:14 +0000 (14:00 -0400)
Conflicts:
src/sha256.cpp

14 files changed:
1  2 
doc/build-unix.txt
share/setup.nsi
share/uiproject.fbp
src/db.cpp
src/init.cpp
src/main.cpp
src/main.h
src/makefile.unix
src/rpc.cpp
src/serialize.h
src/ui.cpp
src/ui.h
src/uibase.cpp
src/uibase.h

diff --combined doc/build-unix.txt
@@@ -13,6 -13,8 +13,8 @@@ UNIX BUILD NOTE
  To Build
  --------
  
+ cd src/
  make -f makefile.unix            # Bitcoin with wxWidgets GUI
    or
  make -f makefile.unix bitcoind   # Headless bitcoin
@@@ -37,12 -39,9 +39,12 @@@ You need to download wxWidgets from htt
  and build it yourself.  See the build instructions and configure parameters
  below.
  
 -Requires miniupnpc for UPnP port mapping.  To compile with UPnP support,
 -install miniupnpc and compile after setting USE_UPNP.  It can be downloaded
 -from http://miniupnp.tuxfamily.org/files/.  
 +Requires miniupnpc for UPnP port mapping.  It can be downloaded from
 +http://miniupnp.tuxfamily.org/files/.  UPnP support is compiled in and
 +turned off by default.  Set USE_UPNP to a different value to control this:
 +USE_UPNP=   no UPnP support, miniupnp not required;
 +USE_UPNP=0  (the default) UPnP support turned off by default at runtime;
 +USE_UPNP=1  UPnP support turned on by default at runtime.
  
  Licenses of statically linked libraries:
  wxWidgets      LGPL 2.1 with very liberal exceptions
@@@ -76,7 -75,7 +78,7 @@@ tar -xzvf wxWidgets-2.9.0.tar.g
  cd wxWidgets-2.9.0
  mkdir buildgtk
  cd buildgtk
 -../configure --with-gtk --enable-debug --disable-shared --enable-monolithic
 +../configure --with-gtk --enable-debug --disable-shared --enable-monolithic --without-libpng --disable-svg
  make
  sudo su
  make install
diff --combined share/setup.nsi
@@@ -4,7 -4,7 +4,7 @@@ RequestExecutionLevel highes
  \r
  # General Symbol Definitions\r
  !define REGKEY "SOFTWARE\$(^Name)"\r
 -!define VERSION 0.3.21\r
 +!define VERSION 0.3.22\r
  !define COMPANY "Bitcoin project"\r
  !define URL http://www.bitcoin.org/\r
  \r
@@@ -39,12 -39,12 +39,12 @@@ Var StartMenuGrou
  !insertmacro MUI_LANGUAGE English\r
  \r
  # Installer attributes\r
 -OutFile bitcoin-0.3.21-win32-setup.exe\r
 +OutFile bitcoin-0.3.22-win32-setup.exe\r
  InstallDir $PROGRAMFILES\Bitcoin\r
  CRCCheck on\r
  XPStyle on\r
  ShowInstDetails show\r
 -VIProductVersion 0.3.21.0\r
 +VIProductVersion 0.3.22.0\r
  VIAddVersionKey ProductName Bitcoin\r
  VIAddVersionKey ProductVersion "${VERSION}"\r
  VIAddVersionKey CompanyName "${COMPANY}"\r
diff --combined share/uiproject.fbp
                          <property name="checked">0</property>\r
                          <property name="enabled">1</property>\r
                          <property name="help"></property>\r
 -                        <property name="id">wxID_OPTIONSGENERATEBITCOINS</property>\r
 -                        <property name="kind">wxITEM_CHECK</property>\r
 -                        <property name="label">&amp;Generate Coins</property>\r
 -                        <property name="name">m_menuOptionsGenerateBitcoins</property>\r
 -                        <property name="permission">none</property>\r
 -                        <property name="shortcut"></property>\r
 -                        <property name="unchecked_bitmap"></property>\r
 -                        <event name="OnMenuSelection">OnMenuOptionsGenerate</event>\r
 -                        <event name="OnUpdateUI">OnUpdateUIOptionsGenerate</event>\r
 -                    </object>\r
 -                    <object class="wxMenuItem" expanded="1">\r
 -                        <property name="bitmap"></property>\r
 -                        <property name="checked">0</property>\r
 -                        <property name="enabled">1</property>\r
 -                        <property name="help"></property>\r
                          <property name="id">wxID_ANY</property>\r
                          <property name="kind">wxITEM_NORMAL</property>\r
                          <property name="label">&amp;Your Receiving Addresses...</property>\r
                                                  </object>\r
                                                  <object class="sizeritem" expanded="1">\r
                                                      <property name="border">5</property>\r
 -                                                    <property name="flag"></property>\r
 -                                                    <property name="proportion">0</property>\r
 -                                                    <object class="wxBoxSizer" expanded="1">\r
 -                                                        <property name="minimum_size"></property>\r
 -                                                        <property name="name">bSizer71</property>\r
 -                                                        <property name="orient">wxHORIZONTAL</property>\r
 -                                                        <property name="permission">none</property>\r
 -                                                        <object class="sizeritem" expanded="1">\r
 -                                                            <property name="border">5</property>\r
 -                                                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>\r
 -                                                            <property name="proportion">0</property>\r
 -                                                            <object class="wxCheckBox" expanded="1">\r
 -                                                                <property name="bg"></property>\r
 -                                                                <property name="checked">0</property>\r
 -                                                                <property name="context_help"></property>\r
 -                                                                <property name="enabled">1</property>\r
 -                                                                <property name="fg"></property>\r
 -                                                                <property name="font"></property>\r
 -                                                                <property name="hidden">0</property>\r
 -                                                                <property name="id">wxID_ANY</property>\r
 -                                                                <property name="label">&amp;Limit coin generation to</property>\r
 -                                                                <property name="maximum_size"></property>\r
 -                                                                <property name="minimum_size"></property>\r
 -                                                                <property name="name">m_checkBoxLimitProcessors</property>\r
 -                                                                <property name="permission">protected</property>\r
 -                                                                <property name="pos"></property>\r
 -                                                                <property name="size"></property>\r
 -                                                                <property name="style"></property>\r
 -                                                                <property name="subclass"></property>\r
 -                                                                <property name="tooltip"></property>\r
 -                                                                <property name="validator_data_type"></property>\r
 -                                                                <property name="validator_style">wxFILTER_NONE</property>\r
 -                                                                <property name="validator_type">wxDefaultValidator</property>\r
 -                                                                <property name="validator_variable"></property>\r
 -                                                                <property name="window_extra_style"></property>\r
 -                                                                <property name="window_name"></property>\r
 -                                                                <property name="window_style"></property>\r
 -                                                                <event name="OnChar"></event>\r
 -                                                                <event name="OnCheckBox">OnCheckBoxLimitProcessors</event>\r
 -                                                                <event name="OnEnterWindow"></event>\r
 -                                                                <event name="OnEraseBackground"></event>\r
 -                                                                <event name="OnKeyDown"></event>\r
 -                                                                <event name="OnKeyUp"></event>\r
 -                                                                <event name="OnKillFocus"></event>\r
 -                                                                <event name="OnLeaveWindow"></event>\r
 -                                                                <event name="OnLeftDClick"></event>\r
 -                                                                <event name="OnLeftDown"></event>\r
 -                                                                <event name="OnLeftUp"></event>\r
 -                                                                <event name="OnMiddleDClick"></event>\r
 -                                                                <event name="OnMiddleDown"></event>\r
 -                                                                <event name="OnMiddleUp"></event>\r
 -                                                                <event name="OnMotion"></event>\r
 -                                                                <event name="OnMouseEvents"></event>\r
 -                                                                <event name="OnMouseWheel"></event>\r
 -                                                                <event name="OnPaint"></event>\r
 -                                                                <event name="OnRightDClick"></event>\r
 -                                                                <event name="OnRightDown"></event>\r
 -                                                                <event name="OnRightUp"></event>\r
 -                                                                <event name="OnSetFocus"></event>\r
 -                                                                <event name="OnSize"></event>\r
 -                                                                <event name="OnUpdateUI"></event>\r
 -                                                            </object>\r
 -                                                        </object>\r
 -                                                        <object class="sizeritem" expanded="1">\r
 -                                                            <property name="border">5</property>\r
 -                                                            <property name="flag">wxALIGN_CENTER_VERTICAL</property>\r
 -                                                            <property name="proportion">0</property>\r
 -                                                            <object class="wxSpinCtrl" expanded="1">\r
 -                                                                <property name="bg"></property>\r
 -                                                                <property name="context_help"></property>\r
 -                                                                <property name="enabled">1</property>\r
 -                                                                <property name="fg"></property>\r
 -                                                                <property name="font"></property>\r
 -                                                                <property name="hidden">0</property>\r
 -                                                                <property name="id">wxID_ANY</property>\r
 -                                                                <property name="initial">1</property>\r
 -                                                                <property name="max">999</property>\r
 -                                                                <property name="maximum_size"></property>\r
 -                                                                <property name="min">1</property>\r
 -                                                                <property name="minimum_size"></property>\r
 -                                                                <property name="name">m_spinCtrlLimitProcessors</property>\r
 -                                                                <property name="permission">protected</property>\r
 -                                                                <property name="pos"></property>\r
 -                                                                <property name="size">48,-1</property>\r
 -                                                                <property name="style">wxSP_ARROW_KEYS</property>\r
 -                                                                <property name="subclass"></property>\r
 -                                                                <property name="tooltip"></property>\r
 -                                                                <property name="validator_data_type"></property>\r
 -                                                                <property name="validator_style">wxFILTER_NONE</property>\r
 -                                                                <property name="validator_type">wxDefaultValidator</property>\r
 -                                                                <property name="validator_variable"></property>\r
 -                                                                <property name="value"></property>\r
 -                                                                <property name="window_extra_style"></property>\r
 -                                                                <property name="window_name"></property>\r
 -                                                                <property name="window_style"></property>\r
 -                                                                <event name="OnChar"></event>\r
 -                                                                <event name="OnEnterWindow"></event>\r
 -                                                                <event name="OnEraseBackground"></event>\r
 -                                                                <event name="OnKeyDown"></event>\r
 -                                                                <event name="OnKeyUp"></event>\r
 -                                                                <event name="OnKillFocus"></event>\r
 -                                                                <event name="OnLeaveWindow"></event>\r
 -                                                                <event name="OnLeftDClick"></event>\r
 -                                                                <event name="OnLeftDown"></event>\r
 -                                                                <event name="OnLeftUp"></event>\r
 -                                                                <event name="OnMiddleDClick"></event>\r
 -                                                                <event name="OnMiddleDown"></event>\r
 -                                                                <event name="OnMiddleUp"></event>\r
 -                                                                <event name="OnMotion"></event>\r
 -                                                                <event name="OnMouseEvents"></event>\r
 -                                                                <event name="OnMouseWheel"></event>\r
 -                                                                <event name="OnPaint"></event>\r
 -                                                                <event name="OnRightDClick"></event>\r
 -                                                                <event name="OnRightDown"></event>\r
 -                                                                <event name="OnRightUp"></event>\r
 -                                                                <event name="OnSetFocus"></event>\r
 -                                                                <event name="OnSize"></event>\r
 -                                                                <event name="OnSpinCtrl"></event>\r
 -                                                                <event name="OnSpinCtrlText"></event>\r
 -                                                                <event name="OnUpdateUI"></event>\r
 -                                                            </object>\r
 -                                                        </object>\r
 -                                                        <object class="sizeritem" expanded="1">\r
 -                                                            <property name="border">5</property>\r
 -                                                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>\r
 -                                                            <property name="proportion">0</property>\r
 -                                                            <object class="wxStaticText" expanded="1">\r
 -                                                                <property name="bg"></property>\r
 -                                                                <property name="context_help"></property>\r
 -                                                                <property name="enabled">1</property>\r
 -                                                                <property name="fg"></property>\r
 -                                                                <property name="font"></property>\r
 -                                                                <property name="hidden">0</property>\r
 -                                                                <property name="id">wxID_ANY</property>\r
 -                                                                <property name="label">processors</property>\r
 -                                                                <property name="maximum_size"></property>\r
 -                                                                <property name="minimum_size"></property>\r
 -                                                                <property name="name">m_staticText35</property>\r
 -                                                                <property name="permission">protected</property>\r
 -                                                                <property name="pos"></property>\r
 -                                                                <property name="size"></property>\r
 -                                                                <property name="style"></property>\r
 -                                                                <property name="subclass"></property>\r
 -                                                                <property name="tooltip"></property>\r
 -                                                                <property name="validator_data_type"></property>\r
 -                                                                <property name="validator_style">wxFILTER_NONE</property>\r
 -                                                                <property name="validator_type">wxDefaultValidator</property>\r
 -                                                                <property name="validator_variable"></property>\r
 -                                                                <property name="window_extra_style"></property>\r
 -                                                                <property name="window_name"></property>\r
 -                                                                <property name="window_style"></property>\r
 -                                                                <property name="wrap">-1</property>\r
 -                                                                <event name="OnChar"></event>\r
 -                                                                <event name="OnEnterWindow"></event>\r
 -                                                                <event name="OnEraseBackground"></event>\r
 -                                                                <event name="OnKeyDown"></event>\r
 -                                                                <event name="OnKeyUp"></event>\r
 -                                                                <event name="OnKillFocus"></event>\r
 -                                                                <event name="OnLeaveWindow"></event>\r
 -                                                                <event name="OnLeftDClick"></event>\r
 -                                                                <event name="OnLeftDown"></event>\r
 -                                                                <event name="OnLeftUp"></event>\r
 -                                                                <event name="OnMiddleDClick"></event>\r
 -                                                                <event name="OnMiddleDown"></event>\r
 -                                                                <event name="OnMiddleUp"></event>\r
 -                                                                <event name="OnMotion"></event>\r
 -                                                                <event name="OnMouseEvents"></event>\r
 -                                                                <event name="OnMouseWheel"></event>\r
 -                                                                <event name="OnPaint"></event>\r
 -                                                                <event name="OnRightDClick"></event>\r
 -                                                                <event name="OnRightDown"></event>\r
 -                                                                <event name="OnRightUp"></event>\r
 -                                                                <event name="OnSetFocus"></event>\r
 -                                                                <event name="OnSize"></event>\r
 -                                                                <event name="OnUpdateUI"></event>\r
 -                                                            </object>\r
 -                                                        </object>\r
 -                                                    </object>\r
 -                                                </object>\r
 -                                                <object class="sizeritem" expanded="1">\r
 -                                                    <property name="border">5</property>\r
                                                      <property name="flag">wxALL</property>\r
                                                      <property name="proportion">0</property>\r
                                                      <object class="wxCheckBox" expanded="1">\r
diff --combined src/db.cpp
--- 1/db.cpp
@@@ -778,10 -778,10 +778,10 @@@ bool CWalletDB::LoadWallet(
                  string strKey;
                  ssKey >> strKey;
  
 -                // Menu state
 -                if (strKey == "fGenerateBitcoins")  ssValue >> fGenerateBitcoins;
 -
                  // Options
 +#ifndef GUI
 +                if (strKey == "fGenerateBitcoins")  ssValue >> fGenerateBitcoins;
 +#endif
                  if (strKey == "nTransactionFee")    ssValue >> nTransactionFee;
                  if (strKey == "addrIncoming")       ssValue >> addrIncoming;
                  if (strKey == "fLimitProcessors")   ssValue >> fLimitProcessors;
diff --combined src/init.cpp
@@@ -326,7 -326,7 +326,7 @@@ bool AppInit2(int argc, char* argv[]
      // Make sure only a single bitcoin process is using the data directory.
      string strLockFile = GetDataDir() + "/.lock";
      FILE* file = fopen(strLockFile.c_str(), "a"); // empty lock file; created if it doesn't exist.
 -    fclose(file);
 +    if (file) fclose(file);
      static boost::interprocess::file_lock lock(strLockFile.c_str());
      if (!lock.try_lock())
      {
diff --combined src/main.cpp
@@@ -681,8 -681,8 +681,8 @@@ bool CTransaction::AcceptToMemoryPool(C
      if (GetSigOpCount() > nSize / 34 || nSize < 100)
          return error("AcceptToMemoryPool() : nonstandard transaction");
  
 -    // Rather not work on nonstandard transactions
 -    if (!IsStandard())
 +    // Rather not work on nonstandard transactions (unless -testnet)
 +    if (!fTestNet && !IsStandard())
          return error("AcceptToMemoryPool() : nonstandard transaction type");
  
      // Do we already have it?
@@@ -3145,6 -3145,71 +3145,6 @@@ void ThreadBitcoinMiner(void* parg
      printf("ThreadBitcoinMiner exiting, %d threads remaining\n", vnThreadsRunning[3]);
  }
  
 -#if defined(__GNUC__) && defined(CRYPTOPP_X86_ASM_AVAILABLE)
 -void CallCPUID(int in, int& aret, int& cret)
 -{
 -    int a, c;
 -    asm (
 -        "mov %2, %%eax; " // in into eax
 -        "cpuid;"
 -        "mov %%eax, %0;" // eax into a
 -        "mov %%ecx, %1;" // ecx into c
 -        :"=r"(a),"=r"(c) /* output */
 -        :"r"(in) /* input */
 -        :"%eax","%ebx","%ecx","%edx" /* clobbered register */
 -    );
 -    aret = a;
 -    cret = c;
 -}
 -
 -bool Detect128BitSSE2()
 -{
 -    int a, c, nBrand;
 -    CallCPUID(0, a, nBrand);
 -    bool fIntel = (nBrand == 0x6c65746e); // ntel
 -    bool fAMD = (nBrand == 0x444d4163); // cAMD
 -
 -    struct
 -    {
 -        unsigned int nStepping : 4;
 -        unsigned int nModel : 4;
 -        unsigned int nFamily : 4;
 -        unsigned int nProcessorType : 2;
 -        unsigned int nUnused : 2;
 -        unsigned int nExtendedModel : 4;
 -        unsigned int nExtendedFamily : 8;
 -    }
 -    cpu;
 -    CallCPUID(1, a, c);
 -    memcpy(&cpu, &a, sizeof(cpu));
 -    int nFamily = cpu.nExtendedFamily + cpu.nFamily;
 -    int nModel = cpu.nExtendedModel*16 + cpu.nModel;
 -
 -    // We need Intel Nehalem or AMD K10 or better for 128bit SSE2
 -    // Nehalem = i3/i5/i7 and some Xeon
 -    // K10 = Opterons with 4 or more cores, Phenom, Phenom II, Athlon II
 -    //  Intel Core i5  family 6, model 26 or 30
 -    //  Intel Core i7  family 6, model 26 or 30
 -    //  Intel Core i3  family 6, model 37
 -    //  AMD Phenom    family 16, model 10
 -    bool fUseSSE2 = ((fIntel && nFamily * 10000 + nModel >=  60026) ||
 -                     (fAMD   && nFamily * 10000 + nModel >= 160010));
 -
 -    // AMD reports a lower model number in 64-bit mode
 -    if (fAMD && sizeof(void*) > 4 && nFamily * 10000 + nModel >= 160000)
 -        fUseSSE2 = true;
 -
 -    static bool fPrinted;
 -    if (!fPrinted)
 -    {
 -        fPrinted = true;
 -        printf("CPUID %08x family %d, model %d, stepping %d, fUseSSE2=%d\n", nBrand, nFamily, nModel, cpu.nStepping, fUseSSE2);
 -    }
 -    return fUseSSE2;
 -}
 -#else
 -bool Detect128BitSSE2() { return false; }
 -#endif
  
  int FormatHashBlocks(void* pbuffer, unsigned int len)
  {
@@@ -3205,6 -3270,9 +3205,6 @@@ unsigned int ScanHash_CryptoPP(char* pm
      }
  }
  
 -extern unsigned int ScanHash_4WaySSE2(char* pmidstate, char* pblock, char* phash1, char* phash, unsigned int& nHashesDone);
 -
 -
  
  class COrphan
  {
@@@ -3478,6 -3546,9 +3478,6 @@@ void BitcoinMiner(
  {
      printf("BitcoinMiner started\n");
      SetThreadPriority(THREAD_PRIORITY_LOWEST);
 -    bool f4WaySSE2 = Detect128BitSSE2();
 -    if (mapArgs.count("-4way"))
 -        f4WaySSE2 = GetBoolArg("-4way");
  
      // Each thread has its own key and counter
      CReserveKey reservekey;
              unsigned int nHashesDone = 0;
              unsigned int nNonceFound;
  
 -#ifdef FOURWAYSSE2
 -            if (f4WaySSE2)
 -                // tcatm's 4-way 128-bit SSE2 SHA-256
 -                nNonceFound = ScanHash_4WaySSE2(pmidstate, pdata + 64, phash1, (char*)&hash, nHashesDone);
 -            else
 -#endif
 -                // Crypto++ SHA-256
 -                nNonceFound = ScanHash_CryptoPP(pmidstate, pdata + 64, phash1, (char*)&hash, nHashesDone);
 +            // Crypto++ SHA-256
 +            nNonceFound = ScanHash_CryptoPP(pmidstate, pdata + 64, phash1,
 +                                            (char*)&hash, nHashesDone);
  
              // Check if something found
              if (nNonceFound != -1)
diff --combined src/main.h
--- 1/main.h
@@@ -1028,7 -1028,7 +1028,7 @@@ public
              if (!ptx->IsFinal())
                  return false;
              if (ptx->GetDepthInMainChain() >= 1)
 -                return true;
 +                continue;
              if (!ptx->IsFromMe())
                  return false;
  
diff --combined src/makefile.unix
@@@ -32,8 -32,7 +32,8 @@@ LIBS+= 
   -Wl,-Bdynamic \
     -l gthread-2.0 \
     -l z \
 -   -l dl
 +   -l dl \
 +   -l pthread
  
  
  DEBUGFLAGS=-g -D__WXDEBUG__
@@@ -63,14 -62,17 +63,14 @@@ obj/%.o: %.cpp $(HEADERS
  cryptopp/obj/%.o: cryptopp/%.cpp
        $(CXX) -c $(CXXFLAGS) -O3 -o $@ $<
  
 -obj/sha256.o: sha256.cpp
 -      $(CXX) -c $(CXXFLAGS) -msse2 -O3 -march=amdfam10 -o $@ $<
 -
 -bitcoin: $(OBJS) obj/ui.o obj/uibase.o obj/sha256.o
 +bitcoin: $(OBJS) obj/ui.o obj/uibase.o
        $(CXX) $(CXXFLAGS) -o $@ $^ $(WXLIBS) $(LIBS)
  
  
  obj/nogui/%.o: %.cpp $(HEADERS)
        $(CXX) -c $(CXXFLAGS) -o $@ $<
  
 -bitcoind: $(OBJS:obj/%=obj/nogui/%) obj/sha256.o
 +bitcoind: $(OBJS:obj/%=obj/nogui/%)
        $(CXX) $(CXXFLAGS) -o $@ $^ $(LIBS)
  
  
diff --combined src/rpc.cpp
@@@ -1083,8 -1083,8 +1083,8 @@@ Value listtransactions(const Array& par
  {
      if (fHelp || params.size() > 2)
          throw runtime_error(
 -            "listtransactions [account] [count=10]\n"
 -            "Returns up to [count] most recent transactions for account <account>.");
 +            "listtransactions [account] [count=10] [from=0]\n"
 +            "Returns up to [count] most recent transactions skipping the first [from] transactions for account [account].");
  
      string strAccount = "*";
      if (params.size() > 0)
      int nCount = 10;
      if (params.size() > 1)
          nCount = params[1].get_int();
 +    int nFrom = 0;
 +    if (params.size() > 2)
 +        nFrom = params[2].get_int();
  
      Array ret;
      CWalletDB walletdb;
          }
  
          // Now: iterate backwards until we have nCount items to return:
 -        for (TxItems::reverse_iterator it = txByTime.rbegin(); it != txByTime.rend(); ++it)
 +        TxItems::reverse_iterator it = txByTime.rbegin();
 +        for (std::advance(it, nFrom); it != txByTime.rend(); ++it)
          {
              CWalletTx *const pwtx = (*it).second.first;
              if (pwtx != 0)
@@@ -1574,11 -1570,10 +1574,11 @@@ int ReadHTTPHeader(std::basic_istream<c
          {
              string strHeader = str.substr(0, nColon);
              boost::trim(strHeader);
 +            boost::to_lower(strHeader);
              string strValue = str.substr(nColon+1);
              boost::trim(strValue);
              mapHeadersRet[strHeader] = strValue;
 -            if (strHeader == "Content-Length")
 +            if (strHeader == "content-length")
                  nLen = atoi(strValue.c_str());
          }
      }
@@@ -1648,7 -1643,7 +1648,7 @@@ string DecodeBase64(string s
  
  bool HTTPAuthorized(map<string, string>& mapHeaders)
  {
 -    string strAuth = mapHeaders["Authorization"];
 +    string strAuth = mapHeaders["authorization"];
      if (strAuth.substr(0,6) != "Basic ")
          return false;
      string strUserPass64 = strAuth.substr(6); boost::trim(strUserPass64);
@@@ -1877,7 -1872,7 +1877,7 @@@ void ThreadRPCServer2(void* parg
          }
  
          // Check authorization
 -        if (mapHeaders.count("Authorization") == 0)
 +        if (mapHeaders.count("authorization") == 0)
          {
              stream << HTTPReply(401, "") << std::flush;
              continue;
@@@ -2092,7 -2087,6 +2092,7 @@@ int CommandLineRPC(int argc, char *argv
          if (strMethod == "sendfrom"               && n > 2) ConvertTo<double>(params[2]);
          if (strMethod == "sendfrom"               && n > 3) ConvertTo<boost::int64_t>(params[3]);
          if (strMethod == "listtransactions"       && n > 1) ConvertTo<boost::int64_t>(params[1]);
 +        if (strMethod == "listtransactions"       && n > 2) ConvertTo<boost::int64_t>(params[2]);
          if (strMethod == "listaccounts"           && n > 0) ConvertTo<boost::int64_t>(params[0]);
          if (strMethod == "sendmany"               && n > 1)
          {
diff --combined src/serialize.h
@@@ -25,7 -25,7 +25,7 @@@ class CDataStream
  class CAutoFile;
  static const unsigned int MAX_SIZE = 0x02000000;
  
 -static const int VERSION = 32100;
 +static const int VERSION = 32200;
  static const char* pszSubVer = "";
  static const bool VERSION_IS_BETA = true;
  
diff --combined src/ui.cpp
--- 1/ui.cpp
@@@ -1094,6 -1094,12 +1094,6 @@@ void CMainFrame::OnMenuFileExit(wxComma
      Close(true);
  }
  
 -void CMainFrame::OnMenuOptionsGenerate(wxCommandEvent& event)
 -{
 -    // Options->Generate Coins
 -    GenerateBitcoins(event.IsChecked());
 -}
 -
  void CMainFrame::OnUpdateUIOptionsGenerate(wxUpdateUIEvent& event)
  {
      event.Check(fGenerateBitcoins);
@@@ -1649,6 -1655,13 +1649,6 @@@ COptionsDialog::COptionsDialog(wxWindow
  
      // Init values
      m_textCtrlTransactionFee->SetValue(FormatMoney(nTransactionFee));
 -    m_checkBoxLimitProcessors->SetValue(fLimitProcessors);
 -    m_spinCtrlLimitProcessors->Enable(fLimitProcessors);
 -    m_spinCtrlLimitProcessors->SetValue(nLimitProcessors);
 -    int nProcessors = wxThread::GetCPUCount();
 -    if (nProcessors < 1)
 -        nProcessors = 999;
 -    m_spinCtrlLimitProcessors->SetRange(1, nProcessors);
      m_checkBoxStartOnSystemStartup->SetValue(fTmpStartOnSystemStartup = GetStartOnSystemStartup());
      m_checkBoxMinimizeToTray->SetValue(fMinimizeToTray);
      m_checkBoxMinimizeOnClose->SetValue(fMinimizeOnClose);
@@@ -1689,6 -1702,11 +1689,6 @@@ void COptionsDialog::OnKillFocusTransac
      m_textCtrlTransactionFee->SetValue(FormatMoney(nTmp));
  }
  
 -void COptionsDialog::OnCheckBoxLimitProcessors(wxCommandEvent& event)
 -{
 -    m_spinCtrlLimitProcessors->Enable(event.IsChecked());
 -}
 -
  void COptionsDialog::OnCheckBoxUseProxy(wxCommandEvent& event)
  {
      m_textCtrlProxyIP->Enable(event.IsChecked());
@@@ -1737,6 -1755,20 +1737,6 @@@ void COptionsDialog::OnButtonApply(wxCo
      if (ParseMoney(m_textCtrlTransactionFee->GetValue(), nTransactionFee) && nTransactionFee != nPrevTransactionFee)
          walletdb.WriteSetting("nTransactionFee", nTransactionFee);
  
 -    int nPrevMaxProc = (fLimitProcessors ? nLimitProcessors : INT_MAX);
 -    if (fLimitProcessors != m_checkBoxLimitProcessors->GetValue())
 -    {
 -        fLimitProcessors = m_checkBoxLimitProcessors->GetValue();
 -        walletdb.WriteSetting("fLimitProcessors", fLimitProcessors);
 -    }
 -    if (nLimitProcessors != m_spinCtrlLimitProcessors->GetValue())
 -    {
 -        nLimitProcessors = m_spinCtrlLimitProcessors->GetValue();
 -        walletdb.WriteSetting("nLimitProcessors", nLimitProcessors);
 -    }
 -    if (fGenerateBitcoins && (fLimitProcessors ? nLimitProcessors : INT_MAX) > nPrevMaxProc)
 -        GenerateBitcoins(fGenerateBitcoins);
 -
      if (fTmpStartOnSystemStartup != m_checkBoxStartOnSystemStartup->GetValue())
      {
          fTmpStartOnSystemStartup = m_checkBoxStartOnSystemStartup->GetValue();
@@@ -1827,7 -1859,6 +1827,7 @@@ CSendDialog::CSendDialog(wxWindow* pare
      m_bitmapCheckMark->Show(false);
      fEnabledPrev = true;
      m_textCtrlAddress->SetFocus();
 +    
      //// todo: should add a display of your balance for convenience
  #ifndef __WXMSW__
      wxFont fontTmp = m_staticTextInstructions->GetFont();
      m_staticTextInstructions->SetFont(fontTmp);
      SetSize(725, 180);
  #endif
 -
 +    
      // Set Icon
      wxIcon iconSend;
      iconSend.CopyFromBitmap(wxBitmap(send16noshadow_xpm));
@@@ -1929,7 -1960,6 +1929,7 @@@ void CSendDialog::OnButtonSend(wxComman
                  {
                      wxMessageBox(strError + "  ", _("Sending..."));
                      EndModal(false);
 +                    return;
                  }
            }
          }
@@@ -2575,7 -2605,6 +2575,7 @@@ void CAddressBookDialog::OnClose(wxClos
  enum
  {
      ID_TASKBAR_RESTORE = 10001,
 +    ID_TASKBAR_SEND,
      ID_TASKBAR_OPTIONS,
      ID_TASKBAR_GENERATE,
      ID_TASKBAR_EXIT,
  BEGIN_EVENT_TABLE(CMyTaskBarIcon, wxTaskBarIcon)
      EVT_TASKBAR_LEFT_DCLICK(CMyTaskBarIcon::OnLeftButtonDClick)
      EVT_MENU(ID_TASKBAR_RESTORE, CMyTaskBarIcon::OnMenuRestore)
 +    EVT_MENU(ID_TASKBAR_SEND, CMyTaskBarIcon::OnMenuSend)
      EVT_MENU(ID_TASKBAR_OPTIONS, CMyTaskBarIcon::OnMenuOptions)
 -    EVT_MENU(ID_TASKBAR_GENERATE, CMyTaskBarIcon::OnMenuGenerate)
      EVT_UPDATE_UI(ID_TASKBAR_GENERATE, CMyTaskBarIcon::OnUpdateUIGenerate)
      EVT_MENU(ID_TASKBAR_EXIT, CMyTaskBarIcon::OnMenuExit)
  END_EVENT_TABLE()
@@@ -2636,13 -2665,6 +2636,13 @@@ void CMyTaskBarIcon::OnMenuRestore(wxCo
      Restore();
  }
  
 +void CMyTaskBarIcon::OnMenuSend(wxCommandEvent& event)
 +{
 +    // Taskbar: Send
 +    CSendDialog dialog(pframeMain);
 +    dialog.ShowModal();
 +}
 +
  void CMyTaskBarIcon::OnMenuOptions(wxCommandEvent& event)
  {
      // Since it's modal, get the main window to do it
@@@ -2659,6 -2681,11 +2659,6 @@@ void CMyTaskBarIcon::Restore(
      pframeMain->Raise();
  }
  
 -void CMyTaskBarIcon::OnMenuGenerate(wxCommandEvent& event)
 -{
 -    GenerateBitcoins(event.IsChecked());
 -}
 -
  void CMyTaskBarIcon::OnUpdateUIGenerate(wxUpdateUIEvent& event)
  {
      event.Check(fGenerateBitcoins);
@@@ -2679,8 -2706,8 +2679,8 @@@ wxMenu* CMyTaskBarIcon::CreatePopupMenu
  {
      wxMenu* pmenu = new wxMenu;
      pmenu->Append(ID_TASKBAR_RESTORE, _("&Open Bitcoin"));
 +    pmenu->Append(ID_TASKBAR_SEND, _("&Send Bitcoins"));
      pmenu->Append(ID_TASKBAR_OPTIONS, _("O&ptions..."));
 -    pmenu->AppendCheckItem(ID_TASKBAR_GENERATE, _("&Generate Coins"))->Check(fGenerateBitcoins);
  #ifndef __WXMAC_OSX__ // Mac has built-in quit menu
      pmenu->AppendSeparator();
      pmenu->Append(ID_TASKBAR_EXIT, _("E&xit"));
@@@ -2812,6 -2839,9 +2812,6 @@@ bool CMyApp::OnInit(
      extern int g_isPainting;
      g_isPainting = 10000;
  #endif
 -#ifdef GUI
 -    wxImage::AddHandler(new wxPNGHandler);
 -#endif
  #if defined(__WXMSW__ ) || defined(__WXMAC_OSX__)
      SetAppName("Bitcoin");
  #else
diff --combined src/ui.h
--- 1/ui.h
+++ b/src/ui.h
@@@ -52,6 -52,7 +52,6 @@@ protected
      void OnPaint(wxPaintEvent& event);
      void OnPaintListCtrl(wxPaintEvent& event);
      void OnMenuFileExit(wxCommandEvent& event);
 -    void OnMenuOptionsGenerate(wxCommandEvent& event);
      void OnUpdateUIOptionsGenerate(wxUpdateUIEvent& event);
      void OnMenuOptionsChangeYourAddress(wxCommandEvent& event);
      void OnMenuOptionsOptions(wxCommandEvent& event);
@@@ -126,6 -127,7 +126,6 @@@ protected
      // Event handlers
      void OnListBox(wxCommandEvent& event);
      void OnKillFocusTransactionFee(wxFocusEvent& event);
 -    void OnCheckBoxLimitProcessors(wxCommandEvent& event);
      void OnCheckBoxUseProxy(wxCommandEvent& event);
      void OnKillFocusProxy(wxFocusEvent& event);
  
@@@ -321,7 -323,6 +321,7 @@@ protected
      // Event handlers
      void OnLeftButtonDClick(wxTaskBarIconEvent& event);
      void OnMenuRestore(wxCommandEvent& event);
 +    void OnMenuSend(wxCommandEvent& event);
      void OnMenuOptions(wxCommandEvent& event);
      void OnUpdateUIGenerate(wxUpdateUIEvent& event);
      void OnMenuGenerate(wxCommandEvent& event);
diff --combined src/uibase.cpp
@@@ -28,6 -28,10 +28,6 @@@ CMainFrameBase::CMainFrameBase( wxWindo
        m_menubar->Append( m_menuFile, _("&File") );
        
        m_menuOptions = new wxMenu();
 -      wxMenuItem* m_menuOptionsGenerateBitcoins;
 -      m_menuOptionsGenerateBitcoins = new wxMenuItem( m_menuOptions, wxID_OPTIONSGENERATEBITCOINS, wxString( _("&Generate Coins") ) , wxEmptyString, wxITEM_CHECK );
 -      m_menuOptions->Append( m_menuOptionsGenerateBitcoins );
 -      
        wxMenuItem* m_menuOptionsChangeYourAddress;
        m_menuOptionsChangeYourAddress = new wxMenuItem( m_menuOptions, wxID_ANY, wxString( _("&Your Receiving Addresses...") ) , wxEmptyString, wxITEM_NORMAL );
        m_menuOptions->Append( m_menuOptionsChangeYourAddress );
        this->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
        this->Connect( wxEVT_PAINT, wxPaintEventHandler( CMainFrameBase::OnPaint ) );
        this->Connect( m_menuFileExit->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuFileExit ) );
 -      this->Connect( m_menuOptionsGenerateBitcoins->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsGenerate ) );
 -      this->Connect( m_menuOptionsGenerateBitcoins->GetId(), wxEVT_UPDATE_UI, wxUpdateUIEventHandler( CMainFrameBase::OnUpdateUIOptionsGenerate ) );
        this->Connect( m_menuOptionsChangeYourAddress->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsChangeYourAddress ) );
        this->Connect( m_menuOptionsOptions->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsOptions ) );
        this->Connect( m_menuHelpAbout->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuHelpAbout ) );
@@@ -244,6 -250,8 +244,6 @@@ CMainFrameBase::~CMainFrameBase(
        this->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
        this->Disconnect( wxEVT_PAINT, wxPaintEventHandler( CMainFrameBase::OnPaint ) );
        this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuFileExit ) );
 -      this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsGenerate ) );
 -      this->Disconnect( wxID_ANY, wxEVT_UPDATE_UI, wxUpdateUIEventHandler( CMainFrameBase::OnUpdateUIOptionsGenerate ) );
        this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsChangeYourAddress ) );
        this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsOptions ) );
        this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuHelpAbout ) );
@@@ -342,6 -350,21 +342,6 @@@ COptionsDialogBase::COptionsDialogBase
        
        bSizer69->Add( 0, 16, 0, wxEXPAND, 5 );
        
 -      wxBoxSizer* bSizer71;
 -      bSizer71 = new wxBoxSizer( wxHORIZONTAL );
 -      
 -      m_checkBoxLimitProcessors = new wxCheckBox( m_panelMain, wxID_ANY, _("&Limit coin generation to"), wxDefaultPosition, wxDefaultSize, 0 );
 -      bSizer71->Add( m_checkBoxLimitProcessors, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
 -      
 -      m_spinCtrlLimitProcessors = new wxSpinCtrl( m_panelMain, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 48,-1 ), wxSP_ARROW_KEYS, 1, 999, 1 );
 -      bSizer71->Add( m_spinCtrlLimitProcessors, 0, wxALIGN_CENTER_VERTICAL, 5 );
 -      
 -      m_staticText35 = new wxStaticText( m_panelMain, wxID_ANY, _("processors"), wxDefaultPosition, wxDefaultSize, 0 );
 -      m_staticText35->Wrap( -1 );
 -      bSizer71->Add( m_staticText35, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
 -      
 -      bSizer69->Add( bSizer71, 0, 0, 5 );
 -      
        m_checkBoxStartOnSystemStartup = new wxCheckBox( m_panelMain, wxID_ANY, _("&Start Bitcoin on system startup"), wxDefaultPosition, wxDefaultSize, 0 );
        bSizer69->Add( m_checkBoxStartOnSystemStartup, 0, wxALL, 5 );
        
        
        // Connect Events
        m_listBox->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( COptionsDialogBase::OnListBox ), NULL, this );
 -      m_checkBoxLimitProcessors->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxLimitProcessors ), NULL, this );
        m_checkBoxMinimizeToTray->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxMinimizeToTray ), NULL, this );
        m_checkBoxUseProxy->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxUseProxy ), NULL, this );
        m_textCtrlProxyIP->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( COptionsDialogBase::OnKillFocusProxy ), NULL, this );
@@@ -470,6 -494,7 +470,6 @@@ COptionsDialogBase::~COptionsDialogBase
  {
        // Disconnect Events
        m_listBox->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( COptionsDialogBase::OnListBox ), NULL, this );
 -      m_checkBoxLimitProcessors->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxLimitProcessors ), NULL, this );
        m_checkBoxMinimizeToTray->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxMinimizeToTray ), NULL, this );
        m_checkBoxUseProxy->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxUseProxy ), NULL, this );
        m_textCtrlProxyIP->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( COptionsDialogBase::OnKillFocusProxy ), NULL, this );
diff --combined src/uibase.h
  #include <wx/dialog.h>
  #include <wx/listbox.h>
  #include <wx/checkbox.h>
 -#include <wx/spinctrl.h>
  #include <wx/scrolwin.h>
  #include <wx/statbmp.h>
  
  ///////////////////////////////////////////////////////////////////////////
  
  #define wxID_MAINFRAME 1000
 -#define wxID_OPTIONSGENERATEBITCOINS 1001
 -#define wxID_BUTTONSEND 1002
 -#define wxID_BUTTONRECEIVE 1003
 -#define wxID_TEXTCTRLADDRESS 1004
 -#define wxID_BUTTONNEW 1005
 -#define wxID_BUTTONCOPY 1006
 -#define wxID_PROXYIP 1007
 -#define wxID_PROXYPORT 1008
 -#define wxID_TRANSACTIONFEE 1009
 -#define wxID_TEXTCTRLPAYTO 1010
 -#define wxID_BUTTONPASTE 1011
 -#define wxID_BUTTONADDRESSBOOK 1012
 -#define wxID_TEXTCTRLAMOUNT 1013
 -#define wxID_CHOICETRANSFERTYPE 1014
 -#define wxID_LISTCTRL 1015
 -#define wxID_BUTTONRENAME 1016
 -#define wxID_PANELSENDING 1017
 -#define wxID_LISTCTRLSENDING 1018
 -#define wxID_PANELRECEIVING 1019
 -#define wxID_LISTCTRLRECEIVING 1020
 -#define wxID_BUTTONDELETE 1021
 -#define wxID_BUTTONEDIT 1022
 -#define wxID_TEXTCTRL 1023
 +#define wxID_BUTTONSEND 1001
 +#define wxID_BUTTONRECEIVE 1002
 +#define wxID_TEXTCTRLADDRESS 1003
 +#define wxID_BUTTONNEW 1004
 +#define wxID_BUTTONCOPY 1005
 +#define wxID_PROXYIP 1006
 +#define wxID_PROXYPORT 1007
 +#define wxID_TRANSACTIONFEE 1008
 +#define wxID_TEXTCTRLPAYTO 1009
 +#define wxID_BUTTONPASTE 1010
 +#define wxID_BUTTONADDRESSBOOK 1011
 +#define wxID_TEXTCTRLAMOUNT 1012
 +#define wxID_CHOICETRANSFERTYPE 1013
 +#define wxID_LISTCTRL 1014
 +#define wxID_BUTTONRENAME 1015
 +#define wxID_PANELSENDING 1016
 +#define wxID_LISTCTRLSENDING 1017
 +#define wxID_PANELRECEIVING 1018
 +#define wxID_LISTCTRLRECEIVING 1019
 +#define wxID_BUTTONDELETE 1020
 +#define wxID_BUTTONEDIT 1021
 +#define wxID_TEXTCTRL 1022
  
  ///////////////////////////////////////////////////////////////////////////////
  /// Class CMainFrameBase
@@@ -97,6 -99,8 +97,6 @@@ class CMainFrameBase : public wxFram
                virtual void OnMouseEvents( wxMouseEvent& event ) { event.Skip(); }
                virtual void OnPaint( wxPaintEvent& event ) { event.Skip(); }
                virtual void OnMenuFileExit( wxCommandEvent& event ) { event.Skip(); }
 -              virtual void OnMenuOptionsGenerate( wxCommandEvent& event ) { event.Skip(); }
 -              virtual void OnUpdateUIOptionsGenerate( wxUpdateUIEvent& event ) { event.Skip(); }
                virtual void OnMenuOptionsChangeYourAddress( wxCommandEvent& event ) { event.Skip(); }
                virtual void OnMenuOptionsOptions( wxCommandEvent& event ) { event.Skip(); }
                virtual void OnMenuHelpAbout( wxCommandEvent& event ) { event.Skip(); }
@@@ -161,6 -165,9 +161,6 @@@ class COptionsDialogBase : public wxDia
                wxScrolledWindow* m_scrolledWindow;
                wxPanel* m_panelMain;
                
 -              wxCheckBox* m_checkBoxLimitProcessors;
 -              wxSpinCtrl* m_spinCtrlLimitProcessors;
 -              wxStaticText* m_staticText35;
                wxCheckBox* m_checkBoxStartOnSystemStartup;
                wxCheckBox* m_checkBoxMinimizeToTray;
                wxCheckBox* m_checkBoxUseUPnP;
                
                // Virtual event handlers, overide them in your derived class
                virtual void OnListBox( wxCommandEvent& event ) { event.Skip(); }
 -              virtual void OnCheckBoxLimitProcessors( wxCommandEvent& event ) { event.Skip(); }
                virtual void OnCheckBoxMinimizeToTray( wxCommandEvent& event ) { event.Skip(); }
                virtual void OnCheckBoxUseProxy( wxCommandEvent& event ) { event.Skip(); }
                virtual void OnKillFocusProxy( wxFocusEvent& event ) { event.Skip(); }