getNetworkInterfaces method
Returns the list of network interfaces on the device.
Implementation
Future<List<OnvifNetworkInterface>> getNetworkInterfaces() async {
const String body = '<tds:GetNetworkInterfaces/>';
final response = await client.soapRequest(
body,
action: 'http://www.onvif.org/ver10/device/wsdl/GetNetworkInterfaces',
);
final document = XmlDocument.parse(response);
const tdsNs = 'http://www.onvif.org/ver10/device/wsdl';
const ttNs = 'http://www.onvif.org/ver10/schema';
final result = <OnvifNetworkInterface>[];
for (final iface in document.findAllElements('NetworkInterfaces', namespace: tdsNs)) {
final token = iface.getAttribute('token') ?? '';
final enabled = iface.findElements('Enabled', namespace: ttNs).firstOrNull?.innerText.trim().toLowerCase() == 'true';
final hwAddress = iface.findElements('HwAddress', namespace: ttNs).firstOrNull?.innerText.trim();
final ipv4Config = iface.findAllElements('Config', namespace: ttNs).firstOrNull;
final dhcp = ipv4Config?.findElements('DHCP', namespace: ttNs).firstOrNull?.innerText.trim().toLowerCase() == 'true';
final manualIp = ipv4Config?.findAllElements('Manual', namespace: ttNs).firstOrNull;
final dhcpIp = ipv4Config?.findAllElements('FromDHCP', namespace: ttNs).firstOrNull;
final ipNode = manualIp ?? dhcpIp;
final ipv4Address = ipNode?.findElements('Address', namespace: ttNs).firstOrNull?.innerText.trim();
final prefixStr = ipNode?.findElements('PrefixLength', namespace: ttNs).firstOrNull?.innerText.trim();
result.add(OnvifNetworkInterface(
token: token,
enabled: enabled,
dhcp: dhcp,
ipv4Address: (ipv4Address == null || ipv4Address.isEmpty) ? null : ipv4Address,
prefixLength: prefixStr != null ? int.tryParse(prefixStr) : null,
hwAddress: (hwAddress == null || hwAddress.isEmpty) ? null : hwAddress,
));
}
OnvifLogger.instance.log(
'GetNetworkInterfaces count=${result.length} ${result.map((i) => '${i.token}:${i.ipv4Address}/${i.prefixLength} dhcp=${i.dhcp}').join(' ')}',
name: _tag,
);
return result;
}