Revision: 201011 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 31 Mar 2010 21:20:05 +0300
branchRCL_3
changeset 10 ed1e38b404e5
parent 9 bddb6d4447db
child 11 6134b5029079
Revision: 201011 Kit: 201013
callcontinuity/vcc/inc/cvccdirector.h
callcontinuity/vcc/src/cvccdirector.cpp
callcontinuity/vcc/src/cvccperformer.cpp
callcontinuity/vcchotrigger/inc/vccsignallevelhandler.h
callcontinuity/vcchotrigger/inc/vccwlansignallevelhandler.h
callcontinuity/vcchotrigger/src/vcchotrigger.cpp
callcontinuity/vcchotrigger/src/vccwlansignallevelhandler.cpp
commsconfig/cscapplicationui/inc/csc.hlp.hrh
commsconfig/cscapplicationui/src/cscserviceview.cpp
commsconfig/cscgsplugin/src/cscgsplugin.cpp
convergedconnectionhandler/cchclientapi/cchuinotif/src/cchuinotifier.cpp
convergedconnectionhandler/cchserver/inc/cchphonestartupmonitor.h
convergedconnectionhandler/cchserver/src/cchcommdbwatcher.cpp
convergedconnectionhandler/cchserver/src/cchnotehandler.cpp
convergedconnectionhandler/cchserver/src/cchphonestartupmonitor.cpp
package_definition.xml
sipvoipprovider/inc/svpmosession.h
sipvoipprovider/src/svpmosession.cpp
sipvoipprovider/src/svpsslogcall.cpp
sipvoipprovider/src/svpuriparser.cpp
sipvoipprovider/svptransfer/src/svptransfercontroller.cpp
voipplugins/sipconnectionprovider/inc/scppresencehandler.h
voipplugins/sipconnectionprovider/inc/scpsipconnection.h
voipplugins/sipconnectionprovider/ipvoicemailengine/inc/ipvmbxbase.h
voipplugins/sipconnectionprovider/ipvoicemailengine/src/ipvmbxbase.cpp
voipplugins/sipconnectionprovider/ipvoicemailengine/src/ipvmbxengine.cpp
voipplugins/sipconnectionprovider/src/scppresencehandler.cpp
voipplugins/sipconnectionprovider/src/scpprofilehandler.cpp
voipplugins/sipconnectionprovider/src/scpsettinghandler.cpp
voipplugins/sipconnectionprovider/src/scpsipconnection.cpp
voipplugins/sipconnectionprovider/src/scpsubservice.cpp
voipplugins/sipconnectionprovider/src/scpvoiphandler.cpp
voipplugins/voipadapters/dmvoipadapter/group/nsmldmvoipadapter.mmp
voipplugins/voipadapters/dmvoipadapter/inc/nsmldmvoipadapter.h
voipplugins/voipadapters/dmvoipadapter/src/nsmldmvoipadapter.cpp
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Inc/VoIPProvisioningAppUi.h
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Inc/VoIPProvisioningDocument.h
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Src/VoIPProvisioningAppUi.cpp
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/group/VoIPProvisioningApp.mmp
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlparser.h
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/rd-key.pem
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/rd.cer
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlparser.cpp
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlpresencehandler.cpp
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlsiphandler.cpp
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlxdmhandler.cpp
--- a/callcontinuity/vcc/inc/cvccdirector.h	Mon Mar 15 12:39:55 2010 +0200
+++ b/callcontinuity/vcc/inc/cvccdirector.h	Wed Mar 31 21:20:05 2010 +0300
@@ -545,7 +545,12 @@
      */
     CVccDtmfProvider* iDtmfProvider;
     
-     
+    /**
+     * Used in initialization logic to inform of
+     * failed converged call provider plugin.
+     */
+    TInt iMandatoryPluginFailedError;
+
 	friend class T_CVccDirector;
     friend class T_CVccDTMFProvider;
 	};
--- a/callcontinuity/vcc/src/cvccdirector.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/callcontinuity/vcc/src/cvccdirector.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -197,9 +197,14 @@
     	User::Leave( KErrNotFound );
     	}
 	
+    iMandatoryPluginFailedError = KErrNone;
+
     //MT: setting CVccDirector as observer to plugin
     Initialize( *this, aSsObserver );
-    
+
+    // Leave if mandatory plugins failed
+    User::LeaveIfError( iMandatoryPluginFailedError );
+
     // save CCP monitor ; CCCEPluginMCCPObserver
     const MCCPCSObserver& obs = static_cast<const MCCPCSObserver&>( aMonitor );
     iCCPObserver = const_cast<MCCPCSObserver*>(&obs);
@@ -229,19 +234,28 @@
     	
         TRAPD( err, InitializeL( aMonitor, aSsObserver, *(iProviders[ i ]) ) );
         RUBY_DEBUG1( "initialization err = %d", err );
-        switch( err )
-			{
-			case KErrNone:
-				iInitialisedPlugins.Append(  pluginUid.iUid );
-				//fall-through
-			case KErrAlreadyExists:
-				RUBY_DEBUG0( "-- VCC plugin initialization OK" );
-				break;
-			default:
-				RUBY_DEBUG0( "-- VCC plugin initialization FAILED" );
-				initSucceeded = EFalse;
-				break;
-			}
+        if ( KErrNone != err && KCSCallProviderPlugId == pluginUid.iUid ) // CS plugin mandatory
+            {
+            RUBY_DEBUG0( "-- Mandatory VCC plugin initialization FAILED" );    
+            initSucceeded = EFalse; 
+            iMandatoryPluginFailedError = err;
+            }
+        else
+            {
+            switch( err )
+                {
+                case KErrNone:
+                    iInitialisedPlugins.Append(  pluginUid.iUid );
+                    //fall-through
+                case KErrAlreadyExists:
+                    RUBY_DEBUG0( "-- VCC plugin initialization OK" );
+                    break;
+                default:
+                    RUBY_DEBUG0( "-- VCC plugin initialization FAILED" );
+                    initSucceeded = EFalse;
+                    break;
+                }
+            }
         }
 	
 	RUBY_DEBUG1( "-- VCC plugin nbr of initialized plugins:%d",
--- a/callcontinuity/vcc/src/cvccperformer.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/callcontinuity/vcc/src/cvccperformer.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -673,13 +673,12 @@
     ActivateTrigger( ETrue );
     //get new service id for voip call and set it to parameters
     //this is used later for loading correct CTI plugins
-    TInt id = KErrNotFound;
-    TRAP( id, VccSettingsReader::VoIPServiceIdL() );
-    RUBY_DEBUG1( "CVccPerformer::HandoverReady() -- new Service Id: %d", id );    
+    TInt VoIPServiceId(KErrNotFound);
+    TRAP_IGNORE( VoIPServiceId = VccSettingsReader::VoIPServiceIdL() );
+    RUBY_DEBUG1( "CVccPerformer::HandoverReady() -- new Service Id: %d", VoIPServiceId );
     CCCPCallParameters* params = NULL;
-    //TRAP_IGNORE( CCCPCallParameters::NewL() );
     TRAP_IGNORE( params = iPrimaryCall->Parameters().CloneL() );
-    params->SetServiceId( id );  //iServiceId = id;
+    params->SetServiceId( VoIPServiceId );
     iPrimaryCall->SetParameters( *params );
     //inform through phone engine to phone about call bubble update needs
     MCCPCallObserver::TCCPCallEvent event = 
--- a/callcontinuity/vcchotrigger/inc/vccsignallevelhandler.h	Mon Mar 15 12:39:55 2010 +0200
+++ b/callcontinuity/vcchotrigger/inc/vccsignallevelhandler.h	Wed Mar 31 21:20:05 2010 +0300
@@ -43,7 +43,7 @@
 class CVccSignalLevelHandler : public CTimer
     {
 
-private:
+protected:
 
     /** Level of the signal */
     enum TStrengthState
@@ -192,24 +192,19 @@
      */
     TInt32 iStrength;
 
-
-private: // data
-
     /**
      * Flag to determine if the observing/notifications are on or off
      */
     TBool iNotificationsOn;
 
-    /**
-     * Current signal state
+    /* Current operation
+    */
+   TOperation iOperation;
+
+     /* Current signal state
      */
     TStrengthState iState;
-
-    /**
-     * Current operation
-     */
-    TOperation iOperation;
-
+ 
 
     VCC_UNITTEST( UT_CVccWlanSignalLevelHandler )
     VCC_UNITTEST( UT_CVccGsmSignalLevelHandler )
--- a/callcontinuity/vcchotrigger/inc/vccwlansignallevelhandler.h	Mon Mar 15 12:39:55 2010 +0200
+++ b/callcontinuity/vcchotrigger/inc/vccwlansignallevelhandler.h	Wed Mar 31 21:20:05 2010 +0300
@@ -112,6 +112,11 @@
     * Destructor.
     */
     virtual ~CVccWlanSignalLevelHandler();
+    
+    /**
+    *  for telling WLAN Signal Level Handler that manual HO is done or not done
+    */
+    void SetManualHoDone( TBool aValue );
 
 private:
 
@@ -177,7 +182,16 @@
      * @see MWlanMgmtNotifications::OldNetworksLost()
      */
     void OldNetworksLost();
-
+    
+    /**
+     * Overriding this because WLAN signal level handler needs to observe the signal level
+     * more frequently than GSM Signal Level Handler
+     */
+    void RunL();
+    
+    //overriding this because specific actions needed for cancellation for WLAN
+    void DoCancel(); 
+    
 private: // data
 
     /**
@@ -190,6 +204,11 @@
      * for informing the states
      */
     CVccEngPsProperty& iVccPsp;
+    
+    /**
+     * indicates is manual HO done or not
+     */
+    TBool iManualHoDone;
     };
 
 #endif // VCCWLANSIGNALLEVELHANDLER_H
--- a/callcontinuity/vcchotrigger/src/vcchotrigger.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/callcontinuity/vcchotrigger/src/vcchotrigger.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -506,6 +506,8 @@
     {
     RUBY_DEBUG_BLOCK( "CVccHoTrigger::ManualHoCallStarted" );
     iManualHoDone = ETrue;
+    //notify Wlan Signal Level Handler so it can stop polling WLAN signal
+    iWlanSignalLevelHandler->SetManualHoDone( ETrue );
     }
 
 // -----------------------------------------------------------------------------
@@ -516,6 +518,8 @@
     {
     RUBY_DEBUG_BLOCK( "CVccHoTrigger::ManualHoCallReleased" );
     iManualHoDone = EFalse;
+
+    iWlanSignalLevelHandler->SetManualHoDone( EFalse );
     }
 
 // -----------------------------------------------------------------------------
--- a/callcontinuity/vcchotrigger/src/vccwlansignallevelhandler.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/callcontinuity/vcchotrigger/src/vccwlansignallevelhandler.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -26,6 +26,9 @@
 // Min. signal strength.
 static const TInt32 KStrengthMin = 110;
 
+const TInt KWlanPollIntervalLowSignal= 1000000;
+const TInt KWlanPollIntervalHighSignal= 5000000;
+
 // ---------------------------------------------------------------------------
 // C++ destructor.
 // ---------------------------------------------------------------------------
@@ -80,6 +83,7 @@
     const TSignalLevelParams& aParams, CVccEngPsProperty& aPsProperty )
     : CVccSignalLevelHandler( aObserver, aParams ), iVccPsp( aPsProperty )
     {
+    iManualHoDone = EFalse;
     }
 
 // ---------------------------------------------------------------------------
@@ -248,3 +252,191 @@
 
     iObserver.WlanSignalChanged( aSignalStrength, aClass );
     }
+
+
+// ---------------------------------------------------------------------------
+// Handles getting the signal strength and notifying the observer about
+// strength changes.
+// ---------------------------------------------------------------------------
+
+void CVccWlanSignalLevelHandler::RunL()
+    {
+    RUBY_DEBUG_BLOCK( "CVccWlanSignalLevelHandler::RunL" );
+
+    // Zero (0) is not acceptable.
+       if ( !iStrength )
+           {
+           RUBY_DEBUG0( " -0 strength not acceptable, setting to KStrengthMin");
+           iStrength = KStrengthMin;
+           }
+
+       RUBY_DEBUG3( " -iStrength = %d iState = %d iOp = %d", iStrength, iState, iOperation );
+
+       switch ( iOperation )
+           {
+           case EOperationGet:
+               {
+
+               // We are in the Get-mode to get the signal strength.
+               // If the strength is < than the high level (== the strength
+               // is good), start timer to check if we are still in good level
+               // after the timer completes.
+               // The same is done if we have a low level (== bad).
+
+               RUBY_DEBUG0( " -EOperationGet");
+
+               if ( iStrength <= iParams.iHighLevel && iStrength > 0 )
+                   {
+                   RUBY_DEBUG0( "  set state = EStrengthHigh, op = EOperationWait" );
+                   
+                   After( iParams.iHighTimeout );
+                   iState = EStrengthHigh;
+                   iOperation = EOperationWait;
+                   }
+               else if ( iStrength >= iParams.iLowLevel )
+                   {
+                   RUBY_DEBUG0( "  set state = EStrengtLow, op = EOperationWait" );
+                   After( iParams.iLowTimeout );
+                   iState = EStrengthLow;
+                   iOperation = EOperationWait;
+                   }
+               else
+                   {
+                   RUBY_DEBUG0( "  strength between low and high, set op = EOperationNone" );
+                  
+                   //WLAN signal is almost weak, check again with low interval
+                   After( KWlanPollIntervalLowSignal );
+                   iOperation = EOperationNone;
+                   iState = EStrengthLow;
+                   // PCLint
+                   }
+               break;
+               }
+
+           case EOperationWait:
+               {
+
+               // Timer has completed. Check the signal level again.
+
+               RUBY_DEBUG0( " -EOperationWait" );
+               RUBY_DEBUG0( "  set op = EOperationComplete" );
+               GetStrength();
+
+               SetActive();
+
+               iOperation = EOperationComplete;
+
+               break;
+               }
+
+           case EOperationComplete:
+               {
+               // Checking signal strength is now done.
+               // Notify our observer (if needed).
+
+               RUBY_DEBUG1( " -EOperationComplete, iStrength = %d", iStrength );
+
+               // Do we have a good signal level?
+               if ( iStrength <= iParams.iHighLevel && iStrength > 0 && iState == EStrengthHigh )
+                   {
+                   RUBY_DEBUG0( " -if ( iStrength <= iParams.iHighLevel" );
+                   NotifyChanges( iStrength, MVccSignalLevelObserver::ESignalClassNormal );
+                   }
+               // Or do we have a bad signal level?
+               else if ( iStrength >= iParams.iHighLevel && iState == EStrengthLow )
+                   {
+                   RUBY_DEBUG0( " -else if ( iStrength >= iParams.iHighLevel" );
+                   NotifyChanges( iStrength, MVccSignalLevelObserver::ESignalClassWeak );
+                   }
+               else
+                   {
+                   // PCLint
+                   }
+               
+               TTimeIntervalMicroSeconds32 interval;
+                                              
+                    if( iState == EStrengthHigh )
+                        {
+                         RUBY_DEBUG0( "  high interval" );
+                        interval = KWlanPollIntervalHighSignal;
+                         }
+                    else
+                          {
+                          RUBY_DEBUG0( "  low interval" )
+                           interval = KWlanPollIntervalLowSignal;
+                          }
+                               
+                    After( interval );
+       
+               iState = EStrengthUnknown;
+               iOperation = EOperationNone;
+             
+               break;
+               }
+
+           case EOperationNone:
+               {
+               RUBY_DEBUG0( " -EOperationNone" );
+               
+               //if manual HO is done then there is no need for checking signal strength so much,
+               //so stopping the loop
+               if( !iManualHoDone )
+                   {
+                   RUBY_DEBUG0( " -call GetStrength()" );
+                   GetStrength();
+                   SetActive();
+                   RUBY_DEBUG1( " -iStrength = %d, set op = EOperationGet \
+                                        state = EStrengthUnknown", iStrength );
+                   iOperation = EOperationGet;
+                   }
+                break;
+         
+               }
+               
+                
+           default:
+               {
+               break;
+               }
+           }
+       
+    }
+
+// ---------------------------------------------------------------------------
+// Lets Wlan Signal Level Handler know is manual handover done or not done
+// 
+// ---------------------------------------------------------------------------
+
+
+void CVccWlanSignalLevelHandler::SetManualHoDone( TBool aValue )
+    {
+    RUBY_DEBUG_BLOCK( "CVccWlanSignalLevelHandler::SetManualHoDone" );
+    iManualHoDone = aValue;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Cancel outstanding requests.
+// ---------------------------------------------------------------------------
+//
+void CVccWlanSignalLevelHandler::DoCancel()
+    {
+    RUBY_DEBUG_BLOCK( "CVccSignalLevelHandler::DoCancel" );
+    switch ( iOperation )
+        {
+        case EOperationWait:
+        case EOperationNone:
+            {
+            RUBY_DEBUG0( "EOperationWait / EOperationNone" );
+            CTimer::DoCancel();
+
+            break;
+            }
+
+
+        default:
+            {
+            break;
+            }
+        }
+    }
--- a/commsconfig/cscapplicationui/inc/csc.hlp.hrh	Mon Mar 15 12:39:55 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +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:
-*
-*/
-//
-// csc.hlp.hrh
-//
-
-//
-// File generated by cshlpcmp Version 011
-//
-
-#ifndef __CSC_HLP_HRH__
-#define __CSC_HLP_HRH__
-
-_LIT( KVOIP_HLP_CSC, "VOIP_HLP_CSC"); //service view
-_LIT( KSERVTAB_HLP_SETTINGS, "SERVTAB_HLP_SETTINGS"); //settings ui
-
-const TUid KUidCscHelp = {0x10275458};
-const TUid KUidCscSettingsUiHelp = {0x1020E566};
-
-#endif // __CSC_HLP_HRH__
--- a/commsconfig/cscapplicationui/src/cscserviceview.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/commsconfig/cscapplicationui/src/cscserviceview.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -567,8 +567,7 @@
 // ---------------------------------------------------------------------------
 // 
 void CCSCServiceView::ExecuteStartupActionsL( 
-        TBool aForeGroundEvent, 
-        TBool aLaunchedFromAi )
+    TBool /*aForeGroundEvent*/, TBool aLaunchedFromAi )
     {
     CSCDEBUG( "CCSCServiceView::ExecuteStartupActionsL - begin" );
     
@@ -588,10 +587,10 @@
             }
         case  CCSCEngStartupHandler::ERemoveSetupPluginService:
             {
-            if ( KNullUid != pluginUid && !aForeGroundEvent )
+            if ( KNullUid != pluginUid )
                 {
                 TRAPD( err, iContainer->HandleServicePluginRemovationL( 
-                        pluginUid ) );
+                    pluginUid ) );
                 
                 // If error in service plugin removal, close csc.
                 if ( err )
--- a/commsconfig/cscgsplugin/src/cscgsplugin.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/commsconfig/cscgsplugin/src/cscgsplugin.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -22,9 +22,9 @@
 #include <bldvariant.hrh>
 #include <StringLoader.h>
 #include <AknNullService.h>
-#include <GSParentPlugin.h>
+#include <gsparentplugin.h>
 #include <cscgspluginrsc.rsg>
-#include <GSPrivatePluginProviderIds.h>
+#include <gsprivatepluginproviderids.h>
 
 #include    "cscgsplugin.h"
 
--- a/convergedconnectionhandler/cchclientapi/cchuinotif/src/cchuinotifier.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/convergedconnectionhandler/cchclientapi/cchuinotif/src/cchuinotifier.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -34,7 +34,7 @@
 #include "cchuinotifconnectionhandler.h"
 
 _LIT( KResourceDir, "\\resource\\apps\\" );
-_LIT( KResourceFileName, "cchuinotif.r??" );
+_LIT( KResourceFileName, "cchuinotif.r*" );
 
 // SCP-plugin uid for Sip VoIP
 const TInt32 KSipVoIPSubServicePlugId = 0x1027545A;
--- a/convergedconnectionhandler/cchserver/inc/cchphonestartupmonitor.h	Mon Mar 15 12:39:55 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +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:  CCchPhoneStartupMonitor.
-*
-*/
-
-#ifndef C_CCHPHONESTARTUPMONITOR_H
-#define C_CCHPHONESTARTUPMONITOR_H
-
-#include <e32std.h>
-#include <e32base.h>
-#include <e32property.h>
-
-class CCchUIHandler;
-
-/**
- *  CCchPhoneStartupMonitor declaration
- *  Monitors phone startup.
- *  @lib cchserver.exe
- *  @since S60 5.0
- */
-class CCchPhoneStartupMonitor : public CActive
-    {
-
-public: // Constructors and destructor
-
-    /**
-    * Two-phased constructor.
-    */
-    static CCchPhoneStartupMonitor* NewL( CCchUIHandler& aCchUIHandler );
-
-    /**
-     * Two-phased constructor.
-     */
-    static CCchPhoneStartupMonitor* NewLC( CCchUIHandler& aCchUIHandler );
-
-    /**
-     * Destructor.
-     */
-    virtual ~CCchPhoneStartupMonitor();
-
-    /**
-    Implements cancellation of an outstanding request.
-    @see CActive::Cancel
-    */
-    virtual void DoCancel();
-
-    /**
-    Handles an active object's request completion event.
-    */
-    virtual void RunL();
-    
-    /**
-    Handles leaving of RunL.
-    */
-    virtual TInt RunError(TInt aError);
-    
-private:
-
-    /**
-     * By default Symbian 2nd phase constructor is private.
-     */
-    void ConstructL();
-
-    /**
-     * C++ default constructor.
-     */
-    CCchPhoneStartupMonitor( CCchUIHandler& aCchUIHandler );
-    
-    /**
-    Monitor phone startup phases.
-    */
-    void MonitorPhoneStartupPhaseL();
-    
-private: // data
-
-    /**
-     * Handle to cch ui handler.
-     */
-    CCchUIHandler& iCchUIHandler;
-    
-    /**
-     * Handle to RProperty.
-     */
-    RProperty iStartupUiPhaseProperty;
-    
-    /**
-     * Should I commit suicide
-     */
-    TBool iDie;
-    };
-
-#endif // C_CCHPHONESTARTUPMONITOR_H
-
-// End of file
--- a/convergedconnectionhandler/cchserver/src/cchcommdbwatcher.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/convergedconnectionhandler/cchserver/src/cchcommdbwatcher.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -21,7 +21,7 @@
 #include <cmconnectionmethoddef.h>
 #include <cmpluginwlandef.h>
 #include <centralrepository.h>
-#include <CommsDat.h>
+#include <commsdat.h>
 
 #include "cchcommdbwatcher.h"
 #include "cchcommdbwatcherobserver.h"
--- a/convergedconnectionhandler/cchserver/src/cchnotehandler.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/convergedconnectionhandler/cchserver/src/cchnotehandler.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -31,7 +31,7 @@
 #include "cchlogger.h"
 
 _LIT( KCchResourceDir, "\\resource\\apps\\" );
-_LIT( KCchResourceFileName, "cch.r??" );
+_LIT( KCchResourceFileName, "cch.r*" );
 
 // ============================ MEMBER FUNCTIONS ===============================
 
--- a/convergedconnectionhandler/cchserver/src/cchphonestartupmonitor.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,169 +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:  CCchPhoneStartupMonitor implementation.
- *
-*/
-
-#include "cchlogger.h"
-#include "cchuihandler.h"
-#include "cchphonestartupmonitor.h"
-
-#include <startupdomainpskeys.h>
-
-// ============================= LOCAL FUNCTIONS =============================
-
-// ============================ MEMBER FUNCTIONS =============================
-
-// ---------------------------------------------------------------------------
-// CCchPhoneStartupMonitor::CCchPhoneStartupMonitor
-// C++ default constructor can NOT contain any code, that might leave.
-// ---------------------------------------------------------------------------
-//
-CCchPhoneStartupMonitor::CCchPhoneStartupMonitor( 
-    CCchUIHandler& aCchUIHandler ) :
-    CActive( CActive::EPriorityStandard ),
-    iCchUIHandler( aCchUIHandler )
-    {
-    CCHLOGSTRING( "CCchPhoneStartupMonitor::CCchPhoneStartupMonitor" );
-    CActiveScheduler::Add( this );
-    }
-
-// ---------------------------------------------------------------------------
-// CCchPhoneStartupMonitor::ConstructL
-// Symbian 2nd phase constructor can leave.
-// ---------------------------------------------------------------------------
-//
-void CCchPhoneStartupMonitor::ConstructL()
-    {  
-    CCHLOGSTRING( "CCchPhoneStartupMonitor::ConstructL - IN" );
-    
-    iStartupUiPhaseProperty.Attach( KPSUidStartup, KPSStartupUiPhase );
-    MonitorPhoneStartupPhaseL();
-    
-    CCHLOGSTRING( "CCchPhoneStartupMonitor::ConstructL - OUT" );
-    }
-
-// ---------------------------------------------------------------------------
-// CCchPhoneStartupMonitor::NewL
-// Two-phased constructor.
-// ---------------------------------------------------------------------------
-//
-CCchPhoneStartupMonitor* CCchPhoneStartupMonitor::NewL( 
-    CCchUIHandler& aCchUIHandler )
-    {
-    CCHLOGSTRING( "CCchPhoneStartupMonitor::NewL" );
-    CCchPhoneStartupMonitor* self = 
-        CCchPhoneStartupMonitor::NewLC( aCchUIHandler );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CCchPhoneStartupMonitor::NewLC
-// Two-phased constructor.
-// ---------------------------------------------------------------------------
-//
-CCchPhoneStartupMonitor* CCchPhoneStartupMonitor::NewLC( 
-    CCchUIHandler& aCchUIHandler )
-    {
-    CCHLOGSTRING( "CCchPhoneStartupMonitor::NewLC" );
-    CCchPhoneStartupMonitor* self = 
-        new (ELeave) CCchPhoneStartupMonitor( aCchUIHandler );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CCchPhoneStartupMonitor::~CCchPhoneStartupMonitor()
-// Destructor.
-// ---------------------------------------------------------------------------
-//
-CCchPhoneStartupMonitor::~CCchPhoneStartupMonitor()
-    {   
-    CCHLOGSTRING( "CCchPhoneStartupMonitor::~CCchPhoneStartupMonitor" );
-    
-    iStartupUiPhaseProperty.Cancel();
-    Cancel();
-    }
-
-// ----------------------------------------------------------------------------
-// CCchPhoneStartupMonitor::DoCancel()
-// ----------------------------------------------------------------------------
-void CCchPhoneStartupMonitor::DoCancel()
-    {
-    CCHLOGSTRING("CCchPhoneStartupMonitor::DoCancel()");   
-    }
-
-// ----------------------------------------------------------------------------
-// CCchPhoneStartupMonitor::RunL()
-// ----------------------------------------------------------------------------
-void CCchPhoneStartupMonitor::RunL()
-    {
-    CCHLOGSTRING("CCchPhoneStartupMonitor::RunL() IN"); 
-       
-    MonitorPhoneStartupPhaseL();
-    
-    CCHLOGSTRING("CCchPhoneStartupMonitor::RunL() OUT"); 
-    }
-
-// ----------------------------------------------------------------------------
-// CCchPhoneStartupMonitor::RunError()
-// ----------------------------------------------------------------------------
-TInt CCchPhoneStartupMonitor::RunError( TInt /*aError*/ )
-    {
-    return KErrNone;
-    }
-
-// ----------------------------------------------------------------------------
-// CCchPhoneStartupMonitor::MonitorPhoneStartupPhaseL()
-// ----------------------------------------------------------------------------
-void CCchPhoneStartupMonitor::MonitorPhoneStartupPhaseL()
-    {
-    CCHLOGSTRING("CCchPhoneStartupMonitor::MonitorPhoneStartupPhaseL() IN"); 
-    
-    TInt status( 0 );   
-    TInt err = iStartupUiPhaseProperty.Get( 
-        KPSUidStartup,
-        KPSStartupUiPhase,
-        status );
-    
-    CCHLOGSTRING2(
-        "CCchPhoneStartupMonitor::MonitorPhoneStartupPhaseL() ERR=%d", err );
-    
-    if ( !err )
-        {
-        TBool networkConnAllowed = iCchUIHandler.NetworkConnectionsAllowed();
-
-        CCHLOGSTRING2( " --> status=%d", status );
-        CCHLOGSTRING2( " --> networkConnAllowed=%d", networkConnAllowed ); 
-        
-        if ( EStartupUiPhaseAllDone == status && !networkConnAllowed )
-            {
-            iCchUIHandler.ShowEmergencyWarningNoteL( EFalse );
-            Cancel();
-            }
-        else
-            {
-            iStartupUiPhaseProperty.Subscribe( iStatus );
-            SetActive();
-            }
-        }
-    
-    CCHLOGSTRING("CCchPhoneStartupMonitor::MonitorPhoneStartupPhaseL() OUT"); 
-    }
-
-// ========================== OTHER EXPORTED FUNCTIONS =======================
-
-//  End of File
--- a/package_definition.xml	Mon Mar 15 12:39:55 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<SystemDefinition schema="3.0.0">
-  <package id="iptelephony" name="IP Telephony" levels="eng plugin util ui">
-    <collection id="iptelcommsconfig" name="IP Telephony Comms Config" level="ui">
-      <component id="cscgsplugin" filter="s60" name="CSC GS Plugin" class="plugin" introduced="^2">
-        <unit bldFile="commsconfig/cscgsplugin/group"/>
-      </component>
-      <component id="cscsipvoipcleanupplugin" filter="s60" name="CSC SIP VoIP Cleanup Plugin" class="plugin" introduced="^2">
-        <unit bldFile="commsconfig/cscsipvoipcleanupplugin/group"/>
-      </component>
-      <component id="cscengine" filter="s60" name="Connection Service Configurator Engine" introduced="^2">
-        <unit bldFile="commsconfig/cscengine/group"/>
-      </component>
-      <component id="cscsettingsui" filter="s60" name="CSC Settings UI" introduced="^2">
-        <unit bldFile="commsconfig/cscsettingsui/group"/>
-      </component>
-      <component id="cscapplicationui" filter="s60" name="CSC Application UI" introduced="^2">
-        <unit bldFile="commsconfig/cscapplicationui/group"/>
-      </component>
-      <component id="commsconfig_build" filter="s60" name="Comms Config Build" introduced="^2">
-      	<!--  consider distributing this into the above components -->
-        <unit bldFile="commsconfig/group"/>
-      </component>
-    </collection>
-    <collection id="convergedconnectionhandler" name="Converged Connection Handler" level="eng">
-      <component id="cchserver" filter="s60" name="CCH Server" introduced="^2">
-        <unit bldFile="convergedconnectionhandler/cchserver/group"/>
-      </component>
-      <component id="cchclient" filter="s60" name="CCH Client" introduced="^2">
-        <unit bldFile="convergedconnectionhandler/cchclient/group"/>
-      </component>
-      <component id="cchclientapi" filter="s60" name="CCH Client API" introduced="^2">
-        <unit bldFile="convergedconnectionhandler/cchclientapi/group"/>
-      </component>
-      <component id="convergedconnectionhandler_build" filter="s60" name="CCH Build" introduced="^2">
-      	<!--  consider distributing this into the above components, or collapse the collection into a single component -->
-        <unit bldFile="convergedconnectionhandler/group"/>
-      </component>
-    </collection>
-    <collection id="richcallsettingsengine" name="Rich Call Settings Engine" level="eng">
-      <component id="rcse2" filter="s60" name="Rich Call Settings Engine Build" introduced="^2">
-        <unit bldFile="richcallsettingsengine/rcse2/group"/>
-      </component>
-    </collection>
-    <collection id="sipvoipprovider" name="SIP VoIP Provider" level="plugin">
-      <component id="svp" filter="s60" name="SIP VoIP Provider Build" class="plugin" introduced="^2">
-        <unit bldFile="sipvoipprovider/group"/>
-      </component>
-    </collection>
-    <collection id="voipplugins" name="VoIP Plugins" level="plugin">
-      <component id="sipmxresolver" filter="s60" name="SIP MX Resolver" class="plugin" introduced="^2">
-        <unit bldFile="voipplugins/sipmxresolver/group"/>
-      </component>
-      <component id="sipconnectionprovider" filter="s60" name="SIP Connection Provider" class="plugin" introduced="^2">
-        <unit bldFile="voipplugins/sipconnectionprovider/group"/>
-        	<!-- can only have one unit, can the next be #'included from the above? -->
-        <unit bldFile="voipplugins/sipconnectionprovider/ipvoicemailengine/group"/>
-      </component>
-      <component id="ipapputils" filter="s60" name="IP App Utils" introduced="^2">
-        <unit bldFile="voipplugins/ipapputils/group"/>
-      </component>
-      <component id="voipadapters" filter="s60" name="VoIP Adapters" class="plugin" introduced="^2">
-        <unit bldFile="voipplugins/voipadapters/group"/>
-      </component>
-      <component id="accountcreationplugin" filter="s60" name="Account Creation Plugin" class="plugin" introduced="^2">
-        <unit bldFile="voipplugins/accountcreationplugin/group"/>
-      </component>
-      <component id="dhcppositionprovider" filter="s60" name="DHCP Position Provider" class="plugin" introduced="^2">
-        <unit bldFile="voipplugins/dhcppositionprovider/group"/>
-      </component>
-      <component id="svtmatching" filter="s60" name="SIP VoIP Telephony Matching" class="plugin" introduced="^2">
-        <unit bldFile="voipplugins/svtmatching/group"/>
-      </component>
-      <component id="svtlogging" filter="s60" name="SVT Logging" class="plugin" introduced="^2">
-        <unit bldFile="voipplugins/svtlogging/group"/>
-      </component>
-      <component id="svtcallmenu" filter="s60" name="SVT Call Menu" class="plugin" introduced="^2">
-        <unit bldFile="voipplugins/svtcallmenu/group"/>
-      </component>
-    </collection>
-    <collection id="callcontinuity" name="Call Continuity" level="util">
-      <component id="vccutils" filter="s60" name="VCC Utils" introduced="^2">
-        <unit bldFile="callcontinuity/vccutils/group"/>
-      </component>
-      <component id="nsmldmvccadapter" filter="s60" name="SyncML DM VCC Adapter" class="plugin" introduced="^2">
-        <unit bldFile="callcontinuity/nsmldmvccadapter/group"/>
-      </component>
-      <component id="vccclientprovisioningadapter" filter="s60" name="VCC Client Provisioning Adapter" class="plugin" introduced="^2">
-        <unit bldFile="callcontinuity/vccclientprovisioningadapter/group"/>
-      </component>
-      <component id="vccpropertyhandler" filter="s60" name="VCC Property Handler" introduced="^2">
-        <unit bldFile="callcontinuity/vccpropertyhandler/group"/>
-      </component>
-      <component id="vcchotrigger" filter="s60" name="VCC HO Trigger" introduced="^2">
-        <unit bldFile="callcontinuity/vcchotrigger/group"/>
-      </component>
-      <component id="vcc" filter="s60" name="VoIP Call Continuity" class="plugin" introduced="^2">
-        <unit bldFile="callcontinuity/vcc/group"/>
-      </component>
-      <component id="settingsreader" filter="s60" name="Settings Reader" purpose="development" introduced="^2">
-      	<!-- what to do with this component? -->
-        <!-- <unit bldFile="callcontinuity/settingsreader/group"/> -->
-      </component>
-      <component id="callcontinuity_build" filter="s60" name="Call Continuity Build" introduced="^2">
-      	<!--  consider distributing this into the above components -->
-        <unit bldFile="callcontinuity/group"/>
-      </component>
-    </collection>
-    <collection id="iptelephony_info" name="IP Telephony Info" level="ui">
-      <component id="iptel_plat" filter="s60" class="api" name="IP Telephony Platform Interfaces" introduced="^2">
-        <unit bldFile="iptel_plat/group"/>
-      </component>
-    </collection>
-  </package>
-</SystemDefinition>
--- a/sipvoipprovider/inc/svpmosession.h	Mon Mar 15 12:39:55 2010 +0200
+++ b/sipvoipprovider/inc/svpmosession.h	Wed Mar 31 21:20:05 2010 +0300
@@ -288,7 +288,7 @@
     * @return HBufC8* constructed uri
     */
     HBufC8* CompleteUriL( const TDesC8& aRecipient, 
-                          const CSIPProfile&,
+                          const CSIPProfile& aSipProfile,
                           const TUint32& aSecurityStatus,
                           TBool aUserEqualsPhoneRequired );
 
--- a/sipvoipprovider/src/svpmosession.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/sipvoipprovider/src/svpmosession.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -140,8 +140,6 @@
             {
             // set crypto contexts
             SetCryptoContextL();
-            // Set AVP to use instead of SAVP
-            iSession->SetModifierL( KMceSecureSession, KMceSecurePlainAVP );
             // set secured flag to ETrue to indicate that this is secure session
             SetSecurePreferred( ETrue );
             // set iSecured flag so UI can show right icon
@@ -158,8 +156,6 @@
             {
             // set crypto contexts
             SetCryptoContextL();
-            // Set AVP to use instead of SAVP
-            iSession->SetModifierL( KMceSecureSession, KMceSecurePlainAVP );
             // set secure mandatory flag ETrue, only secure session allowed       
             SetSecureMandatory( ETrue );
             // set iSecured flag so UI can show right icon
@@ -291,13 +287,37 @@
                                      TBool aUserEqualsPhoneRequired )
     {
     SVPDEBUG1( "CSVPMoSession::CompleteUriL In" )
-   
+
     // create instance of uri parser
     CSVPUriParser* uriParser = CSVPUriParser::NewLC();
-     
-    const TDesC8* userAor = NULL;
-    aSIPProfile.GetParameter( KSIPUserAor, userAor );
+    
+    HBufC8* userAor( NULL );
+    const MDesC8Array* aors( NULL ); // Array of registered address of records
+    
+    TInt result = aSIPProfile.GetParameter( KSIPRegisteredAors, aors );
     
+    if ( !aors || aors->MdcaCount() == KErrNone )
+        {
+        SVPDEBUG1( "CSVPMoSession::CompleteUriL - registered aors array empty" )
+        const TDesC8* userAorStr = NULL;
+        result = aSIPProfile.GetParameter( KSIPUserAor, userAorStr );
+        SVPDEBUG2( "CSVPMoSession::CompleteUriL - KSIPUserAor result: %d", result )
+        userAor = HBufC8::NewLC( userAorStr->Length() );
+        userAor->Des().Copy( *userAorStr );
+        }
+    else
+        {
+        #ifdef _DEBUG
+            TBuf<KSvpMaxDebugBufferSize> tmpUri;
+            for ( TInt i = 0; i < aors->MdcaCount(); i++ )
+                {
+                tmpUri.Copy( aors->MdcaPoint( i ) );
+                SVPDEBUG3( "CSVPMoSession::CompleteUriL - registered AOR[%d]: %S", i, &tmpUri )
+                }
+        #endif
+        userAor = HBufC8::NewLC( aors->MdcaPoint( 0 ).Length() );
+        userAor->Des().Copy( aors->MdcaPoint( 0 ) );
+        }
     // set service id to uri parser, needed for setting user=phone
     uriParser->SetUserEqualsPhoneRequiredL( aUserEqualsPhoneRequired );
     
@@ -321,7 +341,7 @@
         SVPDEBUG1( "CSVPMoSession::CompleteUriL Completing SIPS URI..." )
         uri = uriParser->CompleteSecureSipUriL( aRecipient, *userAor );
         }
-  
+    CleanupStack::PopAndDestroy( userAor );
     CleanupStack::PopAndDestroy( uriParser );
     
     SVPDEBUG1( "CSVPMoSession::CompleteUriL Out" )
--- a/sipvoipprovider/src/svpsslogcall.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/sipvoipprovider/src/svpsslogcall.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -211,10 +211,16 @@
                         {
                         SVPDEBUG1("CSVPSSLogCall::FindContactTitleL, manyCompleteMatches");
                         manyCompleteMatches = ETrue;
+                        
+                        // Set to NULL if multiple matches                     
+                        if ( title )
+                            {
+                            delete title;
+                            title = NULL;
+                            }       
                         }
                     else
-                        {
-    					iLogEvent->SetContact( contactId ); // Set aItem based on complete match.
+                        {					
 						title = tempContactItem->GetContactTitleL();
                         compId = contactId;
                         ind = count;
@@ -224,6 +230,12 @@
             }
         contactId = iter->NextL();
         }
+    
+    // Set contact if only one match found
+    if ( compId && !manyCompleteMatches )
+        {
+        iLogEvent->SetContact( compId );
+        } 
 
     CleanupStack::PopAndDestroy( iter );
     CleanupStack::PopAndDestroy( contacts );
@@ -277,8 +289,8 @@
         SVPDEBUG1("  CSVPSSLogCall::HandleCallLoggingL, URI address is seen" );
         HBufC* contactName = FindContactTitleL( number );
 	    if ( contactName )
-		    { //  Phonebook contact id has been found
-		    //tempBufTwo.Copy( contactName->Des() );
+		    { 
+	        //  Phonebook contact id has been found
 		    tempBufTwo.Copy( number );
 		    iLogEvent->SetRemoteParty( contactName->Des() );
 	        }
@@ -287,7 +299,13 @@
 	       	tempBufTwo.Copy( number );
 	       	iLogEvent->SetRemoteParty( number );
 	        }
-	    delete contactName;
+	    
+	    if ( contactName )
+	        {
+	        delete contactName;
+	        contactName = NULL;
+	        }
+	    
 	    tempBufOne.Append( tempBufTwo );             
 	    tempBufTwo.Zero();
 	    tempBufOne.Append( KLogFieldDelimiter() );
--- a/sipvoipprovider/src/svpuriparser.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/sipvoipprovider/src/svpuriparser.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -154,7 +154,15 @@
     SVPDEBUG1( "CSVPUriParser::CompleteSipUriL In" )
     
     // Copy the parameter to a new buffer.
-    HBufC8* uri = aUri.AllocLC();
+    HBufC8* uri = aUri.AllocLC();   // CS: 1
+    
+#ifdef _DEBUG
+    TBuf<KSvpMaxDebugBufferSize> tmpStr;
+    tmpStr.Copy( aAOR );
+    SVPDEBUG2( "CSVPUriParser::CompleteSipUriL IN aAOR: %S", &tmpStr )
+    tmpStr.Copy( aUri );
+    SVPDEBUG2( "CSVPUriParser::CompleteSipUriL IN aURI: %S", &tmpStr )
+#endif // _DEBUG
     
     // Trim ALL white space from URI, even if used as an user name
     uri->Des().TrimAll();
@@ -166,7 +174,7 @@
              KErrNotFound != uri->Des().Left( KTelPrefixLength ).Find( KTelPrefix ) &&
              KErrNotFound == uri->Des().Find( KSVPAt ) )
             {
-            CleanupStack::Pop( uri );
+            CleanupStack::Pop( uri );  // CS:0
             return uri;
             }
         
@@ -250,10 +258,13 @@
         {
         SVPDEBUG1( "    CSVPUriParser::CompleteSipUriL uri null" )
         }
-
+    
+#ifdef _DEBUG
+    tmpStr.Copy( *uri );
+    SVPDEBUG2( "CSVPUriParser::CompleteSipUriL OUT: %S", &tmpStr )
+#endif // _DEBUG
+    
     CleanupStack::Pop( 1 ); // uri
-    
-    SVPDEBUG1( "CSVPUriParser::CompleteSipUriL Out" )
     return uri;
     }
 
@@ -286,6 +297,14 @@
     
     // Copy the parameter to a new buffer.
     HBufC8* uri = aUri.AllocLC();
+
+#ifdef _DEBUG
+    TBuf<KSvpMaxDebugBufferSize> tmpStr;
+    tmpStr.Copy( aAOR );
+    SVPDEBUG2( "CSVPUriParser::CompleteSecureSipUriL IN aAOR: %S", &tmpStr )
+    tmpStr.Copy( aUri );
+    SVPDEBUG2( "CSVPUriParser::CompleteSecureSipUriL IN aURI: %S", &tmpStr )
+#endif // _DEBUG
     
     // Trim ALL white space from URI, even if used as an user name 
     uri->Des().TrimAll();
@@ -363,10 +382,13 @@
         {
         SVPDEBUG1( "    CSVPUriParser::CompleteSecureSipUriL uri null" )
         }
-
+    
+#ifdef _DEBUG
+    tmpStr.Copy( *uri );
+    SVPDEBUG2( "CSVPUriParser::CompleteSecureSipUriL OUT: %S", &tmpStr )
+#endif // _DEBUG
+    
     CleanupStack::Pop( 1 ); // uri
-    
-    SVPDEBUG1( "CSVPUriParser::CompleteSecureSipUriL Out" )
     return uri;
     }
 
@@ -420,7 +442,7 @@
     {
     SVPDEBUG1( "CSVPUriParser::CheckSipsPrefix" )
     
-    // The "sip:" prefix is expected to be at the beginning of the URI.
+    // The "sips:" prefix is expected to be at the beginning of the URI.
     return ( 0 == aUri.Find( KSVPSipsPrefix ) );
     }
 
@@ -559,7 +581,7 @@
     
     // Re-allocate the URI
     aUri = aUri->ReAllocL( aUri->Length() + domainBuf->Length() );
-    aUri->Des().Append( domainBuf->Des() ); // Append the domain.
+    aUri->Des().Append( *domainBuf ); // Append the domain.
     
     CleanupStack::PopAndDestroy( domainBuf ); // CS : 0
     
--- a/sipvoipprovider/svptransfer/src/svptransfercontroller.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/sipvoipprovider/svptransfer/src/svptransfercontroller.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 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"
@@ -27,6 +27,10 @@
 #include "svpsipconsts.h"
 #include "svpconsts.h"
 
+// These have to be handled as well
+_LIT8( KSVPNotifyRinging183, "SIP/2.0 183 Ringing" );
+_LIT8( KSVPNotifyOk, "SIP/2.0 200 Ok" );
+
 // ---------------------------------------------------------------------------
 // CSVPTransferController::CSVPTransferController
 // ---------------------------------------------------------------------------
@@ -225,7 +229,8 @@
                     }
                 }
             }
-        else if ( !content->Find( TPtrC8( KSVPNotifyOK ) ) )
+        else if ( !content->Find( TPtrC8( KSVPNotifyOK ) ) || 
+                  !content->Find( TPtrC8( KSVPNotifyOk ) ) )
             {
             if ( iTransferContext->IsAttended() )
                 {
@@ -254,11 +259,12 @@
                 SVPDEBUG1( "CSVPTransferController::NotifyReceivedL, UnAttended: SIP/2.0 200 OK" );                    
                 }
             }
-        else if ( !content->Find( TPtrC8( KSVPNotifyRinging ) ) &&
-                  !iTransferContext->IsAttended())
+        else if ( ( !content->Find( TPtrC8( KSVPNotifyRinging ) ) || 
+                    !content->Find( TPtrC8( KSVPNotifyRinging183 ) ) ) &&
+                    !iTransferContext->IsAttended())
             {
             // Polycom send Ringing instead of Trying in unattended case.
-            SVPDEBUG1( "CSVPTransferController::NotifyReceivedL, UnAttended and 180 Ringing" );
+            SVPDEBUG1( "CSVPTransferController::NotifyReceivedL, UnAttended and Ringing" );
 
             // Check if 202 Accepted already received
             if ( iAccepted )
--- a/voipplugins/sipconnectionprovider/inc/scppresencehandler.h	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/sipconnectionprovider/inc/scppresencehandler.h	Wed Mar 31 21:20:05 2010 +0300
@@ -76,7 +76,13 @@
      * Destructor.
      */
     virtual ~CScpPresenceHandler();
-
+    
+    /**
+     * Update XDM settings access point.
+     * XDM AP should be the same as SIP profile.
+     */    
+    void UpdateXdmSettingsL();
+    
 public: // From CScpServiceHandlerBase
     
     /**
@@ -148,12 +154,6 @@
     void ConstructL();
     
     /**
-     * Update XDM settings access point.
-     * XDM ap should be same as sip profile.
-     */      
-    void UpdateXdmSettingsL();
-    
-    /**
      * Binds SCP's presence context.
      */                                 
     void ServerBindL();
@@ -283,6 +283,12 @@
      */
     TBool iDisableAfterXimpRequestsCompleted;
     
+    /**
+     * Flag for indicating if network is lost and roaming is
+     * concluded to be ongoing
+     */
+    TBool iNetworkLostRoamingOngoing;
+    
 #ifdef _DEBUG
     friend class T_CScpPresenceHandler;
 #endif
--- a/voipplugins/sipconnectionprovider/inc/scpsipconnection.h	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/sipconnectionprovider/inc/scpsipconnection.h	Wed Mar 31 21:20:05 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 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"
@@ -246,7 +246,14 @@
      * @return ETrue when username exists
      */
     TBool IsUsernameSetL() const;
-
+    
+    /**
+     * Checks if SNAP connection method used by the SIP profile is
+     * available
+     * @return ETrue if available
+     */
+    TBool IsSnapConnectionAvailable( TInt aSnapId ) const;
+    
 #ifdef _DEBUG
     void GetInfo( TDes& aInfo ) const;
 #endif
@@ -303,13 +310,6 @@
     TBool IsNetworkConnectionAvailable() const;
 
     /**
-     * Checks if SNAP connection method used by the sip profile is
-     * available
-     * @return ETrue if available
-     */
-    TBool IsSnapConnectionAvailable( TInt aSnapId ) const;
-    
-    /**
      * Checks if IAP connection method used by sip profile is
      * available
      * @return ETrue if available
--- a/voipplugins/sipconnectionprovider/ipvoicemailengine/inc/ipvmbxbase.h	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/sipconnectionprovider/ipvoicemailengine/inc/ipvmbxbase.h	Wed Mar 31 21:20:05 2010 +0300
@@ -98,11 +98,6 @@
     void DeleteEvent();
 
     /**
-     * Update status of voice mails.
-     */
-    static TInt ReSubscribe( TAny* aThis );
-
-    /**
      * Cancel resubscribe timer
      */
     void Cancel();
@@ -185,17 +180,6 @@
     CMceManager& iMceManager;
 
     /**
-     * Re SUBSCRIBE timer
-     * Own.
-     */
-    CDeltaTimer* iReSubscribe;
-
-    /**
-     * Re SUBSCRIBE period
-     */
-    TTimeIntervalMicroSeconds iReSubscribePeriod;
-
-    /**
      * State of base class
      */
     TIpVmbxBaseStates iState;
@@ -230,12 +214,6 @@
      */
     CIpVmbxEngine& iVmbxEngine;
 
-    /**
-     * Re subscribe callback
-     */
-    TDeltaTimerEntry iUpdateEvent;
-
-
     EUNIT_IMPLEMENTATION
     };
 
--- a/voipplugins/sipconnectionprovider/ipvoicemailengine/src/ipvmbxbase.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/sipconnectionprovider/ipvoicemailengine/src/ipvmbxbase.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -28,8 +28,6 @@
 
 const TInt KMinReSubscribeDelta = 600; // 10 min
 const TInt KMaxReSubscribeDelta = 86400; // 24 h
-const TUint32 KServerRefreshInterval = KMaxReSubscribeDelta;
-const TInt KSecondsToMicro = 1000000;
 
 _LIT8( KEventHeader8, "message-summary" );
 
@@ -47,7 +45,6 @@
         iSipProfile( NULL ),
         iMceOutEvent( NULL ),
         iMceManager( aMceManager ),
-        iReSubscribe( NULL ),
         iVmbxEngine( aVmbxEngine )
     {
     }
@@ -59,13 +56,10 @@
 //
 void CIpVmbxBase::ConstructL( TDesC8& aVoiceMailUri8 )
     {
-    iReSubscribe = CDeltaTimer::NewL( CActive::EPriorityIdle );
     if ( iVmbxUri8.MaxLength() >= aVoiceMailUri8.Length() )
         {
         iVmbxUri8.Copy( aVoiceMailUri8 );
         }
-    TCallBack cb( ReSubscribe, this );
-    iUpdateEvent.Set( cb );
     }
 
 
@@ -99,11 +93,6 @@
     {
     IPVMEPRINT( "CIpVmbxBase::~CIpVmbxBase - IN" );
 
-    if ( iReSubscribe )
-        {
-        iReSubscribe->Remove( iUpdateEvent );
-        }
-    delete iReSubscribe;
     delete iMceOutEvent;
 
     IPVMEPRINT( "CIpVmbxBase::~CIpVmbxBase - OUT" );
@@ -143,8 +132,11 @@
             aReSubscribe = KMaxReSubscribeDelta;
             }
 
-    iReSubscribePeriod = ( TInt64 ) aReSubscribe * ( TInt64 ) KSecondsToMicro;
-
+    TUint32 resubscribeInterval = ( TUint32 ) aReSubscribe;
+        
+    IPVMEPRINT2( "CIpVmbxAppBase::SubscribeL - resubscribe interval=%d",
+        resubscribeInterval );
+    
     __ASSERT_DEBUG( !iMceOutEvent, Panic( KErrAlreadyExists ) );
 
     if ( !iMceOutEvent )
@@ -154,7 +146,7 @@
             *iSipProfile,
             iVmbxUri8,
             KEventHeader8,
-            KServerRefreshInterval );
+            resubscribeInterval );
         }
     else
         {
@@ -183,7 +175,6 @@
     {
     IPVMEPRINT( "CIpVmbxAppBase::TerminateEventL - IN" );
 
-    iReSubscribe->Remove( iUpdateEvent );
     if ( iMceOutEvent && CMceEvent::EActive == iMceOutEvent->State() )
         {
         iMceOutEvent->TerminateL();
@@ -209,68 +200,6 @@
     }
 
 
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-TInt CIpVmbxBase::ReSubscribe( TAny* aThis )
-    {
-    CIpVmbxBase* base = reinterpret_cast<CIpVmbxBase*> ( aThis );
-    __ASSERT_DEBUG( base, Panic( KErrArgument ) );
-    IPVMEPRINT2(
-        "CIpVmbxAppBase::ReSubscribeL - IN state: %d",
-        base->iMceOutEvent->State() );
-
-    if ( base && base->iMceOutEvent )
-        {
-        switch ( base->iMceOutEvent->State() )
-            {
-            case CMceEvent::EActive:
-                {
-                TRAPD( err, base->iMceOutEvent->UpdateL( KServerRefreshInterval ) );
-                if ( err )
-                    {
-                    base->iVmbxEngine.HandleMessage(
-                        base->iServiceProviderId, CIpVmbxEngine::EEngineNetworkError );
-                    }
-                base->iPendingResubscribeCount = 0;
-                if ( !base->iReSubscribe->IsActive() )
-                    {
-                    base->iReSubscribe->QueueLong(
-                        base->iReSubscribePeriod,
-                        base->iUpdateEvent );
-                    }
-                break;
-                }
-            case CMceEvent::EPending:
-                {
-                if ( base->iPendingResubscribeCount++ )
-                    {
-                    // Allows to skip one resubscribe before error occurs
-                    base->iVmbxEngine.HandleMessage(
-                        base->iServiceProviderId,
-                        CIpVmbxEngine::EEngineNetworkLost );
-                    }
-                break;
-                }
-            case CMceEvent::EIdle:
-            case CMceEvent::ETerminated:
-                {
-                base->iVmbxEngine.HandleMessage(
-                    base->iServiceProviderId,
-                    CIpVmbxEngine::EEngineNetworkLost );
-                break;
-                }
-            default:
-                IPVMEPRINT( "Unhandled message!" );
-            }
-        }
-
-    IPVMEPRINT( "CIpVmbxAppBase::ReSubscribeL - OUT" );
-    return KErrNone;
-    }
-
-
 // ----------------------------------------------------------------------------
 //
 // ----------------------------------------------------------------------------
@@ -278,7 +207,6 @@
 void CIpVmbxBase::Cancel()
     {
     iState = EDisabled;
-    iReSubscribe->Remove( iUpdateEvent );
     }
 
 
@@ -309,10 +237,6 @@
 void CIpVmbxBase::SetStateRegistered()
     {
     iState = ERegistered;
-    if ( !iReSubscribe->IsActive() )
-        {
-        iReSubscribe->QueueLong( iReSubscribePeriod, iUpdateEvent );
-        }
     }
 
 
--- a/voipplugins/sipconnectionprovider/ipvoicemailengine/src/ipvmbxengine.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/sipconnectionprovider/ipvoicemailengine/src/ipvmbxengine.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -418,11 +418,17 @@
 //
 void CIpVmbxEngine::UnsubscribeProfileL( TUint32 aServiceProviderId )
     {
+    IPVMEPRINT2( "CIpVmbxEngine::UnsubscribeProfileL: %d - IN", 
+	    aServiceProviderId );
+    
     CIpVmbxBase* subscription( SubscriptionByProvider( aServiceProviderId ) );
     if ( !subscription )
         {
         User::Leave( KErrNotFound );
         }
+    
+    IPVMEPRINT2( "CIpVmbxEngine::UnsubscribeProfileL: state=%d",
+	    subscription->State() );
 
     switch( subscription->State() )
         {
--- a/voipplugins/sipconnectionprovider/src/scppresencehandler.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/sipconnectionprovider/src/scppresencehandler.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -39,7 +39,7 @@
 #include <ximpcontext.h>
 #include <ximpstatus.h>
 #include <pressettingsapi.h> //presence settings
-#include <xdmsettingsapi.h>
+#include <XdmSettingsApi.h>
 #include <cvimpstsettingsstore.h>
 
 #include "scppresencehandler.h"
@@ -78,7 +78,8 @@
 CScpPresenceHandler::CScpPresenceHandler( CScpSubService& aSubService ) :
     CScpServiceHandlerBase( aSubService ),
     iPresenceState( ENoBind ),
-    iDisableAfterXimpRequestsCompleted( EFalse )
+    iDisableAfterXimpRequestsCompleted( EFalse ),
+    iNetworkLostRoamingOngoing( EFalse )
     {
     SCPLOGSTRING2( "CScpPresenceHandler[0x%x]::CScpPresenceHandler", this );
     }
@@ -238,6 +239,8 @@
     SCPLOGSTRING4( "CScpPresenceHandler[0x%x]::HandleSipConnectionEvent id: %d event: %d",
                    this, aProfileId, aEvent );
     
+    iNetworkLostRoamingOngoing = EFalse;
+    
     if ( iSubService.SipProfileId() == aProfileId &&
         iSubService.EnableRequestedState() != CScpSubService::EScpNoRequest )
         {
@@ -249,9 +252,23 @@
             
             if ( KErrNotReady == err )
                 {
-                SCPLOGSTRING( "CScpPresenceHandler - EScpNetworkLost -> note ready: unbind" );
+                SCPLOGSTRING( "CScpPresenceHandler - EScpNetworkLost -> not ready: unbind" );
                 TRAP_IGNORE( ServerUnBindL() );
                 }
+            
+            TUint32 snapId;
+            CScpProfileHandler& profileHandler = iSubService.ProfileHandler();
+            CScpSipConnection* sipConnection = profileHandler.GetSipConnection( iSubService.SipProfileId() );
+            
+            if ( sipConnection )
+                {
+                TInt error = sipConnection->GetSnap( snapId );
+                
+                if ( !error && sipConnection->IsSnapConnectionAvailable( snapId ) )
+                    {
+                    iNetworkLostRoamingOngoing = ETrue;
+                    }
+                }
             }
         
         if ( EScpRoaming == aEvent )
@@ -918,18 +935,20 @@
     else if ( reqType == EUnBindReq && EUnBinding == iPresenceState )
         {
         SCPLOGSTRING( "CScpPresenceHandler::HandleRequestCompleteEvent status offline" );
-        
         // Do not send info to our client if roaming is ongoing 
-        if ( !iSubService.IsRoaming() )
+        if ( !iNetworkLostRoamingOngoing )
             {
-            DeregisterNow();
+            if ( !iSubService.IsRoaming() )
+                {
+                DeregisterNow();
+                }
+            else
+                {
+                // Inform SIP to start ALR migration
+                iSubService.ProfileHandler().StartAlrMigration(
+                    iSubService.SipProfileId() );
+                }
             }
-		// Inform SIP to start ALR migration
-        else
-            {
-            iSubService.ProfileHandler().StartAlrMigration( iSubService.SipProfileId() );
-            }
-        
         SCPLOGSTRING( "CScpPresenceHandler::HandleRequestCompleteEvent status offline end" );
         }
     
--- a/voipplugins/sipconnectionprovider/src/scpprofilehandler.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/sipconnectionprovider/src/scpprofilehandler.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -471,9 +471,12 @@
        iAlrController->AllowMigrationL( aProfileId, iNewAlrIapId ) );
     
     CScpSipConnection* sipConnection( NULL );
+    sipConnection = GetSipConnection( aProfileId );
     
-    sipConnection = GetSipConnection( aProfileId );
-    sipConnection->SetProfileCurrentlyRoaming();
+    if ( sipConnection )
+        {
+        sipConnection->SetProfileCurrentlyRoaming();
+        }
     
     SCPLOGSTRING( "CScpProfileHandler::StartMigrtion -exit" );
     }
--- a/voipplugins/sipconnectionprovider/src/scpsettinghandler.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/sipconnectionprovider/src/scpsettinghandler.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 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"
@@ -22,8 +22,8 @@
 #include <spproperty.h>
 #include <spsettingsvoiputils.h>
 #include <pressettingsapi.h>
-#include <XdmSettingsApi.h>
-#include <XdmSettingsCollection.h>
+#include <xdmsettingsapi.h>
+#include <xdmsettingscollection.h>
 
 #include "scpsettinghandler.h"
 #include "scpservice.h"
--- a/voipplugins/sipconnectionprovider/src/scpsipconnection.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/sipconnectionprovider/src/scpsipconnection.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -34,6 +34,8 @@
 
 const TInt KUsernameMaxLength = 255;
 
+_LIT8( KSCPAt8, "@" );
+
 // -----------------------------------------------------------------------------
 // CScpSipConnection::CScpSipConnection
 // -----------------------------------------------------------------------------
@@ -567,23 +569,55 @@
     SCPLOGSTRING2( "CScpSipConnection[0x%x]::GetUsername", this );
 
     TInt result( KErrNotFound );
+    
+    // Check if profile is registered
+    TBool val( EFalse );
+    result = iSipProfile->GetParameter( KSIPProfileRegistered, val );
+    
     const TDesC8* aor( NULL );
 
     // Get SIP's Username    
     result = iSipProfile->GetParameter( KSIPUserAor, aor );
     
-    if ( result == KErrNone && aor )
+    if ( result == KErrNone && aor->Length() > KErrNone  )
         {
         if ( aor->Length() <= aUsername.MaxLength() )
             {
+            SCPLOGSTRING( "CScpSipConnection::GetUsername - Got username from AOR" );
             aUsername.Copy( *aor );
             }
         else
             {
+            SCPLOGSTRING( "CScpSipConnection::GetUsername - KErrOverflow" );
             result = KErrOverflow;
             }
         }
-
+    else if ( val ) // registered
+        {
+        // Might be IMS case and UserAor is incomplete, then
+        // Get SIP's Username from registered AORs
+        const MDesC8Array* aors = 0;
+        result =  iSipProfile->GetParameter( KSIPRegisteredAors, aors );
+        if ( !aors || aors->MdcaCount() == 0 )
+            {
+            SCPLOGSTRING( "CScpSipConnection::GetUsername - KErrNotReady" );
+            result = KErrNotReady;
+            }
+        else
+            {
+            HBufC8* tmpUserName = HBufC8::NewLC( aors->MdcaPoint( 0 ).Length() );
+            tmpUserName->Des().Copy( aors->MdcaPoint( 0 ) );
+            #ifdef _DEBUG
+                TBuf<256> tmpUri;
+                tmpUri.Copy( aors->MdcaPoint( 0 ) );
+                SCPLOGSTRING2( "CScpSipConnection::GetUsername - use first registered AOR: %S", &tmpUri );
+            #endif
+            TInt atPos = tmpUserName->Find( KSCPAt8 );
+            aUsername.Copy( tmpUserName->Left( atPos ) );
+            CleanupStack::PopAndDestroy( tmpUserName );
+            }
+        }
+    SCPLOGSTRING2( "CScpSipConnection::GetUsername - return error: %d", result );
     return result;                
     }
 
--- a/voipplugins/sipconnectionprovider/src/scpsubservice.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/sipconnectionprovider/src/scpsubservice.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 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"
@@ -29,6 +29,7 @@
 #include "scppresencehandler.h"
 #include "scpimhandler.h"
 #include "scpsubserviceobserver.h"
+#include "scppresencehandler.h"
 
 // -----------------------------------------------------------------------------
 // CScpSubService::NewL
@@ -517,6 +518,17 @@
                 {
                 iSubServiceState = 
                     TScpStateContainer::Instance( ECCHEnabled );
+					
+                if ( ECCHVoIPSub == iSubServiceType )
+                    {
+                    if ( iService.ContainsSubServiceType( ECCHPresenceSub ) )
+                        {
+                        CScpPresenceHandler* presenceHandler = static_cast<CScpPresenceHandler*>(
+                            &iService.GetSubServiceByType( ECCHPresenceSub )->ServiceHandler() );
+                            
+                        presenceHandler->UpdateXdmSettingsL();
+                        }
+                    }
                 }
                 break;
 
--- a/voipplugins/sipconnectionprovider/src/scpvoiphandler.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/sipconnectionprovider/src/scpvoiphandler.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 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"
@@ -17,7 +17,7 @@
 
 
 #include <e32property.h>
-#include <NetworkHandlingDomainPSKeys.h>
+#include <networkhandlingdomainpskeys.h>
 #include <spdefinitions.h>
 #include "scpvoiphandler.h"
 #include "scpprofilehandler.h"
--- a/voipplugins/voipadapters/dmvoipadapter/group/nsmldmvoipadapter.mmp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/voipadapters/dmvoipadapter/group/nsmldmvoipadapter.mmp	Wed Mar 31 21:20:05 2010 +0300
@@ -55,6 +55,8 @@
 LIBRARY        cone.lib
 LIBRARY        nsmldmiapmatcher.lib
 LIBRARY        serviceprovidersettings.lib
+LIBRARY        presencesettingsapi.lib
+LIBRARY        nsmldmclientserverutils.lib
 LIBRARY        ipapputils.lib
 LIBRARY        featmgr.lib
 LIBRARY        vimpstsettings.lib // For setting IM tone.
--- a/voipplugins/voipadapters/dmvoipadapter/inc/nsmldmvoipadapter.h	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/voipadapters/dmvoipadapter/inc/nsmldmvoipadapter.h	Wed Mar 31 21:20:05 2010 +0300
@@ -28,6 +28,7 @@
 const TUint KWlanMacAddressLength  = 50;
 const TUint KPhoneModelLength      = 20;
 const TInt KMaxUriLength           = 64;
+const TInt KMaxDebugPrintLength    = 256;
 
 // CLASS DECLARATION
 class CRCSEProfileRegistry;
@@ -491,7 +492,15 @@
          * @return Presence profile ID.
          */
         TUint32 PresenceIdL( const TDesC8& aObject ) const;
-
+		
+        /**
+         * Checks if Presence Settings ID is valid.
+         * @since S60 3.2
+         * @param aSetId Presence Settings ID.
+         * @return ETrue if settings exists, EFalse if not.
+         */
+        TBool IsPresIDValidL( TUint32 aSetId ) const;
+        
         /**
          * Get SNAP ID.
          * @since S60 3.2.
--- a/voipplugins/voipadapters/dmvoipadapter/src/nsmldmvoipadapter.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/voipadapters/dmvoipadapter/src/nsmldmvoipadapter.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -38,8 +38,11 @@
 #include <spproperty.h>    // For Service Provider Settings.
 #include <featmgr.h>
 #include <nsmldmiapmatcher.h> // For fetching IAP.
+#include <nsmldmuri.h> // for parsing uris
 #include <pathinfo.h> // For getting phone rom root path.
 #include <cvimpstsettingsstore.h> // For IM tone path
+#include <pressettingsset.h> // for checking if presence settings is valid
+#include <pressettingsapi.h> // for checking if presence settings is valid
 
 #include "nsmldmvoipadapter.h"
 #include "cdmvoipspsettings.h"
@@ -4357,10 +4360,12 @@
                         sipProfReg->SaveL( *sipManProf );
                         uahArray->Reset();
                         // uahArray, sipManProf 
-                        CleanupStack::PopAndDestroy( 2, sipManProf ); // CS:2
+                        CleanupStack::PopAndDestroy( uahArray );  // CS:3
+                        CleanupStack::PopAndDestroy( sipManProf );  // CS:2
                         }// if
                     // sipProfReg, sipRegObs
-                    CleanupStack::PopAndDestroy( 2, sipRegObs ); // CS:0
+                    CleanupStack::PopAndDestroy( sipProfReg ); // CS:1
+                    CleanupStack::PopAndDestroy( sipRegObs ); // CS:0
                     sipProf = NULL;
                     }// if
                 }// for
@@ -4812,7 +4817,8 @@
 
             err = spSettings->UpdateEntryL( *spEntry );
             // property, spEntry
-            CleanupStack::PopAndDestroy( 2, spEntry ); // CS:1
+			CleanupStack::PopAndDestroy( property ); // CS:2
+            CleanupStack::PopAndDestroy( spEntry ); // CS:1
             } // for
         CleanupStack::PopAndDestroy( spSettings ); // CS:0
         iSPSettings.ResetAndDestroy();
@@ -5037,7 +5043,8 @@
         childList->Des().Copy( RemoveLastURISeg ( childList->Des() ) );    
         }
     // childList, result 
-    CleanupStack::PopAndDestroy( 2, result ); //childList
+    CleanupStack::PopAndDestroy( childList ); // CS:1
+    CleanupStack::PopAndDestroy( result ); // CS:0
     result = NULL;
     childList = NULL;
     DBG_PRINT("CNSmlDmVoIPAdapter::GetSipIdL() : end");
@@ -5131,7 +5138,8 @@
         childList->Des().Copy( RemoveLastURISeg ( childList->Des() ) );    
         }
     // childList, result 
-    CleanupStack::PopAndDestroy( 2, result ); //childList
+    CleanupStack::PopAndDestroy( childList ); // CS:1
+    CleanupStack::PopAndDestroy( result ); // CS:0
     result = NULL;
     childList = NULL;
     DBG_PRINT("CNSmlDmVoIPAdapter::GetSccpIdL() : end");
@@ -5371,16 +5379,19 @@
             {
             aObject.Copy( uri->Des() );
             // luid, uri
-            CleanupStack::PopAndDestroy( 2, uri ); // CS:2
+            CleanupStack::PopAndDestroy( luid ); // CS:3
+            CleanupStack::PopAndDestroy( uri ); // CS:2
             break;
             }
         // luid, uri
-        CleanupStack::PopAndDestroy( 2, uri ); // CS:2
+        CleanupStack::PopAndDestroy( luid ); // CS:3
+        CleanupStack::PopAndDestroy( uri ); // CS:2
         childList->Des().Copy( RemoveLastURISeg( childList->Des() ) );
         }
 
     // childList, result
-    CleanupStack::PopAndDestroy( 2, result ); // CS:0
+    CleanupStack::PopAndDestroy( childList ); // CS:1
+    CleanupStack::PopAndDestroy( result ); // CS:0
     DBG_PRINT("CNSmlDmVoIPAdapter::GetNatFwUriL : end");
     return errorStatus;
     }
@@ -5431,7 +5442,8 @@
         found = ETrue;
         }
     // uri8, iapMatch
-    CleanupStack::PopAndDestroy( 2, iapMatch ); // CS:0
+    CleanupStack::PopAndDestroy( uri8 ); // CS:1
+    CleanupStack::PopAndDestroy( iapMatch ); // CS:0
     DBG_PRINT("CNSmlDmVoIPAdapter::GetConRefL() : end");
     if ( !found )
         {
@@ -5509,15 +5521,18 @@
             {
             aObject.Copy( uri->Des() );
             // luid, uri
-            CleanupStack::PopAndDestroy( 2, uri );  // CS:2
+            CleanupStack::PopAndDestroy( luid );  // CS:3
+            CleanupStack::PopAndDestroy( uri );  // CS:2
             break;
             }
         childList->Des().Copy( RemoveLastURISeg( childList->Des() ) );
         // luid, uri
-        CleanupStack::PopAndDestroy( 2, uri );  // CS:2
+        CleanupStack::PopAndDestroy( luid );  // CS:3
+        CleanupStack::PopAndDestroy( uri );  // CS:2
         }
     // childList, result
-    CleanupStack::PopAndDestroy( 2, result );     // CS:0
+    CleanupStack::PopAndDestroy( childList );     // CS:1
+    CleanupStack::PopAndDestroy( result );     // CS:0
     DBG_PRINT("CNSmlDmVoIPAdapter::GetPresenceUriL : end");
     return errorStatus;
     }
@@ -5529,22 +5544,61 @@
 //
 TUint32 CNSmlDmVoIPAdapter::PresenceIdL( const TDesC8& aObject ) const
     {
-    DBG_PRINT("CNSmlDmVoIPAdapter::PresenceIdL : begin");
+#ifdef _DEBUG
+    TBuf<KMaxDebugPrintLength> object;
+    object.Copy( aObject );
+    DBG_PRINT2("CNSmlDmVoIPAdapter::PresenceIdL : begin uri: %S", &object );
+#endif
 
     __ASSERT_ALWAYS( iDmCallback != NULL, User::Leave( KErrArgument ) );
-
-    HBufC8* luid = HBufC8::NewLC( KMaxUriLength ); // CS:1
-    luid->Des().Copy( iDmCallback->GetLuidAllocL( aObject )->Des() );
-    if ( luid->Des().Length() )
+    TPtrC8 uri = RemoveDotSlash( aObject );
+
+    HBufC8* luid = iDmCallback->GetLuidAllocL( uri );
+    CleanupStack::PushL( luid ); //CS:1
+    
+    // check whether above found id is valid or not
+    TUint32 profileId;
+    if ( luid->Length() == KErrNone )
         {
-        TUint32 profileId = DesToTUint( LastURISeg( luid->Des() ) );
+        //try to find it another way
+        if( NSmlDmURI::NumOfURISegs( uri ) > 1 )
+            {
+            TPtrC8 idSegment = NSmlDmURI::URISeg( uri, 2 );
+            TBuf<KMaxDebugPrintLength> tempSegment;
+            tempSegment.Copy( idSegment );
+            DBG_PRINT2("CNSmlDmVoIPAdapter::PresenceIdL - idSegment:%S", &tempSegment );
+            profileId = DesToTUint(idSegment);
+            if(!IsPresIDValidL(profileId))
+                {
+                CleanupStack::PopAndDestroy( luid ); // CS:0
+                DBG_PRINT("CNSmlDmVoIPAdapter::PresenceIdL : ID not valid - return KErrNone");
+                return KErrNone;
+                }
+            CleanupStack::PopAndDestroy( luid ); // CS:0
+            DBG_PRINT2("CNSmlDmVoIPAdapter::PresenceIdL - settingsId found local way:%d", profileId);
+            return profileId;
+            }
         CleanupStack::PopAndDestroy( luid ); // CS:0
-        DBG_PRINT("CNSmlDmVoIPAdapter::PresenceIdL : end");
-        return profileId;
-        }
+        DBG_PRINT("CNSmlDmVoIPAdapter::PresenceIdL : ID not valid, too short uri");
+        return KErrNone;
+        }    
+    profileId = DesToTUint( *luid );
     CleanupStack::PopAndDestroy( luid ); // CS:0
-    DBG_PRINT("CNSmlDmVoIPAdapter::PresenceIdL : end");
-    return KErrNone;
+    DBG_PRINT2("CNSmlDmVoIPAdapter::PresenceIdL : return profleId: %d", profileId );
+    return profileId;
+    }
+
+// -----------------------------------------------------------------------------
+// CPresenceDMAdapter::IsPresIDValidL
+// -----------------------------------------------------------------------------
+//
+TBool CNSmlDmVoIPAdapter::IsPresIDValidL( TUint32 aSetId ) const
+     {
+    TPresSettingsSet tempSet;
+    if ((PresSettingsApi::SettingsSetL( (TInt)aSetId,tempSet)) == KErrNone)
+        return ETrue;
+    DBG_PRINT2(" CNSmlDmVoIPAdapter::IsPresIDValidL - Invalid settings : %d", aSetId );
+    return EFalse;   
     }
 
 // ---------------------------------------------------------------------------
@@ -5620,15 +5674,18 @@
             {
             aObject.Copy( uri->Des() );
             // luid, uri
-            CleanupStack::PopAndDestroy( 2, uri );  // CS:2
+            CleanupStack::PopAndDestroy( luid );  // CS:3
+            CleanupStack::PopAndDestroy( uri );  // CS:2
             break;
             }
         childList->Des().Copy( RemoveLastURISeg( childList->Des() ) );
         // luid, uri
-        CleanupStack::PopAndDestroy( 2, uri );  // CS:2
+        CleanupStack::PopAndDestroy( luid );  // CS:3
+        CleanupStack::PopAndDestroy( uri );  // CS:2
         }
     // childList, result
-    CleanupStack::PopAndDestroy( 2, result );     // CS:0
+    CleanupStack::PopAndDestroy( childList );  // CS:1
+    CleanupStack::PopAndDestroy( result );  // CS:0
     DBG_PRINT( "CNSmlDmVoIPAdapter::GetSnapUriL - end" );
     return status;
     }
--- a/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Inc/VoIPProvisioningAppUi.h	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Inc/VoIPProvisioningAppUi.h	Wed Mar 31 21:20:05 2010 +0300
@@ -27,7 +27,7 @@
 
 // INCLUDES
 #include <aknappui.h>
-#include <DownloadMgrClient.h>
+#include <downloadmgrclient.h>
 
 class CAknWaitDialog;
 
--- a/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Inc/VoIPProvisioningDocument.h	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Inc/VoIPProvisioningDocument.h	Wed Mar 31 21:20:05 2010 +0300
@@ -26,7 +26,7 @@
 #endif
 
 // INCLUDES
-#include <akndoc.h>
+#include <AknDoc.h>
 
 // FORWARD DECLARATIONS
 class  CEikAppUi;
--- a/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Src/VoIPProvisioningAppUi.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Src/VoIPProvisioningAppUi.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -17,20 +17,20 @@
 
 
 // INCLUDES
-#include <EIKDOC.H>
-#include <stringloader.h>
+#include <eikdoc.h>
+#include <StringLoader.h>
 #include <AknQueryDialog.h>
 #include <VoIPProvisioningApp.rsg>
 #include <aknnotewrappers.h>
 #include <apgcli.h> // RApaLsSession
 #include <bautils.h>
-#include <xspviewservices.h>
-#include <BrowserUiSDKCRKeys.h>
+#include <xSPViewServices.h>
+#include <browseruisdkcrkeys.h>
 #include <pathinfo.h>
-#include <DriveInfo.h>
+#include <driveinfo.h>
 #include <zipfile.h>
 #include <zipfilememberinputstream.h>
-#include <aknwaitdialog.h>
+#include <AknWaitDialog.h>
 
 #include "voipxmlparser.h"
 #include "VoIPProvisioningAppUi.h"
--- a/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/group/VoIPProvisioningApp.mmp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/group/VoIPProvisioningApp.mmp	Wed Mar 31 21:20:05 2010 +0300
@@ -47,7 +47,7 @@
 END
 
 USERINCLUDE    . 
-USERINCLUDE    ../inc
+USERINCLUDE    ../Inc
 USERINCLUDE    ../../voipxmlprocessor/inc
 
 APP_LAYER_SYSTEMINCLUDE
--- a/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlparser.h	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlparser.h	Wed Mar 31 21:20:05 2010 +0300
@@ -19,9 +19,9 @@
 #ifndef VOIPXMLPARSER_H
 #define VOIPXMLPARSER_H
 
-#include <GMXMLParser.h>
-#include <GMXMLElement.h>
-#include <GMXMLNode.h>
+#include <gmxmlparser.h>
+#include <gmxmlelement.h>
+#include <gmxmlnode.h>
 
 #include "voipxmlparamhandler.h"
 
--- a/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/rd-key.pem	Mon Mar 15 12:39:55 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDLRF+r1FGGkCwTrb420kbnAps7gi1yYUcXYUdWeFTuBeQe5eW4
-6Y+LWaA8HMlDdoHRB0FgASisYcFagwno9+oFf4AJka4H1gWEs5XTGwAA1s0d8XGh
-7W7Dt9F5FZij8F7/9Pi6+FhhxZFIf1DD+yry9D7+Sp+BgdNALe4XOpf25QIBAwKB
-gQCHgupyjYuvCsgNHn7PNtnvVxInrB5MQNoPli+O+uNJWUK/Q+57Rl+yO8AoEzDX
-pFaLWiuVVhsdloDnAgabT/FXzYncs6uOHyEUV+dSXb78vtLPJqAX+Fg2i3hOXreB
-yskcZ13/OsKVOu5wgrJkx2baZufkqMwOSytf5y9nwjEIKwJBAP+inobagVNrN62j
-KQva3cC+UN/6XnKdTc0CA6bHyLOaJoH1xiMwG/VS2PGjHI0tiSMNtLn/QPpHJ003
-iabGhdUCQQDLjp/9UjFT6K6CF66Chqf30pZXhx+GTSQZmv/gvZiMly7X9fX9BGX3
-2MbJohBC4yI21XKTbisWywkF73Hwh+TRAkEAqmxprzxWN5zPyRdwspHpKymLP/w+
-9xOJM1atGdqFzRFvAU6EF3Vn+OHl9my9s3OwwgkjJqorUYTE3iUGby8D4wJBAIe0
-aqjhdjfwdFa6dFcEb/qMZDpaFQQzbWZnVUB+ZbMPdI/5TqitmU/l2dvBYCyXbCSO
-TGJJcg8yBgP09qBamIsCQFL7j1tM0XPVQJQ89WpKCld7O9ORxRGVj1eG0tWijrH8
-mGbYh8SGCVoWV3vrKSS8GBrFVgQnqUaHuEdtM7tpCAQ=
------END RSA PRIVATE KEY-----
--- a/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/rd.cer	Mon Mar 15 12:39:55 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICzDCCAjWgAwIBAgIBADANBgkqhkiG9w0BAQUFADArMRAwDgYDVQQKEwdSRCBD
-ZXJ0MRcwFQYDVQQDEw5SRCBDZXJ0aWZpY2F0ZTAeFw0wNDExMTUxMjQyMDZaFw0z
-NzA5MjMxMjQyMDZaMCsxEDAOBgNVBAoTB1JEIENlcnQxFzAVBgNVBAMTDlJEIENl
-cnRpZmljYXRlMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDLRF+r1FGGkCwT
-rb420kbnAps7gi1yYUcXYUdWeFTuBeQe5eW46Y+LWaA8HMlDdoHRB0FgASisYcFa
-gwno9+oFf4AJka4H1gWEs5XTGwAA1s0d8XGh7W7Dt9F5FZij8F7/9Pi6+FhhxZFI
-f1DD+yry9D7+Sp+BgdNALe4XOpf25QIBA6OCAQAwgf0wDAYDVR0TBAUwAwEB/zAL
-BgNVHQ8EBAMCAoQwHQYDVR0OBBYEFFi/kuGzxhVpjGxe9ZwlxC3fH9jFMFMGA1Ud
-IwRMMEqAFFi/kuGzxhVpjGxe9ZwlxC3fH9jFoS+kLTArMRAwDgYDVQQKEwdSRCBD
-ZXJ0MRcwFQYDVQQDEw5SRCBDZXJ0aWZpY2F0ZYIBADBsBgNVHSAEZTBjMGEGBFUd
-IAAwWTATBggrBgEFBQcCARYHaHR0cDovLzBCBggrBgEFBQcCAjA2GjRGb3IgUiZE
-IHVzYWdlIG9ubHkuIFRoaXMgY2VydGlmaWNhdGUgaXMgbm90IHRydXN0ZWQuMA0G
-CSqGSIb3DQEBBQUAA4GBAHGB4RQMAgBdeT2hxfOr6f2nA/dZm+M5yX5daUtZnET9
-Ed0A9sazLawfN2G1KFQT9kxEParAyoAkpbMAsRrnRz/9cM3OHgFm/NiKRnf50DpT
-7oCx0I/65mVD2kt+xXE62/Ii5KPnTufIkPi2uLvURCia1tTS8JmJ8dtxDGyQt8BR
------END CERTIFICATE-----
--- a/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlparser.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlparser.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -17,11 +17,8 @@
 
 
 #include <e32base.h>
-#include <GMXMLParser.h>
-#include <GMXMLDocument.h>
-#include <GMXMLNode.h>
-#include <GMXMLElement.h>
-#include <GMXMLText.h>
+#include <gmxmldocument.h>
+#include <gmxmltext.h>
 #include <e32cmn.h>
 #include <e32def.h>
 
--- a/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlpresencehandler.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlpresencehandler.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -22,8 +22,8 @@
 #include <pressettingsset.h>
 #include <sysutil.h>
 #include <pathinfo.h>
-#include <Authority16.h>
-#include <stringloader.h>
+#include <authority16.h>
+#include <StringLoader.h>
 #include <escapeutils.h>
 
 #include "voipxmlutils.h"
--- a/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlsiphandler.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlsiphandler.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -23,8 +23,8 @@
 #include <sysutil.h>
 #include <wlaninternalpskeys.h>
 #include <pathinfo.h>
-#include <Authority16.h>
-#include <stringloader.h>
+#include <authority16.h>
+#include <StringLoader.h>
 #include <escapeutils.h>
 
 #include "voipxmlutils.h"
--- a/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlxdmhandler.cpp	Mon Mar 15 12:39:55 2010 +0200
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlxdmhandler.cpp	Wed Mar 31 21:20:05 2010 +0300
@@ -18,12 +18,12 @@
 
 #include <e32cmn.h>
 #include <coecntrl.h>
-#include <xdmsettingsapi.h>
+#include <XdmSettingsApi.h>
 #include <XdmSettingsCollection.h>
 #include <sysutil.h>
 #include <pathinfo.h>
-#include <Authority16.h>
-#include <stringloader.h>
+#include <authority16.h>
+#include <StringLoader.h>
 #include <escapeutils.h>
 
 #include "voipxmlutils.h"