X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=src%2Fkernel%2Fkernel.cpp;h=e747d1e97083c559f5b94b84b3f4a581fa31030e;hb=31d49cd787312431117965de1b91de922a842d22;hp=7ca1ec2de9a4a0d652cf3e81891d554c954b6119;hpb=7a277153cc72eed9f152af09f22e680db3ec6563;p=vlp.git diff --git a/src/kernel/kernel.cpp b/src/kernel/kernel.cpp index 7ca1ec2..e747d1e 100644 --- a/src/kernel/kernel.cpp +++ b/src/kernel/kernel.cpp @@ -66,11 +66,13 @@ #include #include -#include "../head/genint1.h" -#include "../head/comm.h" +#include "genint1.h" +#include "comm.h" #include "socu.h" #include +#include + #define GPATH "loggr" #define IPATH "logi" #define NPATH "logn" @@ -181,7 +183,7 @@ private: bool info_messages; - void LoadConfig(); + void LoadConfig(char *); void RunGraphModule(char*); void RunNetModule(); InterpEntry *findINTbySocket(int); @@ -262,7 +264,7 @@ QKernel::QKernel() freeINTid = 1; ActiveConnections = 0; strcpy(LockPasswd,""); - LoadConfig(); + LoadConfig("vlp.cfg"); RunNetModule(); Net_Notify = new QSocketNotifier(net_sock,QSocketNotifier::Read,this); @@ -289,36 +291,108 @@ void QKernel::n_impl() /* ########### load configuration from file ############# */ -void QKernel::LoadConfig() +void QKernel::LoadConfig(char * fname) { -QFile f("vlp.cfg"); - QString line; - QString val; - int br=0; + config_t cfg; + config_setting_t *setting; + const char *str; + + /* 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); + exit(3); + } + /* File exists, so file has been locked. Release it. */ + + config_init(&cfg); + + /* Read the file. If there is an error, report it and exit. */ + if(!config_read(&cfg, file)) + { + fprintf(stderr, "%s! In file %s, line %d\n", + config_error_text(&cfg), + config_error_file(&cfg), + config_error_line(&cfg)); + config_destroy(&cfg); + fclose(file); + exit(3);/* from original code. */ + } - if (!f.exists()) - { - WriteMessage("Cannot load configuration file!");sleep(2);exit(3); + setting = config_lookup(&cfg, "node_number"); + if(setting) { + NodeNumber = config_setting_get_int(setting); } - f.open(IO_ReadOnly); - br = f.readLine(line,256); - while (br>0) - { - QStringList l = QStringList::split("=",line,FALSE); - QStringList::Iterator it = l.begin(); - line = *it; - ++it; - val = *it; - val = val.stripWhiteSpace(); - if (line == "node_number") {NodeNumber = val.toInt();}; - if (line == "type") {if (val=="explicit") ConType=1; else - ConType = 2; }; - if (line == "host" ) {ConnectList.append(new ConnectEntry((char*)val.ascii()));}; - if (line == "progdir") { strcpy(progdir,val.ascii());}; - if (line == "homedir") { strcpy(HomeDir,val.ascii());}; - br = f.readLine(line,256); - } - f.close(); + else { + fprintf(stderr, "%s! In file %s, '%s' was not found.\n", + "Warning", + fname, + "node_number"); + config_destroy(&cfg); + fclose(file); + exit(3); + } + + setting = config_lookup(&cfg, "type"); + if(setting) { + ConType = (strcmp(config_setting_get_string(setting), "explicit") == 0) ? 1 : 2; + } + else { + fprintf(stderr, "%s! In file %s, '%s' was not found.\n", + "Warning", + fname, + "type"); + } + + setting = config_lookup(&cfg, "host"); + if(setting) { + switch(config_setting_type(setting)) { + case CONFIG_TYPE_STRING:/* TODO: Deprecated. Made for back compatibility. */ + ConnectList.append(new ConnectEntry((char*)config_setting_get_string(setting))); + break; + case CONFIG_TYPE_ARRAY: + for (int i = 0; i < config_setting_length(setting); i++) { + ConnectList.append(new ConnectEntry((char*)config_setting_get_string_elem(setting, i))); + } + break; + default: + fprintf(stderr, "%s! In file %s, bad entry type for %s. Will not be read.\n", + "Error", + fname, + "host"); + } + } + else { + fprintf(stderr, "%s! In file %s, '%s' was not found.\n", + "Warning", + fname, + "host"); + } + + setting = config_lookup(&cfg, "progdir"); + if(setting){ + strncpy(progdir, config_setting_get_string(setting), 256); + } + else { + fprintf(stderr, "%s! In file %s, '%s' was not found.\n", + "Warning", + fname, + "progdir"); + } + + setting = config_lookup(&cfg, "homedir"); + if(setting) { + strncpy(HomeDir, config_setting_get_string(setting), 255); + } + else { + fprintf(stderr, "%s! In file %s, '%s' was not found.\n", + "Warning", + fname, + "homedir"); + } + + config_destroy(&cfg); + fclose(file); } /* +++++++++++++++++++++++++++++++++++++++++++++++ */ @@ -839,9 +913,7 @@ void QKernel::SetMessages() void QKernel::SetOptions() { QDialog dlg(this,"Options",TRUE); - QFile *vlp_file; ConnectEntry *e; - char line[256]; unsigned int i; @@ -929,31 +1001,43 @@ void QKernel::SetOptions() dlg.resize( 400, 310 ); if (dlg.exec()) { - unlink("vlp.cfg"); - vlp_file = new QFile("vlp.cfg"); - vlp_file->open(IO_WriteOnly); - sprintf(line,"progdir=%s\n",progs->text().ascii()); - vlp_file->writeBlock(line,strlen(line)); - strcpy(progdir,progs->text()); - sprintf(line,"node_number=%d\n",atoi(nn->text())); - vlp_file->writeBlock(line,strlen(line)); + + config_t cfg; + config_setting_t *root, *setting; + config_init(&cfg); + + root = config_root_setting(&cfg); + + setting = config_setting_add(root, "progdir", CONFIG_TYPE_STRING); + config_setting_set_string(setting, progs->text().ascii()); + strcpy(progdir,progs->text()); + + setting = config_setting_add(root, "node_number", CONFIG_TYPE_INT); + config_setting_set_int(setting, atoi(nn->text())); + + setting = config_setting_add(root, "homedir", CONFIG_TYPE_STRING); + config_setting_set_string(setting, HomeDir); + + setting = config_setting_add(root, "type", CONFIG_TYPE_STRING); if ( exp->isChecked()) { - sprintf(line,"type=explicit\n"); - vlp_file->writeBlock(line,strlen(line)); - for(i=0;icount();i++) - { - sprintf(line,"host=%s\n",connections->text(i).ascii()); - vlp_file->writeBlock(line,strlen(line)); - } + config_setting_set_string(setting, "explicit"); + + config_setting_t *hosts = NULL; + hosts = config_setting_add(root, "host", CONFIG_TYPE_ARRAY); + for(i=0;icount();i++) { + setting = config_setting_add(hosts, NULL, CONFIG_TYPE_STRING); + config_setting_set_string(setting, connections->text(i).ascii()); + } + } + else { + config_setting_set_string(setting, "register"); + } + if(!config_write_file(&cfg, "vlp.cfg")) { + fprintf(stderr, "Error while writing to file: %s.\n", "vlp.cfg"); } - else - { - sprintf(line,"type=register\n"); - vlp_file->writeBlock(line,strlen(line)); - } - vlp_file->close(); + config_destroy(&cfg); }; }