--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/httpexamples/cookies/example/examplecookiemanager.h Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,159 @@
+// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __EXAMPLECOOKIEMANAGER_H__
+#define __EXAMPLECOOKIEMANAGER_H__
+
+#include <http/mhttpcookiemanager.h>
+
+/** CExampleCookieManager is an example implementation of a class that provides
+ the MHttpCookieManager interface
+
+ It is meant as an example for cookie support developers and to be used to test
+ the MHttpCookieManager interface and the CCookieFilter
+*/
+class CExampleCookieManager: public CBase, public MHttpCookieManager
+ {
+public:
+ /** Standard CClass construction method
+ @param aStringPool The stringpool to use for the creation of all strings in this manager
+ @return A pointer to a fully constructed CExampleCookieManager
+ */
+ IMPORT_C static CExampleCookieManager* NewL(RStringPool aStringPool);
+
+ /** Standard destructor
+ */
+ IMPORT_C ~CExampleCookieManager();
+
+ /** Store a cookie. This will get called with each cookie that is encountered in a
+ transaction response.
+ @param aCookie The cookie to be stored. Ownership of aCookie is passed to this class.
+ @param aUri The uri that sent this cookie. This is required to complete any
+ missing attributes of the cookie and to ensure the cookie is valid.
+ @leave KErrNoMemory If the cookie could not be appended to the array or if attributes
+ could not be added to the cookie during validation.
+ */
+ IMPORT_C void StoreCookieL(CCookie* aCookie, const TUriC8& aUri);
+
+ /** Get the relevant cookies for a transaction
+ @param aTransaction The transaction containing the request for which cookies are required
+ @param aCookieList An array which will be filled with the cookies for aTransaction.
+ The array should be empty when this function is called. Ownership of
+ the cookies remains with the manager.
+ @param aCookie2Reqd Flag indicating whether a Cookie2 header should be added to the
+ outgoing request headers
+ */
+ IMPORT_C void GetCookiesL(RHTTPTransaction aTransaction, RArray<CCookie*>& aCookieList, TBool& aCookie2Reqd);
+
+ /** Return the number of cookies that the manager currently holds. This function has been added
+ for testing purposes but could be used as part of an API to allow users to view, add, delete
+ cookies etc.
+ @return The number of cookies held by the manager.
+ */
+ TInt CookieCount();
+
+private:
+ /** Standard constructor
+ @param aStringPool The stringpool to use for the creation of all strings in this manager
+ */
+ CExampleCookieManager(RStringPool aStringPool);
+
+ /** Ensure that a cookie is valid for the uri which submitted it. Also, add the
+ domain, path and port attributes to the cookie if they are missing.
+ @param aCookie The cookie to be validated
+ @param aUri The uri which the cookie came from
+ @return ETrue if the cookie is valid, EFalse if not
+ */
+ TBool ValidateCookieL(CCookie& aCookie, const TUriC8& aUri);
+
+ /** Check if the specified cookie should be submitted to the specified uri based
+ on the domain attribute only
+ @param aCookie The cookie to be checked
+ @param aUri The uri which is being requested
+ @return ETrue if the cookie domain attribute matches the uri, EFalse if not
+ */
+ TBool CheckDomainMatch(CCookie& aCookie, const TUriC8& aUri) const;
+
+ /** Check if the specified cookie should be submitted to the specified uri based
+ on the path attribute only
+ @param aCookie The cookie to be checked
+ @param aUri The uri which is being requested
+ @return ETrue if the cookie path attribute matches the uri, EFalse if not
+ */
+ TBool CheckPathMatch(CCookie& aCookie, const TUriC8& aUri) const;
+
+ /** Check if the specified cookie should be submitted to the specified uri based
+ on the port attribute only
+ @param aCookie The cookie to be checked
+ @param aUri The uri which is being requested
+ @return ETrue if the cookie port attribute matches the uri, EFalse if not
+ */
+ TBool CheckPortMatch(CCookie& aCookie, const TUriC8& aUri) const;
+
+ /** Check if the specified cookie should be submitted to the specified uri based
+ on the secure attribute only. If a cookie contains the secure attribute then it
+ should only be submitted to a secure uri (ie one with a scheme of https).
+ @param aCookie The cookie to be checked
+ @param aUri The uri which is being requested
+ @return ETrue if the cookie secure attribute matches the uri, EFalse if not
+ */
+ TBool CheckSecureMatch(CCookie& aCookie, const TUriC8& aUri) const;
+
+ /** Compares two cookies to see which has the most specific path. Used for inserting
+ cookies in order to the array returned from GetCookiesL. A more specific path is one which
+ contains more elements. ie /home/images/holiday is more specific than /home/images.
+ This comparison is achieved by counting the number of /s in the path.
+ The strange parameter type is required because the two parameters must be const
+ references to whatever is contained in the array (in this case CCookie*). To achieve
+ this the format is CCookie* const & aCookie1.
+ @param aCookie1 The first cookie to be compared
+ @param aCookie2 The second cookie to be compared
+ @return Positive if aCookie1 has more /s than aCookie2, 0 if equal, negative
+ if aCookie1 has less /s aCookie2
+ */
+ static TInt CompareCookiePaths(CCookie* const & aCookie1, CCookie* const & aCookie2);
+
+ /** Count the number of path separators (/) in a given descriptor.
+ @param aDes The descriptor to count the separators in
+ @return The number of separators
+ */
+ static TInt CountSeparators(const TDesC8& aDes);
+
+ /** Returns a descriptor which is equivalent to the input descriptor without
+ double quotes surrounding it. If the input descriptor does not have double quotes
+ surrounding it then it is returned as is. This is required because cookie attributes
+ can optionally be surrounded by double quotes.
+ @param aDes The descriptor to remove the quotes from
+ @return Descriptor which points to the part of aDes with no quotes
+ */
+ TPtrC8 RemoveQuotes(const TDesC8& aDes) const;
+
+private:
+ /** Array of cookies for the current session
+ */
+ RPointerArray<CCookie> iCookies;
+
+ /** The stringpool which is used for all strings in the manager
+ */
+ RStringPool iStringPool;
+ };
+
+inline TInt CExampleCookieManager::CookieCount()
+ {
+ return iCookies.Count();
+ }
+
+#endif //__EXAMPLECOOKIEMANAGER_H__
+