summaryrefslogtreecommitdiff
path: root/zerotierone/one.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'zerotierone/one.cpp')
-rw-r--r--zerotierone/one.cpp77
1 files changed, 60 insertions, 17 deletions
diff --git a/zerotierone/one.cpp b/zerotierone/one.cpp
index 04716e8..9f7a0a2 100644
--- a/zerotierone/one.cpp
+++ b/zerotierone/one.cpp
@@ -52,7 +52,11 @@
#include "version.h"
#include "include/ZeroTierOne.h"
+#ifdef ZT_USE_SYSTEM_JSON_PARSER
+#include <json-parser/json.h>
+#else
#include "ext/json-parser/json.h"
+#endif
#include "node/Identity.hpp"
#include "node/CertificateOfMembership.hpp"
@@ -82,6 +86,8 @@ static OneService *volatile zt1Service = (OneService *)0;
/* zerotier-cli personality */
/****************************************************************************/
+// This is getting deprecated soon in favor of the stuff in cli/
+
static void cliPrintHelp(const char *pn,FILE *out)
{
fprintf(out,
@@ -93,19 +99,19 @@ static void cliPrintHelp(const char *pn,FILE *out)
LICENSE_GRANT ZT_EOL_S);
fprintf(out,"Usage: %s [-switches] <command/path> [<args>]" ZT_EOL_S"" ZT_EOL_S,pn);
fprintf(out,"Available switches:" ZT_EOL_S);
- fprintf(out," -h - Display this help" ZT_EOL_S);
- fprintf(out," -v - Show version" ZT_EOL_S);
- fprintf(out," -j - Display full raw JSON output" ZT_EOL_S);
- fprintf(out," -D<path> - ZeroTier home path for parameter auto-detect" ZT_EOL_S);
- fprintf(out," -p<port> - HTTP port (default: auto)" ZT_EOL_S);
- fprintf(out," -T<token> - Authentication token (default: auto)" ZT_EOL_S);
- //fprintf(out," -H<ip> - HTTP server bind address (default: 127.0.0.1)" ZT_EOL_S);
+ fprintf(out," -h - Display this help" ZT_EOL_S);
+ fprintf(out," -v - Show version" ZT_EOL_S);
+ fprintf(out," -j - Display full raw JSON output" ZT_EOL_S);
+ fprintf(out," -D<path> - ZeroTier home path for parameter auto-detect" ZT_EOL_S);
+ fprintf(out," -p<port> - HTTP port (default: auto)" ZT_EOL_S);
+ fprintf(out," -T<token> - Authentication token (default: auto)" ZT_EOL_S);
fprintf(out,ZT_EOL_S"Available commands:" ZT_EOL_S);
- fprintf(out," info - Display status info" ZT_EOL_S);
- fprintf(out," listpeers - List all peers" ZT_EOL_S);
- fprintf(out," listnetworks - List all networks" ZT_EOL_S);
- fprintf(out," join <network> - Join a network" ZT_EOL_S);
- fprintf(out," leave <network> - Leave a network" ZT_EOL_S);
+ fprintf(out," info - Display status info" ZT_EOL_S);
+ fprintf(out," listpeers - List all peers" ZT_EOL_S);
+ fprintf(out," listnetworks - List all networks" ZT_EOL_S);
+ fprintf(out," join <network> - Join a network" ZT_EOL_S);
+ fprintf(out," leave <network> - Leave a network" ZT_EOL_S);
+ fprintf(out," set <network> <setting> - Set a network setting" ZT_EOL_S);
}
static std::string cliFixJsonCRs(const std::string &s)
@@ -126,10 +132,7 @@ static int cli(int argc,char **argv)
#endif
{
unsigned int port = 0;
- std::string homeDir;
- std::string command;
- std::string arg1;
- std::string authToken;
+ std::string homeDir,command,arg1,arg2,authToken;
std::string ip("127.0.0.1");
bool json = false;
for(int i=1;i<argc;++i) {
@@ -201,7 +204,9 @@ static int cli(int argc,char **argv)
return 0;
}
} else {
- if (command.length())
+ if (arg1.length())
+ arg2 = argv[i];
+ else if (command.length())
arg1 = argv[i];
else command = argv[i];
}
@@ -549,6 +554,44 @@ static int cli(int argc,char **argv)
printf("%u %s %s" ZT_EOL_S,scode,command.c_str(),responseBody.c_str());
return 1;
}
+ } else if (command == "set") {
+ if (arg1.length() != 16) {
+ cliPrintHelp(argv[0],stderr);
+ return 2;
+ }
+ std::size_t eqidx = arg2.find('=');
+ if (eqidx != std::string::npos) {
+ if ((arg2.substr(0,eqidx) == "allowManaged")||(arg2.substr(0,eqidx) == "allowGlobal")||(arg2.substr(0,eqidx) == "allowDefault")) {
+ char jsons[1024];
+ Utils::snprintf(jsons,sizeof(jsons),"{\"%s\":%s}",
+ arg2.substr(0,eqidx).c_str(),
+ (((arg2.substr(eqidx,2) == "=t")||(arg2.substr(eqidx,2) == "=1")) ? "true" : "false"));
+ char cl[128];
+ Utils::snprintf(cl,sizeof(cl),"%u",(unsigned int)strlen(jsons));
+ requestHeaders["Content-Type"] = "application/json";
+ requestHeaders["Content-Length"] = cl;
+ unsigned int scode = Http::POST(
+ 1024 * 1024 * 16,
+ 60000,
+ (const struct sockaddr *)&addr,
+ (std::string("/network/") + arg1).c_str(),
+ requestHeaders,
+ jsons,
+ strlen(jsons),
+ responseHeaders,
+ responseBody);
+ if (scode == 200) {
+ printf("%s",cliFixJsonCRs(responseBody).c_str());
+ 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 2;
+ }
} else {
cliPrintHelp(argv[0],stderr);
return 0;