10 #include <boost/assign.hpp>
11 #include <boost/bind.hpp>
12 #include <boost/foreach.hpp>
13 #include <boost/random.hpp>
15 #include <rapidjson/document.h>
16 #include <rapidjson/writer.h>
17 #include <rapidjson/stringbuffer.h>
38 const std::string& client_id = (*data.
match)[1];
44 const std::string& client_id = (*data.
match)[1];
50 const std::string& client_id = (*data.
match)[1];
51 boost::system::error_code ec;
52 boost::asio::ip::address ip =
58 const std::string& client_id = (*data.
match)[1];
59 boost::system::error_code ec;
60 boost::asio::ip::address ip =
67 const std::string& client_id = (*data.
match)[1];
73 boost::assign::list_of
79 regex(
"/Session/([[:digit:]]{1,9})"),
83 regex(
"/Session/([[:digit:]]{1,9})/IpConnection"),
87 regex(
"/Session/([[:digit:]]{1,9})/IpConnection/"
88 "([[:digit:]]{1,3}\\.[[:digit:]]{1,3}\\."
89 "[[:digit:]]{1,3}\\.[[:digit:]]{1,3})"),
93 regex(
"/Session/([[:digit:]]{1,9})/IpConnection/"
94 "([[:digit:]]{1,3}\\.[[:digit:]]{1,3}\\."
95 "[[:digit:]]{1,3}\\.[[:digit:]]{1,3})"),
99 regex(
"/Session/([[:digit:]]{1,9})/Monitor"),
104 bfd_server_(bfd_server) {
114 boost::lexical_cast<std::string>(client_id), 404);
125 contrail_rapidjson::Document document;
126 document.SetObject();
127 document.AddMember(
"client-id", client_id, document.GetAllocator());
128 contrail_rapidjson::StringBuffer strbuf;
129 contrail_rapidjson::Writer<contrail_rapidjson::StringBuffer> writer(strbuf);
130 document.Accept(writer);
138 if (client_session == NULL) {
139 LOG(DEBUG, __PRETTY_FUNCTION__ <<
": Couldn't get session.");
143 delete client_session;
151 if (client_session == NULL) {
152 LOG(DEBUG, __PRETTY_FUNCTION__ <<
": Couldn't get session.");
178 const boost::asio::ip::address& ip,
HttpSession* session,
181 if (client_session == NULL) {
182 LOG(DEBUG, __PRETTY_FUNCTION__ <<
": Couldn't get session.");
187 if (bfd_session == NULL) {
188 LOG(DEBUG, __PRETTY_FUNCTION__ <<
": Couldn't get session.");
212 const boost::asio::ip::address& ip,
HttpSession* session,
215 if (client_session == NULL) {
216 LOG(DEBUG, __PRETTY_FUNCTION__ <<
": Couldn't get session.");
231 if (client_session == NULL) {
232 LOG(DEBUG, __PRETTY_FUNCTION__ <<
": Couldn't get session.");
241 tbb::mutex::scoped_lock lock(
mutex_);
243 std::string path = request->
UrlPath();
254 LOG(INFO,
"Handling request: " << path);
263 LOG(ERROR,
"Couldn't handle request: " << path);
269 boost::random::uniform_int_distribution<> dist(0, 1e9);
const SessionKey & key() const
ResultCode AddBFDConnection(const SessionKey &key, const SessionConfig &config)
void SendResponse(HttpSession *session, const std::string &msg, int status_code)
TimeInterval desiredMinTxInterval
bool ParseFromJsonString(const std::string &json)
void ClientMonitorHandler(const struct RESTData &)
const std::string & Body() const
TimeInterval required_min_rx_interval
Discriminator local_discriminator
JsonConfig session_config
Discriminator discriminator
TimeInterval requiredMinRxInterval
boost::random::taus88 randomGen
void SendErrorResponse(HttpSession *session, const std::string &error_msg, int status_code)
BFDRemoteSessionState remote_state() const
boost::asio::ip::address remote_address
void ClientIPConnectionHandler(const struct RESTData &)
static bool regex_match(const std::string &input, const regex ®ex)
contrail::regex request_regex
void GetBFDConnection(ClientId client_id, const boost::asio::ip::address &ip, HttpSession *session, const HttpRequest *request)
TimeInterval minRxInterval
void DeleteBFDConnection(ClientId client_id, const boost::asio::ip::address &ip, HttpSession *session, const HttpRequest *request)
static const std::vector< HandlerSpecifier > RESTHandlers_
void ClientIPAddressHandlerDelete(const struct RESTData &)
SessionConfig config() const
static bool regex_search(const std::string &input, const regex ®ex)
void CreateRESTClientSession(HttpSession *session, const HttpRequest *request)
RESTClientSession * GetClientSession(ClientId client_id, HttpSession *session)
http_method GetMethod() const
const boost::smatch * match
IpAddress AddressFromString(const std::string &ip_address_str, boost::system::error_code *ec)
TimeInterval remote_min_rx_interval
Discriminator remote_discriminator
void CreateBFDConnection(ClientId client_id, HttpSession *session, const HttpRequest *request)
void AddMonitoringHttpSession(HttpSession *session)
void ClientIPAddressHandlerGet(const struct RESTData &)
void SessionHandler(const struct RESTData &)
const HttpRequest * request
BFDState local_state() const
#define LOG(_Level, _Msg)
void DeleteRESTClientSession(ClientId client_id, HttpSession *session, const HttpRequest *request)
Discriminator local_discriminator() const
Session * GetSession(const boost::asio::ip::address &ip, const SessionIndex &index=SessionIndex()) const
ResultCode DeleteBFDConnection(const SessionKey &key)
int detection_time_multiplier
RESTServer(Server *bfd_server)
void ClientHandler(const struct RESTData &)
int detectionTimeMultiplier
ClientMap client_sessions_
void EncodeJsonString(std::string *json)
TimeInterval desired_min_tx_interval
std::string UrlPath() const
boost::asio::ip::address address
BFDState bfd_remote_state
void HandleRequest(HttpSession *session, const HttpRequest *request)
void MonitorRESTClientSession(ClientId client_id, HttpSession *session, const HttpRequest *request)