Skip to content

Commit

Permalink
Android tv-casting-app: Adding defensive checks in DiscoveredNodeData…
Browse files Browse the repository at this point in the history
… constructor (#108)

* Android tv-casting-app: Adding defensive null checks in DiscoveredNodeData constructor

* Adding more defensive checks / exception handling
  • Loading branch information
sharadb-amazon committed Mar 3, 2023
1 parent 02af39d commit 90bdc18
Showing 1 changed file with 46 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,16 @@
package com.chip.casting;

import android.net.nsd.NsdServiceInfo;
import android.util.Log;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class DiscoveredNodeData {
private static final String TAG = DiscoveredNodeData.class.getSimpleName();

private static final int MAX_IP_ADDRESSES = 5;
private static final int MAX_ROTATING_ID_LEN = 50;
private static final String KEY_DEVICE_NAME = "DN";
Expand All @@ -51,26 +54,54 @@ public class DiscoveredNodeData {

public DiscoveredNodeData(NsdServiceInfo serviceInfo) {
Map<String, byte[]> attributes = serviceInfo.getAttributes();
this.deviceName = new String(attributes.get(KEY_DEVICE_NAME), StandardCharsets.UTF_8);
if (serviceInfo.getHost() != null) {
this.hostName = serviceInfo.getHost().getHostName();
}
this.deviceType =
Long.parseLong(new String(attributes.get(KEY_DEVICE_TYPE), StandardCharsets.UTF_8));

String vp = new String(attributes.get(KEY_VENDOR_PRODUCT), StandardCharsets.UTF_8);
if (vp != null) {
String[] vpArray = vp.split("\\+");
if (vpArray.length > 0) {
this.vendorId = Long.parseLong(vpArray[0]);
if (vpArray.length == 2) {
this.productId = Long.parseLong(vpArray[1]);

if (attributes != null) {
if (attributes.get(KEY_DEVICE_NAME) != null) {
this.deviceName = new String(attributes.get(KEY_DEVICE_NAME), StandardCharsets.UTF_8);
} else {
Log.e(TAG, "No device name (DN) found in DiscovoredNodeData");
}

if (attributes.get(KEY_DEVICE_TYPE) != null) {
try {
this.deviceType =
Long.parseLong(new String(attributes.get(KEY_DEVICE_TYPE), StandardCharsets.UTF_8));
} catch (NumberFormatException e) {
Log.e(TAG, "Could not parse TXT record for DT: " + e.getMessage());
}
} else {
Log.e(TAG, "TXT Record for DT was null");
}

if (attributes.get(KEY_VENDOR_PRODUCT) != null) {
String vp = new String(attributes.get(KEY_VENDOR_PRODUCT), StandardCharsets.UTF_8);
if (vp != null) {
String[] vpArray = vp.split("\\+");
try {
if (vpArray.length > 0) {
this.vendorId = Long.parseLong(vpArray[0]);
if (vpArray.length == 2) {
this.productId = Long.parseLong(vpArray[1]);
}
}
} catch (NumberFormatException e) {
Log.e(TAG, "Could not parse TXT record for VP: " + e.getMessage());
}
}
} else {
Log.e(TAG, "TXT Record for VP was null");
}
} else {
Log.e(TAG, "NsdServiceInfo.attributes was null");
}

if (serviceInfo.getHost() != null) {
this.hostName = serviceInfo.getHost().getHostName();
this.ipAddresses = Arrays.asList(serviceInfo.getHost());
} else {
Log.e(TAG, "Host name was null");
}
this.port = serviceInfo.getPort();
this.ipAddresses = Arrays.asList(serviceInfo.getHost());
this.numIPs = 1;
}

Expand Down

0 comments on commit 90bdc18

Please sign in to comment.