Переглянути джерело

Added (get) command to cli to single out JSON fields

Joseph Henry 7 роки тому
батько
коміт
98b07f7f3c
1 змінених файлів з 37 додано та 0 видалено
  1. 37 0
      one.cpp

+ 37 - 0
one.cpp

@@ -607,6 +607,43 @@ static int cli(int argc,char **argv)
 			cliPrintHelp(argv[0],stderr);
 			return 2;
 		}
+	} else if (command == "get") {
+		if (arg1.length() != 16) {
+			cliPrintHelp(argv[0],stderr);
+			return 2;
+		}
+		char jsons[1024], cl[128];
+		OSUtils::ztsnprintf(cl,sizeof(cl),"%u",(unsigned int)strlen(jsons));
+		requestHeaders["Content-Type"] = "application/json";
+		requestHeaders["Content-Length"] = cl;
+		const unsigned int scode = Http::GET(1024 * 1024 * 16,60000,(const struct sockaddr *)&addr,"/network",requestHeaders,responseHeaders,responseBody);
+
+		nlohmann::json j;
+		try {
+			j = OSUtils::jsonParse(responseBody);
+		} catch (std::exception &exc) {
+			printf("%u %s invalid JSON response (%s)" ZT_EOL_S,scode,command.c_str(),exc.what());
+			return 1;
+		} catch ( ... ) {
+			printf("%u %s invalid JSON response (unknown exception)" ZT_EOL_S,scode,command.c_str());
+			return 1;
+		}
+		if (j.is_array()) {
+			for(unsigned long i=0;i<j.size();++i) {
+				nlohmann::json &n = j[i];
+				if (n.is_object()) {
+					if (n["id"] == arg1) {
+						printf("%s\n", OSUtils::jsonString(n[arg2],"-").c_str());
+					}
+				}
+			}
+		}
+		if (scode == 200) {
+			return 0;
+		} else {
+			printf("%u %s %s" ZT_EOL_S,scode,command.c_str(),responseBody.c_str());
+			return 1;
+		}
 	} else {
 		cliPrintHelp(argv[0],stderr);
 		return 0;