--- /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 <e32std.h>
+#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