setNetworkInterfaces method

Future<bool> setNetworkInterfaces(
  1. String interfaceToken, {
  2. required String ip,
  3. required int prefixLength,
})

Sets a static IPv4 address on the given interface. Returns true if the camera requires a reboot to apply changes.

Implementation

Future<bool> setNetworkInterfaces(
  String interfaceToken, {
  required String ip,
  required int prefixLength,
}) async {
  OnvifLogger.instance.log(
    'SetNetworkInterfaces token=$interfaceToken ip=$ip/$prefixLength',
    name: _tag,
  );
  final String body =
      '<tds:SetNetworkInterfaces>'
      '<tds:InterfaceToken>$interfaceToken</tds:InterfaceToken>'
      '<tds:NetworkInterface>'
      '<tt:IPv4>'
      '<tt:Enabled>true</tt:Enabled>'
      '<tt:Manual>'
      '<tt:Address>$ip</tt:Address>'
      '<tt:PrefixLength>$prefixLength</tt:PrefixLength>'
      '</tt:Manual>'
      '<tt:DHCP>false</tt:DHCP>'
      '</tt:IPv4>'
      '</tds:NetworkInterface>'
      '</tds:SetNetworkInterfaces>';
  final response = await client.soapRequest(
    body,
    action: 'http://www.onvif.org/ver10/device/wsdl/SetNetworkInterfaces',
  );

  final document = XmlDocument.parse(response);
  const tdsNs = 'http://www.onvif.org/ver10/device/wsdl';
  final rebootNeeded = document
          .findAllElements('RebootNeeded', namespace: tdsNs)
          .firstOrNull
          ?.innerText
          .trim()
          .toLowerCase() ==
      'true';
  OnvifLogger.instance.log(
    'SetNetworkInterfaces OK ip=$ip/$prefixLength rebootNeeded=$rebootNeeded',
    name: _tag,
  );
  return rebootNeeded;
}