OpenSDN source code
bfd_rest_server.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 CodiLime, Inc. All rights reserved.
3  */
4 
5 #ifndef BFD_CONFIG_SERVER_H_
6 #define BFD_CONFIG_SERVER_H_
7 
8 #include <map>
9 #include <mutex>
10 #include <boost/asio/ip/address.hpp>
11 
12 #include "base/regex.h"
13 #include "http/http_request.h"
14 #include "http/http_session.h"
15 #include "bfd/bfd_common.h"
18 
19 namespace BFD {
20 
21 class RESTServer {
22  public:
23  explicit RESTServer(Server* bfd_server);
24  ~RESTServer();
25 
26  void HandleRequest(HttpSession* session, const HttpRequest* request);
27 
28  protected:
29  typedef std::map<ClientId, RESTClientSession *> ClientMap;
30 
32 
34 
36  const HttpRequest* request);
37  void DeleteRESTClientSession(ClientId client_id,
38  HttpSession* session, const HttpRequest* request);
39  void CreateBFDConnection(ClientId client_id,
40  HttpSession* session, const HttpRequest* request);
41  void GetBFDConnection(ClientId client_id,
42  const boost::asio::ip::address& ip, HttpSession* session,
43  const HttpRequest* request);
44  void DeleteBFDConnection(ClientId client_id,
45  const boost::asio::ip::address& ip,
46  HttpSession* session, const HttpRequest* request);
47  void MonitorRESTClientSession(ClientId client_id, HttpSession* session,
48  const HttpRequest* request);
49 
50  // REST handlers
51  struct RESTData {
52  const boost::smatch* match;
53  enum http_method method;
56  };
57 
59  public:
60  typedef void (RESTServer::*HandlerFunc)(const struct RESTData&);
61 
63  enum http_method method,
66  method(method),
68 
70  enum http_method method;
72  };
73 
74  static const std::vector<HandlerSpecifier> RESTHandlers_;
75 
76  void SessionHandler(const struct RESTData&);
77  void ClientHandler(const struct RESTData&);
78  void ClientIPConnectionHandler(const struct RESTData&);
79  void ClientIPAddressHandlerGet(const struct RESTData&);
80  void ClientIPAddressHandlerDelete(const struct RESTData&);
81  void ClientMonitorHandler(const struct RESTData&);
82 
85  std::mutex mutex_;
86 };
87 
88 } // namespace BFD
89 
90 #endif // SRC_BFD_CONFIG_SERVER_H_
void(RESTServer::* HandlerFunc)(const struct RESTData &)
HandlerSpecifier(const contrail::regex &request_regex, enum http_method method, HandlerFunc handler_func)
void ClientIPAddressHandlerDelete(const struct RESTData &)
void DeleteRESTClientSession(ClientId client_id, HttpSession *session, const HttpRequest *request)
void HandleRequest(HttpSession *session, const HttpRequest *request)
static const std::vector< HandlerSpecifier > RESTHandlers_
void DeleteBFDConnection(ClientId client_id, const boost::asio::ip::address &ip, HttpSession *session, const HttpRequest *request)
void ClientIPConnectionHandler(const struct RESTData &)
void MonitorRESTClientSession(ClientId client_id, HttpSession *session, const HttpRequest *request)
std::map< ClientId, RESTClientSession * > ClientMap
RESTClientSession * GetClientSession(ClientId client_id, HttpSession *session)
void CreateBFDConnection(ClientId client_id, HttpSession *session, const HttpRequest *request)
ClientId UniqClientId()
void SessionHandler(const struct RESTData &)
void ClientHandler(const struct RESTData &)
RESTServer(Server *bfd_server)
std::mutex mutex_
void CreateRESTClientSession(HttpSession *session, const HttpRequest *request)
ClientMap client_sessions_
void ClientIPAddressHandlerGet(const struct RESTData &)
void GetBFDConnection(ClientId client_id, const boost::asio::ip::address &ip, HttpSession *session, const HttpRequest *request)
void ClientMonitorHandler(const struct RESTData &)
Server * bfd_server_
Definition: bfd_client.h:9
uint32_t ClientId
Definition: bfd_common.h:19
const HttpRequest * request
const boost::smatch * match