fix:修改UDP通讯中,取电变化上报机制
1、问题点:当RCU网络状态异常的情况下,网络还处于协商状态下,还未进入正常通讯环节时,取电变化不会进行判断。这会导致取电变化上报与实际产生取电状态时间点对不上。 2、将BLV_C1F_Module代码上传至Gitea,之前代码修改记录请查看 .\BasicCode\Readme.txt
This commit is contained in:
448
BasicCode/Drive/NET/DNS.c
Normal file
448
BasicCode/Drive/NET/DNS.c
Normal file
@@ -0,0 +1,448 @@
|
||||
#include "DNS.h"
|
||||
#include "CH57xNET.H"
|
||||
#include "DBG.h"
|
||||
|
||||
#define CH57xNET_DBG 1
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
UINT8 DNS_SERVER_IP[4]={223,5,5,5}; /* DNS<4E><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 */
|
||||
UINT8 DNS_SERVER_IP2[4]={114,114,114,114}; /* DNS<4E><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 */
|
||||
#define IPPORT_DOMAIN 53 /* DNSĬ<53>϶˿<CFB6> */
|
||||
UINT16 MSG_ID = 0x1100; /* <20><>ʶ */
|
||||
//UINT32 count = 0;
|
||||
//UINT8 dns_buf[MAX_DNS_BUF_SIZE];
|
||||
UINT8* dns_buf = NULL;
|
||||
|
||||
//UINT8 url_dn4[] = "www.boonlive-rcu.com";
|
||||
/*******************************************************************************
|
||||
* Function Name : get16
|
||||
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UINT8<54><38><EFBFBD><EFBFBD>תΪUINT16<31><36>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
* Input : s -UINT8<54><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* Output : None
|
||||
* Return : ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UINT16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
UINT16 get16(UINT8 * s)
|
||||
{
|
||||
UINT16 i;
|
||||
|
||||
i = *s++ << 8;
|
||||
i = i + *s;
|
||||
return i;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : ParseName
|
||||
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* Input : msg -ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ָ<EFBFBD><D6B8>
|
||||
compressed -ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
buf -<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* Output : None
|
||||
* Return : ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD>ĵij<C4B5><C4B3><EFBFBD>
|
||||
*******************************************************************************/
|
||||
int ParseName(UINT8 * msg, UINT8 * compressed, char * buf)
|
||||
{
|
||||
UINT16 slen; /* <20><>ǰƬ<C7B0>γ<EFBFBD><CEB3><EFBFBD>*/
|
||||
UINT8 * cp;
|
||||
int clen = 0; /* ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
int indirect = 0;
|
||||
int nseg = 0; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
|
||||
cp = compressed;
|
||||
for (;;){
|
||||
slen = *cp++; /* <20><><EFBFBD>ֽڵļ<DAB5><C4BC><EFBFBD>ֵ*/
|
||||
if (!indirect) clen++;
|
||||
if ((slen & 0xc0) == 0xc0){ /* <20><><EFBFBD><EFBFBD><EFBFBD>ֽڸ<D6BD><DAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>ʽ */
|
||||
if (!indirect) clen++;
|
||||
indirect = 1;
|
||||
cp = &msg[((slen & 0x3f)<<8) + *cp]; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>ֵָ<D6B5><D6B8>ƫ<EFBFBD>Ƶ<EFBFBD>ָ<EFBFBD><D6B8>λ<EFBFBD><CEBB> */
|
||||
slen = *cp++;
|
||||
}
|
||||
if (slen == 0) break; /* <20><><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
if (!indirect) clen += slen;
|
||||
while (slen-- != 0) *buf++ = (char)*cp++;
|
||||
*buf++ = '.';
|
||||
nseg++;
|
||||
}
|
||||
if (nseg == 0){
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; */
|
||||
*buf++ = '.';
|
||||
}
|
||||
*buf++ = '\0';
|
||||
return clen; /* ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD> */
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DnsQuestion
|
||||
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
|
||||
* Input : msg -ָ<><D6B8><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ĵ<EFBFBD>ָ<EFBFBD><D6B8>
|
||||
cp -ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ָ<EFBFBD><D6B8>
|
||||
* Output : None
|
||||
* Return : ָ<><D6B8><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>¼<EFBFBD><C2BC>ָ<EFBFBD><D6B8>
|
||||
*******************************************************************************/
|
||||
UINT8 * DnsQuestion(UINT8 * msg, UINT8 * cp)
|
||||
{
|
||||
int len;
|
||||
char name[MAX_DNS_BUF_SIZE];
|
||||
|
||||
len = ParseName(msg, cp, name);
|
||||
cp += len;
|
||||
cp += 2; /* <20><><EFBFBD><EFBFBD> */
|
||||
cp += 2; /* <20><> */
|
||||
return cp;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DnsAnswer
|
||||
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>еĻش<C4BB><D8B4><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
|
||||
* Input : msg -ָ<><D6B8><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ĵ<EFBFBD>ָ<EFBFBD><D6B8>
|
||||
cp -ָ<><D6B8><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>¼<EFBFBD><C2BC>ָ<EFBFBD><D6B8>
|
||||
psip
|
||||
* Output : None
|
||||
* Return :ָ<><D6B8><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>¼<EFBFBD><C2BC>ָ<EFBFBD><D6B8>
|
||||
*******************************************************************************/
|
||||
UINT8 * DnsAnswer(UINT8 * msg, UINT8 * cp, UINT8 * pSip)
|
||||
{
|
||||
int len, type;
|
||||
char name[MAX_DNS_BUF_SIZE];
|
||||
|
||||
len = ParseName(msg, cp, name);
|
||||
cp += len;
|
||||
type = get16(cp);
|
||||
cp += 2; /* <20><><EFBFBD><EFBFBD> */
|
||||
cp += 2; /* <20><> */
|
||||
cp += 4; /* <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */
|
||||
cp += 2; /* <20><>Դ<EFBFBD><D4B4><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> */
|
||||
switch ( type ){
|
||||
case TYPE_A:
|
||||
pSip[0] = *cp++;
|
||||
pSip[1] = *cp++;
|
||||
pSip[2] = *cp++;
|
||||
pSip[3] = *cp++;
|
||||
break;
|
||||
case TYPE_CNAME:
|
||||
case TYPE_MB:
|
||||
case TYPE_MG:
|
||||
case TYPE_MR:
|
||||
case TYPE_NS:
|
||||
case TYPE_PTR:
|
||||
len = ParseName(msg, cp, name);
|
||||
cp += len;
|
||||
break;
|
||||
case TYPE_HINFO:
|
||||
case TYPE_MX:
|
||||
case TYPE_SOA:
|
||||
case TYPE_TXT:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return cp;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : parseMSG
|
||||
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>Դ<EFBFBD><D4B4>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
|
||||
* Input : msg -ָ<><D6B8>DNS<4E><53><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
cp -ָ<><D6B8><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ĵ<EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* Output : None
|
||||
* Return :<3A>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
*******************************************************************************/
|
||||
|
||||
UINT8 parseMSG(struct dhdr * pdhdr, UINT8 * pbuf, UINT8 * pSip)
|
||||
{
|
||||
UINT16 tmp;
|
||||
UINT16 i;
|
||||
UINT8 * msg;
|
||||
UINT8 * cp;
|
||||
|
||||
msg = pbuf;
|
||||
memset(pdhdr, 0, sizeof(*pdhdr));
|
||||
pdhdr->id = get16(&msg[0]);
|
||||
tmp = get16(&msg[2]);
|
||||
if (tmp & 0x8000) pdhdr->qr = 1;
|
||||
pdhdr->opcode = (tmp >> 11) & 0xf;
|
||||
if (tmp & 0x0400) pdhdr->aa = 1;
|
||||
if (tmp & 0x0200) pdhdr->tc = 1;
|
||||
if (tmp & 0x0100) pdhdr->rd = 1;
|
||||
if (tmp & 0x0080) pdhdr->ra = 1;
|
||||
pdhdr->rcode = tmp & 0xf;
|
||||
pdhdr->qdcount = get16(&msg[4]);
|
||||
pdhdr->ancount = get16(&msg[6]);
|
||||
pdhdr->nscount = get16(&msg[8]);
|
||||
pdhdr->arcount = get16(&msg[10]);
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD><C9B1><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȳ<EFBFBD><C8B2><EFBFBD>*/
|
||||
cp = &msg[12];
|
||||
/* <20><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD> */
|
||||
for (i = 0; i < pdhdr->qdcount; i++)
|
||||
{
|
||||
cp = DnsQuestion(msg, cp);
|
||||
}
|
||||
/* <20>ش<EFBFBD> */
|
||||
for (i = 0; i < pdhdr->ancount; i++)
|
||||
{
|
||||
cp = DnsAnswer(msg, cp, pSip);
|
||||
}
|
||||
/*<2A><>Ȩ */
|
||||
for (i = 0; i < pdhdr->nscount; i++)
|
||||
{
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ ;
|
||||
}
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
|
||||
for (i = 0; i < pdhdr->arcount; i++)
|
||||
{
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ ;
|
||||
}
|
||||
if(pdhdr->rcode == 0) return 1; /* rcode = 0:<3A>ɹ<EFBFBD> */
|
||||
else return 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : put16
|
||||
* Description :UINT16 <20><>ʽ<EFBFBD><CABD><EFBFBD>ݰ<EFBFBD>UINT8<54><38>ʽ<EFBFBD>浽<EFBFBD><E6B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* Input : s -<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
i -UINT16<31><36><EFBFBD><EFBFBD>
|
||||
* Output : None
|
||||
* Return : ƫ<><C6AB>ָ<EFBFBD><D6B8>
|
||||
*******************************************************************************/
|
||||
UINT8 * put16(UINT8 * s, UINT16 i)
|
||||
{
|
||||
*s++ = i >> 8;
|
||||
*s++ = i;
|
||||
return s;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : MakeDnsQuery
|
||||
* Description : <20><><EFBFBD><EFBFBD>DNS<4E><53>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
|
||||
input : op - <20>ݹ<EFBFBD>
|
||||
* name - ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* buf - DNS<4E><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
* len - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
* Output : None
|
||||
* Return : ָ<><D6B8>DNS<4E><53><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
*******************************************************************************/
|
||||
UINT16 MakeDnsQueryMsg(UINT16 op, char * name, UINT8 * buf, UINT16 len)
|
||||
{
|
||||
UINT8 *cp;
|
||||
char *cp1;
|
||||
char tmpname[MAX_DNS_BUF_SIZE];
|
||||
char *dname;
|
||||
UINT16 p;
|
||||
UINT16 dlen;
|
||||
|
||||
//printf("Domain name:%s \n",name);
|
||||
cp = buf;
|
||||
MSG_ID++;
|
||||
cp = put16(cp, MSG_ID); /* <20><>ʶ */
|
||||
p = (op << 11) | 0x0100;
|
||||
cp = put16(cp, p); /* 0x0100<30><30>Recursion desired */
|
||||
cp = put16(cp, 1); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 */
|
||||
cp = put16(cp, 0); /* <20><>Դ<EFBFBD><D4B4>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>0 */
|
||||
cp = put16(cp, 0); /* <20><>Դ<EFBFBD><D4B4>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>0 */
|
||||
cp = put16(cp, 0); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>0 */
|
||||
|
||||
strcpy(tmpname, name);
|
||||
dname = tmpname;
|
||||
dlen = strlen(dname);
|
||||
for (;;){ /* <20><><EFBFBD><EFBFBD>DNS<4E><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>URIд<49>뵽buf<75><66><EFBFBD><EFBFBD>ȥ */
|
||||
cp1 = strchr(dname, '.');
|
||||
if (cp1 != NULL) len = cp1 - dname;
|
||||
else len = dlen;
|
||||
*cp++ = len;
|
||||
if (len == 0) break;
|
||||
strncpy((char *)cp, dname, len);
|
||||
cp += len;
|
||||
if (cp1 == NULL)
|
||||
{
|
||||
*cp++ = 0;
|
||||
break;
|
||||
}
|
||||
dname += len+1; /* dname<6D><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD> */
|
||||
dlen -= len+1; /* dname<6D><65><EFBFBD>ȼ<EFBFBD>С */
|
||||
}
|
||||
cp = put16(cp, 0x0001); /* type <20><>1------ip<69><70>ַ */
|
||||
cp = put16(cp, 0x0001); /* class<73><73>1-------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ */
|
||||
return ((UINT16)(cp - buf));
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DnsQuery
|
||||
* Description : <20><><EFBFBD><EFBFBD>DNS<4E><53>ѯ
|
||||
input : s -socket<65><74><EFBFBD><EFBFBD>
|
||||
* name - ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
pSip -<2D><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
|
||||
* Output : None
|
||||
* Return : <20><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ʧ<EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD>2
|
||||
*******************************************************************************/
|
||||
//UINT8 DnsQuery2(UINT8* s, UINT8 * name, UINT8 * pSip)
|
||||
//{
|
||||
// struct dhdr dhp;
|
||||
|
||||
// UINT8 ret;
|
||||
// UINT32 len;
|
||||
// if(Status >1 ){
|
||||
// count++;
|
||||
// DelayMs(10);
|
||||
// if( count>20000 ){
|
||||
//#if CH57xNET_DBG
|
||||
// printf("DNS Fail!!!!!\n");
|
||||
//#endif
|
||||
// count=0;
|
||||
// Status = 0;
|
||||
// return 2;
|
||||
// }
|
||||
// }
|
||||
// if(Status == 1)
|
||||
// {
|
||||
// DNS_SocketParamInit(s, DNS_SERVER_IP, 4000, IPPORT_DOMAIN);
|
||||
// //UDPSocketParamInit(*s,DNS_SERVER_IP,4000,IPPORT_DOMAIN);
|
||||
// Status = 2;
|
||||
//#if CH57xNET_DBG
|
||||
// printf(" 2 status = %d!\n",Status);
|
||||
//#endif
|
||||
// }
|
||||
// if(Status ==2)
|
||||
// {
|
||||
// len = MakeDnsQueryMsg(0,(char *)name, dns_buf, MAX_DNS_BUF_SIZE);
|
||||
// ret = CH57xNET_SocketSend(*s,dns_buf,&len);
|
||||
// if ( ret ) return(0);
|
||||
// else{
|
||||
// Status = 3;
|
||||
//#if CH57xNET_DBG
|
||||
// printf("status = 3!\n");
|
||||
//#endif
|
||||
// }
|
||||
// }
|
||||
// if(Status ==4)
|
||||
// {
|
||||
// //CH57xNET_SocketClose(*s,TCP_CLOSE_NORMAL );
|
||||
// return(parseMSG(&dhp, dns_buf, pSip)); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD>*/
|
||||
//
|
||||
// }
|
||||
// return 0;
|
||||
//}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function Name : DnsQuery_Task
|
||||
* Description : <20><><EFBFBD><EFBFBD>DNS<4E><53>ѯ
|
||||
input : s -socket<65><74><EFBFBD><EFBFBD>
|
||||
* name - ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
pSip -<2D><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
|
||||
* Output : None
|
||||
* Return : <20><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ʧ<EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD>2
|
||||
*<2A><> <20><> : ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
UINT8 DnsQuery_Task(UINT8* s, UINT8 * name, UINT8 * pSip)
|
||||
{
|
||||
static uint32_t dnschange_wait_tick1 = 0;
|
||||
switch(server_info.dns_sta)
|
||||
{
|
||||
case DNS_INIT:
|
||||
{
|
||||
if(dns_buf == NULL) dns_buf = (UINT8*)malloc(MAX_DNS_BUF_SIZE/2); //ΪDNS<4E><53><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
|
||||
UINT8 ret = DNS_SocketParamInit(s, DNS_SERVER_IP, 4000, IPPORT_DOMAIN); //<2F><><EFBFBD><EFBFBD>DNS<4E>õ<EFBFBD><C3B5><EFBFBD><D7BD><EFBFBD>
|
||||
if(ret == CH57xNET_ERR_SUCCESS)
|
||||
{
|
||||
server_info.dns_sta = DNS_DATA_SEND;
|
||||
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DNS socket<65><74><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>,DNS Server IP:%d.%d.%d.%d",\
|
||||
DNS_SERVER_IP[0],DNS_SERVER_IP[1],DNS_SERVER_IP[2],DNS_SERVER_IP[3]);
|
||||
}
|
||||
else
|
||||
{
|
||||
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DNS socket<65><74><EFBFBD>´<EFBFBD><C2B4><EFBFBD>,DNS Server IP:%d.%d.%d.%d",\
|
||||
DNS_SERVER_IP[0],DNS_SERVER_IP[1],DNS_SERVER_IP[2],DNS_SERVER_IP[3]);
|
||||
server_info.dns_sta = DNS_ClOSE; //2023-03-06
|
||||
server_info.dns_fail++; //2023-03-06
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case DNS_INIT1:
|
||||
{
|
||||
if(dns_buf == NULL) dns_buf = (UINT8*)malloc(MAX_DNS_BUF_SIZE/2); //ΪDNS<4E><53><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
|
||||
UINT8 ret = DNS_SocketParamInit(s, DNS_SERVER_IP2, 4000, IPPORT_DOMAIN); //<2F><><EFBFBD><EFBFBD>DNS<4E>õ<EFBFBD><C3B5><EFBFBD><D7BD><EFBFBD>
|
||||
if(ret == CH57xNET_ERR_SUCCESS)
|
||||
{
|
||||
server_info.dns_sta = DNS_DATA_SEND;
|
||||
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DNS socket<65><74><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>,DNS Server IP:%d.%d.%d.%d",\
|
||||
DNS_SERVER_IP2[0],DNS_SERVER_IP2[1],DNS_SERVER_IP2[2],DNS_SERVER_IP2[3]);
|
||||
}
|
||||
else
|
||||
{
|
||||
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DNS socket<65><74><EFBFBD>´<EFBFBD><C2B4><EFBFBD>,DNS Server IP:%d.%d.%d.%d",\
|
||||
DNS_SERVER_IP2[0],DNS_SERVER_IP2[1],DNS_SERVER_IP2[2],DNS_SERVER_IP2[3]);
|
||||
server_info.dns_sta = DNS_ClOSE; //2023-03-06
|
||||
server_info.dns_fail++; //2023-03-06
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case DNS_DATA_SEND:
|
||||
{
|
||||
UINT32 len = MakeDnsQueryMsg(0,(char *)name, dns_buf, MAX_DNS_BUF_SIZE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
UINT8 ret = CH57xNET_SocketSend(*s, dns_buf, &len); //<2F><><EFBFBD>͵<EFBFBD>DNS<4E><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(ret == CH57xNET_ERR_SUCCESS)
|
||||
{
|
||||
|
||||
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DNS<EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
}
|
||||
else Dbg_Println(DBG_BIT_NET_STATUS_bit,"DNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
|
||||
server_info.wait_cot = SysTick_10ms;
|
||||
server_info.dns_sta = DNS_WAIT_RECV;
|
||||
server_info.dns_flg = 0x00;
|
||||
}
|
||||
break;
|
||||
|
||||
case DNS_WAIT_RECV: //<2F><><EFBFBD><EFBFBD>DNS<4E>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA>ر<EFBFBD><D8B1><EFBFBD><D7BD><EFBFBD>
|
||||
|
||||
if(server_info.dns_flg == 1) //<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ip
|
||||
{
|
||||
struct dhdr dhp;
|
||||
UINT8 rev = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Dbg_Println(DBG_BIT_NET_STATUS_bit,"DNS <20><>ʱ<EFBFBD><CAB1>%d0ms", SysTick_10ms - server_info.wait_cot);
|
||||
|
||||
rev = parseMSG(&dhp, dns_buf, pSip); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>ֵ<EFBFBD><D6B5>0x01:<3A>ɹ<EFBFBD><C9B9><EFBFBD>0x00:ʧ<><CAA7>*/
|
||||
|
||||
CH57xNET_SocketClose(*s,SOCK_STAT_CLOSED );
|
||||
|
||||
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD>ͷ<EFBFBD>DNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
|
||||
if(rev == 0x01) /*parseMSG <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD> 2022-06-08*/
|
||||
{
|
||||
return 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
||||
}else {
|
||||
server_info.dns_fail++;
|
||||
server_info.dns_sta = DNS_ClOSE;
|
||||
dnschange_wait_tick1 = SysTick_10ms;
|
||||
}
|
||||
|
||||
}
|
||||
else if(SysTick_10ms - server_info.wait_cot > 200) //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ճ<EFBFBD>ʱ
|
||||
{
|
||||
server_info.wait_cot = SysTick_10ms;
|
||||
server_info.dns_sta = DNS_ClOSE;
|
||||
server_info.dns_fail++;
|
||||
}
|
||||
break;
|
||||
case DNS_ClOSE:
|
||||
free(dns_buf); //<2F>ͷ<EFBFBD>DNS<4E>ռ<EFBFBD>
|
||||
dns_buf = NULL;
|
||||
CH57xNET_SocketClose(*s,SOCK_STAT_CLOSED ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(server_info.dns_fail == 0x01)
|
||||
{
|
||||
if(SysTick_10ms - dnschange_wait_tick1 > 50)
|
||||
{
|
||||
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD>л<EFBFBD>DNS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
dnschange_wait_tick1 = SysTick_10ms;
|
||||
server_info.dns_sta = DNS_INIT1;
|
||||
}
|
||||
}
|
||||
else if(server_info.dns_fail >= 0x02)
|
||||
{
|
||||
*s = 0;
|
||||
server_info.dns_fail = 0x00;
|
||||
return 0x02; //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user