@property
def question(self):
+ """ The question section."""
return self.sections[0]
@question.setter
@property
def answer(self):
+ """ The answer section."""
return self.sections[1]
@answer.setter
@property
def authority(self):
+ """ The authority section."""
return self.sections[2]
@authority.setter
@property
def additional(self):
+ """ The additional data section."""
return self.sections[3]
@additional.setter
encoder/decoder. If ``None``, the default IDNA 2003 encoder/decoder
is used.
- Returns a ``dns.message.Message``
+ Returns a ``dns.message.QueryMessage``
"""
if isinstance(qname, str):
qname = dns.name.from_text(qname, idna_codec=idna_codec)
rdtype = dns.rdatatype.RdataType.make(rdtype)
rdclass = dns.rdataclass.RdataClass.make(rdclass)
- m = Message()
+ m = QueryMessage()
m.flags |= dns.flags.RD
m.find_rrset(m.question, qname, rdclass, rdtype, create=True,
force_unique=True)
*fudge*, an ``int``, the TSIG time fudge.
- Returns a ``dns.message.Message`` object.
+ Returns a ``dns.message.Message`` object whose specific class is
+ appropriate for the query. For example, if query is a
+ ``dns.update.UpdateMessage``, response will be too.
"""
if query.flags & dns.flags.QR:
raise dns.exception.FormError('specified query message is not a query')
- response = dns.message.Message(query.id)
+ factory = _message_factory_from_opcode(query.opcode)
+ response = factory(id=query.id)
response.flags = dns.flags.QR | (query.flags & dns.flags.RD)
if recursion_available:
response.flags |= dns.flags.RA
@property
def zone(self):
+ """The zone section."""
return self.sections[0]
@zone.setter
@property
def prerequisite(self):
+ """The prerequisite section."""
return self.sections[1]
@prerequisite.setter
@property
def update(self):
+ """The update section."""
return self.sections[2]
@update.setter
The dns.message.Message Class
-----------------------------
+This is the base class for all messages, and the class used for any
+DNS opcodes that do not have a more specific class.
+
.. autoclass:: dns.message.Message
:members:
An ``int``, the DNS flags of the message.
- .. attribute:: question
-
- The question section, a list of ``dns.rrset.RRset`` objects.
-
- .. attribute:: answer
-
- The answer section, a list of ``dns.rrset.RRset`` objects.
-
- .. attribute:: authority
-
- The authority section, a list of ``dns.rrset.RRset`` objects.
-
- .. attribute:: additional
+ .. attribute:: sections
- The additional section, a list of ``dns.rrset.RRset`` objects.
+ A list of lists of ``dns.rrset.RRset`` objects.
.. attribute:: edns
.. _message-update:
-The dns.update.Update Class
----------------------------
+The dns.update.UpdateMessage Class
+----------------------------------
-DNS Dynamic Update message have a complex encoding, so
-dnspython provides a subclass of ``dns.message.Message``
-specialized for creating them.
+The ``dns.update.UpdateMessage`` class is used for DNS Dynamic Update
+messages. It provides section access using the DNS Dynamic Update
+section names, and a variety of convenience methods for constructing
+dynamic updates.
-.. autoclass:: dns.update.Update
+.. autoclass:: dns.update.UpdateMessage
:members:
+
+The following constants may be used to specify sections in the
+``find_rrset()`` and ``get_rrset()`` methods:
+
+.. autodata:: dns.update.ZONE
+.. autodata:: dns.update.PREREQ
+.. autodata:: dns.update.UPDATE
+.. autodata:: dns.update.ADDITIONAL
DNS Messages
============
-Objects of the dns.message.Message class represent a single DNS message,
-as defined by `RFC 1035 <https://tools.ietf.org/html/rfc1035>`_ and its
-many updates and extensions.
+Objects of the dns.message.Message class and its subclasses represent
+a single DNS message, as defined by `RFC 1035
+<https://tools.ietf.org/html/rfc1035>`_ and its many updates and
+extensions.
The module provides tools for constructing and manipulating messages.
TSIG signatures and EDNS are also supported. Messages can be dumped to
message-opcode
message-rcode
message-edns
+ message-query
message-update