A minor bugfix. It prevents the library from entering an endless loop in case the NTP server droppes the request rather than sending a kiss of death message.

Dependents:   STM32F746_iothub_client_sample_mqtt Iot_LCD_EC iothub_client_sample_mqtt simplesample_mqtt ... more

Committer:
KKempeneers
Date:
Fri Oct 23 14:52:54 2015 +0000
Revision:
0:537dcd4ff837
Minor bugfix. Initialized inEndpoint's address property to outEndpoints address. In the event of the server dropping the request instead of returning a kiss of death this prevents the library from entering in an endless loop.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
KKempeneers 0:537dcd4ff837 1 /* NTPClient.h */
KKempeneers 0:537dcd4ff837 2 /* Copyright (C) 2012 mbed.org, MIT License
KKempeneers 0:537dcd4ff837 3 *
KKempeneers 0:537dcd4ff837 4 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
KKempeneers 0:537dcd4ff837 5 * and associated documentation files (the "Software"), to deal in the Software without restriction,
KKempeneers 0:537dcd4ff837 6 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
KKempeneers 0:537dcd4ff837 7 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
KKempeneers 0:537dcd4ff837 8 * furnished to do so, subject to the following conditions:
KKempeneers 0:537dcd4ff837 9 *
KKempeneers 0:537dcd4ff837 10 * The above copyright notice and this permission notice shall be included in all copies or
KKempeneers 0:537dcd4ff837 11 * substantial portions of the Software.
KKempeneers 0:537dcd4ff837 12 *
KKempeneers 0:537dcd4ff837 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
KKempeneers 0:537dcd4ff837 14 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
KKempeneers 0:537dcd4ff837 15 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
KKempeneers 0:537dcd4ff837 16 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
KKempeneers 0:537dcd4ff837 17 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
KKempeneers 0:537dcd4ff837 18 */
KKempeneers 0:537dcd4ff837 19
KKempeneers 0:537dcd4ff837 20 /** \file
KKempeneers 0:537dcd4ff837 21 NTP Client header file
KKempeneers 0:537dcd4ff837 22 */
KKempeneers 0:537dcd4ff837 23
KKempeneers 0:537dcd4ff837 24 #ifndef NTPCLIENT_H_
KKempeneers 0:537dcd4ff837 25 #define NTPCLIENT_H_
KKempeneers 0:537dcd4ff837 26
KKempeneers 0:537dcd4ff837 27 #include <cstdint>
KKempeneers 0:537dcd4ff837 28
KKempeneers 0:537dcd4ff837 29 using std::uint8_t;
KKempeneers 0:537dcd4ff837 30 using std::uint16_t;
KKempeneers 0:537dcd4ff837 31 using std::uint32_t;
KKempeneers 0:537dcd4ff837 32
KKempeneers 0:537dcd4ff837 33 #include "UDPSocket.h"
KKempeneers 0:537dcd4ff837 34
KKempeneers 0:537dcd4ff837 35 #define NTP_DEFAULT_PORT 123
KKempeneers 0:537dcd4ff837 36 #define NTP_DEFAULT_TIMEOUT 4000
KKempeneers 0:537dcd4ff837 37
KKempeneers 0:537dcd4ff837 38 ///NTP client results
KKempeneers 0:537dcd4ff837 39 enum NTPResult
KKempeneers 0:537dcd4ff837 40 {
KKempeneers 0:537dcd4ff837 41 NTP_DNS, ///<Could not resolve name
KKempeneers 0:537dcd4ff837 42 NTP_PRTCL, ///<Protocol error
KKempeneers 0:537dcd4ff837 43 NTP_TIMEOUT, ///<Connection timeout
KKempeneers 0:537dcd4ff837 44 NTP_CONN, ///<Connection error
KKempeneers 0:537dcd4ff837 45 NTP_OK = 0, ///<Success
KKempeneers 0:537dcd4ff837 46 };
KKempeneers 0:537dcd4ff837 47
KKempeneers 0:537dcd4ff837 48 /** NTP Client to update the mbed's RTC using a remote time server
KKempeneers 0:537dcd4ff837 49 *
KKempeneers 0:537dcd4ff837 50 */
KKempeneers 0:537dcd4ff837 51 class NTPClient
KKempeneers 0:537dcd4ff837 52 {
KKempeneers 0:537dcd4ff837 53 public:
KKempeneers 0:537dcd4ff837 54 /**
KKempeneers 0:537dcd4ff837 55 Instantiate the NTP client
KKempeneers 0:537dcd4ff837 56 */
KKempeneers 0:537dcd4ff837 57 NTPClient();
KKempeneers 0:537dcd4ff837 58
KKempeneers 0:537dcd4ff837 59 /**Get current time (blocking)
KKempeneers 0:537dcd4ff837 60 Update the time using the server host
KKempeneers 0:537dcd4ff837 61 Blocks until completion
KKempeneers 0:537dcd4ff837 62 @param host NTP server IPv4 address or hostname (will be resolved via DNS)
KKempeneers 0:537dcd4ff837 63 @param port port to use; defaults to 123
KKempeneers 0:537dcd4ff837 64 @param timeout waiting timeout in ms (osWaitForever for blocking function, not recommended)
KKempeneers 0:537dcd4ff837 65 @return 0 on success, NTP error code (<0) on failure
KKempeneers 0:537dcd4ff837 66 */
KKempeneers 0:537dcd4ff837 67 NTPResult setTime(const char* host, uint16_t port = NTP_DEFAULT_PORT, uint32_t timeout = NTP_DEFAULT_TIMEOUT); //Blocking
KKempeneers 0:537dcd4ff837 68
KKempeneers 0:537dcd4ff837 69 private:
KKempeneers 0:537dcd4ff837 70 struct NTPPacket //See RFC 4330 for Simple NTP
KKempeneers 0:537dcd4ff837 71 {
KKempeneers 0:537dcd4ff837 72 //WARN: We are in LE! Network is BE!
KKempeneers 0:537dcd4ff837 73 //LSb first
KKempeneers 0:537dcd4ff837 74 unsigned mode : 3;
KKempeneers 0:537dcd4ff837 75 unsigned vn : 3;
KKempeneers 0:537dcd4ff837 76 unsigned li : 2;
KKempeneers 0:537dcd4ff837 77
KKempeneers 0:537dcd4ff837 78 uint8_t stratum;
KKempeneers 0:537dcd4ff837 79 uint8_t poll;
KKempeneers 0:537dcd4ff837 80 uint8_t precision;
KKempeneers 0:537dcd4ff837 81 //32 bits header
KKempeneers 0:537dcd4ff837 82
KKempeneers 0:537dcd4ff837 83 uint32_t rootDelay;
KKempeneers 0:537dcd4ff837 84 uint32_t rootDispersion;
KKempeneers 0:537dcd4ff837 85 uint32_t refId;
KKempeneers 0:537dcd4ff837 86
KKempeneers 0:537dcd4ff837 87 uint32_t refTm_s;
KKempeneers 0:537dcd4ff837 88 uint32_t refTm_f;
KKempeneers 0:537dcd4ff837 89 uint32_t origTm_s;
KKempeneers 0:537dcd4ff837 90 uint32_t origTm_f;
KKempeneers 0:537dcd4ff837 91 uint32_t rxTm_s;
KKempeneers 0:537dcd4ff837 92 uint32_t rxTm_f;
KKempeneers 0:537dcd4ff837 93 uint32_t txTm_s;
KKempeneers 0:537dcd4ff837 94 uint32_t txTm_f;
KKempeneers 0:537dcd4ff837 95 } __attribute__ ((packed));
KKempeneers 0:537dcd4ff837 96
KKempeneers 0:537dcd4ff837 97 UDPSocket m_sock;
KKempeneers 0:537dcd4ff837 98
KKempeneers 0:537dcd4ff837 99 };
KKempeneers 0:537dcd4ff837 100
KKempeneers 0:537dcd4ff837 101
KKempeneers 0:537dcd4ff837 102 #endif /* NTPCLIENT_H_ */