mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-02-25 17:21:27 -05:00
sorting of ip addresses before use, to test the most recent ones first
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.4.x@1827 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
d673c55c98
commit
2fd09506bc
@ -1355,8 +1355,6 @@ void p3ConnectMgr::getOthersList(std::list<std::string> &peers)
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool p3ConnectMgr::connectAttempt(std::string id, struct sockaddr_in &addr,
|
||||
uint32_t &delay, uint32_t &period, uint32_t &type)
|
||||
|
||||
@ -1387,17 +1385,29 @@ bool p3ConnectMgr::connectAttempt(std::string id, struct sockaddr_in &addr,
|
||||
return false;
|
||||
}
|
||||
|
||||
// Sort addresses by reverse time stamp, so as to use the most relevant one first.
|
||||
|
||||
std::list<peerConnectAddress>::iterator it2(it->second.connAddrs.begin()), best_it(it->second.connAddrs.begin()) ;
|
||||
|
||||
for(;it2!=it->second.connAddrs.end();++it2)
|
||||
{
|
||||
std::cerr << "Examining " << inet_ntoa((*it2).addr.sin_addr) << ", time stamp = " << (*it2).ts << std::endl ;
|
||||
|
||||
if( (*it2).ts > (*best_it).ts)
|
||||
best_it = it2 ;
|
||||
}
|
||||
|
||||
it->second.lastattempt = time(NULL); /* time of last connect attempt */
|
||||
it->second.inConnAttempt = true;
|
||||
it->second.currentConnAddr = it->second.connAddrs.front();
|
||||
it->second.connAddrs.pop_front();
|
||||
it->second.currentConnAddr = *best_it ;
|
||||
it->second.connAddrs.erase(best_it) ;
|
||||
|
||||
addr = it->second.currentConnAddr.addr;
|
||||
delay = it->second.currentConnAddr.delay;
|
||||
period = it->second.currentConnAddr.period;
|
||||
type = it->second.currentConnAddr.type;
|
||||
|
||||
#ifdef CONN_DEBUG
|
||||
//#ifdef CONN_DEBUG
|
||||
std::cerr << "p3ConnectMgr::connectAttempt() Success: ";
|
||||
std::cerr << " id: " << id;
|
||||
std::cerr << std::endl;
|
||||
@ -1407,7 +1417,7 @@ bool p3ConnectMgr::connectAttempt(std::string id, struct sockaddr_in &addr,
|
||||
std::cerr << " period: " << period;
|
||||
std::cerr << " type: " << type;
|
||||
std::cerr << std::endl;
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -248,13 +248,15 @@ bool p3Peers::isFriend(std::string id)
|
||||
return false;
|
||||
}
|
||||
|
||||
static struct sockaddr_in getPreferredAddress( const struct sockaddr_in& addr1,time_t ts1,
|
||||
static struct sockaddr_in getPreferredAddress( const struct sockaddr_in& addr0,time_t ts0,
|
||||
const struct sockaddr_in& addr1,time_t ts1,
|
||||
const struct sockaddr_in& addr2,time_t ts2,
|
||||
const struct sockaddr_in& addr3,time_t ts3)
|
||||
{
|
||||
time_t ts = ts1 ;
|
||||
struct sockaddr_in addr = addr1 ;
|
||||
time_t ts = ts0 ;
|
||||
struct sockaddr_in addr = addr0 ;
|
||||
|
||||
if(ts1 > ts && strcmp(inet_ntoa(addr1.sin_addr),"0.0.0.0")) { ts = ts1 ; addr = addr1 ; }
|
||||
if(ts2 > ts && strcmp(inet_ntoa(addr2.sin_addr),"0.0.0.0")) { ts = ts2 ; addr = addr2 ; }
|
||||
if(ts3 > ts && strcmp(inet_ntoa(addr3.sin_addr),"0.0.0.0")) { ts = ts3 ; addr = addr3 ; }
|
||||
|
||||
@ -315,8 +317,8 @@ bool p3Peers::getPeerDetails(std::string id, RsPeerDetails &d)
|
||||
}
|
||||
|
||||
// From all addresses, show the most recent one if no address is currently in use.
|
||||
struct sockaddr_in best_local_addr = (!strcmp(inet_ntoa(pcs.localaddr.sin_addr),"0.0.0.0"))?getPreferredAddress(pcs.dht.laddr,pcs.dht.ts,pcs.disc.laddr,pcs.disc.ts,pcs.peer.laddr,pcs.peer.ts):pcs.localaddr ;
|
||||
struct sockaddr_in best_servr_addr = (!strcmp(inet_ntoa(pcs.serveraddr.sin_addr),"0.0.0.0"))?getPreferredAddress(pcs.dht.raddr,pcs.dht.ts,pcs.disc.raddr,pcs.disc.ts,pcs.peer.raddr,pcs.peer.ts):pcs.serveraddr ;
|
||||
struct sockaddr_in best_local_addr = getPreferredAddress(pcs.localaddr,pcs.lastcontact,pcs.dht.laddr,pcs.dht.ts,pcs.disc.laddr,pcs.disc.ts,pcs.peer.laddr,pcs.peer.ts);
|
||||
struct sockaddr_in best_servr_addr = getPreferredAddress(pcs.serveraddr,pcs.lastcontact,pcs.dht.raddr,pcs.dht.ts,pcs.disc.raddr,pcs.disc.ts,pcs.peer.raddr,pcs.peer.ts);
|
||||
|
||||
/* fill from pcs */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user