X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fdiscovery.c;h=08ed9aea7ecaeb1a1baaafc42ca7e17af235c504;hb=2aa7b5a999b17d808c7f32e4d6a19e4beb7e0918;hp=046bcc3e9a0dec431280d692a62667b823e81ccf;hpb=fd58d81eba5c498efb2264e3fca801d1d7935033;p=meshlink diff --git a/src/discovery.c b/src/discovery.c index 046bcc3e..08ed9aea 100644 --- a/src/discovery.c +++ b/src/discovery.c @@ -17,12 +17,20 @@ #include -#include - #define MESHLINK_MDNS_SERVICE_TYPE "_%s._tcp" #define MESHLINK_MDNS_NAME_KEY "name" #define MESHLINK_MDNS_FINGERPRINT_KEY "fingerprint" +static void generate_rand_string(char* buffer, size_t size) +{ + for(size_t i = 0; i < (size - 1); ++i) + { + buffer[i] = 'a' + (rand() % ('z' - 'a' + 1)); + } + + buffer[size-1] = '\0'; +} + static void discovery_entry_group_callback(CattaServer *server, CattaSEntryGroup *group, CattaEntryGroupState state, void *userdata) { meshlink_handle_t *mesh = userdata; @@ -160,14 +168,11 @@ static void discovery_server_callback(CattaServer *server, CattaServerState stat assert(mesh->catta_poll != NULL); /* A host name collision happened. Let's pick a new name for the server */ - uuid_t hostname; - uuid_generate(hostname); - - char hostnamestr[36+1]; - uuid_unparse_lower(hostname, hostnamestr); + char hostname[17]; + generate_rand_string(hostname, sizeof(hostname)); - logger(mesh, MESHLINK_WARNING, "Catta host name collision, retrying with '%s'\n", hostnamestr); - int result = catta_server_set_host_name(mesh->catta_server, hostnamestr); + logger(mesh, MESHLINK_WARNING, "Catta host name collision, retrying with '%s'\n", hostname); + int result = catta_server_set_host_name(mesh->catta_server, hostname); if(result < 0) { @@ -461,7 +466,7 @@ bool discovery_start(meshlink_handle_t *mesh) // handle catta logs catta_set_log_function(discovery_log_cb); - + // create service type string size_t servicetype_strlen = sizeof(MESHLINK_MDNS_SERVICE_TYPE) + strlen(mesh->appname) + 1; mesh->catta_servicetype = malloc(servicetype_strlen); @@ -482,16 +487,13 @@ bool discovery_start(meshlink_handle_t *mesh) } // generate some unique host name (we actually do not care about it) - uuid_t hostname; - uuid_generate(hostname); - - char hostnamestr[36+1]; - uuid_unparse_lower(hostname, hostnamestr); + char hostname[17]; + generate_rand_string(hostname, sizeof(hostname)); // Let's set the host name for this server. CattaServerConfig config; catta_server_config_init(&config); - config.host_name = catta_strdup(hostnamestr); + config.host_name = catta_strdup(hostname); config.publish_workstation = 0; config.disallow_other_stacks = 0; config.publish_hinfo = 0;