Skip to content

Commit 4240b83

Browse files
committed
modify:dns query support back server query
1 parent 653aefa commit 4240b83

File tree

4 files changed

+40
-9
lines changed

4 files changed

+40
-9
lines changed

XEngine_Release/XEngine_Config/XEngine_Config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"nHttpPort": 5501,
66
"nRFCPort": 5502,
77
"nNTPPort": 0,
8-
"nDNSPort": 53,
8+
"nDNSPort": 0,
99
"XMax": {
1010
"nMaxClient": 10000,
1111
"nMaxQueue": 10000,

XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ LOADHDR = -I ./
66
LOADSO = -L ../../XEngine_ModuleConfigure -L ../../XEngine_ModuleDatabase -L ../../XEngine_ModuleProtocol -L ../../XEngine_ModuleSystem -L ../../XEngine_ModuleHelp -L ../../XEngine_ModulePlugin \
77
-L ../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp -L ../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/XEngine_InfoReport \
88
-L ../../XEngine_DependLibrary/XEngine_IPMacData/XEngine_Source/XEngine_APIModuleIPMac -L ../../XEngine_DependLibrary/XEngine_PhoneData/Source/C/XEngine_APIModulePhone
9-
LIB = -lXEngine_BaseSafe -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_ManagePool -lXEngine_Cryption -lXClient_Stream -lXClient_APIHelp -lNetHelp_APIAddr -lHelpComponents_XLog -lRfcComponents_HttpProtocol -lRfcComponents_NatProtocol -lRfcComponents_NTPProtocol -lRfcComponents_DNSProtocol -lXEngine_ProcFile -lXEngine_SystemApi -lXEngine_AVHelp -lXEngine_VideoCodec -lXEngine_AudioCodec -lXEngine_AVCollect \
9+
LIB = -lXEngine_BaseSafe -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_ManagePool -lXEngine_Cryption -lXClient_Stream -lXClient_APIHelp -lXClient_Socket -lNetHelp_APIAddr -lNetHelp_XSocket -lHelpComponents_XLog -lRfcComponents_HttpProtocol -lRfcComponents_NatProtocol -lRfcComponents_NTPProtocol -lRfcComponents_DNSProtocol -lXEngine_ProcFile -lXEngine_SystemApi -lXEngine_AVHelp -lXEngine_VideoCodec -lXEngine_AudioCodec -lXEngine_AVCollect \
1010
-lXEngine_ModuleConfigure -lXEngine_ModuleDatabase -lXEngine_ModuleProtocol -lXEngine_ModuleSystem -lXEngine_ModuleHelp -lXEngine_ModulePlugin \
1111
-ljsoncpp -lXEngine_InfoReport \
1212
-lXEngine_APIModuleIPMac -lXEngine_APIModulePhone

XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ using namespace std;
3535
#include <XEngine_Include/XEngine_Core/ManagePool_Error.h>
3636
#include <XEngine_Include/XEngine_Core/Cryption_Define.h>
3737
#include <XEngine_Include/XEngine_Core/Cryption_Error.h>
38+
#include <XEngine_Include/XEngine_Client/XClient_Define.h>
39+
#include <XEngine_Include/XEngine_Client/XClient_Error.h>
3840
#include <XEngine_Include/XEngine_Client/APIClient_Define.h>
3941
#include <XEngine_Include/XEngine_Client/APIClient_Error.h>
4042
#include <XEngine_Include/XEngine_Client/StreamClient_Define.h>
@@ -157,6 +159,7 @@ extern XENGINE_DEAMONAPPLIST st_DeamonAppConfig;
157159
#pragma comment(lib,"XEngine_Core/XEngine_Core.lib")
158160
#pragma comment(lib,"XEngine_Core/XEngine_ManagePool.lib")
159161
#pragma comment(lib,"XEngine_Core/XEngine_Cryption.lib")
162+
#pragma comment(lib,"XEngine_Client/XClient_Socket.lib")
160163
#pragma comment(lib,"XEngine_Client/XClient_Stream.lib")
161164
#pragma comment(lib,"XEngine_Client/XClient_APIHelp.lib")
162165
#pragma comment(lib,"XEngine_NetHelp/NetHelp_APIAddr")

XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskRfc/RFCTask_Dns.cpp

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
bool RFCTask_DNS_Parse(LPCXSTR lpszClientAddr, LPCXSTR lpszMSGBuffer, int nMSGLen)
44
{
5+
bool bQuery = false;
56
int nSDLen = 0;
67
int nRequestID = 0;
78
XCHAR tszSDBuffer[4096] = {};
@@ -10,6 +11,7 @@ bool RFCTask_DNS_Parse(LPCXSTR lpszClientAddr, LPCXSTR lpszMSGBuffer, int nMSGLe
1011
if (!DNSProtocol_Parse_Header(lpszMSGBuffer, nMSGLen, &nRequestID, &st_DNSRequest))
1112
{
1213
DNSProtocol_Packet_Error(tszSDBuffer, &nSDLen, nRequestID, &st_DNSRequest, XENGINE_DNSPROTOCOL_QUERY_QUESTION_STATUS_FORMAT);
14+
NetCore_UDPXCore_SendEx(xhDNSSocket, lpszClientAddr, tszSDBuffer, nSDLen);
1315
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("DNS客户端:%s,发送的DNS协议不正确"), lpszClientAddr);
1416
return false;
1517
}
@@ -33,6 +35,7 @@ bool RFCTask_DNS_Parse(LPCXSTR lpszClientAddr, LPCXSTR lpszMSGBuffer, int nMSGLe
3335
}
3436
DNSProtocol_Packet_REPHeader(tszSDBuffer, &nSDLen, nRequestID, &st_DNSRequest, &ppSt_DNSAnswer, nListCount);
3537
BaseLib_Memory_Free((XPPPMEM)&ppSt_DNSAnswer, nListCount);
38+
bQuery = true;
3639
}
3740
}
3841
else if (XENGINE_DNSPROTOCOL_QUERY_QUESTION_TYPE_PTR == st_DNSRequest.st_QueryInfo.nNameType)
@@ -41,25 +44,50 @@ bool RFCTask_DNS_Parse(LPCXSTR lpszClientAddr, LPCXSTR lpszMSGBuffer, int nMSGLe
4144
int nListCount = 1;
4245
XCHAR tszIPStr[256] = {};
4346
XENGINE_DNSADDRINFO st_DNSAddr = {};
44-
XENGINE_DNSPROTOCOL** ppSt_DNSAnswer;
45-
47+
4648
DNSProtocol_Help_PTRStr(st_DNSRequest.tszNameStr, tszIPStr, &nIPVer);
47-
BaseLib_Memory_Malloc((XPPPMEM)&ppSt_DNSAnswer, nListCount, sizeof(XENGINE_DNSPROTOCOL));
48-
4949
if (ModuleHelp_DNSAddr_FindPtr(tszIPStr, &st_DNSAddr))
5050
{
51+
XENGINE_DNSPROTOCOL** ppSt_DNSAnswer;
52+
BaseLib_Memory_Malloc((XPPPMEM)&ppSt_DNSAnswer, nListCount, sizeof(XENGINE_DNSPROTOCOL));
53+
5154
ppSt_DNSAnswer[0]->nTTL = st_DNSAddr.nTTL;
5255
ppSt_DNSAnswer[0]->st_QueryInfo.nNameType = XENGINE_DNSPROTOCOL_QUERY_QUESTION_TYPE_PTR;
5356
ppSt_DNSAnswer[0]->st_QueryInfo.nNameClass = XENGINE_DNSPROTOCOL_QUERY_QUESTION_CLASS_IN;
5457
_tcsxcpy(ppSt_DNSAnswer[0]->tszNameStr, st_DNSAddr.tszDNSAddr);
5558
_tcsxcpy(ppSt_DNSAnswer[0]->tszAddrStr, st_DNSAddr.tszDNSName);
59+
60+
DNSProtocol_Packet_REPHeader(tszSDBuffer, &nSDLen, nRequestID, &st_DNSRequest, &ppSt_DNSAnswer, nListCount);
61+
BaseLib_Memory_Free((XPPPMEM)&ppSt_DNSAnswer, nListCount);
62+
bQuery = true;
5663
}
57-
DNSProtocol_Packet_REPHeader(tszSDBuffer, &nSDLen, nRequestID, &st_DNSRequest, &ppSt_DNSAnswer, nListCount);
58-
BaseLib_Memory_Free((XPPPMEM)&ppSt_DNSAnswer, nListCount);
64+
}
65+
66+
if (!bQuery)
67+
{
68+
//选择一个备用DNS服务器
69+
XCHAR tszIPServer[128] = {};
70+
ModuleHelp_DNSAddr_Select(tszIPServer);
71+
//创建UDP查询连接
72+
XSOCKET hSocket = XSOCKET_ERROR;
73+
XClient_UDPSelect_Create(&hSocket);
74+
XClient_UDPSelect_Bind(hSocket, 12331);
75+
XClient_UDPSelect_Connect(hSocket, tszIPServer, 53);
76+
XClient_UDPSelect_SendMsg(hSocket, lpszMSGBuffer, nMSGLen);
77+
78+
if (!BaseLib_IO_Select(hSocket, true, 2000))
79+
{
80+
DNSProtocol_Packet_Error(tszSDBuffer, &nSDLen, nRequestID, &st_DNSRequest, XENGINE_DNSPROTOCOL_QUERY_QUESTION_STATUS_SERVFAIL);
81+
NetCore_UDPXCore_SendEx(xhDNSSocket, lpszClientAddr, tszSDBuffer, nSDLen);
82+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("DNS客户端:%s,请求备用服务器数据失败,数据超时"), lpszClientAddr);
83+
return false;
84+
}
85+
nSDLen = 4096;
86+
XClient_UDPSelect_RecvMsg(hSocket, tszSDBuffer, &nSDLen);
87+
XClient_UDPSelect_Close(hSocket);
5988
}
6089

6190
NetCore_UDPXCore_SendEx(xhDNSSocket, lpszClientAddr, tszSDBuffer, nSDLen);
6291
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("DNS客户端:%s,发送DNS协议给服务器,处理成功"), lpszClientAddr);
63-
6492
return true;
6593
}

0 commit comments

Comments
 (0)