From 6fdb360e2ab1ed27760e6ea699a1594786bcbe76 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 19 Mar 2014 16:05:03 -0700 Subject: More IPC work. --- node/Node.cpp | 13 ++++++++++++- node/Node.hpp | 3 ++- 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'node') 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 -- cgit v1.2.3