mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-02 06:06:10 -04:00
Implement IPv6 listening
With this commit IPv6-v3 surpass v0.6-IPv6-2 in term of features obsoleting it. p3BitDht handle gracefully unwanted non IPv4 addresses rsUdpStack handle gracefully unwanted non IPv4 addresses pqissludp handle gracefully unwanted non IPv4 addresses Move single address limitation workaround from p3discovery2::sendOwnContactInfo to better place p3PeerMgrIMPL::UpdateOwnAddress this way local address list is queried less often and only id there is some suggestion that it may have changed (probably ir will not be called all the times there is a changes in local network interfaces but is good enough) Implement crossplatform rs_setsockopt to avoid too much ifdef around Implement sockaddr_storage_copy to safely copy sockaddr_storage objects
This commit is contained in:
parent
b3c7d195c8
commit
4a138e07b9
14 changed files with 618 additions and 378 deletions
|
@ -50,34 +50,37 @@ virtual bool resetAddress(struct sockaddr_in &local) { return false; }
|
|||
/*******************************************************/
|
||||
|
||||
#include "pqi/pqimonitor.h"
|
||||
#include "util/rsnet.h"
|
||||
#include "util/stacktrace.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
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)
|
||||
/// @see pqiNetListener
|
||||
virtual bool resetListener(const sockaddr_storage& local)
|
||||
{
|
||||
//std::cerr << "rsUdpStack::resetListener(" << sockaddr_storage_tostring(local) << ")";
|
||||
//std::cerr << std::endl;
|
||||
sockaddr_storage temp;
|
||||
sockaddr_storage_copy(local, temp);
|
||||
|
||||
if (local.ss_family != AF_INET)
|
||||
if (!sockaddr_storage_ipv6_to_ipv4(temp))
|
||||
{
|
||||
std::cerr << "rsUdpStack::resetListener() NOT IPv4 ERROR";
|
||||
std::cerr << std::endl;
|
||||
abort();
|
||||
std::cerr << __PRETTY_FUNCTION__ << " Got non IPv4 address ERROR"
|
||||
<< std::endl;
|
||||
sockaddr_storage_dump(local);
|
||||
print_stacktrace();
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
struct sockaddr_in *addr = (struct sockaddr_in *) &local;
|
||||
sockaddr_in *addr = reinterpret_cast<sockaddr_in*>(&temp);
|
||||
return resetAddress(*addr);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
class rsFixedUdpStack: public UdpStack, public pqiNetListener
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue