small change in ext address detection

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@2477 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
joss17 2010-03-03 21:09:49 +00:00
parent 6ab15c8f83
commit 5ed5e8eb92
2 changed files with 29 additions and 21 deletions

View File

@ -790,18 +790,24 @@ void p3ConnectMgr::networkConsistencyCheck()
if (!doNetReset) {//set an external address. if ip adresses are different, let's use the stun address, then the extaddrfinder and then the upnp address. if (!doNetReset) {//set an external address. if ip adresses are different, let's use the stun address, then the extaddrfinder and then the upnp address.
struct sockaddr_in extAddr; struct sockaddr_in extAddr;
if (getUpnpExtAddress(extAddr)) { if (getExtFinderExtAddress(extAddr)) {
#ifdef CONN_DEBUG_TICK
std::cerr << "p3ConnectMgr::networkConsistencyCheck() using getUpnpExtAddress for ownState.serveraddr." << std::endl;
#endif
ownState.currentserveraddr = extAddr;
} else if (getExtFinderExtAddress(extAddr)) {
netExtFinderAddressCheck(); //so we put the extra address flag ok. netExtFinderAddressCheck(); //so we put the extra address flag ok.
#ifdef CONN_DEBUG_TICK #ifdef CONN_DEBUG_TICK
std::cerr << "p3ConnectMgr::networkConsistencyCheck() using getExtFinderExtAddress for ownState.serveraddr." << std::endl; std::cerr << "p3ConnectMgr::networkConsistencyCheck() using getExtFinderExtAddress for ownState.serveraddr." << std::endl;
#endif #endif
ownState.currentserveraddr = extAddr; ownState.currentserveraddr = extAddr;
} else if (getUpnpExtAddress(extAddr)) {
#ifdef CONN_DEBUG_TICK
std::cerr << "p3ConnectMgr::networkConsistencyCheck() using getUpnpExtAddress for ownState.serveraddr." << std::endl;
#endif
ownState.currentserveraddr = extAddr;
} else { } else {
//try to extract ext address from our own ip address list
IpAddressTimed extractedAddress;
if (peerConnectState::extractExtAddress(ownState.getIpAddressList(), extractedAddress)) {
ownState.currentserveraddr = extractedAddress.ipAddr;
}
//check if a peer is connected, if yes don't do a net reset //check if a peer is connected, if yes don't do a net reset
bool is_connected = false; bool is_connected = false;
std::map<std::string, peerConnectState>::iterator it; std::map<std::string, peerConnectState>::iterator it;

View File

@ -550,21 +550,23 @@ void p3disc::recvPeerDetails(RsDiscReply *item)
mConnMgr->setLocation(pitem->pid, pitem->location); mConnMgr->setLocation(pitem->pid, pitem->location);
} }
} }
} else {
if (pitem->currentremoteaddr.sin_addr.s_addr != 0 && pitem->currentremoteaddr.sin_port != 0 && //useless, we will exploit the list in the connect manager
pitem->currentremoteaddr.sin_addr.s_addr != 1 && pitem->currentremoteaddr.sin_port != 1 && // } else {
std::string(inet_ntoa(pitem->currentremoteaddr.sin_addr)) != "1.1.1.1" && // if (pitem->currentremoteaddr.sin_addr.s_addr != 0 && pitem->currentremoteaddr.sin_port != 0 &&
(!isLoopbackNet(&pitem->currentremoteaddr.sin_addr)) && // pitem->currentremoteaddr.sin_addr.s_addr != 1 && pitem->currentremoteaddr.sin_port != 1 &&
(!isPrivateNet(&pitem->currentremoteaddr.sin_addr)) // std::string(inet_ntoa(pitem->currentremoteaddr.sin_addr)) != "1.1.1.1" &&
) { // (!isLoopbackNet(&pitem->currentremoteaddr.sin_addr)) &&
//the current server address given by the peer looks nice, let's use it for our own ext address if needed // (!isPrivateNet(&pitem->currentremoteaddr.sin_addr))
sockaddr_in tempAddr; // ) {
if (!mConnMgr->getExtFinderExtAddress(tempAddr) && !mConnMgr->getUpnpExtAddress(tempAddr)) { // //the current server address given by the peer looks nice, let's use it for our own ext address if needed
//don't change the port, just the ip // sockaddr_in tempAddr;
pitem->currentremoteaddr.sin_port = mConnMgr->ownState.currentserveraddr.sin_port; // if (!mConnMgr->getExtFinderExtAddress(tempAddr) && !mConnMgr->getUpnpExtAddress(tempAddr)) {
mConnMgr->setExtAddress(mConnMgr->getOwnId(), pitem->currentremoteaddr); // //don't change the port, just the ip
} // pitem->currentremoteaddr.sin_port = mConnMgr->ownState.currentserveraddr.sin_port;
} // mConnMgr->setExtAddress(mConnMgr->getOwnId(), pitem->currentremoteaddr);
// }
// }
} }
//allways update address list //allways update address list
mConnMgr->setAddressList(pitem->pid, pitem->ipAddressList); mConnMgr->setAddressList(pitem->pid, pitem->ipAddressList);