201019
authorhgs
Fri, 14 May 2010 14:57:35 +0300
changeset 22 f1578314b8da
parent 17 bfe1f539b721
child 23 8798b8c7bbfb
child 25 505ad3f0ce5c
201019
group/bld.inf
realtimenetprots/rtp/cfrtp/group/bld.inf
realtimenetprots/rtp/group/bld.inf
realtimenetprots/rtp/rtpcore/group/bld.inf
realtimenetprots/rtp/shimrtp/eabi/rtpmu.def
realtimenetprots/rtp/shimrtp/group/bld.inf
realtimenetprots/rtp/shimrtp/src/rtp/rtcp.cpp
realtimenetprots/rtp/shimrtp/src/stubs/rtcp_stub.cpp
realtimenetprots/sipfw/Data/101F413C.txt
realtimenetprots/sipfw/Data/101f413c.cre
realtimenetprots/sipfw/Group/bld.inf
realtimenetprots/sipfw/ProfileAgent/Group/sipietfagent.mmp
realtimenetprots/sipfw/ProfileAgent/Group/sipimsagent.mmp
realtimenetprots/sipfw/ProfileAgent/Group/sipprofilefsm.mmp
realtimenetprots/sipfw/ProfileAgent/Group/sipprofileserver.mmp
realtimenetprots/sipfw/ProfileAgent/Group/sipproxyrsv.mmp
realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileCacheItem.h
realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileServerCore.h
realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileCacheItem.cpp
realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp
realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileStateUnregistered.cpp
realtimenetprots/sipfw/SIP/ConnectionMgr/src/CTransport.cpp
realtimenetprots/sipfw/conf/sipframework_101f413c.crml
realtimenetprots/sipfw/rom/sipsw.iby
sipplugins/group/bld.inf
sipproviderplugins/sipprovider/sipconnectionplugins/group/bld.inf
sipproviderplugins/sipprovider/sipdummyprt/group/bld.inf
sipproviderplugins/sipprovider/sipstatemachine/group/bld.inf
--- a/group/bld.inf	Mon May 03 12:50:54 2010 +0300
+++ b/group/bld.inf	Fri May 14 14:57:35 2010 +0300
@@ -20,6 +20,7 @@
 
 #include "../ipappprotocols_plat/group/bld.inf"
 #include "../rtp/group/bld.inf"
+#include "../realtimenetprots/rtp/group/bld.inf"
 #include "../realtimenetprots/sipfw/Group/bld.inf"
 #include "../sipplugins/group/bld.inf"
 
--- a/realtimenetprots/rtp/cfrtp/group/bld.inf	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/rtp/cfrtp/group/bld.inf	Fri May 14 14:57:35 2010 +0300
@@ -27,7 +27,7 @@
 ../inc/rtp_proto_id.h		SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(rtp_proto_id.h)
 #ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
 ../inc/rtp_subconparams.h	SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(rtp_subconparams.h)
-./cfrtp.iby          /epoc32/rom/include/cfrtp.iby
+./cfrtp.iby          CORE_MW_LAYER_IBY_EXPORT_PATH(cfrtp.iby)
 
 PRJ_MMPFILES
 cfrtp.mmp
--- a/realtimenetprots/rtp/group/bld.inf	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/rtp/group/bld.inf	Fri May 14 14:57:35 2010 +0300
@@ -25,10 +25,10 @@
 
 
 PRJ_EXPORTS
-./rtp.iby  /epoc32/rom/include/rtp.iby
+./rtp.iby  CORE_MW_LAYER_IBY_EXPORT_PATH(rtp.iby)
 
 PRJ_TESTEXPORTS
-./te_rtp.iby  /epoc32/rom/include/te_rtp.iby
+./te_rtp.iby	/epoc32/rom/include/te_rtp.iby
 ./rtptest.xml	z:/testdata/configs/rtp/rtptest.xml
 
 
--- a/realtimenetprots/rtp/rtpcore/group/bld.inf	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/rtp/rtpcore/group/bld.inf	Fri May 14 14:57:35 2010 +0300
@@ -19,7 +19,7 @@
 */
 
 PRJ_EXPORTS
-./rtpcore.iby  /epoc32/rom/include/rtpcore.iby
+./rtpcore.iby  CORE_MW_LAYER_IBY_EXPORT_PATH(rtpcore.iby)
 
 PRJ_MMPFILES
 rtpcore.mmp
--- a/realtimenetprots/rtp/shimrtp/eabi/rtpmu.def	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/rtp/shimrtp/eabi/rtpmu.def	Fri May 14 14:57:35 2010 +0300
@@ -116,4 +116,5 @@
 	_ZN20RRtpSession_Internal36SetPrePostProcessingRegisterCallbackEP26MPrePostProcessingCallback @ 115 NONAME
 	_ZN20RRtpSession_Internal5OpenLER11RSocketServR9TSockAddrS3_iR14RSubConnectioniRK6TDesC8 @ 116 NONAME
 	_ZN14RRtpSendPacket5CloseEv @ 117 NONAME
+	_ZNK11RRtcpRRItem10SenderSSRCEv @ 118 NONAME
 
--- a/realtimenetprots/rtp/shimrtp/group/bld.inf	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/rtp/shimrtp/group/bld.inf	Fri May 14 14:57:35 2010 +0300
@@ -21,7 +21,7 @@
 
 PRJ_EXPORTS
 
-./shimrtp.iby  /epoc32/rom/include/shimrtp.iby
+./shimrtp.iby  CORE_MW_LAYER_IBY_EXPORT_PATH(shimrtp.iby)
 ../inc/rtp.h		SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(rtp.h)
 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
 ../inc/rtpsession_internal.h	SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(rtpsession_internal.h)
--- a/realtimenetprots/rtp/shimrtp/src/rtp/rtcp.cpp	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/rtp/shimrtp/src/rtp/rtcp.cpp	Fri May 14 14:57:35 2010 +0300
@@ -70,6 +70,12 @@
 	return iPtr->dlsr;
 	}
 
+EXPORT_C TUint RRtcpRRItem::SenderSSRC() const
+	{
+	__RTP_LOG(_L("RRtcpSRItem::SenderSSRC() ... "));
+	return AboutSSRC();
+	}
+	
 
 /******/
 EXPORT_C RRtcpRRPart::RRtcpRRPart(TRtcpRRPart& aRR) :iRRPart(aRR)
--- a/realtimenetprots/rtp/shimrtp/src/stubs/rtcp_stub.cpp	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/rtp/shimrtp/src/stubs/rtcp_stub.cpp	Fri May 14 14:57:35 2010 +0300
@@ -70,6 +70,11 @@
 	return 0;
 	}
 
+EXPORT_C TUint RRtcpRRItem::SenderSSRC() const
+	{
+	ASSERT(0);
+	return 0;
+	}
 
 /******/
 EXPORT_C RRtcpRRPart::RRtcpRRPart(TRtcpRRPart& aRR) :iRRPart(aRR)
Binary file realtimenetprots/sipfw/Data/101F413C.txt has changed
Binary file realtimenetprots/sipfw/Data/101f413c.cre has changed
--- a/realtimenetprots/sipfw/Group/bld.inf	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/sipfw/Group/bld.inf	Fri May 14 14:57:35 2010 +0300
@@ -35,8 +35,6 @@
 ../Data/101F413C.txt z:/private/10202be9/101f413c.txt
 // ProfileAgent's cenrep configuration file for expiry duration
 ../Data/2001F889.txt z:/private/10202be9/2001f889.txt
-// ProfileAgent's default cre file
-../Data/101f413c.cre z:/private/10202be9/101f413c.cre
 
 // ConfML files
 ../conf/sipframework.confml          MW_LAYER_EXPORTS_CONFML(sipframework.confml)
@@ -46,8 +44,8 @@
 ../conf/sipframework_2001f889.crml   MW_LAYER_EXPORTS_CRML(sipframework_2001f889.crml)
 
 // SIP iby-files
-../rom/sipsw.iby /epoc32/rom/include/sipsw.iby
-../rom/siph2lanbearermonitor.iby /epoc32/rom/include/siph2lanbearermonitor.iby
+../rom/sipsw.iby	CORE_MW_LAYER_IBY_EXPORT_PATH(sipsw.iby)
+../rom/siph2lanbearermonitor.iby	CORE_MW_LAYER_IBY_EXPORT_PATH(siph2lanbearermonitor.iby)
 
 // SDP Codec API
 ../SDP/api/SdpAttributeField.h SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(sdpattributefield.h)
--- a/realtimenetprots/sipfw/ProfileAgent/Group/sipietfagent.mmp	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/Group/sipietfagent.mmp	Fri May 14 14:57:35 2010 +0300
@@ -60,6 +60,6 @@
 
 VENDORID 0x70000001
 
-CAPABILITY ProtServ NetworkServices ReadDeviceData WriteDeviceData
+CAPABILITY ProtServ NetworkServices ReadDeviceData WriteDeviceData NetworkControl
 
 SMPSAFE
--- a/realtimenetprots/sipfw/ProfileAgent/Group/sipimsagent.mmp	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/Group/sipimsagent.mmp	Fri May 14 14:57:35 2010 +0300
@@ -83,9 +83,10 @@
 LIBRARY commsdat.lib
 LIBRARY flogger.lib
 LIBRARY efsrv.lib
+LIBRARY satclient.lib
 
 VENDORID 0x70000001
 
-CAPABILITY ProtServ NetworkServices ReadDeviceData WriteDeviceData
+CAPABILITY ProtServ NetworkServices ReadDeviceData WriteDeviceData NetworkControl
 
 SMPSAFE
--- a/realtimenetprots/sipfw/ProfileAgent/Group/sipprofilefsm.mmp	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/Group/sipprofilefsm.mmp	Fri May 14 14:57:35 2010 +0300
@@ -58,6 +58,6 @@
 
 VENDORID 0x70000001
 
-CAPABILITY ProtServ NetworkServices ReadDeviceData WriteDeviceData
+CAPABILITY ProtServ NetworkServices ReadDeviceData WriteDeviceData NetworkControl
 
 SMPSAFE
--- a/realtimenetprots/sipfw/ProfileAgent/Group/sipprofileserver.mmp	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/Group/sipprofileserver.mmp	Fri May 14 14:57:35 2010 +0300
@@ -97,7 +97,7 @@
 
 VENDORID 0x70000001
 
-CAPABILITY ProtServ NetworkServices ReadDeviceData WriteDeviceData
+CAPABILITY ProtServ NetworkServices ReadDeviceData WriteDeviceData NetworkControl
 
 // MACRO 	PLAT_SEC_TEST
 
--- a/realtimenetprots/sipfw/ProfileAgent/Group/sipproxyrsv.mmp	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/Group/sipproxyrsv.mmp	Fri May 14 14:57:35 2010 +0300
@@ -43,6 +43,6 @@
 
 VENDORID 0x70000001
 
-CAPABILITY ProtServ NetworkServices ReadDeviceData WriteDeviceData
+CAPABILITY ProtServ NetworkServices ReadDeviceData WriteDeviceData NetworkControl
 
 SMPSAFE
--- a/realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileCacheItem.h	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileCacheItem.h	Fri May 14 14:57:35 2010 +0300
@@ -290,6 +290,18 @@
         */
 		TBool IsShutdownInitiated() const;
 		
+      /**
+        * System is about to go in Offline Mode
+        */
+        void OfflineInitiated(TBool aOfflineInitiated);
+
+        /**
+        * Tells if system is about to be Offline.
+        * @return ETrue if system Offline has been initiated
+        *         EFalse otherwise
+        */
+        TBool IsOfflineInitiated() const;
+		
 		/**
         * System is about to be shut down.
         */
@@ -554,11 +566,7 @@
 		* @param aStatus Status of the profile
 		*/
 		void HandleProfileError(TInt aError, 
-			CSIPConcreteProfile& aProfile);
-		/**
-		 * Function resets the boolean variable iIsShutdownInitiated
-		 */
-		void ResetShutdownvariable();
+			CSIPConcreteProfile& aProfile);		
 
 	private:
 
@@ -647,6 +655,9 @@
 		// ETrue if system shutdown has been initiated
 		TBool 						iIsShutdownInitiated;
 		
+		//ETrue if system offline has been initiated
+		TBool                       iIsOfflineInitiated;                    
+		
 		// ETrue if Rfs has been initiated
 		TBool                       iIsRfsInprogress;
 
--- a/realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileServerCore.h	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileServerCore.h	Fri May 14 14:57:35 2010 +0300
@@ -493,7 +493,7 @@
 		*Starts timer of type CDeltaTimer, 
 		*which callback is ConnectionCloseTimerExpired function
 		*/
-		void StartConnectionCloseTimer();
+		void StartConnectionCloseTimer(TInt aValue);
 		
 		/**
 		* A callback for CDeltaTimer
@@ -770,9 +770,23 @@
          */
         TBool CheckIapSettings(TUint32 aProfileId);
         
+        /**
+         * Issues the change of APN to PrimaryAPN 
+         */
         void UsePrimaryApn(TUint32 aIapId);
-
+        
+        /**
+         * Issues the change of APN to SecondaryAPN
+         */
         void UseBackupApn( TUint32 aIapId, TBool aFatalFailure = ETrue );
+        
+        /**
+         * Compares the two plugin typr info
+         * @returns ETrue if the match completely
+         * EFalse otherwise
+         */ 
+        static TBool Compare(const TSIPProfileTypeInfo& first,
+                        const TSIPProfileTypeInfo& second);
 		
         
 	private: // Data
@@ -821,8 +835,6 @@
 		//ApnManager
 		CSIPApnManager*                     iApnManager; // iBackupApnSettings;
 		RArray<TStoreSwitchEnabledProfile>                iWaitForApnSettings;
-
-		TBool 								iOfflineEventReceived;
 		
 		TBool									iFeatMgrInitialized;
 		
--- a/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileCacheItem.cpp	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileCacheItem.cpp	Fri May 14 14:57:35 2010 +0300
@@ -87,6 +87,7 @@
 	iIsVpnInUse = EFalse;
 	iInitialApnSelected = EFalse;
 	iApnSwitchEnabled = EFalse;
+	iIsOfflineInitiated = EFalse;
 	iDeltaTimerEntry.Set(iDeltaTimerCallBack);
 	}
 
@@ -1357,14 +1358,6 @@
 	iServerCore.SendErrorEvent(
 		*this, CSIPConcreteProfile::ERegistrationInProgress, KErrCancel );
 	}
-// -----------------------------------------------------------------------------
-// CSIPProfileCacheItem::ResetShutdownvariable
-// -----------------------------------------------------------------------------
-//
-void CSIPProfileCacheItem::ResetShutdownvariable()
-    {    
-    iIsShutdownInitiated = EFalse;
-    }
 
 // -----------------------------------------------------------------------------
 // CSIPProfileCacheItem::DefaultSNAPL
@@ -1384,3 +1377,28 @@
 		PROFILE_DEBUG3("CSIPProfileCacheItem::DefaultSNAPL with Value: ", aSnapId)
 		CleanupStack::PopAndDestroy();
 	}
+
+// -----------------------------------------------------------------------------
+// CSIPProfileCacheItem::OfflineInitiated
+// -----------------------------------------------------------------------------
+//
+void CSIPProfileCacheItem::OfflineInitiated(TBool aOfflineInitiated)
+    {
+    if(aOfflineInitiated)
+        {
+        iIsOfflineInitiated = ETrue;
+        iCurrentState->ShutdownInitiated(*this);
+        }
+    else
+        iIsOfflineInitiated = EFalse;    
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPProfileCacheItem::IsOfflineInitiated
+// -----------------------------------------------------------------------------
+//
+TBool CSIPProfileCacheItem::IsOfflineInitiated() const
+    {
+    return iIsOfflineInitiated;
+    }
+
--- a/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp	Fri May 14 14:57:35 2010 +0300
@@ -57,6 +57,7 @@
 
 const TInt KMicroSecInSec = 1000000;
 const TInt KIdleTimer = 2;
+const TInt KOfflineTimer = 5;
 
 // ============================ MEMBER FUNCTIONS ===============================
 
@@ -171,8 +172,6 @@
     iNotify = CSIPProfileStorageSecureBackup::NewL(this);
     
     iServer = CSIPProfileCSServer::NewL(*this);
-	
-	iOfflineEventReceived = EFalse;
     
     PROFILE_DEBUG1("ProfileServer started")
     }
@@ -291,8 +290,11 @@
             	}
         		
         	}
+        
+        //For Profiles which were in RegInProgress and has moved to Registered State,
+        //needs to be deregistered if Offline or RFs or Vpn if in Use has been triggered.
         TBool eventCompleted = EFalse;
-        if(item && (item->IsRfsInprogress() || iOfflineEventReceived ||
+        if(item && (item->IsRfsInprogress() || item->IsOfflineInitiated()  ||
                 (FeatureManager::FeatureSupported( KFeatureIdFfImsDeregistrationInVpn )&& 
                         item->IsVpnInUse())))
             {
@@ -305,19 +307,30 @@
                     {
                     count--;
                     }
-                else if (status == CSIPConcreteProfile::ERegistered )
+                else if (status == CSIPConcreteProfile::ERegistered)
                     {
-                    iProfileCache[i]->ShutdownInitiated();
-                    }
-                }
+                    if(item->IsOfflineInitiated())
+                        {                        
+                        //Don't do anything. If the ProfileStatusEvent = Registered in Offline, it
+                        //will only be for WLAN so don't deregister it. If ProfileStatusEvent = Deregistered
+                        //means application triggered deregistration so ProfileAgent should not attempt registering it.
+                        }
+                    else
+                        {
+                        iProfileCache[i]->ShutdownInitiated();
+                        }
+                    } //end if unregistered
             if ( !count )
                 eventCompleted = ETrue;
-            }
+                } //end for
+            } //end outer if
+        
+        
         if(eventCompleted)
             {
             if (item->IsRfsInprogress())
-                StartConnectionCloseTimer();
-            else if(iOfflineEventReceived)
+                StartConnectionCloseTimer(KIdleTimer);
+            else if(item->IsOfflineInitiated() )
                 ConfirmSystemstateMonitor(CSipSystemStateMonitor::ESystemState);
             else if((FeatureManager::FeatureSupported( KFeatureIdFfImsDeregistrationInVpn )&& 
                         item->IsVpnInUse()))
@@ -444,50 +457,56 @@
     {
     PROFILE_DEBUG3("CSIPProfileServerCore::SystemVariableUpdated System State changed to value", aValue)
     
-    //If the SystemState is Offline, turn the boolean variable to true so that Profile-Server
-    //can indicate System State monitor that event processing is completed, provided all the 
-    //profiles have got deregistered
-    if (CSipSystemStateMonitor::ESystemOffline == aValue)
-        iOfflineEventReceived = ETrue;
-    
-	if ( aVariable == CSipSystemStateMonitor::ESystemState &&
-	     (aValue == CSipSystemStateMonitor::ESystemShuttingDown || 
-	     aValue == CSipSystemStateMonitor::ESystemOffline
-			 ))
+	if ( aVariable == CSipSystemStateMonitor::ESystemState )
 	    {   
-	    TBool waitForDeregistration = EFalse;
-        for (TInt i = 0; i < iProfileCache.Count(); i++)
-            {
-            iProfileCache[i]->ShutdownInitiated();
-            CSIPConcreteProfile::TStatus status;
-            iPluginDirector->State(status, iProfileCache[i]->UsedProfile());
-            if(status != CSIPConcreteProfile::EUnregistered)
-                waitForDeregistration = ETrue;            
-            }
-        if(!waitForDeregistration)
-            {
-            ConfirmSystemstateMonitor(CSipSystemStateMonitor::ESystemState);
-            }
-	    }
-	//If the System State is Online, register all the profiles in always on mode
-	else if(aVariable == CSipSystemStateMonitor::ESystemState && 
-		aValue == CSipSystemStateMonitor::ESystemOnline)
-		{
-		iOfflineEventReceived = EFalse;
-		for (TInt i = 0; i < iProfileCache.Count(); i++)
-		    {
-		    iProfileCache[i]->ResetShutdownvariable();
-		    CSIPProfileCacheItem* item = iProfileCache[i];
-		    if (iProfileCache[i]->IsReferred())
-		        {
-                TRAPD(err, item->StartRegisterL(*iWaitForIAP, *iRegInProg, ETrue));
-		        if (err != KErrNone)
-		            {
-		            HandleAsyncError(*item,CSIPConcreteProfile::ERegistrationInProgress,err);
-		            }
-				}
-			}
-		}
+            // If the System is Shutting down
+            if(aValue == CSipSystemStateMonitor::ESystemShuttingDown)
+                {                
+                for (TInt i = 0; i < iProfileCache.Count(); i++)
+                    {
+                    iProfileCache[i]->ShutdownInitiated();                                
+                    }                
+                } //end if Shutdown
+            
+            //If the System receives Offline event
+            if(aValue == CSipSystemStateMonitor::ESystemOffline)
+                {                
+                StartConnectionCloseTimer(KOfflineTimer);
+                TBool waitForDeregistration = EFalse;
+                for (TInt i = 0; i < iProfileCache.Count(); i++)
+                    {
+                    iProfileCache[i]->OfflineInitiated(ETrue);
+                    CSIPConcreteProfile::TStatus status;
+                    iPluginDirector->State(status, iProfileCache[i]->UsedProfile());
+                    if(status != CSIPConcreteProfile::EUnregistered)
+                        waitForDeregistration = ETrue;            
+                    }
+                if(!waitForDeregistration)
+                    {
+                    ConfirmSystemstateMonitor(CSipSystemStateMonitor::ESystemState);
+                    }
+                } //end if Offline
+            
+            //If the System receives Online event
+            if(aValue == CSipSystemStateMonitor::ESystemOnline)
+                {                
+                for (TInt i = 0; i < iProfileCache.Count(); i++)
+                    {
+                    CSIPProfileCacheItem* item = iProfileCache[i];
+                    item->OfflineInitiated(EFalse);                    
+                    CSIPConcreteProfile::TStatus status;
+                    iPluginDirector->State(status, item->UsedProfile());
+                    if (item->IsReferred() && status == CSIPConcreteProfile::EUnregistered)
+                        {
+                        TRAPD(err, item->StartRegisterL(*iWaitForIAP, *iRegInProg, ETrue));
+                        if (err != KErrNone)
+                            {
+                            HandleAsyncError(*item,CSIPConcreteProfile::ERegistrationInProgress,err);
+                            }
+                        }
+                    }
+                } //end if Online           
+	    } //end if SystemState    
 	else if(aVariable == CSipSystemStateMonitor::ERfsState)
 	    {
 	    if(aValue == CSipSystemStateMonitor::ERfsStarted)
@@ -622,7 +641,12 @@
             CImplementationInformation* ecomInfo = infoArray[i];
             TSIPProfileTypeInfo info;
             ConvertTypeInfoL(*ecomInfo, info);
-            array.AppendL(info);
+            TIdentityRelation<TSIPProfileTypeInfo> identityRelation(CSIPProfileServerCore::Compare);
+            TInt alreadyExits = array.Find(info,identityRelation);
+            if(alreadyExits == KErrNotFound)
+                {
+                array.AppendL(info);
+                }
             }
         }
     CleanupStack::Pop(&infoArray);
@@ -1067,7 +1091,15 @@
                 }
             }
         else
-            User::LeaveIfError(KErrNotSupported);
+            {
+            // At this point the registration has failed fatally already and profile will be in 
+            // unregistered state. Since we cann't do any regisrtation related activity and 
+            // not to lose user's updated data we are doing this.
+            if(item->UsedProfile().Status() == CSIPConcreteProfile::EUnregistered)
+                {
+                item->ClearOldProfile();
+                }
+            }
         }
     else
         {
@@ -2123,11 +2155,11 @@
 // CSIPProfileServerCore::StartConnectionCloseTimer
 // -----------------------------------------------------------------------------
 //
-void CSIPProfileServerCore::StartConnectionCloseTimer()
+void CSIPProfileServerCore::StartConnectionCloseTimer(TInt aValue)
 	{
 	PROFILE_DEBUG1("CSIPProfileServerCore::StartConnectionCloseTimer")
 	iDeltaTimer->Remove(iDeltaTimerEntry);
-	TTimeIntervalMicroSeconds32 interval(KMicroSecInSec * KIdleTimer);
+	TTimeIntervalMicroSeconds32 interval(KMicroSecInSec * aValue);
 	iDeltaTimer->Queue(interval, iDeltaTimerEntry);
 	}
 
@@ -2139,7 +2171,33 @@
 	{
 	PROFILE_DEBUG1("CSIPProfileServerCore::ConnectionCloseTimerExpired")
 	CSIPProfileServerCore* self = reinterpret_cast<CSIPProfileServerCore*>(aPtr);
-  	self->ConfirmSystemstateMonitor(CSipSystemStateMonitor::ERfsState);
+	
+	TBool IsOffline = self->iProfileCache[0]->IsOfflineInitiated();
+	if(IsOffline)
+	    {
+	    self->ConfirmSystemstateMonitor(CSipSystemStateMonitor::ESystemState);	    	        
+        for (TInt i = 0; i < self->iProfileCache.Count(); i++)
+            {            
+            CSIPProfileCacheItem* item = self->iProfileCache[i];
+            CSIPConcreteProfile::TStatus status;
+            self->iPluginDirector->State( status, self->iProfileCache[i]->UsedProfile() );
+            item->OfflineInitiated(EFalse);
+            if (item->IsReferred() && (!self->iApnManager->IsIapGPRSL(item->Profile().IapId())) 
+                    && status == CSIPConcreteProfile::EUnregistered) 
+                {                
+                TRAPD(err, item->StartRegisterL(*(self->iWaitForIAP), *(self->iRegInProg), ETrue));
+                if (err != KErrNone)
+                    {
+                    self->HandleAsyncError(*item,CSIPConcreteProfile::ERegistrationInProgress,err);
+                    }                  
+                }
+            else
+                {}           
+            } //end for	    	    
+	    }//end Outer If
+	else
+	    self->ConfirmSystemstateMonitor(CSipSystemStateMonitor::ERfsState);
+	
   	return ETrue;
 	}
 
@@ -2149,9 +2207,8 @@
 //
 void CSIPProfileServerCore::ConfirmSystemstateMonitor(
 	CSipSystemStateMonitor::TSystemVariable aVariable)
-	{
-		iSystemStateMonitor->EventProcessingCompleted(
-		        aVariable, 0, *this);
+	{    
+        iSystemStateMonitor->EventProcessingCompleted(aVariable, 0, *this);
 	}
 	
 // ----------------------------------------------------------------------------
@@ -2353,11 +2410,34 @@
     }
 
 // ----------------------------------------------------------------------------
+// CSIPProfileServerCore::Compare
+// ----------------------------------------------------------------------------
+//
+TBool CSIPProfileServerCore::Compare(const TSIPProfileTypeInfo& first,
+        const TSIPProfileTypeInfo& second)
+    {
+    TInt result = first.iSIPProfileName.Compare(second.iSIPProfileName);
+    return ( 0 == result && first.iSIPProfileClass == second.iSIPProfileClass);
+    }
+
+// ----------------------------------------------------------------------------
 // CSIPProfileServerCore::IsUpdateAllowed
 // ----------------------------------------------------------------------------
 //
 TBool CSIPProfileServerCore::IsUpdateAllowed( CSIPConcreteProfile *aProfile )
     {
-    PROFILE_DEBUG1("CSIPIMSProfileAgent::IsUpdateAllowed, enter")
-    return !(iApnManager->IsFailed(aProfile->IapId()));
+    PROFILE_DEBUG1("CSIPProfileServerCore::IsUpdateAllowed, enter")
+    TBool allowed(ETrue);     
+    CSIPProfileCacheItem* item = ProfileCacheItem(aProfile->Id());
+    if(item)
+        {
+        CSIPConcreteProfile& profile = item->LatestProfile();
+        TBool iapIdChange(profile.IapId()!=aProfile->IapId());
+        if(iapIdChange && 
+            (iApnManager->IsFailed(aProfile->IapId()) || iApnManager->IsFailed(profile.IapId())))
+            {
+            allowed = EFalse;
+            }
+        }
+    return allowed;
     }
--- a/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileStateUnregistered.cpp	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileStateUnregistered.cpp	Fri May 14 14:57:35 2010 +0300
@@ -114,7 +114,7 @@
 		TBool isVpnInUse = (FeatureManager::FeatureSupported( KFeatureIdFfImsDeregistrationInVpn )
                                 && aItem.IsVpnInUse());
 		
-        if ( aItem.IsReferred() && !aItem.IsShutdownInitiated() &&
+        if ( aItem.IsReferred() && !aItem.IsShutdownInitiated() && !aItem.IsOfflineInitiated() &&
                 !aItem.IsRfsInprogress() && !isVpnInUse)
             {
             aItem.ClearOldProfile();
--- a/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CTransport.cpp	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CTransport.cpp	Fri May 14 14:57:35 2010 +0300
@@ -610,7 +610,12 @@
 				// Sent-by is now set for the first time, must set the port too
 				if ( receivePort == 0 )
 		            {
-		            receivePort = KDefaultSipPort;
+                    //If the Transport in the outgoing request is TLS and port value = 0
+                    //provide 5061 for TLS and 5060 for UDP/TCP
+                    if(SIPStrings::StringF(SipStrConsts::ETLS) == viaHeader->Transport())
+                        receivePort = KDefaultSipsPort;
+                    else
+                        receivePort = KDefaultSipPort;
 		            }
 	        	}
 	        if ( receivePort )
Binary file realtimenetprots/sipfw/conf/sipframework_101f413c.crml has changed
--- a/realtimenetprots/sipfw/rom/sipsw.iby	Mon May 03 12:50:54 2010 +0300
+++ b/realtimenetprots/sipfw/rom/sipsw.iby	Fri May 14 14:57:35 2010 +0300
@@ -77,7 +77,7 @@
 
 ECOM_PLUGIN(siptls.dll,siptls.rsc)
 
-#ifdef SYMBIAN_EXCLUDE_IPSEC
+#ifndef __IPSEC
 REM Feature IPSEC not included in this rom
 #else
 ECOM_PLUGIN(sipipsec.dll,sipipsec.rsc)
@@ -103,14 +103,13 @@
 
 ECOM_PLUGIN(sipietfagnt.dll,sipietfagnt.rsc) 
 
+#ifndef FF_EXCLUDE_STANDARD_IMSAGENT 
 ECOM_PLUGIN(sipimsagnt.dll,sipimsagnt.rsc)
+#endif
 
 /* Resources - XML for secure profile backup*/
 data=ZPRIVATE\101F413C\backup_registration.xml private\101F413C\backup_registration.xml
 
-// ProfileAgent's default cre file
-data=DATAZ_\private\10202be9\101f413c.cre private\10202be9\101f413c.cre
-
 #endif /* SYMBIAN_EXCLUDE_SIP*/
 
 #endif /* __SIPSW_IBY__ */
--- a/sipplugins/group/bld.inf	Mon May 03 12:50:54 2010 +0300
+++ b/sipplugins/group/bld.inf	Fri May 14 14:57:35 2010 +0300
@@ -19,7 +19,6 @@
 
 
 #include "../sippwlanplugin/group/bld.inf"
-#include "../sippsipsettingsui/group/bld.inf"
 #include "../sippdevmgmtsipadapter/group/bld.inf"
 #include "../sippsystemstatemonitor/group/bld.inf"
 #include "../sippsipadapter/group/bld.inf"
--- a/sipproviderplugins/sipprovider/sipconnectionplugins/group/bld.inf	Mon May 03 12:50:54 2010 +0300
+++ b/sipproviderplugins/sipprovider/sipconnectionplugins/group/bld.inf	Fri May 14 14:57:35 2010 +0300
@@ -26,7 +26,7 @@
 
 ../data/esock_sip.cmi      			z:/private/101f7988/esock_sip.cmi
 
-../group/sipproviders.iby            /epoc32/rom/include/sipproviders.iby
+../group/sipproviders.iby            CORE_MW_LAYER_IBY_EXPORT_PATH(sipproviders.iby)
 
 PRJ_MMPFILES
 sipproviders.mmp
--- a/sipproviderplugins/sipprovider/sipdummyprt/group/bld.inf	Mon May 03 12:50:54 2010 +0300
+++ b/sipproviderplugins/sipprovider/sipdummyprt/group/bld.inf	Fri May 14 14:57:35 2010 +0300
@@ -21,13 +21,13 @@
 */
 
 PRJ_EXPORTS
-../group/SIPDummyPRT.iby   /epoc32/rom/include/sipdummyprt.iby
+../group/SIPDummyPRT.iby   CORE_MW_LAYER_IBY_EXPORT_PATH(sipdummyprt.iby)
 ../data/sip.providers.esk  z:/private/101f7989/esock/sip.providers.esk
 
 
 #ifndef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
 
-../group/siphlapi.iby      /epoc32/rom/include/siphlapi.iby
+../group/siphlapi.iby      CORE_MW_LAYER_IBY_EXPORT_PATH(siphlapi.iby)
 ../data/esock_sip.cmi      z:/private/101f7988/esock_sip.cmi
 
 #endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
--- a/sipproviderplugins/sipprovider/sipstatemachine/group/bld.inf	Mon May 03 12:50:54 2010 +0300
+++ b/sipproviderplugins/sipprovider/sipstatemachine/group/bld.inf	Fri May 14 14:57:35 2010 +0300
@@ -25,5 +25,5 @@
 SipStateMachine.mmp
 
 PRJ_EXPORTS
-../group/SipStateMachine.iby /epoc32/rom/include/sipstatemachine.iby
+../group/SipStateMachine.iby	CORE_MW_LAYER_IBY_EXPORT_PATH(sipstatemachine.iby)
 ../inc/siphlerr.h 	SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(siphlerr.h)
\ No newline at end of file