Massive commit - changing from sockaddr_in => sockaddr_storage.

In preparation for making RS support IPv6.

NB: This breaks the build of retroshare-gui, as the
sockaddr_storage_xxx fns are only defined as prototypes for now.

All the aux libraries like udp / stun / tcponudp / dht have still to be converted.

These changes will probably break various things and need to be tested thoroughly.




git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.6-initdev@6735 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
drbob 2013-09-13 14:35:19 +00:00
parent fd071161bf
commit 6290d8fed9
66 changed files with 1182 additions and 1046 deletions

View file

@ -349,7 +349,7 @@ bool p3BitDht::dropPeer(std::string pid)
/* extract current peer status */
bool p3BitDht::getPeerStatus(std::string id,
struct sockaddr_in &/*laddr*/, struct sockaddr_in &/*raddr*/,
struct sockaddr_storage &/*laddr*/, struct sockaddr_storage &/*raddr*/,
uint32_t &/*type*/, uint32_t &/*mode*/)
{
/* remove unused parameter warnings */
@ -363,7 +363,7 @@ bool p3BitDht::getPeerStatus(std::string id,
return false;
}
bool p3BitDht::getExternalInterface(struct sockaddr_in &/*raddr*/,
bool p3BitDht::getExternalInterface(struct sockaddr_storage &/*raddr*/,
uint32_t &/*mode*/)
{

View file

@ -197,8 +197,8 @@ virtual bool getNetworkStats(uint32_t &netsize, uint32_t &localnetsize);
virtual bool findPeer(std::string id);
virtual bool dropPeer(std::string id);
virtual int addBadPeer(const struct sockaddr_in &addr, uint32_t reason, uint32_t flags, uint32_t age);
virtual int addKnownPeer(const std::string &pid, const struct sockaddr_in &addr, uint32_t flags);
virtual int addBadPeer(const struct sockaddr_storage &addr, uint32_t reason, uint32_t flags, uint32_t age);
virtual int addKnownPeer(const std::string &pid, const struct sockaddr_storage &addr, uint32_t flags);
//virtual int addFriend(const std::string pid);
//virtual int addFriendOfFriend(const std::string pid);
//virtual int addOther(const std::string pid);
@ -208,10 +208,10 @@ virtual void ConnectionFeedback(std::string pid, int state);
/* extract current peer status */
virtual bool getPeerStatus(std::string id,
struct sockaddr_in &laddr, struct sockaddr_in &raddr,
struct sockaddr_storage &laddr, struct sockaddr_storage &raddr,
uint32_t &type, uint32_t &mode);
virtual bool getExternalInterface(struct sockaddr_in &raddr,
virtual bool getExternalInterface(struct sockaddr_storage &raddr,
uint32_t &mode);

View file

@ -72,7 +72,13 @@ int p3BitDht::InfoCallback(const bdId *id, uint32_t /*type*/, uint32_t /*flags*/
if (mPeerSharer)
{
mPeerSharer->updatePeer(rsid, addr, outtype, outreason, outage);
struct sockaddr_storage tmpaddr;
struct sockaddr_in *ap = (struct sockaddr_in *) &tmpaddr;
ap->sin_family = AF_INET;
ap->sin_addr = addr.sin_addr;
ap->sin_port = addr.sin_port;
mPeerSharer->updatePeer(rsid, tmpaddr, outtype, outreason, outage);
}
/* call to the Stunners to drop the address as well */
@ -1768,14 +1774,25 @@ int p3BitDht::checkConnectionAllowed(const bdId *peerId, int mode)
*/
void p3BitDht::ConnectCalloutTCPAttempt(const std::string &peerId, struct sockaddr_in raddr)
void p3BitDht::ConnectCalloutTCPAttempt(const std::string &peerId, struct sockaddr_in raddrv4)
{
struct sockaddr_in proxyaddr;
struct sockaddr_in srcaddr;
sockaddr_clear(&proxyaddr);
sockaddr_clear(&srcaddr);
struct sockaddr_storage raddr;
struct sockaddr_storage proxyaddr;
struct sockaddr_storage srcaddr;
sockaddr_storage_clear(proxyaddr);
sockaddr_storage_clear(proxyaddr);
sockaddr_storage_clear(srcaddr);
struct sockaddr_in *rap = (struct sockaddr_in *) &raddr;
struct sockaddr_in *pap = (struct sockaddr_in *) &proxyaddr;
struct sockaddr_in *sap = (struct sockaddr_in *) &srcaddr;
// only one to translate
rap->sin_family = AF_INET;
rap->sin_addr = raddrv4.sin_addr;
rap->sin_port = raddrv4.sin_port;
uint32_t source = RS_CB_DHT;
uint32_t connectFlags = RS_CB_FLAG_ORDER_UNSPEC | RS_CB_FLAG_MODE_TCP;
uint32_t delay = 0;
@ -1785,14 +1802,25 @@ void p3BitDht::ConnectCalloutTCPAttempt(const std::string &peerId, struct sockad
}
void p3BitDht::ConnectCalloutDirectOrProxy(const std::string &peerId, struct sockaddr_in raddr, uint32_t connectFlags, uint32_t delay)
void p3BitDht::ConnectCalloutDirectOrProxy(const std::string &peerId, struct sockaddr_in raddrv4, uint32_t connectFlags, uint32_t delay)
{
struct sockaddr_in proxyaddr;
struct sockaddr_in srcaddr;
sockaddr_clear(&proxyaddr);
sockaddr_clear(&srcaddr);
struct sockaddr_storage raddr;
struct sockaddr_storage proxyaddr;
struct sockaddr_storage srcaddr;
sockaddr_storage_clear(proxyaddr);
sockaddr_storage_clear(proxyaddr);
sockaddr_storage_clear(srcaddr);
struct sockaddr_in *rap = (struct sockaddr_in *) &raddr;
struct sockaddr_in *pap = (struct sockaddr_in *) &proxyaddr;
struct sockaddr_in *sap = (struct sockaddr_in *) &srcaddr;
// only one to translate
rap->sin_family = AF_INET;
rap->sin_addr = raddrv4.sin_addr;
rap->sin_port = raddrv4.sin_port;
uint32_t source = RS_CB_DHT;
uint32_t bandwidth = 0;
@ -1800,9 +1828,33 @@ void p3BitDht::ConnectCalloutDirectOrProxy(const std::string &peerId, struct soc
}
void p3BitDht::ConnectCalloutRelay(const std::string &peerId,
struct sockaddr_in srcaddr, struct sockaddr_in proxyaddr, struct sockaddr_in destaddr,
struct sockaddr_in srcaddrv4, struct sockaddr_in proxyaddrv4, struct sockaddr_in destaddrv4,
uint32_t connectFlags, uint32_t bandwidth)
{
struct sockaddr_storage destaddr;
struct sockaddr_storage proxyaddr;
struct sockaddr_storage srcaddr;
sockaddr_storage_clear(proxyaddr);
sockaddr_storage_clear(proxyaddr);
sockaddr_storage_clear(srcaddr);
struct sockaddr_in *dap = (struct sockaddr_in *) &destaddr;
struct sockaddr_in *pap = (struct sockaddr_in *) &proxyaddr;
struct sockaddr_in *sap = (struct sockaddr_in *) &srcaddr;
dap->sin_family = AF_INET;
dap->sin_addr = destaddrv4.sin_addr;
dap->sin_port = destaddrv4.sin_port;
pap->sin_family = AF_INET;
pap->sin_addr = proxyaddrv4.sin_addr;
pap->sin_port = proxyaddrv4.sin_port;
sap->sin_family = AF_INET;
sap->sin_addr = srcaddrv4.sin_addr;
sap->sin_port = srcaddrv4.sin_port;
uint32_t source = RS_CB_DHT;
uint32_t delay = 0;

View file

@ -184,26 +184,59 @@ bool p3BitDht::dropPeer(std::string pid)
********************************* Basic Peer Details *************************************
******************************************************************************************/
int p3BitDht::addBadPeer(const struct sockaddr_in &addr, uint32_t /*reason*/, uint32_t /*flags*/, uint32_t /*age*/)
int p3BitDht::addBadPeer(const struct sockaddr_storage &addr, uint32_t /*reason*/, uint32_t /*flags*/, uint32_t /*age*/)
{
//mUdpBitDht->updateKnownPeer(&id, 0, bdflags);
struct sockaddr_in addrv4;
if (addr.ss_family != AF_INET)
{
std::cerr << "p3BitDht::addBadPeer() cannot handle IPV6 Yet, aborting";
std::cerr << std::endl;
abort();
}
struct sockaddr_in *ap = (struct sockaddr_in *) &addr;
// convert.
addrv4.sin_family = ap->sin_family;
addrv4.sin_addr = ap->sin_addr;
addrv4.sin_port = ap->sin_port;
if (mDhtStunner)
{
mDhtStunner->dropStunPeer(addr);
mDhtStunner->dropStunPeer(addrv4);
}
if (mProxyStunner)
{
mProxyStunner->dropStunPeer(addr);
mProxyStunner->dropStunPeer(addrv4);
}
return 1;
}
int p3BitDht::addKnownPeer(const std::string &pid, const struct sockaddr_in &addr, uint32_t flags)
int p3BitDht::addKnownPeer(const std::string &pid, const struct sockaddr_storage &addr, uint32_t flags)
{
struct sockaddr_in addrv4;
if (addr.ss_family != AF_INET)
{
std::cerr << "p3BitDht::addKnownPeer() cannot handle IPV6 Yet, aborting";
std::cerr << std::endl;
abort();
}
struct sockaddr_in *ap = (struct sockaddr_in *) &addr;
// convert.
addrv4.sin_family = ap->sin_family;
addrv4.sin_addr = ap->sin_addr;
addrv4.sin_port = ap->sin_port;
int p3type = 0;
int bdflags = 0;
bdId id;
@ -262,13 +295,13 @@ int p3BitDht::addKnownPeer(const std::string &pid, const struct sockaddr_in &add
id.id = dpd->mDhtId.id;
id.addr = addr;
id.addr = addrv4;
}
else
{
// shouldn't use own id without mutex - but it is static!
id.id = mOwnDhtId;
id.addr = addr;
id.addr = addrv4;
}
mUdpBitDht->updateKnownPeer(&id, 0, bdflags);

View file

@ -39,9 +39,21 @@ class stunAddrAssist: public pqiAddrAssist
mStunner = stunner;
}
virtual bool getExternalAddr(struct sockaddr_in &remote, uint8_t &stable)
virtual bool getExternalAddr(struct sockaddr_storage &remote, uint8_t &stable)
{
return mStunner->externalAddr(remote, stable);
// IPV4 ONLY.
struct sockaddr_in remotev4;
if (mStunner->externalAddr(remotev4, stable))
{
sockaddr_storage_clear(remote);
struct sockaddr_in *addr = (struct sockaddr_in *) &remote;
addr->sin_family = AF_INET;
addr->sin_addr = remotev4.sin_addr;
addr->sin_port = remotev4.sin_port;
return true;
}
return false;
}
virtual int tick()