diff -r 000000000000 -r 307788aac0a8 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 +#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