def parse(cls, payload, offset): name, offset = parse_name(payload, offset) resource = unpack('>H', payload[offset:offset + 2])[0] offset += 2 c = unpack('>H', payload[offset:offset + 2])[0] offset += 2 return cls(name, resource=Resource.find(value=resource), cls=find_class(c)), offset
def parse(cls, payload, offset, length): mname, offset = parse_name(payload, offset) rname, offset = parse_name(payload, offset) serial = unpack('>I', payload[offset:offset + 4])[0] offset += 4 refresh = unpack('>i', payload[offset:offset + 4])[0] offset += 4 retry = unpack('>i', payload[offset:offset + 4])[0] offset += 4 expire = unpack('>i', payload[offset:offset + 4])[0] offset += 4 minimum = unpack('>i', payload[offset:offset + 4])[0] offset += 4 return cls(mname, rname, serial, refresh, retry, expire, minimum)
def parse(cls, payload, offset, length): ns = parse_name(payload, offset)[0] return cls(ns)
def parse(cls, payload, offset, length): preference = unpack('>H', payload[offset:offset + 2])[0] offset += 2 name = parse_name(payload, offset)[0] return cls(name, preference)
def test_recursion(self): payload = b'\x05apple\x03com\x00\ndevelopers' + pack('>H', (0xc000 | 0)) self.assertEqual(parse_name(payload, 11)[0], 'developers.apple.com')
def test_empty(self): self.assertEqual(pack_name(''), b'\x00') self.assertEqual(parse_name(b'\x00', 0)[0], '')
def test_recursion(self): payload = b'\x05apple\x03com\x00\ndevelopers' + pack( '>H', (0xc000 | 0)) self.assertEqual(parse_name(payload, 11)[0], 'developers.apple.com')