Removed system function invocations and placed forked execl instead
[vlp.git] / src / net / lognet.cpp
index 4c00e276ad149d01af2146a63ce18e7cbffb00b0..58e481380fc0e502142b6985a60bf1e5bb375e2c 100644 (file)
@@ -20,6 +20,7 @@
 #include <QtCore/qfile.h>
 #include <QtCore/qstring.h>
 #include <QtCore/qstringlist.h>
+#include <QtCore/QDir>
 #include <unistd.h>
 
 #include <libconfig.h>
@@ -95,9 +96,9 @@ public:
        /* List of the Network slots */ 
        QList<NETlink*> Links;
 
-       NETMOD(char*);
+       NETMOD(int argc, char ** argv);
 
-       void load_config(char*);    
+       void load_config(const char*);
        void write_at_console(char*);
        void send_to_kernel(MESSAGE*);
        void sock_reopen(NETlink*);
@@ -129,8 +130,11 @@ public:
        void doitall();
 };
 
-NETMOD::NETMOD(char *kernel_name)
+NETMOD::NETMOD(int argc, char ** argv)
 {
+       QString kernelSocket(argv[1]);
+       QString configFile(argv[2]);
+
        int i;
        int len;
        int on;
@@ -142,32 +146,31 @@ NETMOD::NETMOD(char *kernel_name)
        Links.clear();
        Interpreters.clear();
 
-       bzero(&svr, sizeof(svr)); 
+       bzero(&svr, sizeof(svr));
        listen_sock = socket(AF_INET, SOCK_STREAM, 0);
        svr.sin_family = AF_INET;
        svr.sin_addr.s_addr = INADDR_ANY;
        svr.sin_port = htons(LOGPORT);
        bind(listen_sock, (struct sockaddr*)&svr, sizeof(svr));
        listen(listen_sock,5);
-       fcntl(listen_sock, F_SETFL, O_NONBLOCK | fcntl(listen_sock, F_GETFL, 
-                                                                       0));
+       fcntl(listen_sock, F_SETFL, O_NONBLOCK | fcntl(listen_sock, F_GETFL, 0));
 
        to_connect = 0;
        all_connected = FALSE;
-       load_config("vlp.cfg");
+
+       load_config(configFile.toStdString().c_str());
 
        kernel_sock = socket(AF_UNIX, SOCK_STREAM, 0);
        bzero(&svr1, sizeof(svr1));
        svr1.sun_family = AF_UNIX;
-       strcpy(svr1.sun_path, kernel_name);
-       strcpy(kername, kernel_name);
+       strcpy(svr1.sun_path, kernelSocket.toStdString().c_str());
+       strcpy(kername, kernelSocket.toStdString().c_str());
        len = strlen(svr1.sun_path) + sizeof(svr1.sun_family);
        i = connect(kernel_sock, (struct sockaddr*)&svr1, len);
        if (i == 0)
-       fcntl(kernel_sock, F_SETFL, O_NONBLOCK|fcntl(kernel_sock, F_GETFL, 0));
+               fcntl(kernel_sock, F_SETFL, O_NONBLOCK|fcntl(kernel_sock, F_GETFL, 0));
        on = 1;
-       setsockopt(kernel_sock, IPPROTO_TCP, TCP_NODELAY, (char*)&on,
-                                                               sizeof(on));
+       setsockopt(kernel_sock, IPPROTO_TCP, TCP_NODELAY, (char*)&on, sizeof(on));
        m.msg_type = MSG_NET;
        m.param.pword[0] = NET_NODE;
        m.param.pword[1] = MyNode;
@@ -187,7 +190,7 @@ NETMOD::NETMOD(char *kernel_name)
 
 /*#####################  Load configuration ##########################*/
 
-void NETMOD::load_config(char *fname)
+void NETMOD::load_config(const char *fname)
 {
        config_t cfg;
        config_setting_t *setting;
@@ -200,8 +203,7 @@ void NETMOD::load_config(char *fname)
        /* Hack for checking if file exists without using external libs.*/
        FILE * file = fopen(fname, "rt");
        if (!file) {
-               fprintf(stderr, "Error: Cannot load configuration file %s!\n",
-                                                                       fname);
+               fprintf(stderr, "[Error]/Lognet: Cannot load configuration file %s!\n", fname);
                write_at_console("Cannot load configuration file!");
                fclose(file);
                exit(3);
@@ -246,8 +248,7 @@ void NETMOD::load_config(char *fname)
                        break;
                case CONFIG_TYPE_ARRAY:
                        strncpy(pomlink->addr,
-                               config_setting_get_string_elem(setting, 0),
-                                                                       255);
+                               config_setting_get_string_elem(setting, 0), 255);
                        break;
                default:
                        fprintf(stderr, "%s! In file %s, bad entry type for %s."
@@ -403,7 +404,7 @@ void NETMOD::get_internal()
        int sj;
        fd_set readset;
        fd_set writeset;
-       struct timeval tout={0, 0};
+       struct timeval tout= {0, 0};
        INTlink *pomlink;
        struct sockaddr_un svr;
 
@@ -1226,9 +1227,22 @@ void NETMOD::conn_info(int sk)
        write(sk, &m, sizeof(MESSAGE));
 }
 
+/**
+ * argv0 = program current path
+ * argv1 = socket path
+ * argv2 = config path
+ */
 int main(int argc, char **argv)
 {
-       NETMOD netter(argv[1]);
+       if (argc < 3) {
+               return 1;
+       }
+
+       fprintf(stderr, "lognet: Net module path: %s\n", argv[0]);
+       fprintf(stderr, "lognet: Kernel socket: %s\n", argv[1]);
+       fprintf(stderr, "lognet: Configuration file: %s\n", argv[2]);
+
+       NETMOD netter(argc, argv);
        netter.run();
        return 0;
 }