KIOSlave
kcookiejar.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef KCOOKIEJAR_H
00026 #define KCOOKIEJAR_H
00027
00028 #include <QtCore/QString>
00029 #include <QtCore/QStringList>
00030 #include <QtCore/QHash>
00031
00032 #include <time.h>
00033
00034 class KConfig;
00035 class KCookieJar;
00036 class KHttpCookie;
00037 class KHttpCookieList;
00038
00039 typedef KHttpCookie *KHttpCookiePtr;
00040
00041 enum KCookieAdvice
00042 {
00043 KCookieDunno=0,
00044 KCookieAccept,
00045 KCookieReject,
00046 KCookieAsk
00047 };
00048
00049 class KHttpCookie
00050 {
00051 friend class KCookieJar;
00052 friend class KHttpCookieList;
00053 friend QDebug operator<<(QDebug, const KHttpCookie&);
00054
00055 protected:
00056 QString mHost;
00057 QString mDomain;
00058 QString mPath;
00059 QString mName;
00060 QString mValue;
00061 time_t mExpireDate;
00062 int mProtocolVersion;
00063 bool mSecure;
00064 bool mCrossDomain;
00065 bool mHttpOnly;
00066 bool mExplicitPath;
00067 QList<long> mWindowIds;
00068
00069 QString cookieStr(bool useDOMFormat) const;
00070
00071 public:
00072 explicit KHttpCookie(const QString &_host=QString(),
00073 const QString &_domain=QString(),
00074 const QString &_path=QString(),
00075 const QString &_name=QString(),
00076 const QString &_value=QString(),
00077 time_t _expireDate=0,
00078 int _protocolVersion=0,
00079 bool _secure = false,
00080 bool _httpOnly = false,
00081 bool _explicitPath = false);
00082
00083 QString domain() const { return mDomain; }
00084 QString host() const { return mHost; }
00085 QString path() const { return mPath; }
00086 QString name() const { return mName; }
00087 QString value() const { return mValue; }
00088 QList<long> &windowIds() { return mWindowIds; }
00089 const QList<long> &windowIds() const { return mWindowIds; }
00090 void fixDomain(const QString &domain) { mDomain = domain; }
00091 time_t expireDate() const { return mExpireDate; }
00092 int protocolVersion() const { return mProtocolVersion; }
00093 bool isSecure() const { return mSecure; }
00094 bool isExpired(time_t currentDate) const;
00095 bool isCrossDomain() const { return mCrossDomain; }
00096 bool isHttpOnly() const { return mHttpOnly; }
00097 bool hasExplicitPath() const { return mExplicitPath; }
00098 bool match(const QString &fqdn, const QStringList &domainList, const QString &path) const;
00099 };
00100
00101 QDebug operator<<(QDebug, const KHttpCookie&);
00102
00103 class KHttpCookieList : public QList<KHttpCookie>
00104 {
00105 public:
00106 KHttpCookieList() : QList<KHttpCookie>(), advice( KCookieDunno )
00107 { }
00108 virtual ~KHttpCookieList() { }
00109
00110 KCookieAdvice getAdvice() const { return advice; }
00111 void setAdvice(KCookieAdvice _advice) { advice = _advice; }
00112
00113 private:
00114 KCookieAdvice advice;
00115 };
00116
00117 QDebug operator<<(QDebug, const KHttpCookieList&);
00118
00119 class KCookieJar
00120 {
00121 public:
00127 KCookieJar();
00128
00134 ~KCookieJar();
00135
00139 bool changed() const { return m_cookiesChanged || m_configChanged; }
00140
00144 bool saveCookies(const QString &_filename);
00145
00149 bool loadCookies(const QString &_filename);
00150
00154 void saveConfig(KConfig *_config);
00155
00159 void loadConfig(KConfig *_config, bool reparse = false);
00160
00172 QString findCookies(const QString &_url, bool useDOMFormat, long windowId, KHttpCookieList *pendingCookies=0);
00173
00182 KHttpCookieList makeCookies(const QString &_url, const QByteArray &cookie_headers, long windowId);
00183
00192 KHttpCookieList makeDOMCookies(const QString &_url, const QByteArray &cookie_domstr, long windowId);
00193
00197 void addCookie(KHttpCookie &cookie);
00198
00210 KCookieAdvice cookieAdvice(KHttpCookie& cookie);
00211
00221 KCookieAdvice getDomainAdvice(const QString &_domain);
00222
00233 void setDomainAdvice(const QString &_domain, KCookieAdvice _advice);
00234
00245 void setDomainAdvice(const KHttpCookie& _cookie, KCookieAdvice _advice);
00246
00257 KCookieAdvice getGlobalAdvice() { return m_globalAdvice; }
00258
00269 void setGlobalAdvice(KCookieAdvice _advice);
00270
00277 const QStringList& getDomainList();
00278
00282 KHttpCookieList *getCookieList(const QString & _domain,
00283 const QString& _fqdn );
00284
00292 void eatCookie(KHttpCookieList::iterator cookieIterator);
00293
00297 void eatCookiesForDomain(const QString &domain);
00298
00302 void eatAllCookies();
00303
00308 void eatSessionCookies( long windowId );
00309
00314 void eatSessionCookies( const QString& fqdn, long windowId, bool isFQDN = true );
00315
00319 static bool parseUrl(const QString &_url,
00320 QString &_fqdn,
00321 QString &_path);
00322
00328 void extractDomains(const QString &_fqdn,
00329 QStringList &_domainList) const;
00330
00331 static QString adviceToStr(KCookieAdvice _advice);
00332 static KCookieAdvice strToAdvice(const QString &_str);
00333
00335 int preferredDefaultPolicy() const { return m_preferredPolicy; }
00336
00338 bool showCookieDetails () const { return m_showCookieDetails; }
00339
00343 void setPreferredDefaultPolicy (int value) { m_preferredPolicy = value; }
00344
00349 void setShowCookieDetails (bool value) { m_showCookieDetails = value; }
00350
00351 protected:
00352 void stripDomain(const QString &_fqdn, QString &_domain);
00353 QString stripDomain(const KHttpCookie& cookie);
00354
00355 protected:
00356 QStringList m_domainList;
00357 KCookieAdvice m_globalAdvice;
00358 QHash<QString, KHttpCookieList*> m_cookieDomains;
00359 QHash<QString, int> m_twoLevelTLD;
00360
00361 bool m_configChanged;
00362 bool m_cookiesChanged;
00363 bool m_showCookieDetails;
00364 bool m_rejectCrossDomainCookies;
00365 bool m_autoAcceptSessionCookies;
00366 bool m_ignoreCookieExpirationDate;
00367
00368 int m_preferredPolicy;
00369 };
00370 #endif