summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliuxueli <[email protected]>2019-12-09 11:18:35 +0800
committerliuxueli <[email protected]>2019-12-09 11:18:35 +0800
commit6c6ba3f3bfa7c5ad0fcbb20ae43ecbb39f712ed8 (patch)
treeedd970218eab05c19ea1fc5600619f07d0979e69
parentb3294f80bb2da46eeabe5c41f4387659f935606f (diff)
调整cname的凭借方式,使用JSON实现
-rw-r--r--src/fw_dns_plug.cpp26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/fw_dns_plug.cpp b/src/fw_dns_plug.cpp
index 3196235..08e67ec 100644
--- a/src/fw_dns_plug.cpp
+++ b/src/fw_dns_plug.cpp
@@ -14,7 +14,7 @@
char *g_fw_dns_conffile=(char *)"tsgconf/main.conf";
-char FW_DNS_PLUG_VERSION_20191206=0;
+char FW_DNS_PLUG_VERSION_20191209=0;
struct _fw_dns_plug g_fw_dns_plug_info;
enum TSG_ETHOD_TYPE
@@ -288,10 +288,9 @@ static int fw_dns_send_log(struct streaminfo *a_stream, dns_info_t *dns_info, st
int i=0;
dns_rr_t *rr=NULL;
tsg_log_t log_msg;
- int cname_use_len=0,dns_sec=1;
+ int dns_sec=1;
struct TLD_handle_t *handle=NULL;
- char cname[4096]={0},*rr_buf=NULL;
- int cname_size=sizeof(cname);
+ char *cname=NULL,*rr_buf=NULL;
handle=TLD_create(thread_seq);
@@ -315,21 +314,30 @@ static int fw_dns_send_log(struct streaminfo *a_stream, dns_info_t *dns_info, st
TLD_append(handle, (char *)"dns_qclass", (void *)(long)dns_info->query_question.qclass, TLD_TYPE_LONG);
}
+ cJSON *item=NULL;
+ cJSON *cname_array=cJSON_CreateArray();
for(i=0; i<dns_info->rr_count && dns_info->rr != NULL; i++)
{
rr = &dns_info->rr[i];
if(rr!=NULL && rr->type==DNS_TYPE_CNAME)
{
- if(rr->rdata.cname != NULL && cname_size-cname_use_len > (int)strlen((const char *)rr->rdata.cname))
+ if(rr->rdata.cname != NULL)
{
- snprintf(cname+cname_use_len, cname_size-cname_use_len, "%s,", rr->rdata.cname);
- cname_use_len += strlen((const char *)rr->rdata.cname);
+ item=cJSON_CreateString((const char *)rr->rdata.cname);
+ cJSON_AddItemToArray(cname_array, item);
}
}
}
-
- TLD_append(handle, (char *)"dns_cname", (void *)cname, TLD_TYPE_STRING);
+ cname=cJSON_PrintUnformatted(cname_array);
+ if(strlen(cname)>0)
+ {
+ TLD_append(handle, (char *)"dns_cname", (void *)cname, TLD_TYPE_STRING);
+ free(cname);
+ }
+ cJSON_Delete(cname_array);
+ cname_array=NULL;
+
cJSON * object=cJSON_CreateObject();
get_rr_str2json(object, dns_info, &dns_sec);
rr_buf=cJSON_PrintUnformatted(object);