]> git.meshlink.io Git - meshlink/blobdiff - src/discovery.c
Add network namespace test framework
[meshlink] / src / discovery.c
index d82f48b74d1a798a702484f96e0386eab914eec8..c74c71c2f9874ea51140356b9397246f3ab180d2 100644 (file)
 #define MESHLINK_MDNS_NAME_KEY "name"
 #define MESHLINK_MDNS_FINGERPRINT_KEY "fingerprint"
 
-static void generate_rand_string(charbuffer, size_t size) {
-       for(size_t i = 0; i < (size - 1); ++i)
+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';
+       buffer[size - 1] = '\0';
 }
 
 static void discovery_entry_group_callback(CattaServer *server, CattaSEntryGroup *group, CattaEntryGroupState state, void *userdata) {
+       (void)server;
+       (void)group;
        meshlink_handle_t *mesh = userdata;
 
        // asserts
@@ -104,6 +107,7 @@ static void discovery_create_services(meshlink_handle_t *mesh) {
 
        /* Add the service */
        int ret = 0;
+
        if((ret = catta_server_add_service(mesh->catta_server, mesh->catta_group, CATTA_IF_UNSPEC, CATTA_PROTO_UNSPEC, 0, meshlink_get_fingerprint(mesh, (meshlink_node_t *)mesh->self), mesh->catta_servicetype, NULL, NULL, atoi(mesh->myport), txt_name, txt_fingerprint, NULL)) < 0) {
                logger(mesh, MESHLINK_ERROR, "Failed to add service: %s\n", catta_strerror(ret));
                goto fail;
@@ -121,13 +125,16 @@ fail:
        catta_simple_poll_quit(mesh->catta_poll);
 
 done:
-       if(txt_name)
+
+       if(txt_name) {
                free(txt_name);
+       }
 
        pthread_mutex_unlock(&(mesh->mesh_mutex));
 }
 
-static void discovery_server_callback(CattaServer *server, CattaServerState state, void * userdata) {
+static void discovery_server_callback(CattaServer *server, CattaServerState state, void *userdata) {
+       (void)server;
        meshlink_handle_t *mesh = userdata;
 
        // asserts
@@ -139,8 +146,9 @@ static void discovery_server_callback(CattaServer *server, CattaServerState stat
        case CATTA_SERVER_RUNNING: {
                /* The serve has startup successfully and registered its host
                 * name on the network, so it's time to create our services */
-               if(!mesh->catta_group)
+               if(!mesh->catta_group) {
                        discovery_create_services(mesh);
+               }
        }
        break;
 
@@ -193,6 +201,8 @@ static void discovery_server_callback(CattaServer *server, CattaServerState stat
 }
 
 static void discovery_resolve_callback(CattaSServiceResolver *resolver, CattaIfIndex interface_, CattaProtocol protocol, CattaResolverEvent event, const char *name, const char *type, const char *domain, const char *host_name, const CattaAddress *address, uint16_t port, CattaStringList *txt, CattaLookupResultFlags flags, void *userdata) {
+       (void)interface_;
+       (void)protocol;
        meshlink_handle_t *mesh = userdata;
 
        // asserts
@@ -251,8 +261,8 @@ static void discovery_resolve_callback(CattaSServiceResolver *resolver, CattaIfI
                CattaStringList *node_fp_li = catta_string_list_find(txt, MESHLINK_MDNS_FINGERPRINT_KEY);
 
                if(node_name_li != NULL && node_fp_li != NULL) {
-                       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);
+                       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);
 
                        if(node_name[0] == '=' && node_fp[0] == '=') {
                                node_name += 1;
@@ -286,16 +296,20 @@ static void discovery_resolve_callback(CattaSServiceResolver *resolver, CattaIfI
                                                break;
                                        }
 
-                                       if(naddress.unknown.family != AF_UNKNOWN)
-                                               meshlink_hint_address(mesh, (meshlink_node_t *)node, (struct sockaddr*)&naddress);
-                                       else
+                                       if(naddress.unknown.family != AF_UNKNOWN) {
+                                               meshlink_hint_address(mesh, (meshlink_node_t *)node, (struct sockaddr *)&naddress);
+                                       } else {
                                                logger(mesh, MESHLINK_WARNING, "Could not resolve node %s to a known address family type.\n", node->name);
-                               } else
+                                       }
+                               } else {
                                        logger(mesh, MESHLINK_WARNING, "Node %s is not part of the mesh network.\n", node_name);
-                       } else
+                               }
+                       } else {
                                logger(mesh, MESHLINK_WARNING, "TXT records invalid.\n");
-               } else
+                       }
+               } else {
                        logger(mesh, MESHLINK_WARNING, "TXT records missing.\n");
+               }
        }
        break;
        }
@@ -305,7 +319,9 @@ static void discovery_resolve_callback(CattaSServiceResolver *resolver, CattaIfI
        pthread_mutex_unlock(&(mesh->mesh_mutex));
 }
 
-static void discovery_browse_callback(CattaSServiceBrowser *browser, CattaIfIndex interface_, CattaProtocol protocol, CattaBrowserEvent event, const char *name, const char *type, const char *domain, CattaLookupResultFlags flags, void* userdata) {
+static void discovery_browse_callback(CattaSServiceBrowser *browser, CattaIfIndex interface_, CattaProtocol protocol, CattaBrowserEvent event, const char *name, const char *type, const char *domain, CattaLookupResultFlags flags, void *userdata) {
+       (void)browser;
+       (void)flags;
        meshlink_handle_t *mesh = userdata;
 
        // asserts
@@ -330,12 +346,14 @@ static void discovery_browse_callback(CattaSServiceBrowser *browser, CattaIfInde
                assert(domain != NULL);
 
                logger(mesh, MESHLINK_DEBUG, "(Browser) NEW: service '%s' of type '%s' in domain '%s'\n", name, type, domain);
+
                /* We ignore the returned resolver object. In the callback
                   function we free it. Ifthe server is terminated before
                   the callback function is called the server will free
                   the resolver for us. */
-               if(!(catta_s_service_resolver_new(mesh->catta_server, interface_, protocol, name, type, domain, CATTA_PROTO_UNSPEC, 0, discovery_resolve_callback, mesh)))
+               if(!(catta_s_service_resolver_new(mesh->catta_server, interface_, protocol, name, type, domain, CATTA_PROTO_UNSPEC, 0, discovery_resolve_callback, mesh))) {
                        logger(mesh, MESHLINK_DEBUG, "Failed to resolve service '%s': %s\n", name, catta_strerror(catta_server_errno(mesh->catta_server)));
+               }
        }
        break;
 
@@ -389,6 +407,7 @@ static void discovery_log_cb(CattaLogLevel level, const char *txt) {
                break;
 
        case CATTA_LOG_DEBUG:
+       default:
                mlevel = MESHLINK_DEBUG;
                break;
        }
@@ -472,6 +491,7 @@ bool discovery_start(meshlink_handle_t *mesh) {
        return true;
 
 fail:
+
        if(mesh->catta_browser != NULL) {
                catta_s_service_browser_free(mesh->catta_browser);
                mesh->catta_browser = NULL;
@@ -502,8 +522,9 @@ void discovery_stop(meshlink_handle_t *mesh) {
        assert(mesh != NULL);
 
        // Shut down
-       if(mesh->catta_poll)
+       if(mesh->catta_poll) {
                catta_simple_poll_quit(mesh->catta_poll);
+       }
 
        // Wait for the discovery thread to finish
        if(mesh->discovery_threadstarted == true) {