mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
62 lines
1.5 KiB
C++
62 lines
1.5 KiB
C++
#ifndef __SNTPCLIENT__
|
|
#define __SNTPCLIENT__
|
|
|
|
#include <string>
|
|
#include <map>
|
|
#include <vector>
|
|
#include <list>
|
|
|
|
#include <boost/thread/mutex.hpp>
|
|
#include <boost/asio.hpp>
|
|
|
|
#include "types.h"
|
|
|
|
class SNTPQuery
|
|
{
|
|
public:
|
|
bool mReceivedReply;
|
|
time_t mLocalTimeSent;
|
|
uint32 mQueryNonce;
|
|
|
|
SNTPQuery(time_t j = (time_t) -1) : mReceivedReply(false), mLocalTimeSent(j) { ; }
|
|
};
|
|
|
|
class SNTPClient
|
|
{
|
|
protected:
|
|
std::map<boost::asio::ip::udp::endpoint, SNTPQuery> mQueries;
|
|
boost::mutex mLock;
|
|
|
|
boost::asio::ip::udp::socket mSocket;
|
|
boost::asio::deadline_timer mTimer;
|
|
boost::asio::ip::udp::resolver mResolver;
|
|
|
|
std::vector< std::pair<std::string, time_t> > mServers;
|
|
|
|
int mOffset;
|
|
time_t mLastOffsetUpdate;
|
|
std::list<int> mOffsetList;
|
|
|
|
std::vector<uint8_t> mReceiveBuffer;
|
|
boost::asio::ip::udp::endpoint mReceiveEndpoint;
|
|
|
|
void receivePacket(const boost::system::error_code& error, std::size_t bytes);
|
|
void resolveComplete(const boost::system::error_code& error, boost::asio::ip::udp::resolver::iterator iterator);
|
|
void sentPacket(boost::shared_ptr<std::string>, const boost::system::error_code&, std::size_t);
|
|
void timerEntry(const boost::system::error_code&);
|
|
void sendComplete(const boost::system::error_code& error, std::size_t bytesTransferred);
|
|
void processReply();
|
|
|
|
public:
|
|
SNTPClient(boost::asio::io_service& service);
|
|
void init(const std::vector<std::string>& servers);
|
|
void addServer(const std::string& mServer);
|
|
|
|
void queryAll();
|
|
bool doQuery();
|
|
bool getOffset(int& offset);
|
|
};
|
|
|
|
#endif
|
|
// vim:ts=4
|