ls method

Future<List> ls()

Implementation

Future<List> ls() async {
  var n = 0;
  List li = [];
  while (true) {
    final r = await get('GetGenericPortMappingEntry',
        "<NewPortMappingIndex>${n++}</NewPortMappingIndex>");
    final statusCode = r.statusCode;
    if (500 == statusCode || 200 == statusCode) {
      final xml = XmlDocument.parse(await r.text());
      if (200 == statusCode) {
        final meta = xml
            .getElement('s:Envelope')
            ?.getElement('s:Body')
            ?.getElement('u:GetGenericPortMappingEntryResponse');
        if (meta != null) {
          final map = [];
          for (var i in [
            "NewExternalPort",
            "NewInternalPort",
            "NewEnabled",
            "NewLeaseDuration",
          ]) {
            map.add(int.parse(meta.getElement(i)!.text));
          }
          for (var i in [
            "NewProtocol",
            "NewRemoteHost",
            "NewInternalClient",
            "NewPortMappingDescription",
          ]) {
            map.add(meta.getElement(i)?.text ?? '');
          }
          li.add(map);
        }
        continue;
      } else {
        if (xml.findAllElements('errorCode').first.text == '713') {
          break;
        }
      }
    }

    stderr.write("\n⚠️ $statusCode\n${await r.text()}\n");
  }
  return li;
}