diff options
Diffstat (limited to 'node')
-rw-r--r-- | node/Node.cpp | 13 | ||||
-rw-r--r-- | node/Node.hpp | 3 |
2 files changed, 14 insertions, 2 deletions
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 |