mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-12-20 21:34:31 -05:00
added server-based ip determination as a fallback to existing methods. Forced Dht publishing as soon as an external ip is known
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@1109 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
db74c9ef58
commit
e23bd13bc9
@ -26,6 +26,7 @@
|
||||
#include "pqi/p3connmgr.h"
|
||||
#include "pqi/p3dhtmgr.h" // Only need it for constants.
|
||||
#include "tcponudp/tou.h"
|
||||
#include "tcponudp/extaddrfinder.h"
|
||||
|
||||
#include "util/rsprint.h"
|
||||
#include "util/rsdebug.h"
|
||||
@ -122,6 +123,7 @@ p3ConnectMgr::p3ConnectMgr(p3AuthMgr *am)
|
||||
ownState.name = mAuthMgr->getName(ownState.id);
|
||||
ownState.netMode = RS_NET_MODE_UDP;
|
||||
}
|
||||
mExtAddrFinder = NULL ;
|
||||
|
||||
return;
|
||||
}
|
||||
@ -404,6 +406,9 @@ void p3ConnectMgr::netTick()
|
||||
|
||||
uint32_t netStatus = mNetStatus;
|
||||
|
||||
if(mExtAddrFinder == NULL)
|
||||
mExtAddrFinder = new ExtAddrFinder ;
|
||||
|
||||
connMtx.unlock(); /* UNLOCK MUTEX */
|
||||
|
||||
switch(netStatus)
|
||||
@ -572,7 +577,9 @@ void p3ConnectMgr::netUdpCheck()
|
||||
#ifdef CONN_DEBUG
|
||||
std::cerr << "p3ConnectMgr::netUdpCheck()" << std::endl;
|
||||
#endif
|
||||
if (udpExtAddressCheck() || (mUpnpAddrValid))
|
||||
struct sockaddr_in tmpip ;
|
||||
|
||||
if (udpExtAddressCheck() || (mUpnpAddrValid) || mExtAddrFinder->hasValidIP(&tmpip))
|
||||
{
|
||||
bool extValid = false;
|
||||
bool extAddrStable = false;
|
||||
@ -598,6 +605,13 @@ void p3ConnectMgr::netUdpCheck()
|
||||
extAddr = mStunExtAddr;
|
||||
extAddrStable = mStunAddrStable;
|
||||
}
|
||||
else if(mExtAddrFinder->hasValidIP(&tmpip))
|
||||
{
|
||||
extValid = true;
|
||||
extAddr = tmpip ;
|
||||
extAddr.sin_port = iaddr.sin_port ;
|
||||
extAddrStable = true;
|
||||
}
|
||||
|
||||
if (extValid)
|
||||
{
|
||||
|
@ -37,6 +37,8 @@
|
||||
|
||||
#include "util/rsthreads.h"
|
||||
|
||||
class ExtAddrFinder ;
|
||||
|
||||
/* RS_VIS_STATE_XXXX
|
||||
* determines how public this peer wants to be...
|
||||
*
|
||||
@ -347,6 +349,7 @@ private:
|
||||
|
||||
std::list<pqiMonitor *> clients;
|
||||
|
||||
ExtAddrFinder *mExtAddrFinder ;
|
||||
|
||||
/* external Address determination */
|
||||
bool mUpnpAddrValid, mStunAddrValid;
|
||||
|
@ -198,6 +198,7 @@ bool p3DhtMgr::setExternalInterface(
|
||||
ownEntry.raddr = raddr;
|
||||
ownEntry.type = type;
|
||||
ownEntry.state = DHT_PEER_ADDR_KNOWN; /* will force republish */
|
||||
ownEntry.lastTS = 0; /* will force republish */
|
||||
|
||||
#ifdef DHT_DEBUG
|
||||
std::cerr << "p3DhtMgr::setExternalInterface()";
|
||||
@ -224,6 +225,7 @@ bool p3DhtMgr::setExternalInterface(
|
||||
|
||||
dhtMtx.unlock(); /* UNLOCK MUTEX */
|
||||
|
||||
checkOwnDHTKeys();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -40,10 +40,11 @@
|
||||
#include <netinet/in.h>
|
||||
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
// #include <stdint.h>
|
||||
typedef int socklen_t;
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user