void
OverlayManagerImpl::connectTo(PeerRecord& pr)
{
    if (pr.mPort == 0)
    {
        CLOG(ERROR, "Overlay") << "Invalid port: " << pr.toString();
        return;
    }

    if (!pr.mIP.size())
    {
        CLOG(ERROR, "Overlay") << "OverlayManagerImpl::connectTo Invalid IP ";
        return;
    }

    mConnectionsAttempted.Mark();
    if (!getConnectedPeer(pr.mIP, pr.mPort))
    {
        pr.backOff(mApp.getClock());
        pr.storePeerRecord(mApp.getDatabase());

        addConnectedPeer(TCPPeer::initiate(mApp, pr.mIP, pr.mPort));
    }
    else
    {
        CLOG(ERROR, "Overlay")
            << "trying to connect to a node we're already connected to"
            << pr.toString();
    }
}
void
OverlayManagerImpl::storeConfigPeers()
{
    // compute normalized mPreferredPeers
    std::vector<std::string> ppeers;
    for (auto const& s : mApp.getConfig().PREFERRED_PEERS)
    {
        PeerRecord pr;
        if (PeerRecord::parseIPPort(s, mApp, pr))
        {
            auto r = mPreferredPeers.insert(pr.toString());
            if (r.second)
            {
                ppeers.push_back(*r.first);
            }
        }
    }

    storePeerList(mApp.getConfig().KNOWN_PEERS, true);
    storePeerList(ppeers, true);
}