diff -r 000000000000 -r b16258d2340f applayerprotocols/httpexamples/cookies/example/examplecookiemanager.h --- /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 + +/** 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& 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 iCookies; + + /** The stringpool which is used for all strings in the manager + */ + RStringPool iStringPool; + }; + +inline TInt CExampleCookieManager::CookieCount() + { + return iCookies.Count(); + } + +#endif //__EXAMPLECOOKIEMANAGER_H__ +