static inline void make_json(buffer &json, const std::string &keys, const T& val, const Types& ...values ) { std::string::size_type pos = keys.find(','); type::json_traits<T>::append(json, keys.substr(0, pos).c_str() , val); make_json(json, keys.substr(pos+1, keys.length()-1 ).c_str() ,values...); }
static inline void make_json(const bool &pretty, const unsigned &indent, unsigned &level, buffer &json, const std::string &keys, const T& val, const Types& ...values) { std::string::size_type pos = keys.find(','); if(pretty) { json.append("\n", 1); json.append(' ', indent * level); } type::json_traits<T>::append(json, keys.substr(0, pos).c_str() , val, pretty, indent, level); make_json(pretty, indent, level, json, keys.substr(pos+1, keys.length()-1 ).c_str() ,values...); }
void post_json(void) { struct httpd_ws_state *s; make_json(); //PRINTF("JSON data: %s of size: %d\n",json,strlen(json)); //PRINTF("URL: %s\n",url); s = httpd_ws_request(HTTPD_WS_POST, IP, HOST, PORT, url, http_content_type_json, strlen(json), send_json); if (s==NULL) { PRINTF("httpd_ws_request returned NULL\n"); } else { PRINTF(s->outbuf); } }
const ConfigValue FRTConfigResponseV3::readConfigValue() const { vespalib::string md5(_data->get()[RESPONSE_CONFIG_MD5].asString().make_string()); CompressionInfo info; info.deserialize(_data->get()[RESPONSE_COMPRESSION_INFO]); Slime * rawData = new Slime(); SlimePtr payloadData(rawData); DecompressedData data(decompress(((*_returnValues)[1]._data._buf), ((*_returnValues)[1]._data._len), info.compressionType, info.uncompressedSize)); if (data.memRef.size > 0) { size_t consumedSize = JsonFormat::decode(data.memRef, *rawData); if (consumedSize == 0) { std::string json(make_json(*payloadData, true)); LOG(error, "Error decoding JSON. Consumed size: %lu, uncompressed size: %u, compression type: %s, assumed uncompressed size(%u), compressed size: %u, slime(%s)", consumedSize, data.size, compressionTypeToString(info.compressionType).c_str(), info.uncompressedSize, ((*_returnValues)[1]._data._len), json.c_str()); LOG_ABORT("Error decoding JSON"); } } if (LOG_WOULD_LOG(spam)) { LOG(spam, "read config value md5(%s), payload size: %lu", md5.c_str(), data.memRef.size); } return ConfigValue(PayloadPtr(new V3Payload(payloadData)), md5); }