diff -r 000000000000 -r b16258d2340f applayerpluginsandutils/httpprotocolplugins/filters/Authentication.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerpluginsandutils/httpprotocolplugins/filters/Authentication.h Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,179 @@ +// 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 __AUTHENTICATION_H__ +#define __AUTHENTICATION_H__ + + +/** Authentication Filter provides a response the http server challenge + WWW-Authenticate: challenge realm. + + challenge currently supported is: "basic" +*/ + +// System includes +#include +#include +#include "timerlogger.h" + +// Forward declarations +class MHTTPAuthenticationCallback; +class CMD5; + +//##ModelId=3A3A17590238 +class CAuthenticationFilter : public CAuthenticationFilterInterface, public MHTTPFilter + { +public: + static CAuthenticationFilterInterface* InstallFilterL(TAny* aAuthenticationParams); + // Destructor + //##ModelId=3B1E68290061 + ~CAuthenticationFilter(); + +public: // Methods from MHTTPFilterBase + + // @see MHTTPFilterBase::MHFRunL + //##ModelId=3B1E682801E6 + virtual void MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent); + + // @see MHTTPFilterBase::MHFSessionRunL + virtual void MHFSessionRunL(const THTTPSessionEvent& aEvent); + + // @see MHTTPFilterBase::MHFRunError + //##ModelId=3B1E682702AD + virtual TInt MHFRunError(TInt aError, RHTTPTransaction aTransaction, + const THTTPEvent& aEvent); + + // @see MHTTPFilterBase::MHFSessionRunError + virtual TInt MHFSessionRunError(TInt aError, const THTTPSessionEvent& aEvent); + +public: // Methods from MHTTPFilter + + // @see MHTTPFilter::MHFUnload + //##ModelId=3B1E68270072 + virtual void MHFUnload(RHTTPSession aSession, THTTPFilterHandle aHandle); + + // @see MHTTPFilter::MHFLoad + //##ModelId=3B1E68260229 + virtual void MHFLoad(RHTTPSession aSession, THTTPFilterHandle aHandle); + + private: + // Constructor + //##ModelId=3B1E68260107 + CAuthenticationFilter(MHTTPAuthenticationCallback* aCallback); + // For 2 phase construction. Also installs the filter. + //##ModelId=3B1E682503D6 + void ConstructL(RHTTPSession aSession); + + // Function to handle Submit events. We need to remove any + // username and password from the URI. + //##ModelId=3B1E6825006F + void SubmitL(RHTTPTransaction aTransaction); + + // Provides a central point for all Tranaction handling + //##ModelId=3B1E6824033F + void HandleTransactionL(RHTTPTransaction aTransaction); + + // Search list for matching credentials + //##ModelId=3B1E68240186 + TInt FindCredentials(const RString& aRealm, TInt aAuthType, + const TUriC8& aURI) const; + + // Searches list for credentials that can be used with this URI + // without knowing the realm. + //##ModelId=3BA6004600A7 + TInt FindCredentialsForURI(const TUriC8& aURI) const; + + // Finds the header part with the stringest authentication that + // we support. + //##ModelId=3BA600460007 + TInt FindHeaderPartToUseL(RHTTPTransaction aTransaction) const; + + // Set Basic Auth + //##ModelId=3B1E6823030B + void EncodeBasicAuthL(const RString& aUsername,const RString& aPW, + RHTTPTransaction& aTransaction); + + // Set Digest Auth + //##ModelId=3B1E682300BC + void EncodeDigestAuthL(const RString& aUsername,const RString& aPW, + RHTTPTransaction& aTransaction, TInt headerPart, + const THTTPHdrVal& aRequestUri); + + /**Digest helper functions + See RFC2617 for details of what these mean */ + //@{ + // Calculate H(A1). See section 3.2.2.2 + //##ModelId=3BA600450237 + TInt HA1L(const RString& aUsername,const RString& aPW, + const RString& aRealm, TDes8& aResult); + + + // Calculate H(A2). See section 3.2.2.3 + //##ModelId=3BA600450178 + TInt HA2L(const RStringF& aMethod, const RString& aRequestUri, TDes8& aResult); + + // Calculate a hash and in the form of a 32 character hex result. + //##ModelId=3BA6004500C4 + void Hash(const TDesC8& aMessage, TDes8& aHash); + + //##ModelId=3BA600450056 + void GenerateCNonce(TDes8& aNonce); + + //##ModelId=3BA6004403A8 + TBool FindAuth(const TDesC8& aQop) const; + //@} + + __DECLARE_PERFORMANCE_LOG + // Container for holding an internal storage of credentials + class TCredentials + { + public: + RStringToken iRealm; //< Realm used - there may be multiple for each host + RStringToken iUser; //< username + RStringToken iPassword; //< password + RStringTokenF iURI; //< uri + TInt iAuthType; //< basic or digest or ?? + TInt iID; //< to associate credentials with transactions + }; + + // callback for getting username/pw from external source + //##ModelId=3B1E6823008A + MHTTPAuthenticationCallback* iCallback; + // internal list of valid credentials + //##ModelId=3B1E6823004E + RArray iCredentials; + // local copy + //##ModelId=3B1E68230012 + RStringPool iStringPool; + + // A reference count to make sure we delete at the right time. + //##ModelId=3B1E682203D4 + TInt iLoadCount; + + // The next free credential ID + //##ModelId=3BA600440394 + TInt iNextID; + + // The digest calculator + //##ModelId=3BA600440380 + CMD5* iMD5Calculator; + + // A seed for random numbers, used for client nonces. + //##ModelId=3BA600440362 + TInt64 iSeed; + }; + + +#endif //__AUTHENTICATION_H_