sanitizeAddrsplodedSet function
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;
}