Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: HelloESP8266Interface_mine
Fork of DnsQuery by
Diff: DnsQuery.cpp
- Revision:
- 1:5d978992a518
- Parent:
- 0:fff4b9055396
- Child:
- 2:12d08f0f20cf
diff -r fff4b9055396 -r 5d978992a518 DnsQuery.cpp
--- a/DnsQuery.cpp Tue Jul 14 20:48:12 2015 +0000
+++ b/DnsQuery.cpp Fri Jul 24 22:43:25 2015 +0000
@@ -17,7 +17,6 @@
*/
#include "mbed.h"
#include "DnsQuery.h"
-#include "UDPSocket.h"
//Debug is disabled by default
#if 0
@@ -38,35 +37,27 @@
-DnsQuery::DnsQuery(IPADDRESS_t *dnsip)
+DnsQuery::DnsQuery(SocketInterface *sock)
{
- _dnsip.sin_addr.o1 = dnsip->sin_addr.o1;
- _dnsip.sin_addr.o2 = dnsip->sin_addr.o2;
- _dnsip.sin_addr.o3 = dnsip->sin_addr.o3;
- _dnsip.sin_addr.o4 = dnsip->sin_addr.o4;
-
- INFO("Setting DNS = %d.%d.%d.%d !", dnsip->sin_addr.o1, dnsip->sin_addr.o2, dnsip->sin_addr.o3, dnsip->sin_addr.o4);
- INFO("Accepting DNS = %s !",_dnsip.string_format());
+ socket = sock;
}
-bool DnsQuery::gethostbyname(char* hostname, IPADDRESS_t &ipaddress)
+bool DnsQuery::gethostbyname(const char* hostname, IPADDRESS_t &ipaddress)
{
IPADDRESS_t dnsIp_1 = {209,244,0,3};
IPADDRESS_t dnsIp_2 = {8,8,8,8};
IPADDRESS_t dnsIp_3 = {84,200,69,80};
IPADDRESS_t dnsIp_4 = {8,26,56,26};
IPADDRESS_t dnsIp_5 = {208,67,222,222};
- IPADDRESS_t dnsIp;
for(int i = 0; i<5; i++){
switch(i) {
- case 0 : dnsIp= dnsIp_1; break ;
- case 1 : dnsIp= dnsIp_2; break ;
- case 2 : dnsIp= dnsIp_3; break ;
- case 3 : dnsIp= dnsIp_4; break ;
- case 4 : dnsIp= dnsIp_5; break ;
+ case 0 : _dnsip= dnsIp_1; break ;
+ case 1 : _dnsip= dnsIp_2; break ;
+ case 2 : _dnsip= dnsIp_3; break ;
+ case 3 : _dnsip= dnsIp_4; break ;
+ case 4 : _dnsip= dnsIp_5; break ;
}
- DnsQuery dns = DnsQuery(&dnsIp);
- if(dns.getIP(hostname, ipaddress)){
+ if(this->getIP(hostname, ipaddress)){
return true;
}
@@ -75,7 +66,7 @@
}
-bool DnsQuery::getIP(char* hostname, IPADDRESS_t &ipaddress)
+bool DnsQuery::getIP(const char* hostname, IPADDRESS_t &ipaddress)
{
INFO("%s", hostname);
int len = 0;
@@ -124,16 +115,16 @@
// Ready to send to DNS
- UDPSocket sock = UDPSocket();
- Endpoint e = Endpoint();
- //INFO("Using IP: %s",_dnsip.string_format());
- char ip[7];
- sprintf(ip,"%s",_dnsip.string_format());
- e.set_address(ip, 53);
- delete ip;
+ socket->setAddressPort(_dnsip.string_format(), 53);
+ socket->open();
- INFO("Sending packet");
- if (sock.sendTo(e, packet, packetlen) < 0) {
+ INFO("Sending packet of length %d",packetlen);
+ /*
+ for( int i = 0 ; i < c ; i++) {
+ printf("%02x ", packet[i]);
+ }
+ */
+ if (socket->send(packet, packetlen) < 0) {
delete packet;
return false;
}
@@ -151,30 +142,27 @@
int response_length = 0;
while (t.read_ms() < 10000) {
INFO("Recieving");
- response_length = sock.receiveFrom(e, packet, 1024);
+ response_length = socket->recv(packet, 1024);
+ /*
+ for( int i = 0 ; i < 1024; i++) {
+ printf("%02x ", packet[i]);
+ }
+ */
if (response_length > 0 ) {
- int offset = packetlen;
- for(int i = offset; i < 1024; i++) {
- if(0x3A==packet[i]){
- offset = i+1;
- break;
- }
- }
- char *offset_packet = packet + offset;
- if (!resolve(offset_packet, ipaddress)) {
+ if (!resolve(packet, ipaddress)) {
break;
}
// cleanup and return
delete packet;
- sock.close();
+ socket->close();
//INFO("Found this IP:%s",ipaddress.string_format());
return true;
} else {
ERR("SocketRecvFrom returned %d !", response_length);
}
}
- sock.close();
+ socket->close();
delete packet;
ERR("NO IP FOUND\n");
return false;
