fromBytes static method

SOAResponseRecord fromBytes({
  1. required String name,
  2. required int ttl,
  3. required Uint8List bytes,
  4. required int offset,
  5. required int length,
})

Implementation

static SOAResponseRecord fromBytes({
    required String name,
    required int ttl,
    required Uint8List bytes,
    required int offset,
    required int length }) {

    final int end = offset + length;
    if (end > bytes.length) {
        throw FormatException('Invalid SOA record: insufficient bytes');
    }

    // mname
    final (offset1, mname) = DNSHelper.parseDomainName(bytes, offset);

    // rname
    final (offset2, rname) = DNSHelper.parseDomainName(bytes, offset1);

    // Read the 5 uint32 fields
    int readUint32(int o) => (bytes[o] << 24) | (bytes[o + 1] << 16) | (bytes[o + 2] << 8) | bytes[o + 3];

    final int serial   = readUint32(offset2);
    final int refresh  = readUint32(offset2 + 4);
    final int retry    = readUint32(offset2 + 8);
    final int expire   = readUint32(offset2 + 12);
    final int minimum  = readUint32(offset2 + 16);

    return SOAResponseRecord(
        name: name,
        ttl: ttl,
        mname: mname,
        rname: rname,
        serial: serial,
        refresh: refresh,
        retry: retry,
        expire: expire,
        minimum: minimum);
}