OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 <boost/optional.hpp>
10 #include <boost/system/error_code.hpp>
11 #include <boost/asio/ip/tcp.hpp>
13 
14 #include "base/util.h"
15 #include "io/event_manager.h"
17 
18 namespace BFD {
19 
20 class RESTClient {
21  public:
22  typedef boost::function<void(boost::system::error_code)> AddBFDHostCb;
23  typedef boost::function<void(boost::system::error_code)> DeleteBFDHostCb;
24  typedef boost::function<void(const REST::JsonState &state,
25  boost::system::error_code)> GetSessionCb;
26  typedef boost::function<void(const REST::JsonStateMap &new_states,
27  boost::system::error_code)> MonitorCb;
28 
29  RESTClient(const boost::asio::ip::tcp::endpoint& ep,
30  EventManager* evm);
31  virtual ~RESTClient();
32 
33  void Init();
34  void Stop();
35 
36  bool AddBFDHost(const boost::asio::ip::address& remote_address,
37  AddBFDHostCb cb);
38  bool DeleteBFDHost(const boost::asio::ip::address& remote_address,
39  DeleteBFDHostCb cb);
40  bool GetSession(const boost::asio::ip::address& remote_address,
41  GetSessionCb cb);
42  bool Monitor(MonitorCb cb);
43 
44  bool is_initialized();
45  bool IsStopped();
46 
47  private:
48  static void CreateSessionCallback(const std::string& response,
49  const boost::system::error_code& ec, HttpConnection* connection,
50  AddBFDHostCb cb);
51  static void DeleteSessionCallback(const std::string& response,
52  const boost::system::error_code& ec, HttpConnection* connection,
53  DeleteBFDHostCb cb);
54  static void GetBFDConnectionCallback(const std::string& response,
55  const boost::system::error_code& ec, HttpConnection* connection,
56  GetSessionCb cb);
57  static void MonitorCallback(const std::string& response,
58  const boost::system::error_code& ec, HttpConnection* connection,
59  MonitorCb cb);
60 
62 
63  void CreateRESTClientSessionCallback(const std::string& response,
64  const boost::system::error_code& ec);
65 
66  void SetError();
68 
70  boost::asio::ip::tcp::endpoint ep_;
72  boost::optional<ClientId> client_id_;
73  bool error_;
74  tbb::mutex mutex_;
75  tbb::interface5::condition_variable cond_var_;
76  bool stopped_;
77 };
78 
79 } // namespace BFD
80 
81 #endif // SRC_BFD_CONFIG_CLIENT_H_
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
boost::function< void(const REST::JsonState &state, boost::system::error_code)> GetSessionCb
bool AddBFDHost(const boost::asio::ip::address &remote_address, AddBFDHostCb cb)
static void GetBFDConnectionCallback(const std::string &response, const boost::system::error_code &ec, HttpConnection *connection, GetSessionCb cb)
bool is_initialized_non_locking()
static void MonitorCallback(const std::string &response, const boost::system::error_code &ec, HttpConnection *connection, MonitorCb cb)
bool GetSession(const boost::asio::ip::address &remote_address, GetSessionCb cb)
static void CreateSessionCallback(const std::string &response, const boost::system::error_code &ec, HttpConnection *connection, AddBFDHostCb cb)
tbb::mutex mutex_
tbb::interface5::condition_variable cond_var_
HttpConnection * long_poll_connection_
boost::asio::ip::tcp::endpoint ep_
RESTClient(const boost::asio::ip::tcp::endpoint &ep, EventManager *evm)
boost::function< void(const REST::JsonStateMap &new_states, boost::system::error_code)> MonitorCb
boost::function< void(boost::system::error_code)> AddBFDHostCb
bool Monitor(MonitorCb cb)
virtual ~RESTClient()
bool DeleteBFDHost(const boost::asio::ip::address &remote_address, DeleteBFDHostCb cb)
static const REST::JsonConfig kDefaultConfig
void CreateRESTClientSessionCallback(const std::string &response, const boost::system::error_code &ec)
HttpClient * http_client_
boost::optional< ClientId > client_id_
static EventManager evm