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

Revision:
14:e75a59c1123d
Parent:
13:9cd54f7db57a
Child:
15:6ca6778168b1
--- a/udp/udp.cpp	Mon May 01 18:20:55 2017 +0000
+++ b/udp/udp.cpp	Fri May 05 17:44:16 2017 +0000
@@ -21,21 +21,21 @@
     uint16_t totalLength;
     uint16_t checksum;
 };
-static uint16_t     srcPort;
-static uint16_t     dstPort;
+uint16_t     UdpSrcPort;
+uint16_t     UdpDstPort;
 static uint16_t    checksum;
 static uint16_t totalLength;
 
 static int handlePort(int* pDataLength, void* pData)
 {
-    switch (dstPort)
+    switch (UdpDstPort)
     {
         //Handle these
         case DHCP_CLIENT_PORT:          return DhcpHandleResponse      (                    pDataLength, pData);  //   68
-        case NTP_SERVER_PORT:           return  NtpHandleRequest       (                    pDataLength, pData);  //  123
-        case DNS_CLIENT_PORT:           return  DnsHandlePacketReceived(DNS_PROTOCOL_UDNS,  pDataLength, pData);  //53053
-        case DNS_MULTICAST_SERVER_PORT: return  DnsHandlePacketReceived(DNS_PROTOCOL_MDNS,  pDataLength, pData);  // 5353
-        case DNS_LLMNR_SERVER_PORT:     return  DnsHandlePacketReceived(DNS_PROTOCOL_LLMNR, pDataLength, pData);  // 5355
+        case NTP_PORT:                  return  NtpHandleRequest       (                    pDataLength, pData);  //  123
+        case DNS_UNICAST_CLIENT_PORT:   return  DnsHandlePacketReceived(DNS_PROTOCOL_UDNS,  pDataLength, pData);  //53053
+        case DNS_MDNS_PORT:             return  DnsHandlePacketReceived(DNS_PROTOCOL_MDNS,  pDataLength, pData);  // 5353
+        case DNS_LLMNR_CLIENT_PORT:     return  DnsHandlePacketReceived(DNS_PROTOCOL_LLMNR, pDataLength, pData);  // 5355
         
         //Quietly drop these
         case DHCP_SERVER_PORT:                                                          //67
@@ -49,7 +49,7 @@
             
         //Report anything else
         default:
-            if (UNKNOWN) LogTimeF("UDP unknown port %d\r\n", dstPort);
+            if (UNKNOWN) LogTimeF("UDP unknown port %d\r\n", UdpDstPort);
             return DO_NOTHING;
     }
 }
@@ -62,9 +62,9 @@
     
     *pSize = dataLength + HEADER_SIZE;
     
-    uint16_t tmpPort = dstPort;
-    dstPort = srcPort;
-    srcPort = tmpPort;
+    uint16_t tmpPort = UdpDstPort;
+    UdpDstPort = UdpSrcPort;
+    UdpSrcPort = tmpPort;
     
     return action;
 }
@@ -77,8 +77,8 @@
         action = DhcpPollForRequestToSend(pData, pDataLength);
         if (action)
         {
-            srcPort = DHCP_CLIENT_PORT;
-            dstPort = DHCP_SERVER_PORT;
+            UdpSrcPort = DHCP_CLIENT_PORT;
+            UdpDstPort = DHCP_SERVER_PORT;
         }
     }
     
@@ -89,9 +89,9 @@
         {
             switch (action)
             {
-                case   UNICAST_DNS:    srcPort = DNS_CLIENT_PORT;           dstPort = DNS_UNICAST_SERVER_PORT;   break; //53053,   53
-                case MULTICAST_MDNS:   srcPort = DNS_MULTICAST_SERVER_PORT; dstPort = DNS_MULTICAST_SERVER_PORT; break; // 5353, 5353
-                case MULTICAST_LLMNR:  srcPort = DNS_CLIENT_PORT;           dstPort = DNS_LLMNR_SERVER_PORT;     break; //53053, 5355
+                case   UNICAST_DNS:    UdpSrcPort = DNS_UNICAST_CLIENT_PORT;   UdpDstPort = DNS_UNICAST_SERVER_PORT;   break; //53053,   53
+                case MULTICAST_MDNS:   UdpSrcPort = DNS_MDNS_PORT;             UdpDstPort = DNS_MDNS_PORT;             break; // 5353, 5353
+                case MULTICAST_LLMNR:  UdpSrcPort = DNS_LLMNR_CLIENT_PORT;     UdpDstPort = DNS_LLMNR_SERVER_PORT;     break; //53055, 5355
                 
                 //Report anything else
                 default:
@@ -116,8 +116,8 @@
 void UdpLogHeader(char* title, void* pPacket, uint16_t calculatedChecksum)
 {    
     LogTimeF("UDP %s\r\n", title);
-    LogF("  Source port      %hu\r\n", srcPort);
-    LogF("  Destination port %hu\r\n", dstPort);
+    LogF("  Source port      %hu\r\n", UdpSrcPort);
+    LogF("  Destination port %hu\r\n", UdpDstPort);
     LogF("  Total length     %hu\r\n", totalLength);
     LogF("  Checksum (hex)   %04hX\r\n", checksum);
     LogF("  Calculated       %04hX\r\n", calculatedChecksum);
@@ -127,8 +127,8 @@
 {        
     struct header* pHeader = (header*)pPacket;
     
-    pHeader->dstPort     = NetToHost16(dstPort);
-    pHeader->srcPort     = NetToHost16(srcPort);
+    pHeader->dstPort     = NetToHost16(UdpDstPort);
+    pHeader->srcPort     = NetToHost16(UdpSrcPort);
     pHeader->totalLength = NetToHost16(size);
     pHeader->checksum    = 0;
 
@@ -142,8 +142,8 @@
 {
     struct header* pHeader = (header*)pPacket;
     
-    srcPort     = NetToHost16(pHeader->srcPort);
-    dstPort     = NetToHost16(pHeader->dstPort);
+    UdpSrcPort  = NetToHost16(pHeader->srcPort);
+    UdpDstPort  = NetToHost16(pHeader->dstPort);
     totalLength = NetToHost16(pHeader->totalLength);
     checksum    = NetToHost16(pHeader->checksum);
 }
\ No newline at end of file