Wraps the DNSRequest class from NetServices to be synchronous, which is easier to use.

Dependents:   TwitPicExample SPIVFDclock RPC_mbed_client QRSS_Rx ... more

Committer:
hlipka
Date:
Fri Jan 07 21:45:38 2011 +0000
Revision:
0:83c60912e03f
Child:
1:3a3015287572
initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hlipka 0:83c60912e03f 1 #ifndef __DNSRESOLVE_H__
hlipka 0:83c60912e03f 2 #define __DNSRESOLVE_H__
hlipka 0:83c60912e03f 3
hlipka 0:83c60912e03f 4 #include "DNSRequest.h"
hlipka 0:83c60912e03f 5
hlipka 0:83c60912e03f 6 class DNSResolver {
hlipka 0:83c60912e03f 7 public:
hlipka 0:83c60912e03f 8 DNSResolver() {
hlipka 0:83c60912e03f 9 _request=new DNSRequest();
hlipka 0:83c60912e03f 10 _request->setOnReply(this, &DNSResolver::onReply);
hlipka 0:83c60912e03f 11 };
hlipka 0:83c60912e03f 12
hlipka 0:83c60912e03f 13 ~DNSResolver() {
hlipka 0:83c60912e03f 14 delete _request;
hlipka 0:83c60912e03f 15 };
hlipka 0:83c60912e03f 16
hlipka 0:83c60912e03f 17 IpAddr resolveName(const char* name) {
hlipka 0:83c60912e03f 18 _completed=0;
hlipka 0:83c60912e03f 19 IpAddr addr;
hlipka 0:83c60912e03f 20
hlipka 0:83c60912e03f 21 DNSRequestErr r=_request->resolve(name);
hlipka 0:83c60912e03f 22 if (0!=r) {
hlipka 0:83c60912e03f 23 _request->close();
hlipka 0:83c60912e03f 24 return addr;
hlipka 0:83c60912e03f 25 }
hlipka 0:83c60912e03f 26
hlipka 0:83c60912e03f 27 Timer tmr;
hlipka 0:83c60912e03f 28 tmr.start();
hlipka 0:83c60912e03f 29 while (0==_completed) {
hlipka 0:83c60912e03f 30 Net::poll();
hlipka 0:83c60912e03f 31 wait(0.1);
hlipka 0:83c60912e03f 32 if (tmr.read()>5)
hlipka 0:83c60912e03f 33 break;
hlipka 0:83c60912e03f 34 }
hlipka 0:83c60912e03f 35
hlipka 0:83c60912e03f 36 if (-1==_completed) {
hlipka 0:83c60912e03f 37 _request->close();
hlipka 0:83c60912e03f 38 return addr;
hlipka 0:83c60912e03f 39 }
hlipka 0:83c60912e03f 40
hlipka 0:83c60912e03f 41 _request->getResult(&addr);
hlipka 0:83c60912e03f 42 _request->close();
hlipka 0:83c60912e03f 43 return addr;
hlipka 0:83c60912e03f 44 };
hlipka 0:83c60912e03f 45
hlipka 0:83c60912e03f 46 void onReply(DNSReply reply) {
hlipka 0:83c60912e03f 47 if (reply==DNS_FOUND)
hlipka 0:83c60912e03f 48 _completed=1;
hlipka 0:83c60912e03f 49 else
hlipka 0:83c60912e03f 50 _completed=-1;
hlipka 0:83c60912e03f 51 };
hlipka 0:83c60912e03f 52
hlipka 0:83c60912e03f 53 private:
hlipka 0:83c60912e03f 54 DNSRequest *_request;
hlipka 0:83c60912e03f 55 int _completed; // -1=err,0=running,1=ok
hlipka 0:83c60912e03f 56 };
hlipka 0:83c60912e03f 57
hlipka 0:83c60912e03f 58
hlipka 0:83c60912e03f 59 #endif