diff --git a/src/ConnectionPool.cpp b/src/ConnectionPool.cpp index 224331de27..90bae25ebc 100644 --- a/src/ConnectionPool.cpp +++ b/src/ConnectionPool.cpp @@ -1,9 +1,5 @@ #include "ConnectionPool.h" -#include "Config.h" -#include "Peer.h" -#include "Application.h" -#include "utils.h" #include #include @@ -11,6 +7,13 @@ #include #include +#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); } } diff --git a/src/Ledger.h b/src/Ledger.h index 64ae24a6d5..1f9c8b6c60 100644 --- a/src/Ledger.h +++ b/src/Ledger.h @@ -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 diff --git a/src/LedgerConsensus.cpp b/src/LedgerConsensus.cpp index 3193dd7582..a1aa85ef3e 100644 --- a/src/LedgerConsensus.cpp +++ b/src/LedgerConsensus.cpp @@ -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& added, const std::vector& 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 diff --git a/src/LedgerHistory.cpp b/src/LedgerHistory.cpp index ad357139ab..f20a7ae53a 100644 --- a/src/LedgerHistory.cpp +++ b/src/LedgerHistory.cpp @@ -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 diff --git a/src/LedgerMaster.cpp b/src/LedgerMaster.cpp index 3d1f1858c3..ea1b4bdce7 100644 --- a/src/LedgerMaster.cpp +++ b/src/LedgerMaster.cpp @@ -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); } diff --git a/src/Log.cpp b/src/Log.cpp index 5efe21a890..bdd56959b2 100644 --- a/src/Log.cpp +++ b/src/Log.cpp @@ -7,7 +7,7 @@ boost::recursive_mutex Log::sLock; -LogSeverity Log::sMinSeverity = lsWARNING; +LogSeverity Log::sMinSeverity = lsINFO; std::ofstream* Log::outStream = NULL; diff --git a/src/Peer.cpp b/src/Peer.cpp index 662e234192..df3ea8fa78 100644 --- a/src/Peer.cpp +++ b/src/Peer.cpp @@ -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()); } } } diff --git a/src/Peer.h b/src/Peer.h index 959876915e..d458b05886 100644 --- a/src/Peer.h +++ b/src/Peer.h @@ -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); diff --git a/src/RPCServer.cpp b/src/RPCServer.cpp index 0395d52a2a..b524681f6e 100644 --- a/src/RPCServer.cpp +++ b/src/RPCServer.cpp @@ -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; diff --git a/src/TransactionEngine.cpp b/src/TransactionEngine.cpp index 88b8efe05f..2235ff1bd4 100644 --- a/src/TransactionEngine.cpp +++ b/src/TransactionEngine.cpp @@ -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(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(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; } diff --git a/src/rpc.cpp b/src/rpc.cpp index b55ea15672..77a414cc4b 100644 --- a/src/rpc.cpp +++ b/src/rpc.cpp @@ -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"