decodeSelf method

  1. @override
void decodeSelf(
  1. RawReader reader
)

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