X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=src%2Fdiscovery.c;h=72ff8bc5b5c6b57adae057e4c6db0fdb8d12d7f2;hp=9064523c9c603222cd2e55bd8736a56c1f712ec5;hb=7b8fe1b56e0fa4258931b3cdba66b6edf0dc6b21;hpb=dceaa0b7940464df45104e02b88e0ea3283bb938 diff --git a/src/discovery.c b/src/discovery.c index 9064523c..72ff8bc5 100644 --- a/src/discovery.c +++ b/src/discovery.c @@ -341,6 +341,7 @@ static void discovery_log_cb(CattaLogLevel level, const char *txt) { } static void *discovery_loop(void *userdata) { + bool status = false; meshlink_handle_t *mesh = userdata; assert(mesh != NULL); @@ -348,7 +349,21 @@ static void *discovery_loop(void *userdata) { catta_set_log_function(discovery_log_cb); // create service type string - size_t servicetype_strlen = sizeof(MESHLINK_MDNS_SERVICE_TYPE) + strlen(mesh->appname) + 1; + char appname[strlen(mesh->appname) + 2]; + strcpy(appname, mesh->appname); + + for(char *p = appname; *p; p++) { + if(!isalnum(*p) && *p != '_' && *p != '-') { + *p = '_'; + } + } + + if(!appname[1]) { + appname[1] = '_'; + appname[2] = '\0'; + } + + size_t servicetype_strlen = sizeof(MESHLINK_MDNS_SERVICE_TYPE) + strlen(appname) + 1; mesh->catta_servicetype = malloc(servicetype_strlen); if(mesh->catta_servicetype == NULL) { @@ -356,7 +371,7 @@ static void *discovery_loop(void *userdata) { goto fail; } - snprintf(mesh->catta_servicetype, servicetype_strlen, MESHLINK_MDNS_SERVICE_TYPE, mesh->appname); + snprintf(mesh->catta_servicetype, servicetype_strlen, MESHLINK_MDNS_SERVICE_TYPE, appname); // Allocate discovery loop object if(!(mesh->catta_poll = catta_simple_poll_new())) { @@ -397,13 +412,17 @@ static void *discovery_loop(void *userdata) { goto fail; } + status = true; + +fail: + pthread_mutex_lock(&mesh->discovery_mutex); pthread_cond_broadcast(&mesh->discovery_cond); pthread_mutex_unlock(&mesh->discovery_mutex); - catta_simple_poll_loop(mesh->catta_poll); - -fail: + if(status) { + catta_simple_poll_loop(mesh->catta_poll); + } if(mesh->catta_browser != NULL) { catta_s_service_browser_free(mesh->catta_browser);