decodeSelf method
Decodes the current object from the given RawReader.
Implementation
@override
void decodeSelf(RawReader reader) {
// 4-byte span at index 0
_v0 = reader.readUint32();
// Check IP version
final version = _v0 >> 28;
if (version != 6) {
throw ArgumentError('IP version number should be 6, not $version');
}
// 4-byte span at index 4
_v1 = reader.readUint32();
// 16-byte source IP address
source = Ip6Address.decode(reader);
// 16-byte destination IP address
destination = Ip6Address.decode(reader);
// Payload
final payloadLength = _v1 >> 16;
SelfEncoder? payload;
final protocol = ipProtocolMap[payloadProtocolNumber];
if (protocol != null) {
final packetFactory = protocol.packetFactory;
if (packetFactory != null) {
final packet = packetFactory();
if (packet is IpPayload) {
packet.parentPacket = this;
}
packet.decodeSelf(reader);
payload = packet;
}
}
payload ??= RawData.decode(reader, payloadLength);
super.payload = payload;
}