A stack which works with or without an Mbed os library. Provides IPv4 or IPv6 with a full 1500 byte buffer.

Dependents:   oldheating gps motorhome heating

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers dns.c Source File

dns.c

00001 #include <stdint.h>
00002 #include <stdbool.h>
00003 #include <string.h>
00004 #include <stdio.h>
00005 
00006 #include "dns.h"
00007 #include "dnshdr.h"
00008 #include "dnsquery.h"
00009 #include "dnsreply.h"
00010 #include "dnsserver.h"
00011 #include "log.h"
00012 #include "dhcp.h"
00013 
00014 
00015 bool DnsSendRequestsViaIp4 = false;
00016 
00017 void DnsProtocolString(uint8_t protocol, int size, char* text)
00018 {
00019     switch (protocol)
00020     {
00021         case DNS_PROTOCOL_UDNS:  strncpy (text, "DNS",   size);        break;
00022         case DNS_PROTOCOL_MDNS:  strncpy (text, "MDNS",  size);        break;
00023         case DNS_PROTOCOL_LLMNR: strncpy (text, "LLMNR", size);        break;
00024         default:                 snprintf(text, size, "%d", protocol); break;
00025     }
00026 }
00027 
00028 void DnsRecordTypeString(uint8_t recordtype, int size, char* text)
00029 {
00030     switch (recordtype)
00031     {
00032         case DNS_RECORD_A:    strncpy (text, "A",    size);      break;
00033         case DNS_RECORD_AAAA: strncpy (text, "AAAA", size);      break;
00034         case DNS_RECORD_PTR:  strncpy (text, "PTR",  size);      break;
00035         case DNS_RECORD_TXT:  strncpy (text, "TXT",  size);      break;
00036         case DNS_RECORD_SRV:  strncpy (text, "SRV",  size);      break;
00037         default:              snprintf(text, size, "%d", recordtype); break;
00038     }
00039 }
00040 void DnsProtocolLog(uint8_t protocol)
00041 {
00042     switch (protocol)
00043     {
00044         case DNS_PROTOCOL_UDNS:  Log ("DNS  ");        break;
00045         case DNS_PROTOCOL_MDNS:  Log ("MDNS ");        break;
00046         case DNS_PROTOCOL_LLMNR: Log ("LLMNR");        break;
00047         default:                 LogF("%d", protocol); break;
00048     }
00049 }
00050 
00051 void DnsRecordTypeLog(uint8_t recordtype)
00052 {
00053     switch (recordtype)
00054     {
00055         case DNS_RECORD_A:    Log ("A"   );           break;
00056         case DNS_RECORD_AAAA: Log ("AAAA");           break;
00057         case DNS_RECORD_PTR:  Log ("PTR" );           break;
00058         case DNS_RECORD_TXT:  Log ("TXT" );           break;
00059         case DNS_RECORD_SRV:  Log ("SRV" );           break;
00060         default:              LogF("%d", recordtype); break;
00061     }
00062 }
00063 
00064 void DnsMain()
00065 {
00066     DnsQueryMain();
00067 }
00068 
00069 int DnsHandlePacketReceived(void (*traceback)(void), int dnsProtocol, int sizeRx, void* pPacketRx, int* pSizeTx, void* pPacketTx)
00070 {
00071     DnsHdrSetup(pPacketRx, sizeRx);
00072     DnsHdrRead();
00073     
00074     int action;
00075     if (DnsHdrIsReply)
00076     {
00077         action = DnsReplyHandle(traceback, dnsProtocol);
00078     }
00079     else
00080     {
00081         action = DnsServerHandleQuery(traceback, dnsProtocol, pPacketTx, pSizeTx);
00082     }
00083     return action;
00084 }
00085 
00086 int DnsPollForPacketToSend(int ipType, void* pPacketTx, int* pSize)
00087 {
00088     return DnsQueryPoll(ipType, pPacketTx, pSize);
00089 }