mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-02 14:16:16 -04:00
Port pqissl to dual stack IPv6+IPv4
Changed unix_connect signature to be more comfortable for dual stack usage Remove dead code in pqissl::pqissl(...) Adapt p3I2pBob::connectI2P() to new unix_connect Adapt extaddrfinder to new unix_connect Add sockaddr_storage_ipv4_to_ipv6 to convert from flat IPv4 to IPv4 mapped as IPv6
This commit is contained in:
parent
2170313e42
commit
b3c7d195c8
9 changed files with 72 additions and 81 deletions
|
@ -94,7 +94,10 @@ static void getPage(const std::string& server_name,std::string& page)
|
|||
#endif
|
||||
std::cerr << "ExtAddrFinder: resolved hostname " << server_name << " to " << rs_inet_ntoa(in) << std::endl;
|
||||
|
||||
if(unix_connect(sockfd,(struct sockaddr *)&serveur, sizeof(serveur)) == -1)
|
||||
sockaddr_storage server;
|
||||
sockaddr_storage_setipv4(server, &serveur);
|
||||
sockaddr_storage_setport(server, 80);
|
||||
if(unix_connect(sockfd, server) == -1)
|
||||
{
|
||||
std::cerr << "ExtAddrFinder: Connection error to " << server_name << std::endl ;
|
||||
unix_close(sockfd);
|
||||
|
|
|
@ -106,6 +106,7 @@ bool sockaddr_storage_setipv6(struct sockaddr_storage &addr, const sockaddr_in6
|
|||
bool sockaddr_storage_ipv4_aton(struct sockaddr_storage &addr, const char *name);
|
||||
bool sockaddr_storage_ipv4_setport(struct sockaddr_storage &addr, const uint16_t port);
|
||||
|
||||
bool sockaddr_storage_ipv4_to_ipv6(sockaddr_storage &addr);
|
||||
|
||||
// comparisons.
|
||||
bool operator<(const struct sockaddr_storage &a, const struct sockaddr_storage &b);
|
||||
|
|
|
@ -265,6 +265,33 @@ bool sockaddr_storage_ipv4_aton(struct sockaddr_storage &addr, const char *name)
|
|||
return (1 == inet_aton(name, &(ipv4_ptr->sin_addr)));
|
||||
}
|
||||
|
||||
bool sockaddr_storage_ipv4_to_ipv6(sockaddr_storage &addr)
|
||||
{
|
||||
#ifdef SS_DEBUG
|
||||
std::cerr << __PRETTY_FUNCTION__ << std::endl;
|
||||
#endif
|
||||
|
||||
if ( addr.ss_family == AF_INET6 ) return true;
|
||||
|
||||
if ( addr.ss_family == AF_INET )
|
||||
{
|
||||
sockaddr_in & addr_ipv4 = (sockaddr_in &) addr;
|
||||
sockaddr_in6 & addr_ipv6 = (sockaddr_in6 &) addr;
|
||||
|
||||
u_int32_t ip = addr_ipv4.sin_addr.s_addr;
|
||||
u_int16_t port = addr_ipv4.sin_port;
|
||||
|
||||
sockaddr_storage_clear(addr);
|
||||
addr_ipv6.sin6_family = AF_INET6;
|
||||
addr_ipv6.sin6_port = port;
|
||||
addr_ipv6.sin6_addr.s6_addr32[3] = ip;
|
||||
addr_ipv6.sin6_addr.s6_addr16[5] = (u_int16_t) 0xffff;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/******************************** Comparisions **********************************/
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue