Multiaddr.fromUint8List constructor
Multiaddr.fromUint8List(
- Uint8List addr
Implementation
factory Multiaddr.fromUint8List(Uint8List addr) {
if (addr.isEmpty) {
throw MultiaddrException('addr is empty');
}
var pos = 0; // current position in addr.
var components = <Component>[];
while (pos < addr.length) {
var (vcode, len) = varintDecoder(addr.sublist(pos));
pos += len;
Protocol protocol;
try {
protocol = Protocol.fromCode(vcode);
} on ProtocolException catch (e) {
throw MultiaddrException(e.message);
}
switch (protocol.size) {
case == 0:
// no value.
components.add(Component(protocol));
break;
case > 0:
// fixed length.
var listLen = (protocol.size / 8).ceil();
if (pos + listLen > addr.length) {
throw MultiaddrException(
'protocol ${protocol.name} requires value');
}
var value = addr.sublist(pos, pos + listLen);
pos += listLen;
components.add(Component(protocol, value));
break;
default:
// variable length.
var (valSize, len) = varintDecoder(addr.sublist(pos));
pos += len;
if (pos + len > addr.length) {
throw MultiaddrException(
'protocol ${protocol.name} requires value');
}
var valLen = (valSize / 8).ceil();
var value = addr.sublist(pos, pos + valLen);
pos += valLen;
components.add(Component(protocol, value));
}
}
return Multiaddr(components);
}