Tiny DNS Resolver

Dependencies:   EthernetNetIf mbed

TinyResolver.h

Committer:
okini3939
Date:
2011-07-21
Revision:
0:477d4e2f281a

File content as of revision 0:477d4e2f281a:

/*
 * mbed Tiny DNS Resolver
 * Copyright (c) 2011 Hiroshi Suga
 * Released under the MIT License: http://mbed.org/license/mit
 */

/** @file
 * @brief Tiny DNS Resolver
 */

#ifndef TinyResolver_h
#define TinyResolver_h

#include <inttypes.h>

#define DEBUG

#define DNS_PORT 53
#define DNS_SRC_PORT 1234
#define DNS_TIMEOUT 15000 // ms

// dns
#define DNS_QUERY_A 1
#define DNS_QUERY_NS 2
#define DNS_QUERY_CNAME 5
#define DNS_QUERY_PTR 12
#define DNS_QUERY_MX 15
#define DNS_QUERY_AAAA 28
#define DNS_QUERY_ANY 255
#define DNS_CLASS_IN 1

struct DnsHeader {
        uint16_t id; 
        uint16_t flags; 
        uint16_t questions; 
        uint16_t answers; 
        uint16_t authorities; 
        uint16_t additional; 
};

struct DnsQuestionEnd { 
        uint16_t type; 
        uint16_t clas; 
};

struct DnsAnswer {
        uint16_t name; 
        uint16_t type; 
        uint16_t clas; 
        uint32_t ttl; 
        uint16_t length; 
} __attribute__((packed)); 

int createDnsRequest (char *name, char *buf);
int getDnsResponse (const char *buf, int len, uint32_t *addr);

/** resolv host by name
 * @param nameserver DNS server
 * @param name hostname
 * @param addr IP address (return)
 * @return 0:success, -1:failue
 */
int getHostByName (IpAddr nameserver, const char *name, uint32_t *addr);

#endif