multiaddrToBytes function
- FullAddress address
Helper to encode FullAddress to binary multiaddr
Implementation
Uint8List multiaddrToBytes(FullAddress address) {
final buffer = <int>[];
if (address.address.contains('.')) {
// IPv4
buffer.add(4); // ip4
buffer.addAll(address.address.split('.').map(int.parse));
} else if (address.address.contains(':') || address.address == '::1') {
// IPv6
buffer.add(41); // ip6
// Handle special cases like ::1
String expanded = address.address;
if (expanded == '::1') {
expanded = '0000:0000:0000:0000:0000:0000:0000:0001';
} else if (expanded.contains('::')) {
// Simple expansion for ::
final parts = expanded.split('::');
final left = parts[0].isEmpty ? <String>[] : parts[0].split(':');
final right = parts[1].isEmpty ? <String>[] : parts[1].split(':');
final missing = 8 - (left.length + right.length);
final mid = List.filled(missing, '0000');
expanded = (left + mid + right).join(':');
}
final groups = expanded.split(':');
for (final group in groups) {
final val = int.parse(group.isEmpty ? '0' : group, radix: 16);
buffer.add((val >> 8) & 0xFF);
buffer.add(val & 0xFF);
}
} else {
return Uint8List(0); // Unsupported
}
// Assuming TCP (6) by default for FullAddress as we don't have protocol field
buffer.add(6); // tcp
buffer.add((address.port >> 8) & 0xFF);
buffer.add(address.port & 0xFF);
return Uint8List.fromList(buffer);
}