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
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 }
Generated on Tue Jul 12 2022 18:53:40 by 1.7.2