sanitizeAddrsplodedSet function

List<MultiAddr> sanitizeAddrsplodedSet(
  1. List<MultiAddr> publicAddrs,
  2. List<MultiAddr> privateAddrs
)

Implementation

List<MultiAddr> sanitizeAddrsplodedSet(
    List<MultiAddr> publicAddrs, List<MultiAddr> privateAddrs) {
  Set<int> privports = {};
  Map<String, List<_PortAndAddr>> pubaddrGroups = {};

  for (var a in privateAddrs) {
    privports.add(getAddrKeyAndPort(a).port);
  }

  for (var a in publicAddrs) {
    var kap = getAddrKeyAndPort(a);
    pubaddrGroups.putIfAbsent(kap.key, () => []).add(_PortAndAddr(a, kap.port));
  }

  List<MultiAddr> result = [];
  pubaddrGroups.forEach((key, pas) {
    if (pas.length == 1) {
      result.add(pas[0].addr);
      return;
    }

    bool haveAddr = false;
    List<MultiAddr> selectedForThisKey = [];
    for (var pa in pas) {
      if (privports.contains(pa.port)) {
        selectedForThisKey.add(pa.addr);
        haveAddr = true;
      } else if (pa.port == 4001 || pa.port == 4002) { // Default libp2p ports
        // Only add if not already added via private port match for this key
        if (!selectedForThisKey.any((sa) => getAddrKeyAndPort(sa).port == pa.port)) {
             selectedForThisKey.add(pa.addr);
        }
        haveAddr = true;
      }
    }

    if (haveAddr) {
        result.addAll(selectedForThisKey.toSet().toList()); // toSet to remove duplicates if any
    } else {
      // We weren't able to select a preferred port; use them all for this key
      for (var pa in pas) {
        result.add(pa.addr);
      }
    }
  });

  return result;
}