summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--make-freebsd.mk2
-rw-r--r--make-linux.mk2
-rw-r--r--make-mac.mk2
-rw-r--r--one.cpp47
-rw-r--r--osdep/Http.hpp29
5 files changed, 79 insertions, 3 deletions
diff --git a/make-freebsd.mk b/make-freebsd.mk
index e7992f1f..2832136e 100644
--- a/make-freebsd.mk
+++ b/make-freebsd.mk
@@ -72,7 +72,7 @@ selftest: $(OBJS) selftest.o
# ./buildinstaller.sh
clean:
- rm -rf *.o node/*.o controller/*.o osdep/*.o service/*.o ext/http-parser/*.o ext/lz4/*.o ext/json-parser/*.o build-* zerotier-one zerotier-idtool zerotier-selftest ZeroTierOneInstaller-*
+ rm -rf *.o node/*.o controller/*.o osdep/*.o service/*.o ext/http-parser/*.o ext/lz4/*.o ext/json-parser/*.o build-* zerotier-one zerotier-idtool zerotier-selftest zerotier-cli ZeroTierOneInstaller-*
debug: FORCE
make -j 4 ZT_DEBUG=1
diff --git a/make-linux.mk b/make-linux.mk
index efcf459e..fbd6d254 100644
--- a/make-linux.mk
+++ b/make-linux.mk
@@ -77,7 +77,7 @@ installer: one FORCE
./buildinstaller.sh
clean:
- rm -rf *.o node/*.o controller/*.o osdep/*.o service/*.o ext/http-parser/*.o ext/lz4/*.o ext/json-parser/*.o zerotier-one zerotier-idtool zerotier-selftest build-* ZeroTierOneInstaller-* *.deb *.rpm
+ rm -rf *.o node/*.o controller/*.o osdep/*.o service/*.o ext/http-parser/*.o ext/lz4/*.o ext/json-parser/*.o zerotier-one zerotier-idtool zerotier-cli zerotier-selftest build-* ZeroTierOneInstaller-* *.deb *.rpm
debug: FORCE
make -j 4 ZT_DEBUG=1
diff --git a/make-mac.mk b/make-mac.mk
index 0efaef80..a41445db 100644
--- a/make-mac.mk
+++ b/make-mac.mk
@@ -76,7 +76,7 @@ selftest: $(OBJS) selftest.o
# $(CODESIGN) -vvv "build-ZeroTierUI-release/ZeroTier One.app"
clean:
- rm -rf *.dSYM build-* *.pkg *.dmg *.o node/*.o controller/*.o service/*.o osdep/*.o ext/http-parser/*.o ext/lz4/*.o ext/json-parser/*.o zerotier-one zerotier-idtool zerotier-selftest ZeroTierOneInstaller-*
+ rm -rf *.dSYM build-* *.pkg *.dmg *.o node/*.o controller/*.o service/*.o osdep/*.o ext/http-parser/*.o ext/lz4/*.o ext/json-parser/*.o zerotier-one zerotier-idtool zerotier-selftest zerotier-cli ZeroTierOneInstaller-*
# For our use -- builds official signed binary, packages in installer and download DMG
official: FORCE
diff --git a/one.cpp b/one.cpp
index fd1700f2..0bce5eef 100644
--- a/one.cpp
+++ b/one.cpp
@@ -298,7 +298,54 @@ static int cli(int argc,char **argv)
return 1;
}
} else if (command == "join") {
+ if (arg1.length() != 16) {
+ cliPrintHelp(argv[0],stderr);
+ return 2;
+ }
+ unsigned int scode = Http::POST(
+ 1024 * 1024 * 16,
+ 60000,
+ (const struct sockaddr *)&addr,
+ (std::string("/network/") + arg1).c_str(),
+ requestHeaders,
+ "",
+ 0,
+ responseHeaders,
+ responseBody);
+ if (scode == 200) {
+ if (json) {
+ printf("%s",cliFixJsonCRs(responseBody).c_str());
+ } else {
+ }
+ return 0;
+ } else {
+ printf("%u %s %s"ZT_EOL_S,scode,command.c_str(),responseBody.c_str());
+ return 1;
+ }
} else if (command == "leave") {
+ if (arg1.length() != 16) {
+ cliPrintHelp(argv[0],stderr);
+ return 2;
+ }
+ unsigned int scode = Http::DELETE(
+ 1024 * 1024 * 16,
+ 60000,
+ (const struct sockaddr *)&addr,
+ (std::string("/network/") + arg1).c_str(),
+ requestHeaders,
+ responseHeaders,
+ responseBody);
+ if (scode == 200) {
+ if (json) {
+ printf("%s",cliFixJsonCRs(responseBody).c_str());
+ } else {
+ printf("200 leave OK"ZT_EOL_S);
+ }
+ 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;
diff --git a/osdep/Http.hpp b/osdep/Http.hpp
index c73cc112..a1882add 100644
--- a/osdep/Http.hpp
+++ b/osdep/Http.hpp
@@ -83,6 +83,35 @@ public:
}
/**
+ * Make HTTP DELETE request
+ *
+ * The caller must set all headers, including Host.
+ *
+ * @return HTTP status code or 0 on error (responseBody will contain error message)
+ */
+ static inline unsigned int DELETE(
+ unsigned long maxResponseSize,
+ unsigned long timeout,
+ const struct sockaddr *remoteAddress,
+ const char *path,
+ const std::map<std::string,std::string> &requestHeaders,
+ std::map<std::string,std::string> &responseHeaders,
+ std::string &responseBody)
+ {
+ return _do(
+ "DELETE",
+ maxResponseSize,
+ timeout,
+ remoteAddress,
+ path,
+ requestHeaders,
+ (const void *)0,
+ 0,
+ responseHeaders,
+ responseBody);
+ }
+
+ /**
* Make HTTP POST request
*
* It is the responsibility of the caller to set all headers. With POST, the