28 #include <kstaticdeleter.h>
29 #include <kprotocolinfo.h>
30 #include <kprotocolmanager.h>
32 #include "slaveconfig.h"
38 class SlaveConfigProtocol
41 SlaveConfigProtocol() { host.setAutoDelete(
true); }
42 ~SlaveConfigProtocol()
49 TQDict<MetaData> host;
53 static void readConfig(KConfig *config,
const TQString & group,
MetaData *metaData)
55 *metaData += config->entryMap(group);
58 class SlaveConfigPrivate
61 void readGlobalConfig();
62 SlaveConfigProtocol *readProtocolConfig(
const TQString &_protocol);
63 SlaveConfigProtocol *findProtocolConfig(
const TQString &_protocol);
64 void readConfigProtocolHost(
const TQString &_protocol, SlaveConfigProtocol *scp,
const TQString &host);
67 TQDict<SlaveConfigProtocol> protocol;
70 void SlaveConfigPrivate::readGlobalConfig()
74 KConfig *config = KProtocolManager::config();
75 readConfig(KGlobal::config(),
"Socks", &global);
77 readConfig(config,
"<default>", &global);
80 SlaveConfigProtocol* SlaveConfigPrivate::readProtocolConfig(
const TQString &_protocol)
82 SlaveConfigProtocol *scp = protocol.find(_protocol);
86 scp =
new SlaveConfigProtocol;
87 scp->configFile =
new KConfig(filename,
true,
false);
88 protocol.insert(_protocol, scp);
91 readConfig(scp->configFile,
"<default>", &(scp->global));
95 SlaveConfigProtocol* SlaveConfigPrivate::findProtocolConfig(
const TQString &_protocol)
97 SlaveConfigProtocol *scp = protocol.find(_protocol);
99 scp = readProtocolConfig(_protocol);
103 void SlaveConfigPrivate::readConfigProtocolHost(
const TQString &, SlaveConfigProtocol *scp,
const TQString &host)
106 scp->host.replace(host, metaData);
110 TQString domain = host;
112 if (!domain.contains(
'.'))
115 if (scp->configFile->hasGroup(
"<local>"))
116 readConfig(scp->configFile,
"<local>", metaData);
122 pos = host.findRev(
'.', pos-1);
127 domain = host.mid(pos+1);
129 if (scp->configFile->hasGroup(domain))
130 readConfig(scp->configFile, domain.lower(), metaData);
137 static KStaticDeleter<SlaveConfig> slaveconfigsd;
142 _self = slaveconfigsd.setObject(_self,
new SlaveConfig);
146 SlaveConfig::SlaveConfig()
148 d =
new SlaveConfigPrivate;
149 d->protocol.setAutoDelete(
true);
150 d->readGlobalConfig();
153 SlaveConfig::~SlaveConfig()
160 const TQString &host,
162 const TQString &value )
165 config.insert(key, value);
171 if (protocol.isEmpty())
174 SlaveConfigProtocol *scp = d->findProtocolConfig(protocol);
177 scp->global += config;
181 MetaData *hostConfig = scp->host.find(host);
184 d->readConfigProtocolHost(protocol, scp, host);
185 hostConfig = scp->host.find(host);
188 *hostConfig += config;
193 MetaData SlaveConfig::configData(
const TQString &protocol,
const TQString &host)
196 SlaveConfigProtocol *scp = d->findProtocolConfig(protocol);
197 config += scp->global;
200 MetaData *hostConfig = scp->host.find(host);
203 d->readConfigProtocolHost(protocol, scp, host);
205 hostConfig = scp->host.find(host);
208 config += *hostConfig;
220 d->readGlobalConfig();
225 #include "slaveconfig.moc"
void reset()
Undo any changes made by calls to setConfigData.
static TQString config(const TQString &protocol)
Returns the name of the config file associated with the specified protocol.
void configNeeded(const TQString &protocol, const TQString &host)
This signal is raised when a slave of type protocol deals with host for the first time...
MetaData configData(const TQString &protocol, const TQString &host)
Query slave configuration for slaves of type protocol when dealing with host.
void setConfigData(const TQString &protocol, const TQString &host, const TQString &key, const TQString &value)
Configure slaves of type protocol by setting key to value.