OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
bfd_json_config.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 CodiLime, Inc. All rights reserved.
3  */
4 
5 #ifndef SRC_BFD_JSON_CONFIG_H_
6 #define SRC_BFD_JSON_CONFIG_H_
7 
8 #include "bfd/bfd_common.h"
9 
10 #include <vector>
11 #include <map>
12 #include <string>
13 #include <boost/asio/ip/address.hpp>
14 #include <rapidjson/document.h>
15 
16 namespace BFD {
17 namespace REST {
18 
19 struct JsonData {
20  class Constraint {
21  public:
22  typedef bool (contrail_rapidjson::Value::*TypecheckFunc)() const;
23 
25  : member_name(member_name), typecheck_func(func) {}
26 
27  const char* member_name;
29  };
30 
31  virtual bool ValidateJsonDocument(const contrail_rapidjson::Value& document) = 0;
32  virtual bool ParseFromJsonDocument(const contrail_rapidjson::Value& document) = 0;
33  virtual void EncodeJsonDocument(contrail_rapidjson::Value* document,
34  contrail_rapidjson::Value::AllocatorType *allocator) = 0;
35 
36  bool ParseFromJsonString(const std::string& json);
37  void EncodeJsonString(std::string* json);
38 
39  virtual ~JsonData() {}
40 
41  protected:
42  bool AreConstraintsMet(const std::vector<Constraint>& constraints,
43  const contrail_rapidjson::Value& document);
44 };
45 
46 struct JsonConfig : public JsonData {
47  JsonConfig();
48  JsonConfig(boost::asio::ip::address address,
52 
53  bool ValidateJsonDocument(const contrail_rapidjson::Value& document);
54  bool ParseFromJsonDocument(const contrail_rapidjson::Value& document);
55  void EncodeJsonDocument(contrail_rapidjson::Value* document,
56  contrail_rapidjson::Value::AllocatorType *allocator);
57 
58  boost::asio::ip::address address;
62 };
63 
64 struct JsonState : public JsonData {
65  virtual bool ValidateJsonDocument(const contrail_rapidjson::Value& document);
66  virtual bool ParseFromJsonDocument(const contrail_rapidjson::Value& document);
67  void EncodeJsonDocument(contrail_rapidjson::Value* document,
68  contrail_rapidjson::Value::AllocatorType *allocator);
69 
71 
77 };
78 
80  virtual bool ValidateJsonDocument(const contrail_rapidjson::Value& document);
81  virtual bool ParseFromJsonDocument(const contrail_rapidjson::Value& document);
82  void EncodeJsonDocument(contrail_rapidjson::Value* document,
83  contrail_rapidjson::Value::AllocatorType *allocator);
84 
85  boost::asio::ip::address address;
87 };
88 
90  virtual bool ValidateJsonDocument(const contrail_rapidjson::Value& document);
91  virtual bool ParseFromJsonDocument(const contrail_rapidjson::Value& document);
92  void EncodeJsonDocument(contrail_rapidjson::Value* document,
93  contrail_rapidjson::Value::AllocatorType *allocator);
94 
95  std::vector<JsonStateNotification> notifications;
96 };
97 
98 struct JsonStateMap : public JsonData {
99  typedef std::map<boost::asio::ip::address, BFDState> StateMap;
101 
102  virtual bool ValidateJsonDocument(const contrail_rapidjson::Value& document);
103  virtual bool ParseFromJsonDocument(const contrail_rapidjson::Value& document);
104  void EncodeJsonDocument(contrail_rapidjson::Value* document,
105  contrail_rapidjson::Value::AllocatorType* allocator);
106 };
107 
108 } // namespace REST
109 } // namespace BFD
110 
111 #endif // SRC_BFD_JSON_CONFIG_H_
Constraint(const char *member_name, TypecheckFunc func)
uint32_t Discriminator
Definition: bfd_common.h:17
virtual bool ValidateJsonDocument(const contrail_rapidjson::Value &document)=0
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)
bool ParseFromJsonDocument(const contrail_rapidjson::Value &document)
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
Definition: bfd_common.h:18
void EncodeJsonDocument(contrail_rapidjson::Value *document, contrail_rapidjson::Value::AllocatorType *allocator)
virtual bool ValidateJsonDocument(const contrail_rapidjson::Value &document)
std::map< boost::asio::ip::address, BFDState > StateMap
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)
virtual bool ParseFromJsonDocument(const contrail_rapidjson::Value &document)
bool(contrail_rapidjson::Value::* TypecheckFunc)() const
BFDState
Definition: bfd_common.h:21
TimeInterval remote_min_rx_interval
Discriminator remote_discriminator
void EncodeJsonDocument(contrail_rapidjson::Value *document, contrail_rapidjson::Value::AllocatorType *allocator)
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
bool AreConstraintsMet(const std::vector< Constraint > &constraints, const contrail_rapidjson::Value &document)