X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fdiscovery.c;h=6b98a2768f178de342533e2574c060bb55b880a4;hb=1e2076334fd067db863956c7bda77fcbcc9a52fc;hp=ae2cf895d7d44c228b31319c3fa944d49189e7df;hpb=55e87af06f93daa497c389be8cd2acfefa70aa13;p=meshlink diff --git a/src/discovery.c b/src/discovery.c index ae2cf895..6b98a276 100644 --- a/src/discovery.c +++ b/src/discovery.c @@ -21,9 +21,11 @@ #define MESHLINK_MDNS_NAME_KEY "name" #define MESHLINK_MDNS_FINGERPRINT_KEY "fingerprint" -static void generate_rand_string(char *buffer, size_t size) { +static void generate_rand_string(meshlink_handle_t *mesh, char *buffer, size_t size) { + assert(size); + for(size_t i = 0; i < (size - 1); ++i) { - buffer[i] = 'a' + (rand() % ('z' - 'a' + 1)); + buffer[i] = 'a' + prng(mesh, 'z' - 'a' + 1); } buffer[size - 1] = '\0'; @@ -34,10 +36,9 @@ static void discovery_entry_group_callback(CattaServer *server, CattaSEntryGroup (void)group; meshlink_handle_t *mesh = userdata; - // asserts - assert(mesh != NULL); - assert(mesh->catta_server != NULL); - assert(mesh->catta_poll != NULL); + assert(mesh); + assert(mesh->catta_server); + assert(mesh->catta_poll); /* Called whenever the entry group state changes */ switch(state) { @@ -69,14 +70,13 @@ static void discovery_create_services(meshlink_handle_t *mesh) { char *txt_name = NULL; char *txt_fingerprint = NULL; - // asserts - assert(mesh != NULL); - assert(mesh->name != NULL); - assert(mesh->myport != NULL); - assert(mesh->catta_server != NULL); - assert(mesh->catta_poll != NULL); - assert(mesh->catta_servicetype != NULL); - assert(mesh->self != NULL); + assert(mesh); + assert(mesh->name); + assert(mesh->myport); + assert(mesh->catta_server); + assert(mesh->catta_poll); + assert(mesh->catta_servicetype); + assert(mesh->self); logger(mesh, MESHLINK_DEBUG, "Adding service\n"); @@ -114,16 +114,13 @@ done: free(fingerprint); free(txt_name); free(txt_fingerprint); - - pthread_mutex_unlock(&(mesh->mesh_mutex)); } static void discovery_server_callback(CattaServer *server, CattaServerState state, void *userdata) { (void)server; meshlink_handle_t *mesh = userdata; - // asserts - assert(mesh != NULL); + assert(mesh); switch(state) { case CATTA_SERVER_RUNNING: @@ -142,13 +139,12 @@ static void discovery_server_callback(CattaServer *server, CattaServerState stat case CATTA_SERVER_COLLISION: { /* A host name collision happened. Let's pick a new name for the server */ char hostname[17]; - generate_rand_string(hostname, sizeof(hostname)); + generate_rand_string(mesh, hostname, sizeof(hostname)); pthread_mutex_lock(&(mesh->mesh_mutex)); - // - // asserts - assert(mesh->catta_server != NULL); - assert(mesh->catta_poll != NULL); + + assert(mesh->catta_server); + assert(mesh->catta_poll); int result = catta_server_set_host_name(mesh->catta_server, hostname); @@ -178,9 +174,8 @@ static void discovery_server_callback(CattaServer *server, CattaServerState stat case CATTA_SERVER_FAILURE: pthread_mutex_lock(&(mesh->mesh_mutex)); - // asserts - assert(mesh->catta_server != NULL); - assert(mesh->catta_poll != NULL); + assert(mesh->catta_server); + assert(mesh->catta_poll); /* Terminate on failure */ catta_simple_poll_quit(mesh->catta_poll); @@ -204,6 +199,8 @@ static void discovery_resolve_callback(CattaSServiceResolver *resolver, CattaIfI meshlink_handle_t *mesh = userdata; + assert(mesh); + if(event != CATTA_RESOLVER_FOUND) { catta_s_service_resolver_free(resolver); return; @@ -213,7 +210,7 @@ static void discovery_resolve_callback(CattaSServiceResolver *resolver, CattaIfI CattaStringList *node_name_li = catta_string_list_find(txt, MESHLINK_MDNS_NAME_KEY); CattaStringList *node_fp_li = catta_string_list_find(txt, MESHLINK_MDNS_FINGERPRINT_KEY); - if(node_name_li != NULL && node_fp_li != NULL) { + if(node_name_li && node_fp_li) { char *node_name = (char *)catta_string_list_get_text(node_name_li) + strlen(MESHLINK_MDNS_NAME_KEY); char *node_fp = (char *)catta_string_list_get_text(node_fp_li) + strlen(MESHLINK_MDNS_FINGERPRINT_KEY); @@ -224,7 +221,7 @@ static void discovery_resolve_callback(CattaSServiceResolver *resolver, CattaIfI meshlink_node_t *node = meshlink_get_node(mesh, node_name); - if(node != NULL) { + if(node) { logger(mesh, MESHLINK_INFO, "Node %s is part of the mesh network.\n", node->name); sockaddr_t naddress; @@ -342,7 +339,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); + assert(mesh); // handle catta logs catta_set_log_function(discovery_log_cb); @@ -380,7 +377,7 @@ static void *discovery_loop(void *userdata) { // generate some unique host name (we actually do not care about it) char hostname[17]; - generate_rand_string(hostname, sizeof(hostname)); + generate_rand_string(mesh, hostname, sizeof(hostname)); // Let's set the host name for this server. CattaServerConfig config; @@ -423,7 +420,7 @@ fail: catta_simple_poll_loop(mesh->catta_poll); } - if(mesh->catta_browser != NULL) { + if(mesh->catta_browser) { catta_s_service_browser_free(mesh->catta_browser); mesh->catta_browser = NULL; } @@ -434,17 +431,17 @@ fail: mesh->catta_group = NULL; } - if(mesh->catta_server != NULL) { + if(mesh->catta_server) { catta_server_free(mesh->catta_server); mesh->catta_server = NULL; } - if(mesh->catta_poll != NULL) { + if(mesh->catta_poll) { catta_simple_poll_free(mesh->catta_poll); mesh->catta_poll = NULL; } - if(mesh->catta_servicetype != NULL) { + if(mesh->catta_servicetype) { free(mesh->catta_servicetype); mesh->catta_servicetype = NULL; } @@ -455,13 +452,12 @@ fail: bool discovery_start(meshlink_handle_t *mesh) { logger(mesh, MESHLINK_DEBUG, "discovery_start called\n"); - // asserts - assert(mesh != NULL); - assert(mesh->catta_poll == NULL); - assert(mesh->catta_server == NULL); - assert(mesh->catta_browser == NULL); - assert(mesh->discovery_threadstarted == false); - assert(mesh->catta_servicetype == NULL); + assert(mesh); + assert(!mesh->catta_poll); + assert(!mesh->catta_server); + assert(!mesh->catta_browser); + assert(!mesh->discovery_threadstarted); + assert(!mesh->catta_servicetype); // Start the discovery thread if(pthread_create(&mesh->discovery_thread, NULL, discovery_loop, mesh) != 0) { @@ -482,8 +478,7 @@ bool discovery_start(meshlink_handle_t *mesh) { void discovery_stop(meshlink_handle_t *mesh) { logger(mesh, MESHLINK_DEBUG, "discovery_stop called\n"); - // asserts - assert(mesh != NULL); + assert(mesh); // Shut down if(mesh->catta_poll) {