mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Report/track peer ledger changes.
This commit is contained in:
@@ -324,6 +324,19 @@ void NetworkOPs::switchLastClosedLedger(Ledger::pointer newLedger, bool normal)
|
|||||||
{ // this ledger has already closed
|
{ // this ledger has already closed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newcoin::TMStatusChange* s = new newcoin::TMStatusChange();
|
||||||
|
|
||||||
|
s->set_newevent(normal ? newcoin::neACCEPTED_LEDGER : newcoin::neSWITCHED_LEDGER);
|
||||||
|
s->set_ledgerseq(newLedger->getLedgerSeq());
|
||||||
|
s->set_networktime(getNetworkTimeNC());
|
||||||
|
|
||||||
|
uint256 lhash = newLedger->getHash();
|
||||||
|
s->set_ledgerhash(lhash.begin(), lhash.size());
|
||||||
|
lhash = newLedger->getParentHash();
|
||||||
|
s->set_previousledgerhash(lhash.begin(), lhash.size());
|
||||||
|
|
||||||
|
PackedMessage::pointer packet =
|
||||||
|
boost::make_shared<PackedMessage>(PackedMessage::MessagePointer(s), newcoin::mtSTATUS_CHANGE);
|
||||||
|
theApp->getConnectionPool().relayMessage(NULL, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: We have to tell peers when we change our active ledger
|
|
||||||
|
|||||||
55
src/Peer.cpp
55
src/Peer.cpp
@@ -34,7 +34,7 @@ void Peer::handle_write(const boost::system::error_code& error, size_t bytes_tra
|
|||||||
std::cerr << "Peer::handle_write bytes: "<< bytes_transferred << std::endl;
|
std::cerr << "Peer::handle_write bytes: "<< bytes_transferred << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
mSendingPacket=PackedMessage::pointer();
|
mSendingPacket = PackedMessage::pointer();
|
||||||
|
|
||||||
if(error)
|
if(error)
|
||||||
{
|
{
|
||||||
@@ -400,6 +400,17 @@ void Peer::processReadBuffer()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case newcoin::mtSTATUS_CHANGE:
|
||||||
|
{
|
||||||
|
newcoin::TMStatusChange msg;
|
||||||
|
if(msg.ParseFromArray(&mReadbuf[HEADER_SIZE], mReadbuf.size() - HEADER_SIZE))
|
||||||
|
recvStatus(msg);
|
||||||
|
else std::cerr << "parse error: " << type << std::endl;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
case newcoin::mtGET_LEDGER:
|
case newcoin::mtGET_LEDGER:
|
||||||
{
|
{
|
||||||
newcoin::TMGetLedger msg;
|
newcoin::TMGetLedger msg;
|
||||||
@@ -627,33 +638,49 @@ void Peer::recvAccount(newcoin::TMAccount& packet)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Peer::recvStatus(newcoin::TMStatusChange& packet)
|
||||||
|
{
|
||||||
|
if (packet.has_ledgerhash() && (packet.ledgerhash().size() == (256 / 8)))
|
||||||
|
{ // a peer has changed ledgers
|
||||||
|
if (packet.has_previousledgerhash() && (packet.previousledgerhash().size() == (256 / 8)))
|
||||||
|
memcpy(mPreviousLedgerHash.begin(), packet.previousledgerhash().data(), 256 / 8);
|
||||||
|
else
|
||||||
|
mPreviousLedgerHash = mClosedLedgerHash;
|
||||||
|
memcpy(mClosedLedgerHash.begin(), packet.ledgerhash().data(), 256 / 8);
|
||||||
|
if (packet.has_networktime())
|
||||||
|
mClosedLedgerTime = ptFromSeconds(packet.networktime());
|
||||||
|
else
|
||||||
|
mClosedLedgerTime = theApp->getOPs().getNetworkTimePT();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Peer::recvGetLedger(newcoin::TMGetLedger& packet)
|
void Peer::recvGetLedger(newcoin::TMGetLedger& packet)
|
||||||
{
|
{
|
||||||
// Figure out what ledger they want
|
// Figure out what ledger they want
|
||||||
Ledger::pointer ledger;
|
Ledger::pointer ledger;
|
||||||
if(packet.has_ledgerhash())
|
if (packet.has_ledgerhash())
|
||||||
{
|
{
|
||||||
uint256 ledgerhash;
|
uint256 ledgerhash;
|
||||||
if(packet.ledgerhash().size()!=32)
|
if (packet.ledgerhash().size() != 32)
|
||||||
{
|
{
|
||||||
punishPeer(PP_INVALID_REQUEST);
|
punishPeer(PP_INVALID_REQUEST);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
memcpy(&ledgerhash, packet.ledgerhash().data(), 32);
|
memcpy(&ledgerhash, packet.ledgerhash().data(), 32);
|
||||||
ledger=theApp->getMasterLedger().getLedgerByHash(ledgerhash);
|
ledger = theApp->getMasterLedger().getLedgerByHash(ledgerhash);
|
||||||
}
|
}
|
||||||
else if(packet.has_ledgerseq())
|
else if (packet.has_ledgerseq())
|
||||||
ledger=theApp->getMasterLedger().getLedgerBySeq(packet.ledgerseq());
|
ledger = theApp->getMasterLedger().getLedgerBySeq(packet.ledgerseq());
|
||||||
else if(packet.has_ltype() && (packet.ltype() == newcoin::ltCURRENT) )
|
else if (packet.has_ltype() && (packet.ltype() == newcoin::ltCURRENT))
|
||||||
ledger=theApp->getMasterLedger().getCurrentLedger();
|
ledger = theApp->getMasterLedger().getCurrentLedger();
|
||||||
else if(packet.has_ltype() && (packet.ltype() == newcoin::ltCLOSING) )
|
else if (packet.has_ltype() && (packet.ltype() == newcoin::ltCLOSING))
|
||||||
{
|
{
|
||||||
ledger = theApp->getMasterLedger().getClosedLedger();
|
ledger = theApp->getMasterLedger().getClosedLedger();
|
||||||
}
|
}
|
||||||
else if(packet.has_ltype() && (packet.ltype() == newcoin::ltCLOSED) )
|
else if (packet.has_ltype() && (packet.ltype() == newcoin::ltCLOSED) )
|
||||||
{
|
{
|
||||||
ledger = theApp->getMasterLedger().getClosedLedger();
|
ledger = theApp->getMasterLedger().getClosedLedger();
|
||||||
if(ledger && !ledger->isClosed())
|
if (ledger && !ledger->isClosed())
|
||||||
ledger = theApp->getMasterLedger().getLedgerBySeq(ledger->getLedgerSeq() - 1);
|
ledger = theApp->getMasterLedger().getLedgerBySeq(ledger->getLedgerSeq() - 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -669,8 +696,8 @@ void Peer::recvGetLedger(newcoin::TMGetLedger& packet)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Figure out what information they want
|
// Figure out what information they want
|
||||||
newcoin::TMLedgerData* data=new newcoin::TMLedgerData;
|
newcoin::TMLedgerData* data =new newcoin::TMLedgerData;
|
||||||
uint256 lHash=ledger->getHash();
|
uint256 lHash = ledger->getHash();
|
||||||
data->set_ledgerhash(lHash.begin(), lHash.size());
|
data->set_ledgerhash(lHash.begin(), lHash.size());
|
||||||
data->set_ledgerseq(ledger->getLedgerSeq());
|
data->set_ledgerseq(ledger->getLedgerSeq());
|
||||||
data->set_type(packet.itype());
|
data->set_type(packet.itype());
|
||||||
@@ -788,6 +815,8 @@ void Peer::sendHello()
|
|||||||
{
|
{
|
||||||
uint256 hash = closedLedger->getHash();
|
uint256 hash = closedLedger->getHash();
|
||||||
h->set_closedledger(hash.begin(), hash.GetSerializeSize());
|
h->set_closedledger(hash.begin(), hash.GetSerializeSize());
|
||||||
|
hash = closedLedger->getParentHash();
|
||||||
|
h->set_previousledger(hash.begin(), hash.GetSerializeSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
PackedMessage::pointer packet = boost::make_shared<PackedMessage>
|
PackedMessage::pointer packet = boost::make_shared<PackedMessage>
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ protected:
|
|||||||
void recvAccount(newcoin::TMAccount& packet);
|
void recvAccount(newcoin::TMAccount& packet);
|
||||||
void recvGetLedger(newcoin::TMGetLedger& packet);
|
void recvGetLedger(newcoin::TMGetLedger& packet);
|
||||||
void recvLedger(newcoin::TMLedgerData& packet);
|
void recvLedger(newcoin::TMLedgerData& packet);
|
||||||
|
void recvStatus(newcoin::TMStatusChange& packet);
|
||||||
|
|
||||||
void getSessionCookie(std::string& strDst);
|
void getSessionCookie(std::string& strDst);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user