From 3a2e770e526264c8bb738839315b6ff398d6eafe Mon Sep 17 00:00:00 2001 From: David Schwartz Date: Wed, 21 Aug 2013 16:26:02 -0700 Subject: [PATCH] Be more tolerant of corrupt peer entries. --- modules/ripple_app/peers/ripple_Peer.cpp | 21 ++++++++++++++------- modules/ripple_app/peers/ripple_Peers.cpp | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/modules/ripple_app/peers/ripple_Peer.cpp b/modules/ripple_app/peers/ripple_Peer.cpp index 6bbc33d48a..d808e22b0d 100644 --- a/modules/ripple_app/peers/ripple_Peer.cpp +++ b/modules/ripple_app/peers/ripple_Peer.cpp @@ -110,7 +110,7 @@ public: { if (!mHello.has_ipv4port() || mIpPortConnect.first.empty()) return false; - connect = boost::str(boost::format("%s:%d") % mIpPortConnect.first % mHello.ipv4port()); + connect = boost::str(boost::format("%s %d") % mIpPortConnect.first % mHello.ipv4port()); return true; } @@ -1495,7 +1495,6 @@ void PeerImp::recvGetContacts (protocol::TMGetContacts& packet) // Return a list of your favorite people // TODO: filter out all the LAN peers -// TODO: filter out the peer you are talking to void PeerImp::recvGetPeers (protocol::TMGetPeers& packet, Application::ScopedLockType& masterLockHolder) { masterLockHolder.unlock (); @@ -1512,12 +1511,20 @@ void PeerImp::recvGetPeers (protocol::TMGetPeers& packet, Application::ScopedLoc std::string strIP; int iPort; - splitIpPort (addrs[n], strIP, iPort); + try + { + splitIpPort (addrs[n], strIP, iPort); + // XXX This should also ipv6 + protocol::TMIPv4EndPoint* addr = peers.add_nodes (); + addr->set_ipv4 (inet_addr (strIP.c_str ())); + addr->set_ipv4port (iPort); + } + catch (...) + { + WriteLog (lsWARNING, Peer) << "Bad peer in list: " << addrs[n]; + } + - // XXX This should also ipv6 - protocol::TMIPv4EndPoint* addr = peers.add_nodes (); - addr->set_ipv4 (inet_addr (strIP.c_str ())); - addr->set_ipv4port (iPort); //WriteLog (lsINFO, Peer) << "Peer: Teaching: " << addressToString(this) << ": " << n << ": " << strIP << " " << iPort; } diff --git a/modules/ripple_app/peers/ripple_Peers.cpp b/modules/ripple_app/peers/ripple_Peers.cpp index f42c3c260b..3e0bc2fc46 100644 --- a/modules/ripple_app/peers/ripple_Peers.cpp +++ b/modules/ripple_app/peers/ripple_Peers.cpp @@ -127,7 +127,7 @@ private: void splitIpPort (const std::string& strIpPort, std::string& strIp, int& iPort) { std::vector vIpPort; - boost::split (vIpPort, strIpPort, boost::is_any_of (" ")); + boost::split (vIpPort, strIpPort, boost::is_any_of (" :")); strIp = vIpPort[0]; iPort = lexicalCastThrow (vIpPort[1]);