mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-08-06 05:14:21 -04:00
0006 Removed abort if IPv6 (Patch from G10H4ck)
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.6-IPv6@8030 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
e52d6a07b7
commit
b77f7cc361
7 changed files with 75 additions and 61 deletions
|
@ -181,7 +181,7 @@ int UdpLayer::reset(struct sockaddr_in &local)
|
||||||
|
|
||||||
/* stop the old thread */
|
/* stop the old thread */
|
||||||
{
|
{
|
||||||
bdStackMutex stack(sockMtx); /********** LOCK MUTEX *********/
|
bdStackMutex stack(sockMtx); (void)stack; /********** LOCK MUTEX *********/
|
||||||
#ifdef DEBUG_UDP_LAYER
|
#ifdef DEBUG_UDP_LAYER
|
||||||
std::cerr << "UdpLayer::reset() setting stopThread flag" << std::endl;
|
std::cerr << "UdpLayer::reset() setting stopThread flag" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
@ -391,13 +391,12 @@ int UdpLayer::openSocket()
|
||||||
|
|
||||||
// start up our thread.
|
// start up our thread.
|
||||||
{
|
{
|
||||||
bdStackMutex stack(sockMtx); /********** LOCK MUTEX *********/
|
bdStackMutex stack(sockMtx); (void)stack; /********** LOCK MUTEX *********/
|
||||||
stopThread = false;
|
stopThread = false;
|
||||||
}
|
}
|
||||||
start();
|
start();
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int UdpLayer::setTTL(int t)
|
int UdpLayer::setTTL(int t)
|
||||||
|
|
|
@ -193,7 +193,7 @@ int p3BitDht::addBadPeer(const struct sockaddr_storage &addr, uint32_t /*reason*
|
||||||
{
|
{
|
||||||
std::cerr << "p3BitDht::addBadPeer() cannot handle IPV6 Yet, aborting";
|
std::cerr << "p3BitDht::addBadPeer() cannot handle IPV6 Yet, aborting";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
abort();
|
return 0; // TODO:IPV6
|
||||||
}
|
}
|
||||||
struct sockaddr_in *ap = (struct sockaddr_in *) &addr;
|
struct sockaddr_in *ap = (struct sockaddr_in *) &addr;
|
||||||
|
|
||||||
|
@ -226,14 +226,14 @@ int p3BitDht::addKnownPeer(const RsPeerId &pid, const struct sockaddr_storage &a
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
sockaddr_clear(&addrv4);
|
sockaddr_clear(&addrv4);
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (flags & NETASSIST_KNOWN_PEER_ONLINE)
|
if (flags & NETASSIST_KNOWN_PEER_ONLINE)
|
||||||
{
|
{
|
||||||
std::cerr << "p3BitDht::addKnownPeer() Non IPv4 Address & ONLINE. Abort()ing.";
|
std::cerr << "p3BitDht::addKnownPeer() Non IPv4 Address & ONLINE. Abort()ing.";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
abort();
|
return 0; // TODO:IPV6
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -701,8 +701,7 @@ bool getPreferredInterface(const struct sockaddr_storage & existAddr, struct soc
|
||||||
if (eaddr->sin_family != AF_INET)
|
if (eaddr->sin_family != AF_INET)
|
||||||
{
|
{
|
||||||
std::cerr << "getPreferredInterface() ERROR only valid for IPv4 for now";
|
std::cerr << "getPreferredInterface() ERROR only valid for IPv4 for now";
|
||||||
abort();
|
return false; // TODO:IPV6
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
existing_addr = eaddr->sin_addr;
|
existing_addr = eaddr->sin_addr;
|
||||||
}
|
}
|
||||||
|
@ -732,8 +731,7 @@ bool getLocalInterfaces(struct sockaddr_storage &existAddr, std::list<struct soc
|
||||||
if (eaddr->sin_family != AF_INET)
|
if (eaddr->sin_family != AF_INET)
|
||||||
{
|
{
|
||||||
std::cerr << "getLocalInterfaces() ERROR only valid for IPv4 for now";
|
std::cerr << "getLocalInterfaces() ERROR only valid for IPv4 for now";
|
||||||
abort();
|
return false; // TODO:IPV6
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
existing_addr = eaddr->sin_addr;
|
existing_addr = eaddr->sin_addr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -256,13 +256,13 @@ int pqissludp::Initiate_Connection()
|
||||||
struct sockaddr_in proxyaddr;
|
struct sockaddr_in proxyaddr;
|
||||||
struct sockaddr_in remoteaddr;
|
struct sockaddr_in remoteaddr;
|
||||||
|
|
||||||
if ((mConnectSrcAddr.ss_family != AF_INET) ||
|
if ( !( sockaddr_storage_ipv6_to_ipv4(mConnectSrcAddr) &&
|
||||||
(mConnectProxyAddr.ss_family != AF_INET) ||
|
sockaddr_storage_ipv6_to_ipv4(mConnectProxyAddr) &&
|
||||||
(remote_addr.ss_family != AF_INET))
|
sockaddr_storage_ipv6_to_ipv4(remote_addr)))
|
||||||
{
|
{
|
||||||
std::cerr << "Error One Address is not IPv4. aborting";
|
std::cerr << "pqissludp::Initiate_Connection() Error One Address is not IPv4. aborting";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
abort();
|
return 0; // TODO:IPV6
|
||||||
}
|
}
|
||||||
|
|
||||||
struct sockaddr_in *rap = (struct sockaddr_in *) &remote_addr;
|
struct sockaddr_in *rap = (struct sockaddr_in *) &remote_addr;
|
||||||
|
|
|
@ -55,11 +55,9 @@ virtual bool resetAddress(struct sockaddr_in &local) { return false; }
|
||||||
class rsUdpStack: public UdpStack, public pqiNetListener
|
class rsUdpStack: public UdpStack, public pqiNetListener
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
rsUdpStack(struct sockaddr_in &local)
|
rsUdpStack(struct sockaddr_in &local) :UdpStack(local) {}
|
||||||
:UdpStack(local) { return; }
|
|
||||||
|
|
||||||
rsUdpStack(int testmode, struct sockaddr_in &local)
|
rsUdpStack(int testmode, struct sockaddr_in &local) :UdpStack(testmode, local) {}
|
||||||
:UdpStack(testmode, local) { return; }
|
|
||||||
|
|
||||||
/* from pqiNetListener */
|
/* from pqiNetListener */
|
||||||
virtual bool resetListener(const struct sockaddr_storage &local)
|
virtual bool resetListener(const struct sockaddr_storage &local)
|
||||||
|
@ -68,16 +66,21 @@ virtual bool resetListener(const struct sockaddr_storage &local)
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
if ( local.ss_family != AF_INET )
|
if ( local.ss_family != AF_INET )
|
||||||
|
{
|
||||||
|
std::cerr << "rsUdpStack::resetListener() got non AF_INET sockaddr_storage, attempt to convert" << std::endl;
|
||||||
|
|
||||||
|
// FORCING NON CONST CHANGE THIS AS SOON AS POSSIBLE // TODO:IPV6
|
||||||
|
if(!sockaddr_storage_ipv6_to_ipv4((sockaddr_storage &)local))
|
||||||
{
|
{
|
||||||
std::cerr << "rsUdpStack::resetListener() NOT IPv4 ERROR";
|
std::cerr << "rsUdpStack::resetListener() NOT IPv4 ERROR";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
abort();
|
return false; // TODO:IPV6
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct sockaddr_in *addr = (struct sockaddr_in *) &local;
|
struct sockaddr_in *addr = (struct sockaddr_in *) &local;
|
||||||
return resetAddress(*addr);
|
return resetAddress(*addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class rsFixedUdpStack: public UdpStack, public pqiNetListener
|
class rsFixedUdpStack: public UdpStack, public pqiNetListener
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
#include "util/rsstring.h"
|
#include "util/rsstring.h"
|
||||||
#include "pqi/pqinetwork.h"
|
#include "pqi/pqinetwork.h"
|
||||||
|
|
||||||
|
#include "util/stacktrace.h"
|
||||||
|
|
||||||
/***************************** Internal Helper Fns ******************************/
|
/***************************** Internal Helper Fns ******************************/
|
||||||
|
|
||||||
/******************************** Casting **************************************/
|
/******************************** Casting **************************************/
|
||||||
|
@ -814,8 +816,9 @@ bool sockaddr_storage_ipv6_same(const struct sockaddr_storage &addr, const struc
|
||||||
|
|
||||||
bool sockaddr_storage_ipv6_sameip(const struct sockaddr_storage &addr, const struct sockaddr_storage &addr2)
|
bool sockaddr_storage_ipv6_sameip(const struct sockaddr_storage &addr, const struct sockaddr_storage &addr2)
|
||||||
{
|
{
|
||||||
std::cerr << "sockaddr_storage_ipv6_sameip()";
|
#ifdef SS_DEBUG
|
||||||
std::cerr << std::endl;
|
std::cerr << "sockaddr_storage_ipv6_sameip(addr,addr2)" << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
const struct sockaddr_in6 *ptr1 = to_const_ipv6_ptr(addr);
|
const struct sockaddr_in6 *ptr1 = to_const_ipv6_ptr(addr);
|
||||||
const struct sockaddr_in6 *ptr2 = to_const_ipv6_ptr(addr2);
|
const struct sockaddr_in6 *ptr2 = to_const_ipv6_ptr(addr2);
|
||||||
|
@ -824,12 +827,9 @@ bool sockaddr_storage_ipv6_sameip(const struct sockaddr_storage &addr, const str
|
||||||
uint32_t *ip6addr2 = (uint32_t *) ptr2->sin6_addr.s6_addr;
|
uint32_t *ip6addr2 = (uint32_t *) ptr2->sin6_addr.s6_addr;
|
||||||
|
|
||||||
for(int i = 0; i < 4; i++)
|
for(int i = 0; i < 4; i++)
|
||||||
{
|
|
||||||
if (ip6addr1[i] != ip6addr2[i])
|
if (ip6addr1[i] != ip6addr2[i])
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -910,7 +910,7 @@ void sockaddr_storage_dump(const sockaddr_storage & addr)
|
||||||
output << addr.__ss_padding;
|
output << addr.__ss_padding;
|
||||||
}}
|
}}
|
||||||
|
|
||||||
std::cout << output.str() << std::endl;
|
std::cerr << output.str() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -925,14 +925,10 @@ bool sockaddr_storage_ipv4_isnull(const struct sockaddr_storage &addr)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const struct sockaddr_in *ptr1 = to_const_ipv4_ptr(addr);
|
const struct sockaddr_in *ptr1 = to_const_ipv4_ptr(addr);
|
||||||
if (ptr1->sin_family != AF_INET)
|
|
||||||
{
|
if (ptr1->sin_addr.s_addr == 0)
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
if ((ptr1->sin_addr.s_addr == 0) || (ptr1->sin_addr.s_addr == 1))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -945,9 +941,8 @@ bool sockaddr_storage_ipv4_isValidNet(const struct sockaddr_storage &addr)
|
||||||
|
|
||||||
const struct sockaddr_in *ptr1 = to_const_ipv4_ptr(addr);
|
const struct sockaddr_in *ptr1 = to_const_ipv4_ptr(addr);
|
||||||
if (ptr1->sin_family != AF_INET)
|
if (ptr1->sin_family != AF_INET)
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
return isValidNet(&(ptr1->sin_addr));
|
return isValidNet(&(ptr1->sin_addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -987,8 +982,7 @@ bool sockaddr_storage_ipv4_isPrivateNet(const struct sockaddr_storage &addr)
|
||||||
bool sockaddr_storage_ipv4_isExternalNet(const struct sockaddr_storage &addr)
|
bool sockaddr_storage_ipv4_isExternalNet(const struct sockaddr_storage &addr)
|
||||||
{
|
{
|
||||||
#ifdef SS_DEBUG
|
#ifdef SS_DEBUG
|
||||||
std::cerr << "sockaddr_storage_ipv4_isExternalNet()";
|
std::cerr << "sockaddr_storage_ipv4_isExternalNet()" << std::endl;
|
||||||
std::cerr << std::endl;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const struct sockaddr_in *ptr1 = to_const_ipv4_ptr(addr);
|
const struct sockaddr_in *ptr1 = to_const_ipv4_ptr(addr);
|
||||||
|
@ -1000,38 +994,58 @@ bool sockaddr_storage_ipv4_isExternalNet(const struct sockaddr_storage &addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool sockaddr_storage_ipv6_isnull(const struct sockaddr_storage & )
|
bool sockaddr_storage_ipv6_isnull(const struct sockaddr_storage & addr)
|
||||||
{
|
{
|
||||||
std::cerr << "sockaddr_storage_ipv6_isnull() TODO" << std::endl;
|
#ifdef SS_DEBUG
|
||||||
|
std::cerr << "sockaddr_storage_ipv6_isnull()" << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
return false;
|
const sockaddr_in6 & addr6 = (const sockaddr_in6 &) addr;
|
||||||
|
bool isNull = (addr6.sin6_addr.s6_addr32[3] == 0x0);
|
||||||
|
for (int i=0; isNull && i<3; ++i)
|
||||||
|
isNull &= (addr6.sin6_addr.s6_addr32[i] == 0x0);
|
||||||
|
|
||||||
|
return isNull;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sockaddr_storage_ipv6_isValidNet(const struct sockaddr_storage & )
|
bool sockaddr_storage_ipv6_isValidNet(const struct sockaddr_storage & )
|
||||||
{
|
{
|
||||||
std::cerr << "sockaddr_storage_ipv6_isValidNet() TODO" << std::endl;
|
#ifdef SS_DEBUG
|
||||||
|
std::cerr << "sockaddr_storage_ipv6_isValidNet()" << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sockaddr_storage_ipv6_isLoopbackNet(const struct sockaddr_storage & )
|
bool sockaddr_storage_ipv6_isLoopbackNet(const struct sockaddr_storage & addr )
|
||||||
{
|
{
|
||||||
std::cerr << "sockaddr_storage_ipv6_isLoopbackNet() TODO";
|
sockaddr_in6 & addr6 = (sockaddr_in6 &) addr;
|
||||||
std::cerr << std::endl;
|
bool isLp = (addr6.sin6_addr.s6_addr32[3] == 0x1);
|
||||||
|
for (int i=0; isLp && i<3; ++i)
|
||||||
|
isLp &= (addr6.sin6_addr.s6_addr32[i] == 0x0);
|
||||||
|
|
||||||
return false;
|
#ifdef SS_DEBUG
|
||||||
|
sockaddr_storage_dump(addr);
|
||||||
|
std::cerr << "sockaddr_storage_ipv6_isLoopbackNet() " << isLp << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return isLp;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sockaddr_storage_ipv6_isPrivateNet(const struct sockaddr_storage &)
|
bool sockaddr_storage_ipv6_isPrivateNet(const struct sockaddr_storage &)
|
||||||
{
|
{
|
||||||
|
#ifdef SS_DEBUG
|
||||||
std::cerr << "sockaddr_storage_ipv6_isPrivateNet() TODO" << std::endl;
|
std::cerr << "sockaddr_storage_ipv6_isPrivateNet() TODO" << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sockaddr_storage_ipv6_isExternalNet(const struct sockaddr_storage &)
|
bool sockaddr_storage_ipv6_isExternalNet(const struct sockaddr_storage &)
|
||||||
{
|
{
|
||||||
|
#ifdef SS_DEBUG
|
||||||
std::cerr << "sockaddr_storage_ipv6_isExternalNet() TODO" << std::endl;
|
std::cerr << "sockaddr_storage_ipv6_isExternalNet() TODO" << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue