3 The DNSQuestion (``dq``) object
4 ===============================
6 A DNSQuestion or ``dq`` object is available in several hooks and Lua actions.
7 This object contains details about the current state of the question.
8 This state can be modified from the various hooks.
10 .. class:: DNSQuestion
12 The DNSQuestion object has several attributes, many of them read-only:
14 .. attribute:: DNSQuestion.dh
16 The :ref:`DNSHeader` of this query.
18 .. attribute:: DNSQuestion.ecsOverride
20 Whether an existing ECS value should be overridden, settable.
22 .. attribute:: DNSQuestion.ecsPrefixLength
24 The ECS prefix length to use, settable.
26 .. attribute:: DNSQuestion.len
28 The length of the data starting at :attr:`DNSQuestion.dh`, including any trailing bytes following the DNS message.
30 .. attribute:: DNSQuestion.localaddr
32 :ref:`ComboAddress` of the local bind this question was received on.
34 .. attribute:: DNSQuestion.opcode
36 Integer describing the OPCODE of the packet. Can be matched against :ref:`DNSOpcode`.
38 .. attribute:: DNSQuestion.qclass
40 QClass (as an unsigned integer) of this question.
41 Can be compared against :ref:`DNSClass`.
43 .. attribute:: DNSQuestion.qname
45 :class:`DNSName` of this question.
47 .. attribute:: DNSQuestion.qtype
49 QType (as an unsigned integer) of this question.
50 Can be compared against the pre-defined :ref:`constants <DNSQType>` like ``DNSQType.A``, DNSQType.AAAA``.
52 .. attribute:: DNSQuestion.remoteaddr
54 :ref:`ComboAddress` of the remote client.
56 .. attribute:: DNSQuestion.rcode
58 RCode (as an unsigned integer) of this question.
59 Can be compared against :ref:`DNSRCode`
61 .. attribute:: DNSQuestion.size
63 The total size of the buffer starting at :attr:`DNSQuestion.dh`.
65 .. attribute:: DNSQuestion.skipCache
67 Whether to skip cache lookup / storing the answer for this question, settable.
69 .. attribute:: DNSQuestion.tcp
71 Whether the query was received over TCP.
73 .. attribute:: DNSQuestion.useECS
75 Whether to send ECS to the backend, settable.
77 It also supports the following methods:
79 .. method:: DNSQuestion:getDO() -> bool
81 .. versionadded:: 1.2.0
83 Get the value of the DNSSEC OK bit.
85 :returns: true if the DO bit was set, false otherwise
87 .. method:: DNSQuestion:getEDNSOptions() -> table
89 .. versionadded:: 1.3.3
91 Return the list of EDNS Options, if any.
93 :returns: A table of EDNSOptionView objects, indexed on the ECS Option code
95 .. method:: DNSQuestion:getServerNameIndication() -> string
97 .. versionadded:: 1.4.0
99 Return the TLS Server Name Indication (SNI) value sent by the client over DoT or DoH, if any. See :func:`SNIRule`
100 for more information, especially about the availability of SNI over DoH.
102 :returns: A string containing the TLS SNI value, if any
104 .. method:: DNSQuestion:getTag(key) -> string
106 .. versionadded:: 1.2.0
108 Get the value of a tag stored into the DNSQuestion object.
110 :param string key: The tag's key
111 :returns: The tag's value if it was set, an empty string otherwise
113 .. method:: DNSQuestion:getTagArray() -> table
115 .. versionadded:: 1.2.0
117 Get all the tags stored into the DNSQuestion object.
119 :returns: A table of tags, using strings as keys and values
121 .. method:: DNSQuestion:getTrailingData() -> string
123 .. versionadded:: 1.4.0
125 Get all data following the DNS message.
127 :returns: The trailing data as a null-safe string
129 .. method:: DNSQuestion:sendTrap(reason)
131 .. versionadded:: 1.2.0
135 :param string reason: An optional string describing the reason why this trap was sent
137 .. method:: DNSQuestion:setTag(key, value)
139 .. versionadded:: 1.2.0
141 Set a tag into the DNSQuestion object.
143 :param string key: The tag's key
144 :param string value: The tag's value
146 .. method:: DNSQuestion:setTagArray(tags)
148 .. versionadded:: 1.2.0
150 Set an array of tags into the DNSQuestion object.
152 :param table tags: A table of tags, using strings as keys and values
154 .. method:: DNSQuestion:setTrailingData(tail) -> bool
156 .. versionadded:: 1.4.0
158 Set the data following the DNS message, overwriting anything already present.
160 :param string tail: The new data
161 :returns: true if the operation succeeded, false otherwise
168 .. class:: DNSResponse
170 This object has all the functions and members of a :ref:`DNSQuestion <DNSQuestion>` and some more
172 .. method:: DNSResponse:editTTLs(func)
174 The function ``func`` is invoked for every entry in the answer, authority and additional section.
176 ``func`` points to a function with the following prototype: ``myFunc(section, qclass, qtype, ttl)``
178 All parameters to ``func`` are integers:
180 - ``section`` is the section in the packet and can be compared to :ref:`DNSSection`
181 - ``qclass`` is the QClass of the record. Can be compared to :ref:`DNSClass`
182 - ``qtype`` is the QType of the record. Can be e.g. compared to ``DNSQType.A``, ``DNSQType.AAAA`` :ref:`constants <DNSQType>` and the like.
183 - ``ttl`` is the current TTL
185 This function must return an integer with the new TTL.
186 Setting this TTL to 0 to leaves it unchanged
188 :param string func: The function to call to edit TTLs.
192 DNSHeader (``dh``) object
193 =========================
197 This object holds a representation of a DNS packet's header.
199 .. method:: DNSHeader:getRD() -> bool
201 Get recursion desired flag.
203 .. method:: DNSHeader:setRD(rd)
205 Set recursion desired flag.
207 :param bool rd: State of the RD flag
209 .. method:: DNSHeader:setTC(tc)
211 Set truncation flag (TC).
213 :param bool tc: State of the TC flag
215 .. method:: DNSHeader:setQR(qr)
217 Set Query/Response flag.
218 Setting QR to true means "This is an answer packet".
220 :param bool qr: State of the QR flag
222 .. method:: DNSHeader:getCD() -> bool
224 Get checking disabled flag.
226 .. method:: DNSHeader:setCD(cd)
228 Set checking disabled flag.
230 :param bool cd: State of the CD flag
234 EDNSOptionView object
235 =====================
237 .. class:: EDNSOptionView
239 .. versionadded:: 1.3.3
241 An object that represents the values of a single EDNS option received in a query.
243 .. method:: EDNSOptionView:count()
245 The number of values for this EDNS option.
247 .. method:: EDNSOptionView:getValues()
249 Return a table of NULL-safe strings values for this EDNS option.