Wraps the DNSRequest class from NetServices to be synchronous, which is easier to use.
Dependents: TwitPicExample SPIVFDclock RPC_mbed_client QRSS_Rx ... more
dnsresolve.h@0:83c60912e03f, 2011-01-07 (annotated)
- 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?
User | Revision | Line number | New 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 |