static void test_parse_escaped_string(void) { { const char *data = "\"\\\\\""; const char *original = data; JsonElement *json = NULL; assert_int_equal(JSON_PARSE_OK, JsonParse(&data, &json)); assert_string_equal("\\", JsonPrimitiveGetAsString(json)); char *out = JsonToString(json); assert_string_equal(original, out); free(out); JsonDestroy(json); } { // included by paranoia from Redmine #5773 const char *data = "\"/\\\\//\\\\/\\\\\""; const char *original = data; JsonElement *json = NULL; assert_int_equal(JSON_PARSE_OK, JsonParse(&data, &json)); assert_string_equal("/\\//\\/\\", JsonPrimitiveGetAsString(json)); char *out = JsonToString(json); assert_string_equal(original, out); free(out); JsonDestroy(json); } { const char *data = "\"x\\tx\""; const char *original = data; JsonElement *json = NULL; assert_int_equal(JSON_PARSE_OK, JsonParse(&data, &json)); assert_string_equal("x\tx", JsonPrimitiveGetAsString(json)); char *out = JsonToString(json); assert_string_equal(original, out); free(out); JsonDestroy(json); } }
/** * @brief RequestHandler::handlePost * @param uri * @param p_data * @return */ void RequestHandler::handleRequest(ConnectionInfo &conInfo) { vector<string> parsedURI = parseURI(conInfo.url); string p_image[] = {"index", "images", "IDENTIFIER", ""}; string p_searchImage[] = {"index", "searcher", ""}; string p_ioIndex[] = {"index", "io", ""}; Json::Value ret; conInfo.answerCode = MHD_HTTP_OK; if (testURIWithPattern(parsedURI, p_image) && conInfo.connectionType == PUT) { u_int32_t i_imageId = atoi(parsedURI[2].c_str()); u_int32_t i_ret = featureExtractor->processNewImage( i_imageId, conInfo.uploadedData.size(), conInfo.uploadedData.data()); ret["type"] = Converter::codeToString(i_ret); ret["image_id"] = Json::Value(i_imageId); } else if (testURIWithPattern(parsedURI, p_image) && conInfo.connectionType == DELETE) { u_int32_t i_imageId = atoi(parsedURI[2].c_str()); u_int32_t i_ret = index->removeImage(i_imageId); ret["type"] = Converter::codeToString(i_ret); ret["image_id"] = Json::Value(i_imageId); } else if (testURIWithPattern(parsedURI, p_searchImage) && conInfo.connectionType == POST) { SearchRequest req; req.imageData = conInfo.uploadedData; req.client = NULL; u_int32_t i_ret = imageSearcher->searchImage(req); ret["type"] = Converter::codeToString(i_ret); if (i_ret == OK) { Json::Value imageIds(Json::arrayValue); for (unsigned i = 0; i < req.results.size(); ++i) imageIds.append(req.results[i]); ret["image_ids"] = imageIds; } } else if (testURIWithPattern(parsedURI, p_ioIndex) && conInfo.connectionType == POST) { string dataStr(conInfo.uploadedData.begin(), conInfo.uploadedData.end()); Json::Value data = StringToJson(dataStr); u_int32_t i_ret; if (data["type"] == "LOAD") i_ret = index->load(data["index_path"].asString()); else if (data["type"] == "WRITE") i_ret = index->write(data["index_path"].asString()); else if (data["type"] == "CLEAR") i_ret = index->clear(); else i_ret = ERROR_GENERIC; ret["type"] = Converter::codeToString(i_ret); } else { conInfo.answerCode = MHD_HTTP_INTERNAL_SERVER_ERROR; ret["type"] = Converter::codeToString(ERROR_GENERIC); } conInfo.answerString = JsonToString(ret); }