Browse Source

More IPC work.

Adam Ierymenko 11 years ago
parent
commit
6fdb360e2a
4 changed files with 22 additions and 6 deletions
  1. 4 0
      main.cpp
  2. 4 4
      make-mac.mk
  3. 12 1
      node/Node.cpp
  4. 2 1
      node/Node.hpp

+ 4 - 0
main.cpp

@@ -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

+ 4 - 4
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
 

+ 12 - 1
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 ( ... ) {}
 }
 

+ 2 - 1
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