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:
csoler 2015-03-15 15:34:18 +00:00
parent e52d6a07b7
commit b77f7cc361
7 changed files with 75 additions and 61 deletions

View file

@ -181,7 +181,7 @@ int UdpLayer::reset(struct sockaddr_in &local)
/* stop the old thread */
{
bdStackMutex stack(sockMtx); /********** LOCK MUTEX *********/
bdStackMutex stack(sockMtx); (void)stack; /********** LOCK MUTEX *********/
#ifdef DEBUG_UDP_LAYER
std::cerr << "UdpLayer::reset() setting stopThread flag" << std::endl;
#endif
@ -322,7 +322,7 @@ int UdpLayer::sendPkt(const void *data, int size, const sockaddr_in &to, int ttl
}
/* setup connections */
int UdpLayer::openSocket()
int UdpLayer::openSocket()
{
sockMtx.lock(); /********** LOCK MUTEX *********/
@ -391,13 +391,12 @@ int UdpLayer::openSocket()
// start up our thread.
{
bdStackMutex stack(sockMtx); /********** LOCK MUTEX *********/
bdStackMutex stack(sockMtx); (void)stack; /********** LOCK MUTEX *********/
stopThread = false;
}
start();
return 1;
}
int UdpLayer::setTTL(int t)

View file

@ -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 << std::endl;
abort();
return 0; // TODO:IPV6
}
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;
sockaddr_clear(&addrv4);
#if 0
if (flags & NETASSIST_KNOWN_PEER_ONLINE)
{
std::cerr << "p3BitDht::addKnownPeer() Non IPv4 Address & ONLINE. Abort()ing.";
std::cerr << std::endl;
abort();
return 0; // TODO:IPV6
}
#endif
}
else

View file

@ -701,8 +701,7 @@ bool getPreferredInterface(const struct sockaddr_storage & existAddr, struct soc
if (eaddr->sin_family != AF_INET)
{
std::cerr << "getPreferredInterface() ERROR only valid for IPv4 for now";
abort();
return false;
return false; // TODO:IPV6
}
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)
{
std::cerr << "getLocalInterfaces() ERROR only valid for IPv4 for now";
abort();
return false;
return false; // TODO:IPV6
}
existing_addr = eaddr->sin_addr;
}

View file

@ -151,7 +151,7 @@ int pqissludp::attach()
// The Address determination is done centrally
int pqissludp::Initiate_Connection()
int pqissludp::Initiate_Connection()
{
int err;
@ -256,13 +256,13 @@ int pqissludp::Initiate_Connection()
struct sockaddr_in proxyaddr;
struct sockaddr_in remoteaddr;
if ((mConnectSrcAddr.ss_family != AF_INET) ||
(mConnectProxyAddr.ss_family != AF_INET) ||
(remote_addr.ss_family != AF_INET))
if ( !( sockaddr_storage_ipv6_to_ipv4(mConnectSrcAddr) &&
sockaddr_storage_ipv6_to_ipv4(mConnectProxyAddr) &&
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;
abort();
return 0; // TODO:IPV6
}
struct sockaddr_in *rap = (struct sockaddr_in *) &remote_addr;

View file

@ -54,30 +54,33 @@ virtual bool resetAddress(struct sockaddr_in &local) { return false; }
class rsUdpStack: public UdpStack, public pqiNetListener
{
public:
rsUdpStack(struct sockaddr_in &local)
:UdpStack(local) { return; }
public:
rsUdpStack(struct sockaddr_in &local) :UdpStack(local) {}
rsUdpStack(int testmode, struct sockaddr_in &local)
:UdpStack(testmode, local) { return; }
rsUdpStack(int testmode, struct sockaddr_in &local) :UdpStack(testmode, local) {}
/* from pqiNetListener */
virtual bool resetListener(const struct sockaddr_storage &local)
virtual bool resetListener(const struct sockaddr_storage &local)
{
std::cerr << "rsUdpStack::resetListener(" << sockaddr_storage_tostring(local) << ")";
std::cerr << std::endl;
if (local.ss_family != AF_INET)
if ( local.ss_family != AF_INET )
{
std::cerr << "rsUdpStack::resetListener() NOT IPv4 ERROR";
std::cerr << std::endl;
abort();
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 << std::endl;
return false; // TODO:IPV6
}
}
struct sockaddr_in *addr = (struct sockaddr_in *) &local;
return resetAddress(*addr);
}
};
class rsFixedUdpStack: public UdpStack, public pqiNetListener

View file

@ -73,7 +73,7 @@ void sockaddr_clear(struct sockaddr_in *addr)
}
bool isValidNet(const struct in_addr *addr)
bool isValidNet(const struct in_addr *addr)
{
// invalid address.
if((*addr).s_addr == INADDR_NONE)
@ -85,13 +85,13 @@ bool isValidNet(const struct in_addr *addr)
}
bool isLoopbackNet(const struct in_addr *addr)
bool isLoopbackNet(const struct in_addr *addr)
{
in_addr_t taddr = ntohl(addr->s_addr);
return (taddr == (127 << 24 | 1));
}
bool isPrivateNet(const struct in_addr *addr)
bool isPrivateNet(const struct in_addr *addr)
{
in_addr_t taddr = ntohl(addr->s_addr);

View file

@ -29,6 +29,8 @@
#include "util/rsstring.h"
#include "pqi/pqinetwork.h"
#include "util/stacktrace.h"
/***************************** Internal Helper Fns ******************************/
/******************************** Casting **************************************/
@ -814,22 +816,20 @@ 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)
{
std::cerr << "sockaddr_storage_ipv6_sameip()";
std::cerr << std::endl;
#ifdef SS_DEBUG
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 *ptr2 = to_const_ipv6_ptr(addr2);
uint32_t *ip6addr1 = (uint32_t *) ptr1->sin6_addr.s6_addr;
uint32_t *ip6addr2 = (uint32_t *) ptr2->sin6_addr.s6_addr;
uint32_t *ip6addr1 = (uint32_t *) ptr1->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])
{
return false;
}
}
return true;
}
@ -910,7 +910,7 @@ void sockaddr_storage_dump(const sockaddr_storage & addr)
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
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;
}
if ((ptr1->sin_addr.s_addr == 0) || (ptr1->sin_addr.s_addr == 1))
{
return true;
}
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);
if (ptr1->sin_family != AF_INET)
{
return false;
}
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)
{
#ifdef SS_DEBUG
std::cerr << "sockaddr_storage_ipv4_isExternalNet()";
std::cerr << std::endl;
std::cerr << "sockaddr_storage_ipv4_isExternalNet()" << std::endl;
#endif
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 & )
{
std::cerr << "sockaddr_storage_ipv6_isValidNet() TODO" << std::endl;
#ifdef SS_DEBUG
std::cerr << "sockaddr_storage_ipv6_isValidNet()" << std::endl;
#endif
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";
std::cerr << std::endl;
sockaddr_in6 & addr6 = (sockaddr_in6 &) addr;
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 &)
{
#ifdef SS_DEBUG
std::cerr << "sockaddr_storage_ipv6_isPrivateNet() TODO" << std::endl;
#endif
return false;
}
bool sockaddr_storage_ipv6_isExternalNet(const struct sockaddr_storage &)
{
#ifdef SS_DEBUG
std::cerr << "sockaddr_storage_ipv6_isExternalNet() TODO" << std::endl;
#endif
return true;
}