Line data Source code
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 : 24 4 : Constraint(const char* member_name, TypecheckFunc func) 25 4 : : member_name(member_name), typecheck_func(func) {} 26 : 27 : const char* member_name; 28 : TypecheckFunc typecheck_func; 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 14 : 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, 49 : TimeInterval desired_min_tx_interval, 50 : TimeInterval required_min_rx_interval, 51 : int detection_time_multiplier); 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; 59 : TimeInterval desired_min_tx_interval; 60 : TimeInterval required_min_rx_interval; 61 : int detection_time_multiplier; 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 : 70 : JsonConfig session_config; 71 : 72 : Discriminator local_discriminator; 73 : Discriminator remote_discriminator; 74 : BFDState bfd_local_state; 75 : BFDState bfd_remote_state; 76 : TimeInterval remote_min_rx_interval; 77 : }; 78 : 79 : struct JsonStateNotification : public JsonData { 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; 86 : BFDState state; 87 : }; 88 : 89 : struct JsonStateNotificationList : public JsonData { 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; 100 : StateMap states; 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_