diff --git a/libretroshare/src/pqi/p3connmgr.cc b/libretroshare/src/pqi/p3connmgr.cc index e53e3d4a0..e72e0b817 100644 --- a/libretroshare/src/pqi/p3connmgr.cc +++ b/libretroshare/src/pqi/p3connmgr.cc @@ -1597,7 +1597,7 @@ bool p3ConnectMgr::connectResult(std::string id, bool success, uint32_t flags) //TODO : we update both internal and external tcp adress, we should try to determinate wich one was use for this connection bool found = false; std::list::iterator ipListIt; - for (ipListIt = it->second.remoteaddrList.begin(); ipListIt!=(it->second.remoteaddrList.end()); ipListIt++) { + for (ipListIt = it->second.ipAddressList.begin(); ipListIt!=(it->second.ipAddressList.end()); ipListIt++) { if (ipListIt->ipAddr.sin_addr.s_addr == it->second.currentserveraddr.sin_addr.s_addr && ipListIt->ipAddr.sin_port == it->second.currentserveraddr.sin_port) { #ifdef CONN_DEBUG std::cerr << "p3ConnectMgr::connectResult() remote ip found in the list. Update seen time for : "; @@ -1623,12 +1623,12 @@ bool p3ConnectMgr::connectResult(std::string id, bool success, uint32_t flags) std::cerr << ":" << ntohs(it->second.currentserveraddr.sin_port); std::cerr << std::endl; #endif - it->second.remoteaddrList.push_back(ipAdress); + it->second.ipAddressList.push_back(ipAdress); } //check if the list contains the current local address of the connected peer found = false; - for (ipListIt = it->second.remoteaddrList.begin(); ipListIt!=(it->second.remoteaddrList.end()); ipListIt++) { + for (ipListIt = it->second.ipAddressList.begin(); ipListIt!=(it->second.ipAddressList.end()); ipListIt++) { if (ipListIt->ipAddr.sin_addr.s_addr == it->second.currentlocaladdr.sin_addr.s_addr && ipListIt->ipAddr.sin_port == it->second.currentlocaladdr.sin_port) { #ifdef CONN_DEBUG std::cerr << "p3ConnectMgr::connectResult() remote ip found in the list. Update seen time for : "; @@ -1653,15 +1653,15 @@ bool p3ConnectMgr::connectResult(std::string id, bool success, uint32_t flags) std::cerr << ":" << ntohs(it->second.currentlocaladdr.sin_port); std::cerr << std::endl; #endif - it->second.remoteaddrList.push_back(ipAdress); + it->second.ipAddressList.push_back(ipAdress); } #ifdef CONN_DEBUG std::cerr << "p3ConnectMgr::connectResult() current ip list for the peer : " << id; - std::cerr << ", size : " << it->second.remoteaddrList.size(); + std::cerr << ", size : " << it->second.ipAddressList.size(); std::cerr << ", adresses : " << std::endl; #endif - for (ipListIt = it->second.remoteaddrList.begin(); ipListIt!=(it->second.remoteaddrList.end()); ipListIt++) { + for (ipListIt = it->second.ipAddressList.begin(); ipListIt!=(it->second.ipAddressList.end()); ipListIt++) { #ifdef CONN_DEBUG std::cerr << inet_ntoa(ipListIt->ipAddr.sin_addr); std::cerr << ":" << ntohs(ipListIt->ipAddr.sin_port); @@ -1999,7 +1999,7 @@ void p3ConnectMgr::peerStatus(std::string id, tcp_delay = P3CONNMGR_TCP_DEFAULT_DELAY; } - /* if address is same -> try local */ + /* if address is same net -> try local */ if ((isValidNet(&(details.laddr.sin_addr))) && (sameNet(&(ownState.currentlocaladdr.sin_addr), &(details.laddr.sin_addr)))) @@ -2954,7 +2954,7 @@ bool p3ConnectMgr::setAddressList(std::string id, std::list I } /* "it" points to peer */ - it->second.remoteaddrList = IpAddressTimedList; + it->second.ipAddressList = IpAddressTimedList; IndicateConfigChanged(); /**** INDICATE MSG CONFIG CHANGED! *****/ return true; @@ -3247,19 +3247,9 @@ std::list p3ConnectMgr::saveList(bool &cleanup) item->visState = ownState.visState; item->lastContact = ownState.lastcontact; - std::list tempLocaladdrList; - struct IpAddressTimed locaIp; - locaIp.ipAddr = ownState.currentlocaladdr; - locaIp.seenTime = time(NULL); - tempLocaladdrList.push_back(locaIp); - item->localaddrList = tempLocaladdrList; - - std::list tempRemoteaddrList; - struct IpAddressTimed remoteIp; - remoteIp.ipAddr = ownState.currentserveraddr; - remoteIp.seenTime = time(NULL); - tempRemoteaddrList.push_back(remoteIp); - item->remoteaddrList = tempRemoteaddrList; + item->currentlocaladdr = ownState.currentlocaladdr; + item->currentremoteaddr = ownState.currentserveraddr; + item->ipAddressList = ownState.ipAddressList; #ifdef CONN_DEBUG std::cerr << "p3ConnectMgr::saveList() Own Config Item:"; @@ -3282,9 +3272,8 @@ std::list p3ConnectMgr::saveList(bool &cleanup) item->visState = (it->second).visState; item->lastContact = (it->second).lastcontact; item->currentlocaladdr = (it->second).currentlocaladdr; - item->currentremoteaddr = (it->second).currentserveraddr; - item->localaddrList = (it->second).localaddrList; - item->remoteaddrList = (it->second).remoteaddrList; + item->currentremoteaddr = (it->second).currentserveraddr; + item->ipAddressList = (it->second).ipAddressList; saveData.push_back(item); #ifdef CONN_DEBUG @@ -3371,7 +3360,7 @@ bool p3ConnectMgr::loadList(std::list load) addFriend(pitem->pid, pitem->netMode, pitem->visState, pitem->lastContact); setLocalAddress(pitem->pid, pitem->currentlocaladdr); setExtAddress(pitem->pid, pitem->currentremoteaddr); - setAddressList(pitem->pid, pitem->remoteaddrList); + setAddressList(pitem->pid, pitem->ipAddressList); } } else if (sitem) diff --git a/libretroshare/src/pqi/p3connmgr.h b/libretroshare/src/pqi/p3connmgr.h index 8d5cd14bd..5b868153a 100644 --- a/libretroshare/src/pqi/p3connmgr.h +++ b/libretroshare/src/pqi/p3connmgr.h @@ -83,6 +83,7 @@ const uint32_t RS_NET_CONN_UDP_ALL = 0x00f0; const uint32_t RS_NET_CONN_TCP_LOCAL = 0x0001; const uint32_t RS_NET_CONN_TCP_EXTERNAL = 0x0002; +const uint32_t RS_NET_CONN_TCP_UNKNOW_TOPOLOGY = 0x0003; const uint32_t RS_NET_CONN_UDP_DHT_SYNC = 0x0010; const uint32_t RS_NET_CONN_UDP_PEER_SYNC = 0x0020; /* coming soon */ @@ -136,9 +137,10 @@ class peerConnectState uint32_t netMode; /* EXT / UPNP / UDP / INVALID */ uint32_t visState; /* STD, GRAY, DARK */ - //used to store friends ip lists - std::list localaddrList; - std::list remoteaddrList; + //used to store friends ip lists + std::list ipAddressList; + void sortIpAdressList(); //Sort the ip list ordering by seen time + void purgeIpAdressList(); //purge old addresses to keep a small list //used to store current ip (for config and connection management) struct sockaddr_in currentlocaladdr; /* Mandatory */ diff --git a/libretroshare/src/serialiser/rsconfigitems.cc b/libretroshare/src/serialiser/rsconfigitems.cc index 941178565..e60072998 100644 --- a/libretroshare/src/serialiser/rsconfigitems.cc +++ b/libretroshare/src/serialiser/rsconfigitems.cc @@ -764,7 +764,7 @@ uint32_t RsPeerConfigSerialiser::sizeNet(RsPeerNetItem *i) s += GetTlvIpAddrPortV4Size(); /* remoteaddr */ //add the size of the ip list - int ipListSize = i->remoteaddrList.size(); + int ipListSize = i->ipAddressList.size(); s += ipListSize * GetTlvIpAddrPortV4Size(); s += ipListSize * 8; //size of an uint64 @@ -806,7 +806,7 @@ bool RsPeerConfigSerialiser::serialiseNet(RsPeerNetItem *item, void *data, uint3 //store the ip list std::list::iterator ipListIt; - for (ipListIt = item->remoteaddrList.begin(); ipListIt!=(item->remoteaddrList.end()); ipListIt++) { + for (ipListIt = item->ipAddressList.begin(); ipListIt!=(item->ipAddressList.end()); ipListIt++) { ok &= SetTlvIpAddrPortV4(data, tlvsize, &offset, TLV_TYPE_IPV4_REMOTE, &(ipListIt->ipAddr)); ok &= setRawUInt64(data, tlvsize, &offset, ipListIt->seenTime); } @@ -872,7 +872,7 @@ RsPeerNetItem *RsPeerConfigSerialiser::deserialiseNet(void *data, uint32_t *size ipTimed.seenTime = time; ipTimedList.push_back(ipTimed); } - item->remoteaddrList = ipTimedList; + item->ipAddressList = ipTimedList; if (offset != rssize) { diff --git a/libretroshare/src/serialiser/rsconfigitems.h b/libretroshare/src/serialiser/rsconfigitems.h index c4cfda8e6..230de4f5f 100644 --- a/libretroshare/src/serialiser/rsconfigitems.h +++ b/libretroshare/src/serialiser/rsconfigitems.h @@ -76,8 +76,7 @@ std::ostream &print(std::ostream &out, uint16_t indent = 0); struct sockaddr_in currentlocaladdr; /* Mandatory */ struct sockaddr_in currentremoteaddr; /* Mandatory */ - std::list localaddrList; - std::list remoteaddrList; + std::list ipAddressList; }; class RsPeerStunItem: public RsItem diff --git a/libretroshare/src/serialiser/rsdiscitems.h b/libretroshare/src/serialiser/rsdiscitems.h index 4924da2c4..dc9a255f5 100644 --- a/libretroshare/src/serialiser/rsdiscitems.h +++ b/libretroshare/src/serialiser/rsdiscitems.h @@ -82,8 +82,7 @@ virtual void clear(); virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); //use for transmitting peer adress list - std::list localaddrList; - std::list remoteaddrList; + std::list ipAddressList; //use for transmitting my own adress list struct sockaddr_in currentladdr; diff --git a/libretroshare/src/services/p3disc.cc b/libretroshare/src/services/p3disc.cc index 3c4b7a9b5..2f50937ee 100644 --- a/libretroshare/src/services/p3disc.cc +++ b/libretroshare/src/services/p3disc.cc @@ -431,8 +431,7 @@ void p3disc::sendPeerDetails(std::string to, std::string about) di -> aboutId = about; // set the server address. - di -> localaddrList = detail.localaddrList; - di -> remoteaddrList = detail.remoteaddrList; + di -> ipAddressList = detail.ipAddressList; if (detail.state & RS_PEER_S_CONNECTED) {