diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2017-08-08 16:40:29 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2017-11-07 22:15:35 +0000 |
commit | a93437342b9bf60c24a0d339244e8a0b308d4a7f (patch) | |
tree | ce31739abc29db80bc0d4b42ed83342cfb786409 /src/network/kernel/qnetworkinterface_linux.cpp | |
parent | 5193ab97f448ed6897ccceae9ce6bdcda55eeb5a (diff) |
QNetworkInterface: add support for extracting address lifetime
[ChangeLog][QtNetwork][QNetworkInterface] Added preferredLifetime() and
validityLifetime() to QNetworkAddressEntry that report the remaining
lifetime of the address in the network interface.
Change-Id: I292b84e2193979446e43344b0727642812cba630
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'src/network/kernel/qnetworkinterface_linux.cpp')
-rw-r--r-- | src/network/kernel/qnetworkinterface_linux.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/network/kernel/qnetworkinterface_linux.cpp b/src/network/kernel/qnetworkinterface_linux.cpp index a985342286..cc66c310cb 100644 --- a/src/network/kernel/qnetworkinterface_linux.cpp +++ b/src/network/kernel/qnetworkinterface_linux.cpp @@ -386,6 +386,18 @@ static void getAddresses(int sock, char *buf, QList<QNetworkInterfacePrivate *> entry.setBroadcast(makeAddress(payloadPtr, payloadLen)); break; + case IFA_CACHEINFO: + if (size_t(payloadLen) >= sizeof(ifa_cacheinfo)) { + auto cacheinfo = reinterpret_cast<ifa_cacheinfo *>(payloadPtr); + auto toDeadline = [](quint32 lifetime) -> QDeadlineTimer { + if (lifetime == quint32(-1)) + return QDeadlineTimer::Forever; + return QDeadlineTimer(lifetime * 1000); + }; + entry.setAddressLifetime(toDeadline(cacheinfo->ifa_prefered), toDeadline(cacheinfo->ifa_valid)); + } + break; + case IFA_FLAGS: Q_ASSERT(payloadLen == 4); flags = qFromUnaligned<quint32>(payloadPtr); |