#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
#include <stdint.h>
#include <stddef.h>
#define DNS_MESSAGE_TOPIC "TOPIC_DNS_MESSAGE"
/*.
First call DNS_MESSAGE_TRANSACTION_BEGIN to create the transaction,
then publish the transaction's DNS_MESSAGE_QUERY/DNS_MESSAGE_RESPONSE,
and finally call DNS_MESSAGE_TRANSACTION_END to release the transaction.
*/
enum dns_message_type
DNS_MESSAGE_QUERY=1,
DNS_MESSAGE_RESPONSE,
DNS_MESSAGE_TRANSACTION_BEGIN,
DNS_MESSAGE_TRANSACTION_END,
DNS_MESSAGE_MAX
};
struct dns_flag
uint8_t qr:1;
uint8_t opcode:4;
uint8_t aa:1;
uint8_t tc:1;
uint8_t rd:1;
uint8_t ra:1;
uint8_t z:3;
uint8_t rcode:4;
struct dns_message;
struct dns_query_question;
struct dns_resource_record;
enum dns_message_type dns_message_type_get(struct dns_message *msg);
int32_t dns_message_transaction_index_get(struct dns_message *msg);
int32_t dns_message_header_id_get(struct dns_message *msg);
struct dns_flag *dns_message_header_flag_get0(struct dns_message *msg);
void dns_message_query_question_get0(struct dns_message *msg, struct dns_query_question **question, uint16_t *n_question);
const char *dns_query_question_qname_get0(struct dns_query_question *question);
int32_t dns_query_question_qtype_get0(struct dns_query_question *question);
int32_t dns_query_question_qclass_get0(struct dns_query_question *question);
int dns_message_resource_record_is_dnssec(struct dns_message *msg);
const char *dns_message_resource_record_json_exporter(struct dns_message *msg);
const char *dns_message_resource_record_cname_json_exporter(struct dns_message *msg);
}