# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1272376849 -10800 # Node ID 43c4dec3cb1fb5ef927f2bf6f6e86f5ed6e952ae # Parent 532ef74cdfa075254b3329f4a965cdceda19f646 Revision: 201015 Kit: 201017 diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/Data/2001F889.txt Binary file realtimenetprots/sipfw/Data/2001F889.txt has changed diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/Group/bld.inf --- a/realtimenetprots/sipfw/Group/bld.inf Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/Group/bld.inf Tue Apr 27 17:00:49 2010 +0300 @@ -43,7 +43,7 @@ ../conf/sipframework_101f413c.crml MW_LAYER_EXPORTS_CRML(sipframework_101f413c.crml) ../conf/sipframework_101fed88.crml MW_LAYER_EXPORTS_CRML(sipframework_101fed88.crml) ../conf/sipframework_10282ee7.crml MW_LAYER_EXPORTS_CRML(sipframework_10282ee7.crml) -// Note: sipframework_2001f889.crml cannot be created yet until spec revision +../conf/sipframework_2001f889.crml MW_LAYER_EXPORTS_CRML(sipframework_2001f889.crml) // SIP iby-files ../rom/sipsw.iby /epoc32/rom/include/sipsw.iby diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/ApnManager/inc/sipapnmanager.h --- a/realtimenetprots/sipfw/ProfileAgent/ApnManager/inc/sipapnmanager.h Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/ApnManager/inc/sipapnmanager.h Tue Apr 27 17:00:49 2010 +0300 @@ -90,7 +90,6 @@ MSIPApnChangeObserver& iObserver; RPointerArray iHandlers; - TBool iInitialApnChangeFailed; #ifdef CPPUNIT_TEST friend class CSIPApnManagerTest; diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnconfigurationhandler.cpp --- a/realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnconfigurationhandler.cpp Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnconfigurationhandler.cpp Tue Apr 27 17:00:49 2010 +0300 @@ -210,7 +210,7 @@ // TBool CSIPApnConfigurationHandler::HasPendingTasks() const { - return MonitoringState() != EMonitoringIdle; + return (MonitoringState() != EMonitoringIdle || IsFailed()); } // ----------------------------------------------------------------------------- @@ -306,6 +306,8 @@ { CActiveScheduler::Add( this ); iIapId = aIapId; + iIsFailed = EFalse; + iIsFatalFailure = EFalse; } // ----------------------------------------------------------------------------- @@ -798,7 +800,7 @@ // TBool CSIPApnConfigurationHandler::IsFailed() const { - return iIsFailed; + return iIsFatalFailure; } // ----------------------------------------------------------------------------- diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/Client/Src/SIPRemoteProfile.cpp --- a/realtimenetprots/sipfw/ProfileAgent/Client/Src/SIPRemoteProfile.cpp Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/Client/Src/SIPRemoteProfile.cpp Tue Apr 27 17:00:49 2010 +0300 @@ -56,21 +56,23 @@ TInt RSIPProfile::Connect() { TBool stopTrying(EFalse); - TInt err(KErrNone); + TInt sessionConnectErr(KErrNone); + TInt serverStartErr(KErrNone); const TInt KMaxRetries(10); TInt retryCount(0); while (!stopTrying && retryCount < KMaxRetries) { - err = CreateSession(KSipProfileServerName,Version()); - if ((err != KErrNotFound) && (err != KErrServerTerminated)) + sessionConnectErr = CreateSession(KSipProfileServerName,Version()); + if ((sessionConnectErr != KErrNotFound) + && (sessionConnectErr != KErrServerTerminated)) { stopTrying = ETrue; } else { - err = TSIPProfileServerStarter::Start(); - if ((err != KErrNone) && (err != KErrAlreadyExists)) + serverStartErr = TSIPProfileServerStarter::Start(); + if ((serverStartErr != KErrNone) && (serverStartErr != KErrAlreadyExists)) { stopTrying = ETrue; } @@ -78,8 +80,8 @@ retryCount++; } - iConnected = (err == KErrNone); - return err; + iConnected = (sessionConnectErr == KErrNone); + return sessionConnectErr; } // ----------------------------------------------------------------------------- diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/Sipimsprofileusimprovider.h --- a/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/Sipimsprofileusimprovider.h Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/Sipimsprofileusimprovider.h Tue Apr 27 17:00:49 2010 +0300 @@ -77,8 +77,9 @@ /** * Starts the retrieving of authorization information + * @return ETrue if request was made */ - void RequestL(TBool aUseSIM=EFalse); + TBool RequestL(TBool aUseUSIM=EFalse); /** * Cancels pending operations diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/sipprofileimsauthorization.h --- a/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/sipprofileimsauthorization.h Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/sipprofileimsauthorization.h Tue Apr 27 17:00:49 2010 +0300 @@ -71,7 +71,17 @@ * Get */ RMobilePhone::CImsAuthorizationInfoV5& Response(); - + + /** + * Checks whether IMSAuthorization is supported + */ + TBool IsImsAuthorizationAllowed(); + + /* + * Resets IMS Authorization value + */ + void ResetImsAuthorizationAllowed(TBool aStatus); + public: //From CActive /** @@ -110,6 +120,7 @@ MSIPProfileIMSAuthorizationDataObserver& iObserver; RMobilePhone& iPhone; + TBool iIMSAuthorizationNotSupported; }; #endif // end of SIPPROFILEIMSAUTHORIZATION_H diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/sipprofilesimauthorization.h --- a/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/sipprofilesimauthorization.h Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/sipprofilesimauthorization.h Tue Apr 27 17:00:49 2010 +0300 @@ -70,7 +70,17 @@ void RequestL(); RMobilePhone::TMobilePhoneSubscriberId& IMSI(); - + + /* + * Quires whether SIM Authorization is allowed + */ + TBool IsSIMAuthorizationAllowed(); + + /* + * Resets SIM Authorization value + */ + void ResetSIMAuthorizationAllowed(TBool aStatus); + public: //From CActive /** @@ -111,6 +121,8 @@ */ MSIPProfileIMSAuthorizationDataObserver& iObserver; RMobilePhone& iPhone; + TBool iSIMAuthorizationNotSupported; + private: //For testing purpose #ifdef CPPUNIT_TEST friend class CSIPProfileSIMAuthorizationStub; diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/Sipimsprofileusimprovider.cpp --- a/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/Sipimsprofileusimprovider.cpp Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/Sipimsprofileusimprovider.cpp Tue Apr 27 17:00:49 2010 +0300 @@ -73,20 +73,18 @@ User::LeaveIfError( iPhone.Open( aTelServer, aPhoneInfo.iName ) ); - TUint32 caps; + TUint32 caps(0); User::LeaveIfError(iPhone.GetIccAccessCaps(caps)); if(caps & RMobilePhone::KCapsSimAccessSupported) { + PROFILE_DEBUG1("CSIPProfileUsimProvider::ConstructL, sim supported") iSIMSupported = ETrue; } - if(caps & RMobilePhone::KCapsRUimAccessSupported) - { - } - //usim supported if(caps & RMobilePhone::KCapsUSimAccessSupported) - { + { + PROFILE_DEBUG1("CSIPProfileUsimProvider::ConstructL, usim supported") iUSimSupported = ETrue; } @@ -116,6 +114,8 @@ { User::Leave(KErrNotSupported); } + + PROFILE_DEBUG1("CSIPProfileUsimProvider::ConstructL, exit") } // ---------------------------------------------------------------------------- @@ -153,34 +153,56 @@ // CSIPProfileUsimProvider::RequestL // ---------------------------------------------------------------------------- // -void CSIPProfileUsimProvider::RequestL(TBool /*aUseSIM*/) +TBool CSIPProfileUsimProvider::RequestL(TBool aUseUSIM) { - TBool requestmade = EFalse; - if (!iProfileSIMRecord.SIMPrivateIdentity().Length()) - { - if (iAuthorizationSIM) - { - iAuthorizationSIM->RequestL(); - requestmade = ETrue; - } - else - { - User::Leave(KErrArgument); - } - } - - if (IsUsimSupported()) + + TBool requestFailed = EFalse; + TBool credentialsExists = EFalse; + + if ( aUseUSIM ) { - if (!iProfileSIMRecord.PrivateIdentity().Length()) - { - iAuthorization->RequestL(); - requestmade = ETrue; - } + if (!iProfileSIMRecord.PrivateIdentity().Length()) + { + if(iAuthorization->IsImsAuthorizationAllowed()) + { + iAuthorization->RequestL(); + } + else + { + requestFailed = ETrue; + } + } + else + { + credentialsExists = ETrue; + } } - if (!requestmade) + + else + { + if (!iProfileSIMRecord.SIMPrivateIdentity().Length()) + { + if(iAuthorizationSIM->IsSIMAuthorizationAllowed()) + { + iAuthorizationSIM->RequestL(); + } + else + { + requestFailed = ETrue; + } + } + else + { + credentialsExists = ETrue; + } + } + + if (credentialsExists) { iObserver.AsyncDeltaTimer(); } + + return requestFailed; } // ---------------------------------------------------------------------------- @@ -209,11 +231,16 @@ // void CSIPProfileUsimProvider::AuthorizedL() { + PROFILE_DEBUG1("CSIPProfileUsimProvider::AuthorizedL") + if (iAuthorization) { RMobilePhone::CImsAuthorizationInfoV5& authorization = iAuthorization->Response(); + PROFILE_DEBUG3( "CSIPProfileUsimProvider::AuthorizedL, datasource:", + authorization.iAuthenticationDataSource ) + iProfileSIMRecord.SetPrivateIdL(authorization.iIMPI); iProfileSIMRecord.SetFirstPublicUserNameL(authorization.iIMPUArray[0]); iProfileSIMRecord.SetHomeNetworkDomainNameL( @@ -223,6 +250,8 @@ iObserver.AuthorizedL(); } + + PROFILE_DEBUG1("CSIPProfileUsimProvider::AuthorizedL, exit") } // ---------------------------------------------------------------------------- @@ -249,6 +278,8 @@ // void CSIPProfileUsimProvider::DeriveValuesL() { + PROFILE_DEBUG1("CSIPProfileUsimProvider::DeriveValuesL") + _LIT8(Kimsmnc, "ims.mnc"); _LIT8(Kmcc, ".mcc"); _LIT8(K3gppnetwork, ".3gppnetwork.org"); @@ -327,7 +358,9 @@ delete temp; temp = NULL; iObserver.AuthorizedL(); - } + + PROFILE_DEBUG1("CSIPProfileUsimProvider::DeriveValuesL, exit") + } // ---------------------------------------------------------------------------- // CSIPProfileUsimProvider::AuthorizationFailed @@ -358,6 +391,14 @@ void CSIPProfileUsimProvider::AuthInfoUpdatedL() { iProfileSIMRecord.ResetISIMValuesL(); + if(iAuthorizationSIM) + { + iAuthorizationSIM->ResetSIMAuthorizationAllowed(EFalse); + } + if(iAuthorization) + { + iAuthorization->ResetImsAuthorizationAllowed(EFalse); + } iObserver.UpdateRegistrationsL(); if (!iProfileSIMRecord.PrivateIdentity().Length()) { diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipimsprofileagent.cpp --- a/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipimsprofileagent.cpp Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipimsprofileagent.cpp Tue Apr 27 17:00:49 2010 +0300 @@ -135,6 +135,8 @@ } __ASSERT_ALWAYS(found, User::Leave(KErrNotFound)); + PROFILE_DEBUG1("CSIPIMSProfileAgent::ConstructL, etel ok") + iXMLParser = CSIPNotifyXmlBodyParser::NewL(); iInit = CSIPPrflInitState::NewL(*this); iResolvingProxies = CSIPPrflResolvingProxiesState::NewL(*this); @@ -155,6 +157,8 @@ iDeregInProgress->LinkStates(*iInit); iRegDelayRequested->LinkStates(*iInit); + PROFILE_DEBUG1("CSIPIMSProfileAgent::ConstructL, states ok") + iSIMRecord = CSIPProfileSIMRecord::NewL(); iProfileQueueHandling = CSIPProfileQueueHandling::NewL(*this); TRAPD(err, iUsimProvider = @@ -164,7 +168,10 @@ { User::Leave(err); } + + PROFILE_DEBUG1("CSIPIMSProfileAgent::ConstructL, sim ok") iConfigExtension = NULL; + PROFILE_DEBUG1("CSIPIMSProfileAgent::ConstructL, exit") } // ----------------------------------------------------------------------------- @@ -200,6 +207,7 @@ delete iHttpDigest; delete iSIP; SIPStrings::Close(); + PROFILE_DEBUG1("CSIPIMSProfileAgent::~CSIPIMSProfileAgent, exit") } // ----------------------------------------------------------------------------- @@ -386,15 +394,24 @@ if (iUsimProvider && !CSIPIMSProfileContext::IsHttpDigestSettingsConfigured(aSIPConcreteProfile)) { + TBool requestFailed = EFalse; if (!iUsimProvider->IsUsimSupported()) { iSIMWaitForAuthorizedArray.AppendL(&aSIPConcreteProfile); - iUsimProvider->RequestL(ETrue); + requestFailed = iUsimProvider->RequestL(EFalse); + if(requestFailed) + { + AuthorizationSIMFailed(); + } } else { iUSimWaitForAuthorizedArray.AppendL(&aSIPConcreteProfile); - iUsimProvider->RequestL(); + requestFailed = iUsimProvider->RequestL(ETrue); + if(requestFailed) + { + AuthorizationUSIMFailed(); + } } } else @@ -1116,7 +1133,8 @@ if (RegAllowedWithUSIMorISIML(*profile)) { - if (profile->IsSecurityNegotiationEnabled() && + PROFILE_DEBUG1("CSIPIMSProfileAgent::AuthorizedL ISIM Registration Allowed") + if (profile->IsSecurityNegotiationEnabled() && !CSIPIMSProfileContext::IsHttpDigestSettingsConfigured( *profile)) { @@ -1208,7 +1226,7 @@ TInt error = 0; //function called after async call to request for authorization info CSIPConcreteProfile* profile = NULL; - while (iUSimWaitForAuthorizedArray.Count() > 0) + for(TUint i = iUSimWaitForAuthorizedArray.Count(); i>0; i--) { profile = RemoveFirstProfileFromArray( iUSimWaitForAuthorizedArray ); @@ -1221,14 +1239,15 @@ TerminateAndErrorEvent( *profile, KErrNotSupported ); } } - if (!error) + TBool requestFailed = EFalse; + if ( iSIMWaitForAuthorizedArray.Count() > 0 && !error ) { - TRAP(error, iUsimProvider->RequestL()); + TRAP(error, requestFailed = iUsimProvider->RequestL(EFalse)); } - if(error) + + if(error || requestFailed) { AuthorizationSIMFailed(); - AuthorizationUSIMFailed(); } } diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipprofileimsauthorization.cpp --- a/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipprofileimsauthorization.cpp Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipprofileimsauthorization.cpp Tue Apr 27 17:00:49 2010 +0300 @@ -60,9 +60,13 @@ // CSIPProfileIMSAuthorization::~CSIPProfileIMSAuthorization() { + PROFILE_DEBUG1("CSIPProfileIMSAuthorization::~CSIPProfileIMSAuthorization") + Cancel(); delete iData; delete iRetriever; + + PROFILE_DEBUG1("CSIPProfileIMSAuthorization::~CSIPProfileIMSAuthorization, exit") } // ---------------------------------------------------------------------------- @@ -71,8 +75,12 @@ // void CSIPProfileIMSAuthorization::ConstructL() { + PROFILE_DEBUG1("CSIPProfileIMSAuthorization::ConstructL") + + iIMSAuthorizationNotSupported = EFalse; iData = RMobilePhone::CImsAuthorizationInfoV5::NewL(); CActiveScheduler::Add( this ); + PROFILE_DEBUG1("CSIPProfileIMSAuthorization::ConstructL, exit") } // ---------------------------------------------------------------------------- @@ -112,14 +120,24 @@ // void CSIPProfileIMSAuthorization::RunL() { - if ( iStatus.Int() == KErrNone && iRetriever->AuthInfoValid()) + PROFILE_DEBUG3( "CSIPProfileIMSAuthorization::RunL, status:", iStatus.Int() ) + + TInt status( iStatus.Int() ); + if ( status != KErrNone ) + { + iIMSAuthorizationNotSupported = ETrue; + } + + if ( status == KErrNone && iRetriever->AuthInfoValid() ) { iObserver.AuthorizedL(); } else { - User::LeaveIfError(iStatus.Int()); - } + User::LeaveIfError( iStatus.Int() ); + } + + PROFILE_DEBUG1( "CSIPProfileIMSAuthorization::RunL, exit") } // ---------------------------------------------------------------------------- @@ -128,6 +146,8 @@ // TInt CSIPProfileIMSAuthorization::RunError(TInt aError) { + PROFILE_DEBUG3( "CSIPProfileIMSAuthorization::RunError, err:", aError ) + iObserver.AuthorizationFailed(); if(aError == KErrNoMemory) { @@ -146,4 +166,22 @@ iRetriever = NULL; } +// ---------------------------------------------------------------------------- +// CSIPProfileIMSAuthorization::ResetImsAuthorizationAllowed +// ---------------------------------------------------------------------------- +// +void CSIPProfileIMSAuthorization::ResetImsAuthorizationAllowed(TBool aStatus) + { + iIMSAuthorizationNotSupported = aStatus; + } + +// ---------------------------------------------------------------------------- +// CSIPProfileIMSAuthorization::IsImsAuthorizationSupported +// ---------------------------------------------------------------------------- +// +TBool CSIPProfileIMSAuthorization::IsImsAuthorizationAllowed() + { + return !iIMSAuthorizationNotSupported; + } + // End of File diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipprofilesimauthorization.cpp --- a/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipprofilesimauthorization.cpp Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipprofilesimauthorization.cpp Tue Apr 27 17:00:49 2010 +0300 @@ -61,8 +61,12 @@ // CSIPProfileSIMAuthorization::~CSIPProfileSIMAuthorization() { + PROFILE_DEBUG1("CSIPProfileSIMAuthorization::~CSIPProfileSIMAuthorization") + Cancel(); iIMSI.Zero(); + + PROFILE_DEBUG1("CSIPProfileSIMAuthorization::~CSIPProfileSIMAuthorization, exit") } // ---------------------------------------------------------------------------- @@ -71,6 +75,9 @@ // void CSIPProfileSIMAuthorization::ConstructL() { + PROFILE_DEBUG1("CSIPProfileSIMAuthorization::ConstructL") + + iSIMAuthorizationNotSupported = EFalse; TUint32 caps(0); User::LeaveIfError(iPhone.GetIdentityCaps(caps)); if(!(caps & RMobilePhone::KCapsGetSubscriberId)) @@ -78,6 +85,8 @@ User::Leave(KErrNotSupported); } CActiveScheduler::Add( this ); + + PROFILE_DEBUG1("CSIPProfileSIMAuthorization::ConstructL, exit") } // ---------------------------------------------------------------------------- @@ -108,14 +117,19 @@ // void CSIPProfileSIMAuthorization::RunL() { + PROFILE_DEBUG3("CSIPProfileSIMAuthorization::RunL, status:", iStatus.Int() ) + if ( iStatus.Int() == KErrNone) { iObserver.AuthorizedSubscriberIdL(); } else - { + { + iSIMAuthorizationNotSupported = ETrue; User::LeaveIfError(iStatus.Int()); } + + PROFILE_DEBUG1("CSIPProfileSIMAuthorization::RunL, exit") } // ---------------------------------------------------------------------------- @@ -131,7 +145,25 @@ } return KErrNone; } - + +// ---------------------------------------------------------------------------- +// CSIPProfileSIMAuthorization::IsImsAuthorizationSupported +// ---------------------------------------------------------------------------- +// +TBool CSIPProfileSIMAuthorization::IsSIMAuthorizationAllowed() + { + return !iSIMAuthorizationNotSupported; + } + +// ---------------------------------------------------------------------------- +// CSIPProfileSIMAuthorization::ResetSIMAuthorizationAllowed +// ---------------------------------------------------------------------------- +// +void CSIPProfileSIMAuthorization::ResetSIMAuthorizationAllowed(TBool aStatus) + { + iSIMAuthorizationNotSupported = aStatus; + } + // ---------------------------------------------------------------------------- // CSIPProfileSIMAuthorization::DoCancel // ---------------------------------------------------------------------------- diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/Profile/Src/sipconcreteprofile.cpp --- a/realtimenetprots/sipfw/ProfileAgent/Profile/Src/sipconcreteprofile.cpp Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/Profile/Src/sipconcreteprofile.cpp Tue Apr 27 17:00:49 2010 +0300 @@ -14,7 +14,7 @@ // Name : sipconcreteprofile.cpp // Part of : SIP / SIP Profile Agent / SIP Concrete Profile // Implementation -// Version : %version: 3.1.1 % +// Version : %version: 3.1.2 % // @@ -195,7 +195,6 @@ newCopy->SetId(Id()); newCopy->SetStatus(Status()); newCopy->SetContextId(ContextId()); - newCopy->SetDefault(IsDefault()); newCopy->SetLastRegistrationError(LastRegistrationError()); } else diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileCacheItem.h --- a/realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileCacheItem.h Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileCacheItem.h Tue Apr 27 17:00:49 2010 +0300 @@ -546,7 +546,7 @@ /** * Switches state machine to unregistered state */ - void SwitchToUnregisteredState(); + TBool SwitchToUnregisteredState(TBool aResume); /** * Handles Errors caused by faulty profiles diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileServerCore.h --- a/realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileServerCore.h Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileServerCore.h Tue Apr 27 17:00:49 2010 +0300 @@ -243,7 +243,16 @@ * transferred. */ const CSIPConcreteProfile* Profile(TUint32 aProfileId) const; - + + /** + * Gets modifiable profile object pointer + * This method should only be used when you need to update profile. + * @param aProfileId a required profile id + * @return Found profile, or NULL if not found. Ownership is not + * transferred. + */ + CSIPConcreteProfile* Profile(TUint32 aProfileId); + /** * Gets default profile * Ownership is not transferred. diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileCSSession.cpp --- a/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileCSSession.cpp Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileCSSession.cpp Tue Apr 27 17:00:49 2010 +0300 @@ -250,11 +250,33 @@ HBufC8* profileBuf = iHelper.ReadLC(ESipProfileItcArgProfile,aMessage); CSIPConcreteProfile* profile = InternalizeProfileLC(*profileBuf); TBool updateAllowed = iCore.IsUpdateAllowed(profile); + + //Save the dynamic Data before UpdateProfile happens + TBool isProfile = EFalse; + const CSIPConcreteProfile* aProfile = iCore.Profile(profile->Id()); + CDesC8ArrayFlat* aRegisteredAORs = NULL; + HBufC8* aNegotiatedSecurityMechanism = NULL; + CSIPConcreteProfile::TStatus status = CSIPConcreteProfile::EUnregistered; + if(aProfile) + { + isProfile = ETrue; + status = aProfile->Status(); + //Copy registeredAors + const MDesC8Array& aArray = aProfile->RegisteredAORs(); + aRegisteredAORs = new (ELeave) CDesC8ArrayFlat(1); + CleanupStack::PushL(aRegisteredAORs); + for (TInt i = 0; i < aArray.MdcaCount(); i++) + { + aRegisteredAORs->AppendL(aArray.MdcaPoint(i)); + } + //Copy NegotiatedSecurityMechanism + aNegotiatedSecurityMechanism = aProfile->NegotiatedSecurityMechanism().AllocL(); + CleanupStack::PushL(aNegotiatedSecurityMechanism); + } + if(updateAllowed) { - TBool canProceed = iCore.UpdateProfileToStoreL(profile, *this); - CleanupStack::Pop(profile); - CleanupStack::PopAndDestroy(profileBuf); + TBool canProceed = iCore.UpdateProfileToStoreL(profile, *this); if (canProceed) { iCore.UpdateRegistrationL(profile->Id(), *this); @@ -264,6 +286,27 @@ { User::Leave(KErrNotSupported); } + + //If UpdateProfile has not resulted into deregistration and reregistration + //copy the dynamic data extraced from previous copy of concrete profile to new copy + //of concrete profile so that dynamic information is not lost. + CSIPConcreteProfile* aUpdatedProfile = iCore.Profile(profile->Id()); + if(aUpdatedProfile && (status == aUpdatedProfile->Status())) + { + if(0 == aUpdatedProfile->RegisteredAORs().MdcaCount() && aRegisteredAORs) + aUpdatedProfile->SetRegisteredAORsL(*aRegisteredAORs); + if(0 == aUpdatedProfile->NegotiatedSecurityMechanism().Length() && aNegotiatedSecurityMechanism) + aUpdatedProfile->SetNegotiatedSecurityMechanismL(*aNegotiatedSecurityMechanism); + } + + if(isProfile) + { + CleanupStack::PopAndDestroy(aNegotiatedSecurityMechanism); + CleanupStack::PopAndDestroy(aRegisteredAORs); + } + + CleanupStack::Pop(profile); + CleanupStack::PopAndDestroy(profileBuf); } // ----------------------------------------------------------------------------- diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileCacheItem.cpp --- a/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileCacheItem.cpp Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileCacheItem.cpp Tue Apr 27 17:00:49 2010 +0300 @@ -183,7 +183,7 @@ { iProfile->SetLastRegistrationError(KErrNoMemory); iCurrentState->RefreshIAPsFailed(*this); - SwitchToUnregisteredState(); + SwitchToUnregisteredState(EFalse); PassAlrErrorToClient(KErrNoMemory, Profile().IapId()); } @@ -764,9 +764,12 @@ if (iCurrentState->ErrorOccurred(*this, aError)) { PROFILE_DEBUG1("ProfileCacheItem::HandleError go unregistered") - - SwitchToUnregisteredState(); - + + if(SwitchToUnregisteredState(ETrue)) + { + return EFalse; + } + if (aError != KErrNone) { iProfile->SetLastRegistrationError(aError); @@ -1279,16 +1282,29 @@ // would register again (if auto-registration on). // ----------------------------------------------------------------------------- // -void CSIPProfileCacheItem::SwitchToUnregisteredState() +TBool CSIPProfileCacheItem::SwitchToUnregisteredState(TBool aResume) { CSIPProfileState& unregistered = iServerCore.UnregisteredState(); iProfile->SetStatus(unregistered.Name()); iCurrentState = &unregistered; - SetSnapRetryCounter(0); - + + if(iQueuedProfile) + { + if(aResume) + { + TRAPD(err, ResumeL()); + if(KErrNone == err) + return ETrue; + } + delete iProfile; + iProfile = iQueuedProfile; + iQueuedProfile = NULL; + } // No need to monitor SNAP anymore. + SetSnapRetryCounter(0); StopSnapMonitoring(); RemoveAllUsers(); + return EFalse; } // ----------------------------------------------------------------------------- diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp --- a/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp Tue Apr 27 17:00:49 2010 +0300 @@ -760,7 +760,7 @@ { CSIPConcreteProfile* defaultProfile = FindDefaultProfile(); - if ( defaultProfile && defaultProfile != aProfile ) + if ( defaultProfile && defaultProfile->Id() != aProfile->Id() ) { defaultProfile->SetDefault( EFalse ); } @@ -786,6 +786,22 @@ return NULL; } +// ---------------------------------------------------------------------------------- +// CSIPProfileServerCore::Profile. Returns modifiable ConcreteProfile object pointer +// ---------------------------------------------------------------------------------- +// +CSIPConcreteProfile* +CSIPProfileServerCore::Profile(TUint32 aProfileId) + { + CSIPProfileCacheItem* item = ProfileCacheItem(aProfileId); + if (item) + { + return &item->Profile(); + } + return NULL; + } + + // ----------------------------------------------------------------------------- // CSIPProfileServerCore::ProfileDefaultL // ----------------------------------------------------------------------------- @@ -1076,7 +1092,7 @@ && item->IsVpnInUse()); const CSIPConcreteProfile* profile = Profile(aProfileId); - if(FeatureManager::FeatureSupported( KFeatureIdFfSipApnSwitching ) + if(profile && FeatureManager::FeatureSupported( KFeatureIdFfSipApnSwitching ) && CheckApnSwitchEnabledL( *profile ) && !item->IsRfsInprogress() && !isVpnInUse ) { PROFILE_DEBUG1("CSIPProfileServerCore::EnableProfileL, SwichEnabled") @@ -1140,7 +1156,7 @@ if(CSIPConcreteProfile::EUnregistered != item->UsedProfile().Status()) { PROFILE_DEBUG3("CSIPProfileServerCore::ForceDisableProfileL, Forcibly disabling profile", aProfileId); - item->SwitchToUnregisteredState(); + item->SwitchToUnregisteredState(EFalse); iPluginDirector->TerminateHandling(item->UsedProfile()); item->ClearMigrationProfiles(); iPluginDirector->StartTimerForCleanup(); @@ -2167,27 +2183,30 @@ TInt error(KErrNone); PROFILE_DEBUG3("CSIPProfileServerCore::ApnChanged, Profile Id", profile->Id()) CSIPProfileCacheItem* item = ProfileCacheItem(profile->Id()); - TBool isVpnInUse = (FeatureManager::FeatureSupported( KFeatureIdFfImsDeregistrationInVpn ) - && item->IsVpnInUse()); - if ( err == KErrNone && CheckIapSettings(profile->Id())) + if(item) { - if(switchEnabledProfile.operation == TStoreSwitchEnabledProfile::Update) - { - TRAP(error, item->UpdateRegistrationL(*(switchEnabledProfile.iObserver))); - } - else if(switchEnabledProfile.operation == TStoreSwitchEnabledProfile::Enable && !item->IsRfsInprogress() && !isVpnInUse) - { - TRAP(error, iAlrHandler->EnableProfileL(*item, *(switchEnabledProfile.iObserver))); - } - else if(switchEnabledProfile.operation == TStoreSwitchEnabledProfile::Register) - { - TRAP(error, item->StartRegisterL(*iWaitForIAP, *iRegInProg, ETrue)); - } - } - if ( err != KErrNone || error) - { - PROFILE_DEBUG1("CSIPProfileServerCore::ApnChanged, error handling") - HandleAsyncError(*item, profile->Status(), err); + TBool isVpnInUse = (FeatureManager::FeatureSupported( KFeatureIdFfImsDeregistrationInVpn ) + && item->IsVpnInUse()); + if ( err == KErrNone && CheckIapSettings(profile->Id())) + { + if(switchEnabledProfile.operation == TStoreSwitchEnabledProfile::Update) + { + TRAP(error, item->UpdateRegistrationL(*(switchEnabledProfile.iObserver))); + } + else if(switchEnabledProfile.operation == TStoreSwitchEnabledProfile::Enable && !item->IsRfsInprogress() && !isVpnInUse) + { + TRAP(error, iAlrHandler->EnableProfileL(*item, *(switchEnabledProfile.iObserver))); + } + else if(switchEnabledProfile.operation == TStoreSwitchEnabledProfile::Register) + { + TRAP(error, item->StartRegisterL(*iWaitForIAP, *iRegInProg, ETrue)); + } + } + if ( err != KErrNone || error) + { + PROFILE_DEBUG1("CSIPProfileServerCore::ApnChanged, error handling") + HandleAsyncError(*item, profile->Status(), err); + } } } } diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflregisteredstate.cpp --- a/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflregisteredstate.cpp Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflregisteredstate.cpp Tue Apr 27 17:00:49 2010 +0300 @@ -14,7 +14,7 @@ // Name : sipprflregisteredstate.cpp // Part of : sip profile fsm // implementation -// Version : %version: 2.1.1 % +// Version : %version: 2.1.2 % // @@ -289,7 +289,7 @@ { aContext.SetProfile(&aNewProfile); } - else if((&aNewProfile)->IsDefault() != (oldProfile)->IsDefault()) + else if((&aNewProfile)->IsDefault() && !(oldProfile)->IsDefault()) { aContext.SetProfile(&aNewProfile); } diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/SIP/Group/digestplugin.mmp --- a/realtimenetprots/sipfw/SIP/Group/digestplugin.mmp Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/SIP/Group/digestplugin.mmp Tue Apr 27 17:00:49 2010 +0300 @@ -83,7 +83,6 @@ LIBRARY commsdat.lib LIBRARY flogger.lib LIBRARY charconv.lib -LIBRARY imut.lib LIBRARY centralrepository.lib LIBRARY efsrv.lib diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/SIP/SIPSec/DigestPlugin/src/CSIPSecChallengeAKA.cpp --- a/realtimenetprots/sipfw/SIP/SIPSec/DigestPlugin/src/CSIPSecChallengeAKA.cpp Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/SIP/SIPSec/DigestPlugin/src/CSIPSecChallengeAKA.cpp Tue Apr 27 17:00:49 2010 +0300 @@ -26,7 +26,7 @@ #include "sipsecdigestcontext.h" #include "sipstrings.h" #include "sipstrconsts.h" -#include +#include // ============================ MEMBER FUNCTIONS =============================== @@ -132,8 +132,8 @@ HBufC8* auts = HBufC8::NewLC( KBase64EncodedAutsLength ); TPtr8 autsPtr( auts->Des() ); - TImCodecB64 encoder; - User::LeaveIfError( encoder.Encode( userData.AUTS(), autsPtr ) ); + TBase64 encoder; + User::LeaveIfError( encoder.Encode( userData.AUTS(), autsPtr ) ); aContext.SetParamValueL( SipStrConsts::EAuts, *auts ); CleanupStack::PopAndDestroy( auts ); diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/conf/sipframework.confml Binary file realtimenetprots/sipfw/conf/sipframework.confml has changed diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/conf/sipframework_2001f889.crml Binary file realtimenetprots/sipfw/conf/sipframework_2001f889.crml has changed diff -r 532ef74cdfa0 -r 43c4dec3cb1f realtimenetprots/sipfw/rom/sipsw.iby --- a/realtimenetprots/sipfw/rom/sipsw.iby Wed Apr 14 16:19:40 2010 +0300 +++ b/realtimenetprots/sipfw/rom/sipsw.iby Tue Apr 27 17:00:49 2010 +0300 @@ -107,7 +107,6 @@ /* Resources - XML for secure profile backup*/ data=ZPRIVATE\101F413C\backup_registration.xml private\101F413C\backup_registration.xml -data=DATAZ_\private\10202be9\2001F889.txt private\10202be9\2001F889.txt // ProfileAgent's default cre file data=DATAZ_\private\10202be9\101f413c.cre private\10202be9\101f413c.cre diff -r 532ef74cdfa0 -r 43c4dec3cb1f rtp/rtpstack/src/rtpsession.cpp --- a/rtp/rtpstack/src/rtpsession.cpp Wed Apr 14 16:19:40 2010 +0300 +++ b/rtp/rtpstack/src/rtpsession.cpp Tue Apr 27 17:00:49 2010 +0300 @@ -3036,6 +3036,7 @@ switch ( aError ) { case KErrDisconnected: + case KErrConnectionTerminated: RTP_DEBUG_DETAIL( "Socket Disconnected" ); diff -r 532ef74cdfa0 -r 43c4dec3cb1f sipplugins/sippsipsettingsui/inc/gssipmodel.h --- a/sipplugins/sippsipsettingsui/inc/gssipmodel.h Wed Apr 14 16:19:40 2010 +0300 +++ b/sipplugins/sippsipsettingsui/inc/gssipmodel.h Tue Apr 27 17:00:49 2010 +0300 @@ -331,9 +331,6 @@ //Index of new profile in the list TInt iAddedProfileIndex; - - //indicate the registering status - TBool iIsRegistering; }; #endif // GS_SIP_MODEL_H diff -r 532ef74cdfa0 -r 43c4dec3cb1f sipplugins/sippsipsettingsui/sis/sipsettingsui_stub.SIS Binary file sipplugins/sippsipsettingsui/sis/sipsettingsui_stub.SIS has changed diff -r 532ef74cdfa0 -r 43c4dec3cb1f sipplugins/sippsipsettingsui/sis/sipsettingsui_stub.pkg --- a/sipplugins/sippsipsettingsui/sis/sipsettingsui_stub.pkg Wed Apr 14 16:19:40 2010 +0300 +++ b/sipplugins/sippsipsettingsui/sis/sipsettingsui_stub.pkg Tue Apr 27 17:00:49 2010 +0300 @@ -37,10 +37,10 @@ ; SIP Settings UI ; ///////////////////////// "" - "z:\sys\bin\GSSIPSettingsPlugin.dll" -"" - "z:\resource\plugins\GSSIPSettingsPlugin.r??" +"" - "z:\resource\plugins\GSSIPSettingsPlugin.r*" "" - "z:\resource\apps\GSSIPSettingsPlugin.mif" ; ///////////////////////// ; SIP Settings UI resources ; ///////////////////////// -"" - "z:\resource\GSSIPSettingsPluginRsc.R??" +"" - "z:\resource\GSSIPSettingsPluginRsc.R*" diff -r 532ef74cdfa0 -r 43c4dec3cb1f sipplugins/sippsipsettingsui/src/gssipmodel.cpp --- a/sipplugins/sippsipsettingsui/src/gssipmodel.cpp Wed Apr 14 16:19:40 2010 +0300 +++ b/sipplugins/sippsipsettingsui/src/gssipmodel.cpp Tue Apr 27 17:00:49 2010 +0300 @@ -47,7 +47,6 @@ { __GSLOGSTRING("CGSSIPModel::CGSSIPModel" ) iQuitAfterSave = EFalse; - iIsRegistering = EFalse; } // ----------------------------------------------------------------------------- @@ -124,7 +123,7 @@ CSIPManagedProfile* profile = static_cast( iProfiles->At( aIndex ) ); - if ( iEngine->IsInUseL( *profile ) || iIsRegistering ) + if ( iEngine->IsInUseL( *profile ) ) { HBufC* errorTxt = StringLoader::LoadLC( R_QTN_SIP_ERROR_PROFILE_USED ); CAknErrorNote* note = new ( ELeave ) CAknErrorNote( ETrue ); @@ -433,12 +432,6 @@ { __GSLOGSTRING("CGSSIPModel::ErrorInRegistration" ) __GSLOGSTRING1("CGSSIPModel::ErrorInRegistration aIndex: %d", aIndex) - - if(iEngine->LastRegistrationError( - *( iProfiles->At( aIndex ) ) ) != KErrNone) - { - iIsRegistering = EFalse; - } return ( iEngine->LastRegistrationError( *( iProfiles->At( aIndex ) ) ) != KErrNone ); } @@ -464,11 +457,8 @@ break; case EProfileRegistered: case EProfileDeregistered: - { - iIsRegistering = EFalse; ProfileRegistrationStatusChanged( aSIPProfileId ); break; - } case EProfileDestroyed: ProfileDestroyed( aSIPProfileId ); break; @@ -760,8 +750,6 @@ { CSIPManagedProfile* profile = static_cast( profilePointerArray[j] ); - iIsRegistering = EFalse; - iProfiles->AppendL( profile ); profilePointerArray.Remove( j ); } @@ -954,10 +942,6 @@ } GSSIPProfileUtil::CopyProfileAttributesL( profile, iProfileData ); - if(iProfileData.iRegistrationMode == EGSAlwaysOn) - { - iIsRegistering = ETrue; - } GSSIPProfileUtil::CopyServerAttributesL( profile, KSIPOutboundProxy, iProfileData.iProxy ); GSSIPProfileUtil::CopyServerAttributesL( diff -r 532ef74cdfa0 -r 43c4dec3cb1f sipplugins/sippsystemstatemonitor/rom/sipsystemstatemonitor.iby --- a/sipplugins/sippsystemstatemonitor/rom/sipsystemstatemonitor.iby Wed Apr 14 16:19:40 2010 +0300 +++ b/sipplugins/sippsystemstatemonitor/rom/sipsystemstatemonitor.iby Tue Apr 27 17:00:49 2010 +0300 @@ -22,6 +22,8 @@ #include ECOM_PLUGIN(sipsystemstatemonitor.dll,sipsystemstatemonitor.rsc) -/* patchdata ssmcmn.dll@KSsmGracefulOffline 0xFFFFFFFF */ +#ifdef FF_IMS_DEREGISTRATION_IN_OFFLINE +patchdata ssmcmn.dll@KSsmGracefulOffline 0xFFFFFFFF +#endif #endif /* SIPSYSTEMSTATEMONTOR_IBY */