diff options
author | Anton Samokhvalov <pg83@yandex.ru> | 2022-02-10 16:45:17 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:17 +0300 |
commit | d3a398281c6fd1d3672036cb2d63f842d2cb28c5 (patch) | |
tree | dd4bd3ca0f36b817e96812825ffaf10d645803f2 /library/cpp/messagebus/config/netaddr.h | |
parent | 72cb13b4aff9bc9cf22e49251bc8fd143f82538f (diff) | |
download | ydb-d3a398281c6fd1d3672036cb2d63f842d2cb28c5.tar.gz |
Restoring authorship annotation for Anton Samokhvalov <pg83@yandex.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/messagebus/config/netaddr.h')
-rw-r--r-- | library/cpp/messagebus/config/netaddr.h | 134 |
1 files changed, 67 insertions, 67 deletions
diff --git a/library/cpp/messagebus/config/netaddr.h b/library/cpp/messagebus/config/netaddr.h index 839f3d8f5d..b79c0cc355 100644 --- a/library/cpp/messagebus/config/netaddr.h +++ b/library/cpp/messagebus/config/netaddr.h @@ -8,79 +8,79 @@ #include <util/network/address.h> namespace NBus { - using namespace NAddr; - - /// IP protocol version. - enum EIpVersion { - EIP_VERSION_4 = 1, - EIP_VERSION_6 = 2, - EIP_VERSION_ANY = EIP_VERSION_4 | EIP_VERSION_6, - }; - - inline bool IsFamilyAllowed(ui16 sa_family, EIpVersion ipVersion) { - if (ipVersion == EIP_VERSION_4 && sa_family != AF_INET) { - return false; - } - if (ipVersion == EIP_VERSION_6 && sa_family != AF_INET6) { - return false; - } - return true; + using namespace NAddr; + + /// IP protocol version. + enum EIpVersion { + EIP_VERSION_4 = 1, + EIP_VERSION_6 = 2, + EIP_VERSION_ANY = EIP_VERSION_4 | EIP_VERSION_6, + }; + + inline bool IsFamilyAllowed(ui16 sa_family, EIpVersion ipVersion) { + if (ipVersion == EIP_VERSION_4 && sa_family != AF_INET) { + return false; + } + if (ipVersion == EIP_VERSION_6 && sa_family != AF_INET6) { + return false; + } + return true; } - const char* ToCString(EIpVersion); - int ToAddrFamily(EIpVersion); - - /// Hold referenced pointer to address description structure (ex. sockaddr_storage) - /// It's make possible to work with IPv4 / IPv6 addresses simultaneously - class TNetAddr: public IRemoteAddr { - public: - class TError: public yexception { - }; - - TNetAddr(); - TNetAddr(TAutoPtr<IRemoteAddr> addr); - TNetAddr(const char* hostPort, EIpVersion requireVersion = EIP_VERSION_ANY, EIpVersion preferVersion = EIP_VERSION_ANY); - TNetAddr(TStringBuf host, int port, EIpVersion requireVersion = EIP_VERSION_ANY, EIpVersion preferVersion = EIP_VERSION_ANY); - TNetAddr(const TNetworkAddress& na, EIpVersion requireVersion = EIP_VERSION_ANY, EIpVersion preferVersion = EIP_VERSION_ANY); - TNetAddr(const TNetworkAddress& na, const TAddrInfo& ai); - - bool operator==(const TNetAddr&) const; - bool operator!=(const TNetAddr& other) const { - return !(*this == other); - } - inline explicit operator bool() const noexcept { - return !!Ptr; - } - - const sockaddr* Addr() const override; - socklen_t Len() const override; - - bool IsIpv4() const; - bool IsIpv6() const; - int GetPort() const; - - private: - TAtomicSharedPtr<IRemoteAddr> Ptr; - }; - - using TSockAddrInVector = TVector<TNetAddr>; - - struct TNetAddrHostPortHash { - inline size_t operator()(const TNetAddr& a) const { - const sockaddr* s = a.Addr(); - const sockaddr_in* const sa = reinterpret_cast<const sockaddr_in*>(s); - const sockaddr_in6* const sa6 = reinterpret_cast<const sockaddr_in6*>(s); - - switch (s->sa_family) { - case AF_INET: + const char* ToCString(EIpVersion); + int ToAddrFamily(EIpVersion); + + /// Hold referenced pointer to address description structure (ex. sockaddr_storage) + /// It's make possible to work with IPv4 / IPv6 addresses simultaneously + class TNetAddr: public IRemoteAddr { + public: + class TError: public yexception { + }; + + TNetAddr(); + TNetAddr(TAutoPtr<IRemoteAddr> addr); + TNetAddr(const char* hostPort, EIpVersion requireVersion = EIP_VERSION_ANY, EIpVersion preferVersion = EIP_VERSION_ANY); + TNetAddr(TStringBuf host, int port, EIpVersion requireVersion = EIP_VERSION_ANY, EIpVersion preferVersion = EIP_VERSION_ANY); + TNetAddr(const TNetworkAddress& na, EIpVersion requireVersion = EIP_VERSION_ANY, EIpVersion preferVersion = EIP_VERSION_ANY); + TNetAddr(const TNetworkAddress& na, const TAddrInfo& ai); + + bool operator==(const TNetAddr&) const; + bool operator!=(const TNetAddr& other) const { + return !(*this == other); + } + inline explicit operator bool() const noexcept { + return !!Ptr; + } + + const sockaddr* Addr() const override; + socklen_t Len() const override; + + bool IsIpv4() const; + bool IsIpv6() const; + int GetPort() const; + + private: + TAtomicSharedPtr<IRemoteAddr> Ptr; + }; + + using TSockAddrInVector = TVector<TNetAddr>; + + struct TNetAddrHostPortHash { + inline size_t operator()(const TNetAddr& a) const { + const sockaddr* s = a.Addr(); + const sockaddr_in* const sa = reinterpret_cast<const sockaddr_in*>(s); + const sockaddr_in6* const sa6 = reinterpret_cast<const sockaddr_in6*>(s); + + switch (s->sa_family) { + case AF_INET: return CombineHashes<size_t>(ComputeHash(TStringBuf(reinterpret_cast<const char*>(&sa->sin_addr), sizeof(sa->sin_addr))), IntHashImpl(sa->sin_port)); - case AF_INET6: + case AF_INET6: return CombineHashes<size_t>(ComputeHash(TStringBuf(reinterpret_cast<const char*>(&sa6->sin6_addr), sizeof(sa6->sin6_addr))), IntHashImpl(sa6->sin6_port)); - } + } return ComputeHash(TStringBuf(reinterpret_cast<const char*>(s), a.Len())); } - }; + }; -} +} |