Skip to content

Commit 3caba96

Browse files
committed
added:dns protocol parse support
1 parent e206586 commit 3caba96

25 files changed

+601
-13
lines changed

XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,26 @@ typedef struct
161161
list<XENGINE_DEAMONAPPINFO> stl_ListDeamonApp;
162162
}XENGINE_DEAMONAPPLIST;
163163
//////////////////////////////////////////////////////////////////////////
164+
//DNS
165+
typedef struct
166+
{
167+
XCHAR tszDNSName[256]; //域名名称
168+
XCHAR tszDNSAddr[256]; //域名地址
169+
int nType; //DNS地址类型,域名,IP
170+
int nTTL; //服务器的TTL
171+
}XENGINE_DNSADDRINFO;
172+
typedef struct
173+
{
174+
bool bEnable;
175+
XCHAR tszDNSName[256];
176+
list<XENGINE_DNSADDRINFO> stl_ListDNSAddr;
177+
}XENGINE_DNSDOMAIN;
178+
typedef struct
179+
{
180+
list<xstring> stl_ListDNSServer;
181+
list<XENGINE_DNSDOMAIN> stl_ListDNSList;
182+
}XENGINE_DNSINFO;
183+
//////////////////////////////////////////////////////////////////////////
164184
// 导出函数定义
165185
//////////////////////////////////////////////////////////////////////////
166186
extern "C" XLONG ModuleConfigure_GetLastError(int* pInt_ErrorCode = NULL);
@@ -223,4 +243,23 @@ extern "C" bool ModuleConfigure_Json_VersionFile(LPCXSTR lpszConfigFile, XENGINE
223243
意思:是否成功
224244
备注:
225245
*********************************************************************/
226-
extern "C" bool ModuleConfigure_Json_DeamonList(LPCXSTR lpszConfigFile, XENGINE_DEAMONAPPLIST* pSt_AppConfig);
246+
extern "C" bool ModuleConfigure_Json_DeamonList(LPCXSTR lpszConfigFile, XENGINE_DEAMONAPPLIST* pSt_AppConfig);
247+
/********************************************************************
248+
函数名称:ModuleConfigure_Json_DNSFile
249+
函数功能:读取JSON配置文件
250+
参数.一:lpszConfigFile
251+
In/Out:In
252+
类型:常量字符指针
253+
可空:N
254+
意思:输入要读取的配置文件
255+
参数.二:pSt_DNSList
256+
In/Out:Out
257+
类型:数据结构指针
258+
可空:N
259+
意思:输出DNS服务器列表
260+
返回值
261+
类型:逻辑型
262+
意思:是否成功
263+
备注:
264+
*********************************************************************/
265+
extern "C" bool ModuleConfigure_Json_DNSFile(LPCXSTR lpszConfigFile, XENGINE_DNSINFO* pSt_DNSList);

XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,4 +374,84 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_DeamonList(LPCXSTR lpszConfigFi
374374
pSt_AppConfig->stl_ListDeamonApp.push_back(st_APPInfo);
375375
}
376376
return true;
377+
}
378+
/********************************************************************
379+
函数名称:ModuleConfigure_Json_DNSFile
380+
函数功能:读取JSON配置文件
381+
参数.一:lpszConfigFile
382+
In/Out:In
383+
类型:常量字符指针
384+
可空:N
385+
意思:输入要读取的配置文件
386+
参数.二:pSt_DNSList
387+
In/Out:Out
388+
类型:数据结构指针
389+
可空:N
390+
意思:输出DNS服务器列表
391+
返回值
392+
类型:逻辑型
393+
意思:是否成功
394+
备注:
395+
*********************************************************************/
396+
bool CModuleConfigure_Json::ModuleConfigure_Json_DNSFile(LPCXSTR lpszConfigFile, XENGINE_DNSINFO* pSt_DNSList)
397+
{
398+
Config_IsErrorOccur = false;
399+
400+
if ((NULL == lpszConfigFile) || (NULL == pSt_DNSList))
401+
{
402+
Config_IsErrorOccur = true;
403+
Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_PARAMENT;
404+
return false;
405+
}
406+
JSONCPP_STRING st_JsonError;
407+
Json::Value st_JsonRoot;
408+
Json::CharReaderBuilder st_JsonBuilder;
409+
410+
FILE* pSt_File = fopen(lpszConfigFile, "rb");
411+
if (NULL == pSt_File)
412+
{
413+
Config_IsErrorOccur = true;
414+
Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_OPENFILE;
415+
return false;
416+
}
417+
XCHAR tszMsgBuffer[8192] = {};
418+
size_t nRet = fread(tszMsgBuffer, 1, sizeof(tszMsgBuffer), pSt_File);
419+
fclose(pSt_File);
420+
421+
std::unique_ptr<Json::CharReader> const pSt_JsonReader(st_JsonBuilder.newCharReader());
422+
if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nRet, &st_JsonRoot, &st_JsonError))
423+
{
424+
Config_IsErrorOccur = true;
425+
Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_PARSE;
426+
return false;
427+
}
428+
429+
Json::Value st_JsonServer = st_JsonRoot["DNSServer"];
430+
for (unsigned int i = 0; i < st_JsonRoot["DNSServer"].size(); i++)
431+
{
432+
pSt_DNSList->stl_ListDNSServer.push_back(st_JsonServer[i].asCString());
433+
}
434+
435+
Json::Value st_JsonList = st_JsonRoot["DNSList"];
436+
for (unsigned int i = 0; i < st_JsonRoot["DNSList"].size(); i++)
437+
{
438+
XENGINE_DNSDOMAIN st_DNSDomain = {};
439+
440+
st_DNSDomain.bEnable = st_JsonList["bEnable"].asBool();
441+
_tcsxcpy(st_DNSDomain.tszDNSName, st_JsonList["DNSName"].asCString());
442+
443+
Json::Value st_JsonAddr = st_JsonList["DNSAddr"];
444+
for (unsigned int j = 0; j < st_JsonList["DNSAddr"].size(); j++)
445+
{
446+
XENGINE_DNSADDRINFO st_DNSAddr = {};
447+
st_DNSAddr.nType = st_JsonAddr["Type"].asInt();
448+
st_DNSAddr.nTTL = st_JsonAddr["TTL"].asInt();
449+
_tcsxcpy(st_DNSAddr.tszDNSName, st_JsonAddr["Name"].asCString());
450+
_tcsxcpy(st_DNSAddr.tszDNSAddr, st_JsonAddr["Addr"].asCString());
451+
452+
st_DNSDomain.stl_ListDNSAddr.push_back(st_DNSAddr);
453+
}
454+
pSt_DNSList->stl_ListDNSList.push_back(st_DNSDomain);
455+
}
456+
return true;
377457
}

XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class CModuleConfigure_Json
2020
bool ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVICECONFIG* pSt_ServerConfig);
2121
bool ModuleConfigure_Json_VersionFile(LPCXSTR lpszConfigFile, XENGINE_SERVICECONFIG* pSt_ServerConfig);
2222
bool ModuleConfigure_Json_DeamonList(LPCXSTR lpszConfigFile, XENGINE_DEAMONAPPLIST* pSt_AppConfig);
23+
bool ModuleConfigure_Json_DNSFile(LPCXSTR lpszConfigFile, XENGINE_DNSINFO* pSt_DNSList);
2324
protected:
2425
private:
2526
};

XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ EXPORTS
55

66
ModuleConfigure_Json_File
77
ModuleConfigure_Json_VersionFile
8-
ModuleConfigure_Json_DeamonList
8+
ModuleConfigure_Json_DeamonList
9+
ModuleConfigure_Json_DNSFile

XEngine_Source/XEngine_ModuleConfigure/pch.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,8 @@ extern "C" bool ModuleConfigure_Json_VersionFile(LPCXSTR lpszConfigFile, XENGINE
4040
extern "C" bool ModuleConfigure_Json_DeamonList(LPCXSTR lpszConfigFile, XENGINE_DEAMONAPPLIST * pSt_AppConfig)
4141
{
4242
return m_ConfigJson.ModuleConfigure_Json_DeamonList(lpszConfigFile, pSt_AppConfig);
43+
}
44+
extern "C" bool ModuleConfigure_Json_DNSFile(LPCXSTR lpszConfigFile, XENGINE_DNSINFO* pSt_DNSList)
45+
{
46+
return m_ConfigJson.ModuleConfigure_Json_DNSFile(lpszConfigFile, pSt_DNSList);
4347
}

XEngine_Source/XEngine_ModuleHelp/Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ LOADHDR = -I ./ -I /usr/include/opencv4 -I /usr/local/include/opencv4 -I /usr/lo
66
LOADSO =
77
LIB = -lXEngine_BaseLib -lXClient_Socket -lNetHelp_APIAddr
88
LIBEX =
9-
OBJECTS = ModuleHelp_IDCard.o ModuleHelp_Language.o ModuleHelp_P2PClient.o ModuleHelp_Locker.o ModuleHelp_QRCode.o ModuleHelp_SocketTest.o ModuleHelp_ImageGet.o ModuleHelp_ImageSet.o pch.o
9+
OBJECTS = ModuleHelp_IDCard.o ModuleHelp_Language.o ModuleHelp_P2PClient.o ModuleHelp_Locker.o ModuleHelp_QRCode.o ModuleHelp_SocketTest.o ModuleHelp_ImageGet.o ModuleHelp_ImageSet.o ModuleHelp_DNSAddr.o pch.o
1010

1111
MACRO_QR_SUPPORT := $(shell gcc -E -dM ../XEngine_BuildSwitch.h | grep _XENGINE_BUILD_SWITCH_QRDECODEC | cut -d ' ' -f 3)
1212
MACRO_OPENCV_SUPPORT := $(shell gcc -E -dM ../XEngine_BuildSwitch.h | grep _XENGINE_BUILD_SWITCH_OPENCV | cut -d ' ' -f 3)
@@ -78,6 +78,8 @@ ModuleHelp_ImageGet.o:./ModuleHelp_Image/ModuleHelp_ImageGet.cpp
7878
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleHelp_Image/ModuleHelp_ImageGet.cpp
7979
ModuleHelp_ImageSet.o:./ModuleHelp_Image/ModuleHelp_ImageSet.cpp
8080
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleHelp_Image/ModuleHelp_ImageSet.cpp
81+
ModuleHelp_DNSAddr.o:./ModuleHelp_DNSAddr/ModuleHelp_DNSAddr.cpp
82+
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleHelp_DNSAddr/ModuleHelp_DNSAddr.cpp
8183

8284
pch.o:./pch.cpp
8385
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./pch.cpp
Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
#include "pch.h"
2+
#include "ModuleHelp_DNSAddr.h"
3+
/********************************************************************
4+
// Created: 2025/07/14 15:47:28
5+
// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\ModuleHelp_DNSAddr\ModuleHelp_DNSAddr.cpp
6+
// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\ModuleHelp_DNSAddr
7+
// File Base: ModuleHelp_DNSAddr
8+
// File Ext: cpp
9+
// Project: XEngine
10+
// Author: qyt
11+
// Purpose: DNS解析处理帮助函数
12+
// History:
13+
*********************************************************************/
14+
CModuleHelp_DNSAddr::CModuleHelp_DNSAddr()
15+
{
16+
}
17+
CModuleHelp_DNSAddr::~CModuleHelp_DNSAddr()
18+
{
19+
}
20+
//////////////////////////////////////////////////////////////////////////
21+
// 公有函数
22+
//////////////////////////////////////////////////////////////////////////
23+
/********************************************************************
24+
函数名称:ModuleHelp_DNSAddr_Init
25+
函数功能:初始化DNS数据表
26+
参数.一:pSt_DNSInfo
27+
In/Out:In
28+
类型:数据结构指针
29+
可空:N
30+
意思:输入要转换的列表
31+
返回值
32+
类型:逻辑型
33+
意思:是否成功
34+
备注:
35+
*********************************************************************/
36+
bool CModuleHelp_DNSAddr::ModuleHelp_DNSAddr_Init(XENGINE_DNSINFO* pSt_DNSInfo)
37+
{
38+
ModuleHelp_IsErrorOccur = false;
39+
40+
if (NULL == pSt_DNSInfo)
41+
{
42+
ModuleHelp_IsErrorOccur = true;
43+
ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_DNS_PARAMRT;
44+
return false;
45+
}
46+
47+
for (auto stl_ListIterator = pSt_DNSInfo->stl_ListDNSServer.begin(); stl_ListIterator != pSt_DNSInfo->stl_ListDNSServer.end(); stl_ListIterator++)
48+
{
49+
stl_ListDNSServer.push_back(stl_ListIterator->c_str());
50+
}
51+
for (auto stl_ListIterator = pSt_DNSInfo->stl_ListDNSList.begin(); stl_ListIterator != pSt_DNSInfo->stl_ListDNSList.end(); stl_ListIterator++)
52+
{
53+
if (stl_ListIterator->bEnable)
54+
{
55+
stl_MapDNSAddr.insert(make_pair(stl_ListIterator->tszDNSName, stl_ListIterator->stl_ListDNSAddr));
56+
}
57+
}
58+
return true;
59+
}
60+
/********************************************************************
61+
函数名称:ModuleHelp_DNSAddr_Destroy
62+
函数功能:销毁DNS帮助函数库
63+
返回值
64+
类型:逻辑型
65+
意思:是否成功
66+
备注:
67+
*********************************************************************/
68+
bool CModuleHelp_DNSAddr::ModuleHelp_DNSAddr_Destroy()
69+
{
70+
ModuleHelp_IsErrorOccur = false;
71+
72+
stl_ListDNSServer.clear();
73+
stl_MapDNSAddr.clear();
74+
return true;
75+
}
76+
/********************************************************************
77+
函数名称:ModuleHelp_DNSAddr_FindA
78+
函数功能:A记录查找
79+
参数.一:lpszDNSAddr
80+
In/Out:In
81+
类型:常量字符指针
82+
可空:N
83+
意思:输入要查找的DNS地址
84+
参数.二:pppSt_DNSList
85+
In/Out:Out
86+
类型:三级指针
87+
可空:N
88+
意思:输出查找到的列表
89+
参数.三:pInt_ListCount
90+
In/Out:Out
91+
类型:整数型指针
92+
可空:N
93+
意思:输出列表个数
94+
返回值
95+
类型:逻辑型
96+
意思:是否成功
97+
备注:
98+
*********************************************************************/
99+
bool CModuleHelp_DNSAddr::ModuleHelp_DNSAddr_FindA(LPCXSTR lpszDNSAddr, XENGINE_DNSADDRINFO*** pppSt_DNSList, int* pInt_ListCount)
100+
{
101+
ModuleHelp_IsErrorOccur = false;
102+
103+
auto stl_MapIterator = stl_MapDNSAddr.find(lpszDNSAddr);
104+
if (stl_MapIterator == stl_MapDNSAddr.end())
105+
{
106+
ModuleHelp_IsErrorOccur = true;
107+
ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_DNS_NOTFOUND;
108+
return false;
109+
}
110+
111+
*pInt_ListCount = stl_MapIterator->second.size();
112+
BaseLib_Memory_Malloc((XPPPMEM)pppSt_DNSList, *pInt_ListCount, sizeof(XENGINE_DNSADDRINFO));
113+
114+
auto stl_ListIterator = stl_MapIterator->second.begin();
115+
for (int i = 0; stl_ListIterator != stl_MapIterator->second.end(); stl_ListIterator++, i++)
116+
{
117+
*(*pppSt_DNSList)[i] = *stl_ListIterator;
118+
}
119+
120+
return true;
121+
}
122+
/********************************************************************
123+
函数名称:ModuleHelp_DNSAddr_FindPtr
124+
函数功能:输出IP对应的域名
125+
参数.一:lpszDNSAddr
126+
In/Out:In
127+
类型:常量字符指针
128+
可空:N
129+
意思:输入要查找的IP地址
130+
参数.二:pSt_DNSAddr
131+
In/Out:Out
132+
类型:数据结构指针
133+
可空:N
134+
意思:输出查找到的数据
135+
返回值
136+
类型:逻辑型
137+
意思:是否成功
138+
备注:
139+
*********************************************************************/
140+
bool CModuleHelp_DNSAddr::ModuleHelp_DNSAddr_FindPtr(LPCXSTR lpszDNSAddr, XENGINE_DNSADDRINFO* pSt_DNSAddr)
141+
{
142+
ModuleHelp_IsErrorOccur = false;
143+
144+
auto stl_MapIterator = stl_MapDNSAddr.find(lpszDNSAddr);
145+
if (stl_MapIterator == stl_MapDNSAddr.end())
146+
{
147+
ModuleHelp_IsErrorOccur = true;
148+
ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_DNS_NOTFOUND;
149+
return false;
150+
}
151+
//查找地址
152+
bool bIsFound = false;
153+
for (auto stl_ListIterator = stl_MapIterator->second.begin(); stl_ListIterator != stl_MapIterator->second.end(); stl_ListIterator++)
154+
{
155+
if (0 == _tcsxnicmp(stl_ListIterator->tszDNSAddr, lpszDNSAddr, _tcsxlen(stl_ListIterator->tszDNSAddr)))
156+
{
157+
*pSt_DNSAddr = *stl_ListIterator;
158+
bIsFound = true;
159+
break;
160+
}
161+
}
162+
163+
if (!bIsFound)
164+
{
165+
ModuleHelp_IsErrorOccur = true;
166+
ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_DNS_NOTFOUND;
167+
return false;
168+
}
169+
170+
return true;
171+
}
172+
/********************************************************************
173+
函数名称:ModuleHelp_DNSAddr_Select
174+
函数功能:备选地址
175+
参数.一:ptszDNSServer
176+
In/Out:Out
177+
类型:字符指针
178+
可空:N
179+
意思:输出选择的DNS服务器
180+
返回值
181+
类型:逻辑型
182+
意思:是否成功
183+
备注:
184+
*********************************************************************/
185+
bool CModuleHelp_DNSAddr::ModuleHelp_DNSAddr_Select(XCHAR* ptszDNSServer)
186+
{
187+
ModuleHelp_IsErrorOccur = false;
188+
189+
if (stl_ListDNSServer.size() > 1)
190+
{
191+
_tcsxcpy(ptszDNSServer, stl_ListDNSServer.front().c_str());
192+
}
193+
else
194+
{
195+
_tcsxcpy(ptszDNSServer, stl_ListDNSServer.front().c_str());
196+
}
197+
198+
return true;
199+
}

0 commit comments

Comments
 (0)