Tiny DNS Resolver
Dependencies: EthernetNetIf mbed
TinyResolver.h@0:477d4e2f281a, 2011-07-21 (annotated)
- Committer:
- okini3939
- Date:
- Thu Jul 21 16:53:11 2011 +0000
- Revision:
- 0:477d4e2f281a
Who changed what in which revision?
User | Revision | Line number | New 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 |