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:
Tue Jan 11 21:35:16 2011 +0000
Revision:
1:3a3015287572
Parent:
0:83c60912e03f
Child:
2:097d4993dd1e
fixed include handling

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