Configuration ConfigFile::getConfiguration() { Configuration configuration; char **bind; int i; if (!m_loaded) return DummyConfiguration; // Service section LOAD_REQUIRED_STRING(configuration.jid, "service", "jid"); LOAD_REQUIRED_STRING(configuration.server, "service", "server"); LOAD_REQUIRED_STRING(configuration.password, "service", "password"); if (!loadInteger(configuration.port, "service", "port")) return DummyConfiguration; loadString(configuration.pid_f, "service", "pid_file", "/var/run/spectrum-load-balancer/" + configuration.jid); // Logging section loadString(configuration.logfile, "logging", "log_file", ""); return configuration; }
Configuration ConfigFile::getConfiguration() { Configuration configuration; char **bind; int i; if (!m_loaded) return DummyConfiguration; // Service section LOAD_REQUIRED_STRING(configuration.protocol, "service", "protocol"); std::transform(configuration.protocol.begin(), configuration.protocol.end(), configuration.protocol.begin(), tolower); m_protocol = configuration.protocol; LOAD_REQUIRED_STRING(configuration.jid, "service", "jid"); m_jid = configuration.jid; LOAD_REQUIRED_STRING(configuration.discoName, "service", "name"); LOAD_REQUIRED_STRING(configuration.server, "service", "server"); LOAD_REQUIRED_STRING(configuration.password, "service", "password"); LOAD_REQUIRED_STRING(configuration.filetransferCache, "service", "filetransfer_cache"); LOAD_REQUIRED_STRING_DEFAULT(configuration.config_interface, "service", "config_interface", "/var/run/spectrum/" + configuration.jid + ".sock"); if (!loadInteger(configuration.port, "service", "port")) return DummyConfiguration; loadString(configuration.filetransferWeb, "service", "filetransfer_web", ""); loadString(configuration.pid_f, "service", "pid_file", "/var/run/spectrum/" + configuration.jid); loadString(configuration.language, "service", "language", "en"); loadString(configuration.encoding, "service", "encoding", ""); loadString(configuration.eventloop, "service", "eventloop", "glib"); loadBoolean(configuration.jid_escaping, "service", "jid_escaping", true); loadBoolean(configuration.onlyForVIP, "service", "only_for_vip", false); loadBoolean(configuration.VIPEnabled, "service", "vip_mode", false); loadBoolean(configuration.useProxy, "service", "use_proxy", false); loadBoolean(configuration.require_tls, "service", "require_tls", true); loadStringList(configuration.allowedServers, "service", "allowed_servers"); loadStringList(configuration.admins, "service", "admins"); loadHostPort(configuration.filetransfer_proxy_ip, configuration.filetransfer_proxy_port, "service", "filetransfer_bind_address", "", 0); loadHostPort(configuration.filetransfer_proxy_streamhost_ip, configuration.filetransfer_proxy_streamhost_port, "service", "filetransfer_public_address", configuration.filetransfer_proxy_ip, configuration.filetransfer_proxy_port); if (!loadFeatures(configuration.transportFeatures, "features")) { configuration.transportFeatures = TRANSPORT_FEATURE_ALL; // TODO: transport_features and vip_features are depracted. remove it for 0.4 if(g_key_file_has_key(keyfile,"service","transport_features",NULL)) { bind = g_key_file_get_string_list (keyfile,"service","transport_features",NULL, NULL); configuration.transportFeatures = 0; for (i = 0; bind[i]; i++){ std::string feature(bind[i]); if (feature == "avatars") configuration.transportFeatures = configuration.transportFeatures | TRANSPORT_FEATURE_AVATARS; else if (feature == "chatstate") configuration.transportFeatures = configuration.transportFeatures | TRANSPORT_FEATURE_TYPING_NOTIFY; else if (feature == "filetransfer") configuration.transportFeatures = configuration.transportFeatures | TRANSPORT_FEATURE_FILETRANSFER; } g_strfreev (bind); } else configuration.transportFeatures = TRANSPORT_FEATURE_AVATARS | TRANSPORT_FEATURE_FILETRANSFER | TRANSPORT_FEATURE_TYPING_NOTIFY; } if (!loadFeatures(configuration.VIPFeatures, "vip-features")) { configuration.VIPFeatures = TRANSPORT_FEATURE_ALL; if(g_key_file_has_key(keyfile,"service","vip_features",NULL)) { bind = g_key_file_get_string_list (keyfile,"service","vip_features",NULL, NULL); configuration.VIPFeatures = 0; for (i = 0; bind[i]; i++){ std::string feature(bind[i]); if (feature == "avatars") configuration.VIPFeatures |= TRANSPORT_FEATURE_AVATARS; else if (feature == "chatstate") configuration.VIPFeatures |= TRANSPORT_FEATURE_TYPING_NOTIFY; else if (feature == "filetransfer") configuration.VIPFeatures |= TRANSPORT_FEATURE_FILETRANSFER; } g_strfreev (bind); } else configuration.VIPFeatures = TRANSPORT_FEATURE_AVATARS | TRANSPORT_FEATURE_FILETRANSFER | TRANSPORT_FEATURE_TYPING_NOTIFY; } // Database section LOAD_REQUIRED_STRING(configuration.sqlType, "database", "type"); LOAD_REQUIRED_STRING(configuration.sqlDb, "database", "database"); LOAD_REQUIRED_STRING_DEFAULT(configuration.sqlHost, "database", "host", configuration.sqlType == "sqlite" ? "optional" : ""); LOAD_REQUIRED_STRING_DEFAULT(configuration.sqlPassword, "database", "password", configuration.sqlType == "sqlite" ? "optional" : ""); LOAD_REQUIRED_STRING_DEFAULT(configuration.sqlUser, "database", "user", configuration.sqlType == "sqlite" ? "optional" : ""); LOAD_REQUIRED_STRING_DEFAULT(configuration.sqlPrefix, "database", "prefix", configuration.sqlType == "sqlite" ? "" : "required"); loadString(configuration.sqlVIP, "database", "vip_statement", ""); LOAD_REQUIRED_STRING(configuration.userDir, "purple", "userdir"); // Logging section loadString(configuration.logfile, "logging", "log_file", ""); if (g_key_file_has_key(keyfile, "logging", "log_areas", NULL)) { bind = g_key_file_get_string_list(keyfile, "logging", "log_areas", NULL, NULL); configuration.logAreas = 0; for (i = 0; bind[i]; i++) { std::string feature(bind[i]); if (feature == "xml") { configuration.logAreas = configuration.logAreas | LOG_AREA_XML; } else if (feature == "purple") configuration.logAreas = configuration.logAreas | LOG_AREA_PURPLE; } g_strfreev (bind); } else configuration.logAreas = LOG_AREA_XML | LOG_AREA_PURPLE; // Registration section loadBoolean(configuration.enable_public_registration, "registration", "enable_public_registration", true); loadString(configuration.username_mask, "registration", "username_mask", ""); loadString(configuration.reg_instructions, "registration", "instructions", ""); loadString(configuration.reg_username_field, "registration", "username_label", ""); loadString(configuration.reg_allowed_usernames, "registration", "allowed_usernames", ""); if (configuration.sqlType == "sqlite") create_dir(configuration.sqlDb, 0750); create_dir(configuration.filetransferCache, 0750); create_dir(configuration.config_interface, 0750); create_dir(configuration.pid_f, 0750); create_dir(configuration.userDir, 0750); create_dir(configuration.logfile, 0750); return configuration; }