Wraps the DNSRequest class from NetServices to be synchronous, which is easier to use.
Dependents: TwitPicExample SPIVFDclock RPC_mbed_client QRSS_Rx ... more
Diff: dnsresolve.h
- Revision:
- 0:83c60912e03f
- Child:
- 1:3a3015287572
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dnsresolve.h Fri Jan 07 21:45:38 2011 +0000 @@ -0,0 +1,59 @@ +#ifndef __DNSRESOLVE_H__ +#define __DNSRESOLVE_H__ + +#include "DNSRequest.h" + +class DNSResolver { +public: + DNSResolver() { + _request=new DNSRequest(); + _request->setOnReply(this, &DNSResolver::onReply); + }; + + ~DNSResolver() { + delete _request; + }; + + IpAddr resolveName(const char* name) { + _completed=0; + IpAddr addr; + + DNSRequestErr r=_request->resolve(name); + if (0!=r) { + _request->close(); + return addr; + } + + Timer tmr; + tmr.start(); + while (0==_completed) { + Net::poll(); + wait(0.1); + if (tmr.read()>5) + break; + } + + if (-1==_completed) { + _request->close(); + return addr; + } + + _request->getResult(&addr); + _request->close(); + return addr; + }; + + void onReply(DNSReply reply) { + if (reply==DNS_FOUND) + _completed=1; + else + _completed=-1; + }; + +private: + DNSRequest *_request; + int _completed; // -1=err,0=running,1=ok +}; + + +#endif \ No newline at end of file