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 Feb 18 13:58:54 2011 +0000
Revision:
2:097d4993dd1e
Parent:
1:3a3015287572
added license

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hlipka 2:097d4993dd1e 1 /*
hlipka 2:097d4993dd1e 2 * DNSResolver library
hlipka 2:097d4993dd1e 3 * Copyright (c) 2010 Hendrik Lipka
hlipka 2:097d4993dd1e 4 *
hlipka 2:097d4993dd1e 5 * Permission is hereby granted, free of charge, to any person obtaining a copy
hlipka 2:097d4993dd1e 6 * of this software and associated documentation files (the "Software"), to deal
hlipka 2:097d4993dd1e 7 * in the Software without restriction, including without limitation the rights
hlipka 2:097d4993dd1e 8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
hlipka 2:097d4993dd1e 9 * copies of the Software, and to permit persons to whom the Software is
hlipka 2:097d4993dd1e 10 * furnished to do so, subject to the following conditions:
hlipka 2:097d4993dd1e 11 *
hlipka 2:097d4993dd1e 12 * The above copyright notice and this permission notice shall be included in
hlipka 2:097d4993dd1e 13 * all copies or substantial portions of the Software.
hlipka 2:097d4993dd1e 14 *
hlipka 2:097d4993dd1e 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
hlipka 2:097d4993dd1e 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
hlipka 2:097d4993dd1e 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
hlipka 2:097d4993dd1e 18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
hlipka 2:097d4993dd1e 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
hlipka 2:097d4993dd1e 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
hlipka 2:097d4993dd1e 21 * THE SOFTWARE.
hlipka 2:097d4993dd1e 22 */
hlipka 2:097d4993dd1e 23
hlipka 2:097d4993dd1e 24 #ifndef __DNSRESOLVE_H__
hlipka 2:097d4993dd1e 25 #define __DNSRESOLVE_H__
hlipka 2:097d4993dd1e 26
hlipka 2:097d4993dd1e 27 #include "Timer.h"
hlipka 2:097d4993dd1e 28 #include "wait_api.h"
hlipka 2:097d4993dd1e 29
hlipka 2:097d4993dd1e 30 #include "DNSRequest.h"
hlipka 2:097d4993dd1e 31
hlipka 2:097d4993dd1e 32 class DNSResolver {
hlipka 2:097d4993dd1e 33 public:
hlipka 2:097d4993dd1e 34 DNSResolver() {
hlipka 2:097d4993dd1e 35 _request=new DNSRequest();
hlipka 2:097d4993dd1e 36 _request->setOnReply(this, &DNSResolver::onReply);
hlipka 2:097d4993dd1e 37 };
hlipka 2:097d4993dd1e 38
hlipka 2:097d4993dd1e 39 ~DNSResolver() {
hlipka 2:097d4993dd1e 40 delete _request;
hlipka 2:097d4993dd1e 41 };
hlipka 2:097d4993dd1e 42
hlipka 2:097d4993dd1e 43 IpAddr resolveName(const char* name) {
hlipka 2:097d4993dd1e 44 _completed=0;
hlipka 2:097d4993dd1e 45 IpAddr addr;
hlipka 2:097d4993dd1e 46
hlipka 2:097d4993dd1e 47 DNSRequestErr r=_request->resolve(name);
hlipka 2:097d4993dd1e 48 if (0!=r) {
hlipka 2:097d4993dd1e 49 _request->close();
hlipka 2:097d4993dd1e 50 return addr;
hlipka 2:097d4993dd1e 51 }
hlipka 2:097d4993dd1e 52
hlipka 2:097d4993dd1e 53 mbed::Timer tmr;
hlipka 2:097d4993dd1e 54 tmr.start();
hlipka 2:097d4993dd1e 55 while (0==_completed) {
hlipka 2:097d4993dd1e 56 Net::poll();
hlipka 2:097d4993dd1e 57 if (tmr.read()>5)
hlipka 2:097d4993dd1e 58 break;
hlipka 2:097d4993dd1e 59 wait_us(100);
hlipka 2:097d4993dd1e 60 }
hlipka 2:097d4993dd1e 61
hlipka 2:097d4993dd1e 62 if (-1==_completed) {
hlipka 2:097d4993dd1e 63 _request->close();
hlipka 2:097d4993dd1e 64 return addr;
hlipka 2:097d4993dd1e 65 }
hlipka 2:097d4993dd1e 66
hlipka 2:097d4993dd1e 67 _request->getResult(&addr);
hlipka 2:097d4993dd1e 68 _request->close();
hlipka 2:097d4993dd1e 69 return addr;
hlipka 2:097d4993dd1e 70 };
hlipka 2:097d4993dd1e 71
hlipka 2:097d4993dd1e 72 void onReply(DNSReply reply) {
hlipka 2:097d4993dd1e 73 if (reply==DNS_FOUND)
hlipka 2:097d4993dd1e 74 _completed=1;
hlipka 2:097d4993dd1e 75 else
hlipka 2:097d4993dd1e 76 _completed=-1;
hlipka 2:097d4993dd1e 77 };
hlipka 2:097d4993dd1e 78
hlipka 2:097d4993dd1e 79 private:
hlipka 2:097d4993dd1e 80 DNSRequest *_request;
hlipka 2:097d4993dd1e 81 int _completed; // -1=err,0=running,1=ok
hlipka 2:097d4993dd1e 82 };
hlipka 2:097d4993dd1e 83
hlipka 2:097d4993dd1e 84
hlipka 0:83c60912e03f 85 #endif