mirror of
https://github.com/pocoproject/poco.git
synced 2025-10-23 16:48:06 +02:00
latest changes from main repository
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
//
|
||||
// IPAddress.cpp
|
||||
//
|
||||
// $Id: //poco/Main/Net/src/IPAddress.cpp#13 $
|
||||
// $Id: //poco/Main/Net/src/IPAddress.cpp#15 $
|
||||
//
|
||||
// Library: Net
|
||||
// Package: NetCore
|
||||
@@ -81,6 +81,7 @@ public:
|
||||
virtual bool isSiteLocalMC() const = 0;
|
||||
virtual bool isOrgLocalMC() const = 0;
|
||||
virtual bool isGlobalMC() const = 0;
|
||||
virtual void mask(const IPAddressImpl* pMask, const IPAddressImpl* pSet) = 0;
|
||||
|
||||
protected:
|
||||
IPAddressImpl()
|
||||
@@ -237,6 +238,14 @@ public:
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
void mask(const IPAddressImpl* pMask, const IPAddressImpl* pSet)
|
||||
{
|
||||
poco_assert (pMask->af() == AF_INET && pSet->af() == AF_INET);
|
||||
|
||||
_addr.s_addr &= static_cast<const IPv4AddressImpl*>(pMask)->_addr.s_addr;
|
||||
_addr.s_addr |= static_cast<const IPv4AddressImpl*>(pSet)->_addr.s_addr & ~static_cast<const IPv4AddressImpl*>(pMask)->_addr.s_addr;
|
||||
}
|
||||
|
||||
private:
|
||||
struct in_addr _addr;
|
||||
@@ -435,6 +444,11 @@ public:
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
void mask(const IPAddressImpl* pMask, const IPAddressImpl* pSet)
|
||||
{
|
||||
throw Poco::NotImplementedException("mask() is only supported for IPv4 addresses");
|
||||
}
|
||||
|
||||
private:
|
||||
struct in6_addr _addr;
|
||||
@@ -744,4 +758,17 @@ bool IPAddress::tryParse(const std::string& addr, IPAddress& result)
|
||||
}
|
||||
|
||||
|
||||
void IPAddress::mask(const IPAddress& mask)
|
||||
{
|
||||
IPAddress null;
|
||||
_pImpl->mask(mask._pImpl, null._pImpl);
|
||||
}
|
||||
|
||||
|
||||
void IPAddress::mask(const IPAddress& mask, const IPAddress& set)
|
||||
{
|
||||
_pImpl->mask(mask._pImpl, set._pImpl);
|
||||
}
|
||||
|
||||
|
||||
} } // namespace Poco::Net
|
||||
|
Reference in New Issue
Block a user