OpenSDN source code
bfd_rest_client.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 CodiLime, Inc. All rights reserved.
3  */
4 
5 #ifndef BFD_CONFIG_CLIENT_H_
6 #define BFD_CONFIG_CLIENT_H_
7 
8 #include <string>
9 #include <mutex>
10 #include <condition_variable>
11 
12 #include <boost/optional.hpp>
13 #include <boost/system/error_code.hpp>
14 #include <boost/asio/ip/tcp.hpp>
16 
17 #include "base/util.h"
18 #include "io/event_manager.h"
20 
21 namespace BFD {
22 
23 class RESTClient {
24  public:
25  typedef boost::function<void(boost::system::error_code)> AddBFDHostCb;
26  typedef boost::function<void(boost::system::error_code)> DeleteBFDHostCb;
27  typedef boost::function<void(const REST::JsonState &state,
28  boost::system::error_code)> GetSessionCb;
29  typedef boost::function<void(const REST::JsonStateMap &new_states,
30  boost::system::error_code)> MonitorCb;
31 
32  RESTClient(const boost::asio::ip::tcp::endpoint& ep,
33  EventManager* evm);
34  virtual ~RESTClient();
35 
36  void Init();
37  void Stop();
38 
39  bool AddBFDHost(const boost::asio::ip::address& remote_address,
40  AddBFDHostCb cb);
41  bool DeleteBFDHost(const boost::asio::ip::address& remote_address,
42  DeleteBFDHostCb cb);
43  bool GetSession(const boost::asio::ip::address& remote_address,
44  GetSessionCb cb);
45  bool Monitor(MonitorCb cb);
46 
47  bool is_initialized();
48  bool IsStopped();
49 
50  private:
51  static void CreateSessionCallback(const std::string& response,
52  const boost::system::error_code& ec, HttpConnection* connection,
53  AddBFDHostCb cb);
54  static void DeleteSessionCallback(const std::string& response,
55  const boost::system::error_code& ec, HttpConnection* connection,
56  DeleteBFDHostCb cb);
57  static void GetBFDConnectionCallback(const std::string& response,
58  const boost::system::error_code& ec, HttpConnection* connection,
59  GetSessionCb cb);
60  static void MonitorCallback(const std::string& response,
61  const boost::system::error_code& ec, HttpConnection* connection,
62  MonitorCb cb);
63 
65 
66  void CreateRESTClientSessionCallback(const std::string& response,
67  const boost::system::error_code& ec);
68 
69  void SetError();
71 
73  boost::asio::ip::tcp::endpoint ep_;
75  boost::optional<ClientId> client_id_;
76  bool error_;
77  std::mutex mutex_;
78  std::condition_variable cond_var_;
79  bool stopped_;
80 };
81 
82 } // namespace BFD
83 
84 #endif // SRC_BFD_CONFIG_CLIENT_H_
boost::function< void(const REST::JsonStateMap &new_states, boost::system::error_code)> MonitorCb
std::mutex mutex_
static void GetBFDConnectionCallback(const std::string &response, const boost::system::error_code &ec, HttpConnection *connection, GetSessionCb cb)
boost::function< void(const REST::JsonState &state, boost::system::error_code)> GetSessionCb
boost::asio::ip::tcp::endpoint ep_
virtual ~RESTClient()
bool GetSession(const boost::asio::ip::address &remote_address, GetSessionCb cb)
void CreateRESTClientSessionCallback(const std::string &response, const boost::system::error_code &ec)
bool AddBFDHost(const boost::asio::ip::address &remote_address, AddBFDHostCb cb)
bool DeleteBFDHost(const boost::asio::ip::address &remote_address, DeleteBFDHostCb cb)
static const REST::JsonConfig kDefaultConfig
static void MonitorCallback(const std::string &response, const boost::system::error_code &ec, HttpConnection *connection, MonitorCb cb)
static void CreateSessionCallback(const std::string &response, const boost::system::error_code &ec, HttpConnection *connection, AddBFDHostCb cb)
boost::function< void(boost::system::error_code)> AddBFDHostCb
boost::optional< ClientId > client_id_
HttpClient * http_client_
HttpConnection * long_poll_connection_
bool Monitor(MonitorCb cb)
bool is_initialized_non_locking()
std::condition_variable cond_var_
static void DeleteSessionCallback(const std::string &response, const boost::system::error_code &ec, HttpConnection *connection, DeleteBFDHostCb cb)
boost::function< void(boost::system::error_code)> DeleteBFDHostCb
RESTClient(const boost::asio::ip::tcp::endpoint &ep, EventManager *evm)
static EventManager evm
Definition: bfd_client.h:9