Perf: yyjson replaces cjson

This commit is contained in:
liuxueli
2024-06-27 01:44:07 +00:00
parent e24a7a6fb4
commit da0a82039f
21 changed files with 17620 additions and 284 deletions

View File

@@ -25,6 +25,8 @@ if (CMAKE_CXX_CPPCHECK)
"--suppress=variableScope"
"--suppress=unreadVariable"
"--suppress=unusedStructMember"
"--suppress=*:${PROJECT_SOURCE_DIR}/deps/toml/*"
"--suppress=*:${PROJECT_SOURCE_DIR}/deps/yyjson/*"
)
set(CMAKE_C_CPPCHECK ${CMAKE_CXX_CPPCHECK})
else()

View File

@@ -14,10 +14,9 @@ stat_interval_time_s=5
stat_output="metrics/dns_decoder_local_stat.json"
[decoder.dns.test]
write_result_enable="no"
commit_result_enable="yes"
[decoder.dns.test.perf]
perf_worker_thread_num=1
decode_resource_record_enable="yes"
decode_resource_record_enable="no"
export_resource_record_enable="no"

21
deps/yyjson/LICENSE vendored Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 YaoYuan <ibireme@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

9447
deps/yyjson/yyjson.c vendored Normal file

File diff suppressed because it is too large Load Diff

7814
deps/yyjson/yyjson.h vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,6 @@ extern "C"
#endif
#include <stdint.h>
#include <linux/limits.h>
#include <stddef.h>
#define DNS_MESSAGE_TOPIC "TOPIC_DNS_MESSAGE"

View File

@@ -4,6 +4,7 @@ include_directories(/opt/MESA/include/)
include_directories(${PROJECT_SOURCE_DIR}/deps/)
aux_source_directory(${PROJECT_SOURCE_DIR}/deps/toml DEPS_SRC)
aux_source_directory(${PROJECT_SOURCE_DIR}/deps/yyjson DEPS_SRC)
set(DNS_DECODER_SRC ${DEPS_SRC} dns_decoder.cpp dns_resource_record_exporter.cpp)

View File

@@ -501,6 +501,8 @@ int32_t dns_resource_record_hinfo_decode(uint8_t *payload, size_t payload_sz, si
ret=dns_read_variable_dstring(payload, payload_sz, payload_offset, &(hinfo->cpu), cpu_sz);
if(ret==DNS_DECODER_FALSE)
{
hinfo->cpu.value_sz=0;
hinfo->cpu.value[0]='\0';
return DNS_DECODER_FALSE;
}
@@ -514,6 +516,8 @@ int32_t dns_resource_record_hinfo_decode(uint8_t *payload, size_t payload_sz, si
ret=dns_read_variable_dstring(payload, payload_sz, payload_offset, &(hinfo->os), os_sz);
if(ret==DNS_DECODER_FALSE)
{
hinfo->os.value_sz=0;
hinfo->os.value[0]='\0';
return DNS_DECODER_FALSE;
}
@@ -958,10 +962,28 @@ int32_t dns_resource_record_specific_field_decode(uint8_t *payload, size_t paylo
ret=dns_resource_record_soa_decode(payload, payload_sz, &offset, &(rr->rdata.soa), rr->rdlength);
break;
case DNS_RR_TYPE_A:
ret=dns_read_variable_dstring(payload, payload_sz, &offset, &(rr->rdata.a), sizeof(uint32_t));
rr->rdata.a.addr_str_len=0;
if(payload_sz>=offset+4)
{
memcpy(&(rr->rdata.a.addr), payload+offset, 4);
ret=DNS_DECODER_TRUE;
}
else
{
ret=DNS_DECODER_FALSE;
}
break;
case DNS_RR_TYPE_AAAA:
ret=dns_read_variable_dstring(payload, payload_sz, &offset, &(rr->rdata.aaaa), 16);
rr->rdata.aaaa.addr_str_len=0;
if(payload_sz>=offset+16)
{
memcpy(rr->rdata.aaaa.addr, payload+offset, 16);
ret=DNS_DECODER_TRUE;
}
else
{
ret=DNS_DECODER_FALSE;
}
break;
case DNS_RR_TYPE_ISDN:
ret=dns_read_variable_dstring(payload, payload_sz, &offset, &(rr->rdata.isdn), sizeof(uint8_t));

View File

@@ -3,6 +3,12 @@
#include <stdint.h>
#include <linux/limits.h>
#include <stddef.h>
#include <sys/uio.h>
#define IPV6_LEN 16
#define IPV4_LEN 4
#define IPV6_STR_LEN 40
#define IPV4_STR_LEN 16
#define DNS_NAME_MAX (NAME_MAX + 1)
// #define HINFO_NAME_MAX (40 + 1) /* https://www.ietf.org/rfc/rfc1010.txt */
@@ -53,6 +59,20 @@ struct dstring
uint8_t value[DNS_NAME_MAX];
};
struct rdata_a
{
uint32_t addr;
uint32_t addr_str_len;
char addr_str[IPV4_STR_LEN];
};
struct rdata_aaaa
{
uint8_t addr[IPV6_LEN];
uint32_t addr_str_len;
char addr_str[IPV6_STR_LEN];
};
struct rdata_hinfo
{
struct dstring os;
@@ -184,15 +204,14 @@ struct dns_resource_record
struct dstring mr;
struct dstring ns;
struct dstring ptr;
struct dstring a;
struct dstring aaaa;
struct dstring dname;
struct dstring isdn;
struct dstring unknown;
struct dstring txt;
struct dstring null;
struct dstring isdn;
struct rdata_a a;
struct rdata_aaaa aaaa;
struct rdata_hinfo hinfo;
struct rdata_minfo minfo;
struct rdata_mx mx;

View File

@@ -3,14 +3,13 @@
#include <string.h>
#include <arpa/inet.h>
#include "cJSON.h"
#include "yyjson/yyjson.h"
#include "dns_decoder.h"
#include "dns_resource_record.h"
void dns_resource_record_str2hex_append(cJSON *one_rr_object, uint8_t *str, size_t str_sz, const char *key)
void dns_resource_record_str2hex_append(yyjson_mut_doc *doc, yyjson_mut_val *rr_object, uint8_t *str, size_t str_sz, const char *key)
{
if(one_rr_object==NULL || str==NULL || str_sz==0 || key==NULL)
if(rr_object==NULL || str==NULL || str_sz==0 || key==NULL)
{
return;
}
@@ -18,9 +17,9 @@ void dns_resource_record_str2hex_append(cJSON *one_rr_object, uint8_t *str, size
size_t offset=0;
char hex_buff[4096]={0};
size_t hex_buff_sz=sizeof(hex_buff);
const char hexChars[] = "0123456789abcdef";
const char hexChars[]="0123456789abcdef";
for (size_t i = 0; i < str_sz && i<((hex_buff_sz/2)-2); i++)
for (size_t i=0; i < str_sz && i<((hex_buff_sz/2)-2); i++)
{
hex_buff[offset++]=hexChars[(str[i] >> 4) & 0x0F];
hex_buff[offset++]=hexChars[str[i] & 0x0F];
@@ -29,198 +28,211 @@ void dns_resource_record_str2hex_append(cJSON *one_rr_object, uint8_t *str, size
if(offset>0)
{
hex_buff[offset]='\0';
cJSON_AddStringToObject(one_rr_object, key, hex_buff);
char *tmp=(char *)malloc(offset+1);
if(tmp!=NULL)
{
memcpy(tmp, hex_buff, offset+1);
yyjson_mut_obj_add_str(doc, rr_object, key, tmp);
//free(tmp);
}
}
}
void dns_resource_record_dstring_append(cJSON *one_rr_object, struct dstring *dstr, const char *key)
void dns_resource_record_dstring_append(yyjson_mut_doc *doc, yyjson_mut_val *rr_object, struct dstring *dstr, const char *key)
{
if(dstr->value_sz > 0)
if(dstr->value_sz>0)
{
cJSON_AddStringToObject(one_rr_object, key, (char *)(dstr->value));
yyjson_mut_obj_add_str(doc, rr_object, key, (char *)(dstr->value));
}
}
cJSON *dns_resource_record_json_create(struct dns_resource_record *rr_array, uint16_t n_rr)
yyjson_mut_val *dns_resource_record_json_create(yyjson_mut_doc *doc, struct dns_resource_record *rr_array, uint16_t n_rr)
{
if(rr_array==NULL || n_rr==0)
{
return NULL;
}
char ip_str[128];
cJSON *dns_rr_array=cJSON_CreateArray();
yyjson_mut_val *dns_rr_array=yyjson_mut_arr(doc);
for(uint16_t i=0; i<n_rr; i++)
{
cJSON *one_rr_object=cJSON_CreateObject();
yyjson_mut_val *one_rr_object=yyjson_mut_obj(doc);
struct dns_resource_record *dns_rr=&(rr_array[i]);
if(dns_rr->type == DNS_RR_TYPE_OPT)
{
cJSON_AddStringToObject(one_rr_object, "name", (const char *)(dns_rr->qname.value));
cJSON_AddNumberToObject(one_rr_object, "type", dns_rr->type);
cJSON_AddNumberToObject(one_rr_object, "udp_payload", dns_rr->rr_class);
cJSON_AddNumberToObject(one_rr_object, "rcode", (int)(dns_rr->ttl>>24));
cJSON_AddNumberToObject(one_rr_object, "version", (int)((dns_rr->ttl>>16)&0xFF));
cJSON_AddNumberToObject(one_rr_object, "Z", (int)(dns_rr->ttl&&0xFFFF));
cJSON_AddNumberToObject(one_rr_object, "rdlength", dns_rr->rdlength);
{
yyjson_mut_obj_add_str(doc, one_rr_object, "name", (char *)(dns_rr->qname.value));
yyjson_mut_obj_add_int(doc, one_rr_object, "type", dns_rr->type);
yyjson_mut_obj_add_int(doc, one_rr_object, "udp_payload", dns_rr->rr_class);
yyjson_mut_obj_add_int(doc, one_rr_object, "rcode", (int)(dns_rr->ttl>>24));
yyjson_mut_obj_add_int(doc, one_rr_object, "version", (int)((dns_rr->ttl>>16)&0xFF));
yyjson_mut_obj_add_int(doc, one_rr_object, "Z", (int)(dns_rr->ttl&&0xFFFF));
yyjson_mut_obj_add_int(doc, one_rr_object, "rdlength", dns_rr->rdlength);
}
else
{
cJSON_AddStringToObject(one_rr_object, "name", (const char *)(dns_rr->qname.value));
cJSON_AddNumberToObject(one_rr_object, "type", dns_rr->type);
cJSON_AddNumberToObject(one_rr_object, "class", dns_rr->rr_class);
cJSON_AddNumberToObject(one_rr_object, "ttl", dns_rr->ttl);
cJSON_AddNumberToObject(one_rr_object, "rdlength", dns_rr->rdlength);
yyjson_mut_obj_add_str(doc, one_rr_object, "name", (char *)(dns_rr->qname.value));
yyjson_mut_obj_add_int(doc, one_rr_object, "type", dns_rr->type);
yyjson_mut_obj_add_int(doc, one_rr_object, "class", dns_rr->rr_class);
yyjson_mut_obj_add_int(doc, one_rr_object, "ttl", dns_rr->ttl);
yyjson_mut_obj_add_int(doc, one_rr_object, "rdlength", dns_rr->rdlength);
}
if(dns_rr->rdlength==0)
{
cJSON_AddItemToArray(dns_rr_array, one_rr_object);
yyjson_mut_arr_add_val(dns_rr_array, one_rr_object);
continue;
}
switch(dns_rr->type)
{
case DNS_RR_TYPE_A:
inet_ntop(AF_INET, (void *)(dns_rr->rdata.a.value), ip_str, sizeof(ip_str));
cJSON_AddStringToObject(one_rr_object, "a", ip_str);
if(dns_rr->rdata.a.addr_str_len==0)
{
inet_ntop(AF_INET, (void *)&(dns_rr->rdata.a.addr), dns_rr->rdata.a.addr_str, sizeof(dns_rr->rdata.a.addr_str));
dns_rr->rdata.a.addr_str_len=strlen(dns_rr->rdata.a.addr_str);
}
yyjson_mut_obj_add_str(doc, one_rr_object, "a", dns_rr->rdata.a.addr_str);
break;
case DNS_RR_TYPE_AAAA:
inet_ntop(AF_INET6, dns_rr->rdata.aaaa.value, ip_str, sizeof(ip_str));
cJSON_AddStringToObject(one_rr_object, "aaaa", ip_str);
if(dns_rr->rdata.aaaa.addr_str_len==0)
{
inet_ntop(AF_INET6, dns_rr->rdata.aaaa.addr, dns_rr->rdata.aaaa.addr_str, sizeof(dns_rr->rdata.aaaa.addr_str));
dns_rr->rdata.aaaa.addr_str_len=strlen(dns_rr->rdata.aaaa.addr_str);
}
yyjson_mut_obj_add_str(doc, one_rr_object, "aaaa", dns_rr->rdata.aaaa.addr_str);
break;
case DNS_RR_TYPE_NS:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.ns), "ns");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.ns), "ns");
break;
case DNS_RR_TYPE_MD:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.md), "md");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.md), "md");
break;
case DNS_RR_TYPE_MF:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.mf), "mf");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.mf), "mf");
break;
case DNS_RR_TYPE_CNAME:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.cname), "cname");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.cname), "cname");
break;
case DNS_RR_TYPE_MB:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.mb), "mb");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.mb), "mb");
break;
case DNS_RR_TYPE_MG:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.mg), "mg");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.mg), "mg");
break;
case DNS_RR_TYPE_MR:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.mr), "mr");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.mr), "mr");
break;
case DNS_RR_TYPE_TXT:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.txt), "txt");
cJSON_AddNumberToObject(one_rr_object, "size", dns_rr->rdata.txt.value_sz);
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.txt), "txt");
yyjson_mut_obj_add_int(doc, one_rr_object, "size", dns_rr->rdata.txt.value_sz);
break;
case DNS_RR_TYPE_NULL:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.null), "null");
cJSON_AddNumberToObject(one_rr_object, "size", dns_rr->rdata.null.value_sz);
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.null), "null");
yyjson_mut_obj_add_int(doc, one_rr_object, "size", dns_rr->rdata.null.value_sz);
break;
case DNS_RR_TYPE_PTR:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.ptr), "ptr");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.ptr), "ptr");
break;
case DNS_RR_TYPE_HINFO:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.hinfo.cpu), "cpu");
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.hinfo.os), "os");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.hinfo.cpu), "cpu");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.hinfo.os), "os");
break;
case DNS_RR_TYPE_MINFO:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.minfo.rmailbx), "rmailbx");
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.minfo.emailbx), "emailbx");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.minfo.rmailbx), "rmailbx");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.minfo.emailbx), "emailbx");
break;
case DNS_RR_TYPE_MX:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.mx.exchange), "exchange");
cJSON_AddNumberToObject(one_rr_object, "preference", dns_rr->rdata.mx.preference);
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.mx.exchange), "exchange");
yyjson_mut_obj_add_int(doc, one_rr_object, "preference", dns_rr->rdata.mx.preference);
break;
case DNS_RR_TYPE_RP:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.rp.mailbox), "mailbox");
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.rp.txt_rr), "txt_rr");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.rp.mailbox), "mailbox");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.rp.txt_rr), "txt_rr");
break;
case DNS_RR_TYPE_SOA:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.soa.mname), "mname");
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.soa.rname), "rname");
cJSON_AddNumberToObject(one_rr_object, "serial", dns_rr->rdata.soa.serial);
cJSON_AddNumberToObject(one_rr_object, "refresh", dns_rr->rdata.soa.refresh);
cJSON_AddNumberToObject(one_rr_object, "retry", dns_rr->rdata.soa.retry);
cJSON_AddNumberToObject(one_rr_object, "cname", dns_rr->rdata.soa.expire);
cJSON_AddNumberToObject(one_rr_object, "minimum", dns_rr->rdata.soa.minimum);
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.soa.mname), "mname");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.soa.rname), "rname");
yyjson_mut_obj_add_int(doc, one_rr_object, "serial", dns_rr->rdata.soa.serial);
yyjson_mut_obj_add_int(doc, one_rr_object, "refresh", dns_rr->rdata.soa.refresh);
yyjson_mut_obj_add_int(doc, one_rr_object, "retry", dns_rr->rdata.soa.retry);
yyjson_mut_obj_add_int(doc, one_rr_object, "expire", dns_rr->rdata.soa.expire);
yyjson_mut_obj_add_int(doc, one_rr_object, "minimum", dns_rr->rdata.soa.minimum);
break;
case DNS_RR_TYPE_WKS:
cJSON_AddStringToObject(one_rr_object, "addr", ip_str);
cJSON_AddNumberToObject(one_rr_object, "protocol", dns_rr->rdata.wks.protocol);
cJSON_AddNumberToObject(one_rr_object, "size", dns_rr->rdata.wks.size);
dns_resource_record_str2hex_append(one_rr_object, dns_rr->rdata.wks.bitmap, dns_rr->rdata.wks.size, "bitmap");
yyjson_mut_obj_add_int(doc, one_rr_object, "protocol", dns_rr->rdata.wks.protocol);
yyjson_mut_obj_add_int(doc, one_rr_object, "size", dns_rr->rdata.wks.size);
dns_resource_record_str2hex_append(doc, one_rr_object, dns_rr->rdata.wks.bitmap, dns_rr->rdata.wks.size, "bitmap");
break;
case DNS_RR_TYPE_OPT:
break;
case DNS_RR_TYPE_DS:
cJSON_AddNumberToObject(one_rr_object, "key_tag", dns_rr->rdata.ds.key_tag);
cJSON_AddNumberToObject(one_rr_object, "algo", dns_rr->rdata.ds.algo);
cJSON_AddNumberToObject(one_rr_object, "digest_type", dns_rr->rdata.ds.digest_type);
cJSON_AddNumberToObject(one_rr_object, "digest_len", dns_rr->rdata.ds.digest_len);
dns_resource_record_str2hex_append(one_rr_object, dns_rr->rdata.ds.digest, dns_rr->rdata.ds.digest_len, "digest");
yyjson_mut_obj_add_int(doc, one_rr_object, "key_tag", dns_rr->rdata.ds.key_tag);
yyjson_mut_obj_add_int(doc, one_rr_object, "algo", dns_rr->rdata.ds.algo);
yyjson_mut_obj_add_int(doc, one_rr_object, "digest_type", dns_rr->rdata.ds.digest_type);
yyjson_mut_obj_add_int(doc, one_rr_object, "digest_len", dns_rr->rdata.ds.digest_len);
dns_resource_record_str2hex_append(doc, one_rr_object, dns_rr->rdata.ds.digest, dns_rr->rdata.ds.digest_len, "digest");
break;
case DNS_RR_TYPE_RRSIG:
cJSON_AddNumberToObject(one_rr_object, "type_covered", dns_rr->rdata.rrsig.type_covered);
cJSON_AddNumberToObject(one_rr_object, "algo", dns_rr->rdata.rrsig.algo);
cJSON_AddNumberToObject(one_rr_object, "labels", dns_rr->rdata.rrsig.labels);
cJSON_AddNumberToObject(one_rr_object, "original_ttl", dns_rr->rdata.rrsig.original_ttl);
cJSON_AddNumberToObject(one_rr_object, "sig_expiration", dns_rr->rdata.rrsig.sig_expiration);
cJSON_AddNumberToObject(one_rr_object, "sig_inception", dns_rr->rdata.rrsig.sig_inception);
cJSON_AddNumberToObject(one_rr_object, "key_tag", dns_rr->rdata.rrsig.key_tag);
yyjson_mut_obj_add_int(doc, one_rr_object, "type_covered", dns_rr->rdata.rrsig.type_covered);
yyjson_mut_obj_add_int(doc, one_rr_object, "algo", dns_rr->rdata.rrsig.algo);
yyjson_mut_obj_add_int(doc, one_rr_object, "labels", dns_rr->rdata.rrsig.labels);
yyjson_mut_obj_add_int(doc, one_rr_object, "original_ttl", dns_rr->rdata.rrsig.original_ttl);
yyjson_mut_obj_add_int(doc, one_rr_object, "sig_expiration", dns_rr->rdata.rrsig.sig_expiration);
yyjson_mut_obj_add_int(doc, one_rr_object, "sig_inception", dns_rr->rdata.rrsig.sig_inception);
yyjson_mut_obj_add_int(doc, one_rr_object, "key_tag", dns_rr->rdata.rrsig.key_tag);
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.rrsig.signer_name), "signer_name");
cJSON_AddNumberToObject(one_rr_object, "signature_len", dns_rr->rdata.rrsig.signature_len);
dns_resource_record_str2hex_append(one_rr_object, dns_rr->rdata.rrsig.signature, dns_rr->rdata.rrsig.signature_len, "signature");
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.rrsig.signer_name), "signer_name");
yyjson_mut_obj_add_int(doc, one_rr_object, "signature_len", dns_rr->rdata.rrsig.signature_len);
dns_resource_record_str2hex_append(doc, one_rr_object, dns_rr->rdata.rrsig.signature, dns_rr->rdata.rrsig.signature_len, "signature");
break;
case DNS_RR_TYPE_NSEC:
dns_resource_record_dstring_append(one_rr_object, &(dns_rr->rdata.nsec.next_domain), "next_domain");
cJSON_AddNumberToObject(one_rr_object, "maps_len", dns_rr->rdata.nsec.type_bit_maps.value_sz);
dns_resource_record_dstring_append(doc, one_rr_object, &(dns_rr->rdata.nsec.next_domain), "next_domain");
dns_resource_record_str2hex_append(one_rr_object, dns_rr->rdata.nsec.type_bit_maps.value, dns_rr->rdata.nsec.type_bit_maps.value_sz, "type_bit_maps");
yyjson_mut_obj_add_int(doc, one_rr_object, "maps_len", dns_rr->rdata.nsec.type_bit_maps.value_sz);
dns_resource_record_str2hex_append(doc, one_rr_object, dns_rr->rdata.nsec.type_bit_maps.value, dns_rr->rdata.nsec.type_bit_maps.value_sz, "type_bit_maps");
break;
case DNS_RR_TYPE_DNSKEY:
cJSON_AddNumberToObject(one_rr_object, "flags", dns_rr->rdata.dnskey.flags);
cJSON_AddNumberToObject(one_rr_object, "protocol", dns_rr->rdata.dnskey.protocol);
cJSON_AddNumberToObject(one_rr_object, "algo", dns_rr->rdata.dnskey.algo);
cJSON_AddNumberToObject(one_rr_object, "public_key_len", dns_rr->rdata.dnskey.public_key_len);
dns_resource_record_str2hex_append(one_rr_object, dns_rr->rdata.dnskey.public_key, dns_rr->rdata.dnskey.public_key_len, "public_key");
yyjson_mut_obj_add_int(doc, one_rr_object, "flags", dns_rr->rdata.dnskey.flags);
yyjson_mut_obj_add_int(doc, one_rr_object, "protocol", dns_rr->rdata.dnskey.protocol);
yyjson_mut_obj_add_int(doc, one_rr_object, "algo", dns_rr->rdata.dnskey.algo);
yyjson_mut_obj_add_int(doc, one_rr_object, "public_key_len", dns_rr->rdata.dnskey.public_key_len);
dns_resource_record_str2hex_append(doc, one_rr_object, dns_rr->rdata.dnskey.public_key, dns_rr->rdata.dnskey.public_key_len, "public_key");
break;
case DNS_RR_TYPE_NSEC3:
cJSON_AddNumberToObject(one_rr_object, "hash_algo", dns_rr->rdata.nsec3.hash_algo);
cJSON_AddNumberToObject(one_rr_object, "flags", dns_rr->rdata.nsec3.flags);
cJSON_AddNumberToObject(one_rr_object, "iteration", dns_rr->rdata.nsec3.iteration);
yyjson_mut_obj_add_int(doc, one_rr_object, "hash_algo", dns_rr->rdata.nsec3.hash_algo);
yyjson_mut_obj_add_int(doc, one_rr_object, "flags", dns_rr->rdata.nsec3.flags);
yyjson_mut_obj_add_int(doc, one_rr_object, "iteration", dns_rr->rdata.nsec3.iteration);
cJSON_AddNumberToObject(one_rr_object, "salt_len", dns_rr->rdata.nsec3.salt_len);
dns_resource_record_str2hex_append(one_rr_object, dns_rr->rdata.nsec3.salt_value, dns_rr->rdata.nsec3.salt_len, "salt_value");
yyjson_mut_obj_add_int(doc, one_rr_object, "salt_len", dns_rr->rdata.nsec3.salt_len);
dns_resource_record_str2hex_append(doc, one_rr_object, dns_rr->rdata.nsec3.salt_value, dns_rr->rdata.nsec3.salt_len, "salt_value");
cJSON_AddNumberToObject(one_rr_object, "hash_len", dns_rr->rdata.nsec3.hash_len);
dns_resource_record_str2hex_append(one_rr_object, dns_rr->rdata.nsec3.next_hash_owner, dns_rr->rdata.nsec3.hash_len, "next_hash_owner");
yyjson_mut_obj_add_int(doc, one_rr_object, "hash_len", dns_rr->rdata.nsec3.hash_len);
dns_resource_record_str2hex_append(doc, one_rr_object, dns_rr->rdata.nsec3.next_hash_owner, dns_rr->rdata.nsec3.hash_len, "next_hash_owner");
cJSON_AddNumberToObject(one_rr_object, "maps_len", dns_rr->rdata.nsec3.type_bit_maps.value_sz);
dns_resource_record_str2hex_append(one_rr_object, dns_rr->rdata.nsec3.type_bit_maps.value,dns_rr->rdata.nsec3.type_bit_maps.value_sz, "type_bit_maps");
yyjson_mut_obj_add_int(doc, one_rr_object, "maps_len", dns_rr->rdata.nsec3.type_bit_maps.value_sz);
dns_resource_record_str2hex_append(doc, one_rr_object, dns_rr->rdata.nsec3.type_bit_maps.value,dns_rr->rdata.nsec3.type_bit_maps.value_sz, "type_bit_maps");
break;
case DNS_RR_TYPE_NSEC3PARAM:
cJSON_AddNumberToObject(one_rr_object, "hash_algo", dns_rr->rdata.nsec3param.hash_algo);
cJSON_AddNumberToObject(one_rr_object, "flags", dns_rr->rdata.nsec3param.flags);
cJSON_AddNumberToObject(one_rr_object, "iteration", dns_rr->rdata.nsec3param.iteration);
cJSON_AddNumberToObject(one_rr_object, "salt_len", dns_rr->rdata.nsec3param.salt_len);
dns_resource_record_str2hex_append(one_rr_object, dns_rr->rdata.nsec3param.salt_value, dns_rr->rdata.nsec3param.salt_len, "salt_value");
yyjson_mut_obj_add_int(doc, one_rr_object, "hash_algo", dns_rr->rdata.nsec3param.hash_algo);
yyjson_mut_obj_add_int(doc, one_rr_object, "flags", dns_rr->rdata.nsec3param.flags);
yyjson_mut_obj_add_int(doc, one_rr_object, "iteration", dns_rr->rdata.nsec3param.iteration);
yyjson_mut_obj_add_int(doc, one_rr_object, "salt_len", dns_rr->rdata.nsec3param.salt_len);
dns_resource_record_str2hex_append(doc, one_rr_object, dns_rr->rdata.nsec3param.salt_value, dns_rr->rdata.nsec3param.salt_len, "salt_value");
break;
default:
break;
}
cJSON_AddItemToArray(dns_rr_array, one_rr_object);
yyjson_mut_arr_add_val(dns_rr_array, one_rr_object);
}
return dns_rr_array;
@@ -245,28 +257,30 @@ const char *dns_message_resource_record_json_exporter(struct dns_message *msg)
return NULL;
}
cJSON *answer=dns_resource_record_json_create(answer_rr, n_answer_rr);
cJSON *authority=dns_resource_record_json_create(authority_rr, n_authority_rr);
cJSON *additional=dns_resource_record_json_create(additional_rr, n_additional_rr);
cJSON *rr_array=cJSON_CreateObject();
yyjson_mut_doc *doc=yyjson_mut_doc_new(0);
yyjson_mut_val *rr_array=yyjson_mut_obj(doc);
yyjson_mut_val *answer=dns_resource_record_json_create(doc, answer_rr, n_answer_rr);
if(answer!=NULL)
{
cJSON_AddItemToObject(rr_array, "answer", answer);
yyjson_mut_obj_add_val(doc, rr_array, "answer", answer);
}
yyjson_mut_val *authority=dns_resource_record_json_create(doc, authority_rr, n_authority_rr);
if(authority!=NULL)
{
cJSON_AddItemToObject(rr_array, "authority", authority);
yyjson_mut_obj_add_val(doc, rr_array, "authority", authority);
}
yyjson_mut_val *additional=dns_resource_record_json_create(doc, additional_rr, n_additional_rr);
if(additional!=NULL)
{
cJSON_AddItemToObject(rr_array, "additional", additional);
yyjson_mut_obj_add_val(doc, rr_array, "additional", additional);
}
char *json_str=cJSON_PrintUnformatted(rr_array);
cJSON_Delete(rr_array);
yyjson_mut_doc_set_root(doc, rr_array);
const char *json_str=yyjson_mut_write(doc, 0, 0);
yyjson_mut_doc_free(doc);
return json_str;
}
@@ -321,7 +335,7 @@ int dns_message_resource_record_is_dnssec(struct dns_message *msg)
return 0;
}
void dns_resource_record_cname_get(cJSON *cname_array, struct dns_resource_record *rr, uint16_t n_rr)
void dns_resource_record_cname_get(yyjson_mut_doc *doc, yyjson_mut_val *cname_array, struct dns_resource_record *rr, uint16_t n_rr)
{
for(uint16_t i=0; i<n_rr; i++)
{
@@ -335,8 +349,7 @@ void dns_resource_record_cname_get(cJSON *cname_array, struct dns_resource_recor
continue;
}
cJSON *cname=cJSON_CreateString((char *)(rr[i].rdata.cname.value));
cJSON_AddItemToArray(cname_array, cname);
yyjson_mut_arr_add_strn(doc, cname_array, (char *)(rr[i].rdata.cname.value), rr[i].rdata.cname.value_sz);
}
}
@@ -358,13 +371,16 @@ const char *dns_message_resource_record_cname_json_exporter(struct dns_message *
return NULL;
}
cJSON *cname_object=cJSON_CreateArray();
dns_resource_record_cname_get(cname_object, answer_rr, n_answer_rr);
dns_resource_record_cname_get(cname_object, authority_rr, n_authority_rr);
dns_resource_record_cname_get(cname_object, additional_rr, n_additional_rr);
yyjson_mut_doc *doc=yyjson_mut_doc_new(0);
yyjson_mut_val *cname_array=yyjson_mut_arr(doc);
yyjson_mut_doc_set_root(doc, cname_array);
dns_resource_record_cname_get(doc, cname_array, answer_rr, n_answer_rr);
dns_resource_record_cname_get(doc, cname_array, authority_rr, n_authority_rr);
dns_resource_record_cname_get(doc, cname_array, additional_rr, n_additional_rr);
char *json_str=cJSON_PrintUnformatted(cname_object);
cJSON_Delete(cname_object);
yyjson_mut_doc_set_root(doc, cname_array);
const char *json_str=yyjson_mut_write(doc, 0, 0);
yyjson_mut_doc_free(doc);
return json_str;
}

View File

@@ -1,5 +1,6 @@
include_directories(${PROJECT_SOURCE_DIR}/deps/)
aux_source_directory(${PROJECT_SOURCE_DIR}/deps/toml DEPS_SRC)
aux_source_directory(${PROJECT_SOURCE_DIR}/deps/yyjson DEPS_SRC)
add_library(${PROJECT_NAME}_test_plug SHARED dns_decoder_test.cpp ${DEPS_SRC})
add_dependencies(${PROJECT_NAME}_test_plug ${PROJECT_NAME})

View File

@@ -457,7 +457,7 @@
"serial": 2013016250,
"refresh": 3600,
"retry": 1800,
"cname": 604800,
"expire": 604800,
"minimum": 3600
},
{
@@ -2344,7 +2344,7 @@
"serial": 2021110100,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
}
]
@@ -3061,7 +3061,7 @@
"serial": 2038682778,
"refresh": 10000,
"retry": 2400,
"cname": 604800,
"expire": 604800,
"minimum": 3600
},
{

View File

@@ -38,7 +38,7 @@
"serial": 2016030201,
"refresh": 1800,
"retry": 900,
"cname": 2419200,
"expire": 2419200,
"minimum": 240
}
],
@@ -403,7 +403,7 @@
"serial": 2020073304,
"refresh": 1080,
"retry": 1800,
"cname": 28800,
"expire": 28800,
"minimum": 36000
}
],
@@ -581,7 +581,7 @@
"serial": 1635782474,
"refresh": 60,
"retry": 60,
"cname": 88473600,
"expire": 88473600,
"minimum": 60
}
]
@@ -749,7 +749,7 @@
"serial": 1635747392,
"refresh": 900,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 1800
},
{
@@ -1293,7 +1293,7 @@
"serial": 1457939306,
"refresh": 3600,
"retry": 360,
"cname": 1801209600,
"expire": 1801209600,
"minimum": 180
}
]
@@ -2228,7 +2228,7 @@
"serial": 2021102760,
"refresh": 7200,
"retry": 3600,
"cname": 24796800,
"expire": 24796800,
"minimum": 3600
},
{
@@ -2630,7 +2630,7 @@
"serial": 2021102760,
"refresh": 7200,
"retry": 3600,
"cname": 24796800,
"expire": 24796800,
"minimum": 3600
},
{
@@ -2768,7 +2768,7 @@
"serial": 2038401813,
"refresh": 10000,
"retry": 2400,
"cname": 604800,
"expire": 604800,
"minimum": 3600
},
{

View File

@@ -643,7 +643,7 @@
"serial": 2013012201,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{

View File

@@ -43,7 +43,7 @@
"serial": 532,
"refresh": 10800,
"retry": 3600,
"cname": 604800,
"expire": 604800,
"minimum": 60
}
],

View File

@@ -46,7 +46,7 @@
"serial": 2012301931,
"refresh": 7200,
"retry": 600,
"cname": 1209600,
"expire": 1209600,
"minimum": 300
},
{

View File

@@ -52,7 +52,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -781,7 +781,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -901,7 +901,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -1128,7 +1128,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -1355,7 +1355,7 @@
"serial": 2027835935,
"refresh": 7200,
"retry": 3600,
"cname": 2419200,
"expire": 2419200,
"minimum": 21600
},
{
@@ -1444,7 +1444,7 @@
"serial": 2028896702,
"refresh": 7200,
"retry": 3600,
"cname": 2419200,
"expire": 2419200,
"minimum": 21600
},
{
@@ -2152,7 +2152,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -2464,7 +2464,7 @@
"serial": 3006085127,
"refresh": 7200,
"retry": 1800,
"cname": 604800,
"expire": 604800,
"minimum": 3600
},
{
@@ -7742,7 +7742,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -8002,7 +8002,7 @@
"serial": 2014579941,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -8124,7 +8124,7 @@
"serial": 2014579941,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -8245,7 +8245,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -8365,7 +8365,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -8624,7 +8624,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -8745,7 +8745,7 @@
"serial": 2014579941,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -8867,7 +8867,7 @@
"serial": 2014579941,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -12809,7 +12809,7 @@
"serial": 2027835926,
"refresh": 7200,
"retry": 3600,
"cname": 2419200,
"expire": 2419200,
"minimum": 21600
},
{
@@ -13706,7 +13706,7 @@
"serial": 2028896702,
"refresh": 7200,
"retry": 3600,
"cname": 2419200,
"expire": 2419200,
"minimum": 21600
},
{
@@ -14318,7 +14318,7 @@
"serial": 2028896702,
"refresh": 7200,
"retry": 3600,
"cname": 2419200,
"expire": 2419200,
"minimum": 21600
},
{
@@ -14628,7 +14628,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -14944,7 +14944,7 @@
"serial": 1635750028,
"refresh": 7200,
"retry": 7200,
"cname": 3600000,
"expire": 3600000,
"minimum": 7200
},
{
@@ -15910,7 +15910,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -16889,7 +16889,7 @@
"serial": 1635749528,
"refresh": 1800,
"retry": 300,
"cname": 604800,
"expire": 604800,
"minimum": 1800
},
{
@@ -17578,7 +17578,7 @@
"serial": 2028896702,
"refresh": 7200,
"retry": 3600,
"cname": 2419200,
"expire": 2419200,
"minimum": 21600
},
{
@@ -17667,7 +17667,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -18154,7 +18154,7 @@
"serial": 2027835935,
"refresh": 7200,
"retry": 3600,
"cname": 2419200,
"expire": 2419200,
"minimum": 21600
},
{
@@ -18276,7 +18276,7 @@
"serial": 2028896702,
"refresh": 7200,
"retry": 3600,
"cname": 2419200,
"expire": 2419200,
"minimum": 21600
},
{
@@ -18397,7 +18397,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -18517,7 +18517,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -18638,7 +18638,7 @@
"serial": 1635750002,
"refresh": 600,
"retry": 300,
"cname": 1814400,
"expire": 1814400,
"minimum": 300
},
{
@@ -18866,7 +18866,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -18986,7 +18986,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -20724,7 +20724,7 @@
"serial": 2027835935,
"refresh": 7200,
"retry": 3600,
"cname": 2419200,
"expire": 2419200,
"minimum": 21600
},
{
@@ -20920,7 +20920,7 @@
"serial": 2027835935,
"refresh": 7200,
"retry": 3600,
"cname": 2419200,
"expire": 2419200,
"minimum": 21600
},
{
@@ -21585,7 +21585,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -21705,7 +21705,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -22074,7 +22074,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -22441,7 +22441,7 @@
"serial": 2014579941,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -22562,7 +22562,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -22757,7 +22757,7 @@
"serial": 2107261307,
"refresh": 3600,
"retry": 15,
"cname": 86400,
"expire": 86400,
"minimum": 3600
},
{
@@ -22878,7 +22878,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -22998,7 +22998,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -26096,7 +26096,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -26879,7 +26879,7 @@
"serial": 2028896702,
"refresh": 7200,
"retry": 3600,
"cname": 2419200,
"expire": 2419200,
"minimum": 21600
},
{
@@ -27066,7 +27066,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -27716,7 +27716,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -28685,7 +28685,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -32160,7 +32160,7 @@
"serial": 1635749528,
"refresh": 1800,
"retry": 300,
"cname": 604800,
"expire": 604800,
"minimum": 1800
},
{
@@ -33009,7 +33009,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -33097,7 +33097,7 @@
"serial": 2027084453,
"refresh": 7200,
"retry": 3600,
"cname": 2419200,
"expire": 2419200,
"minimum": 21600
},
{
@@ -36151,7 +36151,7 @@
"serial": 200211427,
"refresh": 86400,
"retry": 7200,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -42583,7 +42583,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -42703,7 +42703,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -42930,7 +42930,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -43221,7 +43221,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -43558,7 +43558,7 @@
"serial": 1635750116,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{
@@ -44256,7 +44256,7 @@
"serial": 1635750101,
"refresh": 1800,
"retry": 900,
"cname": 604800,
"expire": 604800,
"minimum": 86400
},
{

View File

@@ -154,7 +154,7 @@
"serial": 2012301933,
"refresh": 7200,
"retry": 600,
"cname": 1209600,
"expire": 1209600,
"minimum": 300
},
{
@@ -660,7 +660,7 @@
"serial": 2012301931,
"refresh": 7200,
"retry": 600,
"cname": 1209600,
"expire": 1209600,
"minimum": 300
},
{
@@ -1042,7 +1042,7 @@
"serial": 2012301931,
"refresh": 7200,
"retry": 600,
"cname": 1209600,
"expire": 1209600,
"minimum": 300
},
{
@@ -1666,7 +1666,7 @@
"serial": 2012301931,
"refresh": 7200,
"retry": 600,
"cname": 1209600,
"expire": 1209600,
"minimum": 300
},
{
@@ -2290,7 +2290,7 @@
"serial": 2012301931,
"refresh": 7200,
"retry": 600,
"cname": 1209600,
"expire": 1209600,
"minimum": 300
},
{
@@ -2914,7 +2914,7 @@
"serial": 2012301931,
"refresh": 7200,
"retry": 600,
"cname": 1209600,
"expire": 1209600,
"minimum": 300
},
{
@@ -3646,7 +3646,7 @@
"serial": 2012301931,
"refresh": 7200,
"retry": 600,
"cname": 1209600,
"expire": 1209600,
"minimum": 300
},
{
@@ -4136,7 +4136,7 @@
"serial": 2012301931,
"refresh": 7200,
"retry": 600,
"cname": 1209600,
"expire": 1209600,
"minimum": 300
},
{

View File

@@ -20,7 +20,7 @@
"serial": 2013016250,
"refresh": 3600,
"retry": 1800,
"cname": 604800,
"expire": 604800,
"minimum": 3600
},
{

View File

@@ -100,10 +100,24 @@ extern "C" int commit_test_result_json(cJSON *node, const char *name)
return 0;
}
void perf_resource_record_decode(struct dns_message *dns_msg)
extern void dns_message_answer_resource_record_get0(struct dns_message *msg, struct dns_resource_record **answer_rr, uint16_t *n_answer_rr);
extern void dns_message_authority_resource_record_get0(struct dns_message *msg, struct dns_resource_record **authority_rr, uint16_t *n_authority_rr);
extern void dns_message_additional_resource_record_get0(struct dns_message *msg, struct dns_resource_record **additional_rr, uint16_t *n_additional_rr);
void perf_resource_record_decode(struct dns_message *msg)
{
TIME_START();
uint16_t n_answer_rr=0;
struct dns_resource_record *answer_rr=NULL;
dns_message_answer_resource_record_get0(msg, &answer_rr, &n_answer_rr);
uint16_t n_authority_rr=0;
struct dns_resource_record *authority_rr=NULL;
dns_message_authority_resource_record_get0(msg, &authority_rr, &n_authority_rr);
uint16_t n_additional_rr=0;
struct dns_resource_record *additional_rr=NULL;
dns_message_additional_resource_record_get0(msg, &additional_rr, &n_additional_rr);
TIME_DIFF();
//fieldstat_easy_histogram_record(main_env->fse.handle, tid, main_env->fse.id[PERF_TAG_QUESTION], &(main_env->fse.tag[PERF_TAG_QUESTION]), 1, time_diff_ns)
}
@@ -207,8 +221,16 @@ int32_t dns_decoder_test_config_load(const char *cfg_path, struct perf_main_env
toml_free(root);
return -1;
}
toml_table_t *perf_tbl=toml_table_in(test_tbl, "perf");
if(NULL==perf_tbl)
{
fprintf(stderr, "[%s:%d] config file: %s has no key: [decoder.dns.test.perf]", __FUNCTION__, __LINE__, cfg_path);
toml_free(root);
return -1;
}
toml_datum_t perf_worker_thread_num_val=toml_int_in(test_tbl, "perf_worker_thread_num");
toml_datum_t perf_worker_thread_num_val=toml_int_in(perf_tbl, "perf_worker_thread_num");
if(perf_worker_thread_num_val.ok)
{
main_env->worker_thread_num=perf_worker_thread_num_val.u.i;

View File

@@ -29,7 +29,6 @@ struct dns_decoder_test_plugin_env
int topic_id;
int result_index;
int commit_result_enable;
int write_result_enable;
int decode_resource_record_enable;
int export_resource_record_enable;
};
@@ -64,51 +63,40 @@ void dns_decoder_test_message_cb(struct session *ss, int topic_id, const void *m
return ;
}
cJSON *real_result=cJSON_CreateObject();
cJSON_AddStringToObject(real_result, "Tuple4", session_get0_readable_addr(ss));
uint16_t n_question=0;
struct dns_query_question *question=NULL;
dns_message_query_question_get0(dns_msg, &question, &n_question);
if(n_question>0 && question!=NULL)
{
cJSON_AddStringToObject(real_result, "dns_qname", dns_query_question_qname_get0(question));
cJSON_AddNumberToObject(real_result, "dns_qtype", dns_query_question_qtype_get0(question));
cJSON_AddNumberToObject(real_result, "dns_qclass", dns_query_question_qclass_get0(question));
}
struct dns_flag *flag=dns_message_header_flag_get0(dns_msg);
if(flag!=NULL)
{
cJSON_AddNumberToObject(real_result, "dns_qr", (double)(flag->qr));
cJSON_AddNumberToObject(real_result, "dns_opcode", (double)(flag->opcode));
cJSON_AddNumberToObject(real_result, "dns_rd", (double)(flag->rd));
}
const char *resource_record_str=dns_message_resource_record_json_exporter(dns_msg);
if(resource_record_str!=NULL)
{
cJSON *rr_array=cJSON_Parse(resource_record_str);
cJSON_AddItemToObject(real_result, "rr", rr_array);
}
if(plugin_env->write_result_enable==1)
{
char *real_result_str=cJSON_Print(real_result);
dns_real_result_write_file(real_result_str);
free(real_result_str);
}
if(plugin_env->commit_result_enable==1)
{
cJSON *real_result=cJSON_CreateObject();
cJSON_AddStringToObject(real_result, "Tuple4", session_get0_readable_addr(ss));
uint16_t n_question=0;
struct dns_query_question *question=NULL;
dns_message_query_question_get0(dns_msg, &question, &n_question);
if(n_question>0 && question!=NULL)
{
cJSON_AddStringToObject(real_result, "dns_qname", dns_query_question_qname_get0(question));
cJSON_AddNumberToObject(real_result, "dns_qtype", dns_query_question_qtype_get0(question));
cJSON_AddNumberToObject(real_result, "dns_qclass", dns_query_question_qclass_get0(question));
}
struct dns_flag *flag=dns_message_header_flag_get0(dns_msg);
if(flag!=NULL)
{
cJSON_AddNumberToObject(real_result, "dns_qr", (double)(flag->qr));
cJSON_AddNumberToObject(real_result, "dns_opcode", (double)(flag->opcode));
cJSON_AddNumberToObject(real_result, "dns_rd", (double)(flag->rd));
}
const char *resource_record_str=dns_message_resource_record_json_exporter(dns_msg);
if(resource_record_str!=NULL)
{
cJSON *rr_array=cJSON_Parse(resource_record_str);
cJSON_AddItemToObject(real_result, "rr", rr_array);
}
char result_name[16]="";
sprintf(result_name, "DNS_RESULT_%d", plugin_env->result_index++);
commit_test_result_json(real_result, result_name);
}
else
{
cJSON_Delete(real_result);
}
}
void *dns_decoder_test_per_session_context_new(struct session *sess, void *plugin_env)
@@ -183,31 +171,16 @@ int32_t dns_decoder_test_config_load(const char *cfg_path, struct dns_decoder_te
}
}
toml_datum_t write_result_enable_val=toml_string_in(test_tbl, "write_result_enable");
if(write_result_enable_val.ok==0)
{
plugin_env->write_result_enable=0;
fprintf(stderr, "[%s:%d] config file: %s has no key: [decoder.dns.test.write_result_enable]", __FUNCTION__, __LINE__, cfg_path);
}
else
{
if(memcmp("no", write_result_enable_val.u.s, strlen("no"))==0)
{
plugin_env->write_result_enable=0;
}
else if(memcmp("yes", write_result_enable_val.u.s, strlen("yes"))==0)
{
plugin_env->write_result_enable=1;
}
else
{
plugin_env->write_result_enable=1;
fprintf(stderr, "[%s:%d] config file: %s key: [decoder.dns.test.write_result_enable] value is not yes or no", __FUNCTION__, __LINE__, cfg_path);
}
}
toml_table_t *perf_tbl=toml_table_in(test_tbl, "perf");
if(NULL==perf_tbl)
{
fprintf(stderr, "[%s:%d] config file: %s has no key: [decoder.dns.test.perf]", __FUNCTION__, __LINE__, cfg_path);
toml_free(root);
return -1;
}
// decode_resource_record_enable
toml_datum_t decode_resource_record_enable_val=toml_string_in(test_tbl, "decode_resource_record_enable");
toml_datum_t decode_resource_record_enable_val=toml_string_in(perf_tbl, "decode_resource_record_enable");
if(decode_resource_record_enable_val.ok==0)
{
plugin_env->decode_resource_record_enable=0;
@@ -231,7 +204,7 @@ int32_t dns_decoder_test_config_load(const char *cfg_path, struct dns_decoder_te
}
// export_resource_record_enable
toml_datum_t export_resource_record_enable_val=toml_string_in(test_tbl, "export_resource_record_enable");
toml_datum_t export_resource_record_enable_val=toml_string_in(perf_tbl, "export_resource_record_enable");
if(export_resource_record_enable_val.ok==0)
{
plugin_env->export_resource_record_enable=0;