summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2014-10-07 16:16:22 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2014-10-07 16:16:22 -0700
commitb809dad94aeb59d591745034b86b273633aaf925 (patch)
tree14eee2cb3b5d53ebf8acffdd4fc202e77583abec
parentb13845e52813be9265afec4e281dc830384b282b (diff)
downloadinfinitytier-b809dad94aeb59d591745034b86b273633aaf925.tar.gz
infinitytier-b809dad94aeb59d591745034b86b273633aaf925.zip
Bug fix in zerotier-cli (Unix)
-rw-r--r--control/NodeControlClient.cpp9
-rw-r--r--main.cpp11
2 files changed, 13 insertions, 7 deletions
diff --git a/control/NodeControlClient.cpp b/control/NodeControlClient.cpp
index 11fdc9c8..7d0e04e8 100644
--- a/control/NodeControlClient.cpp
+++ b/control/NodeControlClient.cpp
@@ -39,6 +39,7 @@ struct _NodeControlClientImpl
{
void (*resultHandler)(void *,const char *);
void *arg;
+ bool ignoreNextBreak;
IpcConnection *ipcc;
std::string err;
};
@@ -46,8 +47,11 @@ struct _NodeControlClientImpl
static void _CBipcResultHandler(void *arg,IpcConnection *ipcc,IpcConnection::EventType event,const char *result)
{
if ((event == IpcConnection::IPC_EVENT_COMMAND)&&(result)) {
- if (strcmp(result,"200 auth OK"))
- ((_NodeControlClientImpl *)arg)->resultHandler(((_NodeControlClientImpl *)arg)->arg,result);
+ if (!strcmp(result,"200 auth OK")) {
+ ((_NodeControlClientImpl *)arg)->ignoreNextBreak = true;
+ } else if ((((_NodeControlClientImpl *)arg)->ignoreNextBreak)&&(!strcmp(result,"."))) {
+ ((_NodeControlClientImpl *)arg)->ignoreNextBreak = false;
+ } else ((_NodeControlClientImpl *)arg)->resultHandler(((_NodeControlClientImpl *)arg)->arg,result);
}
}
@@ -58,6 +62,7 @@ NodeControlClient::NodeControlClient(const char *ep,const char *authToken,void (
_NodeControlClientImpl *impl = (_NodeControlClientImpl *)_impl;
impl->resultHandler = resultHandler;
impl->arg = arg;
+ impl->ignoreNextBreak = false;
try {
impl->ipcc = new IpcConnection(ep,ZT_IPC_TIMEOUT,&_CBipcResultHandler,_impl);
impl->ipcc->printf("auth %s"ZT_EOL_S,authToken);
diff --git a/main.cpp b/main.cpp
index b2de78ba..3444f4d8 100644
--- a/main.cpp
+++ b/main.cpp
@@ -119,8 +119,10 @@ static void _CBresultHandler(void *arg,const char *line)
if (line) {
if ((line[0] == '.')&&(line[1] == (char)0)) {
fflush(stdout);
- *((bool *)arg) = true;
- } else fprintf(stdout,"%s"ZT_EOL_S,line);
+ ::exit(0); // terminate CLI on end of message
+ } else {
+ fprintf(stdout,"%s"ZT_EOL_S,line);
+ }
}
}
@@ -180,15 +182,14 @@ static int main(const char *homeDir,int argc,char **argv)
return 1;
}
- volatile bool done = false;
- NodeControlClient client((std::string(ZT_IPC_ENDPOINT_BASE) + id.address().toString()).c_str(),authToken.c_str(),&_CBresultHandler,(void *)&done);
+ NodeControlClient client((std::string(ZT_IPC_ENDPOINT_BASE) + id.address().toString()).c_str(),authToken.c_str(),&_CBresultHandler,(void *)0);
const char *err = client.error();
if (err) {
fprintf(stderr,"%s: fatal error: unable to connect (is ZeroTier One running?) (%s)"ZT_EOL_S,argv[0],err);
return 1;
}
client.send(query.c_str());
- while (!done) Thread::sleep(100); // dis be ghetto
+ for(;;) { Thread::sleep(60000); } // exit() is called at end of message from handler
} catch (std::exception &exc) {
fprintf(stderr,"%s: fatal error: unable to connect (is ZeroTier One running?) (%s)"ZT_EOL_S,argv[0],exc.what());
return 1;