# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1277125424 -10800 # Node ID 2cdd984ec527866c1c56dfb2aaa88a0adf34ad13 # Parent 822e1f0777220b68bab4c71c9c45f0ebeee0c41f Revision: 201023 Kit: 2010125 diff -r 822e1f077722 -r 2cdd984ec527 realtimenetprots/sipfw/ProfileAgent/ApnManager/inc/sipapnconfigurationhandler.h --- a/realtimenetprots/sipfw/ProfileAgent/ApnManager/inc/sipapnconfigurationhandler.h Wed Jun 09 10:04:26 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/ApnManager/inc/sipapnconfigurationhandler.h Mon Jun 21 16:03:44 2010 +0300 @@ -140,10 +140,8 @@ /** * Reads the APN of specified IAP. - * @param aIapId IAP id - * @return APN or NULL if not found. Ownership is transferred. */ - HBufC8* ReadCurrentApnL(); + void ReadCurrentApnL(); private: // Constructors diff -r 822e1f077722 -r 2cdd984ec527 realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnconfigurationhandler.cpp --- a/realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnconfigurationhandler.cpp Wed Jun 09 10:04:26 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnconfigurationhandler.cpp Mon Jun 21 16:03:44 2010 +0300 @@ -126,7 +126,7 @@ // CSIPApnConfigurationHandler::ReadCurrentApnL // ----------------------------------------------------------------------------- // -HBufC8* CSIPApnConfigurationHandler::ReadCurrentApnL() +void CSIPApnConfigurationHandler::ReadCurrentApnL() { HBufC8* apn(NULL); @@ -193,15 +193,13 @@ delete iCurrentApn; iCurrentApn = NULL; - iCurrentApn = apn->AllocL(); + iCurrentApn = apn; } db->ClearAttributeMask( ECDHidden ); CleanupStack::PopAndDestroy( iapRecord ); CleanupStack::PopAndDestroy( db ); - - return apn; } // ----------------------------------------------------------------------------- @@ -327,6 +325,7 @@ User::LeaveIfError( iSocketSrv.Connect() ); iRepository = CRepository::NewL( KCRUidCmManager ); + ReadCurrentApnL(); PROFILE_DEBUG1( "CSIPApnConfigurationHandler::ConstructL() exit" ) } @@ -478,16 +477,12 @@ "CSIPApnConfigurationHandler::ApnChangeNeededL()" ) TBool apnChangeNeeded( EFalse ); - HBufC8* currentApn = ReadCurrentApnL(); - - if ( currentApn && currentApn->Compare( aApn ) != 0 ) + if ( iCurrentApn && iCurrentApn->Compare( aApn ) != 0 ) { // Apn is not the same as wanted apnChangeNeeded = ETrue; } - delete currentApn; - PROFILE_DEBUG3( "CSIPApnConfigurationHandler::ApnChangeNeededL(), apnChangeNeeded", apnChangeNeeded ) @@ -796,13 +791,12 @@ const TDesC8& aNewApn, TInt aError ) { - if ( !IsPrimaryApnUsed() ) + HBufC8* currentApn = aNewApn.AllocL(); + delete iCurrentApn; + iCurrentApn = NULL; + iCurrentApn = currentApn; + if ( IsPrimaryApnUsed() ) { - HBufC8* currentApn = aNewApn.AllocL(); - delete iCurrentApn; - iCurrentApn = NULL; - iCurrentApn = currentApn; - iObserver.ApnChanged( *iCurrentApn, iIapId, aError ); } } diff -r 822e1f077722 -r 2cdd984ec527 realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp --- a/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp Wed Jun 09 10:04:26 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp Mon Jun 21 16:03:44 2010 +0300 @@ -242,6 +242,15 @@ TUint32 aContextId) { CSIPProfileCacheItem* item = ProfileCacheItem(aProfile.Id()); + + if(aContextId == 0 && item) + { + if(item->IsApnSwitchEnabled()) + { + UsePrimaryApn(aProfile.IapId()); + } + } + TRAPD(err, SIPProfileStatusEventL(aProfile.Id(), aContextId)); if (err != KErrNone) @@ -336,7 +345,20 @@ item->IsVpnInUse())) ConfirmSystemstateMonitor(CSipSystemStateMonitor::EVpnState); } - } + + if(FeatureManager::FeatureSupported( KFeatureIdFfSipApnSwitching)) + { + if(item && item->IsApnSwitchEnabled() && aContextId) + { + CSIPConcreteProfile::TStatus status; + iPluginDirector->State( status, item->Profile() ); + if(status == CSIPConcreteProfile::EUnregistered) + { + UseBackupApn(item->Profile().IapId(), EFalse); + } + } + } + } CheckServerStatus(); } @@ -1645,26 +1667,33 @@ CSIPConcreteProfile::TStatus aStatus, TInt aError) { - TInt err(aError); - if (aStatus == CSIPConcreteProfile::EUnregistrationInProgress) + PROFILE_DEBUG3("CSIPProfileServerCore::HandleAsyncError, error", aError) + TBool isFatal(EFalse); + if(aError != KErrSIPApnSwitchNonFatalFailure) { - err = KErrNone; - } + TInt err(aError); + if (aStatus == CSIPConcreteProfile::EUnregistrationInProgress) + { + err = KErrNone; + } - if (HandleProfileError(aItem, err)) - { - if (err == KErrTotalLossOfPrecision) - { - TRAP_IGNORE(SendUnregisteredStatusEventL(aItem)) - } - else - { - SendErrorEvent(aItem, aStatus, aError); - } - } + if (HandleProfileError(aItem, err)) + { + if (err == KErrTotalLossOfPrecision) + { + TRAP_IGNORE(SendUnregisteredStatusEventL(aItem)) + } + else + { + SendErrorEvent(aItem, aStatus, aError); + isFatal = ETrue; + } + } + } + if(aItem.IsApnSwitchEnabled()) { - UseBackupApn(aItem.Profile().IapId(), ETrue); + UseBackupApn(aItem.Profile().IapId(), isFatal); } } @@ -2400,7 +2429,7 @@ { PROFILE_DEBUG1("CSIPProfileServerCore::UseBackupApn") - if ( iApnManager->IsFailed( aIapId ) || aFatalFailure ) + if ( !iApnManager->IsFailed( aIapId ) || aFatalFailure ) { iApnManager->SetFailed( aIapId, ETrue, aFatalFailure ); } diff -r 822e1f077722 -r 2cdd984ec527 realtimenetprots/sipfw/SIP/ConnectionMgr/src/CTransport.cpp --- a/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CTransport.cpp Wed Jun 09 10:04:26 2010 +0300 +++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CTransport.cpp Mon Jun 21 16:03:44 2010 +0300 @@ -274,7 +274,7 @@ if ( IsConnectedTransport() ) { TResponseRoute route( id, aRemoteAddr ); - iIDArray.Append( route ); + iIDArray.AppendL( route ); } TRAP( leaveValue, receiver->ReceiveL( static_cast( aMessage ) ) ); diff -r 822e1f077722 -r 2cdd984ec527 realtimenetprots/sipfw/SIP/Server/src/CSipCSSession.cpp --- a/realtimenetprots/sipfw/SIP/Server/src/CSipCSSession.cpp Wed Jun 09 10:04:26 2010 +0300 +++ b/realtimenetprots/sipfw/SIP/Server/src/CSipCSSession.cpp Mon Jun 21 16:03:44 2010 +0300 @@ -252,7 +252,10 @@ { TInt handle = 0; ITC().ReadL(aMessage,handle,ESipItcArgSubSessionHandle); - CloseSubSession (handle); + if(iSubSessionIndex->AtL(handle)) + CloseSubSession (handle); + else + {} } break; diff -r 822e1f077722 -r 2cdd984ec527 realtimenetprots/sipfw/SIP/sipapi/api/siperr.h --- a/realtimenetprots/sipfw/SIP/sipapi/api/siperr.h Wed Jun 09 10:04:26 2010 +0300 +++ b/realtimenetprots/sipfw/SIP/sipapi/api/siperr.h Mon Jun 21 16:03:44 2010 +0300 @@ -93,4 +93,7 @@ /** ICMP error has occured */ const TInt KErrSIPICMPFailure = -17718; +/** Error code to indicate switching to secondary APN on non fatal error */ +const TInt KErrSIPApnSwitchNonFatalFailure = -17719; + #endif //SIPERR_H