]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink.c
Don't allow any unused variables in invitation files.
[meshlink] / src / meshlink.c
index 0bc947a6acae95e4eebf07a2ae6cfdfab288e35a..4ff26ac16f8847fd3b3ad0522b0d274ef78ec4ce 100644 (file)
@@ -56,64 +56,12 @@ meshlink_log_level_t global_log_level;
 //TODO: this can go away completely
 const var_t variables[] = {
        /* Server configuration */
-       {"AddressFamily", VAR_SERVER},
-       {"AutoConnect", VAR_SERVER | VAR_SAFE},
-       {"BindToAddress", VAR_SERVER | VAR_MULTIPLE},
-       {"BindToInterface", VAR_SERVER},
-       {"Broadcast", VAR_SERVER | VAR_SAFE},
        {"ConnectTo", VAR_SERVER | VAR_MULTIPLE | VAR_SAFE},
-       {"DecrementTTL", VAR_SERVER},
-       {"Device", VAR_SERVER},
-       {"DeviceType", VAR_SERVER},
-       {"DirectOnly", VAR_SERVER},
-       {"ECDSAPrivateKeyFile", VAR_SERVER},
-       {"ExperimentalProtocol", VAR_SERVER},
-       {"Forwarding", VAR_SERVER},
-       {"GraphDumpFile", VAR_SERVER | VAR_OBSOLETE},
-       {"Hostnames", VAR_SERVER},
-       {"IffOneQueue", VAR_SERVER},
-       {"Interface", VAR_SERVER},
-       {"KeyExpire", VAR_SERVER},
-       {"ListenAddress", VAR_SERVER | VAR_MULTIPLE},
-       {"LocalDiscovery", VAR_SERVER},
-       {"MACExpire", VAR_SERVER},
-       {"MaxConnectionBurst", VAR_SERVER},
-       {"MaxOutputBufferSize", VAR_SERVER},
-       {"MaxTimeout", VAR_SERVER},
-       {"Mode", VAR_SERVER | VAR_SAFE},
        {"Name", VAR_SERVER},
-       {"PingInterval", VAR_SERVER},
-       {"PingTimeout", VAR_SERVER},
-       {"PriorityInheritance", VAR_SERVER},
-       {"PrivateKey", VAR_SERVER | VAR_OBSOLETE},
-       {"PrivateKeyFile", VAR_SERVER},
-       {"ProcessPriority", VAR_SERVER},
-       {"Proxy", VAR_SERVER},
-       {"ReplayWindow", VAR_SERVER},
-       {"ScriptsExtension", VAR_SERVER},
-       {"ScriptsInterpreter", VAR_SERVER},
-       {"StrictSubnets", VAR_SERVER},
-       {"TunnelServer", VAR_SERVER},
-       {"VDEGroup", VAR_SERVER},
-       {"VDEPort", VAR_SERVER},
        /* Host configuration */
        {"Address", VAR_HOST | VAR_MULTIPLE},
-       {"Cipher", VAR_SERVER | VAR_HOST},
-       {"ClampMSS", VAR_SERVER | VAR_HOST},
-       {"Compression", VAR_SERVER | VAR_HOST},
-       {"Digest", VAR_SERVER | VAR_HOST},
        {"ECDSAPublicKey", VAR_HOST},
-       {"ECDSAPublicKeyFile", VAR_SERVER | VAR_HOST},
-       {"IndirectData", VAR_SERVER | VAR_HOST},
-       {"MACLength", VAR_SERVER | VAR_HOST},
-       {"PMTU", VAR_SERVER | VAR_HOST},
-       {"PMTUDiscovery", VAR_SERVER | VAR_HOST},
        {"Port", VAR_HOST},
-       {"PublicKey", VAR_HOST | VAR_OBSOLETE},
-       {"PublicKeyFile", VAR_SERVER | VAR_HOST | VAR_OBSOLETE},
-       {"Subnet", VAR_HOST | VAR_MULTIPLE | VAR_SAFE},
-       {"TCPOnly", VAR_SERVER | VAR_HOST},
-       {"Weight", VAR_HOST | VAR_SAFE},
        {NULL, 0}
 };
 
@@ -388,7 +336,7 @@ static char *get_my_hostname(meshlink_handle_t *mesh) {
                return NULL;
        }
 
-       if(!strcmp(hostname[0], hostname[1])) {
+       if(hostname[0] && hostname[1] && !strcmp(hostname[0], hostname[1])) {
                free(hostname[1]);
                hostname[1] = NULL;
        }
@@ -619,7 +567,7 @@ static bool finalize_join(meshlink_handle_t *mesh) {
                        continue;
                }
 
-               // Check the list of known variables //TODO: most variables will not be available in meshlink, only name and key will be absolutely necessary
+               // Check the list of known variables
                bool found = false;
                int i;
 
@@ -1211,10 +1159,18 @@ void meshlink_stop(meshlink_handle_t *mesh) {
        event_loop_stop(&mesh->loop);
 
        // Send ourselves a UDP packet to kick the event loop
-       listen_socket_t *s = &mesh->listen_socket[0];
+       for(int i = 0; i < mesh->listen_sockets; i++) {
+               sockaddr_t sa;
+               socklen_t salen = sizeof(sa.sa);
 
-       if(sendto(s->udp.fd, "", 1, MSG_NOSIGNAL, &s->sa.sa, SALEN(s->sa.sa)) == -1) {
-               logger(mesh, MESHLINK_ERROR, "Could not send a UDP packet to ourself");
+               if(getsockname(mesh->listen_socket[i].udp.fd, &sa.sa, &salen) == -1) {
+                       logger(mesh, MESHLINK_ERROR, "System call `%s' failed: %s", "getsockname", sockstrerror(sockerrno));
+                       continue;
+               }
+
+               if(sendto(mesh->listen_socket[i].udp.fd, "", 1, MSG_NOSIGNAL, &sa.sa, salen) == -1) {
+                       logger(mesh, MESHLINK_ERROR, "Could not send a UDP packet to ourself: %s", sockstrerror(sockerrno));
+               }
        }
 
        // Wait for the main thread to finish
@@ -1916,8 +1872,6 @@ char *meshlink_invite(meshlink_handle_t *mesh, const char *name) {
 
        // Fill in the details.
        fprintf(f, "Name = %s\n", name);
-       //if(netname)
-       //      fprintf(f, "NetName = %s\n", netname);
        fprintf(f, "ConnectTo = %s\n", mesh->self->name);
 
        // Copy Broadcast and Mode