and to_wire() records its rendered output (minus any length prefix).
self.index: IndexType = {}
self.errors: List[MessageError] = []
self.time = 0.0
+ self.wire: Optional[bytes] = None
@property
def question(self) -> List[dns.rrset.RRset]:
if multi:
self.tsig_ctx = ctx
wire = r.get_wire()
+ self.wire = wire
if prepend_length:
wire = len(wire).to_bytes(2, "big") + wire
return wire
factory = _message_factory_from_opcode(dns.opcode.from_flags(flags))
self.message = factory(id=id)
self.message.flags = dns.flags.Flag(flags)
+ self.message.wire = self.parser.wire
self.initialize_message(self.message)
self.one_rr_per_rrset = self.message._get_one_rr_per_rrset(
self.one_rr_per_rrset
.. attribute:: ednsflags
An ``int``, the EDNS flags.
-
+
.. attribute:: payload
An ``int``, the EDNS payload size. The default is 0.
.. attribute:: original_id
An ``int``, the TSIG original id; defaults to the message's id.
-
+
.. attribute:: tsig_error
An ``int``, the TSIG error code. The default is 0.
is ``{}``. Indexing improves the performance of finding RRsets.
Indexing can be disabled by setting the index to ``None``.
+ .. attribute:: wire
+
+ A ``bytes`` or ``None``, the encoded wire format data used to create this
+ message with ``dns.message.from_wire()`` or the output most recently generated by
+ ``to_wire()``.
+
The following constants may be used to specify sections in the
``find_rrset()`` and ``get_rrset()`` methods:
self.assertEqual(len(m2.options), 1)
self.assertEqual(m2.options[0], opt)
+ def test_keeping_wire(self):
+ m = dns.message.from_wire(goodwire)
+ self.assertEqual(m.wire, goodwire)
+ m = dns.message.make_query("example", "A")
+ self.assertEqual(m.wire, None)
+
+ def test_recording_wire(self):
+ m = dns.message.from_wire(goodwire)
+ self.assertEqual(m.wire, goodwire)
+ m.wire = None
+ wire = m.to_wire()
+ self.assertEqual(wire, goodwire)
+ self.assertEqual(m.wire, goodwire)
+
def test_TooBig(self):
def bad():
q = dns.message.from_text(query_text)