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 <tqstring.h>
00029 #include <tqstringlist.h>
00030 #include <tqdict.h>
00031 #include <tqptrlist.h>
00032 #include <time.h>
00033
00034 class TDEConfig;
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
00054 protected:
00055 TQString mHost;
00056 TQString mDomain;
00057 TQString mPath;
00058 TQString mName;
00059 TQString mValue;
00060 time_t mExpireDate;
00061 int mProtocolVersion;
00062 bool mSecure;
00063 bool mCrossDomain;
00064 bool mHttpOnly;
00065 bool mExplicitPath;
00066 TQValueList<long> mWindowIds;
00067
00068 TQString cookieStr(bool useDOMFormat);
00069
00070 public:
00071 KHttpCookie(const TQString &_host=TQString::null,
00072 const TQString &_domain=TQString::null,
00073 const TQString &_path=TQString::null,
00074 const TQString &_name=TQString::null,
00075 const TQString &_value=TQString::null,
00076 time_t _expireDate=0,
00077 int _protocolVersion=0,
00078 bool _secure = false,
00079 bool _httpOnly = false,
00080 bool _explicitPath = false);
00081
00082 TQString domain(void) { return mDomain; }
00083 TQString host(void) { return mHost; }
00084 TQString path(void) { return mPath; }
00085 TQString name(void) { return mName; }
00086 TQString value(void) { return mValue; }
00087 TQValueList<long> &windowIds(void) { return mWindowIds; }
00088 void fixDomain(const TQString &domain) { mDomain = domain; }
00089 time_t expireDate(void) { return mExpireDate; }
00090 int protocolVersion(void) { return mProtocolVersion; }
00091 bool isSecure(void) { return mSecure; }
00092 bool isExpired(time_t currentDate);
00093 bool isCrossDomain(void) { return mCrossDomain; }
00094 bool isHttpOnly(void) { return mHttpOnly; }
00095 bool hasExplicitPath(void) { return mExplicitPath; }
00096 bool match(const TQString &fqdn, const TQStringList &domainList, const TQString &path);
00097 };
00098
00099 class KHttpCookieList : public TQPtrList<KHttpCookie>
00100 {
00101 public:
00102 KHttpCookieList() : TQPtrList<KHttpCookie>(), advice( KCookieDunno )
00103 { }
00104 virtual ~KHttpCookieList() { }
00105
00106 virtual int compareItems( void * item1, void * item2);
00107 KCookieAdvice getAdvice(void) { return advice; }
00108 void setAdvice(KCookieAdvice _advice) { advice = _advice; }
00109
00110 private:
00111 KCookieAdvice advice;
00112 };
00113
00114 class KCookieJar
00115 {
00116 public:
00122 KCookieJar();
00123
00129 ~KCookieJar();
00130
00134 bool changed() const { return m_cookiesChanged || m_configChanged; }
00135
00139 bool saveCookies(const TQString &_filename);
00140
00144 bool loadCookies(const TQString &_filename);
00145
00149 void saveConfig(TDEConfig *_config);
00150
00154 void loadConfig(TDEConfig *_config, bool reparse = false);
00155
00167 TQString findCookies(const TQString &_url, bool useDOMFormat, long windowId, KHttpCookieList *pendingCookies=0);
00168
00177 KHttpCookieList makeCookies(const TQString &_url, const TQCString &cookie_headers, long windowId);
00178
00187 KHttpCookieList makeDOMCookies(const TQString &_url, const TQCString &cookie_domstr, long windowId);
00188
00194 void addCookie(KHttpCookiePtr &cookiePtr);
00195
00205 KCookieAdvice cookieAdvice(KHttpCookiePtr cookiePtr);
00206
00216 KCookieAdvice getDomainAdvice(const TQString &_domain);
00217
00228 void setDomainAdvice(const TQString &_domain, KCookieAdvice _advice);
00229
00240 void setDomainAdvice(KHttpCookiePtr _cookie, KCookieAdvice _advice);
00241
00252 KCookieAdvice getGlobalAdvice() { return m_globalAdvice; }
00253
00264 void setGlobalAdvice(KCookieAdvice _advice);
00265
00272 const TQStringList& getDomainList();
00273
00277 const KHttpCookieList *getCookieList(const TQString & _domain,
00278 const TQString& _fqdn );
00279
00287 void eatCookie(KHttpCookiePtr cookiePtr);
00288
00292 void eatCookiesForDomain(const TQString &domain);
00293
00297 void eatAllCookies();
00298
00303 void eatSessionCookies( long windowId );
00304
00309 void eatSessionCookies( const TQString& fqdn, long windowId, bool isFQDN = true );
00310
00314 static bool parseURL(const TQString &_url,
00315 TQString &_fqdn,
00316 TQString &_path);
00317
00323 void extractDomains(const TQString &_fqdn,
00324 TQStringList &_domainList);
00325
00326 static TQString adviceToStr(KCookieAdvice _advice);
00327 static KCookieAdvice strToAdvice(const TQString &_str);
00328
00330 int preferredDefaultPolicy() const { return m_preferredPolicy; }
00331
00333 bool showCookieDetails () const { return m_showCookieDetails; }
00334
00338 void setPreferredDefaultPolicy (int value) { m_preferredPolicy = value; }
00339
00344 void setShowCookieDetails (bool value) { m_showCookieDetails = value; }
00345
00346 protected:
00347 void stripDomain(const TQString &_fqdn, TQString &_domain);
00348 TQString stripDomain( KHttpCookiePtr cookiePtr);
00349
00350 protected:
00351 TQStringList m_domainList;
00352 KCookieAdvice m_globalAdvice;
00353 TQDict<KHttpCookieList> m_cookieDomains;
00354 TQDict<int> m_twoLevelTLD;
00355
00356 bool m_configChanged;
00357 bool m_cookiesChanged;
00358 bool m_showCookieDetails;
00359 bool m_rejectCrossDomainCookies;
00360 bool m_autoAcceptSessionCookies;
00361 bool m_ignoreCookieExpirationDate;
00362
00363 int m_preferredPolicy;
00364 };
00365 #endif