net: make it possible to connect to CJDNS addresses

Connecting to CJDNS addresses works without a proxy, just like
connecting to an IPv6 address. Thus adapt `CService::GetSockAddr()` to
retrieve the `struct sockaddr*` even for `CService::IsCJDNS()` objects.
This commit is contained in:
Vasil Dimov 2021-09-09 18:19:17 +02:00
parent 23ae7931be
commit aedd02ef27
No known key found for this signature in database
GPG Key ID: 54DF06F64B55CBBF

View File

@ -663,7 +663,7 @@ bool CNetAddr::GetInAddr(struct in_addr* pipv4Addr) const
} }
/** /**
* Try to get our IPv6 address. * Try to get our IPv6 (or CJDNS) address.
* *
* @param[out] pipv6Addr The in6_addr struct to which to copy. * @param[out] pipv6Addr The in6_addr struct to which to copy.
* *
@ -674,7 +674,7 @@ bool CNetAddr::GetInAddr(struct in_addr* pipv4Addr) const
*/ */
bool CNetAddr::GetIn6Addr(struct in6_addr* pipv6Addr) const bool CNetAddr::GetIn6Addr(struct in6_addr* pipv6Addr) const
{ {
if (!IsIPv6()) { if (!IsIPv6() && !IsCJDNS()) {
return false; return false;
} }
assert(sizeof(*pipv6Addr) == m_addr.size()); assert(sizeof(*pipv6Addr) == m_addr.size());
@ -993,7 +993,7 @@ bool CService::GetSockAddr(struct sockaddr* paddr, socklen_t *addrlen) const
paddrin->sin_port = htons(port); paddrin->sin_port = htons(port);
return true; return true;
} }
if (IsIPv6()) { if (IsIPv6() || IsCJDNS()) {
if (*addrlen < (socklen_t)sizeof(struct sockaddr_in6)) if (*addrlen < (socklen_t)sizeof(struct sockaddr_in6))
return false; return false;
*addrlen = sizeof(struct sockaddr_in6); *addrlen = sizeof(struct sockaddr_in6);