]> git.meshlink.io Git - meshlink/blobdiff - src/net_setup.c
Check the return value of node_write_config() while handling invitations.
[meshlink] / src / net_setup.c
index e79550327d1ec5bf15cdc79a4f03a4bda6a3f5ad..667d15a381723869df9abdf650adbeb3cdfdce23 100644 (file)
@@ -270,7 +270,13 @@ bool node_write_config(meshlink_handle_t *mesh, node_t *n) {
        }
 
        config_t config = {buf, packmsg_output_size(&out, buf)};
-       return config_write(mesh, "current", n->name, &config, mesh->config_key);
+
+       if(!config_write(mesh, "current", n->name, &config, mesh->config_key)) {
+               call_error_cb(mesh, MESHLINK_ESTORAGE);
+               return false;
+       }
+
+       return true;
 }
 
 static bool load_node(meshlink_handle_t *mesh, const char *name, void *priv) {
@@ -381,6 +387,16 @@ static bool add_listen_address(meshlink_handle_t *mesh, char *address, bool bind
 
                mesh->listen_socket[mesh->listen_sockets].bindto = bindto;
                memcpy(&mesh->listen_socket[mesh->listen_sockets].sa, aip->ai_addr, aip->ai_addrlen);
+               memcpy(&mesh->listen_socket[mesh->listen_sockets].broadcast_sa, aip->ai_addr, aip->ai_addrlen);
+
+               if(aip->ai_family == AF_INET6) {
+                       mesh->listen_socket[mesh->listen_sockets].broadcast_sa.in6.sin6_addr.s6_addr[0x0] = 0xff;
+                       mesh->listen_socket[mesh->listen_sockets].broadcast_sa.in6.sin6_addr.s6_addr[0x1] = 0x02;
+                       mesh->listen_socket[mesh->listen_sockets].broadcast_sa.in6.sin6_addr.s6_addr[0xf] = 0x01;
+               } else {
+                       mesh->listen_socket[mesh->listen_sockets].broadcast_sa.in.sin_addr.s_addr = 0xffffffff;
+               }
+
                mesh->listen_sockets++;
                success = true;
        }