realtimenetprots/sipfw/SIP/SIPSec/DigestPlugin/inc/CSIPSecSIMCredentialsProvider.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/SIPSec/DigestPlugin/inc/CSIPSecSIMCredentialsProvider.h Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,398 @@
+/*
+* Copyright (c) 2007-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 : CSIPSecSIMCredentialsProvider.h
+* Part of : SIPSec
+* Version : SIP/6.0
+*
+*/
+
+
+
+
+/**
+ @internalComponent
+*/
+
+#ifndef __SIPSEC_SIMCREDENTIALSPROVIDER_H__
+#define __SIPSEC_SIMCREDENTIALSPROVIDER_H__
+
+// INCLUDES
+#include <etelmm.h>
+#include "CSIPSecUserCredentialsProvider.h"
+
+// FORWARD DECLARATIONS
+class CAsyncRetrieveAuthorizationInfo;
+class CSIPSecSIMRecord;
+
+
+// To run some test cases with the real code, instead of stub, comment the line
+// "#define USE_TEST_STUB" below.
+// Note that with that done, some AKA test cases are not executed, as they
+// crash.
+#if defined( CPPUNIT_TEST )
+#define USE_TEST_STUB
+#endif
+
+#if defined( USE_TEST_STUB )
+
+#include "timermanagerstub.h"
+#define SIPSECSTUB inline
+
+#else
+
+#define SIPSECSTUB
+
+#endif
+
+
+/**
+ * @brief Class is observer of async call-backs from SIM
+ *
+ * @class MSIPSecIMSAuthenticationDataObserver CSIPSecSIMCredentialsProvider.h
+ * "CSIPSecSIMCredentialsProvider.h"
+ */
+class MSIPSecIMSAuthenticationDataObserver
+ {
+public:
+
+ /**
+ * Called when user name is been resolved
+ */
+ virtual void Authorized() = 0;
+
+ /**
+ * Called when authorization failed
+ */
+ virtual void AuthorizationFailedL() = 0;
+
+ /**
+ * Called when authentication finnishes
+ */
+ virtual void AuthenticatedL() = 0;
+
+ /**
+ * Called when authentication fails
+ * @param aReason Error code telling why authentication failed.
+ */
+ virtual void AuthenticationFailedL( TInt aReason ) = 0;
+
+ /**
+ * Inform SIPSec FW that a non-IMS Authentication specific error occurred.
+ * @param aError Error code
+ * @param TBool ETrue if IMS authentication failed
+ * EFalse if IMS Authorization failed
+ * @return TInt Value to return from RunL to active scheduler.
+ */
+ virtual TInt PassErrorToFramework( TInt aError,
+ TBool aAuthenticate) const = 0;
+ };
+
+
+
+/**
+ * @brief Class represent SIM authentication
+ *
+ * @class CSIPSecIMSAuthentication CSIPSecSIMCredentialsProvider.h
+ * "CSIPSecSIMCredentialsProvider.h"
+ */
+class CSIPSecIMSAuthentication : public CActive
+ {
+public: // Constructors and destructor
+ /**
+ * Constructs an object
+ * @param aObserver credetnials provider
+ * @return new instance, ownership is tranferred
+ */
+ static CSIPSecIMSAuthentication* NewL(
+ MSIPSecIMSAuthenticationDataObserver& aObserver );
+
+ /**
+ * Destructor
+ */
+ ~CSIPSecIMSAuthentication();
+
+public: // New functions
+
+ /**
+ * Starts authentication
+ * @param aPhone the mobile phone
+ */
+ SIPSECSTUB void Request( RMobilePhone& aPhone );
+
+ /**
+ * Returns the authenticate data
+ * @return RMobilePhone::TImsAuthenticateDataV5
+ */
+ RMobilePhone::TImsAuthenticateDataV5& Response();
+
+public: // From CActive
+
+ void RunL();
+
+ TInt RunError( TInt aError );
+
+ void DoCancel();
+
+private: // New functions, for internal use
+
+ /**
+ * Constructor
+ * @param aObserver credentials provider
+ */
+ CSIPSecIMSAuthentication(
+ MSIPSecIMSAuthenticationDataObserver& aObserver );
+
+private: // Data
+
+ // Authentication data
+ RMobilePhone::TImsAuthenticateDataV5 iData;
+
+ // Observer
+ MSIPSecIMSAuthenticationDataObserver& iObserver;
+
+ // Points to CSIPSecSIMCredentialsProvider::iPhone. Must be remembered
+ // until the asynchronous request completes, in case the request has to be
+ // canceled. Not owned.
+ RMobilePhone* iPhone;
+
+ // Message which is sent to ETelServer
+ // Having this as member variable helps to extend
+ // its lifetime and help is InterProcess Communication.
+ RMobilePhone::TImsAuthenticateDataV5Pckg iMessage;
+
+private: // For testing purposes
+
+#ifdef CPPUNIT_TEST
+ friend class CSIPSecSIMCredentialsProviderTest;
+#endif
+ };
+
+
+
+/**
+ * @brief Class represent SIM authorization
+ *
+ * @class CSIPSecIMSAuthorization CSIPSecSIMCredentialsProvider.h
+ * "CSIPSecSIMCredentialsProvider.h"
+ */
+class CSIPSecIMSAuthorization : public CActive
+ {
+public: // Constructors and destructor
+
+ /**
+ * Constructs an object
+ * @param aObserver credentials provider
+ * @return new instance, ownership is tranferred
+ */
+ static CSIPSecIMSAuthorization* NewL(
+ MSIPSecIMSAuthenticationDataObserver& aObserver );
+
+ /**
+ * Destructor
+ */
+ ~CSIPSecIMSAuthorization();
+
+public: // New functions
+
+ /**
+ * Starts authorization
+ * @param aPhone the mobile phone
+ */
+ SIPSECSTUB void RequestL( RMobilePhone& aPhone );
+
+ /**
+ * Returns the authorization data
+ * @return RMobilePhone::CImsAuthorizationInfoV5
+ */
+ RMobilePhone::CImsAuthorizationInfoV5& Response();
+
+public: // From CActive
+
+ SIPSECSTUB void RunL();
+
+ TInt RunError( TInt aError );
+
+ void DoCancel();
+
+private: // New functions, for internal use
+
+ /**
+ * Constructor
+ * @param aObserver credentials provider
+ */
+ CSIPSecIMSAuthorization( MSIPSecIMSAuthenticationDataObserver& aObserver );
+
+ /**
+ * 2nd phase constructor
+ */
+ void ConstructL();
+
+private: // Data
+
+ // Auth data, owned.
+ RMobilePhone::CImsAuthorizationInfoV5* iData;
+
+ // Retriever, owned.
+ CAsyncRetrieveAuthorizationInfo* iRetriever;
+
+ MSIPSecIMSAuthenticationDataObserver& iObserver;
+
+ // For testing purposes
+#ifdef CPPUNIT_TEST
+ friend class CSIPSecSIMCredentialsProviderTest;
+#endif
+ };
+
+
+
+
+
+/**
+ * @brief Class represents SIM credentials provider
+ *
+ * @class CSIPSecIMSAuthorization CSIPSecSIMCredentialsProvider.h
+ * "CSIPSecSIMCredentialsProvider.h"
+ */
+class CSIPSecSIMCredentialsProvider :
+ public CSIPSecCredentialsProvider,
+ public MSIPSecIMSAuthenticationDataObserver
+ {
+public: // Constructors and destructor
+
+ /**
+ * Constructor
+ * @param aRecord SIM record
+ * @return New instance, ownership is tranferred
+ */
+ static CSIPSecSIMCredentialsProvider*
+ NewL( CSIPSecSIMRecord& aRecord );
+
+ /**
+ * Destructor
+ */
+ ~CSIPSecSIMCredentialsProvider();
+
+public: // From CSIPSecCredentialsProvider
+
+ void RequestL( TSIPSecDigestCtxSetup& aContext );
+
+ void Cancel();
+
+public: // From MSIPSecIMSAuthenticationDataObserver
+
+ void Authorized();
+
+ void AuthorizationFailedL();
+
+ void AuthenticatedL();
+
+ void AuthenticationFailedL( TInt aReason );
+
+ TInt PassErrorToFramework( TInt aError, TBool aAuthenticate) const;
+
+private: // Constructors, for internal use
+
+ /**
+ * Constructor
+ * @param aRecord SIM record
+ */
+ CSIPSecSIMCredentialsProvider( CSIPSecSIMRecord& aRecord );
+
+ /**
+ * 2nd phase constructor
+ */
+ SIPSECSTUB void ConstructL();
+
+private: // New functions, for internal use
+
+ /**
+ * Obtain the name of the currently selected TSY phone module name.
+ * @param aModuleName Place holder for name
+ */
+ void GetTsyModuleNameL( TDes& aTsyModuleName ) const;
+
+ /**
+ * Load, open and initialize the phone.
+ * @param aModuleName IN: TSY phone module name
+ */
+ void PreparePhoneL( const TDes& aTsyModuleName );
+
+ /**
+ * Requests user name
+ */
+ void RequestUserNameL();
+
+ /**
+ * Requests password
+ */
+ void RequestPassword();
+
+ /**
+ * Common part for the authorization and authentication failures.
+ * @param aUserRecord User record
+ */
+ void Failure( const CSIPSecUserRecord& aUserRecord );
+
+private: // Data
+
+ /**
+ * Etel server
+ */
+ RTelServer iEtelServer;
+
+ /**
+ * Phone instance
+ */
+ RMobilePhone iPhone;
+
+ /**
+ * Authorization, owned
+ */
+ CSIPSecIMSAuthorization* iAuthorization;
+
+ /**
+ * Authentication, owned
+ */
+ CSIPSecIMSAuthentication* iAuthentication;
+
+ /**
+ * Outbound proxy, owned
+ */
+ HBufC8* iOutboundProxy;
+
+private: // For testing purposes
+
+ /**
+ * Write a part of memory to log.
+ * @param aMessage Message to write into the log
+ * @param aData Memory area which is written to log as hex dump.
+ */
+ void HexDumpToLog( const TDesC8& aMessage,
+ const TDesC8& aData ) const;
+
+#ifdef CPPUNIT_TEST
+ friend class CSIPSecProviderTest;
+ friend class CSIPSecSIMCredentialsProviderTest;
+#endif
+ };
+
+
+#if defined( USE_TEST_STUB )
+#include "CSIPSecSIMCredentialsProviderStub.inl"
+#endif
+
+#endif // end of __SIPSEC_SIMCREDENTIALSPROVIDER_H__
+
+// End of File