mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
bugfixes.
This commit is contained in:
@@ -123,8 +123,9 @@ void ConnectionPool::relayMessage(Peer* fromPeer, PackedMessage::pointer msg)
|
|||||||
BOOST_FOREACH(naPeer pair, mConnectedMap)
|
BOOST_FOREACH(naPeer pair, mConnectedMap)
|
||||||
{
|
{
|
||||||
Peer::pointer peer = pair.second;
|
Peer::pointer peer = pair.second;
|
||||||
|
if (!peer)
|
||||||
if(!fromPeer || !(peer.get() == fromPeer))
|
std::cerr << "CP::RM null peer in list" << std::endl;
|
||||||
|
else if (!fromPeer || !(peer.get() == fromPeer))
|
||||||
peer->sendPacket(msg);
|
peer->sendPacket(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -208,8 +209,9 @@ Json::Value ConnectionPool::getPeersJson()
|
|||||||
BOOST_FOREACH(naPeer pair, mConnectedMap)
|
BOOST_FOREACH(naPeer pair, mConnectedMap)
|
||||||
{
|
{
|
||||||
Peer::pointer peer = pair.second;
|
Peer::pointer peer = pair.second;
|
||||||
|
if (!peer)
|
||||||
ret.append(peer->getJson());
|
std::cerr << "CP::GPH null peer" << std::endl;
|
||||||
|
else ret.append(peer->getJson());
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@@ -218,10 +220,11 @@ Json::Value ConnectionPool::getPeersJson()
|
|||||||
std::vector<Peer::pointer> ConnectionPool::getPeerVector()
|
std::vector<Peer::pointer> ConnectionPool::getPeerVector()
|
||||||
{
|
{
|
||||||
std::vector<Peer::pointer> ret;
|
std::vector<Peer::pointer> ret;
|
||||||
ret.resize(mConnectedMap.size());
|
ret.reserve(mConnectedMap.size());
|
||||||
|
|
||||||
BOOST_FOREACH(naPeer pair, mConnectedMap)
|
BOOST_FOREACH(naPeer pair, mConnectedMap)
|
||||||
{
|
{
|
||||||
|
assert(!!pair.second);
|
||||||
ret.push_back(pair.second);
|
ret.push_back(pair.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,7 +237,7 @@ bool ConnectionPool::peerConnected(Peer::pointer peer, const NewcoinAddress& na)
|
|||||||
bool bSuccess;
|
bool bSuccess;
|
||||||
|
|
||||||
std::cerr << "ConnectionPool::peerConnected: " << na.humanNodePublic() << std::endl;
|
std::cerr << "ConnectionPool::peerConnected: " << na.humanNodePublic() << std::endl;
|
||||||
|
assert(!!peer);
|
||||||
if (na == theApp->getWallet().getNodePublic())
|
if (na == theApp->getWallet().getNodePublic())
|
||||||
{
|
{
|
||||||
std::cerr << "ConnectionPool::peerConnected: To self." << std::endl;
|
std::cerr << "ConnectionPool::peerConnected: To self." << std::endl;
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ AccountState::pointer NetworkOPs::getAccountState(const NewcoinAddress& accountI
|
|||||||
}
|
}
|
||||||
|
|
||||||
void NetworkOPs::setStateTimer(int sec)
|
void NetworkOPs::setStateTimer(int sec)
|
||||||
{
|
{ // set timer early if ledger is closing
|
||||||
uint64 closedTime = theApp->getMasterLedger().getCurrentLedger()->getCloseTimeNC();
|
uint64 closedTime = theApp->getMasterLedger().getCurrentLedger()->getCloseTimeNC();
|
||||||
uint64 now = getNetworkTimeNC();
|
uint64 now = getNetworkTimeNC();
|
||||||
|
|
||||||
@@ -215,15 +215,22 @@ void NetworkOPs::checkState()
|
|||||||
|
|
||||||
for (std::vector<Peer::pointer>::iterator it = peerList.begin(), end = peerList.end(); it != end; ++it)
|
for (std::vector<Peer::pointer>::iterator it = peerList.begin(), end = peerList.end(); it != end; ++it)
|
||||||
{
|
{
|
||||||
uint256 peerLedger = (*it)->getClosedLedgerHash();
|
if (!*it)
|
||||||
if (!!peerLedger)
|
|
||||||
{
|
{
|
||||||
// FIXME: If we have this ledger, don't count it if it's too far past its close time
|
std::cerr << "NOP::CS Dead pointer in peer list" << std::endl;
|
||||||
ValidationCount& vc = ledgers[peerLedger];
|
}
|
||||||
if ((vc.nodesUsing == 0) || ((*it)->getNodePublic() > vc.highNode))
|
else
|
||||||
vc.highNode = (*it)->getNodePublic();
|
{
|
||||||
++vc.nodesUsing;
|
uint256 peerLedger = (*it)->getClosedLedgerHash();
|
||||||
// WRITEME: Validations, trusted peers
|
if (!!peerLedger)
|
||||||
|
{
|
||||||
|
// FIXME: If we have this ledger, don't count it if it's too far past its close time
|
||||||
|
ValidationCount& vc = ledgers[peerLedger];
|
||||||
|
if ((vc.nodesUsing == 0) || ((*it)->getNodePublic() > vc.highNode))
|
||||||
|
vc.highNode = (*it)->getNodePublic();
|
||||||
|
++vc.nodesUsing;
|
||||||
|
// WRITEME: Validations, trusted peers
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,10 +254,15 @@ void NetworkOPs::checkState()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (switchLedgers)
|
if (switchLedgers)
|
||||||
{
|
{
|
||||||
std::cerr << "We are not running on the consensus ledger" << std::endl;
|
std::cerr << "We are not running on the consensus ledger" << std::endl;
|
||||||
if ( (mMode == omTRACKING) || (mMode == omFULL) ) mMode = omTRACKING;
|
#ifdef DEBUG
|
||||||
|
std::cerr << "Our LCL " << currentClosed->getHash().GetHex() << std::endl;
|
||||||
|
std::cerr << "Net LCL " << closedLedger.GetHex() << std::endl;
|
||||||
|
#endif
|
||||||
|
if ((mMode == omTRACKING) || (mMode == omFULL)) mMode = omTRACKING;
|
||||||
Ledger::pointer consensus = theApp->getMasterLedger().getLedgerByHash(closedLedger);
|
Ledger::pointer consensus = theApp->getMasterLedger().getLedgerByHash(closedLedger);
|
||||||
if (!consensus)
|
if (!consensus)
|
||||||
{
|
{
|
||||||
@@ -293,7 +305,7 @@ void NetworkOPs::checkState()
|
|||||||
}
|
}
|
||||||
|
|
||||||
Ledger::pointer currentLedger = theApp->getMasterLedger().getCurrentLedger();
|
Ledger::pointer currentLedger = theApp->getMasterLedger().getCurrentLedger();
|
||||||
if (getNetworkTimeNC() > currentLedger->getCloseTimeNC())
|
if (getNetworkTimeNC() >= currentLedger->getCloseTimeNC())
|
||||||
{
|
{
|
||||||
currentLedger->setClosed();
|
currentLedger->setClosed();
|
||||||
switchLastClosedLedger(currentLedger, true);
|
switchLastClosedLedger(currentLedger, true);
|
||||||
@@ -335,6 +347,11 @@ void NetworkOPs::switchLastClosedLedger(Ledger::pointer newLedger, bool normal)
|
|||||||
lhash = newLedger->getParentHash();
|
lhash = newLedger->getParentHash();
|
||||||
s->set_previousledgerhash(lhash.begin(), lhash.size());
|
s->set_previousledgerhash(lhash.begin(), lhash.size());
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
std::cerr << "Broadcasting ledger change" << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
PackedMessage::pointer packet =
|
PackedMessage::pointer packet =
|
||||||
boost::make_shared<PackedMessage>(PackedMessage::MessagePointer(s), newcoin::mtSTATUS_CHANGE);
|
boost::make_shared<PackedMessage>(PackedMessage::MessagePointer(s), newcoin::mtSTATUS_CHANGE);
|
||||||
theApp->getConnectionPool().relayMessage(NULL, packet);
|
theApp->getConnectionPool().relayMessage(NULL, packet);
|
||||||
|
|||||||
12
src/Peer.cpp
12
src/Peer.cpp
@@ -98,7 +98,7 @@ void Peer::handleVerifyTimer(const boost::system::error_code& ecResult)
|
|||||||
// Only takes IP addresses (not domains).
|
// Only takes IP addresses (not domains).
|
||||||
void Peer::connect(const std::string strIp, int iPort)
|
void Peer::connect(const std::string strIp, int iPort)
|
||||||
{
|
{
|
||||||
int iPortAct = iPort < 0 ? SYSTEM_PEER_PORT : iPort;
|
int iPortAct = (iPort <= 0) ? SYSTEM_PEER_PORT : iPort;
|
||||||
|
|
||||||
mClientConnect = true;
|
mClientConnect = true;
|
||||||
|
|
||||||
@@ -115,6 +115,7 @@ void Peer::connect(const std::string strIp, int iPort)
|
|||||||
{
|
{
|
||||||
std::cerr << "Peer::connect: Bad IP" << std::endl;
|
std::cerr << "Peer::connect: Bad IP" << std::endl;
|
||||||
detach();
|
detach();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -125,12 +126,13 @@ void Peer::connect(const std::string strIp, int iPort)
|
|||||||
{
|
{
|
||||||
std::cerr << "Peer::connect: Failed to set timer." << std::endl;
|
std::cerr << "Peer::connect: Failed to set timer." << std::endl;
|
||||||
detach();
|
detach();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!err)
|
if (!err)
|
||||||
{
|
{
|
||||||
std::cerr << "Peer::connect: Connectting: " << mIpPort.first << " " << mIpPort.second << std::endl;
|
std::cerr << "Peer::connect: Connecting: " << mIpPort.first << " " << mIpPort.second << std::endl;
|
||||||
|
|
||||||
boost::asio::async_connect(
|
boost::asio::async_connect(
|
||||||
mSocketSsl.lowest_layer(),
|
mSocketSsl.lowest_layer(),
|
||||||
@@ -640,6 +642,9 @@ void Peer::recvAccount(newcoin::TMAccount& packet)
|
|||||||
|
|
||||||
void Peer::recvStatus(newcoin::TMStatusChange& packet)
|
void Peer::recvStatus(newcoin::TMStatusChange& packet)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
std::cerr << "Received status change from peer" << std::endl;
|
||||||
|
#endif
|
||||||
if (packet.has_ledgerhash() && (packet.ledgerhash().size() == (256 / 8)))
|
if (packet.has_ledgerhash() && (packet.ledgerhash().size() == (256 / 8)))
|
||||||
{ // a peer has changed ledgers
|
{ // a peer has changed ledgers
|
||||||
if (packet.has_previousledgerhash() && (packet.previousledgerhash().size() == (256 / 8)))
|
if (packet.has_previousledgerhash() && (packet.previousledgerhash().size() == (256 / 8)))
|
||||||
@@ -651,6 +656,9 @@ void Peer::recvStatus(newcoin::TMStatusChange& packet)
|
|||||||
mClosedLedgerTime = ptFromSeconds(packet.networktime());
|
mClosedLedgerTime = ptFromSeconds(packet.networktime());
|
||||||
else
|
else
|
||||||
mClosedLedgerTime = theApp->getOPs().getNetworkTimePT();
|
mClosedLedgerTime = theApp->getOPs().getNetworkTimePT();
|
||||||
|
#ifdef DEBUG
|
||||||
|
std::cerr << "peer LCL is " << mClosedLedgerHash.GetHex() << std::endl;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user