--- a/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp Mon Jun 28 19:10:29 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp Fri Jul 09 13:15:39 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();
}
@@ -475,11 +497,11 @@
TBool waitForDeregistration = EFalse;
for (TInt i = 0; i < iProfileCache.Count(); i++)
{
- iProfileCache[i]->OfflineInitiated(ETrue);
CSIPConcreteProfile::TStatus status;
iPluginDirector->State(status, iProfileCache[i]->UsedProfile());
if(status != CSIPConcreteProfile::EUnregistered)
- waitForDeregistration = ETrue;
+ waitForDeregistration = ETrue;
+ iProfileCache[i]->OfflineInitiated(ETrue);
}
if(!waitForDeregistration)
{
@@ -515,11 +537,11 @@
TBool waitForDeregistration = EFalse;
for (TInt i = 0; i < iProfileCache.Count(); i++)
{
- iProfileCache[i]->RfsInprogress(ETrue);
CSIPConcreteProfile::TStatus status;
iPluginDirector->State(status, iProfileCache[i]->UsedProfile());
if (status != CSIPConcreteProfile::EUnregistered)
waitForDeregistration = ETrue;
+ iProfileCache[i]->RfsInprogress(ETrue);
}
if(!waitForDeregistration)
{
@@ -564,12 +586,11 @@
TBool waitForDeregistration = EFalse;
for (TInt i = 0; i < iProfileCache.Count(); i++)
{
- iProfileCache[i]->VpnInUse( ETrue );
- iProfileCache[i]->ShutdownInitiated();
CSIPConcreteProfile::TStatus status;
iPluginDirector->State(status, iProfileCache[i]->UsedProfile());
if (status != CSIPConcreteProfile::EUnregistered)
waitForDeregistration = ETrue;
+ iProfileCache[i]->VpnInUse( ETrue );
}
if (!waitForDeregistration)
{
@@ -1646,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);
}
}
@@ -2401,7 +2429,7 @@
{
PROFILE_DEBUG1("CSIPProfileServerCore::UseBackupApn")
- if ( iApnManager->IsFailed( aIapId ) || aFatalFailure )
+ if ( !iApnManager->IsFailed( aIapId ) || aFatalFailure )
{
iApnManager->SetFailed( aIapId, ETrue, aFatalFailure );
}