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
Diff: udp/udp.cpp
- Revision:
- 14:e75a59c1123d
- Parent:
- 13:9cd54f7db57a
- Child:
- 15:6ca6778168b1
diff -r 9cd54f7db57a -r e75a59c1123d udp/udp.cpp --- 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