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/ntp/ntp.c
- 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);