Display correct expiration time of service record
The expiration time for each service record is currently
incorrect. It displays the current timestamp instead of the
current time + the remaining TTL.
Before:
2024-06-27T15:37:45.292231 - [MdnsDiscoveryManager._nearby_\
presence._tcp.local-187/47] onServiceNameDiscovered: Name: \
NsdManagerTest7899, type: _nearby_presence._tcp.local, \
subtypes: , ip: [192.168.144.219], ipv6: [fe80::9c4c:52ff:fe61\
:3509], port: 12345, interfaceIndex: 47, network: 187, \
textStrings: [T=0, SAI=800, SAT=4000, SII=800], textEntries: \
[T=0, SAI=800, SAT=4000, SII=800], \
expirationTime: 2024-06-27T07:37:45Z
After:
2024-06-27T15:37:45.292231 - [MdnsDiscoveryManager._nearby_\
presence._tcp.local-187/47] onServiceNameDiscovered: Name: \
NsdManagerTest7899, type: _nearby_presence._tcp.local, \
subtypes: , ip: [192.168.144.219], ipv6: [fe80::9c4c:52ff:fe61:\
3509], port: 12345, interfaceIndex: 47, network: 187, \
textStrings: [T=0, SAI=800, SAT=4000, SII=800], textEntries: \
[T=0, SAI=800, SAT=4000, SII=800], \
expirationTime: 2024-06-27T07:39:45Z
Fix: 345129252
Test: atest FrameworksNetTests NsdManagerTest
Change-Id: Ib68a439d99e3eba38d639058737a307fd74478c3
diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java b/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java
index b3bdbe0..643430a 100644
--- a/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java
+++ b/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java
@@ -303,8 +303,8 @@
serviceCache.unregisterServiceExpiredCallback(cacheKey);
}
- private static MdnsServiceInfo buildMdnsServiceInfoFromResponse(
- @NonNull MdnsResponse response, @NonNull String[] serviceTypeLabels) {
+ private static MdnsServiceInfo buildMdnsServiceInfoFromResponse(@NonNull MdnsResponse response,
+ @NonNull String[] serviceTypeLabels, long elapsedRealtimeMillis) {
String[] hostName = null;
int port = 0;
if (response.hasServiceRecord()) {
@@ -351,7 +351,7 @@
textEntries,
response.getInterfaceIndex(),
response.getNetwork(),
- now.plusMillis(response.getMinRemainingTtl(now.toEpochMilli())));
+ now.plusMillis(response.getMinRemainingTtl(elapsedRealtimeMillis)));
}
private List<MdnsResponse> getExistingServices() {
@@ -380,8 +380,8 @@
if (existingInfo == null) {
for (MdnsResponse existingResponse : serviceCache.getCachedServices(cacheKey)) {
if (!responseMatchesOptions(existingResponse, searchOptions)) continue;
- final MdnsServiceInfo info =
- buildMdnsServiceInfoFromResponse(existingResponse, serviceTypeLabels);
+ final MdnsServiceInfo info = buildMdnsServiceInfoFromResponse(
+ existingResponse, serviceTypeLabels, clock.elapsedRealtime());
listener.onServiceNameDiscovered(info, true /* isServiceFromCache */);
listenerInfo.setServiceDiscovered(info.getServiceInstanceName());
if (existingResponse.isComplete()) {
@@ -561,7 +561,7 @@
if (response.getServiceInstanceName() != null) {
listeners.valueAt(i).unsetServiceDiscovered(response.getServiceInstanceName());
final MdnsServiceInfo serviceInfo = buildMdnsServiceInfoFromResponse(
- response, serviceTypeLabels);
+ response, serviceTypeLabels, clock.elapsedRealtime());
if (response.isComplete()) {
sharedLog.log(message + ". onServiceRemoved: " + serviceInfo);
listener.onServiceRemoved(serviceInfo);
@@ -605,8 +605,8 @@
+ " %b, responseIsComplete: %b",
serviceInstanceName, newInCache, serviceBecomesComplete,
response.isComplete()));
- MdnsServiceInfo serviceInfo =
- buildMdnsServiceInfoFromResponse(response, serviceTypeLabels);
+ final MdnsServiceInfo serviceInfo = buildMdnsServiceInfoFromResponse(
+ response, serviceTypeLabels, clock.elapsedRealtime());
for (int i = 0; i < listeners.size(); i++) {
// If a service stops matching the options (currently can only happen if it loses a