diff -r 2580314736af -r 2669f8761a99 xdmprotocols/XcapProtocol/XcapUtils/src/XcapEarlyIms.cpp --- a/xdmprotocols/XcapProtocol/XcapUtils/src/XcapEarlyIms.cpp Thu Aug 19 10:19:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,444 +0,0 @@ -/* -* Copyright (c) 2005 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: CXcapEarlyIms -* -*/ - - - - -// INCLUDE FILES -#ifdef _DEBUG - #include - #include - #include -#endif -#include -#include -#include -#include -#include -#include "XcapEarlyIms.h" -#include "XcapUtilsInterface.h" - -// ---------------------------------------------------------- -// CXcapEarlyIms::CXcapEarlyIms -// -// ---------------------------------------------------------- -// -CXcapEarlyIms::CXcapEarlyIms() : CActive( EPriorityNormal ), - iRequestComplete( EFalse ), - iSimType( ESimTypeUnknown ) - - { - } - -// ---------------------------------------------------------- -// CXcapEarlyIms::NewL -// -// ---------------------------------------------------------- -// -EXPORT_C CXcapEarlyIms* CXcapEarlyIms::NewL() - { - CXcapEarlyIms* self = new ( ELeave ) CXcapEarlyIms(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); //self - return self; - } - -// ---------------------------------------------------- -// CXcapEarlyIms::~CXcapEarlyIms -// -// ---------------------------------------------------- -// -CXcapEarlyIms::~CXcapEarlyIms() - { - #ifdef _DEBUG - WriteToLog( _L8( "CXcapEarlyIms::~CXcapEarlyIms()" ) ); - #endif - delete iImpu; - delete iImpi; - delete iAuthData; - delete iRetriever; - iPhone.Close(); - iServer.Close(); - } - -// ---------------------------------------------------------- -// CXcapEarlyIms::ConstructL -// -// ---------------------------------------------------------- -// -void CXcapEarlyIms::ConstructL() - { - #ifdef _DEBUG - DeleteLogFileL(); - WriteToLog( _L8( "CXcapEarlyIms::ConstructL()" ) ); - #endif - #ifndef __FAKE_IMPU__ - TName tsyName; - TInt numPhone = 0; - TBool found = EFalse; - RTelServer::TPhoneInfo phoneInfo; - User::LeaveIfError( iServer.Connect() ); - TBuf tsyModuleName; - ModuleNameL( tsyModuleName ); - User::LeaveIfError( iServer.LoadPhoneModule( tsyModuleName ) ); - User::LeaveIfError( iServer.EnumeratePhones( numPhone ) ); - for( TInt i = 0;!found && i < numPhone;i++ ) - { - User::LeaveIfError( iServer.GetTsyName( i, tsyName ) ); - User::LeaveIfError( iServer.GetPhoneInfo( i, phoneInfo ) ); - if( tsyName.CompareF( tsyModuleName ) == 0 ) - found = ETrue; - } - __ASSERT_ALWAYS( found, User::Leave( KErrNotFound ) ); - User::LeaveIfError( iPhone.Open( iServer, phoneInfo.iName ) ); - SelectSimTypeL(); - #endif - CActiveScheduler::Add( this ); - } - -// ---------------------------------------------------------- -// CXcapEarlyIms::RequestSimDataL -// -// ---------------------------------------------------------- -// -EXPORT_C void CXcapEarlyIms::RequestSimDataL( MXcapEarlyImsObs* aObserver ) - { - #ifdef _DEBUG - WriteToLog( _L8( "CXcapEarlyIms::RequestSimDataL()" ) ); - #endif - #ifdef __FAKE_IMPU__ - iStatus = KRequestPending; - TRequestStatus* status = &iStatus; - User::RequestComplete( status, KErrNone ); - SetActive(); - #else - if( !IsActive() ) - { - TUint32 caps( 0 ); - User::LeaveIfError( iPhone.GetIdentityCaps( caps ) ); - if( !( caps & RMobilePhone::KCapsGetSubscriberId ) ) - User::Leave( KErrNotSupported ); - iPhone.GetSubscriberId( iStatus, iImsi ); - iRequestPhase = TRequestAuth; - iRequestComplete = EFalse; - SetActive(); - } - #endif - iObserver = aObserver; - } - -// ---------------------------------------------------------- -// CXcapEarlyIms::PublicIDL -// -// ---------------------------------------------------------- -// -EXPORT_C TPtrC8 CXcapEarlyIms::PublicIDL() - { - #ifdef _DEBUG - WriteToLog( _L8( "CXcapEarlyIms::PublicIDL()" ) ); - #endif - #ifdef __FAKE_IMPU__ - return KXcapFakeImpu(); - #else - if( iRequestComplete && iRequestPhase == TRequestIdle ) - { - switch( iSimType ) - { - case ESimTypeWcdma: - return iAuthData->iIMPUArray[0]; - case ESimTypeGsm: - return DeriveL(); - default: - return TPtrC8(); - } - } - else return TPtrC8(); - #endif - } - -// ---------------------------------------------------------- -// CXcapEarlyIms::DeriveL -// -// ---------------------------------------------------------- -// -TPtrC8 CXcapEarlyIms::DeriveL() - { - #ifdef _DEBUG - WriteToLog( _L8( "CXcapEarlyIms::DeriveL()" ) ); - #endif - _LIT8( KImsMnc, "ims.mnc" ); - _LIT8( KMcc, ".mcc" ); - _LIT8( K3gppnetwork, ".3gppnetwork.org"); - _LIT8( KAt, "@"); - _LIT8( KSip, "sip:"); - _LIT8( KZero, "0"); - TPtrC networkDesc( iNetworkInfoPckg().iNetworkId ); - TPtrC countryDesc( iNetworkInfoPckg().iCountryCode ); - TInt nwlength = networkDesc.Length() + countryDesc.Length(); - if( networkDesc.Length() == 2 ) - nwlength = nwlength + 1; - //private user identity - TInt impiLength = iImsi.Length() + KAt().Length() + KImsMnc().Length() + - nwlength + KMcc().Length() + K3gppnetwork().Length(); - iImpi = HBufC8::NewL( impiLength ); - TPtr8 impiDesc( iImpi->Des() ); - impiDesc.Append( iImsi ); - impiDesc.Append( KAt ); - impiDesc.Append( KImsMnc ); - if( networkDesc.Length() == 2 ) - impiDesc.Append( KZero ); - impiDesc.Append( networkDesc ); - impiDesc.Append( KMcc ); - impiDesc.Append( countryDesc ); - impiDesc.Append( K3gppnetwork ); - //public user identity - TInt impuLength = KSip().Length() + impiDesc.Length(); - iImpu = HBufC8::NewL( impuLength ); - TPtr8 impuDesc( iImpu->Des() ); - impuDesc.Append( KSip ); - impuDesc.Append( impiDesc ); - #ifdef _DEBUG - WriteToLog( _L8( " IMPI: %S" ), &impiDesc ); - WriteToLog( _L8( " IMPU: %S" ), &impuDesc ); - #endif - return impuDesc; - } - -// ---------------------------------------------------------- -// CXcapEarlyIms::SelectSimTypeL -// -// ---------------------------------------------------------- -// -void CXcapEarlyIms::SelectSimTypeL() - { - #ifdef _DEBUG - WriteToLog( _L8( "CXcapEarlyIms::SelectSimTypeL()" ) ); - #endif - TUint32 caps; - User::LeaveIfError( iPhone.GetIccAccessCaps( caps ) ); - if( caps & RMobilePhone::KCapsSimAccessSupported ) - { - if( caps & RMobilePhone::KCapsUSimAccessSupported ) - { - #ifdef _DEBUG - WriteToLog( _L8( " USIM Card" ) ); - #endif - iSimType = ESimTypeWcdma; - } - else - { - #ifdef _DEBUG - WriteToLog( _L8( " 2G SIM Card" ) ); - #endif - iSimType = ESimTypeGsm; - } - } - else - { - #ifdef _DEBUG - WriteToLog( _L8( " No SIM Card" ) ); - #endif - iSimType = ESimTypeUnknown; - } - } - -// ---------------------------------------------------------- -// CXcapEarlyIms::RunL -// -// ---------------------------------------------------------- -// -void CXcapEarlyIms::RunL() - { - #ifdef _DEBUG - WriteToLog( _L8( "CXcapEarlyIms::RunL()" ) ); - WriteToLog( _L8( " Status: %d" ), iStatus.Int() ); - WriteToLog( _L8( " Request phase: %d" ), iRequestPhase ); - #endif - #ifdef __FAKE_IMPU__ - iObserver->RequestComplete( KErrNone ); - #else - if( iStatus.Int() == KErrNone ) - { - switch( iRequestPhase ) - { - case TRequestIdle: - break; - case TRequestAuth: - { - #ifdef _DEBUG - HBufC8* buf = HBufC8::NewLC( iImsi.Length() ); - TPtr8 desc( buf->Des() ); - desc.Copy( iImsi ); - WriteToLog( _L8( " IMSI retrieved: %S" ), &desc ); - CleanupStack::PopAndDestroy(); //buf - #endif - iPhone.GetHomeNetwork( iStatus, iNetworkInfoPckg ); - iRequestPhase = TRequestNetwork; - SetActive(); - } - break; - case TRequestNetwork: - { - #ifdef _DEBUG - HBufC8* nwid = HBufC8::NewLC( iNetworkInfoPckg().iNetworkId.Length() ); - HBufC8* country = HBufC8::NewLC( iNetworkInfoPckg().iCountryCode.Length() ); - TPtr8 desc1( nwid->Des() ); - TPtr8 desc2( country->Des() ); - desc1.Copy( iNetworkInfoPckg().iNetworkId ); - desc2.Copy( iNetworkInfoPckg().iCountryCode ); - WriteToLog( _L8( " Home network info retrieved" ) ); - WriteToLog( _L8( " Network ID: %S" ), &desc1 ); - WriteToLog( _L8( " Country code: %S" ), &desc2 ); - CleanupStack::PopAndDestroy( 2 ); //country, nwid - #endif - if( iSimType == ESimTypeWcdma ) - { - iAuthData = RMobilePhone::CImsAuthorizationInfoV5::NewL(); - iRetriever = CAsyncRetrieveAuthorizationInfo::NewL( iPhone, *iAuthData ); - iRequestPhase = TRequestUsimAuth; - iRetriever->Start( iStatus ); - SetActive(); - } - else - { - #ifdef _DEBUG - WriteToLog( _L8( " Request complete" ) ); - #endif - iObserver->RequestComplete( KErrNone ); - iRequestPhase = TRequestIdle; - iRequestComplete = ETrue; - } - } - break; - case TRequestUsimAuth: - { - #ifdef _DEBUG - RMobilePhone::TAuthorizationDataSource source( - iAuthData->iAuthenticationDataSource ); - TBuf8<4> sourceDesc( source == RMobilePhone::EFromUSIM - ? _L8( "USIM" ) : _L8( "ISIM" ) ); - WriteToLog( _L8( " USIM auth retrieved" ) ); - WriteToLog( _L8( " IMPI: %S" ), &iAuthData->iIMPI ); - WriteToLog( _L8( " IMPU: %S" ), &iAuthData->iIMPUArray[0] ); - WriteToLog( _L8( " Domain: %S" ), &iAuthData->iHomeNetworkDomainName ); - WriteToLog( _L8( " AuthDataSource: %S" ), &sourceDesc ); - #endif - iObserver->RequestComplete( KErrNone ); - iRequestPhase = TRequestIdle; - iRequestComplete = ETrue; - } - break; - default: - break; - } - } - else iObserver->RequestComplete( iStatus.Int() ); - #endif - } - -// ---------------------------------------------------------- -// CXcapEarlyIms::DoCancel -// -// ---------------------------------------------------------- -// -void CXcapEarlyIms::DoCancel() - { - #ifdef _DEBUG - WriteToLog( _L8( "CXcapEarlyIms::DoCancel() - State: %d" ), iRequestPhase ); - #endif - switch( iRequestPhase ) - { - case TRequestIdle: - break; - case TRequestAuth: - iPhone.CancelAsyncRequest( EMobilePhoneGetSubscriberId ); - break; - case TRequestNetwork: - iPhone.CancelAsyncRequest( EMobilePhoneGetHomeNetwork ); - break; - case TRequestUsimAuth: - delete iRetriever; - iRetriever = NULL; - break; - default: - break; - } - } - -// ---------------------------------------------------------- -// CXcapEarlyIms::ModuleNameL -// -// ---------------------------------------------------------- -// -void CXcapEarlyIms::ModuleNameL( TDes& aModuleName ) const - { - __ASSERT_ALWAYS( aModuleName.MaxSize() >= KCommsDbSvrMaxFieldLength, User::Leave( KErrArgument ) ); - using namespace CommsDat; - CMDBSession* db = CMDBSession::NewLC( KCDLatestVersion ); - CMDBField* field = new ( ELeave ) CMDBField( KCDTIdModemPhoneServicesSMS ); - CleanupStack::PushL( field ); - field->SetRecordId( 1 ); - field->LoadL( *db ); - TUint32 modemId = *field; - CMDBField* tsyField = new ( ELeave ) CMDBField( KCDTIdTsyName ); - CleanupStack::PushL( tsyField ); - tsyField->SetRecordId( modemId ); - tsyField->LoadL( *db ); - aModuleName = *tsyField; - CleanupStack::PopAndDestroy( 3 ); //tsyField, field, db - } - -#ifdef _DEBUG -// ---------------------------------------------------- -// CXcapEarlyIms::WriteToLog -// -// ---------------------------------------------------- -// -void CXcapEarlyIms::WriteToLog( TRefByValue aFmt,... ) - { - VA_LIST list; - VA_START( list, aFmt ); - TBuf8 buf; - buf.FormatList( aFmt, list ); - RFileLogger::Write( KUtilsLogDir, KUtilsLogFile, EFileLoggingModeAppend, buf ); - } - -// ---------------------------------------------------------- -// CXcapEarlyIms::DeleteLogFileL -// -// ---------------------------------------------------------- -// -void CXcapEarlyIms::DeleteLogFileL() - { - RFs session; - TBuf<32> log( _L( "C:\\logs\\XDM\\" ) ); - User::LeaveIfError( session.Connect() ); - CFileMan* manager = CFileMan::NewL( session ); - log.Append( KUtilsLogFile ); - manager->Delete( log ); - session.Close(); - delete manager; - manager = NULL; - } -#endif //_DEBUG - - - - - -// End of File