#include <fcntl.h>
#include "genint1.h"
-#include "../head/comm.h"
+#include "comm.h"
#include "socu.h"
#include <netinet/in.h>
+#include <libconfig.h>
+
#define GPATH "loggr"
#define IPATH "logi"
#define NPATH "logn"
bool info_messages;
- void LoadConfig();
+ void LoadConfig(char *);
void RunGraphModule(char*);
void RunNetModule();
InterpEntry *findINTbySocket(int);
freeINTid = 1;
ActiveConnections = 0;
strcpy(LockPasswd,"");
- LoadConfig();
+ LoadConfig("vlp.cfg");
RunNetModule();
Net_Notify = new QSocketNotifier(net_sock,QSocketNotifier::Read,this);
/* ########### 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);
}
/* +++++++++++++++++++++++++++++++++++++++++++++++ */
void QKernel::SetOptions()
{
QDialog dlg(this,"Options",TRUE);
- QFile *vlp_file;
ConnectEntry *e;
- char line[256];
unsigned int i;
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;i<connections->count();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;i<connections->count();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);
};
}