}
static void *discovery_loop(void *userdata) {
+ bool status = false;
meshlink_handle_t *mesh = userdata;
assert(mesh != NULL);
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) {
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())) {
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);