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:
138:5ff0c7069300
Parent:
124:6e558721ec1c
Child:
142:a8c0890a58d1
--- a/udp/ntp/ntp.c	Sun Apr 07 11:05:16 2019 +0000
+++ b/udp/ntp/ntp.c	Sun Apr 07 18:36:42 2019 +0000
@@ -9,9 +9,9 @@
 #include "ntpserver.h"
 #include "clktime.h"
 #include "ntp.h"
+#include "ntphdr.h"
 #include "fault.h"
 
-
 bool NtpTrace = false;
 
 void NtpInit()
@@ -19,51 +19,49 @@
    NtpClientInit();
 }
 
-void NtpLogHeader(struct NtpHeader* pHeader)
+void NtpLogHeader(char* pPacket)
 {
     if (NetTraceVerbose) Log ("NTP header\r\n  ");
     else                 Log ("NTP   header: ");
     
-    LogF("Mode %d",         pHeader->Mode);
-    LogF(", Version %d",    pHeader->VN);
-    LogF(", LI %d",         pHeader->LI);
-    LogF(", Stratum %d",    pHeader->Stratum);
-    LogF(", Poll %d",       pHeader->Poll);
-    LogF(", Precision %d",  pHeader->Precision);
-    LogF(", Root delay %d", NetToHost32(pHeader->RootDelay));
-    LogF(", Dispersion %d", NetToHost32(pHeader->Dispersion));
+    LogF("Mode %d",         NtpHdrGetMode(pPacket));
+    LogF(", Version %d",    NtpHdrGetVersion(pPacket));
+    LogF(", LI %d",         NtpHdrGetLI(pPacket));
+    LogF(", Stratum %d",    NtpHdrGetStratum(pPacket));
+    LogF(", Poll %d",       NtpHdrGetPoll(pPacket));
+    LogF(", Precision %d",  NtpHdrGetPrecision(pPacket));
+    LogF(", Root delay %d", NtpHdrGetRootDelay(pPacket));
+    LogF(", Dispersion %d", NtpHdrGetDispersion(pPacket));
     Log (", Ident ");
-    for (int i = 0; i < 4; i++) if (pHeader->RefIdentifier[i]) LogChar(pHeader->RefIdentifier[i]);
+    for (int i = 0; i < 4; i++) if (NtpHdrPtrRefIdentifier(pPacket)[i]) LogChar(NtpHdrPtrRefIdentifier(pPacket)[i]);
     Log ("\r\n");
     
     if (NetTraceVerbose)
     {
-        LogF("  REF %llu\r\n",  NetToHost64(pHeader->RefTimeStamp));
-        LogF("  ORI %llu\r\n",  NetToHost64(pHeader->OriTimeStamp));
-        LogF("  REC %llu\r\n",  NetToHost64(pHeader->RecTimeStamp));
-        LogF("  TRA %llu\r\n",  NetToHost64(pHeader->TraTimeStamp));
+        LogF("  REF %llu\r\n",  NtpHdrGetRefTimeStamp(pPacket));
+        LogF("  ORI %llu\r\n",  NtpHdrGetOriTimeStamp(pPacket));
+        LogF("  REC %llu\r\n",  NtpHdrGetRecTimeStamp(pPacket));
+        LogF("  TRA %llu\r\n",  NtpHdrGetTraTimeStamp(pPacket));
     }
 }
 
-int NtpHandlePacketReceived(void (*traceback)(void), int sizeRx, void * pPacketRx, int* pSizeTx, void* pPacketTx)
+int NtpHandlePacketReceived(void (*traceback)(void), int sizeRx, char* pPacketRx, int* pSizeTx, char* pPacketTx)
 {
     int lastFaultPoint = FaultPoint;
     FaultPoint = FAULT_POINT_NtpHandlePacketReceived;
     
-    if (sizeRx != sizeof(struct NtpHeader))
+    if (sizeRx != NTP_HEADER_LENGTH)
     {
         LogTimeF("\r\nNTP packet wrong size %d\r\n", sizeRx);
         return DO_NOTHING;
     }
-    struct NtpHeader* pHeaderRx = (struct NtpHeader*)pPacketRx;
-    struct NtpHeader* pHeaderTx = (struct NtpHeader*)pPacketTx;
     
     int dest = DO_NOTHING;
-    switch (pHeaderRx->Mode)
+    switch (NtpHdrGetMode(pPacketRx))
     {
-        case NTP_CLIENT: dest = NtpServerRequest(traceback, pHeaderRx, pHeaderTx);        break;
-        case NTP_SERVER:        NtpClientReply  (traceback, pHeaderRx);                   break;
-        default:         LogTimeF("\r\nNTP packet unknown mode %d\r\n", pHeaderRx->Mode); break;
+        case NTP_CLIENT: dest = NtpServerRequest(traceback, pPacketRx, pPacketTx);        break;
+        case NTP_SERVER:        NtpClientReply  (traceback, pPacketRx);                   break;
+        default:         LogTimeF("\r\nNTP packet unknown mode %d\r\n", NtpHdrGetMode(pPacketRx)); break;
     }
     
     FaultPoint = lastFaultPoint;
@@ -73,11 +71,11 @@
     }
     else
     {
-        *pSizeTx = sizeof(struct NtpHeader);
+        *pSizeTx = NTP_HEADER_LENGTH;
         return ActionMakeFromDestAndTrace(dest, NtpTrace && NetTraceStack);
     }
 }
-int NtpPollForPacketToSend(int type, void* pPacket, int* pSize)
+int NtpPollForPacketToSend(int type, char* pPacket, int* pSize)
 {    
     int dest = NtpClientQueryPoll(type, pPacket, pSize);
     if (!dest) return DO_NOTHING;
@@ -86,7 +84,7 @@
     {
         if (NetTraceNewLine) Log("\r\n");
         LogTimeF("Sending NTP request\r\n");
-        NtpLogHeader((struct NtpHeader*)pPacket);
+        NtpLogHeader(pPacket);
     }
     return ActionMakeFromDestAndTrace(dest, NtpTrace && NetTraceStack);