diff options
-rw-r--r-- | main.cpp | 4 | ||||
-rw-r--r-- | make-mac.mk | 8 | ||||
-rw-r--r-- | node/Node.cpp | 13 | ||||
-rw-r--r-- | node/Node.hpp | 3 |
4 files changed, 22 insertions, 6 deletions
@@ -154,6 +154,10 @@ static int main(int argc,char **argv) try { volatile bool done = false; Node::NodeControlClient client(hp,&_CBresultHandler,(void *)&done); + if (client.error()) { + fprintf(stderr,"%s: fatal error: unable to connect (is ZeroTier One running?)"ZT_EOL_S,argv[0]); + return 1; + } client.send(query.c_str()); while (!done) Thread::sleep(250); // ghetto diff --git a/make-mac.mk b/make-mac.mk index 559ef2be..bef8b71b 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -23,12 +23,12 @@ endif #DEFS+=-DZT_TRACE -DZT_LOG_STDOUT # Uncomment for a release optimized universal binary build -CFLAGS=-arch i386 -arch x86_64 -Wall -O3 -flto -fPIE -fvectorize -fstack-protector -pthread -mmacosx-version-min=10.6 -DNDEBUG -Wno-unused-private-field $(INCLUDES) $(DEFS) -STRIP=strip +#CFLAGS=-arch i386 -arch x86_64 -Wall -O3 -flto -fPIE -fvectorize -fstack-protector -pthread -mmacosx-version-min=10.6 -DNDEBUG -Wno-unused-private-field $(INCLUDES) $(DEFS) +#STRIP=strip # Uncomment for a debug build -#CFLAGS=-Wall -g -pthread -DZT_TRACE -DZT_LOG_STDOUT $(INCLUDES) $(DEFS) -#STRIP=echo +CFLAGS=-Wall -g -pthread -DZT_TRACE -DZT_LOG_STDOUT $(INCLUDES) $(DEFS) +STRIP=echo CXXFLAGS=$(CFLAGS) -fno-rtti diff --git a/node/Node.cpp b/node/Node.cpp index b76d4b6d..653d63cf 100644 --- a/node/Node.cpp +++ b/node/Node.cpp @@ -99,6 +99,7 @@ Node::NodeControlClient::NodeControlClient(const char *hp,void (*resultHandler)( _impl((void *)new _NodeControlClientImpl) { _NodeControlClientImpl *impl = (_NodeControlClientImpl *)_impl; + impl->ipcc = (IpcConnection *)0; if (!hp) hp = ZT_DEFAULTS.defaultHomePath.c_str(); @@ -121,6 +122,7 @@ Node::NodeControlClient::NodeControlClient(const char *hp,void (*resultHandler)( impl->ipcc = new IpcConnection((std::string(ZT_IPC_ENDPOINT_BASE) + myaddr).c_str(),&_CBipcResultHandler,_impl); impl->ipcc->printf("auth %s"ZT_EOL_S,at.c_str()); } catch ( ... ) { + impl->ipcc = (IpcConnection *)0; impl->err = "failure connecting to running ZeroTier One service"; } } @@ -136,11 +138,20 @@ Node::NodeControlClient::~NodeControlClient() } } +const char *Node::NodeControlClient::error() const + throw() +{ + if (((_NodeControlClientImpl *)_impl)->err.length()) + return ((_NodeControlClientImpl *)_impl)->err.c_str(); + return (const char *)0; +} + void Node::NodeControlClient::send(const char *command) throw() { try { - ((_NodeControlClientImpl *)_impl)->ipcc->printf("%s"ZT_EOL_S,command); + if (((_NodeControlClientImpl *)_impl)->ipcc) + ((_NodeControlClientImpl *)_impl)->ipcc->printf("%s"ZT_EOL_S,command); } catch ( ... ) {} } diff --git a/node/Node.hpp b/node/Node.hpp index a8b13003..bf154dc2 100644 --- a/node/Node.hpp +++ b/node/Node.hpp @@ -71,7 +71,8 @@ public: /** * @return Initialization error or NULL if none */ - const char *error() const; + const char *error() const + throw(); /** * Send a command to the local node |