6 #include <boost/foreach.hpp>
7 #include <boost/assign/list_of.hpp>
10 #include "rapidjson/document.h"
11 #include "rapidjson/writer.h"
12 #include "rapidjson/stringbuffer.h"
20 boost::system::error_code ec;
26 contrail_rapidjson::Document document;
27 document.Parse<0>(json.c_str());
32 contrail_rapidjson::Document document;
34 contrail_rapidjson::StringBuffer strbuf;
35 contrail_rapidjson::Writer<contrail_rapidjson::StringBuffer> writer(strbuf);
36 document.Accept(writer);
37 *json = strbuf.GetString();
41 const contrail_rapidjson::Value& document) {
42 if (!document.IsObject())
45 BOOST_FOREACH(
const struct Constraint& constraint, constraints) {
59 int detection_time_multiplier)
61 desired_min_tx_interval(desired_min_tx_interval),
62 required_min_rx_interval(required_min_rx_interval),
63 detection_time_multiplier(detection_time_multiplier)
67 static const std::vector<Constraint> constraints = boost::assign::list_of
68 (
Constraint(
"Address", &contrail_rapidjson::Value::IsString) )
69 (
Constraint(
"DesiredMinTxInterval", &contrail_rapidjson::Value::IsInt))
70 (
Constraint(
"RequiredMinRxInterval", &contrail_rapidjson::Value::IsInt))
71 (
Constraint(
"DetectionMultiplier", &contrail_rapidjson::Value::IsInt));
78 using boost::posix_time::microseconds;
80 boost::system::error_code ec;
83 microseconds(document[
"DesiredMinTxInterval"].GetInt());
85 microseconds(document[
"RequiredMinRxInterval"].GetInt());
87 document[
"DetectionMultiplier"].GetInt();
94 contrail_rapidjson::Value::AllocatorType *allocator) {
95 document->SetObject();
96 std::string address_str =
address.to_string();
97 contrail_rapidjson::Value address_val(address_str.c_str(), *allocator);
98 document->AddMember(
"Address", address_val, *allocator);
100 document->AddMember(
"DesiredMinTxInterval",
102 document->AddMember(
"RequiredMinRxInterval",
104 document->AddMember(
"DetectionMultiplier",
109 const std::vector<Constraint> constraints = boost::assign::list_of
110 (
Constraint(
"LocalSessionState", &contrail_rapidjson::Value::IsString))
111 (
Constraint(
"RemoteSessionState", &contrail_rapidjson::Value::IsString))
112 (
Constraint(
"RemoteMinRxInterval", &contrail_rapidjson::Value::IsInt))
113 (
Constraint(
"LocalDiscriminator", &contrail_rapidjson::Value::IsInt))
114 (
Constraint(
"RemoteDiscriminator", &contrail_rapidjson::Value::IsInt));
126 using boost::posix_time::microseconds;
129 microseconds(document[
"RemoteMinRxInterval"].GetInt());
131 document[
"LocalDiscriminator"].GetInt();
133 document[
"RemoteDiscriminator"].GetInt();
144 contrail_rapidjson::Value::AllocatorType *allocator) {
145 document->SetObject();
148 std::string local_session_state_str
150 contrail_rapidjson::Value local_session_state_val(local_session_state_str.c_str(),
152 document->AddMember(
"LocalSessionState", local_session_state_val,
155 std::string remote_session_state_str =
157 contrail_rapidjson::Value remote_session_state_val(remote_session_state_str.c_str(),
159 document->AddMember(
"RemoteSessionState", remote_session_state_val,
165 document->AddMember(
"RemoteMinRxInterval",
171 const contrail_rapidjson::Value& document) {
172 const std::vector<Constraint> constraints = boost::assign::list_of
173 (
Constraint(
"Address", &contrail_rapidjson::Value::IsString))
174 (
Constraint(
"SessionState", &contrail_rapidjson::Value::IsString));
184 boost::system::error_code ec;
194 contrail_rapidjson::Value::AllocatorType *allocator) {
195 document->SetObject();
196 std::string address_str =
address.to_string();
197 contrail_rapidjson::Value address_val(address_str.c_str(), *allocator);
198 document->AddMember(
"Address", address_val, *allocator);
200 std::string session_state_str = boost::lexical_cast<std::string>(
state);
201 contrail_rapidjson::Value session_state_val(session_state_str.c_str(), *allocator);
202 document->AddMember(
"SessionState", session_state_val, *allocator);
206 contrail_rapidjson::Value::AllocatorType *allocator) {
207 document->SetArray();
208 for (std::vector<JsonStateNotification>::iterator it =
210 contrail_rapidjson::Value notification;
211 it->EncodeJsonDocument(¬ification, allocator);
212 document->PushBack(notification, *allocator);
217 const contrail_rapidjson::Value& document) {
222 const contrail_rapidjson::Value& document) {
227 contrail_rapidjson::Value::AllocatorType* allocator) {
228 document->SetObject();
230 for (StateMap::iterator it =
states.begin(); it !=
states.end(); ++it) {
231 std::string address_str = it->first.to_string();
232 contrail_rapidjson::Value address_val(address_str.c_str(), *allocator);
234 std::string session_state_str =
235 boost::lexical_cast<std::string>(it->second);
236 contrail_rapidjson::Value session_state_val(session_state_str.c_str(),
239 document->AddMember(address_val, session_state_val, *allocator);
244 if (!document.IsObject())
247 for (contrail_rapidjson::Value::ConstMemberIterator it = document.MemberBegin();
248 it != document.MemberEnd(); ++it) {
249 using boost::system::error_code;
251 if (!it->name.IsString() || !it->value.IsString())
264 const contrail_rapidjson::Value& document) {
270 for (contrail_rapidjson::Value::ConstMemberIterator
271 it = document.MemberBegin(); it != document.MemberEnd(); ++it) {
272 boost::system::error_code ec;
273 boost::asio::ip::address address =
TypecheckFunc typecheck_func
boost::asio::ip::address address
virtual bool ParseFromJsonDocument(const contrail_rapidjson::Value &document)=0
bool ParseFromJsonString(const std::string &json)
std::vector< JsonStateNotification > notifications
virtual bool ParseFromJsonDocument(const contrail_rapidjson::Value &document)
virtual bool ParseFromJsonDocument(const contrail_rapidjson::Value &document)
TimeInterval required_min_rx_interval
Discriminator local_discriminator
virtual bool ValidateJsonDocument(const contrail_rapidjson::Value &document)
JsonConfig session_config
bool ParseFromJsonDocument(const contrail_rapidjson::Value &document)
static bool IsIPAddressValid(const char *addr)
boost::optional< BFDState > BFDStateFromString(const std::string &str)
void EncodeJsonDocument(contrail_rapidjson::Value *document, contrail_rapidjson::Value::AllocatorType *allocator)
void EncodeJsonDocument(contrail_rapidjson::Value *document, contrail_rapidjson::Value::AllocatorType *allocator)
virtual bool ValidateJsonDocument(const contrail_rapidjson::Value &document)
boost::posix_time::time_duration TimeInterval
void EncodeJsonDocument(contrail_rapidjson::Value *document, contrail_rapidjson::Value::AllocatorType *allocator)
virtual bool ValidateJsonDocument(const contrail_rapidjson::Value &document)
virtual void EncodeJsonDocument(contrail_rapidjson::Value *document, contrail_rapidjson::Value::AllocatorType *allocator)=0
bool ValidateJsonDocument(const contrail_rapidjson::Value &document)
void EncodeJsonDocument(contrail_rapidjson::Value *document, contrail_rapidjson::Value::AllocatorType *allocator)
IpAddress AddressFromString(const std::string &ip_address_str, boost::system::error_code *ec)
virtual bool ParseFromJsonDocument(const contrail_rapidjson::Value &document)
TimeInterval remote_min_rx_interval
Discriminator remote_discriminator
void EncodeJsonDocument(contrail_rapidjson::Value *document, contrail_rapidjson::Value::AllocatorType *allocator)
int detection_time_multiplier
void EncodeJsonString(std::string *json)
virtual bool ValidateJsonDocument(const contrail_rapidjson::Value &document)
TimeInterval desired_min_tx_interval
virtual bool ParseFromJsonDocument(const contrail_rapidjson::Value &document)
boost::asio::ip::address address
BFDState bfd_remote_state
bool AreConstraintsMet(const std::vector< Constraint > &constraints, const contrail_rapidjson::Value &document)