diff --git a/NTPClient.cpp b/NTPClient.cpp index fffe105..760e142 100755 --- a/NTPClient.cpp +++ b/NTPClient.cpp @@ -73,7 +73,7 @@ void NTPClient::begin() { this->begin(NTP_DEFAULT_LOCAL_PORT); } -void NTPClient::begin(int port) { +void NTPClient::begin(unsigned int port) { this->_port = port; this->_udp->begin(this->_port); @@ -120,7 +120,7 @@ bool NTPClient::forceUpdate() { bool NTPClient::update() { if ((millis() - this->_lastUpdate >= this->_updateInterval) // Update after _updateInterval || this->_lastUpdate == 0) { // Update if there was no update yet. - if (!this->_udpSetup) this->begin(); // setup the UDP client if needed + if (!this->_udpSetup || this->_port != NTP_DEFAULT_LOCAL_PORT) this->begin(this->_port); // setup the UDP client if needed return this->forceUpdate(); } return false; // return false if update does not occur @@ -182,6 +182,7 @@ void NTPClient::sendNTPPacket() { memset(this->_packetBuffer, 0, NTP_PACKET_SIZE); // Initialize values needed to form NTP request // (see URL above for details on the packets) + this->_packetBuffer[0] = 0b11100011; // LI, Version, Mode this->_packetBuffer[1] = 0; // Stratum, or type of clock this->_packetBuffer[2] = 6; // Polling Interval @@ -202,3 +203,8 @@ void NTPClient::sendNTPPacket() { this->_udp->write(this->_packetBuffer, NTP_PACKET_SIZE); this->_udp->endPacket(); } + +void NTPClient::setRandomPort(unsigned int minValue, unsigned int maxValue) { + randomSeed(analogRead(0)); + this->_port = random(minValue, maxValue); +} \ No newline at end of file diff --git a/NTPClient.h b/NTPClient.h index 20ec43b..7defb1c 100755 --- a/NTPClient.h +++ b/NTPClient.h @@ -15,7 +15,7 @@ class NTPClient { const char* _poolServerName = "pool.ntp.org"; // Default time server IPAddress _poolServerIP; - int _port = NTP_DEFAULT_LOCAL_PORT; + unsigned int _port = NTP_DEFAULT_LOCAL_PORT; long _timeOffset = 0; unsigned long _updateInterval = 60000; // In ms @@ -44,6 +44,11 @@ class NTPClient { */ void setPoolServerName(const char* poolServerName); + /** + * Set random local port + */ + void setRandomPort(unsigned int minValue, unsigned int maxValue); + /** * Starts the underlying UDP client with the default local port */ @@ -52,7 +57,7 @@ class NTPClient { /** * Starts the underlying UDP client with the specified local port */ - void begin(int port); + void begin(unsigned int port); /** * This should be called in the main loop of your application. By default an update from the NTP Server is only