#include #include #include #include "json_codec_factory.hh" #include "loggers.hh" #include "LibItsHttp_JsonMessageBodyTypes.hh" int json_codec::encode (const LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, OCTETSTRING& data) { loggers::get_instance().log_msg(">>> json_codec::encode: ", (const Base_Type&)msg); TTCN_EncDec::clear_error(); TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); TTCN_Buffer encoding_buffer; loggers::get_instance().error("json_codec::encode: Not supported: "); loggers::get_instance().log("<<< json_codec::encode"); return 0; } int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, params* p_params) { loggers::get_instance().log_msg(">>> json_codec::decode: p_data=", p_data); // Sanity checks params::const_iterator it; if (p_params == nullptr) { loggers::get_instance().warning("json_codec::decode: Failed to access p_params (null pointer)"); return -1; } else { it = p_params->find("decode_str"); if (it == p_params->cend()) { loggers::get_instance().warning("json_codec::decode: Failed to access p_params item (decode_str)"); return -1; } } TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); TTCN_EncDec::clear_error(); // Remove data structure name... int idx_begin = it->second.find(":"); int idx_end = it->second.rfind("}") - 1; // Remove the last '}' std::string str = it->second.substr(idx_begin + 1, idx_end - idx_begin); // ..and create the decoding buffer TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); if (it->second.find("{\"userInfo\"") != std::string::npos) { LocationAPI__TypesAndValues::UserInfo user_info; user_info.decode(LocationAPI__TypesAndValues::UserInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.userInfo() = user_info; } else { loggers::get_instance().warning("json_codec::decode: Unsupported variant"); return -1; } loggers::get_instance().log_msg("<<< json_codec::decode: ", (const Base_Type&)msg); return 0; } json_codec_factory json_codec_factory::_f;