summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/dns_decoder.h9
-rw-r--r--src/dns_decoder.cpp32
-rw-r--r--src/version.map4
3 files changed, 34 insertions, 11 deletions
diff --git a/include/dns_decoder.h b/include/dns_decoder.h
index 69e1e4b..eba57f7 100644
--- a/include/dns_decoder.h
+++ b/include/dns_decoder.h
@@ -43,6 +43,15 @@ struct dns_resource_record;
enum dns_message_type dns_message_type_get(struct dns_message *msg);
int32_t dns_message_header_id_get(struct dns_message *msg);
+
+int32_t dns_message_header_qdcount_get(struct dns_message *msg);
+// answer resource records count
+int32_t dns_message_header_ancount_get(struct dns_message *msg);
+// authority resource records count
+int32_t dns_message_header_aucount_get(struct dns_message *msg);
+// additional resource records count
+int32_t dns_message_header_adcount_get(struct dns_message *msg);
+
struct dns_flag *dns_message_header_flag_get0(struct dns_message *msg);
void dns_message_uuid_get0(struct dns_message *msg, char **value, size_t *value_sz);
diff --git a/src/dns_decoder.cpp b/src/dns_decoder.cpp
index 784ad07..603f786 100644
--- a/src/dns_decoder.cpp
+++ b/src/dns_decoder.cpp
@@ -1894,22 +1894,32 @@ void dns_message_uuid_get0(struct dns_message *msg, char **value, size_t *value_
enum dns_message_type dns_message_type_get(struct dns_message *msg)
{
- if(NULL==msg)
- {
- return DNS_MESSAGE_MAX;
- }
-
- return msg->type;
+ return ((NULL==msg) ? DNS_MESSAGE_MAX : msg->type);
}
int32_t dns_message_header_id_get(struct dns_message *msg)
{
- if(NULL==msg || msg->magic!=DNS_MESSAGE_MAGIC || msg->type==DNS_MESSAGE_TRANSACTION_BEGIN || msg->type==DNS_MESSAGE_TRANSACTION_END)
- {
- return -1;
- }
+ return ((NULL==msg || msg->magic!=DNS_MESSAGE_MAGIC || msg->type==DNS_MESSAGE_TRANSACTION_BEGIN || msg->type==DNS_MESSAGE_TRANSACTION_END) ? -1 : msg->trans_identifier_id);
+}
+
+int32_t dns_message_header_qdcount_get(struct dns_message *msg)
+{
+ return ((NULL==msg || msg->magic!=DNS_MESSAGE_MAGIC || msg->type==DNS_MESSAGE_TRANSACTION_BEGIN || msg->type==DNS_MESSAGE_TRANSACTION_END) ? -1 : msg->n_question);
+}
+
+int32_t dns_message_header_ancount_get(struct dns_message *msg)
+{
+ return ((NULL==msg || msg->magic!=DNS_MESSAGE_MAGIC || msg->type==DNS_MESSAGE_TRANSACTION_BEGIN || msg->type==DNS_MESSAGE_TRANSACTION_END) ? -1 : msg->n_answer_rr);
+}
- return msg->trans_identifier_id;
+int32_t dns_message_header_aucount_get(struct dns_message *msg)
+{
+ return ((NULL==msg || msg->magic!=DNS_MESSAGE_MAGIC || msg->type==DNS_MESSAGE_TRANSACTION_BEGIN || msg->type==DNS_MESSAGE_TRANSACTION_END) ? -1 : msg->n_authority_rr);
+}
+
+int32_t dns_message_header_adcount_get(struct dns_message *msg)
+{
+ return ((NULL==msg || msg->magic!=DNS_MESSAGE_MAGIC || msg->type==DNS_MESSAGE_TRANSACTION_BEGIN || msg->type==DNS_MESSAGE_TRANSACTION_END) ? -1 : msg->n_additional_rr);
}
struct dns_flag *dns_message_header_flag_get0(struct dns_message *msg)
diff --git a/src/version.map b/src/version.map
index bfa9d04..30bc121 100644
--- a/src/version.map
+++ b/src/version.map
@@ -6,6 +6,10 @@ global:
*dns_message_type_get*;
*dns_message_header_id_get*;
*dns_message_header_flag_get0*;
+ *dns_message_header_qdcount_get*;
+ *dns_message_header_ancount_get*;
+ *dns_message_header_aucount_get*;
+ *dns_message_header_adcount_get*;
*dns_message_query_question_get0*;
*dns_query_question_qname_get0*;
*dns_query_question_qtype_get0*;