OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 <boost/asio/ip/address.hpp>
10 
11 #include "base/regex.h"
12 #include "http/http_request.h"
13 #include "http/http_session.h"
14 #include "bfd/bfd_common.h"
17 
18 namespace BFD {
19 
20 class RESTServer {
21  public:
22  explicit RESTServer(Server* bfd_server);
23  ~RESTServer();
24 
25  void HandleRequest(HttpSession* session, const HttpRequest* request);
26 
27  protected:
28  typedef std::map<ClientId, RESTClientSession *> ClientMap;
29 
31 
33 
35  const HttpRequest* request);
36  void DeleteRESTClientSession(ClientId client_id,
37  HttpSession* session, const HttpRequest* request);
38  void CreateBFDConnection(ClientId client_id,
39  HttpSession* session, const HttpRequest* request);
40  void GetBFDConnection(ClientId client_id,
41  const boost::asio::ip::address& ip, HttpSession* session,
42  const HttpRequest* request);
43  void DeleteBFDConnection(ClientId client_id,
44  const boost::asio::ip::address& ip,
45  HttpSession* session, const HttpRequest* request);
46  void MonitorRESTClientSession(ClientId client_id, HttpSession* session,
47  const HttpRequest* request);
48 
49  // REST handlers
50  struct RESTData {
51  const boost::smatch* match;
52  enum http_method method;
55  };
56 
58  public:
59  typedef void (RESTServer::*HandlerFunc)(const struct RESTData&);
60 
62  enum http_method method,
64  : request_regex(request_regex),
65  method(method),
66  handler_func(handler_func) {}
67 
69  enum http_method method;
71  };
72 
73  static const std::vector<HandlerSpecifier> RESTHandlers_;
74 
75  void SessionHandler(const struct RESTData&);
76  void ClientHandler(const struct RESTData&);
77  void ClientIPConnectionHandler(const struct RESTData&);
78  void ClientIPAddressHandlerGet(const struct RESTData&);
79  void ClientIPAddressHandlerDelete(const struct RESTData&);
80  void ClientMonitorHandler(const struct RESTData&);
81 
84  tbb::mutex mutex_;
85 };
86 
87 } // namespace BFD
88 
89 #endif // SRC_BFD_CONFIG_SERVER_H_
void ClientMonitorHandler(const struct RESTData &)
Server * bfd_server_
uint32_t ClientId
Definition: bfd_common.h:19
void ClientIPConnectionHandler(const struct RESTData &)
void GetBFDConnection(ClientId client_id, const boost::asio::ip::address &ip, HttpSession *session, const HttpRequest *request)
void DeleteBFDConnection(ClientId client_id, const boost::asio::ip::address &ip, HttpSession *session, const HttpRequest *request)
std::map< ClientId, RESTClientSession * > ClientMap
static const std::vector< HandlerSpecifier > RESTHandlers_
void ClientIPAddressHandlerDelete(const struct RESTData &)
tbb::mutex mutex_
void CreateRESTClientSession(HttpSession *session, const HttpRequest *request)
RESTClientSession * GetClientSession(ClientId client_id, HttpSession *session)
HandlerSpecifier(const contrail::regex &request_regex, enum http_method method, HandlerFunc handler_func)
const boost::smatch * match
void CreateBFDConnection(ClientId client_id, HttpSession *session, const HttpRequest *request)
void ClientIPAddressHandlerGet(const struct RESTData &)
void SessionHandler(const struct RESTData &)
const HttpRequest * request
void DeleteRESTClientSession(ClientId client_id, HttpSession *session, const HttpRequest *request)
RESTServer(Server *bfd_server)
void ClientHandler(const struct RESTData &)
ClientId UniqClientId()
ClientMap client_sessions_
void(RESTServer::* HandlerFunc)(const struct RESTData &)
void HandleRequest(HttpSession *session, const HttpRequest *request)
void MonitorRESTClientSession(ClientId client_id, HttpSession *session, const HttpRequest *request)