encodeSelf method
Writes this object to the provided RawWriter.
Implementation
@override
void encodeSelf(RawWriter writer) {
final start = writer.length;
// 4-byte span at index 0
// We add IP version number (6)
writer
..writeUint32(transformUint32Bits(_v0, 28, 0xF, 6))
// 4-byte span at index 4
// We will set payload length later
..writeUint32(_v1);
// 16-byte source IP address
source?.encodeSelf(writer);
// 16-byte destination IP address
destination?.encodeSelf(writer);
// Payload
final startOfPayload = writer.length;
final payload = this.payload;
if (payload is IpPayload && !identical(payload.parentPacket, this)) {
final oldParentPacket = payload.parentPacket;
try {
payload
..parentPacket = this
..encodeSelf(writer);
} finally {
payload.parentPacket = oldParentPacket;
}
} else {
payload.encodeSelf(writer);
}
final payloadLength = writer.length - startOfPayload;
if (payloadLength >> 16 != 0) {
throw StateError('payload length does not fit in 16 bits');
}
// Set payload length
writer.bufferAsByteData.setUint16(start + 4, payloadLength);
}