Catchup to latest Symbian^4 GCC_SURGE
authorWilliam Roberts <williamr@symbian.org>
Thu, 22 Jul 2010 16:37:20 +0100
branchGCC_SURGE
changeset 36 f91588750b61
parent 28 0cae6035b266 (current diff)
parent 35 a858c2cf6a45 (diff)
Catchup to latest Symbian^4
package_definition.xml
package_definition_v2.xml
realtimenetprots/sipfw/Data/101f413c.cre
realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/sipphoneregistrationmonitor.h
realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/sipphoneregistrationobserver.h
realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipphoneregistrationmonitor.cpp
--- a/group/bld.inf	Thu Jun 17 22:31:40 2010 +0100
+++ b/group/bld.inf	Thu Jul 22 16:37:20 2010 +0100
@@ -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/package_definition.xml	Thu Jun 17 22:31:40 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<SystemDefinition schema="3.0.0">
-  <package id="ipappprotocols" name="IP App Protocols" levels="plugin conn server if">
-    <collection id="rtp" name="RTP" level="server">
-      <component id="rtpstack" filter="s60" name="RTP Stack">
-        <unit bldFile="rtp/rtpstack/group"/>
-        <!-- <unit bldFile="rtp/rtpstack/tsrc/ut_rtpstack/group"/> -->
-      </component>
-    </collection>
-    <collection id="sipplugins" name="SIP Plugins" level="plugin">
-      <component id="sippwlanplugin" filter="s60" name="SIP WLAN Plugin" class="plugin">
-        <unit bldFile="sipplugins/sippwlanplugin/group"/>
-      </component>
-      <component id="sippsipsettingsui" filter="s60" name="SIP Settings UI" class="plugin">
-        <unit bldFile="sipplugins/sippsipsettingsui/group"/>
-        <!-- <unit bldFile="sipplugins/sippsipsettingsui/tsrc/ut_sipsettingsui/group"/> -->
-      </component>
-      <component id="sippdevmgmtsipadapter" filter="s60" name="Device Management SIP Settings Adapter" class="plugin">
-        <unit bldFile="sipplugins/sippdevmgmtsipadapter/group"/>
-        <!-- <unit bldFile="sipplugins/sippdevmgmtsipadapter/tsrc/ut_cnsmldmsipadapter/group"/> -->
-      </component>
-      <component id="sippsystemstatemonitor" filter="s60" name="SIP System State Monitor" class="plugin">
-        <unit bldFile="sipplugins/sippsystemstatemonitor/group"/>
-      </component>
-      <component id="srtpstack" filter="s60" name="SRTP Stack">
-        <unit bldFile="rtp/srtpstack/group"/>
-        <!-- <unit bldFile="rtp/srtpstack/tsrc/ut_srtpstack/group"/> -->
-      </component>
-    </collection>
-    <collection id="realtimenetprots" name="Real Time Net Protocols" level="server">
-      <component id="symrtp" name="RTP" introduced="9.0" purpose="optional">
-        <!-- Real Time Data Protocol -->
-        <unit bldFile="realtimenetprots/rtp/group" mrp="realtimenetprots/rtp/group/mm-protocols_rtp.mrp"/>
-      </component>
-      <component id="sipfw" name="SIP Framework" introduced="9.2" purpose="optional">
-        <unit version="2" bldFile="realtimenetprots/sipfw/Group" mrp="realtimenetprots/sipfw/Group/mm-protocols_SIP2_Com.mrp"/>
-      </component>
-    </collection>
-    <collection id="sipproviderplugins" name="SIP Provider Plugins" level="conn">
-      <component id="sipprovider" name="SIP Provider" introduced="^2" purpose="optional" class="plugin">
-        <unit bldFile="sipproviderplugins/sipprovider/group" mrp="sipproviderplugins/sipprovider/group/mm-protocols_SipProvider.mrp"/>
-      </component>
-    </collection>
-    <collection id="ipappprotocols_info" name="IP App Protocols Info" level="if">
-      <component id="ipappprotocols_plat" filter="s60" name="IP App Protocols Platform Interfaces" class="api">
-        <unit bldFile="ipappprotocols_plat/group"/>
-      </component>
-      <component id="ipappprotocols_metadata" name="IP App Protocols Metadata" class="config" introduced="^2" purpose="development" target="desktop">
-        <unit mrp="ipappprotocols_info/ipappprotocols_metadata/ipappprotocols_metadata.mrp"/>
-      </component>
-    </collection>
-  </package>
-</SystemDefinition>
--- a/package_definition_v2.xml	Thu Jun 17 22:31:40 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<SystemDefinition schema="3.0.0">
-  <package id="ipappprotocols" name="IP App Protocols" levels="plugin conn server if">
-    <collection id="rtp" name="RTP" level="server">
-      <component id="rtpstack" filter="s60" name="RTP Stack">
-        <unit bldFile="rtp/rtpstack/group"/>
-        <!-- <unit bldFile="rtp/rtpstack/tsrc/ut_rtpstack/group"/> -->
-      </component>
-    </collection>
-    <collection id="sipplugins" name="SIP Plugins" level="plugin">
-      <component id="sippwlanplugin" filter="s60" name="SIP WLAN Plugin" class="plugin">
-        <unit bldFile="sipplugins/sippwlanplugin/group"/>
-      </component>
-      <component id="sippsipsettingsui" filter="s60" name="SIP Settings UI" class="plugin">
-        <unit bldFile="sipplugins/sippsipsettingsui/group"/>
-        <!-- <unit bldFile="sipplugins/sippsipsettingsui/tsrc/ut_sipsettingsui/group"/> -->
-      </component>
-      <component id="sippdevmgmtsipadapter" filter="s60" name="Device Management SIP Settings Adapter" class="plugin">
-        <unit bldFile="sipplugins/sippdevmgmtsipadapter/group"/>
-        <!-- <unit bldFile="sipplugins/sippdevmgmtsipadapter/tsrc/ut_cnsmldmsipadapter/group"/> -->
-      </component>
-      <component id="sippsystemstatemonitor" filter="s60" name="SIP System State Monitor" class="plugin">
-        <unit bldFile="sipplugins/sippsystemstatemonitor/group"/>
-      </component>
-      <component id="srtpstack" filter="s60" name="SRTP Stack">
-        <unit bldFile="rtp/srtpstack/group"/>
-        <!-- <unit bldFile="rtp/srtpstack/tsrc/ut_srtpstack/group"/> -->
-      </component>
-    </collection>
-    <collection id="realtimenetprots" name="Real Time Net Protocols" level="server">
-      <component id="symrtp" name="RTP" introduced="9.0" purpose="optional">
-        <!-- Real Time Data Protocol -->
-        <unit bldFile="realtimenetprots/rtp/group" mrp="realtimenetprots/rtp/group/mm-protocols_rtp.mrp"/>
-      </component>
-      <component id="srtp" name="Secure RTP" introduced="^4" purpose="optional">
-        <unit bldFile="realtimenetprots/srtp/group" mrp="realtimenetprots/srtp/group/mm-protocols_srtp.mrp"/>
-      </component>
-      <component id="sipfw" name="SIP Framework" introduced="9.2" purpose="optional">
-        <unit version="2" bldFile="realtimenetprots/sipfw/Group" mrp="realtimenetprots/sipfw/Group/mm-protocols_SIP2_Com.mrp"/>
-      </component>
-    </collection>
-    <collection id="sipproviderplugins" name="SIP Provider Plugins" level="conn">
-      <component id="sipprovider" name="SIP Provider" introduced="^2" purpose="optional" class="plugin">
-        <unit bldFile="sipproviderplugins/sipprovider/group" mrp="sipproviderplugins/sipprovider/group/mm-protocols_SipProvider.mrp"/>
-      </component>
-    </collection>
-    <collection id="ipappprotocols_info" name="IP App Protocols Info" level="if">
-      <component id="ipappprotocols_plat" filter="s60" name="IP App Protocols Platform Interfaces" class="api">
-        <unit bldFile="ipappprotocols_plat/group"/>
-      </component>
-      <component id="ipappprotocols_metadata" name="IP App Protocols Metadata" class="config" introduced="^2" purpose="development" target="desktop">
-        <unit mrp="ipappprotocols_info/ipappprotocols_metadata/ipappprotocols_metadata.mrp"/>
-      </component>
-    </collection>
-  </package>
-</SystemDefinition>
--- a/realtimenetprots/rtp/cfrtp/group/bld.inf	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/rtp/cfrtp/group/bld.inf	Thu Jul 22 16:37:20 2010 +0100
@@ -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/cfrtp/src/rtpflowfactory.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/rtp/cfrtp/src/rtpflowfactory.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -96,7 +96,7 @@
              protocolDescription->iServiceInfo     = KSIConnectionLess | KSIDatagram |
                                      KSIGracefulClose | KSIPeekData |
                                      KSIRequiresOwnerInfo;
-             protocolDescription->iNamingServices      = KNSNameResolution | KNSRequiresConnectionStartup;
+             protocolDescription->iNamingServices      = 0;
              protocolDescription->iSecurity    = KSocketNoSecurity;
              protocolDescription->iMessageSize     = 65536-128; /*KSocketMessageSizeUndefined;*/
              protocolDescription->iServiceTypeInfo  = ESocketSupport | ETransport |
@@ -116,7 +116,7 @@
              protocolDescription->iServiceInfo     = KSIConnectionLess | KSIDatagram |
                                      KSIGracefulClose | KSIPeekData |
                                      KSIRequiresOwnerInfo;
-             protocolDescription->iNamingServices      = KNSNameResolution | KNSRequiresConnectionStartup;
+             protocolDescription->iNamingServices      = 0;
              protocolDescription->iSecurity    = KSocketNoSecurity;
              protocolDescription->iMessageSize     = 65536-128; /*KSocketMessageSizeUndefined;*/
              protocolDescription->iServiceTypeInfo  = ESocketSupport | ETransport |
--- a/realtimenetprots/rtp/group/bld.inf	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/rtp/group/bld.inf	Thu Jul 22 16:37:20 2010 +0100
@@ -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	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/rtp/rtpcore/group/bld.inf	Thu Jul 22 16:37:20 2010 +0100
@@ -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	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/rtp/shimrtp/eabi/rtpmu.def	Thu Jul 22 16:37:20 2010 +0100
@@ -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	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/rtp/shimrtp/group/bld.inf	Thu Jul 22 16:37:20 2010 +0100
@@ -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	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/rtp/shimrtp/src/rtp/rtcp.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -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	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/rtp/shimrtp/src/stubs/rtcp_stub.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -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	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/Group/bld.inf	Thu Jul 22 16:37:20 2010 +0100
@@ -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/ApnManager/inc/sipapnconfigurationhandler.h	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/ApnManager/inc/sipapnconfigurationhandler.h	Thu Jul 22 16:37:20 2010 +0100
@@ -24,10 +24,11 @@
 #include <etelpckt.h>
 #include <es_enum.h>
 #include <es_enum_partner.h>
+#include <centralrepository.h>
 #include "sipapnmanager.h"
 
 // CONSTANTS
-const TInt KSecondaryApnMaxRetryCount = 100;
+const TInt KDBMaxRetryCount = 100;
 
 // FORWARD DECLARATIONS
 class CCommsDatabase;
@@ -107,7 +108,7 @@
         
         void WatchConnectionStatusChange();
         
-        void WatchDatabaseStatusChangeL( TUint32 aIapId );
+        void WatchDatabaseStatusChangeL();
         
         TBool ApnChangeNeededL( const TDesC8& aApn );
         
@@ -139,10 +140,8 @@
         
         /**
         * Reads the APN of specified IAP.
-        * @param aIapId IAP id
-        * @return APN or NULL if not found. Ownership is transferred.
         */
-        HBufC8* ReadCurrentApnL();
+        void ReadCurrentApnL();
         
 
 	private: // Constructors
@@ -153,39 +152,39 @@
 
 		/// 2nd phase constructor
 		void ConstructL();
+		
+		void BlockCellularDataUsageL();
+		
+		void AllowCellularDataUsage();
+
+		
+	    /**
+	    * Rollsback db in case of failure      
+	        * @param aDb 
+	    */
+	    static void RollBackDBTransaction(TAny* aDb);
 
 	private: // Data
 	
-		MSIPApnChangeObserver& iObserver;
-	    
-	    TSipApnMonitoringState iMonitoringState;
-
-		RSocketServ iSocketSrv;
-		
-		RConnection iConnection;
-		
-		TPckgBuf<TConnectionInfo> iConnectionInfo;
-        
-        TNifProgressBuf iProgress;
-        
-        HBufC8* iApnProposal;
-        
-        TUint32 iIapId;
-        
-        CCommsDatabase* iCommsDatabase;
-        
-        TInt iMonitoringRetryCount;
-        
-        HBufC8* iCurrentApn;
-        
-        TBool iApnUseSecureAuthProposal;
-        
-        TBool iIsFailed;
-        
-        TBool iIsFatalFailure;
-        
-        HBufC8* iPrimaryApn;
-        HBufC8* iSecondaryApn;
+		MSIPApnChangeObserver&          iObserver;    
+	    TSipApnMonitoringState          iMonitoringState;
+		RSocketServ                     iSocketSrv;
+		RConnection                     iConnection;
+		TPckgBuf<TConnectionInfo>       iConnectionInfo;
+        TNifProgressBuf                 iProgress;
+        HBufC8*                         iApnProposal;
+        TUint32                         iIapId;
+        CCommsDatabase*                 iCommsDatabase;
+        TInt                            iDBMonitoringRetryCount;
+        HBufC8*                         iCurrentApn;
+        TBool                           iApnUseSecureAuthProposal;
+        TBool                           iIsFailed;
+        TBool                           iIsFatalFailure;
+        HBufC8*                         iPrimaryApn;
+        HBufC8*                         iSecondaryApn;
+        CRepository*                    iRepository;
+        TInt                            iCurrentUsageStatus;
+        TBool                           iCellularDataBlocked;
         
 #ifdef CPPUNIT_TEST	
 	    friend class CSIPApnManagerTest;
--- a/realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnconfigurationhandler.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnconfigurationhandler.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -19,6 +19,8 @@
 #include <commsdattypesv1_1.h>
 #include <commdb.h>
 #include <commsdat.h>
+#include <cmgenconnsettings.h>
+#include <cmmanagerkeys.h>
 #include "sipapnconfigurationhandler.h"
 #include "SipProfileLog.h"
 
@@ -58,17 +60,15 @@
 	{
 	PROFILE_DEBUG1( 
 	        "CSIPApnConfigurationHandler::~CSIPApnConfigurationHandler()" )
-	
+	        
 	Cancel();
 	iConnection.Close();
 	iSocketSrv.Close();
-	
 	delete iApnProposal;
 	delete iCurrentApn;
-	
     delete iPrimaryApn;
     delete iSecondaryApn;
-    
+    delete iRepository;
 	delete iCommsDatabase;
 	
 	PROFILE_DEBUG1( 
@@ -105,7 +105,7 @@
         return;
         }
     
-    iMonitoringRetryCount = 0;
+    iDBMonitoringRetryCount = 0;
     
     ChangeApnIfNotInUseL( aAllowAsync );
         
@@ -126,7 +126,7 @@
 // CSIPApnConfigurationHandler::ReadCurrentApnL
 // -----------------------------------------------------------------------------
 //
-HBufC8* CSIPApnConfigurationHandler::ReadCurrentApnL()
+void CSIPApnConfigurationHandler::ReadCurrentApnL()
 	{
 	HBufC8* apn(NULL);
 		
@@ -193,15 +193,13 @@
 		
 		delete iCurrentApn;
 		iCurrentApn = NULL;
-		iCurrentApn = apn->AllocL();
+		iCurrentApn = apn;
         }
     
     db->ClearAttributeMask( ECDHidden );
     
     CleanupStack::PopAndDestroy( iapRecord );
     CleanupStack::PopAndDestroy( db );
-    
-    return apn;
 	}
 
 // -----------------------------------------------------------------------------
@@ -285,6 +283,11 @@
     PROFILE_DEBUG3( 
             "CSIPApnConfigurationHandler::RunError() err", aError );
     
+    if(iCellularDataBlocked)
+        {
+        AllowCellularDataUsage();
+        }
+    
     if ( aError != KErrNoMemory && aError != KErrNone )
         {
         iObserver.ApnChanged( *iApnProposal, iIapId, aError );
@@ -307,7 +310,8 @@
 	CActiveScheduler::Add( this );
 	iIapId = aIapId;
 	iIsFailed = EFalse;
-	iIsFatalFailure = EFalse; 
+	iIsFatalFailure = EFalse;
+	iCellularDataBlocked = EFalse;
 	}
 
 // -----------------------------------------------------------------------------
@@ -320,7 +324,8 @@
 	        "CSIPApnConfigurationHandler::ConstructL()" )
 	
 	User::LeaveIfError( iSocketSrv.Connect() );
-	
+	iRepository = CRepository::NewL( KCRUidCmManager );
+	ReadCurrentApnL();
 	PROFILE_DEBUG1( 
 	        "CSIPApnConfigurationHandler::ConstructL() exit" )
 	}
@@ -426,7 +431,7 @@
 // CSIPApnConfigurationHandler::WatchDatabaseStatusChangeL
 // -----------------------------------------------------------------------------
 //	
-void CSIPApnConfigurationHandler::WatchDatabaseStatusChangeL( TUint32 aIapId )
+void CSIPApnConfigurationHandler::WatchDatabaseStatusChangeL()
     {
     PROFILE_DEBUG1( 
             "CSIPApnConfigurationHandler::WatchDatabaseStatusChangeL()" )
@@ -436,22 +441,26 @@
     if ( !iCommsDatabase )
         {
         PROFILE_DEBUG1( 
-                "CSIPApnConfigurationHandler::   create commsdb" )
+                "CSIPApnConfigurationHandler::WatchDatabaseStatusChangeL create commsdb" )
         iCommsDatabase = CCommsDatabase::NewL();
         }
     
     PROFILE_DEBUG1( 
-            "CSIPApnConfigurationHandler::   request notification" )
+            "CSIPApnConfigurationHandler::WatchDatabaseStatusChangeL request notification" )
     
     // Start monitoring for db events, there will be lots of them pouring in
     // as there's no filtering feature. We are interested only in
     // unlocked events.    
+
+    if(iDBMonitoringRetryCount > KDBMaxRetryCount)
+        {
+        PROFILE_DEBUG1("CSIPApnConfigurationHandler::WatchDatabaseStatusChangeL max retries reached!" )       
+        User::Leave( KErrAbort );
+        }
+    
     User::LeaveIfError( iCommsDatabase->RequestNotification( iStatus ) );
-    
     SetActive();
-    
-    iIapId = aIapId;
-        
+          
     SetMonitoringState( EMonitoringDatabase );
     
     PROFILE_DEBUG1( 
@@ -468,16 +477,12 @@
             "CSIPApnConfigurationHandler::ApnChangeNeededL()" )
 
  	TBool apnChangeNeeded( EFalse );
- 	HBufC8* currentApn = ReadCurrentApnL();
-
-	if ( currentApn && currentApn->Compare( aApn ) != 0 )
+	if ( iCurrentApn && iCurrentApn->Compare( aApn ) != 0 )
         {
         // Apn is not the same as wanted
         apnChangeNeeded = ETrue;
         }
 
-	delete currentApn;
-
 	PROFILE_DEBUG3( 
 	        "CSIPApnConfigurationHandler::ApnChangeNeededL(), apnChangeNeeded",
 	        apnChangeNeeded )
@@ -542,7 +547,7 @@
         
             __ASSERT_ALWAYS( aAllowAsync, User::Leave( KErrInUse ) );
         
-            WatchDatabaseStatusChangeL( iIapId );
+            WatchDatabaseStatusChangeL();
             }
         else 
             {
@@ -570,8 +575,12 @@
     
    	using namespace CommsDat;
 	
-	CMDBSession* db = CMDBSession::NewL( CMDBSession::LatestVersion() );
+	CMDBSession* db = CMDBSession::NewL( KCDVersion1_1 );
     CleanupStack::PushL( db );
+    
+	db->OpenTransactionL();
+    CleanupStack::PushL(TCleanupItem(RollBackDBTransaction, db));
+    
     // Set attributes so that also protected iaps can be accessed
     db->SetAttributeMask( ECDHidden | ECDProtectedWrite ); 
 
@@ -647,9 +656,19 @@
     db->ClearAttributeMask( ECDHidden | ECDProtectedWrite );
     
     CleanupStack::PopAndDestroy( iapRecord );
+    
+    db->CommitTransactionL();
+    
+	CleanupStack::Pop(); //cleanup item
+	
     CleanupStack::PopAndDestroy( db );
     
-    SendApnChangedNotificationL( aApn );
+    if (iCellularDataBlocked)
+        {
+        AllowCellularDataUsage();
+        }  
+    
+    SendApnChangedNotificationL( aApn );        
     
     PROFILE_DEBUG1( 
             "CSIPApnConfigurationHandler::ChangeApnL(), exit" )
@@ -701,10 +720,10 @@
 void CSIPApnConfigurationHandler::ConnectionMonitoringCompletedL( TInt aError )
     {
 	PROFILE_DEBUG3( 
-	        "CSIPApnConfigurationHandler::   progress.err",
+	        "CSIPApnConfigurationHandler::ConnectionMonitoringCompletedL   progress.err",
 	        iProgress().iError );
 	PROFILE_DEBUG3( 
-	        "CSIPApnConfigurationHandler::   progress.stage",
+	        "CSIPApnConfigurationHandler::ConnectionMonitoringCompletedL   progress.stage",
 	        iProgress().iStage );
 	                
     if ( !aError )
@@ -748,30 +767,19 @@
         {
         // Changing may be now possible, if not, db notifications or connection
         // monitoring is re-enabled inside following method
+        PROFILE_DEBUG1("DatabaseMonitoringCompletedL::DatabaseMonitoringCompletedL BlockCellularDataUsageL" );
+        BlockCellularDataUsageL();
         apnChanged = ChangeApnIfNotInUseL();
         }
     else
         {
-        WatchDatabaseStatusChangeL( iIapId );
+        iDBMonitoringRetryCount++;
+        WatchDatabaseStatusChangeL();        
         }
     
-    // Have some safety limit for monitoring as it's not guaranteed that
-    // db lock is ever released -> avoid unnecessary battery consumption    
-    if ( !apnChanged )
+    if(apnChanged)
         {
-        iMonitoringRetryCount++;
-        PROFILE_DEBUG3( 
-                "DatabaseMonitoringCompletedL::   retrycount",
-                iMonitoringRetryCount );
-        
-        if ( iMonitoringRetryCount > KSecondaryApnMaxRetryCount )
-            {
-            PROFILE_DEBUG1( 
-                "CSIPApnConfigurationHandler::   max retries reached!" )
-            Cancel();
-            
-            User::Leave( KErrAbort );
-            }
+        iDBMonitoringRetryCount = 0;
         }
     }
 
@@ -783,13 +791,12 @@
     const TDesC8& aNewApn, 
     TInt aError )
     {
-    if ( !IsPrimaryApnUsed() )
+    HBufC8* currentApn = aNewApn.AllocL();
+    delete iCurrentApn;
+    iCurrentApn = NULL;
+    iCurrentApn = currentApn;
+    if ( IsPrimaryApnUsed() )
         {
-        HBufC8* currentApn = aNewApn.AllocL();
-        delete iCurrentApn;
-        iCurrentApn = NULL;
-        iCurrentApn = currentApn;
-        
         iObserver.ApnChanged( *iCurrentApn, iIapId, aError );
         }
     }
@@ -902,4 +909,40 @@
         }
     }
 
+// -----------------------------------------------------------------------------
+// CSIPApnConfigurationHandler::BlockCellularDataUsageL
+// -----------------------------------------------------------------------------
+//
+void CSIPApnConfigurationHandler::BlockCellularDataUsageL()
+    {
+    PROFILE_DEBUG1("DatabaseMonitoringCompletedL::BlockCellularDataUsageL Enter" );
+    //Current Usage Status;
+    iRepository->Get( KCurrentCellularDataUsage, iCurrentUsageStatus );
+    iRepository->Set( KCurrentCellularDataUsage, ECmCellularDataUsageDisabled );
+    iCellularDataBlocked = ETrue;
+    PROFILE_DEBUG1("DatabaseMonitoringCompletedL::BlockCellularDataUsageL Exit" );
+    }
+// -----------------------------------------------------------------------------
+// CSIPApnConfigurationHandler::AllowCellularDataUsage
+// -----------------------------------------------------------------------------
+//
+void CSIPApnConfigurationHandler::AllowCellularDataUsage()
+    {
+    PROFILE_DEBUG1("DatabaseMonitoringCompletedL::AllowCellularDataUsage Enter" );
+    iRepository->Set( KCurrentCellularDataUsage, iCurrentUsageStatus );
+    iDBMonitoringRetryCount = 0;
+    iCellularDataBlocked = EFalse;
+    PROFILE_DEBUG1("DatabaseMonitoringCompletedL::AllowCellularDataUsage Exit" );
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPApnConfigurationHandler::RollBackDBTransaction
+// -----------------------------------------------------------------------------
+//
+void CSIPApnConfigurationHandler::RollBackDBTransaction(TAny* aDb)
+    {
+    CMDBSession* db = static_cast<CMDBSession*>(aDb);
+    TRAP_IGNORE(db->RollbackTransactionL());
+    }
+
 // End of file
--- a/realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnmanager.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnmanager.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -216,7 +216,7 @@
     {
     TBool isIapGPRS(EFalse);          
     using namespace CommsDat;        
-    CMDBSession* db = CMDBSession::NewL( CMDBSession::LatestVersion() );
+    CMDBSession* db = CMDBSession::NewL( KCDVersion1_1 );
     CleanupStack::PushL( db );
     // Set any attributes if any
     db->SetAttributeMask( ECDHidden );    
--- a/realtimenetprots/sipfw/ProfileAgent/Group/sipietfagent.mmp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/Group/sipietfagent.mmp	Thu Jul 22 16:37:20 2010 +0100
@@ -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	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/Group/sipimsagent.mmp	Thu Jul 22 16:37:20 2010 +0100
@@ -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	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/Group/sipprofilefsm.mmp	Thu Jul 22 16:37:20 2010 +0100
@@ -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	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/Group/sipprofileserver.mmp	Thu Jul 22 16:37:20 2010 +0100
@@ -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	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/Group/sipproxyrsv.mmp	Thu Jul 22 16:37:20 2010 +0100
@@ -43,6 +43,6 @@
 
 VENDORID 0x70000001
 
-CAPABILITY ProtServ NetworkServices ReadDeviceData WriteDeviceData
+CAPABILITY ProtServ NetworkServices ReadDeviceData WriteDeviceData NetworkControl
 
 SMPSAFE
--- a/realtimenetprots/sipfw/ProfileAgent/IETF_Agent/src/Sipietfprofilecontext.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/IETF_Agent/src/Sipietfprofilecontext.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -494,11 +494,11 @@
 	return (aError == K503ServiceUnavailable || 
 	        aError == K408TimeOut ||
 	        aError == K500ServerInternalError ||
-		    aError == KErrSIPOutboundProxyNotResponding || 
 		    aError == KErrTimedOut ||
 		    ((aError == KErrSIPResolvingFailure || 
 		      aError == KErrSIPTransportFailure ||
-		      aError == KErrSIPICMPFailure) && 
+		      aError == KErrSIPICMPFailure ||
+		      aError == KErrSIPOutboundProxyNotResponding ) && 
 			 iConnection.State() != CSIPConnection::ESuspended));
 	}
 
--- a/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/sipphoneregistrationmonitor.h	Thu Jun 17 22:31:40 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* Name        : sipphoneregistrationmonitor.h
-* Part of     : SIP Profile Agent / SIP IMS Agent
-* Version     : %version: 2 %
-*
-*/
-
-
-
-
-/**
- @internalComponent
-*/
-
-#ifndef CSIPPHONEREGISTRATIONMONITOR_H
-#define CSIPPHONEREGISTRATIONMONITOR_H
-
-// INCLUDES
-#include <etelmm.h>
-
-// FORWARD DECLARATIONS
-class MSipPhoneRegistrationObserver;
-
-// CLASS DEFINITION
-/**
- * Monitors the status of the phone's network registration.
- * Notifies when the status changes. 
- */
-class CSipPhoneRegistrationMonitor : public CActive
-	{
-	public:
-
-        /** Phone registration status */
-        enum TStatus
-            {
-            ENotRegistered,
-            ERegisteredOnHomeNetwork,
-		    ERegisteredRoaming  
-            };
-
-		static CSipPhoneRegistrationMonitor* NewL( 
-		    RTelServer& aTelServer,
-		    const RTelServer::TPhoneInfo& aPhoneInfo,
-		    MSipPhoneRegistrationObserver& aObserver );
-
-		~CSipPhoneRegistrationMonitor();
-
-	public: // New methods
-
-		TStatus Status() const;
-
-	protected: // From CActive
-	
-		void DoCancel();
-		void RunL();
-		TInt RunError(TInt aError);
-
-	private: // Constructors
-
-		/// Constructor
-		CSipPhoneRegistrationMonitor(		 
-		    MSipPhoneRegistrationObserver& aObserver );
-		
-		/// Default constructor, not implemented.
-		CSipPhoneRegistrationMonitor();
-
-		/// 2nd phase constructor
-		void ConstructL( 
-		    RTelServer& aTelServer,
-		    const RTelServer::TPhoneInfo& aPhoneInfo );
-		
-		void MonitorStatus();
-
-	private: // Data
-
-		MSipPhoneRegistrationObserver& iObserver;
-		RMobilePhone iPhone;
-		RMobilePhone::TMobilePhoneRegistrationStatus iRegistrationStatus;
-
-
-#ifdef CPPUNIT_TEST	
-	    friend class CSIPIMSProfileAgentTest;
-#endif				
-	};
-
-#endif // CSIPPHONEREGISTRATIONMONITOR_H
--- a/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Inc/sipphoneregistrationobserver.h	Thu Jun 17 22:31:40 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* Name        : sipphoneregistrationobserver.h
-* Part of     : SIP Profile Agent / SIP IMS Agent
-* Version     : %version: 2 %
-*
-*/
-
-
-
-
-/**
- @internalComponent
-*/
-
-#ifndef MSIPPHONEREGISTRATIONOBSERVER_H
-#define MSIPPHONEREGISTRATIONOBSERVER_H
-
-// INCLUDES
-#include <e32def.h>
-
-// CLASS DECLARATION
-/**
-* MSipPhoneRegistrationObserver defines an internal interface for observing 
-* phone's network registration status.
-*/
-class MSipPhoneRegistrationObserver
-    {
-    public: // Abstract methods
-
-        /**
-         * Called when the phone's network registration status changes.
-         */
-        virtual void PhoneRegistrationStatusChangedL() = 0;
-
-        /**
-         * Called when there is a fatal failure when monitoring
-         * the phone's network registration status.
-         * The user should delete the monitor.
-         * @param aError the failure reason
-         */
-        virtual void PhoneRegistrationStatusError( TInt aError ) = 0;
-    };
-
-#endif // MSIPPHONEREGISTRATIONOBSERVER_H
--- a/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/Sipimsprofilecontext.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/Sipimsprofilecontext.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -785,12 +785,12 @@
 	        aError == K408TimeOut ||
 	        aError == K480TemporarilyUnavailable ||
 	        aError == K500ServerInternalError ||
-	        aError == K504ServerTimeOut ||
-		    aError == KErrSIPOutboundProxyNotResponding || 
+	        aError == K504ServerTimeOut || 
 		    aError == KErrTimedOut ||
 		    ((aError == KErrSIPResolvingFailure || 
 		      aError == KErrSIPTransportFailure ||
-		      aError == KErrSIPICMPFailure) && 
+		      aError == KErrSIPICMPFailure ||
+		      aError == KErrSIPOutboundProxyNotResponding ) && 
 			 iConnection.State() != CSIPConnection::ESuspended));
 	}
 
--- a/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipphoneregistrationmonitor.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,172 +0,0 @@
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// Name        : sipphoneregistrationmonitor.cpp
-// Part of     : SIP Profile Agent / IMS Agent
-// Version     : %version: 2 %
-//
-
-
-#include "sipphoneregistrationmonitor.h"
-#include "sipphoneregistrationobserver.h"
-
-// -----------------------------------------------------------------------------
-// CSipPhoneRegistrationMonitor::NewL
-// -----------------------------------------------------------------------------
-//
-CSipPhoneRegistrationMonitor* CSipPhoneRegistrationMonitor::NewL(
-    RTelServer& aTelServer,
-    const RTelServer::TPhoneInfo& aPhoneInfo, 
-    MSipPhoneRegistrationObserver& aObserver )
-	{
-	CSipPhoneRegistrationMonitor* self 
-	    = new( ELeave ) CSipPhoneRegistrationMonitor( aObserver );
-	CleanupStack::PushL( self );
-	self->ConstructL( aTelServer, aPhoneInfo );
-	CleanupStack::Pop( self );
-	return self;
-	}
-
-// -----------------------------------------------------------------------------
-// CSipPhoneRegistrationMonitor::CSipPhoneRegistrationMonitor
-// -----------------------------------------------------------------------------
-//
-CSipPhoneRegistrationMonitor::CSipPhoneRegistrationMonitor( 
-    MSipPhoneRegistrationObserver& aObserver )
-	: CActive( CActive::EPriorityStandard ),
-	  iObserver( aObserver ),
-	  iRegistrationStatus( RMobilePhone::ERegistrationUnknown )
-	{
-	CActiveScheduler::Add( this );
-	}
-
-// -----------------------------------------------------------------------------
-// CSipPhoneRegistrationMonitor::ConstructL
-// -----------------------------------------------------------------------------
-//
-#ifdef __WINSCW__
-
-void CSipPhoneRegistrationMonitor::ConstructL( 
-    RTelServer& /*aTelServer*/,
-    const RTelServer::TPhoneInfo& /*aPhoneInfo*/ )
-	{
-    iRegistrationStatus = RMobilePhone::ERegisteredOnHomeNetwork;
-	}
-
-#else
-
-void CSipPhoneRegistrationMonitor::ConstructL( 
-    RTelServer& aTelServer,
-    const RTelServer::TPhoneInfo& aPhoneInfo )
-	{
-	
-	User::LeaveIfError( iPhone.Open( aTelServer, aPhoneInfo.iName ) );
-
-    // Get current status
-    TRequestStatus status;
-    iPhone.GetNetworkRegistrationStatus( status, iRegistrationStatus );	
-    User::WaitForRequest( status );
-    User::LeaveIfError( status.Int() );
-		
-    // Start to monitor the status
-    MonitorStatus();
-	}
-    
-#endif
-
-// -----------------------------------------------------------------------------
-// CSipPhoneRegistrationMonitor::~CSipPhoneRegistrationMonitor
-// -----------------------------------------------------------------------------
-//
-CSipPhoneRegistrationMonitor::~CSipPhoneRegistrationMonitor()
-	{
-	Cancel();
-	iPhone.Close();
-	}
-
-// -----------------------------------------------------------------------------
-// CSipPhoneRegistrationMonitor::Status
-// -----------------------------------------------------------------------------
-//
-CSipPhoneRegistrationMonitor::TStatus 
-CSipPhoneRegistrationMonitor::Status() const
-	{
-	TStatus status = ENotRegistered;
-	switch ( iRegistrationStatus )
-	    {
-	    case RMobilePhone::ERegisteredOnHomeNetwork:
-	        status = ERegisteredOnHomeNetwork;
-	        break;
-	    case RMobilePhone::ERegisteredRoaming:
-	        status = ERegisteredRoaming;
-	        break;
-	    default:
-	        break;
-	    }
-	return status;
-	}
-
-// -----------------------------------------------------------------------------
-// CSipPhoneRegistrationMonitor::DoCancel
-// -----------------------------------------------------------------------------
-//
-void CSipPhoneRegistrationMonitor::DoCancel()
-	{
-	iPhone.CancelAsyncRequest( 
-	    EMobilePhoneNotifyNetworkRegistrationStatusChange );
-	}
-
-// -----------------------------------------------------------------------------
-// CSipPhoneRegistrationMonitor::RunL
-// -----------------------------------------------------------------------------
-//
-void CSipPhoneRegistrationMonitor::RunL()
-	{
-	TInt err = iStatus.Int();
-	
-	if ( err )
-	    {
-	    iObserver.PhoneRegistrationStatusError( err );
-	    }
-	else
-	    {
-	    MonitorStatus();
-	    iObserver.PhoneRegistrationStatusChangedL();	
-	    }
-	}
-
-// -----------------------------------------------------------------------------
-// CSipPhoneRegistrationMonitor::RunError
-// -----------------------------------------------------------------------------
-//
-TInt CSipPhoneRegistrationMonitor::RunError(TInt aError)
-    {
-    iObserver.PhoneRegistrationStatusError( aError );
-    return KErrNone;
-    }
-
-// -----------------------------------------------------------------------------
-// CSipPhoneRegistrationMonitor::MonitorStatus
-// -----------------------------------------------------------------------------
-//	
-void CSipPhoneRegistrationMonitor::MonitorStatus()
-	{
-#ifndef __WINSCW__
-
-	// Request further notification from ETel
-	iPhone.NotifyNetworkRegistrationStatusChange( iStatus,
-												  iRegistrationStatus );
-	SetActive();
-	
-#endif	
-	}
--- a/realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileCacheItem.h	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileCacheItem.h	Thu Jul 22 16:37:20 2010 +0100
@@ -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	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Inc/SipProfileServerCore.h	Thu Jul 22 16:37:20 2010 +0100
@@ -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	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileCacheItem.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -87,6 +87,7 @@
 	iIsVpnInUse = EFalse;
 	iInitialApnSelected = EFalse;
 	iApnSwitchEnabled = EFalse;
+	iIsOfflineInitiated = EFalse;
 	iDeltaTimerEntry.Set(iDeltaTimerCallBack);
 	}
 
@@ -570,6 +571,7 @@
 void CSIPProfileCacheItem::VpnInUse(TBool aStatus)
     {
     iIsVpnInUse = aStatus;
+    iCurrentState->ShutdownInitiated(*this);
     }
 
 // -----------------------------------------------------------------------------
@@ -1357,14 +1359,6 @@
 	iServerCore.SendErrorEvent(
 		*this, CSIPConcreteProfile::ERegistrationInProgress, KErrCancel );
 	}
-// -----------------------------------------------------------------------------
-// CSIPProfileCacheItem::ResetShutdownvariable
-// -----------------------------------------------------------------------------
-//
-void CSIPProfileCacheItem::ResetShutdownvariable()
-    {    
-    iIsShutdownInitiated = EFalse;
-    }
 
 // -----------------------------------------------------------------------------
 // CSIPProfileCacheItem::DefaultSNAPL
@@ -1384,3 +1378,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	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -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")
     }
@@ -243,6 +242,15 @@
 												  TUint32 aContextId)
     {
     CSIPProfileCacheItem* item = ProfileCacheItem(aProfile.Id());
+    
+    if(aContextId == 0 && item)
+        {
+        if(item->IsApnSwitchEnabled())
+            {
+            UsePrimaryApn(aProfile.IapId());
+            }
+        }
+    
     TRAPD(err, SIPProfileStatusEventL(aProfile.Id(), aContextId));
 
     if (err != KErrNone)
@@ -291,8 +299,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,25 +316,49 @@
                     {
                     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()))
                 ConfirmSystemstateMonitor(CSipSystemStateMonitor::EVpnState);                
             }       
-        }		
+        
+        if(FeatureManager::FeatureSupported( KFeatureIdFfSipApnSwitching))
+            {
+            if(item && item->IsApnSwitchEnabled() && aContextId)
+                {
+                CSIPConcreteProfile::TStatus status;
+                iPluginDirector->State( status, item->Profile() );
+                if(status == CSIPConcreteProfile::EUnregistered)
+                    {
+                    UseBackupApn(item->Profile().IapId(), EFalse);
+                    }
+                }
+            }
+        }
     CheckServerStatus();
     }
 
@@ -444,50 +479,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++)
+                    {
+                    CSIPConcreteProfile::TStatus status;
+                    iPluginDirector->State(status, iProfileCache[i]->UsedProfile());
+                    if(status != CSIPConcreteProfile::EUnregistered)
+                        waitForDeregistration = ETrue;   
+                    iProfileCache[i]->OfflineInitiated(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)
@@ -496,11 +537,11 @@
 	        TBool waitForDeregistration = EFalse;
 	        for (TInt i = 0; i < iProfileCache.Count(); i++)         
 	            {
-	            iProfileCache[i]->RfsInprogress(ETrue);
 	            CSIPConcreteProfile::TStatus status;
 	            iPluginDirector->State(status, iProfileCache[i]->UsedProfile());
 	            if (status != CSIPConcreteProfile::EUnregistered)
 	                waitForDeregistration = ETrue;
+	            iProfileCache[i]->RfsInprogress(ETrue);
 	            }      
 	        if(!waitForDeregistration)
 	            {
@@ -545,12 +586,11 @@
             TBool waitForDeregistration = EFalse;
             for (TInt i = 0; i < iProfileCache.Count(); i++)
                 {
-                iProfileCache[i]->VpnInUse( ETrue );
-                iProfileCache[i]->ShutdownInitiated();
                 CSIPConcreteProfile::TStatus status;
                 iPluginDirector->State(status, iProfileCache[i]->UsedProfile());
                 if (status != CSIPConcreteProfile::EUnregistered)
                     waitForDeregistration = ETrue;
+                iProfileCache[i]->VpnInUse( ETrue );
                 }
             if (!waitForDeregistration)
                 {
@@ -622,7 +662,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 +1112,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
         {
@@ -1614,26 +1667,33 @@
 	CSIPConcreteProfile::TStatus aStatus,
     TInt aError)
     {
-    TInt err(aError);
-    if (aStatus == CSIPConcreteProfile::EUnregistrationInProgress)
+    PROFILE_DEBUG3("CSIPProfileServerCore::HandleAsyncError, error", aError)
+    TBool isFatal(EFalse);
+    if(aError != KErrSIPApnSwitchNonFatalFailure)
         {
-        err = KErrNone;
-        }
+        TInt err(aError);
+        if (aStatus == CSIPConcreteProfile::EUnregistrationInProgress)
+            {
+            err = KErrNone;
+            }
 
-    if (HandleProfileError(aItem, err))
-    	{
-	    if (err == KErrTotalLossOfPrecision)
-	        {
-	        TRAP_IGNORE(SendUnregisteredStatusEventL(aItem))
-	        }
-	    else
-	        {
-	        SendErrorEvent(aItem, aStatus, aError);
-	        }
-    	}
+        if (HandleProfileError(aItem, err))
+            {
+            if (err == KErrTotalLossOfPrecision)
+                {
+                TRAP_IGNORE(SendUnregisteredStatusEventL(aItem))
+                }
+            else
+                {
+                SendErrorEvent(aItem, aStatus, aError);
+                isFatal = ETrue;
+                }
+            }
+        }
+    
     if(aItem.IsApnSwitchEnabled())
         {
-        UseBackupApn(aItem.Profile().IapId(), ETrue);
+        UseBackupApn(aItem.Profile().IapId(), isFatal);
         }
     }
 
@@ -2123,11 +2183,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 +2199,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 +2235,8 @@
 //
 void CSIPProfileServerCore::ConfirmSystemstateMonitor(
 	CSipSystemStateMonitor::TSystemVariable aVariable)
-	{
-		iSystemStateMonitor->EventProcessingCompleted(
-		        aVariable, 0, *this);
+	{    
+        iSystemStateMonitor->EventProcessingCompleted(aVariable, 0, *this);
 	}
 	
 // ----------------------------------------------------------------------------
@@ -2344,7 +2429,7 @@
     {
     PROFILE_DEBUG1("CSIPProfileServerCore::UseBackupApn")
     
-    if ( iApnManager->IsFailed( aIapId ) || aFatalFailure )
+    if ( !iApnManager->IsFailed( aIapId ) || aFatalFailure )
         {
         iApnManager->SetFailed( aIapId, ETrue, aFatalFailure );
         }
@@ -2353,11 +2438,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	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileStateUnregistered.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -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/ProfileAgent/profile_fsm/inc/sipprflderegisterrequestedstate.h	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/profile_fsm/inc/sipprflderegisterrequestedstate.h	Thu Jul 22 16:37:20 2010 +0100
@@ -14,7 +14,7 @@
 * Description:
 * Name        : sipprflderegisterrequestedstate.h
 * Part of     : sip profile fsm 
-* Version     : %version: 2.1.1 %
+* Version     : %version: 2.1.2 %
 *
 */
 
@@ -72,6 +72,13 @@
 		
 		CSIPConcreteProfile::TStatus ConcreteProfileState() const;
 		
+		/* DeRegister requested
+		 * update on multiple profile issue, when update on the previous profile is pending.
+		 * 07 May 2010    
+		 * */
+		void DeregisterL(
+		            MSIPProfileContext& aContext);
+		
 		/**
 		* Moves back the profile to "Registered" state
 		* @param aContext a profile context
--- a/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflderegisterrequestedstate.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflderegisterrequestedstate.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -14,7 +14,7 @@
 // Name        : sipprflderegisterrequestedstate.cpp
 // Part of     : sip profile fsm
 // implementation
-// Version     : %version: 2.1.1 %
+// Version     : %version: 2.1.2 %
 //
 
 
@@ -98,6 +98,41 @@
 	}
 
 // -----------------------------------------------------------------------------
+// CSIPPrflDeregisterRequestedState::DeregisterL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CSIPPrflDeregisterRequestedState::DeregisterL(
+    MSIPProfileContext& aContext)
+    {
+    __ASSERT_DEBUG(aContext.Profile()!=0, User::Invariant());
+    __ASSERT_DEBUG(aContext.Registration()!=0, User::Invariant());
+    if (aContext.Connection().State()==CSIPConnection::EActive)
+        {
+        if (iUser.AddProfileIntoQueue(*aContext.Profile())) //compares the registrar of the present profile with the other profiles existing in the connection context array.
+            {
+            iUser.DeregisterProfileL(*aContext.Profile()); 
+            
+            } 
+        else
+            {
+            CSIPMessageElements* elements = 
+                aContext.CreateDeRegisterElementsL();
+            CleanupStack::PushL(elements);
+            CSIPClientTransaction* tx = 
+                aContext.Registration()->DeregisterL(elements);
+            CleanupStack::Pop(elements);
+            aContext.SetTransaction(tx);
+            aContext.SetNextState(*iDeregistrationInProgressState);
+            }
+        }
+    aContext.AgentObserver().SIPProfileStatusEvent(
+    *aContext.Profile(),
+    aContext.Registration()->ContextId());
+    }
+
+
+// -----------------------------------------------------------------------------
 // CSIPPrflDeregisterRequestedState::ErrorOccured()
 // This can happen if the de-register was reguested while the connection is
 // suspended (registered->de-register requested). SIP stack has removed
--- a/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflregisteredstate.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflregisteredstate.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -14,7 +14,7 @@
 // Name        : sipprflregisteredstate.cpp
 // Part of     : sip profile fsm
 // implementation
-// Version     : %version: 2.1.2 %
+// Version     : %version: 2.1.3 %
 //
 
 
@@ -370,7 +370,8 @@
         }
     else if ((aError == KErrSIPTransportFailure || 
          aError == KErrSIPResolvingFailure ||
-		 aError == KErrSIPICMPFailure) && 
+		 aError == KErrSIPICMPFailure ||
+		 aError == KErrSIPOutboundProxyNotResponding ) && 
         aContext.Connection().State() == CSIPConnection::ESuspended)
         {
         //registration was dropped due to the expired 
--- a/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/sipprflregistrationinprogressstate.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/sipprflregistrationinprogressstate.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -14,7 +14,7 @@
 // Name        : sipprflregistrationinprogressstate.cpp
 // Part of     : sip profile fsm
 // implementation
-// Version     : %version: 2.1.1 %
+// Version     : %version: 2.1.2 %
 //
 
 
@@ -174,7 +174,8 @@
 		}
 	else if ((aError == KErrSIPTransportFailure || 
 	     aError == KErrSIPResolvingFailure ||
-		 aError == KErrSIPICMPFailure) && 
+		 aError == KErrSIPICMPFailure ||
+		 aError == KErrSIPOutboundProxyNotResponding ) && 
 	    aContext.Connection().State()==CSIPConnection::ESuspended)
 		{
 		//registration failed due to the suspended connection, re-try later
--- a/realtimenetprots/sipfw/SIP/Codec/src/CSIPAcceptEncodingHeader.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/SIP/Codec/src/CSIPAcceptEncodingHeader.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -28,6 +28,7 @@
 #include "sipstrconsts.h"
 #include "sipcodecutils.h"
 #include "_sipcodecdefs.h"
+#include <featdiscovery.h>
 
 
 // ----------------------------------------------------------------------------
@@ -161,10 +162,19 @@
 	{
 	HBufC8* tmp = aCodings.AllocLC();
 	tmp->Des().Trim();
-	if (tmp->Length() > 0 && !SIPSyntaxCheck::Token(*tmp))
+	//Allowing '/' token for interoperability issues
+	RArray<TSIPChar> array;
+	if(CFeatureDiscovery::IsFeatureSupportedL(TUid::Uid(KFeatureIdFfSipApnSwitching)))
+	    {
+        array.Append('/');
+	    }
+	
+	if (tmp->Length() > 0 && !SIPSyntaxCheck::Token(*tmp,&array))
         {
+        array.Close();
         User::Leave(KErrSipCodecAcceptEncodingHeader);
 	    }
+	array.Close();
 	CleanupStack::Pop(tmp);
 	delete iCodings;
 	iCodings = tmp;
--- a/realtimenetprots/sipfw/SIP/Codec/src/SIPSyntaxCheck.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/SIP/Codec/src/SIPSyntaxCheck.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -20,7 +20,6 @@
 
 
 #include "SIPSyntaxCheck.h"
-#include "TSIPChar.h"
 #include "sipcodecerr.h"
 #include <uriutils.h>
 
@@ -31,8 +30,9 @@
 // SIPSyntaxCheck::Token
 // -----------------------------------------------------------------------------
 //
-TBool SIPSyntaxCheck::Token (const TDesC8& aValue)
+TBool SIPSyntaxCheck::Token (const TDesC8& aValue, RArray<TSIPChar>* aArray)
 	{
+	
 	if (aValue.Length() == 0) 
 		{
 		return EFalse;
@@ -41,7 +41,7 @@
 	TSIPChar sipChr = lex.Get();
 	while (sipChr)
 		{
-		if (!sipChr.IsTokenChar()) 
+		if (!sipChr.IsTokenChar( aArray ) )
 			{
 			return EFalse;
 			}
--- a/realtimenetprots/sipfw/SIP/Codec/src/SIPSyntaxCheck.h	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/SIP/Codec/src/SIPSyntaxCheck.h	Thu Jul 22 16:37:20 2010 +0100
@@ -31,6 +31,7 @@
 #define SIPSYNTAXCHECK_H
 
 #include "siphostport.h"
+#include "TSIPChar.h"
 #include <e32std.h>
 
 
@@ -39,7 +40,7 @@
 	{
 public:
 
-	static TBool Token (const TDesC8& aValue);
+	static TBool Token (const TDesC8& aValue , RArray<TSIPChar>* aArray = NULL );
 	static TBool AlphaMaxSize8 (const TDesC8& aValue);
 	static TBool Host (const TDesC8& aValue);
 	static TBool Word (const TDesC8& aValue);
--- a/realtimenetprots/sipfw/SIP/Codec/src/TSIPChar.h	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/SIP/Codec/src/TSIPChar.h	Thu Jul 22 16:37:20 2010 +0100
@@ -45,7 +45,7 @@
 	inline TBool IsReserved() const;
 	inline TBool IsUnreserved() const;
 	inline TBool IsMark() const;
-	inline TBool IsTokenChar() const;
+	inline TBool IsTokenChar(RArray<TSIPChar>* aArray = NULL) const;
 	inline TBool IsSeparator() const;
 	inline TBool IsWordChar() const;
 	inline TBool IsQuotedPairChar() const;
--- a/realtimenetprots/sipfw/SIP/Codec/src/TSIPChar.inl	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/SIP/Codec/src/TSIPChar.inl	Thu Jul 22 16:37:20 2010 +0100
@@ -112,20 +112,33 @@
 // TSIPChar::IsTokenChar
 // -----------------------------------------------------------------------------
 //
-inline TBool TSIPChar::IsTokenChar () const
+inline TBool TSIPChar::IsTokenChar (RArray<TSIPChar>* aArray) const
 	{
 	if (IsAlphaDigit()) 
 		{
 		return ETrue;
 		}
-	TSIPChar val = *this;
-	if (val == '-' || val == '.' || val == '!' || val == '%' || val == '*' ||
+	   TInt length= 0;
+	   TSIPChar val = *this;
+	   //Allowing '/' token for interoperability issues
+	   if (aArray)
+	       length = aArray->Count();   
+	   if(length)
+	       {
+	       for (TInt i =0; i<length;i++)
+	           {
+	           if(val == aArray->operator [](i))
+	           return ETrue;
+	           }
+	       } 
+	   if (val == '-' || val == '.' || val == '!' || val == '%' || val == '*' ||
 		val == '_' || val == '+' || val == '\'' || val == '~' || val == '`')
-		{
-		return ETrue;
-		}
-	return EFalse;
-	}
+	       {
+	       return ETrue;
+	       }
+	  
+	   return EFalse;
+	 }
 
 // -----------------------------------------------------------------------------
 // TSIPChar::IsSeparator
--- a/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CReceiverTcp.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CReceiverTcp.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -149,8 +149,8 @@
 		iContext.SocketContainer().CancelRecv();
 		}
 	else
-		{
-		iContext.SocketContainer().Socket().CancelAll();
+		{        
+		iContext.SocketContainer().CancelAll();        
 		}
 	RemoveReceived();
 	}
--- a/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CSecureSocketContainer.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CSecureSocketContainer.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -237,5 +237,21 @@
     CSocketContainer( aSocket )
     {
     }
-    
+
+// -----------------------------------------------------------------------------
+// CSecureSocketContainer::CancelAll
+// -----------------------------------------------------------------------------
+// 
+void CSecureSocketContainer::CancelAll()
+    {
+    if ( HasSecureSocket() )
+        {        
+        iSecureSocket->CancelAll();
+        }
+    else
+        {
+        CSocketContainer::CancelAll();
+        }
+    }
+
 // End of file
--- a/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CSecureSocketContainer.h	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CSecureSocketContainer.h	Thu Jul 22 16:37:20 2010 +0100
@@ -66,6 +66,8 @@
         
         void CancelConnect();
         
+        void CancelAll();
+        
         void RemoteName( TSockAddr& aAddr );
         
         TInt SetOpt( TUint aOptionName, TUint aOptionLevel, const TDesC8& aOption );
--- a/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CSocketContainer.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CSocketContainer.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -192,5 +192,14 @@
 CSocketContainer::CSocketContainer( RSocket& aSocket ) : iSocket( aSocket )
     {
     }
-    
+
+// -----------------------------------------------------------------------------
+// CSocketContainer::CancelAll
+// -----------------------------------------------------------------------------
+//                             
+void CSocketContainer::CancelAll()
+    {
+    iSocket.CancelAll();
+    }
+
 // End of file
--- a/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CSocketContainer.h	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CSocketContainer.h	Thu Jul 22 16:37:20 2010 +0100
@@ -72,6 +72,8 @@
         
         virtual void CancelConnect();
         
+        virtual void CancelAll();
+        
         virtual void RemoteName( TSockAddr& aAddr );
         
         virtual TInt SetOpt( TUint aOptionName, 
--- a/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CTransport.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CTransport.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -274,7 +274,7 @@
 				if ( IsConnectedTransport() )
 					{
 					TResponseRoute route( id, aRemoteAddr );
-					iIDArray.Append( route );
+					iIDArray.AppendL( route );
 					}
 				TRAP( leaveValue,
 					  receiver->ReceiveL( static_cast<CSIPRequest*>( aMessage ) ) );
@@ -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 )
@@ -1450,27 +1455,44 @@
                 RStringF transportParam =
                     uri.SIPURI()->ParamValue(
                         SIPStrings::StringF( SipStrConsts::ETransport ) );
-
-                if ( Protocol() == KProtocolTls )
+                
+                RStringF tls = SIPStrings::StringF( SipStrConsts::ETLS ); 
+                //If the Contact header has parameter transport=tls, remove it
+                //as it is deprecated in RFC 3261
+                if(transportParam == tls)
+                    {
+                    uri.SIPURI()->DeleteParam(SIPStrings::StringF( SipStrConsts::ETransport ));
+                    }
+                
+                //If the message is CSIPRequest, make sure its scheme is as per From Header.
+                //So if the FROM header is SIPS, Contact header is SIPS, if FROM header is SIP,
+                //Contact header scheme is sip
+                if(aMessage->IsRequest())
                     {
-                    RStringF tls = SIPStrings::StringF( SipStrConsts::ETLS );
-                    // SIP-URI with transport=TLS must not use sips scheme
-                    uri.SIPURI()->SetSIPS( transportParam != tls );
-                    if(transportParam == tls)
+                    if ( Protocol() == KProtocolTls )
+                        {                       
+                        CURIContainer& FromUri = (((aMessage->From())->SIPAddress()).URI());
+                        if(FromUri.IsSIPURI())
+                            {
+                            CSIPURI* FromSIPUri =FromUri.SIPURI();
+                            if(FromSIPUri->IsSIPSURI())
+                                {                                
+                                uri.SIPURI()->SetSIPS( ETrue );
+                                }
+                            else
+                                {
+                                uri.SIPURI()->SetSIPS( EFalse );
+                                }
+                            }
+                        }
+                    else
                         {
-                        uri.SIPURI()->SetSIPS(EFalse);
-                        //Delete the param transport=tls from the URI as it is deprecated in RFC 3261
-                        uri.SIPURI()->DeleteParam(SIPStrings::StringF( SipStrConsts::ETransport ));
+                        uri.SIPURI()->SetSIPS( EFalse );
                         }
-                    }
-                else
-                    {
-                    uri.SIPURI()->SetSIPS( EFalse );
-                    }
-			    }
-			}
-		}    
-        
+                    } //end if (aMessage->IsRequest)                
+			    } //end if (uri.IsSIPURI())
+			} //end if(sipaddr)
+		} //end while    
     }
 
 // -----------------------------------------------------------------------------
--- a/realtimenetprots/sipfw/SIP/ConnectionMgr/src/TTlsTransTlsConnecting.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/TTlsTransTlsConnecting.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -22,8 +22,10 @@
 #include "TTlsTransTlsConnecting.h"
 #include "MTlsTransStateOwner.h"
 
-
-const TInt KConnectTLSTimeout = 10000; // 10 seconds
+// SIP layer waits 30 seconds for TLS Handshake to happen, if the timer
+// fires and negotiation does not happen, it cancels the handshake assuming
+// some problem while handshaking.
+const TInt KConnectTLSTimeout = 30000; // 30 seconds
 
 // -----------------------------------------------------------------------------
 // TTlsTransTlsConnecting::EnterL
--- a/realtimenetprots/sipfw/SIP/Group/sipcodec.mmp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/SIP/Group/sipcodec.mmp	Thu Jul 22 16:37:20 2010 +0100
@@ -135,7 +135,8 @@
 LIBRARY       estor.lib
 LIBRARY       charconv.lib
 LIBRARY       inetprotutil.lib
-
+LIBRARY       featdiscovery.lib
+ 
 VENDORID 0x70000001
 
 CAPABILITY All -Tcb
--- a/realtimenetprots/sipfw/SIP/Server/src/CSipCSSession.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/SIP/Server/src/CSipCSSession.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -252,7 +252,10 @@
             {
             TInt handle = 0;
             ITC().ReadL(aMessage,handle,ESipItcArgSubSessionHandle);
-            CloseSubSession (handle);
+			if(iSubSessionIndex->AtL(handle))
+	            CloseSubSession (handle);
+			else
+				{}
             } 
             break;
 
--- a/realtimenetprots/sipfw/SIP/sipapi/api/siperr.h	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/SIP/sipapi/api/siperr.h	Thu Jul 22 16:37:20 2010 +0100
@@ -93,4 +93,7 @@
 /** ICMP error has occured */
 const TInt KErrSIPICMPFailure = -17718;
 
+/** Error code to indicate switching to secondary APN on non fatal error  */
+const TInt KErrSIPApnSwitchNonFatalFailure = -17719;
+
 #endif //SIPERR_H
Binary file realtimenetprots/sipfw/conf/sipframework_101f413c.crml has changed
--- a/realtimenetprots/sipfw/rom/sipsw.iby	Thu Jun 17 22:31:40 2010 +0100
+++ b/realtimenetprots/sipfw/rom/sipsw.iby	Thu Jul 22 16:37:20 2010 +0100
@@ -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/rtp/srtpstack/inc/srtputils.h	Thu Jun 17 22:31:40 2010 +0100
+++ b/rtp/srtpstack/inc/srtputils.h	Thu Jul 22 16:37:20 2010 +0100
@@ -29,6 +29,7 @@
 
 #include <e32std.h>
 #include <f32file.h>
+#include <e32hal.h>
 
 #ifdef SRTP_UNIT_TEST_COVERAGE
 
--- a/sipplugins/group/bld.inf	Thu Jun 17 22:31:40 2010 +0100
+++ b/sipplugins/group/bld.inf	Thu Jul 22 16:37:20 2010 +0100
@@ -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/sipplugins/sippsystemstatemonitor/src/sipdevicestateaware.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/sipplugins/sippsystemstatemonitor/src/sipdevicestateaware.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -219,8 +219,11 @@
     if( iObservers.Count() == iCount)
         {
         iGuardTimer->Cancel();
-        iStateAwareSession.AcknowledgeStateNotification(KErrNone);        
-        iCount = 0;        
+        if(iState == CSipSystemStateMonitor::ESystemOffline)
+            {
+            iStateAwareSession.AcknowledgeStateNotification(KErrNone);        
+            iCount = 0;
+            }
         }	
     }
 
@@ -231,7 +234,10 @@
 void CSipDeviceStateAware::EventProcessingCompleted()
     {
     iGuardTimer->Cancel();
-    iStateAwareSession.AcknowledgeStateNotification(KErrNone);   
-    iCount = 0;
+    if(iState == CSipSystemStateMonitor::ESystemOffline)
+        {
+        iStateAwareSession.AcknowledgeStateNotification(KErrNone);   
+        iCount = 0;
+        }
     }
 
--- a/sipplugins/sippsystemstatemonitor/src/sipvpnmonitorao.cpp	Thu Jun 17 22:31:40 2010 +0100
+++ b/sipplugins/sippsystemstatemonitor/src/sipvpnmonitorao.cpp	Thu Jul 22 16:37:20 2010 +0100
@@ -191,9 +191,11 @@
     // SIP deregistration has been completed. Stop the guard timer and tell
     // the VPN client about it.
     iGuardTimer->Cancel();
-
-    iProperty.Set( KPSVpnSipUid, KVpnSipState, ESipDeregisterCompleted );
-    iCount = 0;
+    if (iState == CSipSystemStateMonitor::EVpnInitiating)
+        {
+        iProperty.Set( KPSVpnSipUid, KVpnSipState, ESipDeregisterCompleted );
+        iCount = 0;
+        }
     }
 
 // -----------------------------------------------------------------------------
--- a/sipproviderplugins/sipprovider/sipconnectionplugins/group/bld.inf	Thu Jun 17 22:31:40 2010 +0100
+++ b/sipproviderplugins/sipprovider/sipconnectionplugins/group/bld.inf	Thu Jul 22 16:37:20 2010 +0100
@@ -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	Thu Jun 17 22:31:40 2010 +0100
+++ b/sipproviderplugins/sipprovider/sipdummyprt/group/bld.inf	Thu Jul 22 16:37:20 2010 +0100
@@ -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	Thu Jun 17 22:31:40 2010 +0100
+++ b/sipproviderplugins/sipprovider/sipstatemachine/group/bld.inf	Thu Jul 22 16:37:20 2010 +0100
@@ -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