Tiny DNS Resolver

Dependencies:   EthernetNetIf mbed

Committer:
okini3939
Date:
Thu Jul 21 16:53:11 2011 +0000
Revision:
0:477d4e2f281a

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:477d4e2f281a 1 /*
okini3939 0:477d4e2f281a 2 * mbed Tiny DNS Resolver
okini3939 0:477d4e2f281a 3 * Copyright (c) 2011 Hiroshi Suga
okini3939 0:477d4e2f281a 4 * Released under the MIT License: http://mbed.org/license/mit
okini3939 0:477d4e2f281a 5 */
okini3939 0:477d4e2f281a 6
okini3939 0:477d4e2f281a 7 /** @file
okini3939 0:477d4e2f281a 8 * @brief Tiny DNS Resolver
okini3939 0:477d4e2f281a 9 */
okini3939 0:477d4e2f281a 10
okini3939 0:477d4e2f281a 11 #ifndef TinyResolver_h
okini3939 0:477d4e2f281a 12 #define TinyResolver_h
okini3939 0:477d4e2f281a 13
okini3939 0:477d4e2f281a 14 #include <inttypes.h>
okini3939 0:477d4e2f281a 15
okini3939 0:477d4e2f281a 16 #define DEBUG
okini3939 0:477d4e2f281a 17
okini3939 0:477d4e2f281a 18 #define DNS_PORT 53
okini3939 0:477d4e2f281a 19 #define DNS_SRC_PORT 1234
okini3939 0:477d4e2f281a 20 #define DNS_TIMEOUT 15000 // ms
okini3939 0:477d4e2f281a 21
okini3939 0:477d4e2f281a 22 // dns
okini3939 0:477d4e2f281a 23 #define DNS_QUERY_A 1
okini3939 0:477d4e2f281a 24 #define DNS_QUERY_NS 2
okini3939 0:477d4e2f281a 25 #define DNS_QUERY_CNAME 5
okini3939 0:477d4e2f281a 26 #define DNS_QUERY_PTR 12
okini3939 0:477d4e2f281a 27 #define DNS_QUERY_MX 15
okini3939 0:477d4e2f281a 28 #define DNS_QUERY_AAAA 28
okini3939 0:477d4e2f281a 29 #define DNS_QUERY_ANY 255
okini3939 0:477d4e2f281a 30 #define DNS_CLASS_IN 1
okini3939 0:477d4e2f281a 31
okini3939 0:477d4e2f281a 32 struct DnsHeader {
okini3939 0:477d4e2f281a 33 uint16_t id;
okini3939 0:477d4e2f281a 34 uint16_t flags;
okini3939 0:477d4e2f281a 35 uint16_t questions;
okini3939 0:477d4e2f281a 36 uint16_t answers;
okini3939 0:477d4e2f281a 37 uint16_t authorities;
okini3939 0:477d4e2f281a 38 uint16_t additional;
okini3939 0:477d4e2f281a 39 };
okini3939 0:477d4e2f281a 40
okini3939 0:477d4e2f281a 41 struct DnsQuestionEnd {
okini3939 0:477d4e2f281a 42 uint16_t type;
okini3939 0:477d4e2f281a 43 uint16_t clas;
okini3939 0:477d4e2f281a 44 };
okini3939 0:477d4e2f281a 45
okini3939 0:477d4e2f281a 46 struct DnsAnswer {
okini3939 0:477d4e2f281a 47 uint16_t name;
okini3939 0:477d4e2f281a 48 uint16_t type;
okini3939 0:477d4e2f281a 49 uint16_t clas;
okini3939 0:477d4e2f281a 50 uint32_t ttl;
okini3939 0:477d4e2f281a 51 uint16_t length;
okini3939 0:477d4e2f281a 52 } __attribute__((packed));
okini3939 0:477d4e2f281a 53
okini3939 0:477d4e2f281a 54 int createDnsRequest (char *name, char *buf);
okini3939 0:477d4e2f281a 55 int getDnsResponse (const char *buf, int len, uint32_t *addr);
okini3939 0:477d4e2f281a 56
okini3939 0:477d4e2f281a 57 /** resolv host by name
okini3939 0:477d4e2f281a 58 * @param nameserver DNS server
okini3939 0:477d4e2f281a 59 * @param name hostname
okini3939 0:477d4e2f281a 60 * @param addr IP address (return)
okini3939 0:477d4e2f281a 61 * @return 0:success, -1:failue
okini3939 0:477d4e2f281a 62 */
okini3939 0:477d4e2f281a 63 int getHostByName (IpAddr nameserver, const char *name, uint32_t *addr);
okini3939 0:477d4e2f281a 64
okini3939 0:477d4e2f281a 65 #endif