Binary file realtimenetprots/sipfw/Data/2001F889.txt has changed
--- 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
--- 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<CSIPApnConfigurationHandler> iHandlers;
- TBool iInitialApnChangeFailed;
#ifdef CPPUNIT_TEST
friend class CSIPApnManagerTest;
--- 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;
}
// -----------------------------------------------------------------------------
--- 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;
}
// -----------------------------------------------------------------------------
--- 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
--- 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
--- 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;
--- 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())
{
--- 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();
}
}
--- 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
--- 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
// ----------------------------------------------------------------------------
--- 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
--- 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
--- 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.
--- 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);
}
// -----------------------------------------------------------------------------
--- 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;
}
// -----------------------------------------------------------------------------
--- 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);
+ }
}
}
}
--- 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);
}
--- 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
--- 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 <imcvcodc.h>
+#include <tconvbase64.h>
// ============================ 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 );
Binary file realtimenetprots/sipfw/conf/sipframework.confml has changed
Binary file realtimenetprots/sipfw/conf/sipframework_2001f889.crml has changed
--- 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
--- 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" );
--- 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
Binary file sipplugins/sippsipsettingsui/sis/sipsettingsui_stub.SIS has changed
--- 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*"
--- 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<CSIPManagedProfile*>( 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<CSIPManagedProfile*>( 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(
--- 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 <bldvariant.hrh>
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 */