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@1:3a3015287572, 2011-01-11 (annotated)
- 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?
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 | 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 |