Merge branch 'master' of github.com:jedmccaleb/NewCoin

Conflicts:
	src/ConnectionPool.cpp
This commit is contained in:
jed
2012-06-19 04:40:34 -07:00
11 changed files with 65 additions and 62 deletions

View File

@@ -1,9 +1,5 @@
#include "ConnectionPool.h"
#include "Config.h"
#include "Peer.h"
#include "Application.h"
#include "utils.h"
#include <boost/asio.hpp>
#include <boost/bind.hpp>
@@ -11,6 +7,13 @@
#include <boost/format.hpp>
#include <boost/algorithm/string.hpp>
#include "Config.h"
#include "Peer.h"
#include "Application.h"
#include "utils.h"
#include "Log.h"
// How often to enforce policies.
#define POLICY_INTERVAL_SECONDS 5
@@ -163,7 +166,7 @@ void ConnectionPool::policyEnforce()
{
boost::posix_time::ptime tpNow = boost::posix_time::second_clock::universal_time();
//std::cerr << "policyEnforce: begin: " << tpNow << std::endl;
Log(lsTRACE) << "policyEnforce: begin: " << tpNow;
// Cancel any in progrss timer.
(void) mPolicyTimer.cancel();
@@ -176,7 +179,7 @@ void ConnectionPool::policyEnforce()
tpNext = boost::posix_time::second_clock::universal_time()+boost::posix_time::seconds(POLICY_INTERVAL_SECONDS);
//std::cerr << "policyEnforce: schedule : " << tpNext << std::endl;
Log(lsTRACE) << "policyEnforce: schedule : " << tpNext;
mPolicyTimer.expires_at(tpNext);
mPolicyTimer.async_wait(boost::bind(&ConnectionPool::policyHandler, this, _1));
@@ -208,7 +211,7 @@ void ConnectionPool::relayMessage(Peer* fromPeer, PackedMessage::pointer msg)
Peer::pointer peer = pair.second;
if (!peer)
std::cerr << "CP::RM null peer in list" << std::endl;
else if (!fromPeer || !(peer.get() == fromPeer))
else if ((!fromPeer || !(peer.get() == fromPeer)) && peer->isConnected())
peer->sendPacket(msg);
}
}

View File

@@ -99,6 +99,7 @@ public:
void setImmutable() { updateHash(); mImmutable = true; }
bool isClosed() { return mClosed; }
bool isAccepted() { return mAccepted; }
bool isImmutable() { return mImmutable; }
// This ledger has closed, will never be accepted, and is accepting
// new transactions to be re-repocessed when do accept a new last-closed ledger

View File

@@ -255,10 +255,7 @@ void LedgerConsensus::mapComplete(const uint256& hash, SHAMap::pointer map, bool
}
if (mComplete.find(hash) != mComplete.end())
{
Log(lsERROR) << "Which we already had";
return; // we already have this map
}
if (mOurPosition && (map->getHash() != mOurPosition->getCurrentHash()))
{ // this could create disputed transactions
@@ -506,7 +503,7 @@ void LedgerConsensus::startAcquiring(TransactionAcquire::pointer acquire)
void LedgerConsensus::propose(const std::vector<uint256>& added, const std::vector<uint256>& removed)
{
Log(lsDEBUG) << "We propose: " << mOurPosition->getCurrentHash().GetHex();
Log(lsTRACE) << "We propose: " << mOurPosition->getCurrentHash().GetHex();
newcoin::TMProposeSet prop;
prop.set_currenttxhash(mOurPosition->getCurrentHash().begin(), 256 / 8);
prop.set_proposeseq(mOurPosition->getProposeSeq());
@@ -643,7 +640,7 @@ void LedgerConsensus::applyTransaction(TransactionEngine& engine, SerializedTran
}
else if (result == 0)
{
Log(lsDEBUG) << " success";
Log(lsTRACE) << " success";
assert(ledger->hasTransaction(txn->getTransactionID()));
}
else
@@ -729,7 +726,7 @@ void LedgerConsensus::accept(SHAMap::pointer set)
Log(lsTRACE) << "newLCL before transactions";
Json::Value p;
newLCL->addJson(p, LEDGER_JSON_DUMP_TXNS | LEDGER_JSON_DUMP_STATE);
ssw.write(std::cerr, p);
ssw.write(Log(lsTRACE).ref(), p);
}
#endif
@@ -747,7 +744,7 @@ void LedgerConsensus::accept(SHAMap::pointer set)
Log(lsTRACE) << "newLCL after transactions";
Json::Value p;
newLCL->addJson(p, LEDGER_JSON_DUMP_TXNS | LEDGER_JSON_DUMP_STATE);
ssw.write(std::cerr, p);
ssw.write(Log(lsTRACE).ref(), p);
}
#endif
@@ -759,14 +756,14 @@ void LedgerConsensus::accept(SHAMap::pointer set)
Log(lsTRACE) << "newOL before transactions";
Json::Value p;
newOL->addJson(p, LEDGER_JSON_DUMP_TXNS | LEDGER_JSON_DUMP_STATE);
ssw.write(std::cerr, p);
ssw.write(Log(lsTRACE).ref(), p);
}
if (1)
{
Log(lsTRACE) << "current ledger";
Json::Value p;
theApp->getMasterLedger().getCurrentLedger()->addJson(p, LEDGER_JSON_DUMP_TXNS | LEDGER_JSON_DUMP_STATE);
ssw.write(std::cerr, p);
ssw.write(Log(lsTRACE).ref(), p);
}
#endif
@@ -804,7 +801,7 @@ void LedgerConsensus::accept(SHAMap::pointer set)
Log(lsTRACE) << "newOL after current ledger transactions";
Json::Value p;
newOL->addJson(p, LEDGER_JSON_DUMP_TXNS | LEDGER_JSON_DUMP_STATE);
ssw.write(std::cerr, p);
ssw.write(Log(lsTRACE).ref(), p);
}
#endif

View File

@@ -32,6 +32,7 @@ void LedgerHistory::addAcceptedLedger(Ledger::pointer ledger)
uint256 h(ledger->getHash());
boost::recursive_mutex::scoped_lock sl(mLedgersByHash.peekMutex());
mLedgersByHash.canonicalize(h, ledger);
assert(ledger && ledger->isAccepted() && ledger->isImmutable());
mLedgersByIndex.insert(std::make_pair(ledger->getLedgerSeq(), ledger));
boost::thread thread(boost::bind(&Ledger::saveAcceptedLedger, ledger));
thread.detach();
@@ -71,6 +72,7 @@ Ledger::pointer LedgerHistory::getLedgerByHash(const uint256& hash)
Ledger::pointer LedgerHistory::canonicalizeLedger(Ledger::pointer ledger, bool save)
{
assert(ledger->isImmutable());
uint256 h(ledger->getHash());
if (!save)
@@ -83,7 +85,7 @@ Ledger::pointer LedgerHistory::canonicalizeLedger(Ledger::pointer ledger, bool s
// save input ledger in map if not in map, otherwise return corresponding map ledger
boost::recursive_mutex::scoped_lock sl(mLedgersByHash.peekMutex());
mLedgersByHash.canonicalize(h, ledger);
if (ledger->isAccepted()) mLedgersByIndex[ledger->getLedgerSeq()]=ledger;
if (ledger->isAccepted()) mLedgersByIndex[ledger->getLedgerSeq()] = ledger;
return ledger;
}
// vim:ts=4

View File

@@ -40,13 +40,14 @@ void LedgerMaster::pushLedger(Ledger::pointer newLCL, Ledger::pointer newOL)
assert(newLCL->isClosed() && newLCL->isAccepted());
assert(!newOL->isClosed() && !newOL->isAccepted());
ScopedLock sl(mLock);
if (mFinalizedLedger && mFinalizedLedger->isAccepted())
if (newLCL->isAccepted())
{
mLedgerHistory.addAcceptedLedger(mFinalizedLedger);
Log(lsINFO) << "StashAccepted: " << mFinalizedLedger->getHash().GetHex();
}
mFinalizedLedger = newLCL;
ScopedLock sl(mLock);
mCurrentLedger = newOL;
mEngine.setLedger(newOL);
}

View File

@@ -7,7 +7,7 @@
boost::recursive_mutex Log::sLock;
LogSeverity Log::sMinSeverity = lsWARNING;
LogSeverity Log::sMinSeverity = lsINFO;
std::ofstream* Log::outStream = NULL;

View File

@@ -60,7 +60,7 @@ void Peer::handle_write(const boost::system::error_code& error, size_t bytes_tra
void Peer::detach(const char *rsn)
{
#ifdef DEBUG
std::cerr << "DETACHING PEER: " << rsn << std::endl;
Log(lsTRACE) << "DETACHING PEER: " << rsn;
#endif
boost::system::error_code ecCancel;
@@ -508,6 +508,7 @@ void Peer::processReadBuffer()
default:
std::cerr << "Unknown Msg: " << type << std::endl;
std::cerr << strHex(&mReadbuf[0], mReadbuf.size());
}
}
}

View File

@@ -124,6 +124,7 @@ public:
void punishPeer(PeerPunish pp);
Json::Value getJson();
bool isConnected() const { return mConnected; }
//static PackedMessage::pointer createFullLedger(Ledger::pointer ledger);
static PackedMessage::pointer createLedgerProposal(Ledger::pointer ledger);

View File

@@ -23,6 +23,7 @@
#include "AccountState.h"
#include "NicknameState.h"
#include "utils.h"
#include "Log.h"
RPCServer::RPCServer(boost::asio::io_service& io_service , NetworkOPs* nopNetwork)
: mNetOps(nopNetwork), mSocket(io_service)
@@ -162,16 +163,10 @@ std::string RPCServer::handleRequest(const std::string& requestStr)
else if (!valParams.isArray())
return(HTTPReply(400, ""));
#ifdef DEBUG
Json::StyledStreamWriter w;
w.write(std::cerr, valParams);
#endif
w.write(Log(lsTRACE).ref(), valParams);
Json::Value result(doCommand(strMethod, valParams));
#ifdef DEBUG
w.write(std::cerr, result);
#endif
w.write(Log(lsTRACE).ref(), result);
std::string strReply = JSONRPCReply(result, Json::Value(), id);
return( HTTPReply(200, strReply) );
@@ -1966,7 +1961,7 @@ Json::Value RPCServer::doStop(Json::Value& params) {
Json::Value RPCServer::doCommand(const std::string& command, Json::Value& params)
{
std::cerr << "RPC:" << command << std::endl;
Log(lsTRACE) << "RPC:" << command;
static struct {
const char* pCommand;

View File

@@ -40,12 +40,12 @@ TransactionEngineResult TransactionEngine::dirAdd(
sleRoot->setIndex(uRootIndex);
std::cerr << "dirAdd: Creating dir index: " << sleRoot->getIndex().ToString() << std::endl;
Log(lsTRACE) << "dirAdd: Creating dir index: " << sleRoot->getIndex().ToString();
sleRoot->setIFieldU64(sfFirstNode, uNodeDir);
sleRoot->setIFieldU64(sfLastNode, uNodeDir);
std::cerr << "dirAdd: first & last: " << strHex(uNodeDir) << std::endl;
Log(lsTRACE) << "dirAdd: first & last: " << strHex(uNodeDir);
accounts.push_back(std::make_pair(taaCREATE, sleRoot));
}
@@ -64,9 +64,9 @@ TransactionEngineResult TransactionEngine::dirAdd(
{
// Last node is not full, append.
std::cerr << "dirAdd: appending: PREV: " << svIndexes.peekValue()[0].ToString() << std::endl;
std::cerr << "dirAdd: appending: Node: " << strHex(uNodeDir) << std::endl;
std::cerr << "dirAdd: appending: Entry: " << uLedgerIndex.ToString() << std::endl;
Log(lsTRACE) << "dirAdd: appending: PREV: " << svIndexes.peekValue()[0].ToString();
Log(lsTRACE) << "dirAdd: appending: Node: " << strHex(uNodeDir);
Log(lsTRACE) << "dirAdd: appending: Entry: " << uLedgerIndex.ToString();
svIndexes.peekValue().push_back(uLedgerIndex);
sleNode->setIFieldV256(sfIndexes, svIndexes);
@@ -83,7 +83,7 @@ TransactionEngineResult TransactionEngine::dirAdd(
// Record new last node.
sleNode = SLE::pointer();
std::cerr << "dirAdd: last: " << strHex(uNodeDir) << std::endl;
Log(lsTRACE) << "dirAdd: last: " << strHex(uNodeDir);
sleRoot->setIFieldU64(sfLastNode, uNodeDir);
@@ -97,7 +97,7 @@ TransactionEngineResult TransactionEngine::dirAdd(
sleNode = boost::make_shared<SerializedLedgerEntry>(ltDIR_NODE);
sleNode->setIndex(uNodeIndex);
std::cerr << "dirAdd: Creating dir node: " << sleNode->getIndex().ToString() << std::endl;
Log(lsTRACE) << "dirAdd: Creating dir node: " << sleNode->getIndex().ToString();
STVector256 svIndexes;
@@ -123,7 +123,7 @@ TransactionEngineResult TransactionEngine::dirDelete(
if (!sleNode)
{
std::cerr << "dirDelete: no such node" << std::endl;
Log(lsWARNING) << "dirDelete: no such node";
return terNODE_NOT_FOUND;
}
else
@@ -135,7 +135,7 @@ TransactionEngineResult TransactionEngine::dirDelete(
it = std::find(vuiIndexes.begin(), vuiIndexes.end(), uLedgerIndex);
if (vuiIndexes.end() == it)
{
std::cerr << "dirDelete: node not mentioned" << std::endl;
Log(lsWARNING) << "dirDelete: node not mentioned";
return terNODE_NOT_MENTIONED;
}
else
@@ -146,7 +146,7 @@ TransactionEngineResult TransactionEngine::dirDelete(
if (!sleRoot)
{
std::cerr << "dirDelete: root node is missing" << std::endl;
Log(lsWARNING) << "dirDelete: root node is missing";
return terNODE_NO_ROOT;
}
@@ -242,7 +242,7 @@ TransactionEngineResult TransactionEngine::setAuthorized(const SerializedTransac
if (!naAccountPublic.accountPublicVerify(Serializer::getSHA512Half(vucCipher), vucSignature))
{
std::cerr << "createGenerator: bad signature unauthorized generator claim" << std::endl;
Log(lsWARNING) << "createGenerator: bad signature unauthorized generator claim";
return tenBAD_GEN_AUTH;
}
@@ -254,7 +254,7 @@ TransactionEngineResult TransactionEngine::setAuthorized(const SerializedTransac
SLE::pointer sleGen = mLedger->getGenerator(qry, hGeneratorID);
if (!sleGen)
{
std::cerr << "createGenerator: creating generator" << std::endl;
Log(lsTRACE) << "createGenerator: creating generator";
// Create the generator.
sleGen = boost::make_shared<SerializedLedgerEntry>(ltGENERATOR_MAP);
@@ -268,7 +268,7 @@ TransactionEngineResult TransactionEngine::setAuthorized(const SerializedTransac
{
// Doing a claim. Must set generator.
// Generator is already in use. Regular passphrases limited to one wallet.
std::cerr << "createGenerator: generator already in use" << std::endl;
Log(lsWARNING) << "createGenerator: generator already in use";
return tenGEN_IN_USE;
}
@@ -288,7 +288,7 @@ TransactionEngineResult TransactionEngine::setAuthorized(const SerializedTransac
TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTransaction& txn,
TransactionEngineParams params, uint32 targetLedger)
{
std::cerr << "applyTransaction>" << std::endl;
Log(lsTRACE) << "applyTransaction>";
mLedger = mDefaultLedger;
assert(mLedger);
@@ -308,7 +308,7 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran
SerializedTransaction s2(sit);
if (!s2.isEquivalent(txn))
{
std::cerr << "Transaction serdes mismatch" << std::endl;
Log(lsFATAL) << "Transaction serdes mismatch";
Json::StyledStreamWriter ssw;
ssw.write(Log(lsINFO).ref(), txn.getJson(0));
ssw.write(Log(lsFATAL).ref(), s2.getJson(0));
@@ -322,7 +322,7 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran
uint256 txID = txn.getTransactionID();
if (!txID)
{
std::cerr << "applyTransaction: invalid transaction id" << std::endl;
Log(lsWARNING) << "applyTransaction: invalid transaction id";
result = tenINVALID;
}
@@ -344,7 +344,7 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran
// Consistency: really signed.
if (terSUCCESS == result && !txn.checkSign(naSigningPubKey))
{
std::cerr << "applyTransaction: Invalid transaction: bad signature" << std::endl;
Log(lsWARNING) << "applyTransaction: Invalid transaction: bad signature";
result = tenINVALID;
}
@@ -389,12 +389,12 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran
break;
case ttINVALID:
std::cerr << "applyTransaction: Invalid transaction: ttINVALID transaction type" << std::endl;
Log(lsWARNING) << "applyTransaction: Invalid transaction: ttINVALID transaction type";
result = tenINVALID;
break;
default:
std::cerr << "applyTransaction: Invalid transaction: unknown transaction type" << std::endl;
Log(lsWARNING) << "applyTransaction: Invalid transaction: unknown transaction type";
result = tenUNKNOWN;
break;
}
@@ -408,7 +408,7 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran
{
if (saPaid < saCost)
{
std::cerr << "applyTransaction: insufficient fee" << std::endl;
Log(lsINFO) << "applyTransaction: insufficient fee";
result = tenINSUF_FEE_P;
}
@@ -418,7 +418,7 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran
if (!saPaid.isZero())
{
// Transaction is malformed.
std::cerr << "applyTransaction: fee not allowed" << std::endl;
Log(lsWARNING) << "applyTransaction: fee not allowed";
result = tenINSUF_FEE_P;
}
@@ -429,7 +429,7 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran
uint160 srcAccountID = txn.getSourceAccount().getAccountID();
if (terSUCCESS == result && !srcAccountID)
{
std::cerr << "applyTransaction: bad source id" << std::endl;
Log(lsWARNING) << "applyTransaction: bad source id";
result = tenINVALID;
}
@@ -455,7 +455,8 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran
if (!sleSrc)
{
std::cerr << str(boost::format("applyTransaction: Delay transaction: source account does not exisit: %s") % txn.getSourceAccount().humanAccountID()) << std::endl;
Log(lsTRACE) << str(boost::format("applyTransaction: Delay transaction: source account does not exist: %s") %
txn.getSourceAccount().humanAccountID());
result = terNO_ACCOUNT;
}
@@ -473,7 +474,7 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran
case ttCLAIM:
if (bHaveAuthKey)
{
std::cerr << "applyTransaction: Account already claimed." << std::endl;
Log(lsWARNING) << "applyTransaction: Account already claimed.";
result = tenCLAIMED;
}
@@ -496,8 +497,8 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran
if (naSigningPubKey.getAccountID() != srcAccountID)
{
// Signing Pub Key must be for Source Account ID.
std::cerr << "sourceAccountID: " << naSigningPubKey.humanAccountID() << std::endl;
std::cerr << "txn accountID: " << txn.getSourceAccount().humanAccountID() << std::endl;
Log(lsWARNING) << "sourceAccountID: " << naSigningPubKey.humanAccountID();
Log(lsWARNING) << "txn accountID: " << txn.getSourceAccount().humanAccountID();
result = tenBAD_CLAIM_ID;
}
@@ -509,8 +510,8 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran
if (naSigningPubKey.getAccountID() != srcAccountID)
{
// Signing Pub Key must be for Source Account ID.
std::cerr << "sourceAccountID: " << naSigningPubKey.humanAccountID() << std::endl;
std::cerr << "txn accountID: " << txn.getSourceAccount().humanAccountID() << std::endl;
Log(lsWARNING) << "sourceAccountID: " << naSigningPubKey.humanAccountID();
Log(lsWARNING) << "txn accountID: " << txn.getSourceAccount().humanAccountID();
result = tenBAD_SET_ID;
}
@@ -573,12 +574,12 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran
else if (!saCost.isZero())
{
uint32 a_seq = sleSrc->getIFieldU32(sfSequence);
Log(lsINFO) << "Aseq=" << a_seq << ", Tseq=" << t_seq;
Log(lsTRACE) << "Aseq=" << a_seq << ", Tseq=" << t_seq;
if (t_seq != a_seq)
{
if (a_seq < t_seq)
{
std::cerr << "applyTransaction: future sequence number" << std::endl;
Log(lsTRACE) << "applyTransaction: future sequence number";
result = terPRE_SEQ;
}

View File

@@ -14,6 +14,7 @@
#include "RPC.h"
#include "BitcoinUtil.h"
#include "Config.h"
#include "Log.h"
using namespace boost;
using namespace boost::asio;
@@ -71,7 +72,7 @@ std::string rfc1123Time()
std::string HTTPReply(int nStatus, const std::string& strMsg)
{
std::cout << "HTTP Reply " << nStatus << " " << strMsg << std::endl;
Log(lsTRACE) << "HTTP Reply " << nStatus << " " << strMsg;
if (nStatus == 401)
return strprintf("HTTP/1.0 401 Authorization Required\r\n"