Revision: 201015 RCL_3 PDK_3.0.i
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 27 Apr 2010 17:00:49 +0300
branchRCL_3
changeset 16 43c4dec3cb1f
parent 14 532ef74cdfa0
child 19 8517a9ac4a23
Revision: 201015 Kit: 201017
realtimenetprots/sipfw/Data/2001F889.txt
realtimenetprots/sipfw/Group/bld.inf
realtimenetprots/sipfw/ProfileAgent/ApnManager/inc/sipapnmanager.h
realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnconfigurationhandler.cpp
realtimenetprots/sipfw/ProfileAgent/Client/Src/SIPRemoteProfile.cpp
realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/Sipimsprofileusimprovider.h
realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/sipprofileimsauthorization.h
realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/sipprofilesimauthorization.h
realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/Sipimsprofileusimprovider.cpp
realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipimsprofileagent.cpp
realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipprofileimsauthorization.cpp
realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipprofilesimauthorization.cpp
realtimenetprots/sipfw/ProfileAgent/Profile/Src/sipconcreteprofile.cpp
realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileCacheItem.h
realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileServerCore.h
realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileCSSession.cpp
realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileCacheItem.cpp
realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp
realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflregisteredstate.cpp
realtimenetprots/sipfw/SIP/Group/digestplugin.mmp
realtimenetprots/sipfw/SIP/SIPSec/DigestPlugin/src/CSIPSecChallengeAKA.cpp
realtimenetprots/sipfw/conf/sipframework.confml
realtimenetprots/sipfw/conf/sipframework_2001f889.crml
realtimenetprots/sipfw/rom/sipsw.iby
rtp/rtpstack/src/rtpsession.cpp
sipplugins/sippsipsettingsui/inc/gssipmodel.h
sipplugins/sippsipsettingsui/sis/sipsettingsui_stub.SIS
sipplugins/sippsipsettingsui/sis/sipsettingsui_stub.pkg
sipplugins/sippsipsettingsui/src/gssipmodel.cpp
sipplugins/sippsystemstatemonitor/rom/sipsystemstatemonitor.iby
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 */