21 #include <tqptrlist.h>
22 #include <tqtextcodec.h>
25 #include <tdeconfig.h>
26 #include <tdeglobal.h>
27 #include <tdelocale.h>
28 #include <kcharsets.h>
29 #include <dcopclient.h>
30 #include <tdeprotocolmanager.h>
31 #include <kstandarddirs.h>
33 #include <tdesu/client.h>
34 #include <tdeio/slaveconfig.h>
35 #include <tdeio/http_slave_defaults.h>
37 #include "sessiondata.h"
38 #include "sessiondata.moc"
43 struct SessionData::AuthData
49 AuthData(
const TQCString& k,
const TQCString& g,
bool p) {
55 bool isKeyMatch(
const TQCString& val )
const {
59 bool isGroupMatch(
const TQCString& val )
const {
69 class SessionData::AuthDataList :
public TQPtrList<SessionData::AuthData>
75 void addData( SessionData::AuthData* );
76 void removeData(
const TQCString& );
78 bool pingCacheDaemon();
79 void registerAuthData( SessionData::AuthData* );
80 void unregisterAuthData( SessionData::AuthData* );
81 void purgeCachedData();
85 TDEsuClient * m_tdesuClient;
89 SessionData::AuthDataList::AuthDataList()
92 m_tdesuClient =
new TDEsuClient;
97 SessionData::AuthDataList::~AuthDataList()
101 delete m_tdesuClient;
106 void SessionData::AuthDataList::addData( SessionData::AuthData* d )
108 TQPtrListIterator<SessionData::AuthData> it ( *
this );
109 for ( ; it.current(); ++it )
111 if ( it.current()->isKeyMatch( d->key ) )
114 registerAuthData( d );
118 void SessionData::AuthDataList::removeData(
const TQCString& gkey )
120 TQPtrListIterator<SessionData::AuthData> it( *
this );
121 for( ; it.current(); ++it )
123 if ( it.current()->isGroupMatch(gkey) && pingCacheDaemon() )
125 unregisterAuthData( it.current() );
126 remove( it.current() );
131 bool SessionData::AuthDataList::pingCacheDaemon()
134 Q_ASSERT(m_tdesuClient);
136 int success = m_tdesuClient->ping();
139 success = m_tdesuClient->startServer();
149 void SessionData::AuthDataList::registerAuthData( SessionData::AuthData* d )
151 if( !pingCacheDaemon() )
156 TQCString ref_key = d->key +
"-refcount";
157 int count = m_tdesuClient->getVar(ref_key).toInt( &ok );
161 val.setNum( count+1 );
162 m_tdesuClient->setVar( ref_key, val, 0, d->group );
165 m_tdesuClient->setVar( ref_key,
"1", 0, d->group );
169 void SessionData::AuthDataList::unregisterAuthData( SessionData::AuthData* d )
171 if ( !d || d->persist )
176 TQCString ref_key = d->key +
"-refcount";
179 count = m_tdesuClient->getVar( ref_key ).toInt( &ok );
186 m_tdesuClient->setVar( ref_key, val, 0, d->group );
190 m_tdesuClient->delVars(d->key);
196 void SessionData::AuthDataList::purgeCachedData()
198 if ( !isEmpty() && pingCacheDaemon() )
200 TQPtrListIterator<SessionData::AuthData> it( *
this );
201 for ( ; it.current(); ++it )
202 unregisterAuthData( it.current() );
208 class SessionData::SessionDataPrivate
211 SessionDataPrivate() {
222 SessionData::SessionData()
225 d =
new SessionDataPrivate;
228 SessionData::~SessionData()
236 void SessionData::configDataFor( MetaData &configData,
const TQString &proto,
239 if ( (proto.find(
"http", 0,
false) == 0 ) ||
240 (proto.find(
"webdav", 0,
false) == 0) )
248 if ( configData[
"Cookies"].isEmpty() )
249 configData[
"Cookies"] = d->useCookie ?
"true" :
"false";
250 if ( configData[
"Languages"].isEmpty() )
251 configData[
"Languages"] = d->language;
252 if ( configData[
"Charsets"].isEmpty() )
253 configData[
"Charsets"] = d->charsets;
254 if ( configData[
"CacheDir"].isEmpty() )
255 configData[
"CacheDir"] = TDEGlobal::dirs()->saveLocation(
"cache",
"http");
256 if ( configData[
"UserAgent"].isEmpty() )
263 void SessionData::reset()
267 TDEConfig* cfg =
new TDEConfig(
"kcookiejarrc",
true,
false);
268 cfg->setGroup(
"Cookie Policy" );
269 d->useCookie = cfg->readBoolEntry(
"Cookies",
true );
272 static const TQString & english = TDEGlobal::staticQString(
"en" );
275 TQStringList languageList = TDEGlobal::locale()->languagesTwoAlpha();
276 TQStringList::Iterator it = languageList.find( TQString::fromLatin1(
"C") );
277 if ( it != languageList.end() )
279 if ( languageList.contains( english ) > 0 )
280 languageList.remove( it );
284 if ( !languageList.contains( english ) )
285 languageList.append( english );
287 d->language = languageList.join(
", " );
289 d->charsets = TQString::fromLatin1(TQTextCodec::codecForLocale()->mimeName()).lower();
293 void SessionData::slotAuthData(
const TQCString& key,
const TQCString& gkey,
297 authData =
new AuthDataList;
298 authData->addData(
new SessionData::AuthData(key, gkey, keep) );
301 void SessionData::slotDelAuthData(
const TQCString& gkey )
305 authData->removeData( gkey );
308 void SessionData::virtual_hook(
int,
void* )
static TQString defaultUserAgent()
Returns the default user-agent string.
static void reparseConfiguration()
Force a reload of the general config file of io-slaves ( tdeioslaverc).
A namespace for TDEIO globals.