1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| //---------------------------------------------------------------------------
// TShaiDVRDahuaTechnology_DNSResolver -
//---------------------------------------------------------------------------
DNS_STATUS TShaiDVRDahuaTechnology_DNSResolver::_LastQueryError = ERROR_SUCCESS;
//---------------------------------------------------------------------------
/*static*/ AnsiString TShaiDVRDahuaTechnology_DNSResolver::Query(const AnsiString DNSName, const AnsiString DNSServer/* = ""*/)
{
AnsiString Result;
// Un Seul DNS à la fois avec DnsQuery sinon faudrait utiliser DnsQueryEx
IP4_ARRAY SrvList;
PIP4_ARRAY pSrvList = NULL;
if ( ! DNSServer.IsEmpty())
{
SrvList.AddrCount = 1; // On ne peut pas affecter d'autres valeurs, le type IP4_ARRAY est limité à 1
IP4_ADDRESS IPV4Value = inet_addr(DNSServer.c_str());
if (IPV4Value != INADDR_NONE)
{
SrvList.AddrArray[0] = IPV4Value;
pSrvList = &SrvList;
}
}
PDNS_RECORD pDnsRecord; // Pointer to DNS_RECORD structure.
// Calling function DnsQuery to query Host
_LastQueryError = DnsQuery(DNSName.c_str(), // A pointer to a string that represents the DNS name to query.
DNS_TYPE_A, // Type of the record to be queried.
DNS_QUERY_STANDARD, // Bypasses the resolver cache on the lookup.
pSrvList, // pExtra is reserved for future use but Contains DNS server IP address.
&pDnsRecord, // Resource record that contains the response.
NULL); // Reserved for future use.
if (_LastQueryError == ERROR_SUCCESS)
{
IP4_ADDRESS IPV4Value = pDnsRecord->Data.A.IpAddress;
DnsRecordListFree(pDnsRecord, DnsFreeRecordList);
//convert the Internet network address into a string in Internet standard dotted format.
IN_ADDR ipaddr;
ipaddr.S_un.S_addr = IPV4Value;
Result = inet_ntoa(ipaddr);
}
return Result;
}
//---------------------------------------------------------------------------
/*static*/ DNS_STATUS TShaiDVRDahuaTechnology_DNSResolver::GetLastQueryError()
{
return _LastQueryError;
}
//---------------------------------------------------------------------------
/*static*/ AnsiString TShaiDVRDahuaTechnology_DNSResolver::GetLastQueryErrorMsg()
{
return AnsiString().Format("%s [Error Code : %d]", ARRAYOFCONST((SysErrorMessage(_LastQueryError), _LastQueryError)));
} |
Partager