--- a/xdmprotocols/XcapProtocol/XcapUtils/src/XcapEarlyIms.cpp Thu Jul 01 14:09:06 2010 +0100
+++ /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 <f32file.h>
- #include <flogger.h>
- #include <e32debug.h>
-#endif
-#include <cdblen.h>
-#include <commsdat.h>
-#include <metadatabase.h>
-#include <commsdattypesv1_1.h>
-#include <mmretrieve.h>
-#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<KCommsDbSvrMaxFieldLength> 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<TUint32>* field = new ( ELeave ) CMDBField<TUint32>( KCDTIdModemPhoneServicesSMS );
- CleanupStack::PushL( field );
- field->SetRecordId( 1 );
- field->LoadL( *db );
- TUint32 modemId = *field;
- CMDBField<TDesC>* tsyField = new ( ELeave ) CMDBField<TDesC>( 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<const TDesC8> aFmt,... )
- {
- VA_LIST list;
- VA_START( list, aFmt );
- TBuf8<KUtilsLogBufMaxSize> 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