Example #1
0
bool ConfigFile::loadFeatures(int &features, const std::string &section) {
	if (!g_key_file_has_group(keyfile, section.c_str()))
		return false;
	char **keys = g_key_file_get_keys(keyfile, section.c_str(), NULL, NULL);
	bool val;
	int feature;
	features = TRANSPORT_FEATURE_ALL;
	for (int i = 0; keys[i]; i++) {
		std::string key(keys[i]);
		loadBoolean(val, section, key);

		if (key == "chatstate")
			feature = TRANSPORT_FEATURE_TYPING_NOTIFY;
		else if (key == "avatars")
			feature = TRANSPORT_FEATURE_AVATARS;
		else if (key == "filetransfer")
			feature = TRANSPORT_FEATURE_FILETRANSFER;
		else if (key == "statistics")
			feature = TRANSPORT_FEATURE_STATISTICS;
		else
			continue;
		if (val)
			features = features | feature;
		else
			features = features & (~feature);
	}
	g_strfreev(keys);
	return true;
}
Example #2
0
void ConfigFile::loadPurpleAccountSettings(Configuration &configuration) {
	if (!m_loaded)
		return;
	if (!g_key_file_has_group(keyfile, "purple"))
		return;

	PurplePlugin *plugin = purple_find_prpl(Transport::instance()->protocol()->protocol().c_str());
	PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin);
	for (GList *l = prpl_info->protocol_options; l != NULL; l = l->next) {
		PurpleAccountOption *option = (PurpleAccountOption *) l->data;
		PurpleAccountSettingValue v;
		v.type = purple_account_option_get_type(option);
		std::string key(purple_account_option_get_setting(option));

		switch (v.type) {
			case PURPLE_PREF_BOOLEAN:
				if (g_key_file_has_key(keyfile, "purple", key.c_str(), NULL)) {
					loadBoolean(v.b, "purple", key);
					configuration.purple_account_settings[key] = v;
				}
// 				else
// 					v.b = purple_account_option_get_default_bool(option);
				break;

			case PURPLE_PREF_INT:
				if (g_key_file_has_key(keyfile, "purple", key.c_str(), NULL)) {
					loadInteger(v.i, "purple", key);
					configuration.purple_account_settings[key] = v;
				}
// 				else
// 					v.i = purple_account_option_get_default_int(option);
				break;

			case PURPLE_PREF_STRING:
				if (g_key_file_has_key(keyfile, "purple", key.c_str(), NULL)) {
					std::string str;
					loadString(str, "purple", key);
					v.str = g_strdup(str.c_str());
					configuration.purple_account_settings[key] = v;
				}
// 				else {
// 					const char *str = purple_account_option_get_default_string(option);
// 					v.str = str ? g_strdup(str) : NULL;
// 				}
				break;

			case PURPLE_PREF_STRING_LIST:
				if (g_key_file_has_key(keyfile, "purple", key.c_str(), NULL)) {
					loadStringList(v.strlist, "purple", key);
					configuration.purple_account_settings[key] = v;
				}
				break;

			default:
				continue;
		}
	}
}
Example #3
0
void			StaticShader::loadFakeLightingVariable(bool useFake)
{
	loadBoolean(_locationUseFakeLighting, useFake);
}
Example #4
0
void StaticShader::loadUseFakeLighting(bool useFakeLigting) {
    loadBoolean(this->useFakeLighting, useFakeLigting);
}
Example #5
0
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;
}