mirror of
https://github.com/jwinterm/myriadcoin.git
synced 2026-10-26 06:08:39 +01:00
Merge branch '0.5.x' into 0.6.0.x
Conflicts: src/qt/bitcoin.cpp src/qt/bitcoingui.cpp src/qt/guiutil.cpp src/qt/guiutil.h src/qt/sendcoinsdialog.cpp src/qt/sendcoinsdialog.h src/util.cpp
This commit is contained in:
+45
-15
@@ -1293,14 +1293,21 @@ Value listtransactions(const Array& params, bool fHelp)
|
||||
if (params.size() > 2)
|
||||
nFrom = params[2].get_int();
|
||||
|
||||
if (nCount < 0)
|
||||
throw JSONRPCError(-8, "Negative count");
|
||||
if (nFrom < 0)
|
||||
throw JSONRPCError(-8, "Negative from");
|
||||
|
||||
Array ret;
|
||||
CWalletDB walletdb(pwalletMain->strWalletFile);
|
||||
|
||||
// Firs: get all CWalletTx and CAccountingEntry into a sorted-by-time multimap:
|
||||
// First: get all CWalletTx and CAccountingEntry into a sorted-by-time multimap.
|
||||
typedef pair<CWalletTx*, CAccountingEntry*> TxPair;
|
||||
typedef multimap<int64, TxPair > TxItems;
|
||||
TxItems txByTime;
|
||||
|
||||
// Note: maintaining indices in the database of (account,time) --> txid and (account, time) --> acentry
|
||||
// would make this much faster for applications that do this a lot.
|
||||
for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it)
|
||||
{
|
||||
CWalletTx* wtx = &((*it).second);
|
||||
@@ -1313,10 +1320,8 @@ Value listtransactions(const Array& params, bool fHelp)
|
||||
txByTime.insert(make_pair(entry.nTime, TxPair((CWalletTx*)0, &entry)));
|
||||
}
|
||||
|
||||
// Now: iterate backwards until we have nCount items to return:
|
||||
TxItems::reverse_iterator it = txByTime.rbegin();
|
||||
if (txByTime.size() > nFrom) std::advance(it, nFrom);
|
||||
for (; it != txByTime.rend(); ++it)
|
||||
// iterate backwards until we have nCount items to return:
|
||||
for (TxItems::reverse_iterator it = txByTime.rbegin(); it != txByTime.rend(); ++it)
|
||||
{
|
||||
CWalletTx *const pwtx = (*it).second.first;
|
||||
if (pwtx != 0)
|
||||
@@ -1325,18 +1330,21 @@ Value listtransactions(const Array& params, bool fHelp)
|
||||
if (pacentry != 0)
|
||||
AcentryToJSON(*pacentry, strAccount, ret);
|
||||
|
||||
if (ret.size() >= nCount) break;
|
||||
if (ret.size() >= (nCount+nFrom)) break;
|
||||
}
|
||||
// ret is now newest to oldest
|
||||
// ret is newest to oldest
|
||||
|
||||
// Make sure we return only last nCount items (sends-to-self might give us an extra):
|
||||
if (ret.size() > nCount)
|
||||
{
|
||||
Array::iterator last = ret.begin();
|
||||
std::advance(last, nCount);
|
||||
ret.erase(last, ret.end());
|
||||
}
|
||||
std::reverse(ret.begin(), ret.end()); // oldest to newest
|
||||
if (nFrom > ret.size()) nFrom = ret.size();
|
||||
if (nFrom+nCount > ret.size()) nCount = ret.size()-nFrom;
|
||||
Array::iterator first = ret.begin();
|
||||
std::advance(first, nFrom);
|
||||
Array::iterator last = ret.begin();
|
||||
std::advance(last, nFrom+nCount);
|
||||
|
||||
if (last != ret.end()) ret.erase(last, ret.end());
|
||||
if (first != ret.begin()) ret.erase(ret.begin(), first);
|
||||
|
||||
std::reverse(ret.begin(), ret.end()); // Return oldest to newest
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -2361,6 +2369,10 @@ void ThreadRPCServer(void* parg)
|
||||
printf("ThreadRPCServer exiting\n");
|
||||
}
|
||||
|
||||
#ifdef QT_GUI
|
||||
extern bool HACK_SHUTDOWN;
|
||||
#endif
|
||||
|
||||
void ThreadRPCServer2(void* parg)
|
||||
{
|
||||
printf("ThreadRPCServer started\n");
|
||||
@@ -2397,9 +2409,27 @@ void ThreadRPCServer2(void* parg)
|
||||
|
||||
asio::io_service io_service;
|
||||
ip::tcp::endpoint endpoint(bindAddress, GetArg("-rpcport", 8332));
|
||||
#ifndef QT_GUI
|
||||
ip::tcp::acceptor acceptor(io_service, endpoint);
|
||||
|
||||
acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
|
||||
#else
|
||||
ip::tcp::acceptor acceptor(io_service);
|
||||
try
|
||||
{
|
||||
acceptor.open(endpoint.protocol());
|
||||
acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
|
||||
acceptor.bind(endpoint);
|
||||
acceptor.listen(socket_base::max_connections);
|
||||
}
|
||||
catch(system::system_error &e)
|
||||
{
|
||||
HACK_SHUTDOWN = true;
|
||||
ThreadSafeMessageBox(strprintf(_("An error occured while setting up the RPC port %i for listening: %s"), endpoint.port(), e.what()),
|
||||
_("Error"), wxOK | wxMODAL);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef USE_SSL
|
||||
ssl::context context(io_service, ssl::context::sslv23);
|
||||
|
||||
Reference in New Issue
Block a user