--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gba/gbafilter/inc/HTTPFilterGBA.h Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,243 @@
+/*
+* Copyright (c) 2007 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: GBA Filter definitions
+*
+*/
+
+
+#ifndef __HTTPFILTERGBA_H_
+#define __HTTPFILTERGBA_H_
+
+#include <http/mhttpfilter.h>
+#include <http/rhttpsession.h>
+#include <http/cecomfilter.h>
+#include <http/framework/httplogger.h>
+
+#include <gbautility.h>
+
+class RHTTPResponse;
+class RHTTPTransaction;
+class CMD5;
+
+const TInt KMaxTypeLength = 255;
+const TInt KBsfAddressSize = 128;
+
+
+class CHTTPFilterGBA : public CEComFilter, public MHTTPFilter, public MGbaObserver
+{
+ enum
+ {
+ EAlgUnknown,
+ EAlgMd5,
+ EAlgMd5Sess
+ };
+
+ enum
+ {
+ EQopNone,
+ EQopAuth = 1,
+ EQopAuthInt = 2
+ };
+public:
+
+ static CEComFilter* InstallFilterL(TAny* aSession);
+
+ virtual ~CHTTPFilterGBA();
+
+public: // Methods from MHTTPFilterBase
+
+ /// @see MHTTPFilterBase::MHFRunL
+ virtual void MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
+
+ /// @see MHTTPFilterBase::MHFSessionRunL
+ virtual void MHFSessionRunL(const THTTPSessionEvent& aEvent);
+
+ /// @see MHTTPFilterBase::MHFRunError
+ 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
+ virtual void MHFUnload(RHTTPSession aSession, THTTPFilterHandle aHandle);
+
+ /// @see MHTTPFilter::MHFLoad
+ virtual void MHFLoad(RHTTPSession aSession, THTTPFilterHandle aHandle);
+
+ inline void SetProtocolIdentifierL( const TDesC8& aIdentifier){
+ iProtocolIdentifier = aIdentifier;
+ }
+
+ inline void SetGBAFlags(const TUint8 aFlags){
+ iFlags = aFlags;
+ }
+
+ inline void SetGBALabel(const TDesC8& aLabel){
+ iUICCLabel = aLabel ;
+ }
+
+ //Only for testing purpose
+ //To force BSF address for use
+ inline void SetBSFAddress(const TDesC8& aBsfAddress){
+ iBsfAddress = aBsfAddress;
+ };
+
+ private:
+
+ CHTTPFilterGBA();
+
+ ///ContructL also Installs the filter.
+ void ConstructL( RHTTPSession aSession );
+
+#if defined (_DEBUG)
+ void DumpResponseHeadersL( RHTTPResponse& aResponse );
+#endif
+
+ void CheckHeadersL( RHTTPTransaction& aTrans );
+
+ void ProcessBodyPartL( RHTTPTransaction& aTrans );
+
+ void Cleanup( const RHTTPTransaction& aTrans );
+
+ void CleanupAll();
+
+ TInt FindHeaderPartToUseL(RHTTPTransaction aTransaction) const;
+
+ TBool FindAuth(const TDesC8& aQop) const;
+
+ void DoSubmitL( RHTTPTransaction aTransaction );
+
+ void EncodeDigestAuthL( TInt aCred, RHTTPTransaction aTransaction );
+
+ void DAddCredentialsToListL( RString aUsernameStr,
+ RString aPasswordStr,
+ RString aRealmStr,
+ RStringF aUriStr,
+ RString aOpaque,
+ RString aNonce,
+ TInt aQop,
+ TInt aAuthAlg );
+ /**
+ * Calculate H(A1). See section 3.2.2.2
+ */
+ void HAOneL( int aAlgorithm,
+ const RString& aUsername,
+ const RString& aPW,
+ const RString& aRealm,
+ const RString& aNonceValue,
+ TDesC8& aCNonce,
+ TDes8& aResult);
+
+
+ /**
+ * Calculate H(A2). See section 3.2.2.3
+ */
+ void HATwoL(const RStringF& aMethod, const RString& aRequestUri, TDes8& aResult);
+
+ /**
+ * Calculate a hash and in the form of a 32 character hex result.
+ */
+ void Hash(const TDesC8& aMessage, TDes8& aHash);
+
+ /**
+ * Generate a cnonce value
+ */
+ void GenerateCNonce( TDes8& aNonce );
+
+ /**
+ * Returns the requested uri
+ * that can be used in uri field or request header
+ *
+ * @param aTransaction current transaction
+ * @return requested URI
+ */
+ RString RequestUriL( RHTTPTransaction& aTransaction);
+
+ /**
+ * Check and return QoP from the response header.
+ * @param aHeader authentication header
+ * @param aWwwAuthHeader authentication header name
+ * @param aHeaderPart which authentication header field in the response header
+ * @return one of KQopXXX enum. KQopAuth is prefered.
+ */
+ TInt CheckQop( RHTTPHeaders& headers,
+ RStringF& aWwwAuthHeader,
+ TInt aHeaderPart );
+
+ void DGetCredentialsFromPropertiesL( RHTTPTransaction& aTransaction );
+
+ TInt DFindCredentialsForURI( const TUriC8& aURI );
+
+ void DRemoveCredentialsFromList( TInt aCredId );
+
+ TInt DFindCredentials( const RString& aRealm, const TUriC8& aURI );
+
+ //Inherited from MGbaObserver
+ void BootstrapComplete(TInt error);
+
+ class TDCredentials
+ {
+ public:
+ RStringToken iUser; //username
+ RStringToken iPassword; //password
+ RStringTokenF iURI; //uri
+ RStringToken iRealm; //Realm used - there may be multiple for each host
+ RStringToken iOpaque;
+ RStringToken iNonce;
+ TInt iQop;
+ TInt iAlgorithm;
+ TInt iNc; // nonce-count
+ };
+
+ /// A count to make sure we delete at the right time.
+ TInt iLoadCount;
+ RStringPool iStringPool;
+ RStringF iOpaqueStr;
+ RStringF iNonceStr;
+ RStringF iQopStr;
+ RStringF iStaleStr;
+ RStringF iAuthInfo;
+ RStringF iUsernameStr;
+ RStringF iPasswordStr;
+ RStringF iQopAuthStr;
+ RStringF iMd5Str;
+ RStringF iMd5SessStr;
+ RStringF iRealmStr;
+ RStringF iUserAgent;
+ TInt64 iSeed;
+ CMD5* iMD5Calculator;
+ TInt iOffset;
+ TUint8 iFlags;
+ TBuf8<5> iProtocolIdentifier;
+ TInt iBootstrapCount;
+ TBool iBootstrapPending;
+ TBool iHaveGbaBootstrapCredentials;
+ TBool iGBAU;
+ TBuf8<KMaxTypeLength> iUICCLabel;
+ CActiveSchedulerWait iBootstrapWait;
+ CGbaUtility* iGbaUtility;
+ TGBABootstrapInputParams iGbaInputParams;
+ TGBABootstrapOutputParams iGbaOutputParams;
+ //Only for testing purpose
+ TBuf8<KBsfAddressSize> iBsfAddress;
+ // Internal list of valid credentials
+ RArray<TDCredentials> iDCredentials;
+
+};
+
+#endif //__HTTPFILTERGBA_H_
+
+//EOF