diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SIP/SIPSec/DigestPlugin/inc/sipsecdigestcontext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SIP/SIPSec/DigestPlugin/inc/sipsecdigestcontext.h Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,393 @@ +/* +* Copyright (c) 2006-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: +* Name : sipsecdigestcontext.h +* Part of : SIPSec/DigestPlugin +* Version : SIP/6.0 +* +*/ + + + + +/** + @internalComponent +*/ + +#ifndef __SIPSEC_DIGESTCONTEXT_H__ +#define __SIPSEC_DIGESTCONTEXT_H__ + +// INCLUDES +#include +#include "sipsecplugincontext.h" +#include "sipsecrequestdata.h" + +// FORWARD DECLARATIONS +class CSIPSecCredentials; +class CSIPSecDigest; +class CSIPAuthHeaderBase; +class CSIPSecRequestData; +class TSIPSecPluginContext; +class TSIPSecPluginCtxResponse; +class TSIPSecPluginCtxVerify; +class CSIPSecUserRecord; + + +/** + * @brief Class is base class for digest context + * + * @class TSIPSecDigestContext sipsecdigestcontext.h "sipsecdigestcontext.h" + * + * Class provides common digest context and plugin context + */ +class TSIPSecDigestContext + { +public: // Constructor and destructor + + /** + * constructor + * @param aCredentials credentials + * @param aParent parent context, if any + */ + TSIPSecDigestContext( CSIPSecCredentials& aCredentials, + TSIPSecPluginContext* aParent = NULL ); + + /** + * Destructor + */ + inline virtual ~TSIPSecDigestContext() + { + } + +public: // Digest related methods + + /** + * returns mechanism + * @return mechanism + */ + CSIPSecDigest& Mechanism() const; + + /** + * returns parent context + * @return parent context + */ + TSIPSecPluginContext& Parent(); + + /** + * returns user data + * @return user data + */ + CSIPSecUserRecord& UserData(); + + /** + * Sets user data + * @return user data + */ + void SetUserData( CSIPSecUserRecord& aUserData ); + +public: // General parameter methods + + /** + * Gets any parameter + * @param aHeader SIP header + * @param aParam Parameter + * @return parameter value + */ + static const TDesC8& GetParam( const CSIPAuthHeaderBase& aHeader, + TInt aParam ); + + /** + * Gets a parameter that is accessed using DesParamValue + * @param aHeader SIP header + * @param aParam Parameter + * @return parameter value + */ + static const TDesC8& GetDesParam( const CSIPAuthHeaderBase& aHeader, + TInt aParam ); + + /** + * Sets any parameter + * @param aHeader SIP header + * @param aParam Parameter + * @param aValue Parameter's value + */ + static void SetParamValueL( CSIPAuthHeaderBase& aHeader, + TInt aParam, + const TDesC8& aValue ); + + /** + * Sets a parameter that is accessed using SetDesParamL. + * @param aHeader SIP header + * @param aParam Parameter + * @param aValue Parameter's value + */ + static void SetDesParamValueL( CSIPAuthHeaderBase& aHeader, + TInt aParam, + const TDesC8& aValue ); + + /** + * Gets any parameter + * @param aParam Parameter + * @return Parameter's value + */ + const TDesC8& GetParam( TInt aParam ) const; + + /** + * Gets a parameter that is accessed using DesParamValue + * @param aParam Parameter + * @return Parameter's value + */ + const TDesC8& GetDesParam( TInt aParam ) const; + + /** + * Sets any parameter + * @param aParam Parameter + * @param aValue Parameter's value + */ + void SetParamValueL( TInt aParam, const TDesC8& aValue ); + + /** + * Sets a parameter that is accessed using SetDesParamL. + * @param aParam Parameter + * @param aValue Parameter's value + */ + void SetDesParamValueL( TInt aParam, const TDesC8& aValue ); + + /** + * Sets a parameter to have empty value in quotes (e.g. response=""). + * @param aParam Parameter + */ + void SetParamWithEmptyValueL( TInt aParam ); + +public: // Credentials parameters + + /** + * Returns nonce + * @return Nonce value + */ + const TDesC8& Nonce() const; + + /** + * Returns nonce count + * @return Nonce count value + */ + const TDesC8& NonceCount() const; + + /** + * Returns cnonce + * @return Cnonce value + */ + const TDesC8& CNonce() const; + + /** + * Returns Request-URI + * @return Request-URI value + */ + virtual const TDesC8& DigestURI() const; + +protected: // Data + + // Credentials + CSIPSecCredentials& iCredentials; + + // Parent context, not owned + TSIPSecPluginContext* iParent; + }; + + + +/** + * @brief Class is for 'setuping' digest + * + * @class TSIPSecDigestCtxSetup sipsecdigestcontext.h "sipsecdigestcontext.h" + * + */ +class TSIPSecDigestCtxSetup : public TSIPSecDigestContext + { +public: // Constructor + + /** + * Constructor + * @param aCredentials Credentials + * @param aTransactionId Transaction id + * @param aParent Parent context, ownership is not transferred + */ + TSIPSecDigestCtxSetup( CSIPSecCredentials& aCredentials, + TTransactionId aTransactionId, + TSIPSecPluginCtxResponse* aParent = NULL ); + +public: // New functions + + /** + * Requests user credentials + * @return ETrue If the credentials for the challenge(s) present in the + * current SIP response, must be asked now. + * EFalse If there is no need to ask the credentials. Maybe they are + * already being asked for due to some earlier SIP response. + */ + TBool RequestUserCredentialsL(); + + /** + * Sets cnonce + * @param aCnonce Cnonce + */ + void SetCNonceL( const TDesC8& aCnonce ); + + /** + * Get transaction id. + * @return Transaction id + */ + TTransactionId TransactionId() const; + +private: // Data + + TTransactionId iTransactionId; + }; + + + + +/** + * @brief Class is for processing digest + * + * @class TSIPSecDigestCtxProcess sipsecdigestcontext.h "sipsecdigestcontext.h" + * + */ +class TSIPSecDigestCtxProcess : public TSIPSecDigestContext + { +public: // Constructor + + /** + * constructor + * @param aCredentials credentials + * @param aParent parent context + */ + TSIPSecDigestCtxProcess( CSIPSecCredentials& aCredentials, + TSIPSecPluginContext* aParent = NULL ); + +public: // Digest related methods + + /** + * Returns request data + * @param aQop QOP value + * @return aRequestData Request data, ownership is transferred + */ + virtual CSIPSecRequestData* RequestDataL( CSIPSecRequestData::TQop aQop ); + + /** + * Sets response parameter + * @param aResponse Response + */ + virtual void SetResponseL( const TDesC8& aResponse ); + + /** + * Returns method + * @return Method + */ + virtual const TDesC8& Method(); + + /** + * Returns SIP message + * @return SIP message + */ + virtual const TDesC8& Message(); + }; + + + + +/** + * @brief Class is for handling digest verify + * + * @class TSIPSecDigestVerifyContext sipsecdigestcontext.h + * "sipsecdigestcontext.h" + */ +class TSIPSecDigestVerifyContext : public TSIPSecDigestCtxProcess + { +public: // Constructor + + /** + * Constructor + * @param aCredentials Credentials + * @param aUri Request-URI + * @param aParent Parent context, ownership is not transferred + */ + TSIPSecDigestVerifyContext( CSIPSecCredentials& aCredentials, + const TDesC8& aUri, + TSIPSecPluginCtxVerify* aParent ); + +public: // From TSIPSecDigestContext + + const TDesC8& DigestURI() const; + +public: // From TSIPSecDigestCtxProcess + + CSIPSecRequestData* RequestDataL( CSIPSecRequestData::TQop aQop ); + + void SetResponseL( const TDesC8& aResponse ); + +public: // New functions + + /** + * Returns SIP combined security server header + * @return SIP combined security server header + */ + HBufC8* SecurityServerHeaderL(); + +public: // Data + + // URI + const TDesC8& iUri; + }; + + + +/** + * @brief Class is for handling authentication info + * + * @class TSIPSecDigestAuthInfoContext sipsecdigestcontext.h + * "sipsecdigestcontext.h" + */ +class TSIPSecDigestAuthInfoContext : public TSIPSecDigestCtxProcess + { + +public:// Constructor + + /** + * Constructor + * @param aCredentials Credentials + * @param aResponse Response place holder + * @param aParent Parent context, ownership is not transferred + */ + TSIPSecDigestAuthInfoContext( CSIPSecCredentials& aCredentials, + TDes8& aResponse, + TSIPSecPluginCtxResponse* aParent ); + +public: // From TSIPSecDigestCtxProcess + + void SetResponseL( const TDesC8& aResponse ); + + const TDesC8& Method(); + + const TDesC8& Message(); + +public: // Data + + // Response + TDes8& iResponse; + }; + +#endif //end of __SIPSEC_DIGESTCONTEXT_H__ + +// End of File