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)
|
||||
{
|
||||
Peer::pointer peer = pair.second;
|
||||
|
||||
if(!fromPeer || !(peer.get() == fromPeer))
|
||||
if (!peer)
|
||||
std::cerr << "CP::RM null peer in list" << std::endl;
|
||||
else if (!fromPeer || !(peer.get() == fromPeer))
|
||||
peer->sendPacket(msg);
|
||||
}
|
||||
}
|
||||
@@ -208,8 +209,9 @@ Json::Value ConnectionPool::getPeersJson()
|
||||
BOOST_FOREACH(naPeer pair, mConnectedMap)
|
||||
{
|
||||
Peer::pointer peer = pair.second;
|
||||
|
||||
ret.append(peer->getJson());
|
||||
if (!peer)
|
||||
std::cerr << "CP::GPH null peer" << std::endl;
|
||||
else ret.append(peer->getJson());
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -218,10 +220,11 @@ Json::Value ConnectionPool::getPeersJson()
|
||||
std::vector<Peer::pointer> ConnectionPool::getPeerVector()
|
||||
{
|
||||
std::vector<Peer::pointer> ret;
|
||||
ret.resize(mConnectedMap.size());
|
||||
ret.reserve(mConnectedMap.size());
|
||||
|
||||
BOOST_FOREACH(naPeer pair, mConnectedMap)
|
||||
{
|
||||
assert(!!pair.second);
|
||||
ret.push_back(pair.second);
|
||||
}
|
||||
|
||||
@@ -234,7 +237,7 @@ bool ConnectionPool::peerConnected(Peer::pointer peer, const NewcoinAddress& na)
|
||||
bool bSuccess;
|
||||
|
||||
std::cerr << "ConnectionPool::peerConnected: " << na.humanNodePublic() << std::endl;
|
||||
|
||||
assert(!!peer);
|
||||
if (na == theApp->getWallet().getNodePublic())
|
||||
{
|
||||
std::cerr << "ConnectionPool::peerConnected: To self." << std::endl;
|
||||
|
||||
@@ -156,7 +156,7 @@ AccountState::pointer NetworkOPs::getAccountState(const NewcoinAddress& accountI
|
||||
}
|
||||
|
||||
void NetworkOPs::setStateTimer(int sec)
|
||||
{
|
||||
{ // set timer early if ledger is closing
|
||||
uint64 closedTime = theApp->getMasterLedger().getCurrentLedger()->getCloseTimeNC();
|
||||
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)
|
||||
{
|
||||
uint256 peerLedger = (*it)->getClosedLedgerHash();
|
||||
if (!!peerLedger)
|
||||
if (!*it)
|
||||
{
|
||||
// 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
|
||||
std::cerr << "NOP::CS Dead pointer in peer list" << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
uint256 peerLedger = (*it)->getClosedLedgerHash();
|
||||
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)
|
||||
{
|
||||
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);
|
||||
if (!consensus)
|
||||
{
|
||||
@@ -293,7 +305,7 @@ void NetworkOPs::checkState()
|
||||
}
|
||||
|
||||
Ledger::pointer currentLedger = theApp->getMasterLedger().getCurrentLedger();
|
||||
if (getNetworkTimeNC() > currentLedger->getCloseTimeNC())
|
||||
if (getNetworkTimeNC() >= currentLedger->getCloseTimeNC())
|
||||
{
|
||||
currentLedger->setClosed();
|
||||
switchLastClosedLedger(currentLedger, true);
|
||||
@@ -335,6 +347,11 @@ void NetworkOPs::switchLastClosedLedger(Ledger::pointer newLedger, bool normal)
|
||||
lhash = newLedger->getParentHash();
|
||||
s->set_previousledgerhash(lhash.begin(), lhash.size());
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
std::cerr << "Broadcasting ledger change" << std::endl;
|
||||
#endif
|
||||
|
||||
PackedMessage::pointer packet =
|
||||
boost::make_shared<PackedMessage>(PackedMessage::MessagePointer(s), newcoin::mtSTATUS_CHANGE);
|
||||
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).
|
||||
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;
|
||||
|
||||
@@ -115,6 +115,7 @@ void Peer::connect(const std::string strIp, int iPort)
|
||||
{
|
||||
std::cerr << "Peer::connect: Bad IP" << std::endl;
|
||||
detach();
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -125,12 +126,13 @@ void Peer::connect(const std::string strIp, int iPort)
|
||||
{
|
||||
std::cerr << "Peer::connect: Failed to set timer." << std::endl;
|
||||
detach();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
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(
|
||||
mSocketSsl.lowest_layer(),
|
||||
@@ -640,6 +642,9 @@ void Peer::recvAccount(newcoin::TMAccount& 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)))
|
||||
{ // a peer has changed ledgers
|
||||
if (packet.has_previousledgerhash() && (packet.previousledgerhash().size() == (256 / 8)))
|
||||
@@ -651,6 +656,9 @@ void Peer::recvStatus(newcoin::TMStatusChange& packet)
|
||||
mClosedLedgerTime = ptFromSeconds(packet.networktime());
|
||||
else
|
||||
mClosedLedgerTime = theApp->getOPs().getNetworkTimePT();
|
||||
#ifdef DEBUG
|
||||
std::cerr << "peer LCL is " << mClosedLedgerHash.GetHex() << std::endl;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user