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 */ /* 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)

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 << "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

View file

@ -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;
} }

View file

@ -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;

View file

@ -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

View file

@ -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;
} }