Add OS and machine info retrieval via uname
authorfatbob313 <martin@fatbob.nu>
Tue, 19 Jan 2010 17:05:48 +0000 (17:05 +0000)
committerfatbob313 <martin@fatbob.nu>
Tue, 19 Jan 2010 17:05:48 +0000 (17:05 +0000)
src/client.c
src/main.c

index 26daca8cd58df0ae33d87b1f822528018df7cf95..58ffb2514294f3656f5567687a9e4b63fdad70f1 100644 (file)
@@ -42,6 +42,8 @@
 #include "version.h"
 #include "voicetarget.h"
 
+extern char system_string[], version_string[];
+
 static int Client_read(client_t *client);
 static int Client_write(client_t *client);
 static int Client_send_udp(client_t *client, uint8_t *data, int len);
@@ -199,9 +201,8 @@ int Client_add(int fd, struct sockaddr_in *remote)
        sendmsg->payload.version->has_version = true;
        sendmsg->payload.version->version = PROTOCOL_VERSION;
        sendmsg->payload.version->release = strdup(UMURMUR_VERSION);
-       /* XXX - set OS to something relevant? */
-       /* sendmsg->payload.version->os = strdup("Linux/OpenWRT"); */
-               
+       sendmsg->payload.version->os = strdup(system_string);
+       sendmsg->payload.version->os_version = strdup(version_string);
        Client_send_message(newclient, sendmsg);
 
        return 0;
index 6d48f6e4656fd01544a6cb725c612e582237ca23..cce178a1ffe458d90de0efd9fcb64aabc4ce580a 100644 (file)
@@ -34,6 +34,7 @@
 #include <unistd.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/utsname.h>
 #include <fcntl.h>
 #include <signal.h>
 #include <sched.h>
@@ -47,6 +48,8 @@
 #include "conf.h"
 #include "version.h"
 
+char system_string[64], version_string[64];
+
 void lockfile(const char *pidfile)
 {
        int lfp;
@@ -134,6 +137,7 @@ int main(int argc, char **argv)
        bool_t realtime = false;
        char *conffile = NULL, *pidfile = NULL;
        int c;
+       struct utsname utsbuf;
        
        /* Arguments */
        while ((c = getopt(argc, argv, "drp:c:h")) != EOF) {
@@ -180,7 +184,17 @@ int main(int argc, char **argv)
        signal(SIGTTIN, SIG_IGN);
        signal(SIGHUP, signal_handler); /* catch hangup signal */
        signal(SIGTERM, signal_handler); /* catch kill signal */
-
+       
+       /* Build system string */
+       if (uname(&utsbuf) == 0) {
+               snprintf(system_string, 64, "%s %s", utsbuf.sysname, utsbuf.machine);
+               snprintf(version_string, 64, "%s", utsbuf.release);
+       }
+       else {
+               snprintf(system_string, 64, "unknown unknown");
+               snprintf(version_string, 64, "unknown");
+       }
+       
        /* Initializing */
        SSL_init();
        Chan_init();