Revision: 201003 default PDK_3.0.g
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 00:05:57 +0200
changeset 2 7b872347d83b
parent 1 bfb1de3eac8e
child 6 fc8c25e5a2e8
Revision: 201003 Kit: 201005
callcontinuity/vcchotrigger/src/vcchotrigger.cpp
convergedconnectionhandler/cchclientapi/src/cchuiapiimpl.cpp
convergedconnectionhandler/cchserver/inc/cchsubserviceinfo.h
convergedconnectionhandler/cchserver/src/cchsubserviceinfo.cpp
sipvoipprovider/inc/svpconsts.h
sipvoipprovider/inc/svpemergencyconnection.h
sipvoipprovider/inc/svplogger.h
sipvoipprovider/src/svpemergencyconnection.cpp
voipplugins/ipapputils/src/cipappphoneutils.cpp
voipplugins/voipadapters/group/bld.inf
voipplugins/voipadapters/voipxmlprovisioning/group/bld.inf
voipplugins/voipadapters/voipxmlprovisioning/install/RD_RootCA/rd-key.pem
voipplugins/voipadapters/voipxmlprovisioning/install/RD_RootCA/rd.cer
voipplugins/voipadapters/voipxmlprovisioning/install/create_sis_udeb.bat
voipplugins/voipadapters/voipxmlprovisioning/install/settings.pkg
voipplugins/voipadapters/voipxmlprovisioning/install/settings_for_MCL.SIS
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Aif/VoIPProvisioningAppAif.rss
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Aif/VoIPProvisioningApp_caption.rss
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Data/VoIPProvisioningApp.rss
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Data/VoIPProvisioningApp_reg.rss
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Data/tempbranddatapackage.zip
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Inc/VoIPProvisioningApp.h
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Inc/VoIPProvisioningAppUi.h
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Inc/VoIPProvisioningDocument.h
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Inc/voipprovisioningapp.loc
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Src/VoIPProvisioningApp.cpp
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Src/VoIPProvisioningAppUi.cpp
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Src/VoIPProvisioningDocument.cpp
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/group/VoIPProvisioningApp.mmp
voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/group/bld.inf
voipplugins/voipadapters/voipxmlprovisioning/provisioningrecognizer/data/20026FE1.rss
voipplugins/voipadapters/voipxmlprovisioning/provisioningrecognizer/group/VoIPProvisioningRecognizer.mmp
voipplugins/voipadapters/voipxmlprovisioning/provisioningrecognizer/group/bld.inf
voipplugins/voipadapters/voipxmlprovisioning/provisioningrecognizer/inc/VoIPProvisioningRecognizer.h
voipplugins/voipadapters/voipxmlprovisioning/provisioningrecognizer/src/VoIPProvisioningRecognizer.cpp
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/EABI/voipxmlprocessoru.def
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/bwins/voipxmlprocessoru.def
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/group/bld.inf
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/group/voipxmlprocessor.mmp
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmliaphandler.h
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlnatfwhandler.h
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlparamhandler.h
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlparser.h
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlpresencehandler.h
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlprocessordefaults.h
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlprocessorlogger.h
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlsiphandler.h
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlutils.h
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlutils.inl
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlvoiphandler.h
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlxdmhandler.h
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/rd-key.pem
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/rd.cer
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/rom/provisioningapi.iby
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmliaphandler.cpp
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlnatfwhandler.cpp
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlparamhandler.cpp
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/voipxmlutils.cpp
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlvoiphandler.cpp
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlxdmhandler.cpp
--- a/callcontinuity/vcchotrigger/src/vcchotrigger.cpp	Tue Jan 26 11:50:49 2010 +0200
+++ b/callcontinuity/vcchotrigger/src/vcchotrigger.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -306,10 +306,16 @@
     
     if ( iPreviousWlanClass == iWlanClass )
         {
-        RUBY_DEBUG0( "No change in WLAN signal class -> return" );
-    
-        return;
-        }
+        if (iWlanClass == ESignalClassWeak)
+            {
+            RUBY_DEBUG0( "Signal is still weak try again to do HO" );
+            }
+        else
+            {
+            RUBY_DEBUG0( "No change in WLAN signal class -> return" );
+            return;
+            }
+          }
     else
         {
         iPreviousWlanClass = iWlanClass;
@@ -360,7 +366,7 @@
     // If the previous class is the same as the new one
     // - do nothing.
     
-    if ( iPreviousGsmClass == iGsmClass )
+    if ( iPreviousGsmClass == iGsmClass && iWlanClass != ESignalClassWeak  )
         {
         RUBY_DEBUG0( "No change in GSM signal class -> return" );
     
@@ -570,8 +576,8 @@
 		RUBY_DEBUG0( "VccHoTrigger::TriggerHo - no immediate HO" );
 		}
 	
-	if ( iWlanClass == ESignalClassWeak &&
-	     iGsmClass == ESignalClassNormal && 
+	if ( ( iWlanClass == ESignalClassWeak || iCchServiceStatus == EServiceUnavailable )&&
+	        iGsmClass == ESignalClassNormal && 
 	     ( iPolicy.AllowedDirection() & EPsToCsAllowed  ))
 	    {
 	    RUBY_DEBUG0( "VccHoTrigger::WlanSignalChanged - NotifySubscriberL" );
@@ -657,7 +663,7 @@
 		}
 	
 	else if ( (iPolicy.PreferredDomain() == EPsPreferred)  &&
-	      iWlanClass == ESignalClassNormal &&
+	      iWlanClass == ESignalClassNormal && iCchServiceStatus != EServiceUnavailable &&
 	      ( iPolicy.AllowedDirection() & ECsToPsAllowed  ) )
         {
         // Current call is CS, PS signal is ok, preferred domain is PS and 
--- a/convergedconnectionhandler/cchclientapi/src/cchuiapiimpl.cpp	Tue Jan 26 11:50:49 2010 +0200
+++ b/convergedconnectionhandler/cchclientapi/src/cchuiapiimpl.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -711,6 +711,12 @@
             MCchUiObserver::ECchUiClientOperationResultGeneralFailure;
         }
     
+    if ( iLastOperationResult != 
+        MCchUiObserver::ECchUiClientOperationResultNotSet )
+        {
+        InformObserversL( aResultParams.iServiceId );
+        }
+       
     switch ( iLastOperationResult )
         {
         case MCchUiObserver::ECchUiClientOperationResultAccessPointAdded:
--- a/convergedconnectionhandler/cchserver/inc/cchsubserviceinfo.h	Tue Jan 26 11:50:49 2010 +0200
+++ b/convergedconnectionhandler/cchserver/inc/cchsubserviceinfo.h	Tue Feb 02 00:05:57 2010 +0200
@@ -262,7 +262,11 @@
      * Enable at start-up
      */
     TBool                           iEnableAtStartUp;
-    
+
+     /**
+     * Previous state of subservice
+     */
+    TCCHSubserviceState             iPreviousState;    
     };
 
 #endif // C_CCHSUBSERVICEINFO_H
--- a/convergedconnectionhandler/cchserver/src/cchsubserviceinfo.cpp	Tue Jan 26 11:50:49 2010 +0200
+++ b/convergedconnectionhandler/cchserver/src/cchsubserviceinfo.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -161,6 +161,13 @@
 //
 void CCCHSubserviceInfo::SetState( const TCCHSubserviceState aState )
     {
+    CCHLOGSTRING2( "CCCHSubserviceInfo::SetState: iPreviousState = %d", 
+        iState );
+    CCHLOGSTRING2( "CCCHSubserviceInfo::SetState: new state = %d", 
+        aState );
+    CCHLOGSTRING2( "CCCHSubserviceInfo::SetState: new state = %d", 
+        Type() );
+    iPreviousState = iState;
     iState = aState;
     }
 
@@ -235,20 +242,34 @@
         iType );
     CCHLOGSTRING2( "CCCHSubserviceInfo::StatusChangedL: iState %d", 
         iState );
+    CCHLOGSTRING2( "CCCHSubserviceInfo::StatusChangedL: iPreviousState %d", 
+        iPreviousState );
     CCHLOGSTRING2( "CCCHSubserviceInfo::StatusChangedL: iError %d", 
         iError );
+    
+    if( iPreviousState == ECCHUninitialized && iState == ECCHDisabled )
+        {
+        CCHLOGSTRING( "CCCHSubserviceInfo::StatusChangedL: Status not notified" );
+        }
+    else 
+        {
+        if ( iPreviousState == ECCHDisconnecting && iState == ECCHDisabled )
+            {
+            iPreviousState = ECCHUninitialized;
+            }
+        CCHLOGSTRING( "CCCHSubserviceInfo::StatusChangedL: Notify new status" );
+        TServiceStatus serviceStatus;
+        serviceStatus.iConnectionInfo.iServiceSelection.iServiceId = iServiceId;
+        serviceStatus.iConnectionInfo.iServiceSelection.iType      = iType;
+        serviceStatus.iConnectionInfo.iIapId                       = iIapId;
+        serviceStatus.iConnectionInfo.iSNAPId                      = iSNAPId; 
+        serviceStatus.iConnectionInfo.iSNAPLocked                  = iSNAPLocked; 
+        serviceStatus.iState                                       = iState;
+        serviceStatus.iError                                       = iError;
         
-    TServiceStatus serviceStatus;
-    serviceStatus.iConnectionInfo.iServiceSelection.iServiceId = iServiceId;
-    serviceStatus.iConnectionInfo.iServiceSelection.iType      = iType;
-    serviceStatus.iConnectionInfo.iIapId                       = iIapId;
-    serviceStatus.iConnectionInfo.iSNAPId                      = iSNAPId; 
-    serviceStatus.iConnectionInfo.iSNAPLocked                  = iSNAPLocked; 
-    serviceStatus.iState                                       = iState;
-    serviceStatus.iError                                       = iError;
-    
-    // Send notify to clients
-    iServer.RequestStorage().NotifyServiceStatesChange( serviceStatus );
+        // Send notify to clients
+        iServer.RequestStorage().NotifyServiceStatesChange( serviceStatus );
+        }
     CCHLOGSTRING( "CCCHSubserviceInfo::StatusChangedL: OUT" );
     }
 
--- a/sipvoipprovider/inc/svpconsts.h	Tue Jan 26 11:50:49 2010 +0200
+++ b/sipvoipprovider/inc/svpconsts.h	Tue Feb 02 00:05:57 2010 +0200
@@ -205,6 +205,9 @@
 
 const TUint KSVPMaxLangCodeLength = 4; 
 
+//Logging
+const TInt KSvpMaxDebugBufferSize = 256;
+
 // ipapputils
 const TUint KSVPWlanMacAddressLength = 50;
 _LIT8 ( KSVPWlanMacAddressFrmt, "-" );
--- a/sipvoipprovider/inc/svpemergencyconnection.h	Tue Jan 26 11:50:49 2010 +0200
+++ b/sipvoipprovider/inc/svpemergencyconnection.h	Tue Feb 02 00:05:57 2010 +0200
@@ -46,7 +46,8 @@
         ESVPNone, 
         ESVPSnapConnect, 
         ESVPConnect, 
-        ESVPSipProxyAddress
+        ESVPSipProxyAddress,
+        ESVPSipDomainAddress
         };
 
     /**
@@ -111,6 +112,10 @@
     
     void RunL();
     
+    TInt RunError( TInt aError );
+    
+    void RequestSipServerDomainL();
+    
 private: // data
 
     /**
@@ -137,6 +142,11 @@
      * SIP server address buffer
      */
     TSipServerAddrBuf iSipServerAddrBuf;
+    
+    /**
+     * SIP server domain name buffer
+     */
+    TSipServerDomainBuf iSipServerDomainBuf;
 
     /**
      * Connection
--- a/sipvoipprovider/inc/svplogger.h	Tue Jan 26 11:50:49 2010 +0200
+++ b/sipvoipprovider/inc/svplogger.h	Tue Feb 02 00:05:57 2010 +0200
@@ -27,6 +27,7 @@
 
 #include <e32svr.h>
 #include <e32cmn.h>
+#include "svpconsts.h"
 
 /*****************************************************
 * Format string for adding component to prints.
@@ -41,7 +42,7 @@
  */
 static inline void PrintL( const TDesC& aStr )
     {
-    HBufC* line = HBufC::NewLC( 256 );
+    HBufC* line = HBufC::NewLC( KSvpMaxDebugBufferSize );
     TPtr ptr( line->Des() );
     ptr.Format( KSVPPrintFormatString(), &KComponent(), &aStr );   
     RDebug::Print( line->Des() );
@@ -57,11 +58,11 @@
  */
 static inline void PrintL( const TDesC& aStr, const TInt& aTInt )
     {
-    HBufC* line1 = HBufC::NewLC( 256 );
+    HBufC* line1 = HBufC::NewLC( KSvpMaxDebugBufferSize );
     TPtr ptr1( line1->Des() );
     ptr1.Format( aStr, aTInt );
     
-    HBufC* line2 = HBufC::NewLC( 256 );
+    HBufC* line2 = HBufC::NewLC( KSvpMaxDebugBufferSize );
     TPtr ptr2( line2->Des() );
     ptr2.Format( KSVPPrintFormatString(), &KComponent(), line1 );   
     RDebug::Print( line2->Des() );
@@ -77,11 +78,11 @@
  */
 static inline void PrintL( const TDesC& aStr, const TAny* aPtr )
     {
-    HBufC* line1 = HBufC::NewLC( 256 );
+    HBufC* line1 = HBufC::NewLC( KSvpMaxDebugBufferSize );
     TPtr ptr1( line1->Des() );
     ptr1.Format( aStr, aPtr );
     
-    HBufC* line2 = HBufC::NewLC( 256 );
+    HBufC* line2 = HBufC::NewLC( KSvpMaxDebugBufferSize );
     TPtr ptr2( line2->Des() );
     ptr2.Format( KSVPPrintFormatString(), &KComponent(), line1 ); 
     RDebug::Print( line2->Des() );
@@ -99,11 +100,11 @@
                            const TInt& aTInt1,
                            const TInt& aTInt2 )
     {
-    HBufC* line1 = HBufC::NewLC( 256 );
+    HBufC* line1 = HBufC::NewLC( KSvpMaxDebugBufferSize );
     TPtr ptr1( line1->Des() );
     ptr1.Format( aStr, aTInt1, aTInt2 );
         
-    HBufC* line2 = HBufC::NewLC( 256 );
+    HBufC* line2 = HBufC::NewLC( KSvpMaxDebugBufferSize );
     TPtr ptr2( line2->Des() );
     ptr2.Format( KSVPPrintFormatString(), &KComponent(), line1 );   
     RDebug::Print( line2->Des() );
@@ -123,11 +124,11 @@
                            const TInt& aTInt,
                            const TDesC* aStr2 )
     {
-    HBufC* line1 = HBufC::NewLC( 256 );
+    HBufC* line1 = HBufC::NewLC( KSvpMaxDebugBufferSize );
     TPtr ptr1( line1->Des() );
     ptr1.Format( aStr1, aTInt, aStr2 );
         
-    HBufC* line2 = HBufC::NewLC( 256 );
+    HBufC* line2 = HBufC::NewLC( KSvpMaxDebugBufferSize );
     TPtr ptr2( line2->Des() );
     ptr2.Format( KSVPPrintFormatString(), &KComponent(), line1 );   
     RDebug::Print( line2->Des() );
--- a/sipvoipprovider/src/svpemergencyconnection.cpp	Tue Jan 26 11:50:49 2010 +0200
+++ b/sipvoipprovider/src/svpemergencyconnection.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -195,45 +195,117 @@
 void CSVPEmergencyConnection::RunL()
     {
     TInt error = iStatus.Int();
-    SVPDEBUG2("CSVPEmergencyConnection::RunL(), error: %d", error)
+    SVPDEBUG2( "CSVPEmergencyConnection::RunL(), error: %d", error )
+    SVPDEBUG2( "CSVPEmergencyConnection::RunL(), Request type: %d", iRequestType )
     
-    if ( error )
-        {
-        iRequestType = ESVPNone;
-        iObserver.ConnectionError( error );
-        return;
-        }
-    
+    // execution goes to RunError() if error occured
+    User::LeaveIfError( iStatus.Int() );
     switch ( iRequestType )
         {
         case ESVPSnapConnect:
+            SVPDEBUG1( "CSVPEmergencyConnection::RunL() - ESVPSnapConnect" )
             iRequestType = ESVPNone;
             iObserver.SnapConnected();
             break;
         
         case ESVPConnect:
+            SVPDEBUG1( "CSVPEmergencyConnection::RunL() - ESVPConnect" )
             iRequestType = ESVPNone;
             iObserver.Connected();
             break;
             
         case ESVPSipProxyAddress:
             {
+            SVPDEBUG1( "CSVPEmergencyConnection::RunL() - ESVPSipProxyAddress" )
             iRequestType = ESVPNone;
             
             // Copy SIP proxy address in dotted-decimal notation
             HBufC16* sipProxyAddrBuf = HBufC16::NewLC( 39 ); // CS:1
             TPtr16 sipProxyAddrPtr = sipProxyAddrBuf->Des();
             iSipServerAddrBuf().address.Output( sipProxyAddrPtr );
-
+            SVPDEBUG2(
+                    "CSVPEmergencyConnection::RunL(), iSipServerAddrBuf: %S",
+                    sipProxyAddrBuf )
             // Call observer
             iObserver.SipProxyAddressReady( *sipProxyAddrBuf );
             CleanupStack::PopAndDestroy( sipProxyAddrBuf ); // CS:0
             break;
             }
+        case ESVPSipDomainAddress:
+            {
+            SVPDEBUG1( "CSVPEmergencyConnection::RunL() - ESVPSipDomainAddress" )
+            iRequestType = ESVPNone;
+            
+            // Copy SIP proxy domain in dotted-decimal notation
+            HBufC16* sipDomainAddrBuf = HBufC16::NewLC( iSipServerDomainBuf().domainName.Length() ); // CS:1
+            TPtr16 sipDomainAddrPtr = sipDomainAddrBuf->Des();
+            sipDomainAddrPtr.Copy( iSipServerDomainBuf().domainName );
+            SVPDEBUG2(
+                    "CSVPEmergencyConnection::RunL(), iSipDomainAddrBuf: %S",
+                    sipDomainAddrBuf )
+            // Call observer
+            iObserver.SipProxyAddressReady( *sipDomainAddrBuf );
+            CleanupStack::PopAndDestroy( sipDomainAddrBuf ); // CS:0
+            break;
+            }
             
         default:
+            SVPDEBUG1( "CSVPEmergencyConnection::RunL() - Default" )
             iRequestType = ESVPNone;
             iObserver.ConnectionError( KErrGeneral );
             break;
         }
     }
+
+// ---------------------------------------------------------------------------
+// CSVPEmergencyConnection::RunError
+//
+// ---------------------------------------------------------------------------
+//
+TInt CSVPEmergencyConnection::RunError( TInt aError )
+    {
+    SVPDEBUG2( "CSVPEmergencyConnection::RunError() %d", aError )
+    if ( iRequestType == ESVPSipProxyAddress )
+        {
+        /* 
+         * sip proxy address might be NULL if requested with KConnGetSipServerAddr
+         * and dhcp returns domain name to sip, instead of ipv4 or ipv6 type address.
+         * So try once again with KConnGetSipServerDomain.
+         */
+        SVPDEBUG1( "CSVPEmergencyConnection::RunError() - RequestDomain" )
+        RequestSipServerDomainL();    
+        return KErrNone;
+        }
+    else
+        {
+        iRequestType = ESVPNone;
+        SVPDEBUG2( "CSVPEmergencyConnection::RunError() - Notify Observer ConnectionError( %d )", aError )
+        iObserver.ConnectionError( aError );
+        return KErrNone;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Requests for SIP proxy address
+// ---------------------------------------------------------------------------
+//
+void CSVPEmergencyConnection::RequestSipServerDomainL()
+    {
+    SVPDEBUG1( 
+        "CSVPEmergencyConnection::RequestSipServerDomainL() - Try to get Sip server domain" )
+
+    if ( IsActive() )
+        {
+        User::Leave( KErrInUse );
+        }
+
+    iRequestType = ESVPSipDomainAddress;
+    iSipServerDomainBuf().index = 0;
+    // Request SIP server domain
+    iConnection.Ioctl(
+        KCOLConfiguration,
+        KConnGetSipServerDomain, // domain in textual format
+        iStatus,
+        &iSipServerDomainBuf );
+    SetActive();
+    }
--- a/voipplugins/ipapputils/src/cipappphoneutils.cpp	Tue Jan 26 11:50:49 2010 +0200
+++ b/voipplugins/ipapputils/src/cipappphoneutils.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-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"
--- a/voipplugins/voipadapters/group/bld.inf	Tue Jan 26 11:50:49 2010 +0200
+++ b/voipplugins/voipadapters/group/bld.inf	Tue Feb 02 00:05:57 2010 +0200
@@ -28,6 +28,7 @@
 #include "../dmvoipadapter/group/bld.inf"
 #include "../cpvoipadapter/group/bld.inf"
 #include "../provisioningfile/group/bld.inf"
+#include "../voipxmlprovisioning/group/bld.inf"
 
 PRJ_TESTMMPFILES
 //  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/group/bld.inf	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Common build definition file for S60 Skype
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+#include "../voipxmlprocessor/group/bld.inf"
+#include "../provisioningappui/group/bld.inf"
+#include "../provisioningrecognizer/group/bld.inf"
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/install/RD_RootCA/rd-key.pem	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,15 @@
+-----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-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/install/RD_RootCA/rd.cer	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,17 @@
+-----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-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/install/create_sis_udeb.bat	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,17 @@
+rem
+rem Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:
+rem
+
+call createsis create -key .\RD_RootCA\rd-key.pem -cert .\RD_RootCA\rd.cer settings.pkg
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/install/settings.pkg	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,47 @@
+;
+; Copyright (c) 2009-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"
+; 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: 
+;
+
+;Languages 
+&EN
+
+;Header 
+#{"S60 settings provision"},(0x20021999),1,0,0, TYPE=SA
+
+
+;Series 60 v5.0
+[0x1028315F], 0, 0, 0, {"Series60ProductID"}
+
+;Localised Vendor name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+;Files to install 
+
+
+
+;PROVISIONRECONIZER
+"\epoc32\release\armv5\udeb\VoIPProvRec.dll"-"!:\sys\bin\VoIPProvRec.dll"
+"\epoc32\data\Z\Resource\Plugins\VoIPProvRec.rsc" -"!:\resource\plugins\VoIPProvRec.rsc"
+
+;PROVISIONINGAPPUI
+"\epoc32\release\armv5\udeb\VoIPProvisioningApp.exe"-"!:\sys\bin\VoIPProvisioningApp.exe"
+"\epoc32\data\z\resource\apps\VoIPProvisioningApp.rsc"-"!:\resource\apps\VoIPProvisioningApp.rsc"
+"\epoc32\data\z\private\10003a3f\apps\VoIPProvisioningApp_reg.rsc"-"!:\private\10003a3f\import\apps\VoIPProvisioningApp_reg.rsc"
+
+;VOIPXMLPROCESSOR
+"\epoc32\release\armv5\udeb\voipxmlprocessor.dll"-"!:\sys\bin\voipxmlprocessor.dll"
Binary file voipplugins/voipadapters/voipxmlprovisioning/install/settings_for_MCL.SIS has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Aif/VoIPProvisioningAppAif.rss	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2009-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"
+* 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:
+*
+*/
+
+
+
+#include <aiftool.rh>
+
+RESOURCE AIF_DATA
+    {
+    app_uid = 0x10281F1A; 
+    hidden = KAppIsHidden;
+    num_icons = 0;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    datatype_list=
+    	{
+        DATATYPE { priority=EDataTypePriorityHigh; type="vnd.nokia.iptv.config+xml"; },
+        DATATYPE { priority=EDataTypePriorityHigh; type="application/vnd.nokia.iptv.config+xml"; }
+    	};
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Aif/VoIPProvisioningApp_caption.rss	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009-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"
+* 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:
+*
+*/
+
+
+
+#include <apcaptionfile.rh>
+
+RESOURCE CAPTION_DATA
+    {
+    caption      = " ";
+    shortcaption = " ";
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Data/VoIPProvisioningApp.rss	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  UI resource file.
+*
+*/
+
+
+//  RESOURCE IDENTIFIER
+NAME    VPRA
+
+//  INCLUDES
+#include <eikon.rh>
+#include <avkon.rsg>
+#include <eikon.rsg>
+#include <avkon.rh>
+#include <avkon.loc>
+#include <csc.loc>
+#include <cscsettingsui.loc>
+
+//  RESOURCE DEFINITIONS 
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE EIK_APP_INFO
+    {
+    status_pane=R_AVKON_STATUS_PANE_LAYOUT_EMPTY;
+    }
+
+//----------------------------------------------------
+// r_voip_provisioning_query_install_service
+// Query dialog for VoIP service installation.
+// 
+//----------------------------------------------------
+//
+RESOURCE DIALOG r_voip_provisioning_query_install_service
+    {
+    flags   = EGeneralQueryFlags;
+    buttons = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
+    items   =
+        {
+        DLG_LINE
+            {
+            type    = EAknCtQuery;
+            id      = EGeneralQuery;
+            control = AVKON_CONFIRMATION_QUERY
+                {
+                label = qtn_voip_settings_title;
+                layout = EConfirmationQueryLayout;
+                };
+            }
+        };
+    }
+
+// ---------------------------------------------------------------------------
+// r_voip_default_save_query
+// Text to be shown in installation query if no text is retreived from XML.
+// ---------------------------------------------------------------------------
+//
+RESOURCE TBUF r_voip_default_save_query
+    {
+    buf = qtn_form_litxt_save;
+    }
+
+// ---------------------------------------------------------------------------
+// r_voip_invalid_data
+// Text to be shown after failed installation.
+// ---------------------------------------------------------------------------
+//
+RESOURCE TBUF r_voip_invalid_data
+    {
+    buf = qtn_voip_csc_error_note_unable_to_configure;
+    }
+
+// ---------------------------------------------------------------------------
+// r_voip_installed
+// Text to show after successful installation.
+//
+// ---------------------------------------------------------------------------
+//
+RESOURCE TBUF r_voip_installed
+    {
+    buf = qtn_form_conf_saved;
+    }
+
+// ---------------------------------------------------------------------------
+// r_waitnote_configure
+// Wait note to be shown
+// ---------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_waitnote_configure
+    {
+    flags = EAknWaitNoteFlags|EEikDialogFlagNotifyEsc;
+    buttons = R_AVKON_SOFTKEYS_EMPTY;
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtNote;
+            id = EGeneralNote;
+            control = AVKON_NOTE
+                {
+                layout = EWaitLayout;
+                singular_label = qtn_gen_note_saving;
+                animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+                };
+            }
+        };
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Data/VoIPProvisioningApp_reg.rss	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Application registration resource file.
+*
+*/
+
+
+#include <appinfo.rh>
+#include <data_caging_paths_strings.hrh>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x20026FE3 // application UID
+
+RESOURCE APP_REGISTRATION_INFO
+    {
+    app_file = "VoIPProvisioningApp";
+    hidden = KAppIsHidden;
+
+    datatype_list =
+        {
+        DATATYPE
+            {
+            priority = EDataTypePriorityHigh;
+            type = "vnd.nokia.voip.config+xml";
+            },
+        DATATYPE
+            {
+            priority = EDataTypePriorityHigh;
+            type="application/vnd.nokia.voip.config+xml";
+            }
+        };
+    }
Binary file voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Data/tempbranddatapackage.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Inc/VoIPProvisioningApp.h	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Application definition.
+*
+*/
+
+
+#ifndef CVOIPPROVISIONINGAPP_H
+#define CVOIPPROVISIONINGAPP_H
+
+#ifdef _DEBUG
+#define EUNIT_FRIEND_CLASS( x ) friend class x;
+#else
+#define EUNIT_FRIEND_CLASS( x )
+#endif
+
+// INCLUDES
+#include <aknapp.h>
+
+// CONSTANTS
+const TUid KUidVoIPProvisioningAppUid = { 0x20026FE3 };
+
+// CLASS DECLARATION
+/**
+*	Application class definition
+*/
+class CVoIPProvisioningApp : public CAknApplication
+    {
+    private: // from CApaApplication
+        /**
+        * Create CVoIPProvisioningDocument document object.
+        */
+        CApaDocument* CreateDocumentL();
+
+        /**
+        * Return CVoIPProvisioningApp uid.
+        */
+        TUid AppDllUid() const;
+        
+        EUNIT_FRIEND_CLASS( UT_CVoIPProvisioningApp )
+    };
+
+#endif // CVOIPPROVISIONINGAPP_H
+            
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Inc/VoIPProvisioningAppUi.h	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Application UI definition.
+*
+*/
+
+
+#ifndef VOIPPROVISIONINGAPPUI_H
+#define VOIPPROVISIONINGAPPUI_H
+
+#ifdef _DEBUG
+#define EUNIT_FRIEND_CLASS( x ) friend class x;
+#else
+#define EUNIT_FRIEND_CLASS( x )
+#endif
+
+// INCLUDES
+#include <aknappui.h>
+#include <DownloadMgrClient.h>
+
+class CAknWaitDialog;
+
+/**
+*  CVoIPProvisioningAppUi class.
+*  This class handles the operation betweed provisioning processor,
+*  notifier framework (asks if user want to install parsed service)
+*  and service api (used to add service to the database if user has
+*  decided so)
+*/
+class CVoIPProvisioningAppUi : public CAknAppUi,
+                               public MHttpDownloadMgrObserver
+    {
+public:
+
+    CVoIPProvisioningAppUi();
+    virtual ~CVoIPProvisioningAppUi();
+
+    /**
+     * Method to be called for CVoIPProvisioningDocument when
+     * that classes OpenFileL method has been called and file
+     * containing the data to be parsed is received.
+     *
+     * @since S60 v5.0
+     * @param aFile File handle to XML file.
+     */
+    void HandleFileL( RFile& aFile );
+
+    /**
+     * Overwritten method from CEikAppUi. This method gets called
+     * when application is started by framework when file, which has
+     * mime type this applicaion knows, has been selected to be
+     * opened.
+     * 
+     * @since S60 v5.0
+     * @param aCommand Type of the command
+     * @param aDocumentName Name of the document to be opened
+     *                      When starting up application this value
+     *                      is empty
+     * @param aTail Command line's tail. Not used in this implementation.
+     * @return ETrue if aDocument represents an existing file, otherwise
+     *         EFalse.
+     */
+    TBool ProcessCommandParametersL( TApaCommand aCommand,
+     TFileName& aDocumentName, const TDesC8& aTail );
+
+protected:
+
+    /**
+     * Indicates an event.
+     *
+     * @since S60 v5.0
+     * @param aDownload The download with which the event occured.
+     * @param aEvent Event type.
+     */
+    void HandleDMgrEventL( RHttpDownload& aDownload,
+        THttpDownloadEvent aEvent );
+
+private:
+
+    /**
+     * Show invalid data note.
+     * 
+     * @since S60 v5.0
+     */
+    void ShowFailNoteL() const;
+
+    /**
+     * Show done note.
+     * 
+     * @since S60 v5.0
+     */
+   void ShowDoneNoteL() const;
+
+   /**
+    * Fetches, i.e. downloads branding data from given URL.
+    * 
+    * @since S60 v5.0
+    * @param aUrl URL from which branding data is downloaded.
+    */
+   TInt FetchBrandingDataL( const TDesC8& aUrl );
+
+   /**
+    * Uncompresses (unzips) files from GZip file.
+    * 
+    * @since S60 v5.0
+    */
+   void UncompressFilesL();
+
+private:
+    void ConstructL();
+private:
+    /**
+     * Download manager.
+     */
+    RHttpDownloadMgr iDownloadMgr;
+
+    /**
+     * File name of branding zip.
+     */
+    TFileName iBrandPackageName;
+
+    /**
+     * Wait dialog.
+     * Own.
+     */
+    CAknWaitDialog* iWaitDialog;
+    
+    EUNIT_FRIEND_CLASS( UT_CVoIPProvisioningAppUi )
+    };
+
+#endif // VOIPPROVISIONINGAPPUI_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Inc/VoIPProvisioningDocument.h	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Document definition.
+*
+*/
+
+
+#ifndef VoIPPROVISIONINGDOCUMENT_H
+#define VoIPPROVISIONINGDOCUMENT_H
+
+#ifdef _DEBUG
+#define EUNIT_FRIEND_CLASS( x ) friend class x;
+#else
+#define EUNIT_FRIEND_CLASS( x )
+#endif
+
+// INCLUDES
+#include <akndoc.h>
+
+// FORWARD DECLARATIONS
+class  CEikAppUi;
+class CVoIPProvisioningAppUi;
+
+// CLASS DECLARATION
+/**
+*  CVoIPProvisioningDocument application class.
+*/
+class CVoIPProvisioningDocument : public CAknDocument
+    {
+    public:
+        /**
+        * C++ constructor.
+        * @param CEikApplication& aApp
+        * @return void
+        */
+        CVoIPProvisioningDocument( CEikApplication& aApp ) :
+        							CAknDocument(aApp) { }
+
+        /**
+        * Destructor.
+        * @param None
+        * @return void
+        */
+        virtual ~CVoIPProvisioningDocument();
+
+
+	// From CEikDocument.
+    CFileStore* OpenFileL( TBool aDoOpen, const TDesC& aFilename, RFs& aFs );
+	void OpenFileL( CFileStore*& aFileStore, RFile& aFile );
+
+    private:
+        /**
+        * C++ default constructor.
+        * @param None
+        * @return void
+        */
+        CVoIPProvisioningDocument();
+
+        /**
+        * This method makes an application hidden so that it is not visible
+        * for example in Applications list and FastSwap window.
+        * @param CApaWindowGroupName* aWgName
+        * @return void        
+        */
+        void UpdateTaskNameL( CApaWindowGroupName* aWgName );
+        
+    private:// from CAknDocument
+        /**
+        * Create CVoIPProvisioningDocument "App UI" object.
+        * @param None
+        * @return CEikAppUi*        
+        */
+        CEikAppUi* CreateAppUiL();
+        
+        EUNIT_FRIEND_CLASS( UT_CVoIPProvisioningDocument )
+    };
+
+#endif      // VoIPPROVISIONINGDOCUMENT_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Inc/voipprovisioningapp.loc	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Localisation file.
+*
+*/
+
+
+//  LOCALISATION STRINGS
+
+// Installation query string.
+#define qtn_voip_prov_installation_query_string "Install VoIP service?"
+
+// Note for successful installation.
+#define qtn_voip_prov_installation_success "VoIP service installed"
+
+// Note for failed installation.
+#define qtn_voip_prov_installation_failed "Installation failed"
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Src/VoIPProvisioningApp.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Application implementation.
+*
+*/
+
+
+// INCLUDE FILES
+#include <eikstart.h>
+#include "VoIPProvisioningApp.h"
+#include "VoIPProvisioningDocument.h"
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CVoIPProvisioningApp::AppDllUid()
+// Returns application UID
+// ---------------------------------------------------------------------------
+
+TUid CVoIPProvisioningApp::AppDllUid() const
+    {
+    return KUidVoIPProvisioningAppUid;
+    }
+
+// ---------------------------------------------------------------------------
+// CVoIPProvisioningApp::CreateDocumentL()
+// Creates CVoIPProvisioningDocument object
+// ---------------------------------------------------------------------------
+
+CApaDocument* CVoIPProvisioningApp::CreateDocumentL()
+    {
+    return new (ELeave) CVoIPProvisioningDocument( *this );
+    }
+
+// ===================== OTHER EXPORTED FUNCTIONS ============================
+
+LOCAL_C CApaApplication* NewApplication()
+    {
+    return new CVoIPProvisioningApp;
+    }
+
+GLDEF_C TInt E32Main()
+    {
+    return EikStart::RunApplication( NewApplication );
+    }
+
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Src/VoIPProvisioningAppUi.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,375 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Application UI implementation.
+*
+*/
+
+
+// INCLUDES
+#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 <pathinfo.h>
+#include <DriveInfo.h>
+#include <zipfile.h>
+#include <zipfilememberinputstream.h>
+#include <aknwaitdialog.h>
+
+#include "voipxmlparser.h"
+#include "VoIPProvisioningAppUi.h"
+#include "VoIPProvisioningApp.h"
+#include "VoIPProvisioningDocument.h"
+
+const TInt KOneSecond( 1000000 );
+const TUid KMecoServiceTabUid = {0x20012423};
+const TInt KFiveTimes( 5 );
+_LIT( KDownloadFileName, "tempbranddatapackage.zip" );
+_LIT( KBrandMifPath,     ":\\private\\102828DD\\import\\" );
+_LIT( KBrandInstallPath, ":\\private\\102828DD\\import\\install\\" );
+_LIT( KBrandXmlPath,     ":\\private\\102828E1\\import\\" );
+_LIT( KXmlExtension,     ".xml" );
+_LIT( KMifExtension,     ".mif" );
+_LIT( KInstallExtension, ".install" );
+_LIT8( KZipExtension,    ".zip" );
+
+// ----------------------------------------------------------------------------
+// CVoIPProvisioningAppUi::CVoIPProvisioningAppUi
+// ----------------------------------------------------------------------------
+//
+CVoIPProvisioningAppUi::CVoIPProvisioningAppUi()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVoIPProvisioningAppUi::ConstructL
+// ----------------------------------------------------------------------------
+
+void CVoIPProvisioningAppUi::ConstructL()
+    {
+    // Call base classes ConstructL method.
+    BaseConstructL( ENoScreenFurniture | EAknEnableMSK );
+
+    StatusPane()->MakeVisible( EFalse );
+    HideApplicationFromFSW( ETrue );
+
+    iBrandPackageName.Copy( PathInfo::PhoneMemoryRootPath() );
+    iBrandPackageName.Append( PathInfo::OthersPath() );
+    iBrandPackageName.Append( KDownloadFileName );
+    }
+
+// ----------------------------------------------------------------------------
+// CVoIPProvisioningAppUi::~CVoIPProvisioningAppUi
+// ----------------------------------------------------------------------------
+//
+CVoIPProvisioningAppUi::~CVoIPProvisioningAppUi()
+    {
+    iDownloadMgr.Close();
+    if ( iWaitDialog )
+        {
+        TRAP_IGNORE( iWaitDialog->ProcessFinishedL() );
+        iWaitDialog = NULL;
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CVoIPProvisioningAppUi::ProcessCommandParametersL
+// ----------------------------------------------------------------------------
+//
+TBool CVoIPProvisioningAppUi::ProcessCommandParametersL(
+    TApaCommand /*aCommand*/, TFileName& /*aDocumentName*/,
+    const TDesC8& /*aTail*/ )
+    {
+    // Always return ETrue to make CVoIPProvisioningDocument's
+    // OpenFileL to be called.
+    return ETrue;
+    }
+
+// ----------------------------------------------------------------------------
+// CVoIPProvisioningAppUi::HandleFileL
+// ----------------------------------------------------------------------------
+//
+void CVoIPProvisioningAppUi::HandleFileL( RFile& aFile )
+    {
+    RFile file;
+    User::LeaveIfError( file.Duplicate( aFile ) );
+    CVoipXmlParser* parser = CVoipXmlParser::NewLC(); // CS:1
+    TBuf8<KMaxFileName> brandUrl( KNullDesC8 );
+    HBufC* queryText = parser->ReadDescriptionLC( aFile, brandUrl ); // CS:2
+    if ( !queryText->Des().Length() )
+        {
+        CleanupStack::PopAndDestroy( queryText );
+        queryText = NULL;
+        queryText = StringLoader::LoadLC( R_VOIP_DEFAULT_SAVE_QUERY );
+        }
+    CAknQueryDialog* query = CAknQueryDialog::NewL();
+    CleanupStack::PushL( query ); // CS:3
+    query->SetPromptL( queryText->Des() );
+    TBool launchTab( EFalse );
+    TUint32 serviceTabId;
+    if ( query->ExecuteLD( R_VOIP_PROVISIONING_QUERY_INSTALL_SERVICE ) )
+        {
+        iWaitDialog = new( ELeave ) CAknWaitDialog( 
+            REINTERPRET_CAST( CEikDialog**, &iWaitDialog ) );
+        iWaitDialog->SetTone( CAknNoteDialog::ENoTone );
+        iWaitDialog->ExecuteLD( R_WAITNOTE_CONFIGURE );
+
+        FetchBrandingDataL( brandUrl );
+
+        // Start phonebook into backgound.
+        RxSPViewServices viewServices;
+        CleanupClosePushL( viewServices ); // CS:4
+        TInt viewSrvErr = viewServices.Open();
+        if ( KErrServerTerminated == viewSrvErr || KErrNotFound == viewSrvErr )
+            {
+            viewServices.Close();
+            viewSrvErr = viewServices.Open();
+            }
+        if ( KErrNone == viewSrvErr )
+            {
+            viewServices.Close();
+            }
+
+        // Ownership of file is trasferred.
+        TInt error = parser->ImportDocument( file, serviceTabId );
+        if ( KErrNone == error )
+            {
+            iWaitDialog->ProcessFinishedL();
+            iWaitDialog = NULL;
+            ShowDoneNoteL();
+            launchTab = ETrue;
+            }
+        else
+            {
+            iWaitDialog->ProcessFinishedL();
+            iWaitDialog = NULL;
+            ShowFailNoteL();
+            }
+        CleanupStack::PopAndDestroy( &viewServices ); // CS:3
+        }
+    CleanupStack::Pop( query ); // CS:2
+    // queryText, parser
+    CleanupStack::PopAndDestroy( 2, parser ); // CS:0
+
+    // Launch service tab.
+    if ( launchTab )
+        {
+        TInt err = KErrNotFound;
+        TInt counter( 0 );
+        RxSPViewServices viewServices;
+        CleanupClosePushL( viewServices ); // CS:1
+        while ( KErrNone != err && KFiveTimes > counter )
+            {
+            err = viewServices.Activate( 
+                KMecoServiceTabUid.iUid, (TInt32)serviceTabId );
+            if ( KErrServerTerminated == err || KErrNotFound == err )
+                {
+                err = viewServices.Activate( 
+                    KMecoServiceTabUid.iUid, (TInt32)serviceTabId );
+                }
+            // Wait...
+            User::After( KOneSecond );
+            counter++;
+            }
+
+        CleanupStack::PopAndDestroy( &viewServices ); // CS:0
+        TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
+        TApaTask browserTask = taskList.FindApp( KCRUidBrowser );
+        if ( browserTask.Exists() )
+            {
+            browserTask.EndTask();
+            }
+        }
+
+    if ( iWaitDialog )
+        {
+        iWaitDialog->ProcessFinishedL();
+        iWaitDialog = NULL;
+        }
+
+    iDownloadMgr.Close();
+#ifndef __EUNIT_TESTING
+    User::Exit( KErrNone );
+#endif
+    }
+
+// ----------------------------------------------------------------------------
+// CVoIPProvisioningAppUi::ShowFailNoteL
+// ----------------------------------------------------------------------------
+//
+void CVoIPProvisioningAppUi::ShowFailNoteL() const
+    {
+    HBufC* text = StringLoader::LoadLC( R_VOIP_INVALID_DATA );
+    CAknErrorNote* note = new (ELeave) CAknErrorNote( R_AKN_ERROR_NOTE );
+    note->ExecuteLD( *text );
+    CleanupStack::PopAndDestroy( text );
+    }
+
+// ----------------------------------------------------------------------------
+// CVoIPProvisioningAppUi::ShowDoneNoteL
+// ----------------------------------------------------------------------------
+//
+void CVoIPProvisioningAppUi::ShowDoneNoteL() const
+    {
+    HBufC* text = StringLoader::LoadLC( R_VOIP_INSTALLED );
+    CAknInformationNote* note =
+        new (ELeave) CAknInformationNote( R_AKN_INFORMATION_NOTE );
+    note->ExecuteLD( *text );
+    CleanupStack::PopAndDestroy( text );
+    }
+
+// ---------------------------------------------------------------------------
+// From base class MHttpDownloadMgrObserver.
+// Handles download manager events.
+// ---------------------------------------------------------------------------
+//
+void CVoIPProvisioningAppUi::HandleDMgrEventL( RHttpDownload& aDownload,
+    THttpDownloadEvent aEvent )
+    {
+    if ( EHttpDlPaused == aEvent.iDownloadState && 
+        EHttpContentTypeReceived == aEvent.iProgressState )
+        {
+        TInt32 length;
+        TInt err = aDownload.GetIntAttribute( EDlAttrLength, length );
+        if ( KDefaultContentLength != length && 0 < length )
+            {
+            // Continue.
+            aDownload.Start();
+            }
+        else
+            {
+            CActiveScheduler::Stop();
+            aDownload.Delete();
+            }
+        }
+    else if ( EHttpDlCompleted == aEvent.iDownloadState )
+        {
+        CActiveScheduler::Stop();
+        // We don't need the leave code; un-branded service is OK.
+        TRAP_IGNORE( UncompressFilesL() );
+        aDownload.Delete();
+        }
+    else if ( EHttpDlFailed == aEvent.iDownloadState )
+        {
+        CActiveScheduler::Stop();
+        aDownload.Delete();
+        }
+    else if ( EHttpDlInprogress == aEvent.iDownloadState && 
+        EHttpProgDisconnected == aEvent.iProgressState )
+        {
+        CActiveScheduler::Stop();
+        aDownload.Delete();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Starts branding data download.
+// ---------------------------------------------------------------------------
+//
+TInt CVoIPProvisioningAppUi::FetchBrandingDataL( const TDesC8& aUrl )
+    {
+    if ( !aUrl.Length() || KErrNotFound == aUrl.Find( KZipExtension ) )
+        {
+        return KErrNotFound;
+        }
+    iDownloadMgr.ConnectL( KUidVoIPProvisioningAppUid, *this, EFalse );
+    RHttpDownload& download = iDownloadMgr.CreateDownloadL( aUrl );
+    download.SetStringAttribute( EDlAttrDestFilename, iBrandPackageName );
+    TInt err = download.Start();
+    CActiveScheduler::Start();
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// Uncompresses files from a zip file.
+// ---------------------------------------------------------------------------
+//
+void CVoIPProvisioningAppUi::UncompressFilesL()
+    {
+    RFs fs;
+    User::LeaveIfError( fs.Connect() );
+    CleanupClosePushL( fs ); // CS:1
+    CZipFile* zipfile = CZipFile::NewL( fs, iBrandPackageName );
+    CleanupStack::PushL( zipfile ); // CS:2
+    CZipFileMemberIterator* iterator = zipfile->GetMembersL();
+    CleanupStack::PushL( iterator ); // CS:3
+    CZipFileMember* fileMember = iterator->NextL();
+    TChar drive;
+    DriveInfo::GetDefaultDrive( DriveInfo::EDefaultPhoneMemory, drive );
+
+    RFile output;
+    CleanupClosePushL( output ); // CS:4
+
+    while ( fileMember )
+        {
+        TFileName memberFileName = *fileMember->Name();
+        TFileName outputPath;
+        outputPath.Append( drive );
+        if ( KErrNotFound != memberFileName.Find( KXmlExtension ) )
+            {
+            outputPath.Append( KBrandXmlPath );
+            outputPath.Append( memberFileName );
+            }
+        else if ( KErrNotFound != memberFileName.Find( KInstallExtension ))
+            {
+            outputPath.Append( KBrandInstallPath );
+            outputPath.Append( memberFileName );
+            }
+        else if ( KErrNotFound != memberFileName.Find( KMifExtension ))
+            {
+            outputPath.Append( KBrandMifPath );
+            outputPath.Append( memberFileName );
+            }
+        else
+            {
+            // Ignore this file and get next file from zip.
+            fileMember = iterator->NextL();
+            break;
+            }
+
+        TInt err = fs.MkDirAll( outputPath );
+        err = output.Replace( fs, outputPath, EFileShareAny|EFileWrite );
+
+        TUint32 size = fileMember->UncompressedSize();
+        RBuf8 outputData;
+        outputData.CreateL( size );
+        CleanupClosePushL( outputData ); // CS:5
+        RZipFileMemberReaderStream* stream;
+        zipfile->GetInputStreamL( fileMember, stream );
+        CleanupStack::PushL( stream ); // CS:6
+
+        err = stream->Read( outputData, size );
+        err = output.Write( outputData );
+
+        output.Flush();
+
+        // stream, &outputData
+        CleanupStack::PopAndDestroy( 2, &outputData ); // CS:4
+
+        fileMember = iterator->NextL();
+        }
+    // &output, iterator, zipfile, &fs
+    CleanupStack::PopAndDestroy( 3, zipfile ); // CS:1
+
+    // Finally, delete temp zip file.
+    fs.Delete( iBrandPackageName );    
+    CleanupStack::PopAndDestroy( &fs ); // CS:0
+    }
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/Src/VoIPProvisioningDocument.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Document implementation.
+*
+*/
+
+
+// INCLUDE FILES
+#include <apgwgnam.h>
+#include "VoIPProvisioningDocument.h"
+#include "VoIPProvisioningAppUi.h"
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// CVoIPProvisioningDocument::~CVoIPProvisioningDocument()
+// ----------------------------------------------------------------------------
+
+CVoIPProvisioningDocument::~CVoIPProvisioningDocument()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVoIPProvisioningDocument::CreateAppUiL()
+// Creates CVoIPProvisioningAppUi
+// ----------------------------------------------------------------------------
+CEikAppUi* CVoIPProvisioningDocument::CreateAppUiL()
+    {
+    // Create new instance of appui class
+    return new (ELeave) CVoIPProvisioningAppUi();
+    }
+
+// ----------------------------------------------------------------------------
+// CVoIPProvisioningDocument::UpdateTaskNameL( CApaWindowGroupName* aWgName )
+// ----------------------------------------------------------------------------
+void CVoIPProvisioningDocument::UpdateTaskNameL( CApaWindowGroupName* aWgName )
+	{
+	// Set task name to be hidden from the tasklist
+	CAknDocument::UpdateTaskNameL( aWgName );
+	aWgName->SetHidden( ETrue );
+	}
+
+// ----------------------------------------------------------------------------
+// CVoIPProvisioningDocument::OpenFileL
+// ----------------------------------------------------------------------------
+CFileStore* CVoIPProvisioningDocument::OpenFileL( TBool aDoOpen,
+    const TDesC& aFilename, RFs& aFs )
+	{
+	if ( aDoOpen )
+	    {
+        RFile file;
+        TInt error( file.Open( aFs, aFilename, EFileShareAny | EFileRead ) );
+        if ( error == KErrNone )
+            {
+            static_cast<CVoIPProvisioningAppUi*>(iAppUi)->HandleFileL( file );
+            }
+	    }
+	
+	return NULL;
+	}
+
+// ----------------------------------------------------------------------------
+// CVoIPProvisioningDocument::OpenFileL
+// ----------------------------------------------------------------------------
+void CVoIPProvisioningDocument::OpenFileL( CFileStore*& /*aFileStore*/,
+    RFile& aFile )
+	{
+	// Request appui to handle this file
+	static_cast<CVoIPProvisioningAppUi*>( iAppUi )->HandleFileL( aFile );
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/group/VoIPProvisioningApp.mmp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Project description file.
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+#include <bldvariant.hrh>
+
+ALWAYS_BUILD_AS_ARM
+
+TARGET         voipprovisioningapp.exe
+TARGETTYPE     exe
+UID            0x0 0x20026FE3
+TARGETPATH     PROGRAMS_DIR
+
+VENDORID       VID_DEFAULT
+CAPABILITY     CAP_APPLICATION PowerMgmt AllFiles -DRM
+
+SOURCEPATH     ../Src
+SOURCE         VoIPProvisioningApp.cpp 
+SOURCE         VoIPProvisioningAppUi.cpp
+SOURCE         VoIPProvisioningDocument.cpp
+
+START RESOURCE ../Data/VoIPProvisioningApp.rss
+HEADER
+TARGETPATH APP_RESOURCE_DIR
+LANGUAGE_IDS 
+END // RESOURCE
+
+START RESOURCE ../Data/VoIPProvisioningApp_reg.rss
+HEADER
+TARGETPATH     /private/10003a3f/apps
+END
+
+USERINCLUDE    . 
+USERINCLUDE    ../inc
+USERINCLUDE    ../../voipxmlprocessor/inc
+
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY        euser.lib 
+LIBRARY        apparc.lib 
+LIBRARY        cone.lib 
+LIBRARY        eikcore.lib 
+LIBRARY        avkon.lib
+LIBRARY        eiksrv.lib
+LIBRARY	       ws32.lib
+LIBRARY        apgrfx.lib
+LIBRARY        efsrv.lib 
+LIBRARY        bafl.lib
+LIBRARY	       voipxmlprocessor.lib
+LIBRARY        CommonEngine.lib // For StringLoader.
+LIBRARY        ecom.lib // For REComSession.
+LIBRARY        flogger.lib
+LIBRARY        xspviewservices.lib // For launching service tab.
+LIBRARY        DownloadMgr.lib
+LIBRARY        PlatformEnv.lib
+LIBRARY        ezip.lib
+
+//  End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningappui/group/bld.inf	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Build description file.
+*
+*/
+
+
+PRJ_PLATFORMS
+WINSCW ARMV5
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+VoIPProvisioningApp.mmp
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningrecognizer/data/20026FE1.rss	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  ECom resource file.
+*
+*/
+
+
+#include <ecom/registryinfo.rh>
+
+RESOURCE REGISTRY_INFO r_registry
+{
+	dll_uid = 0x20026FE1; 	// dll uid
+					
+	interfaces =
+		{
+		INTERFACE_INFO
+			{
+			interface_uid = 0x101F7D87; // Const for all data recognizers
+			implementations =
+				{
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x20026FE2; // implementation uid
+					version_no = 1;
+					display_name = "VoIP provisioning recognizer";
+					default_data = "";  
+					opaque_data = "";
+					}
+				};
+			}
+		};
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningrecognizer/group/VoIPProvisioningRecognizer.mmp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Project description file.
+*
+*/
+
+
+
+
+#include <platform_paths.hrh>
+
+//OPTION ARMCC --asm --interleave
+ALWAYS_BUILD_AS_ARM
+
+TARGET          voipprovrec.dll
+TARGETTYPE      PLUGIN
+UID             0x10009D8D 0x20026FE1
+
+CAPABILITY      CAP_ECOM_PLUGIN
+
+SOURCEPATH      ../data
+
+START RESOURCE  20026FE1.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET          VoIPProvRec.rsc
+#endif
+END
+
+VENDORID        VID_DEFAULT
+
+SOURCEPATH      ../src
+SOURCE          VoIPProvisioningRecognizer.cpp
+
+USERINCLUDE     ../inc
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY         EUSER.LIB
+LIBRARY         APMIME.LIB
+
+// END OF FILE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningrecognizer/group/bld.inf	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Build description file.
+*
+*/
+
+
+PRJ_PLATFORMS
+WINSCW ARMV5
+
+PRJ_MMPFILES
+VoIPProvisioningRecognizer.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningrecognizer/inc/VoIPProvisioningRecognizer.h	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  CVoIPProvisioningRecognizer definition.
+*
+*/
+
+
+#ifndef VOIPPROVISIONINGRECOGNIZER_H
+#define VOIPPROVISIONINGRECOGNIZER_H
+
+// INCLUDES
+#include <apmrec.h>
+
+// DEFINITIONS
+
+// Uid of this dll (defined in .mmp file)
+const TUid KUidMimeVoIPProvisioningRecognizer = { 0x20026FE1 };
+
+// Implementation uid for this recognizer
+const TInt KVoIPProvRecImplUIDValue = 0x20026FE2;
+const TUid KUidVoIPProvRecImpl = { KVoIPProvRecImplUIDValue };
+
+// Amount of mime types this recognizer can handle
+const TInt KVoIPSupportedMimeTypes( 2 );
+
+// Exported mime types
+_LIT8( KVoIPConfMimetypeSimple, "vnd.nokia.voip.config+xml" );
+_LIT8( KVoIPConfMimetypeApplication, "application/vnd.nokia.voip.config+xml" );
+
+// Strings to be searched to recognize content
+_LIT8( KVoIPXMLTag, "nokia-confdoc" );
+
+#ifdef _DEBUG
+#define EUNIT_TEST_FRIEND( x ) friend class x;
+#else
+#define EUNIT_TEST_FRIEND( x ) 
+#endif
+
+/**
+ *  Class to make recognisation for VoIP configuration XML file.
+ *  
+ *  @since S60 v5.0
+ *  @lib voipprovrec.lib
+ */
+class CVoIPProvisioningRecognizer : public CApaDataRecognizerType
+    {
+public:
+
+    /**
+     * Default constructor. Calls CApaDataRecognizerType in it's
+     * initializer list to complete construction.
+     */
+    CVoIPProvisioningRecognizer();
+
+    /**
+     * Static method to create instance of this recognizer.
+     * This method is called by the framework.
+     * Method pointer is delivered to the framework by ImplementationTable
+     * table returned by ImplementationGroupProxy.
+     *
+     * @since S60 v5.0
+     * @return Pointer to newly created instance of the recognizer.
+     */
+    static CApaDataRecognizerType* CreateRecognizerL();
+
+    /**
+     * Method called by the framework.
+     * This method returns the desired amount of data for recognition.
+     *
+     * @since S60 v5.0
+     * @return Preferred buffer size for recognition.
+     */
+    virtual TUint PreferredBufSize();
+
+    /**
+     * Method to deliver supported data types by this recognizer.
+     *
+     * @since S60 v5.0
+     * @param aIndex Index pointing out which data type of the supported
+     *               ones is returned.
+     * @return Corresponding data type of the requested index.
+     */
+    virtual TDataType SupportedDataTypeL( TInt aIndex ) const;
+
+private: // From CApaDataRecognizerType
+
+    /**
+     * Overwritten method to handle recognisation.
+     *
+     * @since S60 v5.0
+     * @param aName The name of the data; typically this is a file name
+     *              containing the data to be recognized.
+     * @param aBuffer Buffer containing PreferredBufSize() from 
+     *                the beginning of the file to be recognized.
+     */
+    virtual void DoRecognizeL( const TDesC& /*aName*/, const TDesC8& aBuffer );
+    
+    EUNIT_TEST_FRIEND( UT_CVoIPProvisioningRecognizer )
+    };
+
+#endif // VOIPPROVISIONINGRECOGNIZER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/provisioningrecognizer/src/VoIPProvisioningRecognizer.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  CVoIPProvisioningRecognizer implementation.
+*
+*/
+
+
+#include "VoIPProvisioningRecognizer.h"
+#include "ecom/implementationproxy.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------
+// CVoIPProvisioningRecognizer::CVoIPProvisioningRecognizer
+// Default constructor
+// ---------------------------------------------------------
+//
+CVoIPProvisioningRecognizer::CVoIPProvisioningRecognizer() :
+    CApaDataRecognizerType( KUidMimeVoIPProvisioningRecognizer,
+    CApaDataRecognizerType::EHigh )
+    {
+    iCountDataTypes = KVoIPSupportedMimeTypes;
+    }
+
+// ---------------------------------------------------------
+// CVoIPProvisioningRecognizer::PreferredBufSize
+// Overwritten method from CApaDataRecognizerType
+// ---------------------------------------------------------
+//
+TUint CVoIPProvisioningRecognizer::PreferredBufSize()
+    {
+    return 0x200;
+    }
+
+// ---------------------------------------------------------
+// CVoIPProvisioningRecognizer::SupportedDataTypeL
+// Overwritten method from CApaDataRecognizerType
+// ---------------------------------------------------------
+//
+TDataType CVoIPProvisioningRecognizer::SupportedDataTypeL( TInt aIndex ) const
+    {
+    __ASSERT_DEBUG( aIndex >= 0 &&
+        aIndex < KVoIPSupportedMimeTypes, User::Leave( KErrArgument ) );
+
+    switch( aIndex )
+        {
+        case 0:
+            {
+            TDataType type( KVoIPConfMimetypeSimple );
+            return type;
+            }
+        case 1:
+            {
+            TDataType type( KVoIPConfMimetypeApplication );
+            return type;
+            }            
+        default:
+            break;
+        }
+
+    return TDataType();
+    }
+
+// ---------------------------------------------------------------------------
+// CVoIPProvisioningRecognizer::DoRecognizeL
+// Overwritten method from CApaDataRecognizerType
+// ---------------------------------------------------------------------------
+//
+void CVoIPProvisioningRecognizer::DoRecognizeL( const TDesC& /*aName*/,
+    const TDesC8& aBuffer )
+    {
+    iConfidence = ENotRecognized;
+    iDataType = TDataType();
+    if ( aBuffer.FindF( KVoIPXMLTag ) != KErrNotFound )
+        {
+        iConfidence = ECertain;
+        iDataType = TDataType( KVoIPConfMimetypeApplication );
+        }
+    }
+
+// ---------------------------------------------------------
+// CVoIPProvisioningRecognizer::CreateRecognizerL
+// Static method to create instance of CVoIPProvisioningRecognizer
+// ---------------------------------------------------------
+//
+CApaDataRecognizerType* CVoIPProvisioningRecognizer::CreateRecognizerL()
+    {
+    return new (ELeave) CVoIPProvisioningRecognizer();
+    }
+
+// ---------------------------------------------------------
+// ImplementationTable
+// Table containing the data concerning CVoIPProvisioningRecognizer 
+// ---------------------------------------------------------
+//
+const TImplementationProxy ImplementationTable[] =
+    {
+    IMPLEMENTATION_PROXY_ENTRY( KVoIPProvRecImplUIDValue,
+        CVoIPProvisioningRecognizer::CreateRecognizerL )
+    };
+
+// ---------------------------------------------------------
+// ImplementationGroupProxy
+// Function called by framework to return data about this recognizer
+// ---------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(
+    TInt& aTableCount )
+    {
+    aTableCount =
+            sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
+    return ImplementationTable;
+    }
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/EABI/voipxmlprocessoru.def	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,18 @@
+EXPORTS
+	_ZN14CVoipXmlParser14ImportDocumentER5RFileRm @ 1 NONAME
+	_ZN14CVoipXmlParser17ReadDescriptionLCER5RFileR5TDes8 @ 2 NONAME
+	_ZN14CVoipXmlParser4NewLEv @ 3 NONAME
+	_ZN14CVoipXmlParser5NewLCEv @ 4 NONAME
+	_ZTI18CVoipXmlIapHandler @ 5 NONAME ; #<TI>#
+	_ZTI18CVoipXmlSipHandler @ 6 NONAME ; #<TI>#
+	_ZTI18CVoipXmlXdmHandler @ 7 NONAME ; #<TI>#
+	_ZTI19CVoipXmlVoipHandler @ 8 NONAME ; #<TI>#
+	_ZTI20CVoipXmlNatFwHandler @ 9 NONAME ; #<TI>#
+	_ZTI23CVoipXmlPresenceHandler @ 10 NONAME ; #<TI>#
+	_ZTV18CVoipXmlIapHandler @ 11 NONAME ; #<VT>#
+	_ZTV18CVoipXmlSipHandler @ 12 NONAME ; #<VT>#
+	_ZTV18CVoipXmlXdmHandler @ 13 NONAME ; #<VT>#
+	_ZTV19CVoipXmlVoipHandler @ 14 NONAME ; #<VT>#
+	_ZTV20CVoipXmlNatFwHandler @ 15 NONAME ; #<VT>#
+	_ZTV23CVoipXmlPresenceHandler @ 16 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/bwins/voipxmlprocessoru.def	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,8 @@
+EXPORTS
+	?GetBrandingData@CVoipXmlParser@@QAEXAAVTDes8@@0@Z @ 1 NONAME ABSENT ; void CVoipXmlParser::GetBrandingData(class TDes8 &, class TDes8 &)
+	?ImportDocument@CVoipXmlParser@@QAEHAAVRFile@@AAK@Z @ 2 NONAME ; int CVoipXmlParser::ImportDocument(class RFile &, unsigned long &)
+	?NewL@CVoipXmlParser@@SAPAV1@XZ @ 3 NONAME ; class CVoipXmlParser * CVoipXmlParser::NewL(void)
+	?NewLC@CVoipXmlParser@@SAPAV1@XZ @ 4 NONAME ; class CVoipXmlParser * CVoipXmlParser::NewLC(void)
+	?ReadDescriptionLC@CVoipXmlParser@@QAEPAVHBufC16@@AAVRFile@@@Z @ 5 NONAME ABSENT ; class HBufC16 * CVoipXmlParser::ReadDescriptionLC(class RFile &)
+	?ReadDescriptionLC@CVoipXmlParser@@QAEPAVHBufC16@@AAVRFile@@AAVTDes8@@@Z @ 6 NONAME ; class HBufC16 * CVoipXmlParser::ReadDescriptionLC(class RFile &, class TDes8 &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/group/bld.inf	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Build info file for VoIP XML processor
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+    ./voipxmlprocessor.mmp
+
+PRJ_TESTMMPFILES
+//    ../internal/test/group/UT_voipxmlprocessor.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/group/voipxmlprocessor.mmp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Project definition file for project VoIP XML processor.
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+
+ALWAYS_BUILD_AS_ARM
+
+TARGET        voipxmlprocessor.dll
+TARGETTYPE    dll
+UID           0x1000008d 0x20026FE4
+
+CAPABILITY    CAP_GENERAL_DLL
+VENDORID      VID_DEFAULT
+
+LANGUAGE_IDS
+
+SOURCEPATH    ../src
+SOURCE        voipxmlutils.cpp
+SOURCE        voipxmlparser.cpp
+SOURCE        voipxmlparamhandler.cpp
+SOURCE        voipxmlsiphandler.cpp
+SOURCE        voipxmlvoiphandler.cpp
+SOURCE        voipxmlxdmhandler.cpp
+SOURCE        voipxmlpresencehandler.cpp
+SOURCE        voipxmlnatfwhandler.cpp
+SOURCE        voipxmliaphandler.cpp
+
+USERINCLUDE   ../inc
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE /sf/app/iptelephony/inc
+
+
+LIBRARY       euser.lib
+LIBRARY       efsrv.lib
+LIBRARY       xmlparser.lib
+LIBRARY       xmldom.lib
+LIBRARY       sipprofilecli.lib
+LIBRARY       inetprotutil.lib
+LIBRARY       rcse.lib
+LIBRARY       serviceprovidersettings.lib
+LIBRARY       ipapputils.lib
+LIBRARY       bafl.lib
+LIBRARY       vimpstsettings.lib // For setting IM tone.
+LIBRARY       PlatformEnv.lib // For getting rom digital tone path.
+LIBRARY       XdmSettingsApi.lib
+LIBRARY       presencesettingsapi.lib
+LIBRARY       centralrepository.lib
+LIBRARY       cmmanager.lib
+LIBRARY       WEPSecuritySettingsUi.lib
+LIBRARY       WPASecuritySettingsUi.lib
+LIBRARY       commsdat.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmliaphandler.h	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  IAP handler for VoIP XML processor
+*
+*/
+
+
+#ifndef  VOIPXMLIAPHANDLER_H
+#define  VOIPXMLIAPHANDLER_H
+
+#include "voipxmlprocessordefaults.h"
+
+class RCmManagerExt;
+
+class TWepKey
+    {
+public:
+    /**
+     * ETrue if hexadecimal, EFalse if ASCII.
+     */
+    TBool iHex;
+    /**
+     * WEP key length.
+     */
+    TInt iLength;
+    /**
+     * WEP key data.
+     */
+    TBuf<KMaxWepKeyDataLength> iData;
+    };
+
+struct TTemporaryIap
+    {
+    /**
+     * Name of the IAP.
+     */
+    HBufC* iName;
+    /**
+     * SSID of the IAP.
+     */
+    HBufC* iSsid;
+    /**
+     * Tells if the SSID is hidden or not.
+     */
+    TBool iHidden;
+    /**
+     * Network mode.
+     */
+    TInt iNetworkMode;
+    /**
+     * Network type.
+     */
+    TInt iSecurityType;
+    /**
+     * Pre-shared key.
+     */
+    HBufC* iPreSharedKey;
+    /**
+     * WEP authentication mode.
+     */
+    TInt iWepAuthMode;
+    /**
+     * Current WEP key.
+     */
+    TWepKey iCurrentWepKey;
+    /**
+     * Array of WEP keys.
+     */
+    RArray<TWepKey> iWepKeys;
+    };
+
+/**
+*  VoipXmlIapHandler
+*  IAP handler class.
+* 
+*  @lib voipxmlprocessor.lib
+*  @since S60 v5.0
+*/
+class CVoipXmlIapHandler : public CBase
+    {
+#ifdef _DEBUG
+    friend class UT_CVoipXmlIapHandler;
+    friend class UT_CVoipXmlParamHandler;
+#endif
+
+public:
+
+    static CVoipXmlIapHandler* NewL();
+    ~CVoipXmlIapHandler();
+
+public:
+
+    /**
+     * Sets IAP setting.
+     *
+     * @since S60 v5.0
+     * @param aType Type of settings.
+     * @param aParam Parameter to be set.
+     * @param aValue Value of the setting.
+     */
+    void SetSetting( TInt aType, TInt aParam, const TDesC& aValue );
+
+    /**
+     * Stores settings to 'XDM registry', i.e. creates an XDM collection.
+     *
+     * @since S60 v5.0
+     * @return KErrNone if successful,
+     *         KErrNotSupported if no settings to be stored,
+     *         KErrCompletion if settings could not be stored.
+     */
+    TInt StoreSettings();
+
+    /**
+     * Returns destination ID.
+     *
+     * @since S60 v5.0
+     * @return Destination ID.
+     */
+    TUint32 SettingsId();
+
+    /**
+     * Method to inform the handler that currently deployed settings
+     * have ended. This way we will know when an IAP is ready to be
+     * appended to iIaps array, or when a WEP key is ready to appended
+     * to iWepKeys array.
+     *
+     * @since S60 v5.0
+     * @param aType Type of settings.
+     */
+    void SettingsEnd( TInt aType );
+
+private:
+
+    /**
+     * Resets iCurrentIap settings, i.e. deletes its member data.
+     *
+     * @since S60 v5.0
+     * @param aCloseArray Tells if array inside iCurrentIap is to be closed.
+     */
+    void ResetCurrentIap( TBool aCloseArray = EFalse );
+
+    /**
+     * Resets iIaps array, i.e. deletes its items member data.
+     *
+     * @since S60 v5.0
+     * @param aCloseArray Tells if arrays inside iIaps' 
+     *                    members are to be closed.
+     */
+    void ResetTempIapArray( TBool aCloseArray = EFalse );
+
+    /**
+     * Adds current IAP settings to iIaps array.
+     *
+     * @since S60 v5.0
+     */
+    void AddCurrentIapL();
+
+    /**
+     * Stores settings.
+     *
+     * @since S60 v5.0
+     */
+    void StoreSettingsL();
+
+    /**
+     * Creates an access point.
+     * 
+     * @since S60 v5.0
+     * @param aCmManager CMManager reference.
+     * @param aTempIap TTemporaryIap from which actual IAP will be created.
+     * @return IAP ID.
+     */
+    TUint32 CreateIapL( RCmManagerExt& aCmManager, TTemporaryIap aTempIap );
+private:
+
+    CVoipXmlIapHandler();
+    void ConstructL();
+
+private:
+
+    /**
+     * Tells if any settings have been set to temporary profile.
+     */
+    TBool iSettingsSet;
+
+    /**
+     * Name of destination. If this is empty when saving settings,
+     * destination will not be created.
+     * Own.
+     */
+    HBufC* iDestinationName;
+
+    /**
+     * ID of destination.
+     */
+    TUint32 iDestinationId;
+
+    /**
+     * Access point that is being currently handled.
+     */
+    TTemporaryIap iCurrentIap;
+
+    /**
+     * Array for temporary IAP's.
+     */
+    RPointerArray<TTemporaryIap> iIaps;
+    };
+
+#endif // VOIPXMLIAPHANDLER_H
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlnatfwhandler.h	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  NAT/Firewall handler for VoIP XML processor
+*
+*/
+
+
+#ifndef  VOIPXMLNATFWHANDLER_H
+#define  VOIPXMLNATFWHANDLER_H
+
+#include "voipxmlprocessordefaults.h"
+
+struct TAdditionalStun
+    {
+//public:
+
+    /**
+     * STUN server address.
+     */
+    TBuf8<KMaxNodeValueLength> iStunSrvAddr;
+
+    /**
+     * STUN server port.
+     */
+    TInt iStunSrvPort;
+
+    /**
+     * STUN server username.
+     */
+    TBuf8<KMaxNodeValueLength> iStunSrvUsername;
+
+    /**
+     * STUN server password.
+     */
+    TBuf8<KMaxNodeValueLength> iStunSrvPassword;
+    };
+
+/**
+*  VoipXmlNatFwHandler
+*  NAT/Framwrork handler class.
+* 
+*  @lib voipxmlprocessor.lib
+*  @since S60 v5.0
+*/
+class CVoipXmlNatFwHandler : public CBase
+    {
+#ifdef _DEBUG
+    friend class UT_CVoipXmlNatFwHandler;
+    friend class UT_CVoipXmlParamHandler;
+#endif
+
+public:
+
+    static CVoipXmlNatFwHandler* NewL();
+    ~CVoipXmlNatFwHandler();
+
+public:
+
+    /**
+     * Sets NAT/Firewall setting.
+     *
+     * @since S60 v5.0
+     * @param aParam Parameter to be set.
+     * @param aValue Value of the setting.
+     */
+    void SetSetting( TInt aType, TInt aParam, const TDesC8& aValue );
+
+    /**
+     * Stores settings to Central Repository (actually calls StoreSettingsL).
+     *
+     * @since S60 v5.0
+     * @return KErrNone if successful,
+     *         KErrNotSupported if no settings to be stored,
+     *         KErrCompletion if settings could not be stored.
+     */
+    TInt StoreSettings();
+
+    /**
+     * Method to inform the handler that currently deployed settings
+     * have ended. This way we will know when iCurrentAdditionalStunServer
+     * server should be appended to iAdditionalStunServers array.
+     *
+     * @since S60 v5.0
+     * @param aType Type of settings.
+     */
+    void SettingsEnd( TInt aType );
+
+private:
+
+    /**
+     * Commits actual Central Repository storage.
+     *
+     * @since S60 v5.0
+     */
+    void StoreSettingsL();
+
+private:
+
+    CVoipXmlNatFwHandler();
+    void ConstructL();
+
+private:
+
+    /**
+     * Tells if any settings have been set to internal members.
+     */
+    TBool iSettingsSet;
+
+    /**
+     * Domain name.
+     * Own.
+     */
+    HBufC8* iDomain;
+
+    /**
+     * STUN server address.
+     * Own.
+     */
+    HBufC8* iStunSrvAddr;
+
+    /**
+     * STUN server port.
+     */
+    TInt iStunSrvPort;
+
+    /**
+     * TCP refresh interval.
+     */
+    TInt iTcpRefreshInterval;
+
+    /**
+     * UDP refresh interval.
+     */
+    TInt iUdpRefreshInterval;
+
+    /**
+     * CRLF refresh.
+     */
+    TInt iCrlfRefresh;
+
+    /**
+     * STUN server username.
+     * Own.
+     */
+    HBufC8* iStunSrvUsername;
+
+    /**
+     * STUN server password.
+     * Own.
+     */
+    HBufC8* iStunSrvPassword;
+
+    /**
+     * STUN shared secret.
+     */
+    TInt iStunSharedSecret;
+
+    /**
+     * Start port of STUN port range.
+     */
+    TInt iStartPortRange;
+
+    /**
+     * End port of STUN port range.
+     */
+    TInt iEndPortRange;
+
+    /**
+     * NAT protocol
+     * Own.
+     */
+    HBufC8* iNatProtocol;
+
+    /**
+     * Additional STUN server data that is being currently modified.
+     * After modifications are done, it is appended to iAdditionalStunServers.
+     */
+    TAdditionalStun iCurrentAdditionalStunServer;
+
+    /**
+     * Array for holding additional STUN server data.
+     */
+    RPointerArray<TAdditionalStun> iAdditionalStunServers;
+    };
+
+#endif // VOIPXMLNATFWHANDLER_H
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlparamhandler.h	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,164 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Class definition of VoIP XML parameter handler.
+*
+*/
+
+
+#ifndef VOIPXMLPARAMHANDLER_H
+#define VOIPXMLPARAMHANDLER_H
+
+#include <e32base.h>
+
+class CVoipXmlSipHandler;
+class CVoipXmlVoipHandler;
+class CVoipXmlXdmHandler;
+class CVoipXmlPresenceHandler;
+class CVoipXmlNatFwHandler;
+class CVoipXmlIapHandler;
+
+/**
+*  CVoipXmlParamHandler 
+*  Handles parameters and passes them to settings handlers.
+* 
+*  @lib voipxmlprocessor.lib
+*  @since S60 v5.0
+*/
+NONSHARABLE_CLASS( CVoipXmlParamHandler ) : public CBase
+    {
+#ifdef _DEBUG
+    friend class UT_CVoipXmlParamHandler;
+    friend class UT_CVoipXmlParser;
+#endif
+
+public:
+
+    static CVoipXmlParamHandler* NewL();
+    
+    static CVoipXmlParamHandler* NewLC(); 
+
+    virtual ~CVoipXmlParamHandler();
+
+    /**
+     * Marks what type of settings are to be deployed.
+     * 
+     * @since S60 v5.0
+     * @param aType Type of settings that are to be deployed.
+     */
+    void SettingsStart( const TDesC& aType );
+
+    /**
+     * Tells that settings are deployed and previous type should be used. 
+     */
+    void SettingsEnd();
+
+    /**
+     * Handles XML parameters and passes the handled
+     * ones to settings handlers.
+     * 
+     * @since S60 v5.0
+     * @param aParam Parameter name.
+     * @param avalue Parameter value.
+     */
+    void HandleParameter( const TDesC& aParam, const TDesC& aValue );
+
+    /**
+     * Stores transiently saved settings.
+     *
+     * @since S60 v5.0
+     * @return KErrNone if successful,
+     *         KErrNotSupported if no SIP or VoIP settings to be stored,
+     *         KErrCompletion if error occurred in storing settings.
+     */
+    TInt StoreSettings();
+
+    /**
+     * Returns the service tab ID.
+     * 
+     * @since S60 v5.0
+     * @return Service tab ID.
+     */
+    TUint32 ServiceTabId();
+
+private:
+
+    /**
+     * Converts parameter name to enumerated one.
+     *
+     * @since S60 v5.0
+     * @param aParam Parameter name.
+     * @return Enumerated parameter value.
+     */
+    TInt ConvertParameter( const TDesC& aParam );
+
+private:
+
+    CVoipXmlParamHandler();
+
+    void ConstructL();
+
+    
+private: // data
+
+    /**
+     * Type of settings that are currently being deployed.
+     */
+    TInt iSettingsType;
+
+    /**
+     * Type of previously deployed settings.
+     */
+    TInt iPreviousSettingsType;
+
+    /**
+     * SIP settings handler.
+     * Own.
+     */
+    CVoipXmlSipHandler* iSipHandler;
+
+    /**
+     * VoIP settings handler.
+     * Own.
+     */
+    CVoipXmlVoipHandler* iVoipHandler;
+
+    /**
+     * XDM settings handler.
+     * Own.
+     */
+    CVoipXmlXdmHandler* iXdmHandler;
+
+    /**
+     * Presence settings handler.
+     * Own.
+     */
+    CVoipXmlPresenceHandler* iPresenceHandler;
+
+    /**
+     * NAT/Firewall settings handler.
+     * Own.
+     */
+    CVoipXmlNatFwHandler* iNatFwHandler;
+
+    /**
+     * Internet Access Point settings handler.
+     * Own.
+     */
+    CVoipXmlIapHandler* iIapHandler;
+    };
+
+#endif // VOIPXMLPARAMHANDLER_H
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlparser.h	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,180 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  VoIP settings XML parser
+*
+*/
+
+
+#ifndef VOIPXMLPARSER_H
+#define VOIPXMLPARSER_H
+
+#include <GMXMLParser.h>
+#include <GMXMLElement.h>
+#include <GMXMLNode.h>
+
+#include "voipxmlparamhandler.h"
+
+class CVoipXmlParamHandler;
+
+/**
+ *  VoIP settings XML parser.
+ *  Parses an XML file and passes the parameters to XML parameter handler.
+ *
+ *  @code
+ *    CVoIPXmlParser* parser = CVoIPXmlParser::NewLC();
+ *    TFileName myfile( PathInfo::PhoneMemoryRootPath() );
+ *    _LIT( KXmlFilePath, "testsettings.xml" );
+ *    myfile.Append( KXmlFilePath );
+ *    TUint32 serviceTabId;
+ *    TInt err = parser->ImportDocument( myfile, serviceTabId );
+ *    CleanupStack::PopAndDestroy( parser );
+ *  @endcode
+ *
+ *  @lib voipxmlprocessor.lib
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS( CVoipXmlParser ) : public CBase, 
+                                      public MMDXMLParserObserver
+    {
+#ifdef _DEBUG
+    friend class UT_CVoipXmlParser;
+#endif
+
+public:
+
+    IMPORT_C static CVoipXmlParser* NewL();
+    IMPORT_C static CVoipXmlParser* NewLC();
+    virtual ~CVoipXmlParser();
+
+    /**
+     * Method for importing XML and saving settings.
+     *
+     * @since S60 v5.0
+     * @param aFile File handle to XML file. Ownsership is taken and moved
+     *              to CMDXMLParser object.
+     * @param aServiceTabId Service tab ID of the created service.
+     * @return KErrEof if no <nokia-provdoc> found in XML file,
+     *         KErrCorrupt if XML file is corrupted,
+     *         KErrAbort if no <settings type=""> found in XML file,
+     *         KErrBadHandle if unrecognized node types found in XML file,
+     *         KErrNotSupported if no SIP or VoIP settings found,
+     *         KErrCompletion if error in storing the settings.
+     */
+    IMPORT_C TInt ImportDocument( RFile& aFile, TUint32& aServiceTabId );
+
+    /**
+     * Reads description from inside <nokia-provdescription> tags
+     * and returns it in HBufC object which has been pushed into cleanup
+     * stack. Also reads branding URL from XML file and sets it into argument.
+     *
+     * @since S60 v5.0
+     * @param aFile File handle to XML file. Ownsership is taken and moved
+     *              to CMDXMLParser object.
+     * @param aBrandUrl Branding URL.
+     * @return Descriptor object containing the description.
+     */
+    IMPORT_C HBufC* ReadDescriptionLC( RFile& aFile, TDes8& aBrandUrl );
+
+private:
+
+    /**
+     * For parsing nokia-provdescription node.
+     *
+     * @since S60 v5.0
+     * @param aXmlElement XML element to be parsed.
+     */
+    void ParseDescription( CMDXMLElement& aXmlElement );
+
+    /**
+     * For parsing root node.
+     *
+     * @since S60 v5.0
+     * @param aXmlElement XML element to be parsed.
+     */
+    void ParseRoot( CMDXMLElement& aXmlElement );
+
+    /**
+     * For parsing settings node.
+     *
+     * @since S60 v5.0
+     * @param aXmlElement XML element to be parsed.
+     */
+    void ParseSettings( CMDXMLNode* aXmlNode );
+
+protected:
+
+// From base class MMDXMLParserObserver.
+
+    /**
+     * From base class MMDXMLParserObserver.
+     * Call back function used to inform a client of the Parser when a
+     * parsing operation completes.
+     * @since S60 v5.0
+     */
+    void ParseFileCompleteL();
+
+private:
+
+    CVoipXmlParser();
+
+    void ConstructL();
+
+private: // data
+
+    /**
+     * XML parser object.
+     * Own.
+     */
+    CMDXMLParser* iParser;
+
+    /**
+     * XML document.
+     * Own.
+     */
+    CMDXMLDocument* iXmlDoc;
+
+    /**
+     * XML parameter handler.
+     * Own.
+     */
+    CVoipXmlParamHandler* iParamHandler;
+
+    /**
+     * Error code to be returned in ImportDocument.
+     */
+    TInt iError;
+
+    /**
+     * Flag for telling if we are to only read
+     * <nokia-provdescription> contents from the XML document.
+     */
+    TBool iParseDescription;
+
+    /**
+     * Object for holding description read from <nokia-provdescription>.
+     * Own.
+     */
+    HBufC* iDescription;
+
+    /**
+     * Object for holding branding URL read from <nokia-provbrandurl>.
+     * Own.
+     */
+    HBufC* iBrandUrl;
+    };
+
+#endif // VOIPXMLPARSER_H
+
+// End of file.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlpresencehandler.h	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,130 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Presence handler for VoIP XML processor
+*
+*/
+
+
+#ifndef  VOIPXMLPRESENCEHANDLER_H
+#define  VOIPXMLPRESENCEHANDLER_H
+
+#include <pressettingsset.h>
+
+class TPresSettingsSet;
+
+/**
+*  VoipXmlPresenceHandler
+*  Presence handler class.
+* 
+*  @lib voipxmlprocessor.lib
+*  @since S60 v5.0
+*/
+class CVoipXmlPresenceHandler : public CBase
+    {
+#ifdef _DEBUG
+    friend class UT_CVoipXmlPresenceHandler;
+    friend class UT_CVoipXmlParamHandler;
+#endif
+
+public:
+
+    static CVoipXmlPresenceHandler* NewL();
+    ~CVoipXmlPresenceHandler();
+
+public:
+
+    /**
+     * Sets XDM setting.
+     *
+     * @since S60 v5.0
+     * @param aParam Parameter to be set.
+     * @param aValue Value of the setting.
+     */
+    void SetSetting( TInt aParam, const TDesC& aValue );
+
+    /**
+     * Stores settings to 'XDM registry', i.e. creates an XDM collection.
+     *
+     * @since S60 v5.0
+     * @return KErrNone if successful,
+     *         KErrNotSupported if no settings to be stored,
+     *         KErrCompletion if settings could not be stored.
+     */
+    TInt StoreSettings();
+
+    /**
+     * Returns the settings ID.
+     *
+     * @since S60 v5.0
+     * @return XDM settings ID.
+     */
+    TUint32 SettingsId();
+
+    /**
+     * Gives linkage information.
+     *
+     * @since S60 v5.0
+     * @param aType Type of settings.
+     * @param aSettingsId Settings ID.
+     */
+    void LinkSettings( TInt aType, TUint32 aSettingsId );
+
+    /**
+     * Finalizes settings, i.e. stores the profile with linkage information.
+     *
+     * @since S60 v5.0
+     * @return KErrNone if successful,
+     *         KErrGeneral if settings could not be finalized.
+     */
+    TInt FinalizeSettings();
+
+private:
+
+    /**
+     * Creates a provider name for Presence profile. aName is used
+     * and replaced with a parenthised ordered number if the name is
+     * already found in Presence storage. 
+     *
+     * @since S60 v5.0
+     * @param aName Provider name to be set.
+     */
+    void CreateProviderNameL( TDes& aName );
+
+private:
+
+    CVoipXmlPresenceHandler();
+    void ConstructL();
+
+private:
+
+    /**
+     * XDM settings collection object.
+     * Own.
+     */
+    TPresSettingsSet iProfile;
+
+    /**
+     * Tells if any settings have been set to temporary profile.
+     */
+    TBool iSettingsSet;
+
+    /**
+     * XDM collection ID.
+     */
+    TUint32 iProfileId;
+    };
+
+#endif // VOIPXMLPRESENCEHANDLER_H
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlprocessordefaults.h	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,323 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Holds default values for VoIP XML Processor.
+*
+*/
+
+
+#ifndef VOIPXMLPROCESSORDEFAULTS_H
+#define VOIPXMLPROCESSORDEFAULTS_H
+
+#include <e32base.h>
+
+// ==============================
+// XML constants
+// ==============================
+//
+// Node names.
+_LIT( KNodeNokiaConfDoc,                  "nokia-confdoc" );
+_LIT( KNodeConfDescription,               "confdescription" );
+_LIT( KNodeConfBrandUrl,                  "confbrandurl" );
+_LIT( KNodeSettings,                      "settings" );
+_LIT( KNodeParam,                         "param" );
+// Node attributes.
+_LIT( KAttributeType,                     "type" );
+_LIT( KAttributeName,                     "name" );
+_LIT( KAttributeValue,                    "value" );
+// Setting types (i.e. supported values for 'type' attribute).
+_LIT( KSettingsTypeVoip,                  "voip" );
+_LIT( KSettingsTypeSip,                   "sip" );
+_LIT( KSettingsTypePresence,              "presence" );
+_LIT( KSettingsTypeXdm,                   "xdm" );
+_LIT( KSettingsTypeNatFw,                 "natfw" );
+_LIT( KSettingsTypeWlan,                  "wlan" );
+_LIT( KSettingsTypeCodec,                 "codec" );
+_LIT( KSettingsTypeVmbx,                  "voicemailbox" );
+_LIT( KSettingsTypeProxy,                 "proxy" );
+_LIT( KSettingsTypeRegistrar,             "registrar" );
+_LIT( KSettingsTypeAdditionalStun,        "additionalstun" );
+_LIT( KSettingsTypeWepKey,                "wepkey" );
+_LIT( KSettingsTypeDestination,           "destination" );
+// Parameter names (i.e. supported values for 'value' attribute).
+// Generic.
+_LIT( KParamValueName,                    "name" );
+_LIT( KParamValueUri,                     "uri" );
+_LIT( KParamValueTransport,               "transport" );
+_LIT( KParamValuePort,                    "port" );
+_LIT( KParamValueUsername,                "username" );
+_LIT( KParamValuePassword,                "password" );
+_LIT( KParamValueType,                    "type" );
+_LIT( KParamValueDomain,                  "domain" );
+_LIT( KParamValueStartPort,               "startport" );
+_LIT( KParamValueEndPort,                 "endport" );
+// VoIP specific.
+_LIT( KParamValueMediaQos,                "mediaqos" );
+_LIT( KParamValueDtmfInband,              "dtmfinband" );
+_LIT( KParamValueDtmfOutband,             "dtmfoutband" );
+_LIT( KParamValueSecureCallPref,          "securecallpreference" );
+_LIT( KParamValueVoipOverWcdma,           "allowvoipoverwcdma" );
+_LIT( KParamValueRtcp,                    "rtcp" );
+_LIT( KParamValueUserAgentTerminalType,   "useragentterminaltype" );
+_LIT( KParamValueUserAgentWlanMac,        "useragentwlanmac" );
+_LIT( KParamValueUserAgentFreeString,     "useragentfreestring" );
+_LIT( KParamValueCallerIdDigits,          "calleriddigits" );
+_LIT( KParamValueIgnoreDomainPart,        "ignoredomainpart" );
+_LIT( KParamValueAutoAcceptBuddyRequests, "autoacceptbuddyrequests" );
+_LIT( KParamValueAddUserPhone,            "adduserphone" );
+_LIT( KParamValueProviderUrl,             "providerurl" );
+_LIT( KParamValueMinSessionInterval,      "minsessioninterval" );
+_LIT( KParamValueSessionInterval,         "sessioninterval" );
+_LIT( KParamValueBrandingUri,             "brandinguri" );
+_LIT( KParamValueAutoEnable,              "autoenable" );
+_LIT( KParamValueEnableSipIm,             "enablesipim" );
+_LIT( KParamValueBrandId,                 "brandid" );
+// Voice mailbox specific.
+_LIT( KParamValueMwiUri,                  "mwiuri" );
+_LIT( KParamValueListeningUri,            "listeninguri" );
+_LIT( KParamValueReSubscribeInterval,     "resubscribeinterval" );
+// Codec specific
+_LIT( KParamValueJitterBuffer,            "jitterbuffer" );
+_LIT( KParamValueOctetAlign,              "octetalign" );
+_LIT( KParamValuePTime,                   "ptime" );
+_LIT( KParamValueMaxPTime,                "maxptime" );
+_LIT( KParamValueModeSet,                 "modeset" );
+_LIT( KParamValueModeChangePeriod,        "modechangeperiod" );
+_LIT( KParamValueModeChangeNeighbor,      "modechangeneighbor" );
+_LIT( KParamValueMaxRed,                  "maxred" );
+_LIT( KParamValueVad,                     "vad" );
+_LIT( KParamValueAnnexB,                  "annexb" );
+// SIP specific
+_LIT( KParamValueSignalingQos,            "signalingqos" );
+_LIT( KParamValuePublicUserId,            "publicuserid" );
+_LIT( KParamValueSignalCompression,       "signalcompression" );
+_LIT( KParamValueSecurityNegotiation,     "securitynegotiation" );
+_LIT( KParamValueProfileLock,             "profilelock" );
+_LIT( KParamValueAutoRegistration,        "autoregistration" );
+// Proxy
+_LIT( KParamValueLooseRouting,            "looserouting" );
+// Presence specific
+_LIT( KParamValueMaxObjectSize,           "maxobjectsize" );
+_LIT( KParamValuePublishInterval,         "publishinterval" );
+_LIT( KParamValueMaxSubscriptions,        "maxsubscriptions" );
+_LIT( KParamValueMaxContacts,             "maxcontacts" );
+_LIT( KParamValueDomainSyntax,            "domainsyntax" );
+// NAT/FW sepcific
+_LIT( KParamValueTcpRefreshInterval,      "tcprefreshinterval" );
+_LIT( KParamValueUdpRefreshInterval,      "udprefreshinterval" );
+_LIT( KParamValueCrlfRefresh,             "crlfrefresh" );
+_LIT( KParamValueStunSharedSecret,        "stunsharedsecret" );
+// Access point specific
+_LIT( KParamSsid,                         "ssid" );
+_LIT( KParamHidden,                       "hidden" );
+_LIT( KParamNetworkMode,                  "networkmode" );
+_LIT( KParamPreSharedKey,                 "presharedkey" );
+_LIT( KParamWepAuthMode,                  "wepauthmode" );
+// WEP
+_LIT( KParamLength,                       "length" );
+_LIT( KParamData,                         "data" );
+
+// Other.
+const TInt KMaxNodeNameLength          = 32;
+const TInt KMaxNodeValueLength         = 256;
+const TInt KMaxProfileNameAppendLength = 4; // e.g. (10) as in Provider(10)
+const TInt KMaxProfileNames            = 99;
+_LIT( KOpenParenthesis,   "(" );
+_LIT( KClosedParenthesis, ")" );
+const TUint KComma = ',';
+
+// ==============================
+// VoIP constants
+// ==============================
+//
+_LIT( KILbc, "ILBC" );
+
+// ==============================
+// SIP constants
+// ==============================
+//
+_LIT8( KIetf,               "IETF" );
+_LIT8( KIms,                "IMS" );
+_LIT8( KOpenParenthesis8,   "(" );
+_LIT8( KClosedParenthesis8, ")" );
+_LIT8( KSip,                "sip:" );
+_LIT8( KSips,               "sips:" );
+_LIT8( KTransport,          ";transport=" );
+_LIT8( KLr,                 ";lr" );
+_LIT8( KEscaped,            "%" );
+_LIT8( KColon,              ":" );
+_LIT8( KTcp,                "TCP" );
+_LIT8( KUdp,                "UDP" );
+_LIT8( KUserAgent,          "User-Agent" );
+_LIT8( KSpace,              " " );
+const TInt KMaxTerminalTypeLength            = 64;
+const TInt KMaxWlanMacAddressLength          = 20;
+const TInt KMaxUserAgentHeaderLength         = 200;
+const TInt KUserAgentHeaderDataArrayInitSize = 4;
+const TInt KDefaultSigQos                    = 40;
+
+// ==============================
+// XDM and Presence constants
+// ==============================
+//
+const TInt KMaxObjectSize     = 5120;
+const TInt KPublishInterval   = 60;
+_LIT( KDefaultXdmUri,          "http://localhost" );
+_LIT( KDefaultXdmAuthType,     "HTTP-DIGEST" );
+
+// ==============================
+// NAT/Firewall constants
+// ==============================
+//
+const TInt KDefaultStunServerPort     = 3478;
+const TInt KDefaultTcpRefreshInterval = 1200;
+const TInt KDefaultUdpRefreshInterval = 28;
+const TInt KDefaultStartPortRange     = 49152;
+const TInt KDefaultEndPortRange       = 49200;
+_LIT( KDefaultNatProtocol,             "nokia.stun" );
+
+// ==============================
+// WLAN access point constants.
+// ==============================
+//
+const TInt KMaxWepKeyDataLength = 26;
+const TInt KMaxWepKeyCount      = 4;
+// Enumeration for WEP key lengths.
+enum TWepKeyLengths
+    {
+    // Length of WEP encryption
+    EWepEncryption64  = 64,
+    EWepEncryption128 = 128,
+    // Length of WEP key data
+    EWepKey64Hex      = 10,
+    EWepKey64Ascii    = 5,
+    EWepKey128Hex     = KMaxWepKeyDataLength,
+    EWepKey128Ascii   = 13
+    };
+_LIT( KNetworkModeInfra,     "infra" );
+_LIT( KNetworkModeAdhoc,     "adhoc" );
+_LIT( KSecurityTypeWep,      "WEP" );
+_LIT( KSecurityTypeWpa,      "WPA" );
+_LIT( KSecurityTypeWpa2,     "WPA2" );
+_LIT( KSecurityType8021x,    "801X" );
+_LIT( KWepAuthModeOpen,      "open" );
+_LIT( KWepAuthModeShared,    "shared" );
+
+// ==============================
+// General constants
+// ==============================
+//
+// Enumeration for type of settings being deployed.
+enum TSettingsType
+    {
+    EUnknown = KErrNotSupported,
+    EVoip = 0,
+    ESip,
+    EPresence,
+    EXdm,
+    ENatFw,
+    EDestination,
+    EWlan,
+    ECodec,
+    EVmbx,
+    EProxy,
+    ERegistrar,
+    EAdditionalStun,
+    EWepKey
+    };
+
+// Enumeration for parameters.
+enum TParameters
+    {
+    EUnSupported = KErrNotSupported,
+    // Generic parameters
+    EName = 0,
+    EUri,
+    ETransport,
+    EPort,
+    EUsername,
+    EPassword,
+    EType,
+    EDomain,
+    EStartPort,
+    EEndPort,
+    // VoIP parameters
+    EMediaQos,
+    EDtmfInband,
+    EDtmfOutband,
+    ESecureCallPreference,
+    EAllowVoipOverWcdma,
+    ERtcp,
+    EUserAgentHeaderTerminalType,
+    EUserAgentHeaderWlanMac,
+    EUserAgentHeaderFreeString,
+    ECallerIdDigits,
+    EIgnoreDomainPart,
+    EAutoAcceptBuddyRequests,
+    EAddUserPhone,
+    EProviderUrl,
+    EMinSessionInterval,
+    ESessionInterval,
+    EBrandingUri,
+    EAutoEnable,
+    EEnableSipIm,
+    EBrandId,
+    // Voice mailbox parameters
+    EMwiUri,
+    EListeningUri,
+    EReSubscribeInterval,
+    // Codec parameters
+    EJitterBuffer,
+    EOctetAlign,
+    EPTime,
+    EMaxPTime,
+    EModeSet,
+    EModeChangePeriod,
+    EModeChangeNeighbor,
+    EMaxRed,
+    EVad,
+    EAnnexb,
+    // SIP parameters
+    ESignalingQos,
+    EPublicUserId,
+    ESignalCompression,
+    ESecurityNegotiation,
+    EProfileLock,
+    EAutoRegistration,
+    // Proxy parameters
+    ELooseRouting,
+    // Presence parameters
+    EMaxObjectSize,
+    EPublishInterval,
+    EMaxSubscriptions,
+    EMaxContacts,
+    EDomainSyntax,
+    // NAT/Firewall parameters
+    ETcpRefreshInterval,
+    EUdpRefreshInterval,
+    ECrlfRefresh,
+    EStunSharedSecret,
+    // WLAN access point parameters
+    ESsid,
+    EHidden,
+    ENetworkMode,
+    EPreSharedKey,
+    EWepAuthMode,
+    // WEP key parameters
+    ELength,
+    EData
+    };
+
+#endif // VOIPXMLPROCESSORDEFAULTS_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlprocessorlogger.h	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  VoIP XML processor logger
+*
+*/
+
+
+
+#ifndef VOIPXMLPROCESSORLOGGER_H
+#define VOIPXMLPROCESSORLOGGER_H
+
+//  INCLUDES
+#include <e32def.h>
+#include <e32debug.h>
+
+//----------------------------------------------------------------------------
+//  USER LOGGING SETTINGS
+//----------------------------------------------------------------------------
+
+#ifndef _DEBUG
+
+/***************************
+* Logging method variants:
+*   0 = No logging
+*   1 = RDebug
+***************************/ 
+
+#define VOIPXMLPROCESSOR_DEBUG     0   // UREL BUILD
+
+#else
+
+#define VOIPXMLPROCESSOR_DEBUG     1   // UDEB BUILD
+
+#endif // _DEBUG
+
+//----------------------------------------------------------------------------
+//  LOGGING MACROs (DO NOT EDIT)
+//
+//  USE THESE MACROS IN YOUR CODE
+//----------------------------------------------------------------------------
+
+#if VOIPXMLPROCESSOR_DEBUG == 1    // RDebug
+
+#define DBG_PRINT( AA )           { RDebug::Print( _L( AA ) ); }
+#define DBG_PRINT2( AA, BB )      { RDebug::Print( _L( AA ), BB ); }
+#define DBG_PRINT3( AA, BB, CC )  { RDebug::Print( _L( AA ), BB, CC ); }
+
+#else   // VOIPXMLPROCESSOR_DEBUG == 0 or invalid -> Disable loggings
+
+#define DBG_PRINT( AA )          
+#define DBG_PRINT2( AA, BB )     
+#define DBG_PRINT3( AA, BB, CC )    
+
+#endif  // IAS_DEBUG
+
+#endif  // VOIPXMLPROCESSORLOGGER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlsiphandler.h	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,236 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  SIP handler for VoIP XML processor
+*
+*/
+
+
+#ifndef  VOIPXMLSIPHANDLER_H
+#define  VOIPXMLSIPHANDLER_H
+
+#include <sipprofileregistryobserver.h>
+#include <sipprofiletypeinfo.h>
+
+class CSIPManagedProfile;
+class CSIPManagedProfileRegistry;
+class CSIPProfile;
+class TSIPProfileTypeInfo;
+
+/**
+*  VoipXmlSipHandler
+*  SIP handler class.
+* 
+*  @lib voipxmlprocessor.lib
+*  @since S60 v5.0
+*/
+class CVoipXmlSipHandler : public CBase,
+                           public MSIPProfileRegistryObserver
+    {
+#ifdef _DEBUG
+    friend class UT_CVoipXmlSipHandler;
+    friend class UT_CVoipXmlParser;
+    friend class UT_CVoipXmlParamHandler;
+#endif
+
+public:
+    enum TTransportType
+        {
+        EAutomatic = 0,
+        EUdp,
+        ETcp
+        };
+public:
+
+    static CVoipXmlSipHandler* NewL();
+    ~CVoipXmlSipHandler();
+
+public:
+
+    /**
+     * Sets SIP setting.
+     *
+     * @since S60 v5.0
+     * @param aType Type of setting (SIP 'core', proxy or registrar)
+     * @param aParam Parameter to be set.
+     * @param aValue Value of the setting.
+     */
+    void SetSetting( TInt aType, TInt aParam, const TDesC8& aValue );
+
+    /**
+     * Stores settings to SIP managed profile registry.
+     *
+     * @since S60 v5.0
+     * @return KErrNone if successful,
+     *         KErrNotSupported if no settings to be stored,
+     *         KErrCompletion if settings could not be stored.
+     */
+    TInt StoreSettings();
+
+    /**
+     * Returns the profile ID.
+     *
+     * @since S60 v5.0
+     * @return SIP profile ID.
+     */
+    TUint32 SettingsId();
+
+    /**
+     * Gives linkage information.
+     *
+     * @since S60 v5.0
+     * @param aType Type of settings.
+     * @param aSettingsId Settings ID.
+     */
+    void LinkSettings( TInt aType, TUint32 aSettingsId );
+
+    /**
+     * Finalizes settings, i.e. sets Destination ID to SIP profile.
+     *
+     * @since S60 v5.0
+     * @return KErrNone if successful,
+     *         KErrCompletion if settings could not be finalized.
+     */
+    TInt FinalizeSettings();
+
+protected:
+
+// from base class MSIPProfileRegistryObserver
+
+    /** 
+     * From MSIPProfileRegistryObserver 
+     * SIP profile information event.
+     *
+     * @since S60 v5.0
+     * @param aSIPProfileId SIP profile ID.
+     * @param aEvent Type of SIP event
+     */
+    void ProfileRegistryEventOccurred( TUint32 /*aSIPProfileId*/, 
+        TEvent /*aEvent*/ );
+
+    /**
+     * From MSIPProfileRegistryObserver
+     * An asynchronous error has occurred related to SIP profile.
+     *
+     * @since S60 v5.0
+     * @param aSIPProfileId SIP profile ID.
+     * @param aError Error code.
+     */
+    void ProfileRegistryErrorOccurred( TUint32 /*aSIPProfileId*/,
+        TInt /*aError*/ );
+
+private:
+
+    /**
+     * Creates a provider name for SIP profile. aName is used
+     * and replaced with a parenthised ordered number if the name is
+     * already found in SIP stack. 
+     *
+     * @since S60 v5.0
+     * @param aName Provider name to be set.
+     */
+    void CreateProviderNameL( const TDesC8& aName );
+
+    /**
+     * Handles public User ID modification if needed.
+     * Possible modifications are escaping and adding sip: prefix.
+     *
+     * @since S60 v5.0
+     * @param aValue Value to be checked and modified if needed.
+     */
+    void ModifyPuidL( TDes8& aValue );
+
+    /**
+     * Validates transport type.
+     *
+     * @since S60 v5.0
+     * @param aValue Value to be validated.
+     * @return Validated transport type.
+     */
+    TTransportType ValidateTransport( const TDesC8& aValue );
+
+private:
+
+    CVoipXmlSipHandler();
+    void ConstructL();
+
+private:
+
+    /**
+     * SIP profile object.
+     * Own.
+     */
+    CSIPManagedProfile* iProfile;
+
+    /**
+     * SIP managed profile registry object.
+     * Own.
+     */
+    CSIPManagedProfileRegistry* iRegistry;
+
+    /**
+     * Profile type.
+     */
+    TSIPProfileTypeInfo iProfileType;
+
+    /**
+     * Proxy URI.
+     * Own.
+     */
+    HBufC8* iProxyUri;
+
+    /**
+     * Proxy transport type.
+     */
+    TTransportType iProxyTransport;
+
+    /**
+     * Proxy port number.
+     */
+    TInt iProxyPort;
+
+    /**
+     * Loose routing.
+     */
+    TBool iLr;
+
+    /**
+     * Registrar URI.
+     * Own.
+     */
+    HBufC8* iRegistrarUri;
+
+    /**
+     * Registrar transport type.
+     */
+    TTransportType iRegistrarTransport;
+
+    /**
+     * Registrar server port number.
+     */
+    TInt iRegistrarPort;
+
+    /**
+     * Tells if any settings have been set to temporary profile.
+     */
+    TBool iSettingsSet;
+
+    /**
+     * SIP profile ID.
+     */
+    TUint32 iProfileId;
+    };
+
+#endif // VOIPXMLSIPHANDLER_H
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlutils.h	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Utilities class for VoIP XML processor
+*
+*/
+
+
+#ifndef VOIPXMLUTILS_H
+#define VOIPXMLUTILS_H
+
+#include <e32base.h>
+
+/**
+ *  Cleanup item for deleting contents of RPointerArray.
+ *
+ *  @lib voipxmlprocessor.lib
+ *  @since S60 v5.0
+ */
+template <class T>
+class CleanupResetAndDestroy
+    {
+public:
+
+    /**
+     * Pushes aRef to cleanup stack using TCleanupItem (and ResetAndDestroy). 
+     *
+     * @since S60 v5.0
+     * @param aRef Reference to object to be pushed to cleanup stack.
+     */
+    inline static void PushL( T& aRef );
+
+private:
+
+    /**
+     * Method for TCleanupItem used in PushL.
+     * 
+     * @since S60 v5.0
+     * @param aPtr Pointer to be cleaned up.
+     */
+    inline static void ResetAndDestroy( TAny *aPtr );
+    };
+
+template <class T>
+inline void CleanupResetAndDestroyL( T& aRef );
+
+
+/**
+ *  Utilities class for VoIP XML processor.
+ *  Provides common methods for VoIP XML processor classes.
+ *
+ *  @lib voipxmlprocessor.lib
+ *  @since S60 v5.0
+ */
+class VoipXmlUtils
+    {
+#ifdef _DEBUG
+    friend class UT_VoipXmlUtils; 
+#endif
+
+public:
+
+    /**
+     * Converts a descriptor to integer.
+     *
+     * @since S60 v5.0
+     * @param aDesValue Descriptor value.
+     * @param aIntValue Interger value (this will hold the converted value).
+     * @return Error code.
+     */
+    static TInt DesToInt( const TDesC& aDesValue, TInt& aIntValue );
+
+    /**
+     * Converts an 8 bit descriptor to integer.
+     *
+     * @since S60 v5.0
+     * @param aDesValue Descriptor value.
+     * @param aIntValue Interger value (this will hold the converted value).
+     * @return Error code.
+     */
+    static TInt Des8ToInt( const TDesC8& aDesValue, TInt& aIntValue );
+    };
+
+#include "voipxmlutils.inl"
+
+#endif // VOIPXMLUTILS_H
+
+// End of file.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlutils.inl	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Utilities methods for VoIP XML processor
+*
+*/
+
+
+#include "voipxmlutils.h"
+
+// ---------------------------------------------------------------------------
+// Pushes an item to CleanupStack.
+// ---------------------------------------------------------------------------
+//
+template <class T>
+inline void CleanupResetAndDestroy<T>::PushL( T& aRef )
+    {
+    CleanupStack::PushL( TCleanupItem( &ResetAndDestroy, &aRef ) );
+    }
+
+// ---------------------------------------------------------------------------
+// Cleans up an item.
+// ---------------------------------------------------------------------------
+//
+template <class T>
+inline void CleanupResetAndDestroy<T>::ResetAndDestroy( TAny *aPtr )
+    {
+    ( STATIC_CAST( T*, aPtr ) )->ResetAndDestroy();
+    ( STATIC_CAST( T*, aPtr ) )->Close();
+    }
+
+// ---------------------------------------------------------------------------
+// Calls CleanupResetAndDestroy<T>::PushL
+// ---------------------------------------------------------------------------
+//
+template <class T>
+inline void CleanupResetAndDestroyL( T& aRef )
+    {
+    CleanupResetAndDestroy<T>::PushL( aRef );
+    }
+
+// End of file.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlvoiphandler.h	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,385 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  VoIP handler for VoIP XML processor
+*
+*/
+
+
+#ifndef VOIPXMLVOIPHANDLER_H
+#define VOIPXMLVOIPHANDLER_H
+
+#include <e32base.h>
+#include <sipprofileregistryobserver.h>
+#include <crcseprofileentry.h>
+#include <crcseaudiocodecentry.h>
+
+class CSPSettings;
+class CRCSEProfileRegistry;
+class CRCSEAudioCodecRegistry;
+class CRCSEProfileEntry;
+class CSPProperty;
+
+typedef CRCSEAudioCodecEntry::TOnOff TCodecOnOff;
+typedef CRCSEProfileEntry::TOnOff TEntryOnOff;
+
+struct TTemporaryCodec
+    {
+    /**
+     * Codec name.
+     */
+    HBufC* iName;
+    /**
+     * Jitter buffer size.
+     */
+    TInt iJitterBuffer;
+    /**
+     * Octet-align.
+     */
+    TCodecOnOff iOctetAlign;
+    /**
+     * PTime value.
+     */
+    TInt iPtime;
+    /**
+     * MaxPtime value.
+     */
+    TInt iMaxPtime;
+    /**
+     * Mode-set values.
+     */
+    RArray<TUint32> iModeSet;
+    /**
+     * Mode-change-period value.
+     */
+    TInt iModeChangePeriod;
+    /**
+     * Mode-change-neighbor value.
+     */
+    TCodecOnOff iModeChangeNeighbor;
+    /**
+     * Max-red value.
+     */
+    TInt iMaxRed;
+    /**
+     * VAD value.
+     */
+    TCodecOnOff iVad;
+    /**
+     * Annexb value.
+     */
+    TCodecOnOff iAnnexb;
+    };
+
+struct TSpSettings
+    {
+    /**
+     * Tells if buddy requests are automatically accepted.
+     */
+    TBool iAutoAcceptBuddies;
+    /**
+     * Provider bookmark URL.
+     */
+    HBufC* iProviderUrl;
+    /**
+     * Branding URI.
+     */
+    HBufC* iBrandingUri;
+    /**
+     * Tells if the service will be automatically enabled.
+     */
+    TBool iAutoEnable;
+    /**
+     * Message Waiting Indicator URI for voice mailbox.
+     */
+    HBufC* iMwiUri;
+    /**
+     * Listening URI for voice mailbox.
+     */
+    HBufC* iListeningUri;
+    /**
+     * Re-subscribe interval for voice mailbox.
+     */
+    TInt iResubrcribe;
+    /**
+     * Tells if SIP IM is enabled. IM will be set as enabled only if 
+     * a presence ID is received via LinkSettings() method.
+     */
+    TBool iEnableSipIm;
+    /**
+     * Brand ID.
+     */
+    HBufC* iBrandId;
+    };
+
+/**
+*  VoIP handler class.
+*  Handles VoIP related settings.
+*
+*  @lib voipxmlprocessor.lib
+*  @since S60 v5.0
+*/
+class CVoipXmlVoipHandler : public CBase, public MSIPProfileRegistryObserver
+    {
+#ifdef _DEBUG
+    friend class UT_CVoipXmlVoipHandler;
+    friend class UT_CVoipXmlParser;
+    friend class UT_CVoipXmlParamHandler;
+#endif
+
+public:
+
+    /**
+     * Two-phased constructor.
+     */
+    static CVoipXmlVoipHandler* NewL();
+
+    /**
+     * Destructor.
+     */
+    virtual ~CVoipXmlVoipHandler();
+
+    /**
+     * Sets VoIP setting.
+     *
+     * @since S60 v5.0
+     * @param aType Type of setting (VoIP 'core', vmbx or codec)
+     * @param aParam Parameter to be set.
+     * @param aValue Value of the setting.
+     */
+    void SetSetting( TInt aType, TInt aParam, const TDesC& aValue );
+
+    /**
+     * Stores settings to RCSE.
+     *
+     * @since S60 v5.0
+     * @return KErrNone if successful,
+     *         KErrNotSupported if no settings to be stored,
+     *         KErrCompletion if settings could not be stored.
+     */
+    TInt StoreSettings();
+
+    /**
+     * Returns the service ID.
+     *
+     * @since S60 v5.0
+     * @return VoIP service ID.
+     */
+    TUint32 SettingsId();
+
+    /**
+     * Method to inform the handler that currently deployed settings
+     * have ended. This way we will know when a codec is ready to be
+     * put to RCSE.
+     *
+     * @since S60 v5.0
+     * @param aType Type of settings.
+     */
+    void SettingsEnd( TInt aType );
+
+    /**
+     * Gives linkage information.
+     *
+     * @since S60 v5.0
+     * @param aType Type of settings.
+     * @param aSettingsId Settings ID.
+     */
+    void LinkSettings( TInt aType, TUint32 aSettingsId );
+
+    /**
+     * Finalizes settings, i.e. sets all the settings that are bound to
+     * settings linkage (e.g. SIP User-Agent header and 
+     * settings stored in SPSettings).
+     *
+     * @since S60 v5.0
+     * @return KErrNone if successful,
+     *         KErrCompletion if settings could not be finalized.
+     */
+    TInt FinalizeSettings();
+
+    /**
+     * Returns the service tab ID.
+     *
+     * @since S60 v5.0
+     * @return Service tab ID.
+     */
+    TUint32 ServiceTabIdL();
+
+protected:
+
+// from base class MSIPProfileRegistryObserver
+
+    /** 
+     * From MSIPProfileRegistryObserver 
+     * SIP profile information event.
+     *
+     * @since S60 v5.0
+     * @param aSIPProfileId SIP profile ID.
+     * @param aEvent Type of SIP event
+     */
+    void ProfileRegistryEventOccurred( TUint32 /*aSIPProfileId*/, 
+        TEvent /*aEvent*/ );
+
+    /**
+     * From MSIPProfileRegistryObserver
+     * An asynchronous error has occurred related to SIP profile.
+     *
+     * @since S60 v5.0
+     * @param aSIPProfileId SIP profile ID.
+     * @param aError Error code.
+     */
+    void ProfileRegistryErrorOccurred( TUint32 /*aSIPProfileId*/,
+        TInt /*aError*/ );
+
+private:
+
+    /**
+     * Sets VoIP core setting to temporary storage.
+     *
+     * @param aParam Parameter to be set.
+     * @param aValue Value of the setting.
+     * @since S60 v5.0
+     */
+    void SetCoreSettingL( TInt aParam, const TDesC& aValue );
+
+    /**
+     * Sets codec setting to temporary storage.
+     *
+     * @param aParam Parameter to be set.
+     * @param aValue Value of the setting.
+     * @since S60 v5.0
+     */
+    void SetCodecSettingL( TInt aParam, const TDesC& aValue );
+
+    /**
+     * Sets voice mailbox setting to temporary storage.
+     *
+     * @param aParam Parameter to be set.
+     * @param aValue Value of the setting.
+     * @since S60 v5.0
+     */
+    void SetVmbxSettingL( TInt aParam, const TDesC& aValue );
+
+    /**
+     * Validates profile name and modifies it if necessary.
+     *
+     * @since S60 v5.0
+     * @param aName Name to be validated.
+     */
+    void ValidateProfileNameL( TDes& aName );
+
+    /**
+     * Sets temporary codec to RCSE.
+     *
+     * @since S60 v5.0
+     */
+    void SetCodecToRcseL();
+
+    /**
+     * Reset temporary codec settings (iCurrentCodec)
+     *
+     * @since S60 v5.0
+     */
+    void ResetTempCodec( TBool aCloseArray = EFalse );
+
+    /**
+     * Resets temporary service provider settings (iSpSettings)
+     * 
+     * @since S60 v5.0
+     */
+    void ResetTempSpSettings();
+
+    /**
+     * Sets SIP related VoIP settings (links VoIP profile to SIP and sets
+     * SIP User-Agent header).
+     * 
+     * @since S60 v5.0
+     * @param aSipId SIP settings ID.
+     */
+    void SetSipInfoL( TUint32 aSipId );
+
+    /**
+     * Sets SPSettings to service table.
+     *
+     * @since S60 v5.0
+     */
+    void SetSpSettingsL();
+
+    /**
+     * Adds default codec set to iEntry.
+     *
+     * @since S60 v5.0
+     */
+    void AddDefaultCodecsL();
+
+private:
+
+    CVoipXmlVoipHandler();
+    void ConstructL();
+
+private:
+
+    /**
+     * RCSE profile registry.
+     * Own.
+     */
+    CRCSEProfileRegistry* iRegistry;
+
+    /**
+     * RCSE audio codec registry
+     * Own.
+     */
+    CRCSEAudioCodecRegistry* iCodecRegistry;
+
+    /**
+     * RCSE profile entry.
+     * Own.
+     */
+    CRCSEProfileEntry* iEntry;
+
+    /**
+     * Tells if any settings have been set to temporary profile.
+     */
+    TBool iSettingsSet;
+
+    /**
+     * VoIP service ID.
+     */
+    TUint32 iServiceId;
+
+    /**
+     * Current codec that is being modified.
+     */
+    TTemporaryCodec iCurrentCodec;
+
+    /**
+     * SPSettings that are temporarily stored and .
+     */
+    TSpSettings iSpSettings;
+
+    /**
+     * Presence settings ID. This is received in LinkSettings method and
+     * will be stored to SPSettings in FinalizeSettings method.
+     */
+    TUint32 iPresenceId;
+
+    /**
+     * Destination (SNAP) ID. This is received in LinkSettings method and
+     * will be stored to SPSettings in FinalizedSettings method.
+     */
+    TUint32 iDestinationId;
+    };
+
+#endif // VOIPXMLVOIPHANDLER_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/inc/voipxmlxdmhandler.h	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  XDM handler for VoIP XML processor
+*
+*/
+
+
+#ifndef  VOIPXMLXDMHANDLER_H
+#define  VOIPXMLXDMHANDLER_H
+
+
+class CXdmSettingsCollection;
+
+/**
+*  VoipXmlXdmHandler
+*  XDM handler class.
+* 
+*  @lib voipxmlprocessor.lib
+*  @since S60 v5.0
+*/
+class CVoipXmlXdmHandler : public CBase
+    {
+#ifdef _DEBUG
+    friend class UT_CVoipXmlXdmHandler;
+    friend class UT_CVoipXmlParamHandler;
+#endif
+
+public:
+
+    static CVoipXmlXdmHandler* NewL();
+    ~CVoipXmlXdmHandler();
+
+public:
+
+    /**
+     * Sets XDM setting.
+     *
+     * @since S60 v5.0
+     * @param aParam Parameter to be set.
+     * @param aValue Value of the setting.
+     */
+    void SetSetting( TInt aParam, const TDesC& aValue );
+
+    /**
+     * Stores settings to 'XDM registry', i.e. creates an XDM collection.
+     *
+     * @since S60 v5.0
+     * @return KErrNone if successful,
+     *         KErrNotSupported if no settings to be stored,
+     *         KErrCompletion if settings could not be stored.
+     */
+    TInt StoreSettings();
+
+    /**
+     * Returns the settings ID.
+     *
+     * @since S60 v5.0
+     * @return XDM settings ID.
+     */
+    TUint32 SettingsId();
+
+private:
+
+    /**
+     * Sets XDM setting.
+     *
+     * @since S60 v5.0
+     * @param aParam Parameter to be set.
+     * @param aValue Value of the setting.
+     */
+    void SetSettingL( TInt aParam, const TDesC& aValue );
+
+    /**
+     * Creates a provider name for XDM profile. aName is used
+     * and replaced with a parenthised ordered number if the name is
+     * already found in XDM storage.
+     *
+     * @since S60 v5.0
+     * @param aName Provider name to be set.
+     */
+    void CreateProviderNameL( TDes& aName );
+
+private:
+
+    CVoipXmlXdmHandler();
+    void ConstructL();
+
+private:
+
+    /**
+     * XDM settings collection object.
+     * Own.
+     */
+    CXdmSettingsCollection* iProfile;
+
+    /**
+     * Tells if any settings have been set to temporary profile.
+     */
+    TBool iSettingsSet;
+
+    /**
+     * XDM collection ID.
+     */
+    TUint32 iProfileId;
+    };
+
+#endif // VOIPXMLXDMHANDLER_H
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/rd-key.pem	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,15 @@
+-----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-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/rd.cer	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,17 @@
+-----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-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/rom/provisioningapi.iby	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  provisioningapi iby file
+*
+*/
+
+#ifndef PROVISIONINGAPI_IBY
+#define PROVISIONINGAPI_IBY
+
+#include <data_caging_paths_for_iby.hrh>
+
+#ifdef __VOIP
+    file=ABI_DIR\BUILD_DIR\provisioningapi.dll SHARED_LIB_DIR\provisioningapi.dll
+#endif // __VOIP
+
+#endif // PROVISIONINGAPI_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmliaphandler.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,587 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  IAP handler for VoIP XML processor
+*
+*/
+
+
+#include <e32cmn.h>
+#include <coecntrl.h>
+#include <cmmanagerext.h>
+#include <cmdestinationext.h>
+#include <cmconnectionmethodext.h>
+#include <cmconnectionmethoddef.h>
+#include <cmpluginwlandef.h>
+#include <WPASecuritySettingsUI.h>
+#include <WEPSecuritySettingsUI.h>
+
+#include "voipxmlutils.h"
+#include "voipxmliaphandler.h"
+#include "voipxmlprocessorlogger.h"
+
+// ---------------------------------------------------------------------------
+// CVoipXmlIapHandler::CVoipXmlIapHandler
+// ---------------------------------------------------------------------------
+//
+CVoipXmlIapHandler::CVoipXmlIapHandler()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlIapHandler::NewL
+// ---------------------------------------------------------------------------
+//
+CVoipXmlIapHandler* CVoipXmlIapHandler::NewL()
+    {
+    CVoipXmlIapHandler* self = new ( ELeave ) CVoipXmlIapHandler;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlIapHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlIapHandler::ConstructL()
+    {
+    iDestinationName          = HBufC::NewL( 0 );
+    iDestinationId            = 0;
+    iCurrentIap.iSsid         = NULL;
+    iCurrentIap.iName         = NULL;
+    iCurrentIap.iPreSharedKey = NULL;
+    iCurrentIap.iSecurityType = CMManager::EWlanSecModeOpen;
+    iCurrentIap.iNetworkMode  = CMManager::EInfra;
+    iCurrentIap.iWepAuthMode  = CWEPSecuritySettings::EAuthOpen;
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlIapHandler::~CVoipXmlIapHandler
+// ---------------------------------------------------------------------------
+//
+CVoipXmlIapHandler::~CVoipXmlIapHandler()
+    {
+    if ( iDestinationName )
+        {
+        delete iDestinationName;
+        }
+    ResetCurrentIap( ETrue );
+    ResetTempIapArray( ETrue );
+    }
+
+// ---------------------------------------------------------------------------
+// Sets SIP setting.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlIapHandler::SetSetting( TInt aType, TInt aParam, 
+    const TDesC& aValue )
+    {
+    // Ignore too long descriptors.
+    if ( KMaxNodeValueLength < aValue.Length() )
+        {
+        return;
+        }
+    TInt intValue;
+
+    switch ( aParam )
+        {
+        case EName:
+            {
+            TInt err( KErrNotFound );
+            if ( EDestination == aType )
+                {
+                delete iDestinationName;
+                iDestinationName = NULL;
+                TRAP( err, iDestinationName = aValue.AllocL() );
+                }
+            else if ( EWlan == aType && !iCurrentIap.iName )
+                {
+                TRAP( err, iCurrentIap.iName = aValue.AllocL() );
+                }
+            if ( KErrNone == err )
+                {
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EType:
+            {
+            if ( EWlan != aType )
+                {
+                break;
+                }
+            TBuf<KMaxNodeValueLength> value;
+            value.Copy( aValue );
+            value.UpperCase();
+            if ( 0 == value.Compare( KSecurityTypeWep ) )
+                {
+                iCurrentIap.iSecurityType = CMManager::EWlanSecModeWep;
+                iSettingsSet = ETrue;
+                }
+            else if ( 0 == value.Compare( KSecurityTypeWpa ) )
+                {
+                iCurrentIap.iSecurityType = CMManager::EWlanSecModeWpa;
+                iSettingsSet = ETrue;
+                }
+            else if ( 0 == value.Compare( KSecurityTypeWpa2 ) )
+                {
+                iCurrentIap.iSecurityType = CMManager::EWlanSecModeWpa2;
+                iSettingsSet = ETrue;
+                }
+            else if ( 0 == value.Compare( KSecurityType8021x ) )
+                {
+                iCurrentIap.iSecurityType = CMManager::EWlanSecMode802_1x;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case ESsid:
+            {
+            if ( EWlan == aType && !iCurrentIap.iSsid )
+                {
+                TRAPD( err, iCurrentIap.iSsid = aValue.AllocL() );
+                if ( KErrNone == err )
+                    {
+                    iSettingsSet = ETrue;
+                    }
+                }
+            break;
+            }
+        case EHidden:
+            {
+            if ( EWlan == aType &&
+                KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iCurrentIap.iHidden = intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case ENetworkMode:
+            {
+            if ( EWlan != aType )
+                {
+                break;
+                }
+            TBuf<KMaxNodeValueLength> value;
+            value.Copy( aValue );
+            value.LowerCase();
+            if ( 0 == value.Compare( KNetworkModeInfra ) )
+                {
+                iCurrentIap.iNetworkMode = CMManager::EInfra;
+                iSettingsSet = ETrue;
+                }
+            else if ( 0 == value.Compare( KNetworkModeAdhoc ) )
+                {
+                iCurrentIap.iNetworkMode = CMManager::EAdhoc;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EPreSharedKey:
+            {
+            if ( EWlan == aType && !iCurrentIap.iPreSharedKey )
+                {
+                TRAPD( err, iCurrentIap.iPreSharedKey = aValue.AllocL() );
+                if ( KErrNone == err )
+                    {
+                    iSettingsSet = ETrue;
+                    }
+                }
+            break;
+            }
+        case EWepAuthMode:
+            {
+            if ( EWlan != aType )
+                {
+                break;
+                }
+            TBuf<KMaxNodeValueLength> value;
+            value.Copy( aValue );
+            value.LowerCase();
+            if ( 0 == value.Compare( KWepAuthModeOpen ) )
+                {
+                iCurrentIap.iWepAuthMode = CWEPSecuritySettings::EAuthOpen;
+                iSettingsSet = ETrue;
+                }
+            else if ( 0 == value.Compare( KWepAuthModeShared ) )
+                {
+                iCurrentIap.iWepAuthMode = CWEPSecuritySettings::EAuthShared;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case ELength:
+            {
+            if ( EWepKey == aType && 
+                KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ))
+                {
+                iCurrentIap.iCurrentWepKey.iLength = intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EData:
+            {
+            if ( EWepKey == aType && KMaxWepKeyDataLength >= aValue.Length() )
+                {
+                iCurrentIap.iCurrentWepKey.iData.Copy( aValue );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Stores settings.
+// ---------------------------------------------------------------------------
+//
+TInt CVoipXmlIapHandler::StoreSettings()
+    {
+    if ( !iSettingsSet )
+        {
+        // No settings to be stored => method not supported.
+        return KErrNotSupported;
+        }
+    TRAPD( err, StoreSettingsL() );
+    if ( KErrNone != err )
+        {
+        err = KErrCompletion;
+        }
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns Destination ID.
+// ---------------------------------------------------------------------------
+//
+TUint32 CVoipXmlIapHandler::SettingsId()
+    {
+    return iDestinationId;
+    }
+
+// ---------------------------------------------------------------------------
+// Informs that currently deployed settings have ended.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlIapHandler::SettingsEnd( TInt aType )
+    {
+    if ( EWepKey == aType && iCurrentIap.iWepKeys.Count() < KMaxWepKeyCount )
+        {
+        TInt keyDataLength = iCurrentIap.iCurrentWepKey.iData.Length();
+        TBool okToAdd( EFalse );
+        switch ( keyDataLength )
+            {
+            case EWepKey64Hex:
+                {
+                iCurrentIap.iCurrentWepKey.iHex = ETrue;
+                okToAdd = ETrue;
+                break;
+                }
+            case EWepKey64Ascii:
+                {
+                iCurrentIap.iCurrentWepKey.iHex = EFalse;
+                okToAdd = ETrue;
+                break;
+                }
+            case EWepKey128Hex:
+                {
+                iCurrentIap.iCurrentWepKey.iHex = ETrue;
+                okToAdd = ETrue;
+                break;
+                }
+            case EWepKey128Ascii:
+                {
+                iCurrentIap.iCurrentWepKey.iHex = EFalse;
+                okToAdd = ETrue;
+                break;
+                }
+            default:
+                break;
+            }
+        if ( okToAdd )
+            {
+            iCurrentIap.iWepKeys.Append( iCurrentIap.iCurrentWepKey );
+            }
+        iCurrentIap.iCurrentWepKey.iLength = 0;
+        iCurrentIap.iCurrentWepKey.iData.Zero();
+        }
+    else if ( EWlan == aType )
+        {
+        TRAP_IGNORE( AddCurrentIapL() );
+        ResetCurrentIap();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Resets iCurrentIap members.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlIapHandler::ResetCurrentIap( TBool aCloseArray )
+    {
+    if ( iCurrentIap.iName )
+        {
+        delete iCurrentIap.iName;
+        iCurrentIap.iName = NULL;
+        }
+    if ( iCurrentIap.iPreSharedKey )
+        {
+        delete iCurrentIap.iPreSharedKey;
+        iCurrentIap.iPreSharedKey = NULL;
+        }
+    if ( iCurrentIap.iSsid )
+        {
+        delete iCurrentIap.iSsid;
+        iCurrentIap.iSsid = NULL;
+        }
+    iCurrentIap.iWepKeys.Reset();
+    if ( aCloseArray )
+        {
+        iCurrentIap.iWepKeys.Close();
+        }
+    iCurrentIap.iHidden = EFalse;
+    iCurrentIap.iSecurityType = CMManager::EWlanSecModeOpen;
+    iCurrentIap.iNetworkMode = CMManager::EInfra;
+    iCurrentIap.iWepAuthMode = CWEPSecuritySettings::EAuthOpen;
+    }
+
+// ---------------------------------------------------------------------------
+// Resets iIaps members.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlIapHandler::ResetTempIapArray( TBool aCloseArray )
+    {
+    const TInt count = iIaps.Count();
+    for ( TInt counter = 0; counter < count; counter++ )
+        {
+        if ( iIaps[counter]->iName )
+            {
+            delete iIaps[counter]->iName;
+            iIaps[counter]->iName = NULL;
+            }
+        if ( iIaps[counter]->iPreSharedKey )
+            {
+            delete iIaps[counter]->iPreSharedKey;
+            iIaps[counter]->iPreSharedKey = NULL;
+            }
+        if ( iIaps[counter]->iSsid )
+            {
+            delete iIaps[counter]->iSsid;
+            iIaps[counter]->iSsid = NULL;
+            }
+        iIaps[counter]->iWepKeys.Reset();
+        if ( aCloseArray )
+            {
+            iIaps[counter]->iWepKeys.Close();
+            }
+        }
+    iIaps.ResetAndDestroy();
+    if ( aCloseArray )
+        {
+        iIaps.Close();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Adds iCurrentIap into iIaps array, i.e. copies its values to a pointer
+// and appends that one into the array.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlIapHandler::AddCurrentIapL()
+    {
+    if ( !iCurrentIap.iSsid )
+        {
+        // If there is no SSID, we won't add the IAP to array.
+        return;
+        }
+    TTemporaryIap* iap = new TTemporaryIap;
+    iap->iSsid = HBufC::NewLC( KMaxNodeValueLength ); // CS:1
+    iap->iName = HBufC::NewLC( KMaxNodeValueLength ); // CS:2
+    iap->iPreSharedKey = HBufC::NewLC( KMaxNodeValueLength ); // CS:3
+
+    iap->iSsid->Des().Copy( iCurrentIap.iSsid->Des() );
+    if ( iCurrentIap.iName )
+        {
+        iap->iName->Des().Copy( iCurrentIap.iName->Des() );
+        }
+    else
+        {
+        iap->iName->Des().Copy( iCurrentIap.iSsid->Des() );
+        }
+    if ( iCurrentIap.iPreSharedKey )
+        {
+        iap->iPreSharedKey->Des().Copy( iCurrentIap.iPreSharedKey->Des() );
+        }
+    iap->iHidden = iCurrentIap.iHidden;
+    iap->iNetworkMode = iCurrentIap.iNetworkMode;
+    iap->iSecurityType = iCurrentIap.iSecurityType;
+    iap->iWepAuthMode = iCurrentIap.iWepAuthMode;
+    const TInt count = iCurrentIap.iWepKeys.Count();
+    for ( TInt counter = 0; counter < count; counter++ )
+        {
+        iap->iWepKeys.Append( iCurrentIap.iWepKeys[counter] );
+        }
+    iIaps.AppendL( iap );
+    CleanupStack::Pop( 3, iap->iSsid );
+    }
+
+// ---------------------------------------------------------------------------
+// Stores settings.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlIapHandler::StoreSettingsL()
+    {
+    RCmManagerExt cmm;
+    cmm.OpenLC(); // CS:1
+
+    // First create all access points and store their ID's.
+    const TInt iapCount = iIaps.Count();
+    RArray<TUint32> iapIds;
+    CleanupClosePushL( iapIds ); // CS:2
+    for ( TInt counter = 0; counter < iapCount; counter++ )
+        {
+        TUint32 id = CreateIapL( cmm, *iIaps[counter] );
+        iapIds.AppendL( id );
+        }
+
+    // Create a destination if one was configured.
+    if ( iDestinationName->Des().Length() )
+        {
+        RArray<TUint32> destinationIds;
+        // Get destination ID's for checking if name to be set is reserved.
+        CleanupClosePushL( destinationIds ); // CS:3
+        cmm.AllDestinationsL( destinationIds );
+        HBufC* newName = HBufC::NewLC( KMaxNodeNameLength ); // CS:4
+        newName->Des().Copy( iDestinationName->Des() );
+
+        // Check that name is unique.
+        const TInt destinationCount = destinationIds.Count();
+        for ( TInt counter = 0; counter < destinationCount; counter++ )
+            {
+            RCmDestinationExt destination = cmm.DestinationL( 
+                destinationIds[counter] );
+            CleanupClosePushL( destination ); // CS:5
+            HBufC* settingsName = destination.NameLC(); // CS:6
+            TUint i( 1 ); // Add number to the name if name already in use.
+            if ( 0 == newName->Des().Compare( settingsName->Des() ) )
+                {
+                // If the name is changed we need to begin the comparison
+                // again from the first profile.
+                newName->Des().Copy( iDestinationName->Des() );
+                newName->Des().Append( KOpenParenthesis() );
+                newName->Des().AppendNum( i );
+                newName->Des().Append( KClosedParenthesis() );  
+                counter = 0;
+                i++;
+                if ( KMaxProfileNames < i )
+                    {
+                    User::Leave( KErrBadName );
+                    }
+                }
+            // settingsName, &destination
+            CleanupStack::PopAndDestroy( 2, &destination ); // CS:4
+            }
+        RCmDestinationExt newDestination = cmm.CreateDestinationL( *newName );
+        CleanupClosePushL( newDestination ); // CS:5
+        // We need to run UpdateL in order to get destination ID.
+        newDestination.UpdateL();
+        iDestinationId = newDestination.Id();
+        const TInt cmCount = iapIds.Count();
+        for ( TInt counter = 0; counter < cmCount; counter++ )
+            {
+            RCmConnectionMethodExt connection = cmm.ConnectionMethodL( 
+                iapIds[counter] );
+            CleanupClosePushL( connection );
+            newDestination.AddConnectionMethodL( connection );
+            CleanupStack::PopAndDestroy( &connection );
+            }
+        newDestination.UpdateL();
+
+        // &newDestination, newName, &destinationIds
+        CleanupStack::PopAndDestroy( 3, &destinationIds ); // CS:2
+        }
+    // &iapIds, &cmm
+    CleanupStack::PopAndDestroy( 2, &cmm ); // CS:0
+    }
+
+// ---------------------------------------------------------------------------
+// Creates an actual IAP.
+// ---------------------------------------------------------------------------
+//
+TUint32 CVoipXmlIapHandler::CreateIapL( RCmManagerExt& aCmManager, 
+    TTemporaryIap aTempIap )
+    {
+    RCmConnectionMethodExt newConnMethod = 
+        aCmManager.CreateConnectionMethodL( KUidWlanBearerType );
+    CleanupClosePushL( newConnMethod ); // CS:1
+    newConnMethod.SetStringAttributeL( CMManager::ECmName, 
+        aTempIap.iName->Des() );
+    newConnMethod.SetStringAttributeL( CMManager::EWlanSSID, 
+        aTempIap.iSsid->Des() );
+    newConnMethod.SetIntAttributeL( CMManager::EWlanConnectionMode, 
+        aTempIap.iNetworkMode );
+    if ( aTempIap.iHidden )
+        {
+        newConnMethod.SetBoolAttributeL( CMManager::EWlanScanSSID, ETrue );
+        }
+    newConnMethod.SetIntAttributeL( CMManager::EWlanSecurityMode, 
+        aTempIap.iSecurityType );
+    newConnMethod.UpdateL();
+    TUint32 wlanId = newConnMethod.GetIntAttributeL( 
+        CMManager::EWlanServiceId );
+    TUint32 iapId = newConnMethod.GetIntAttributeL( CMManager::ECmIapId );
+
+    CleanupStack::PopAndDestroy( &newConnMethod ); // CS:0
+
+    if ( aTempIap.iSecurityType == CMManager::EWlanSecModeWep )
+        {
+        CMDBSession* db = CMDBSession::NewLC( CMDBSession::LatestVersion() );
+        // CS:1
+        CWEPSecuritySettings* wepSecSettings = 
+            CWEPSecuritySettings::NewL();
+        CleanupStack::PushL( wepSecSettings ); // CS:2
+        const TInt wepKeyCount = aTempIap.iWepKeys.Count();
+        for ( TInt counter = 0; counter < wepKeyCount; counter++ )
+            {
+            User::LeaveIfError( wepSecSettings->SetKeyDataL( 
+                counter, aTempIap.iWepKeys[counter].iData, 
+                aTempIap.iWepKeys[counter].iHex ) );
+            }
+        wepSecSettings->SaveL( wlanId, *db );             
+        // wepSecSettings, db 
+        CleanupStack::PopAndDestroy( 2, db ); // CS:0
+        }
+    else if ( aTempIap.iSecurityType == CMManager::EWlanSecMode802_1x ||
+        aTempIap.iSecurityType == CMManager::EWlanSecModeWpa ||
+        aTempIap.iSecurityType == CMManager::EWlanSecModeWpa2 )
+        {
+        CMDBSession* db = CMDBSession::NewLC( CMDBSession::LatestVersion() );
+        // CS:1
+        CWPASecuritySettings* wpaSecSettings = 
+            CWPASecuritySettings::NewL( ESecurityModeWpa );
+        CleanupStack::PushL( wpaSecSettings ); // CS:2
+        User::LeaveIfError( wpaSecSettings->SetWPAPreSharedKey( 
+            aTempIap.iPreSharedKey->Des() ));
+        wpaSecSettings->SaveL( wlanId, *db, ESavingBrandNewAP, 0 );
+        // wpaSecSettings, db
+        CleanupStack::PopAndDestroy( 2, db ); // CS:0
+        }
+    return iapId;
+    }
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlnatfwhandler.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,436 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  NAT/Firewall handler for VoIP XML processor
+*
+*/
+
+
+#include <centralrepository.h>
+#include <unsafprotocolsinternalcrkeys.h>
+
+#include "voipxmlutils.h"
+#include "voipxmlnatfwhandler.h"
+#include "voipxmlprocessorlogger.h"
+//#include "voipxmlprocessordefaults.h"
+
+// ---------------------------------------------------------------------------
+// CVoipXmlNatFwHandler::CVoipXmlNatFwHandler
+// ---------------------------------------------------------------------------
+//
+CVoipXmlNatFwHandler::CVoipXmlNatFwHandler()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlNatFwHandler::NewL
+// ---------------------------------------------------------------------------
+//
+CVoipXmlNatFwHandler* CVoipXmlNatFwHandler::NewL()
+    {
+    CVoipXmlNatFwHandler* self = new ( ELeave ) CVoipXmlNatFwHandler;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlNatFwHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlNatFwHandler::ConstructL()
+    {
+    iDomain             = HBufC8::NewL( KMaxNodeValueLength );
+    iStunSrvAddr        = HBufC8::NewL( KMaxNodeValueLength );
+    iStunSrvUsername    = HBufC8::NewL( KMaxNodeValueLength );
+    iStunSrvPassword    = HBufC8::NewL( KMaxNodeValueLength );
+    iNatProtocol        = HBufC8::NewL( KMaxNodeValueLength );
+    iNatProtocol->Des().Copy( KDefaultNatProtocol );
+    iStunSrvPort        = KDefaultStunServerPort;
+    iTcpRefreshInterval = KDefaultTcpRefreshInterval;
+    iUdpRefreshInterval = KDefaultUdpRefreshInterval;
+    iStartPortRange     = KDefaultStartPortRange;
+    iEndPortRange       = KDefaultEndPortRange;
+    iCurrentAdditionalStunServer.iStunSrvPort = KDefaultStunServerPort;
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlNatFwHandler::~CVoipXmlNatFwHandler
+// ---------------------------------------------------------------------------
+//
+CVoipXmlNatFwHandler::~CVoipXmlNatFwHandler()
+    {
+    delete iDomain;
+    delete iStunSrvAddr;
+    delete iStunSrvUsername;
+    delete iStunSrvPassword;
+    delete iNatProtocol;
+    iAdditionalStunServers.ResetAndDestroy();
+    iAdditionalStunServers.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// Sets a NAT/Firewall setting.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlNatFwHandler::SetSetting( TInt aType, TInt aParam,
+    const TDesC8& aValue )
+    {
+    // Ignore too long descriptors.
+    if ( KMaxNodeValueLength < aValue.Length() )
+        {
+        return;
+        }
+
+    TInt intVal( KErrNotFound );
+    switch ( aParam )
+        {
+        case EDomain:
+            {
+            iDomain->Des().Copy( aValue );
+            iSettingsSet = ETrue;
+            break;
+            }
+        case EUri:
+            {
+            if ( ENatFw == aType )
+                {
+                iStunSrvAddr->Des().Copy( aValue );
+                iSettingsSet = ETrue;
+                }
+            else if ( EAdditionalStun == aType )
+                {
+                iCurrentAdditionalStunServer.iStunSrvAddr.Copy( aValue );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EPort:
+            {
+            if ( ENatFw == aType && KErrNone == VoipXmlUtils::Des8ToInt( 
+                aValue, intVal ) )
+                {
+                iStunSrvPort = intVal;
+                iSettingsSet = ETrue;
+                }
+            else if ( EAdditionalStun == aType && 
+                KErrNone == VoipXmlUtils::Des8ToInt( aValue, intVal ) )
+                {
+                iCurrentAdditionalStunServer.iStunSrvPort = intVal;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case ETcpRefreshInterval:
+            {
+            if ( KErrNone == VoipXmlUtils::Des8ToInt( aValue, intVal ) )
+                {
+                iTcpRefreshInterval = intVal;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EUdpRefreshInterval:
+            {
+            if ( KErrNone == VoipXmlUtils::Des8ToInt( aValue, intVal ) )
+                {
+                iUdpRefreshInterval = intVal;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case ECrlfRefresh:
+            {
+            if ( KErrNone == VoipXmlUtils::Des8ToInt( aValue, intVal ) )
+                {
+                iCrlfRefresh = intVal;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EUsername:
+            {
+            if ( ENatFw == aType )
+                {
+                iStunSrvUsername->Des().Copy( aValue );
+                iSettingsSet = ETrue;
+                }
+            else if ( EAdditionalStun == aType )
+                {
+                iCurrentAdditionalStunServer.iStunSrvUsername.Copy( aValue );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EPassword:
+            {
+            if ( ENatFw == aType )
+                {
+                iStunSrvPassword->Des().Copy( aValue );
+                iSettingsSet = ETrue;
+                }
+            else if ( EAdditionalStun == aType )
+                {
+                iCurrentAdditionalStunServer.iStunSrvPassword.Copy( aValue );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EStunSharedSecret:
+            {
+            if ( KErrNone == VoipXmlUtils::Des8ToInt( aValue, intVal ) )
+                {
+                iStunSharedSecret = intVal;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EStartPort:
+            {
+            if ( KErrNone == VoipXmlUtils::Des8ToInt( aValue, intVal ) )
+                {
+                iStartPortRange = intVal;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EEndPort:
+            {
+            if ( KErrNone == VoipXmlUtils::Des8ToInt( aValue, intVal ) )
+                {
+                iEndPortRange = intVal;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EType:
+            {
+            iNatProtocol->Des().Copy( aValue );
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Stores settings to Central Repository.
+// ---------------------------------------------------------------------------
+//
+TInt CVoipXmlNatFwHandler::StoreSettings()
+    {
+    if ( !iSettingsSet )
+        {
+        // No settings to be stored => method not supported.
+        return KErrNotSupported;
+        }
+    TRAPD( err, StoreSettingsL() );
+    if ( KErrNone != err )
+        {
+        err = KErrCompletion;
+        }
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// Appends currently modified additional STUN server to internal array.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlNatFwHandler::SettingsEnd( TInt aType )
+    {
+    if ( EAdditionalStun == aType )
+        {
+        TAdditionalStun* temp = new TAdditionalStun;
+        temp->iStunSrvAddr.Copy( iCurrentAdditionalStunServer.iStunSrvAddr );
+        temp->iStunSrvPort = iCurrentAdditionalStunServer.iStunSrvPort;
+        temp->iStunSrvUsername.Copy( 
+            iCurrentAdditionalStunServer.iStunSrvUsername );
+        temp->iStunSrvPassword.Copy( 
+            iCurrentAdditionalStunServer.iStunSrvPassword );
+        iAdditionalStunServers.Append( temp );
+        iCurrentAdditionalStunServer.iStunSrvAddr.Copy( KNullDesC8 );
+        iCurrentAdditionalStunServer.iStunSrvPort = KDefaultStunServerPort;
+        iCurrentAdditionalStunServer.iStunSrvUsername.Copy( KNullDesC8 );
+        iCurrentAdditionalStunServer.iStunSrvPassword.Copy( KNullDesC8 );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Commits Central Repository storage.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlNatFwHandler::StoreSettingsL()
+    {
+    CRepository* rep = CRepository::NewLC( KCRUidUNSAFProtocols ); // CS:1
+
+    RArray<TUint32> keys;
+    CleanupClosePushL( keys ); // CS:2
+
+    // Get next free Domain key.
+    rep->FindL( KUNSAFProtocolsDomainMask, 
+        KUNSAFProtocolsFieldTypeMask, keys );
+    TInt keyCount = keys.Count();
+    TInt tmp = 0;
+    if ( !keyCount )
+        {
+        tmp = KUNSAFProtocolsDomainTableMask;
+        }
+    else
+        {
+        tmp = keys[keyCount - 1] + 1;
+        }
+
+    rep->FindEqL( KUNSAFProtocolsDomainMask, KUNSAFProtocolsFieldTypeMask,
+        iDomain->Des(), keys );
+    if ( keys.Count() )
+        {
+        tmp = keys[0];
+        }
+
+    TUint32 currentKey = tmp|KUNSAFProtocolsDomainMask;
+    currentKey &= KUNSAFProtocolsKeyMask;
+
+    TUint32 currentDomainKey = tmp|KUNSAFProtocolsFieldTypeMask;
+    currentDomainKey ^= KUNSAFProtocolsFieldTypeMask;
+
+    TUint32 stunKey = KUNSAFProtocolsSubTableFieldTypeMask;
+    stunKey ^= KUNSAFProtocolsSubTableFieldTypeMask;
+    stunKey |= currentDomainKey;
+
+    // Delete all existing additional STUN servers if there are any.
+    RArray<TUint32> stunKeys;
+    CleanupClosePushL( stunKeys ); // CS:3
+    TInt err = rep->FindL( 
+        currentDomainKey|KUNSAFProtocolsSTUNAddressMask, 
+        KUNSAFProtocolsSubTableFieldTypeMask, stunKeys );
+    const TInt stunKeyCount = stunKeys.Count();
+    for ( TInt counter = 0 ; counter < stunKeyCount; counter++ )
+        {
+        TUint32 key = KUNSAFProtocolsSTUNAddressMask^
+            stunKeys[counter];
+        rep->Delete( key|KUNSAFProtocolsSTUNAddressMask );
+        rep->Delete( key|KUNSAFProtocolsSTUNPortMask );
+        rep->Delete( key|KUNSAFProtocolsSTUNUsernameMask );
+        rep->Delete( key|KUNSAFProtocolsSTUNPasswordMask );
+        }
+    CleanupStack::PopAndDestroy( &stunKeys ); // CS:2
+
+    // Set new keys.
+
+    // Domain
+    User::LeaveIfError( rep->Set( currentKey|KUNSAFProtocolsDomainMask,
+        iDomain->Des() ));
+
+    // STUN server address.
+    User::LeaveIfError( rep->Set( 
+        KUNSAFProtocolsSTUNServerMask|currentDomainKey, 
+        iStunSrvAddr->Des() ) );
+    // Set the same value into STUN server table.
+    User::LeaveIfError( rep->Set( 
+        KUNSAFProtocolsSTUNAddressMask|stunKey,
+        iStunSrvAddr->Des() ) );
+
+    // STUN server port.
+    User::LeaveIfError( rep->Set( 
+        KUNSAFProtocolsSTUNServerPortMask|currentDomainKey, 
+        iStunSrvPort ) );
+    // Set the same value into STUN server table.
+    User::LeaveIfError( rep->Set( 
+        KUNSAFProtocolsSTUNPortMask|stunKey,
+        iStunSrvPort ) );
+
+    // TCP refresh interval.
+    User::LeaveIfError( rep->Set( 
+        KUNSAFProtocolsDomainIntervalTCPMask|currentDomainKey, 
+        iTcpRefreshInterval ) );
+
+    // UDP refresh interval.
+    User::LeaveIfError( rep->Set( 
+        KUNSAFProtocolsDomainIntervalUDPMask|currentDomainKey, 
+        iUdpRefreshInterval ) );
+
+    // CRLF refresh.
+    User::LeaveIfError( rep->Set( 
+        KUNSAFProtocolsDomainEnableCRLFRefresh|currentDomainKey,
+        iCrlfRefresh ) );
+
+    // STUN server username
+    User::LeaveIfError( rep->Set( 
+        KUNSAFProtocolsSTUNUsernameMask|stunKey, 
+        iStunSrvUsername->Des() ) );
+
+    // STUN server password
+    User::LeaveIfError( rep->Set( 
+        KUNSAFProtocolsSTUNPasswordMask|stunKey, 
+        iStunSrvPassword->Des() ) );
+
+    // STUN shared secret
+    User::LeaveIfError( rep->Set( currentDomainKey|
+        KUNSAFProtocolsDomainSharedSecretNotSupported,
+        !iStunSharedSecret ) );
+
+    // Start port range
+    User::LeaveIfError( rep->Set( 
+        currentDomainKey|KUNSAFProtocolsPortPoolStartPortMask,
+        iStartPortRange ) );
+
+    // End port range.
+    User::LeaveIfError( rep->Set( 
+        currentDomainKey|KUNSAFProtocolsPortPoolEndPortMask,
+        iEndPortRange ) );
+
+    // Used NAT protocol.
+    User::LeaveIfError( rep->Set(
+        currentDomainKey|KUNSAFProtocolsUsedNATProtocolMask,
+        iNatProtocol->Des() ) );
+
+    // ==============================
+    // Additional STUN servers
+    // ==============================
+    //
+    const TInt count = iAdditionalStunServers.Count();
+    for ( TInt counter = 0; counter < count; counter++ )
+        {
+        stunKey |= KUNSAFProtocolsSubTableFieldTypeMask;
+        stunKey++;
+        stunKey |= KUNSAFProtocolsSubTableFieldTypeMask;
+        stunKey ^= KUNSAFProtocolsSubTableFieldTypeMask;
+        stunKey |= currentDomainKey;
+
+        // STUNServerAddress
+        User::LeaveIfError( rep->Create( 
+            KUNSAFProtocolsSTUNAddressMask|stunKey,
+            iAdditionalStunServers[counter]->iStunSrvAddr ) );
+
+        // STUNServerPort
+        User::LeaveIfError( rep->Create( 
+            KUNSAFProtocolsSTUNPortMask|stunKey,
+            iAdditionalStunServers[counter]->iStunSrvPort ) );
+
+        // STUNServerUsername
+        User::LeaveIfError( rep->Create( 
+            KUNSAFProtocolsSTUNUsernameMask|stunKey,
+            iAdditionalStunServers[counter]->iStunSrvUsername ) );
+
+        // STUNServerPassword
+        User::LeaveIfError( rep->Create( 
+            KUNSAFProtocolsSTUNPasswordMask|stunKey,
+            iAdditionalStunServers[counter]->iStunSrvPassword ) );
+        }
+
+    // &keys, rep
+    CleanupStack::PopAndDestroy( 2, rep ); // CS:0
+    }
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlparamhandler.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,619 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  VoIP settings XML parameter handler.
+*
+*/
+
+
+#include "voipxmlparamhandler.h"
+#include "voipxmlsiphandler.h"
+#include "voipxmlvoiphandler.h"
+#include "voipxmlxdmhandler.h"
+#include "voipxmlpresencehandler.h"
+#include "voipxmlnatfwhandler.h"
+#include "voipxmliaphandler.h"
+#include "voipxmlprocessordefaults.h"
+
+// ---------------------------------------------------------------------------
+// Default constructor.
+// ---------------------------------------------------------------------------
+//
+CVoipXmlParamHandler::CVoipXmlParamHandler()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlParamHandler::ConstructL()
+    {
+    iSettingsType         = EUnknown;
+    iPreviousSettingsType = EUnknown;
+    iSipHandler      = CVoipXmlSipHandler::NewL();
+    iVoipHandler     = CVoipXmlVoipHandler::NewL();
+    iXdmHandler      = CVoipXmlXdmHandler::NewL();
+    iPresenceHandler = CVoipXmlPresenceHandler::NewL();
+    iNatFwHandler    = CVoipXmlNatFwHandler::NewL();
+    iIapHandler      = CVoipXmlIapHandler::NewL();
+    }
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+//
+CVoipXmlParamHandler* CVoipXmlParamHandler::NewL()
+    {
+    CVoipXmlParamHandler* self = CVoipXmlParamHandler::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// NewLC
+// ---------------------------------------------------------------------------
+//
+CVoipXmlParamHandler* CVoipXmlParamHandler::NewLC()
+    {
+    CVoipXmlParamHandler* self = new( ELeave ) CVoipXmlParamHandler;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CVoipXmlParamHandler::~CVoipXmlParamHandler()
+    {
+    delete iSipHandler;
+    delete iVoipHandler;
+    delete iXdmHandler;
+    delete iPresenceHandler;
+    delete iNatFwHandler;
+    delete iIapHandler;
+    }
+
+// ---------------------------------------------------------------------------
+// Marks the currently deployed settings.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlParamHandler::SettingsStart( const TDesC& aType )
+    {
+    TBuf<KMaxNodeNameLength> type( KNullDesC );
+    type.Copy( aType );
+    type.LowerCase();
+    iPreviousSettingsType = iSettingsType;
+    if ( KSettingsTypeVoip() == type )
+        {
+        iSettingsType = EVoip;
+        }
+    else if ( KSettingsTypeSip() == type )
+        {
+        iSettingsType = ESip;
+        }
+    else if ( KSettingsTypePresence() == type )
+        {
+        iSettingsType = EPresence;
+        }
+    else if ( KSettingsTypeXdm() == type )
+        {
+        iSettingsType = EXdm;
+        }
+    else if ( KSettingsTypeNatFw() == type )
+        {
+        iSettingsType = ENatFw;
+        }
+    else if ( KSettingsTypeCodec() == type )
+        {
+        iSettingsType = ECodec;
+        }
+    else if ( KSettingsTypeVmbx() == type )
+        {
+        iSettingsType = EVmbx;
+        }
+    else if ( KSettingsTypeProxy() == type )
+        {
+        iSettingsType = EProxy;
+        }
+    else if ( KSettingsTypeRegistrar() == type )
+        {
+        iSettingsType = ERegistrar;
+        }
+    else if ( KSettingsTypeAdditionalStun() == type )
+        {
+        iSettingsType = EAdditionalStun;
+        }
+    else if ( KSettingsTypeWlan() == type )
+        {
+        iSettingsType = EWlan;
+        }
+    else if ( KSettingsTypeWepKey() == type )
+        {
+        iSettingsType = EWepKey;
+        }
+    else if ( KSettingsTypeDestination() == type )
+        {
+        iSettingsType = EDestination;
+        }
+    else
+        {
+        iSettingsType = EUnknown;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Marks the currently deployed settings as 'ready', i.e. sets current
+// settings type to previous one and informs settings handlers.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlParamHandler::SettingsEnd()
+    {
+    iVoipHandler->SettingsEnd( iSettingsType );
+    iNatFwHandler->SettingsEnd( iSettingsType );
+    iIapHandler->SettingsEnd( iSettingsType );
+    iSettingsType = iPreviousSettingsType;
+    iPreviousSettingsType = EUnknown;
+    }
+
+// ---------------------------------------------------------------------------
+// Handles XML parameters, i.e. converts parameter names to enum and sets
+// the values to setting handlers.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlParamHandler::HandleParameter( const TDesC& aParam, 
+    const TDesC& aValue )
+    {
+    switch ( iSettingsType )
+        {
+        case EVoip:
+        case EVmbx:
+        case ECodec:
+            {
+            TInt param = ConvertParameter( aParam );
+            iVoipHandler->SetSetting( iSettingsType, param, aValue );
+            }
+            break;
+        case ESip:
+        case EProxy:
+        case ERegistrar:
+            {
+            TInt param = ConvertParameter( aParam );
+            TBuf8<KMaxNodeValueLength> value;
+            value.Copy( aValue );
+            iSipHandler->SetSetting( iSettingsType, param, value );
+            }
+            break;
+        case EPresence:
+            {
+            TInt param = ConvertParameter( aParam );
+            iPresenceHandler->SetSetting( param, aValue );
+            }
+            break;
+        case EXdm:
+            {
+            TInt param = ConvertParameter( aParam );
+            iXdmHandler->SetSetting( param, aValue );
+            }
+            break;
+        case ENatFw:
+        case EAdditionalStun:
+            {
+            TInt param = ConvertParameter( aParam );
+            TBuf8<KMaxNodeValueLength> value;
+            value.Copy( aValue );
+            iNatFwHandler->SetSetting( iSettingsType, param, value );
+            }
+            break;
+        case EWlan:
+        case EWepKey:
+        case EDestination:
+            {
+            TInt param = ConvertParameter( aParam );
+            iIapHandler->SetSetting( iSettingsType, param, aValue );
+            }
+            break;
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Stores settings, i.e. sends store commands to settings handlers.
+// ---------------------------------------------------------------------------
+//
+TInt CVoipXmlParamHandler::StoreSettings()
+    {
+    // First send 'basic' store commands.
+    TInt err( KErrNone );
+    err = iSipHandler->StoreSettings();
+    if ( KErrNone != err )
+        {
+        return err;
+        }
+    err = iVoipHandler->StoreSettings();
+    if ( KErrNone != err )
+        {
+        return err;
+        }
+    err = iXdmHandler->StoreSettings();
+    // If there were no settings, ignore error code.
+    if ( KErrNotSupported == err )
+        {
+        err = KErrNone;
+        }
+    err = iPresenceHandler->StoreSettings();
+    // If there were no settings, ignore error code.
+    if ( KErrNotSupported == err )
+        {
+        err = KErrNone;
+        }
+
+    err = iNatFwHandler->StoreSettings();
+    // If there were no settings, ignore error code.
+    if ( KErrNotSupported == err )
+        {
+        err = KErrNone;
+        }
+
+    err = iIapHandler->StoreSettings();
+    // If there were no settings, ignore error code.
+    if ( KErrNotSupported == err )
+        {
+        err = KErrNone;
+        }
+
+    // Send linkage information.
+    iSipHandler->LinkSettings( EDestination, iIapHandler->SettingsId() );
+    iVoipHandler->LinkSettings( ESip, iSipHandler->SettingsId() );
+    iVoipHandler->LinkSettings( EPresence, iPresenceHandler->SettingsId() );
+    iVoipHandler->LinkSettings( EDestination, iIapHandler->SettingsId() );
+    iPresenceHandler->LinkSettings( ESip, iSipHandler->SettingsId() );
+    iPresenceHandler->LinkSettings( EXdm, iXdmHandler->SettingsId() );
+
+    // Send finalizing commands.
+    iSipHandler->FinalizeSettings(); // Ignore error code.
+    err = iVoipHandler->FinalizeSettings();
+    iPresenceHandler->FinalizeSettings(); // Ignore error code.
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the VoIP service ID.
+// ---------------------------------------------------------------------------
+//
+TUint32 CVoipXmlParamHandler::ServiceTabId()
+    {
+    TUint32 tabId( KErrNone );
+    TRAP_IGNORE( tabId = iVoipHandler->ServiceTabIdL() );
+    return tabId;
+    }
+
+// ---------------------------------------------------------------------------
+// Converts parameter name to enumerated parameter.
+// ---------------------------------------------------------------------------
+//
+TInt CVoipXmlParamHandler::ConvertParameter( const TDesC& aParam )
+    {
+    TBuf<KMaxNodeNameLength> name( KNullDesC );
+    name.Copy( aParam );
+    name.LowerCase();
+    // ==============================
+    // Generic parameters.
+    // ==============================
+    //
+    if ( KParamValueName() == name )
+        {
+        return EName;
+        }
+    else if ( KParamValueUri() == name )
+        {
+        return EUri;
+        }
+    else if ( KParamValueTransport() == name )
+        {
+        return ETransport;
+        }
+    else if ( KParamValuePort() == name )
+        {
+        return EPort;
+        }
+    else if ( KParamValueUsername() == name )
+        {
+        return EUsername;
+        }
+    else if ( KParamValuePassword() == name )
+        {
+        return EPassword;
+        }
+    else if ( KParamValueType() == name )
+        {
+        return EType;
+        }
+    else if ( KParamValueDomain() == name )
+        {
+        return EDomain;
+        }
+    else if ( KParamValueStartPort() == name )
+        {
+        return EStartPort;
+        }
+    else if ( KParamValueEndPort() == name )
+        {
+        return EEndPort;
+        }
+    // ==============================
+    // VoIP 'core' parametes.
+    // ==============================
+    //
+    else if ( KParamValueMediaQos() == name )
+        {
+        return EMediaQos;
+        }
+    else if ( KParamValueDtmfInband() == name )
+        {
+        return EDtmfInband;
+        }
+    else if ( KParamValueDtmfOutband() == name )
+        {
+        return EDtmfOutband;
+        }
+    else if ( KParamValueSecureCallPref() == name )
+        {
+        return ESecureCallPreference;
+        }
+    else if ( KParamValueVoipOverWcdma() == name )
+        {
+        return EAllowVoipOverWcdma;
+        }
+    else if ( KParamValueRtcp() == name )
+        {
+        return ERtcp;
+        }
+    else if ( KParamValueUserAgentTerminalType() == name )
+        {
+        return EUserAgentHeaderTerminalType;
+        }
+    else if ( KParamValueUserAgentWlanMac() == name )
+        {
+        return EUserAgentHeaderWlanMac;
+        }
+    else if ( KParamValueUserAgentFreeString() == name )
+        {
+        return EUserAgentHeaderFreeString;
+        }
+    else if ( KParamValueCallerIdDigits() == name )
+        {
+        return ECallerIdDigits;
+        }
+    else if ( KParamValueIgnoreDomainPart() == name )
+        {
+        return EIgnoreDomainPart;
+        }
+    else if ( KParamValueAutoAcceptBuddyRequests() == name )
+        {
+        return EAutoAcceptBuddyRequests;
+        }
+    else if ( KParamValueAddUserPhone() == name )
+        {
+        return EAddUserPhone;
+        }
+    else if ( KParamValueProviderUrl() == name )
+        {
+        return EProviderUrl;
+        }
+    else if ( KParamValueMinSessionInterval() == name )
+        {
+        return EMinSessionInterval;
+        }
+    else if ( KParamValueSessionInterval() == name )
+        {
+        return ESessionInterval;
+        }
+    else if ( KParamValueBrandingUri() == name )
+        {
+        return EBrandingUri;
+        }
+    else if ( KParamValueAutoEnable() == name )
+        {
+        return EAutoEnable;
+        }
+    else if ( KParamValueEnableSipIm() == name )
+        {
+        return EEnableSipIm;
+        }
+    else if ( KParamValueBrandId() == name )
+        {
+        return EBrandId;
+        }
+    // ==============================
+    // VoIP voicemailbox parameters.
+    // ==============================
+    //
+    else if ( KParamValueMwiUri() == name )
+        {
+        return EMwiUri;
+        }
+    else if ( KParamValueListeningUri() == name )
+        {
+        return EListeningUri;
+        }
+    else if ( KParamValueReSubscribeInterval() == name )
+        {
+        return EReSubscribeInterval;
+        }
+    // ==============================
+    // VoIP codec parameters.
+    // ==============================
+    //
+    else if ( KParamValueJitterBuffer() == name )
+        {
+        return EJitterBuffer;
+        }
+    else if ( KParamValueOctetAlign() == name )
+        {
+        return EOctetAlign;
+        }
+    else if ( KParamValuePTime() == name )
+        {
+        return EPTime;
+        }
+    else if ( KParamValueMaxPTime() == name )
+        {
+        return EMaxPTime;
+        }
+    else if ( KParamValueModeSet() == name )
+        {
+        return EModeSet;
+        }
+    else if ( KParamValueModeChangePeriod() == name )
+        {
+        return EModeChangePeriod;
+        }
+    else if ( KParamValueModeChangeNeighbor() == name )
+        {
+        return EModeChangeNeighbor;
+        }
+    else if ( KParamValueMaxRed() == name )
+        {
+        return EMaxRed;
+        }
+    else if ( KParamValueVad() == name )
+        {
+        return EVad;
+        }
+    else if ( KParamValueAnnexB() == name )
+        {
+        return EAnnexb;
+        }
+    // ==============================
+    // SIP parameters.
+    // ==============================
+    //
+    else if ( KParamValueSignalingQos() == name )
+        {
+        return ESignalingQos;
+        }
+    else if ( KParamValuePublicUserId() == name )
+        {
+        return EPublicUserId;
+        }
+    else if ( KParamValueSignalCompression() == name )
+        {
+        return ESignalCompression;
+        }
+    else if ( KParamValueSecurityNegotiation() == name )
+        {
+        return ESecurityNegotiation;
+        }
+    else if ( KParamValueProfileLock() == name )
+        {
+        return EProfileLock;
+        }
+    else if ( KParamValueAutoRegistration() == name )
+        {
+        return EAutoRegistration;
+        }
+    else if ( KParamValueLooseRouting() == name )
+        {
+        return ELooseRouting;
+        }
+    // ==============================
+    // Presence parameters.
+    // ==============================
+    //
+    else if ( KParamValueMaxObjectSize() == name )
+        {
+        return EMaxObjectSize;
+        }
+    else if ( KParamValuePublishInterval() == name )
+        {
+        return EPublishInterval;
+        }
+    else if ( KParamValueMaxSubscriptions() == name )
+        {
+        return EMaxSubscriptions;
+        }
+    else if ( KParamValueMaxContacts() == name )
+        {
+        return EMaxContacts;
+        }
+    else if ( KParamValueDomainSyntax() == name )
+        {
+        return EDomainSyntax;
+        }
+    // ==============================
+    // NAT/Firewall parameters.
+    // ==============================
+    //
+    else if ( KParamValueTcpRefreshInterval() == name )
+        {
+        return ETcpRefreshInterval;
+        }
+    else if ( KParamValueUdpRefreshInterval() == name )
+        {
+        return EUdpRefreshInterval;
+        }
+    else if ( KParamValueCrlfRefresh() == name )
+        {
+        return ECrlfRefresh;
+        }
+    else if ( KParamValueStunSharedSecret() == name )
+        {
+        return EStunSharedSecret;
+        }
+    // ==============================
+    // WLAN IAP parameters.
+    // ==============================
+    //
+    else if ( KParamSsid() == name )
+        {
+        return ESsid;
+        }
+    else if ( KParamHidden() == name )
+        {
+        return EHidden;
+        }
+    else if ( KParamNetworkMode() == name )
+        {
+        return ENetworkMode;
+        }
+    else if ( KParamPreSharedKey() == name )
+        {
+        return EPreSharedKey;
+        }
+    else if ( KParamWepAuthMode() == name )
+        {
+        return EWepAuthMode;
+        }
+    else if ( KParamLength() == name )
+        {
+        return ELength;
+        }
+    else if ( KParamData() == name )
+        {
+        return EData;
+        }
+    // ==============================
+    // Not supported.
+    // ==============================
+    //
+    else
+        {
+        return EUnSupported;
+        }
+    }
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlparser.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,389 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  VoIP settings XML handler
+*
+*/
+
+
+#include <e32base.h>
+#include <GMXMLParser.h>
+#include <GMXMLDocument.h>
+#include <GMXMLNode.h>
+#include <GMXMLElement.h>
+#include <GMXMLText.h>
+#include <e32cmn.h>
+#include <e32def.h>
+
+#include "voipxmlparser.h"
+#include "voipxmlparamhandler.h"
+#include "voipxmlprocessordefaults.h"
+#include "voipxmlprocessorlogger.h"
+
+
+// ---------------------------------------------------------------------------
+// CVoipXmlParser::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CVoipXmlParser* CVoipXmlParser::NewL()
+    {
+    CVoipXmlParser* self = NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlParser::NewLC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CVoipXmlParser* CVoipXmlParser::NewLC()
+    {
+    CVoipXmlParser* self = new ( ELeave ) CVoipXmlParser();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlParser::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlParser::ConstructL()
+    {
+DBG_PRINT( "CVoipXmlParser::ConstructL begin" );
+
+    iParser = CMDXMLParser::NewL( this );
+    iParamHandler = CVoipXmlParamHandler::NewL();
+    iDescription = HBufC::NewL( 0 );
+    iBrandUrl = HBufC::NewL( 0 );
+
+DBG_PRINT( "CVoipXmlParser::ConstructL end" );
+    }
+
+// ---------------------------------------------------------------------------
+// CVoIPXmlHandler::~CVoIPXmlHandler()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CVoipXmlParser::~CVoipXmlParser()
+    {
+    delete iParser;
+    delete iParamHandler;
+    if ( iXmlDoc )
+        {
+        delete iXmlDoc;
+        }
+    if ( iDescription )
+        {
+        delete iDescription;
+        }
+    if( iBrandUrl )
+        {
+        delete iBrandUrl;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlParser::CVoipXmlParser
+// ---------------------------------------------------------------------------
+//
+CVoipXmlParser::CVoipXmlParser()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlParser::ImportDocumentL
+// Reads document.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CVoipXmlParser::ImportDocument( RFile& aFile, 
+    TUint32& aServiceTabId )
+    {
+    DBG_PRINT( "CVoipXmlParser::ImportDocumentL - begin" );
+    iParseDescription = EFalse;
+    iParser->ParseFile( aFile );
+    CActiveScheduler::Start();
+    if ( KErrNone == iError )
+        {
+        iError = iParamHandler->StoreSettings();
+        }
+    if ( KErrNone == iError )
+        {
+        // Give other applications 2 seconds to react
+        // to the newly created service.
+        const TInt KTwoSeconds( 2000000 );
+        User::After( KTwoSeconds );
+        aServiceTabId = iParamHandler->ServiceTabId();
+        }
+    DBG_PRINT2( "CVoipXmlParser::ImportDocumentL - end (%d)", iError );
+    return iError;
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlParser::ReadDescription
+// Reads document description.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C HBufC* CVoipXmlParser::ReadDescriptionLC( RFile& aFile, 
+    TDes8& aBrandUrl )
+    {
+    DBG_PRINT( "CVoipXmlParser::ReadDescriptionLC begin" );
+    iParseDescription = ETrue;
+    iParser->ParseFile( aFile );
+    CActiveScheduler::Start();
+    if ( !iDescription )
+        {
+        iDescription = HBufC::NewL( 0 );
+        }
+    HBufC* buf = HBufC::NewLC( iDescription->Des().Length() );
+    buf->Des().Copy( iDescription->Des() );
+    if ( !iBrandUrl )
+        {
+        iBrandUrl = HBufC::NewL( 0 );
+        }
+    aBrandUrl.Copy( iBrandUrl->Des() );
+    DBG_PRINT( "CVoipXmlParser::ReadDescriptionLC end" );
+    return buf;
+    }
+
+// ---------------------------------------------------------------------------
+// From base class MMDXMLParserObserver.
+// CVoipXmlParser::ParseFileCompleteL
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlParser::ParseFileCompleteL()
+    {
+    DBG_PRINT( "CVoipXmlParser::ParseFileCompleteL - begin" );
+    // We may have already received XML document from iParser since we
+    // commit two parsing operations (first the description and then the
+    // settings). Thus we need to delete iXmlDoc because iParser has given
+    // its responsibility here.
+    if ( iXmlDoc )
+        {
+        delete iXmlDoc;
+        iXmlDoc = NULL;
+        }
+    iXmlDoc = iParser->DetachXMLDoc();
+    CActiveScheduler::Stop();
+    if ( !iXmlDoc )
+        {
+        iError = KErrCorrupt;
+        return;
+        }
+    CMDXMLElement* xmlElement = iXmlDoc->DocumentElement();
+    if ( !xmlElement )
+        {
+        iError = KErrCorrupt;
+        DBG_PRINT( "CVoipXmlParser::ParseFileCompleteL - end KErrCorrupt" );
+        return;
+        }
+
+    if ( iParseDescription )
+        {
+        ParseDescription( *xmlElement );
+        }
+    else
+        {
+        ParseRoot( *xmlElement );
+        }
+    DBG_PRINT( "CVoipXmlParser::ParseFileCompleteL - end" );
+    }
+
+// ---------------------------------------------------------------------------
+// Parses description node.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlParser::ParseDescription( CMDXMLElement& aXmlElement )
+    {
+    CMDXMLNode* node = aXmlElement.FirstChild();
+    if ( !node )
+        {
+        iError = KErrCorrupt;
+        return;
+        }
+    TBuf<KMaxNodeNameLength> nodeName;
+    nodeName.Copy( node->NodeName() );
+    nodeName.LowerCase();
+
+    // <nokia-confdoc> is the root node; thus parse it first.
+    while ( nodeName != KNodeNokiaConfDoc && node )
+        {
+        node = node->NextSibling();
+        if ( !node )
+            {
+            DBG_PRINT( "CVoipXmlParser::ParseRoot - end KErrEof" );
+            iError = KErrEof;
+            return;
+            }
+        nodeName.Copy( node->NodeName() );
+        nodeName.LowerCase();
+        }
+    // After <nokia-confdoc> has been found, search for <confdescription>
+    // and <confbrandurl> from its children.
+    node = node->FirstChild();
+    while ( node )
+        {
+        nodeName.Copy( node->NodeName() );
+        nodeName.LowerCase();
+        CMDXMLNode* child = node->FirstChild();
+        if ( KNodeConfDescription() == nodeName && child && 
+            CMDXMLNode::ETextNode == child->NodeType() )
+            {
+            CMDXMLText* text = NULL;
+            text = static_cast<CMDXMLText*>( child );
+            delete iDescription;
+            iDescription = NULL;
+            TRAP_IGNORE( iDescription = text->Data().AllocL() );
+            }
+        else if ( KNodeConfBrandUrl() == nodeName && child && 
+            CMDXMLNode::ETextNode == child->NodeType() )
+            {
+            CMDXMLText* text = NULL;
+            text = static_cast<CMDXMLText*>( child );
+            delete iBrandUrl;
+            iBrandUrl = NULL;
+            TRAP_IGNORE( iBrandUrl = text->Data().AllocL() );
+            }
+        node = node->NextSibling();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlParser::ParseRoot
+// Parses root node.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlParser::ParseRoot( CMDXMLElement& aXmlElement )
+    {
+    DBG_PRINT( "CVoipXmlParser::ParseRoot - begin" );
+
+    CMDXMLNode* node = aXmlElement.FirstChild();
+    if ( !node )
+        {
+        iError = KErrCorrupt;
+        return;
+        }
+    TBuf<KMaxNodeNameLength> nodeName;
+    nodeName.Copy( node->NodeName() );
+    nodeName.LowerCase();
+
+    while ( nodeName != KNodeNokiaConfDoc )
+        {
+        node = node->NextSibling();
+        if ( !node )
+            {
+            DBG_PRINT( "CVoipXmlParser::ParseRoot - end KErrEof" );
+            iError = KErrEof;
+            return;
+            }
+        nodeName.Copy( node->NodeName() );
+        nodeName.LowerCase();
+        }
+
+    node = node->FirstChild();
+
+    TInt settingsCount( 0 );
+    while ( node )
+        {
+        nodeName.Copy( node->NodeName() );
+        nodeName.LowerCase();
+        // At this level in XML tree only 'settings' nodes are allowed.
+        if ( nodeName == KNodeSettings )
+            {
+            ParseSettings( node );
+            settingsCount++;
+            }
+        node = node->NextSibling();
+        }
+    if ( !settingsCount )
+        {
+        iError = KErrAbort;
+        }
+    DBG_PRINT( "CVoipXmlParser::ParseRoot - end" );
+
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlParser::ParseSettingsL
+// Parses 'settings' nodes.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlParser::ParseSettings( CMDXMLNode* aXmlNode )
+    {
+    DBG_PRINT( "CVoipXmlParser::ParseSettings - begin" );
+    if ( CMDXMLNode::EElementNode != aXmlNode->NodeType() )
+        {
+        DBG_PRINT( 
+            "CVoipXmlParser::ParseSettings - node type not element, end" );
+        iError = KErrBadHandle;
+        return;
+        }
+
+    CMDXMLElement* element = NULL;
+    element = static_cast<CMDXMLElement*>( aXmlNode );
+    TPtrC attributeValue;
+    element->GetAttribute( KAttributeType(), attributeValue );
+    if ( !attributeValue.Length() )
+        {
+        DBG_PRINT( 
+            "CVoipXmlParser::ParseSettings - attribute type not ok, end" );
+        iError = KErrBadName;
+        }
+
+    iParamHandler->SettingsStart( attributeValue );
+
+
+    CMDXMLNode* node = element->FirstChild();
+
+    while ( node )
+        {
+        if ( node->NodeType() == CMDXMLNode::EElementNode )
+            {
+
+            TBuf<KMaxNodeNameLength> nodeName;
+            nodeName.Copy( node->NodeName() );
+            nodeName.LowerCase();
+            element = NULL;
+            element = static_cast<CMDXMLElement*>( node );
+
+            if ( KNodeParam() == nodeName )
+                {
+                TPtrC nameVal;
+                element->GetAttribute( KAttributeName(), nameVal );
+                if ( nameVal.Length() )
+                    {
+                    TPtrC attVal;
+                    element->GetAttribute( KAttributeValue(), attVal );
+                        {
+                        if ( attVal.Length() )
+                            {
+                            iParamHandler->HandleParameter( 
+                                nameVal, attVal );
+                            }
+                        }
+                    }
+                }
+            else if ( KNodeSettings() == nodeName )
+                {
+                ParseSettings( element );
+                }
+            }
+        node = node->NextSibling();
+        }
+
+    iParamHandler->SettingsEnd();
+
+    DBG_PRINT( "CVoipXmlParser::ParseSettings - end" );
+    }
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlpresencehandler.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,257 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Presence handler for VoIP XML processor
+*
+*/
+
+
+#include <e32cmn.h>
+#include <coecntrl.h>
+#include <pressettingsapi.h>
+#include <pressettingsset.h>
+#include <sysutil.h>
+#include <pathinfo.h>
+#include <Authority16.h>
+#include <stringloader.h>
+#include <escapeutils.h>
+
+#include "voipxmlutils.h"
+#include "voipxmlpresencehandler.h"
+#include "voipxmlprocessorlogger.h"
+#include "voipxmlprocessordefaults.h"
+
+// ---------------------------------------------------------------------------
+// Default constructor.
+// ---------------------------------------------------------------------------
+//
+CVoipXmlPresenceHandler::CVoipXmlPresenceHandler()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CVoipXmlPresenceHandler* CVoipXmlPresenceHandler::NewL()
+    {
+    CVoipXmlPresenceHandler* self = new ( ELeave ) CVoipXmlPresenceHandler;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlPresenceHandler::ConstructL()
+    {
+    iProfile.iObjectSize        = KMaxObjectSize;
+    iProfile.iPublicationInt    = KPublishInterval;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CVoipXmlPresenceHandler::~CVoipXmlPresenceHandler()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Sets Presence setting.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlPresenceHandler::SetSetting( TInt aParam, const TDesC& aValue )
+    {
+    // Ignore too long descriptors.
+    if ( KMaxNodeValueLength < aValue.Length() )
+        {
+        return;
+        }
+
+    TInt intVal( KErrNotFound );
+    switch ( aParam )
+        {
+        case EName:
+            {
+            TBuf<KMaxNodeValueLength> name( KNullDesC );
+            name.Copy( aValue );
+            TRAPD( err, CreateProviderNameL( name ) );
+            if ( KErrNone == err )
+                {
+                iProfile.iSetName.Copy( name );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EMaxObjectSize:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intVal ))
+                {
+                iProfile.iObjectSize = intVal;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EPublishInterval:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intVal ))
+                {
+                iProfile.iPublicationInt = intVal;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EMaxSubscriptions:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intVal ))
+                {
+                iProfile.iMaxSubscriptions = intVal;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EMaxContacts:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intVal ))
+                {
+                iProfile.iMaxContactsInList = intVal;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EDomainSyntax:
+            {
+            iProfile.iDomainSyntax.Copy( aValue );
+            iSettingsSet = ETrue;
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Stores settings to 'Presence registry', i.e. creates a new Presence set.
+// ---------------------------------------------------------------------------
+//
+TInt CVoipXmlPresenceHandler::StoreSettings()
+    {
+    if ( !iSettingsSet )
+        {
+        // No settings to be stored => method not supported.
+        return KErrNotSupported;
+        }
+    iProfile.iStatusOfProps = EPresSettingOpened;
+    TRAPD( err, iProfileId = PresSettingsApi::CreateSetL( iProfile ));
+    if ( KErrNone != err )
+        {
+        err = KErrCompletion;
+        }
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the profile ID if the profile saved in StoreSettings.
+// ---------------------------------------------------------------------------
+//
+TUint32 CVoipXmlPresenceHandler::SettingsId()
+    {
+    return iProfileId;
+    }
+
+// ---------------------------------------------------------------------------
+// Links other settings to presence profile.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlPresenceHandler::LinkSettings( TInt aType, TUint32 aSettingsId )
+    {
+    switch ( aType )
+        {
+        case ESip:
+            iProfile.iSipProfile = aSettingsId;
+            break;
+        case EXdm:
+            iProfile.iXDMSetting = aSettingsId;
+            break;
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Finalizes profile, i.e. stores the profile with linkage information.
+// ---------------------------------------------------------------------------
+//
+TInt CVoipXmlPresenceHandler::FinalizeSettings()
+    {
+    TInt err1( KErrNone );
+    TRAPD( err2, err1 = PresSettingsApi::UpdateSetL( iProfile, iProfileId ));
+    if ( KErrNone != err1 || KErrNone != err2 )
+        {
+        err1 = KErrGeneral;
+        }
+    return err1;
+    }
+
+// ---------------------------------------------------------------------------
+// Checks for duplicate named Presence profiles. Renames if same.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlPresenceHandler::CreateProviderNameL( TDes& aName )
+    {
+    DBG_PRINT( "CVoipXmlPresenceHandler::CreateProviderNameL begin" );
+
+    RArray<TInt> settingIds;
+    CleanupClosePushL( settingIds ); // CS:1
+    // CS:2
+    CDesCArray* names = PresSettingsApi::GetAllSetsNamesLC( settingIds );
+
+    HBufC* newName = HBufC::NewLC( KMaxNodeNameLength ); // CS:3
+    newName->Des().Copy( aName );
+    const TInt count( names->MdcaCount() );
+    TUint i( 1 ); // Add number to the name if name already in use.
+
+    // Go through each profile and see if the name of the new profile    
+    // matches one of the existing names. If it does change it and
+    // check the new name again.
+    for ( TInt counter = 0; counter < count; counter++ )
+        {
+        TBuf<KMaxNodeValueLength> loadedName;
+        loadedName.Copy( names->MdcaPoint( counter ));
+        if ( 0 == newName->Des().Compare( loadedName ) )
+            {
+            // If the name is changed we need to begin the comparison
+            // again from the first profile.
+            newName->Des().Copy( aName );
+            newName->Des().Append( KOpenParenthesis() );
+            newName->Des().AppendNum( i );
+            newName->Des().Append( KClosedParenthesis() );  
+            counter = 0;
+            i++;
+            if ( KMaxProfileNames < i )
+                {
+                User::Leave( KErrBadName );
+                }
+            }
+        }
+    aName.Copy( newName->Des() );
+    // newName, names, &settingIds
+    CleanupStack::PopAndDestroy( 3, &settingIds );
+    DBG_PRINT( "CVoipXmlPresenceHandler::CreateProviderNameL end" );
+    }
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlsiphandler.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,584 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  SIP handler for VoIP XML processor
+*
+*/
+
+
+#include <e32cmn.h>
+#include <coecntrl.h>
+#include <sipmanagedprofile.h>
+#include <sipmanagedprofileregistry.h>
+#include <sysutil.h>
+#include <wlaninternalpskeys.h>
+#include <pathinfo.h>
+#include <Authority16.h>
+#include <stringloader.h>
+#include <escapeutils.h>
+
+#include "voipxmlutils.h"
+#include "voipxmlsiphandler.h"
+#include "voipxmlprocessorlogger.h"
+#include "voipxmlprocessordefaults.h"
+
+// ---------------------------------------------------------------------------
+// CVoipXmlSipHandler::CVoipXmlSipHandler
+// ---------------------------------------------------------------------------
+//
+CVoipXmlSipHandler::CVoipXmlSipHandler()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlSipHandler::NewL
+// ---------------------------------------------------------------------------
+//
+CVoipXmlSipHandler* CVoipXmlSipHandler::NewL()
+    {
+    CVoipXmlSipHandler* self = new ( ELeave ) CVoipXmlSipHandler;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlSipHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlSipHandler::ConstructL()
+    {
+    DBG_PRINT( "CVoipXmlSipHandler::ConstructL begin" );
+
+    // SIP Managed Profile Registry.
+    iRegistry = CSIPManagedProfileRegistry::NewL( *this );
+
+    // Create an empty SIP profile in which all settings will be set.
+    iProfileType.iSIPProfileClass = TSIPProfileTypeInfo::EInternet;
+    iProfileType.iSIPProfileName.Copy( KIetf() );
+    iProfile = iRegistry->CreateL( iProfileType );
+
+    iProxyUri           = HBufC8::NewL( KMaxNodeValueLength );
+    iProxyTransport     = EAutomatic;
+    iProxyPort          = KErrNotFound;
+    iLr                 = EFalse;
+    iRegistrarUri       = HBufC8::NewL( KMaxNodeValueLength );
+    iRegistrarTransport = EAutomatic;
+    iRegistrarPort      = KErrNotFound;
+
+    const TInt ipTosShift( 2 );
+    const TUint32 tosBits( KDefaultSigQos << ipTosShift );
+    iProfile->SetParameter( KSIPSoIpTOS, tosBits );
+
+    DBG_PRINT( "CVoipXmlSipHandler::ConstructL end" );
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlSipHandler::~CVoipXmlSipHandler
+// ---------------------------------------------------------------------------
+//
+CVoipXmlSipHandler::~CVoipXmlSipHandler()
+    {
+    delete iProfile;
+    delete iRegistry;
+    delete iProxyUri;
+    delete iRegistrarUri;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets SIP setting.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlSipHandler::SetSetting( TInt aType, TInt aParam, 
+    const TDesC8& aValue )
+    {
+    // Ignore too long descriptors.
+    if ( KMaxNodeValueLength < aValue.Length() )
+        {
+        return;
+        }
+
+    switch ( aParam )
+        {
+        case EName:
+            {
+            TRAPD( err, CreateProviderNameL( aValue ) );
+            if ( KErrNone == err )
+                {
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case ESignalingQos:
+            {
+            // We need to do bitshifting on the IP TOS, because it's the 
+            // upper 6 bits that are set and settings provide us the IP TOS
+            // as the lower 6 bits.
+            // The lower 2 bits are reserver for explicit congestion
+            // notification. 
+            // See also more from:
+            // Symbian Developer Library 
+            //    => in_sock.h Global variables
+            //       => KSoIpTOS
+            const TInt ipTosShift( 2 );
+            TInt value( KErrNotFound );
+            VoipXmlUtils::Des8ToInt( aValue, value );
+            if ( 0 <= value )
+                {
+                const TUint32 tosBits( value << ipTosShift );
+                iProfile->SetParameter( KSIPSoIpTOS, tosBits );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EType:
+            {
+            TBuf8<KMaxNodeValueLength> value;
+            value.Copy( aValue );
+            value.UpperCase();
+            if ( 0 == value.Compare( KIms() ) )
+                {
+                iProfileType.iSIPProfileClass = TSIPProfileTypeInfo::EIms;
+                value.LowerCase();
+                iProfileType.iSIPProfileName.Copy( value );
+                iProfile->SetType( iProfileType );
+                iSettingsSet = ETrue;
+                }
+            else if ( 0 == value.Compare( KIetf() ) )
+                {
+                iProfileType.iSIPProfileClass = 
+                    TSIPProfileTypeInfo::EInternet;
+                iProfileType.iSIPProfileName.Copy( value );
+                iProfile->SetType( iProfileType );
+                iSettingsSet = ETrue;
+                }
+            else
+                {
+                iProfileType.iSIPProfileClass = TSIPProfileTypeInfo::EOther;
+                iProfileType.iSIPProfileName.Copy( aValue );
+                iProfile->SetType( iProfileType );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EPublicUserId:
+            {
+            TBuf8<KMaxNodeValueLength> value;
+            value.Copy( aValue );
+            TRAPD( err, ModifyPuidL( value ) );
+            if ( KErrNone == err )
+                {
+                iProfile->SetParameter( KSIPUserAor, value );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case ESignalCompression:
+            {
+            TInt value;
+            if ( KErrNone == VoipXmlUtils::Des8ToInt( aValue, value ) )
+                {
+                iProfile->SetParameter( KSIPSigComp, (TBool)value );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case ESecurityNegotiation:
+            {
+            TInt value;
+            if ( KErrNone == VoipXmlUtils::Des8ToInt( aValue, value ) )
+                {
+                iProfile->SetParameter( 
+                    KSIPSecurityNegotiation, (TBool)value );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EProfileLock:
+            {
+            TInt value;
+            if ( KErrNone == VoipXmlUtils::Des8ToInt( aValue, value ) )
+                {
+                iProfile->SetParameter( KSIPProfileLocked, (TBool)value );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EAutoRegistration:
+            {
+            TInt value;
+            if ( KErrNone == VoipXmlUtils::Des8ToInt( aValue, value ) )
+                {
+                iProfile->SetParameter( KSIPAutoRegistration, (TBool)value );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EUri:
+            {
+            TBuf8<KMaxNodeValueLength> tempBuf( KNullDesC8 );
+            if ( 0 != aValue.Find( KSip() ) &&
+                0 != aValue.Find( KSips() ) )
+                {
+                tempBuf.Copy( KSip() );
+                }
+            tempBuf.Append( aValue );
+            if ( EProxy == aType )
+                {
+                iProxyUri->Des().Copy( tempBuf );
+                iSettingsSet = ETrue;
+                }
+            else if ( ERegistrar == aType )
+                {
+                iRegistrarUri->Des().Copy( tempBuf );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case ETransport:
+            {
+            if ( EProxy == aType )
+                {
+                iProxyTransport = ValidateTransport( aValue );
+                iSettingsSet = ETrue;
+                }
+            else if ( ERegistrar == aType )
+                {
+                iRegistrarTransport = ValidateTransport( aValue );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EPort:
+            {
+            TInt value;
+            TInt err = VoipXmlUtils::Des8ToInt( aValue, value );
+            if ( EProxy == aType && KErrNone == err )
+                {
+                iProxyPort = value;
+                iSettingsSet = ETrue;
+                }
+            else if ( ERegistrar == aType && KErrNone == err )
+                {
+                iRegistrarPort = value;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case ELooseRouting:
+            {
+            TInt value;
+            if ( EProxy == aType && 
+                KErrNone == VoipXmlUtils::Des8ToInt( aValue, value ) )
+                {
+                iLr = (TBool)value;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EUsername:
+            {
+            if ( EProxy == aType )
+                {
+                if ( TSIPProfileTypeInfo::EInternet == 
+                    iProfileType.iSIPProfileClass )
+                    {
+                    iProfile->SetParameter( KSIPOutboundProxy, 
+                        KSIPDigestUserName, aValue );
+                    iSettingsSet = ETrue;
+                    }
+                else
+                    {
+                    iProfile->SetParameter( KSIPPrivateIdentity, aValue );
+                    iSettingsSet = ETrue;
+                    }
+                }
+            else if ( ERegistrar == aType )
+                {
+                if ( TSIPProfileTypeInfo::EInternet == 
+                    iProfileType.iSIPProfileClass )
+                    {
+                    iProfile->SetParameter( KSIPRegistrar, KSIPDigestUserName,
+                        aValue );
+                    iSettingsSet = ETrue;
+                    }
+                else
+                    {
+                    iProfile->SetParameter( KSIPPrivateIdentity, aValue );
+                    iSettingsSet = ETrue;
+                    }
+                }
+            break;
+            }
+        case EPassword:
+            {
+            if ( EProxy == aType )
+                {
+                iProfile->SetParameter( KSIPOutboundProxy, KSIPDigestPassword,
+                    aValue );
+                iSettingsSet = ETrue;
+                }
+            else if ( ERegistrar == aType )
+                {
+                iProfile->SetParameter( KSIPRegistrar, KSIPDigestPassword,
+                    aValue );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Stores settings to SIP managed profile registry.
+// ---------------------------------------------------------------------------
+//
+TInt CVoipXmlSipHandler::StoreSettings()
+    {
+    if ( !iSettingsSet )
+        {
+        // No settings to be stored => method not supported.
+        return KErrNotSupported;
+        }
+
+    TBuf8<KMaxNodeValueLength> tempBuf( KNullDesC8 );
+
+    // ==============================
+    // Set components to proxy URI.
+    // ==============================
+    //
+    if ( KErrNotFound != iProxyPort )
+        {
+        tempBuf.Copy( KColon() );
+        tempBuf.AppendNum( iProxyPort );
+        }
+    if ( EUdp == iProxyTransport )
+        {
+        tempBuf.Append( KTransport() );
+        tempBuf.Append( KUdp() );
+        }
+    else if ( ETcp == iProxyTransport )
+        {
+        tempBuf.Append( KTransport() );
+        tempBuf.Append( KTcp() );
+        }
+    if ( iLr )
+        {
+        tempBuf.Append( KLr() );
+        }
+
+    if ( iProxyUri->Des().MaxLength() >= 
+        ( iProxyUri->Des().Length() + tempBuf.Length() ) )
+        {
+        iProxyUri->Des().Append( tempBuf );
+        }
+    iProfile->SetParameter( KSIPOutboundProxy, KSIPServerAddress, 
+        iProxyUri->Des() );
+
+    // ==============================
+    // Set components to registrar URI.
+    // ==============================
+    //
+    tempBuf.Zero();
+    if ( KErrNotFound != iRegistrarPort )
+        {
+        tempBuf.Copy( KColon() );
+        tempBuf.AppendNum( iRegistrarPort );
+        }
+    if ( EUdp == iRegistrarTransport )
+        {
+        tempBuf.Append( KTransport() );
+        tempBuf.Append( KUdp() );
+        }
+    else if ( ETcp == iRegistrarTransport )
+        {
+        tempBuf.Append( KTransport() );
+        tempBuf.Append( KTcp() );
+        }
+    if ( iRegistrarUri->Des().MaxLength() >= 
+        ( iRegistrarUri->Des().Length() + tempBuf.Length() ) )
+        {
+        iRegistrarUri->Des().Append( tempBuf );
+        }
+    iProfile->SetParameter( KSIPRegistrar, KSIPServerAddress, 
+        iRegistrarUri->Des() );
+
+    TRAPD( err, iRegistry->SaveL( *iProfile ) );
+    if ( KErrNone != err )
+        {
+        // No need for specifying what went wrong because paramhandler
+        // is only intrested in KErrNotSupported, KErrCompletion and KErrNone.
+        err = KErrCompletion;
+        }
+    // Store SIP settings ID for later use.
+    iProfile->GetParameter( KSIPProfileId, iProfileId );
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the profile ID if the profile saved in StoreSettings.
+// ---------------------------------------------------------------------------
+//
+TUint32 CVoipXmlSipHandler::SettingsId()
+    {
+    return iProfileId;
+    }
+
+// ---------------------------------------------------------------------------
+// Saves linkage information.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlSipHandler::LinkSettings( TInt aType, TUint32 aSettingsId )
+    {
+    if ( EDestination == aType && aSettingsId )
+        {
+        iProfile->SetParameter( KSIPSnapId, aSettingsId );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Finalizes settings saving.
+// ---------------------------------------------------------------------------
+//
+TInt CVoipXmlSipHandler::FinalizeSettings()
+    {
+    TRAPD( err, iRegistry->SaveL( *iProfile ) );
+    if ( KErrNone != err )
+        {
+        // ParamHandler is only intrested in KErrNone and KErrCompletion.
+        err = KErrCompletion;
+        }
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MSIPProfileRegistryObserver.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlSipHandler::ProfileRegistryEventOccurred( 
+    TUint32 /*aSIPProfileId*/, TEvent /*aEvent*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// From class MSIPProfileRegistryObserver. 
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlSipHandler::ProfileRegistryErrorOccurred( 
+    TUint32 /*aSIPProfileId*/, TInt /*aError*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlSipHandler::CreateProviderNameL
+// Checks if duplicate named SIP profiles. Renames if same.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlSipHandler::CreateProviderNameL( const TDesC8& aName )
+    {
+    DBG_PRINT( "CVoipXmlSipHandler::CreateProviderNameL begin" );
+
+    RPointerArray<CSIPProfile> profiles;
+    CleanupResetAndDestroyL( profiles ); // CS:1
+
+    // Get all profiles based on profile types.
+    iRegistry->ProfilesL( profiles );
+    const TInt profileCount = profiles.Count();
+
+    // Go through loaded profiles and check for name duplicates.
+    HBufC8* name = HBufC8::NewLC( KMaxNodeNameLength ); // CS:2
+    name->Des().Copy( aName );
+    TUint i( 1 ); // Add number to the name if name already in use.
+    const TInt count( profiles.Count() );
+    for ( TInt counter = 0; counter < count; counter++ )
+        {
+        CSIPManagedProfile* profile = 
+            static_cast<CSIPManagedProfile*>( profiles[counter] );
+        const TDesC8* existingName;
+        profile->GetParameter( KSIPProviderName, existingName );
+        if ( 0 == existingName->Compare( *name ) )
+            {
+            name->Des().Copy( aName );
+            name->Des().Append( KOpenParenthesis8() );
+            name->Des().AppendNum( i );
+            name->Des().Append( KClosedParenthesis8() );  
+            counter = 0;
+            i++;
+            if ( KMaxProfileNames < i )
+                {
+                User::Leave( KErrBadName );
+                }
+            }
+        }
+    iProfile->SetParameter( KSIPProviderName, name->Des() );
+
+    // name, &profiles
+    CleanupStack::PopAndDestroy( 2, &profiles ); // CS:0
+    DBG_PRINT( "CVoipXmlSipHandler::CreateProviderNameL end" );
+    }
+
+// ---------------------------------------------------------------------------
+// Modifies public user ID, i.e. escapes and adds sip: prefix if necessary.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlSipHandler::ModifyPuidL( TDes8& aValue )
+    {
+    if ( KErrNotFound == aValue.Find( KEscaped() ) )
+        {
+        HBufC8* tempPuid = EscapeUtils::EscapeEncodeL( aValue,
+            EscapeUtils::EEscapeNormal );
+        aValue.Copy( tempPuid->Des() );
+        delete tempPuid;
+        tempPuid = NULL;
+        }
+    if ( 0 != aValue.Find( KSip() ) && 0 != aValue.Find( KSips() ) )
+        {
+        if ( aValue.MaxLength() >= ( aValue.Length() + KSip().Length() ) )
+            {
+            aValue.Insert( 0, KSip() );
+            }
+        else
+            {
+            User::Leave( KErrTooBig );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Validates transport type.
+// ---------------------------------------------------------------------------
+//
+CVoipXmlSipHandler::TTransportType CVoipXmlSipHandler::ValidateTransport( 
+    const TDesC8& aValue )
+    {
+    TBuf8<KMaxNodeValueLength> value;
+    value.Copy( aValue );
+    value.UpperCase();
+    if ( 0 == value.Compare( KUdp() ) )
+        {
+        return EUdp;
+        }
+    else if ( 0 == value.Compare( KTcp() ) )
+        {
+        return ETcp;
+        }
+    else
+        {
+        return EAutomatic;
+        }
+    }
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlutils.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  Utilities class for VoIP XML processor
+*
+*/
+
+
+//#include <e32base.h>
+#include "voipxmlutils.h"
+
+
+// ---------------------------------------------------------------------------
+// VoipXmlUtils::DesToInt()
+// ---------------------------------------------------------------------------
+//
+TInt VoipXmlUtils::DesToInt( const TDesC& aDesValue, TInt& aIntValue )
+    {
+    TLex lex( aDesValue );
+    return lex.Val( aIntValue );
+    }
+
+// ---------------------------------------------------------------------------
+// VoipXmlUtils::DesToInt()
+// ---------------------------------------------------------------------------
+//
+TInt VoipXmlUtils::Des8ToInt( const TDesC8& aDesValue, TInt& aIntValue )
+    {
+    TLex8 lex( aDesValue );
+    return lex.Val( aIntValue );
+    }
+
+// End of file.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlvoiphandler.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,1289 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  VoIP settings handler
+*
+*/
+
+
+#include <crcseaudiocodecregistry.h>
+#include <crcseprofileregistry.h>
+#include <spsettings.h>
+#include <spproperty.h>
+#include <spdefinitions.h>
+#include <sipmanagedprofile.h>
+#include <sipmanagedprofileregistry.h>
+#include <cipappphoneutils.h> // SIP User-Agent header info.
+#include <cipapputilsaddressresolver.h> // SIP User-Agent header info.
+#include <pathinfo.h> // For getting phone rom root path.
+#include <cvimpstsettingsstore.h> // For IM tone path
+
+#include "voipxmlvoiphandler.h"
+#include "voipxmlprocessorlogger.h"
+#include "voipxmlprocessordefaults.h"
+#include "voipxmlutils.h"
+
+const TInt32 KCCHPresenceSubServicePlugId = 0x1027545A;
+// IM related constants.
+const TUint32 KIMSubServicePluginId = 0x1027545A;
+const TUint32 KIMLaunchUid          = 0x200255D0;
+const TInt    KIMSettingsId         = 1;
+// Default IM message tone
+_LIT( KDefaultTone,       "Message 2.aac" );
+// Brand related constants.
+const TInt KBrandVersion = 1;
+
+// ---------------------------------------------------------------------------
+// Default constructor.
+// ---------------------------------------------------------------------------
+//
+CVoipXmlVoipHandler::CVoipXmlVoipHandler()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::ConstructL()
+    {
+    DBG_PRINT( "CVoipXmlVoipHandler::ConstructL begin" );
+    iRegistry      = CRCSEProfileRegistry::NewL();
+    iCodecRegistry = CRCSEAudioCodecRegistry::NewL();
+    iEntry         = CRCSEProfileEntry::NewL();
+    ResetTempCodec();
+    ResetTempSpSettings();
+    iSettingsSet = EFalse;
+    DBG_PRINT( "CVoipXmlVoipHandler::ConstructL end" );
+    }
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+//
+CVoipXmlVoipHandler* CVoipXmlVoipHandler::NewL()
+    {
+    DBG_PRINT( "CVoipXmlVoipHandler::NewL begin" );
+    CVoipXmlVoipHandler* self = new ( ELeave ) CVoipXmlVoipHandler;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    DBG_PRINT( "CVoipXmlVoipHandler::NewL end" );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CVoipXmlVoipHandler::~CVoipXmlVoipHandler()
+    {
+    DBG_PRINT( "CVoipXmlVoipHandler::~CVoipXmlVoipHandler begin" );
+    delete iRegistry;
+    delete iCodecRegistry;
+    delete iEntry;
+    ResetTempCodec( ETrue );
+    ResetTempSpSettings();
+    DBG_PRINT( "CVoipXmlVoipHandler::~CVoipXmlVoipHandler end" );
+    }
+
+// ---------------------------------------------------------------------------
+// Sets VoIP setting.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::SetSetting( TInt aType, TInt aParam, 
+    const TDesC& aValue )
+    {
+    // Ignore too long descriptors.
+    if ( KMaxNodeValueLength < aValue.Length() )
+        {
+        return;
+        }
+
+    switch ( aType )
+        {
+        case EVoip:
+            TRAP_IGNORE( SetCoreSettingL( aParam, aValue ) );
+            break;
+        case ECodec:
+            TRAP_IGNORE( SetCodecSettingL( aParam, aValue ) );
+            break;
+        case EVmbx:
+            TRAP_IGNORE( SetVmbxSettingL( aParam, aValue ) );
+            break;
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Stores settings to RCSE.
+// ---------------------------------------------------------------------------
+//
+TInt CVoipXmlVoipHandler::StoreSettings()
+    {
+    TInt err( KErrNone );
+    TBool ok( ETrue );
+
+    if ( !iSettingsSet )
+        {
+        // No settings to be stored => method not supported.
+        err = KErrNotSupported;
+        ok = EFalse;
+        }
+    else
+        {
+        TUint32 profileId( KErrNone );
+        // Add default codec set if no codecs defined.
+        if ( 0 == iEntry->iPreferredCodecs.Count() )
+            {
+            TRAP_IGNORE( AddDefaultCodecsL() );
+            }
+        TRAP( err, profileId = iRegistry->AddL( *iEntry ) );
+        if ( KErrNone == err )
+            {
+            // Adding profile entry to registry OK. Let's load the profile
+            // from registry so that we'll get all the values registry has
+            // added to the entry (AddL takes entry as const reference).
+            TRAP_IGNORE( iRegistry->FindL( profileId, *iEntry ) );
+            }
+        else
+            {
+            err = KErrCompletion;
+            ok = EFalse;
+            }
+        }
+    if ( !ok )
+        {
+        const TInt count = iEntry->iPreferredCodecs.Count();
+        for ( TInt counter = 0; counter < count; counter++ )
+            {
+            TRAP_IGNORE( iCodecRegistry->DeleteL( 
+                iEntry->iPreferredCodecs[counter] ) );
+            }
+        }
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the service ID.
+// ---------------------------------------------------------------------------
+//
+TUint32 CVoipXmlVoipHandler::SettingsId()
+    {
+    return iServiceId;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets a codec to RCSE and resets the temp codec.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::SettingsEnd( TInt aType )
+    {
+    if ( ECodec == aType )
+        {
+        TRAP_IGNORE( SetCodecToRcseL() );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Saves linkage information.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::LinkSettings( TInt aType, TUint32 aSettingsId )
+    {
+    switch ( aType )
+        {
+        case ESip:
+            {
+            TRAP_IGNORE( SetSipInfoL( aSettingsId ) );
+            break;
+            }
+        case EPresence:
+            {
+            iPresenceId = aSettingsId;
+            break;
+            }
+        case EDestination:
+            {
+            iDestinationId = aSettingsId;
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Finalizes settings saving.
+// ---------------------------------------------------------------------------
+//
+TInt CVoipXmlVoipHandler::FinalizeSettings()
+    {
+    TInt err( KErrNone );
+    TRAP( err, SetSpSettingsL() );
+    if ( KErrNone != err )
+        {
+        // ParamHandler is only intrested in KErrNone and KErrCompletion.
+        err = KErrCompletion;
+        }
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the service tab ID of this VoIP service.
+// ---------------------------------------------------------------------------
+//
+TUint32 CVoipXmlVoipHandler::ServiceTabIdL()
+    {
+    DBG_PRINT( "CVoipXmlVoipHandler::ServiceTabIdL begin" );
+    TInt tabId( KErrNone );
+    CSPSettings* spSettings = CSPSettings::NewLC(); // CS:1
+    CSPProperty* property = CSPProperty::NewLC(); // CS:2
+    TInt err = spSettings->FindPropertyL( 
+        iServiceId, EPropertyContactViewId, *property );
+    User::LeaveIfError( property->GetValue( tabId ) );
+    CleanupStack::PopAndDestroy( 2, spSettings ); // CS:0
+    DBG_PRINT2( "CVoipXmlVoipHandler::ServiceTabIdL end (return %d)", tabId );
+    return (TUint32)tabId;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MSIPProfileRegistryObserver.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::ProfileRegistryEventOccurred( 
+    TUint32 /*aSIPProfileId*/, TEvent /*aEvent*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// From class MSIPProfileRegistryObserver. 
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::ProfileRegistryErrorOccurred( 
+    TUint32 /*aSIPProfileId*/, TInt /*aError*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Sets VoIP core setting to temporary storage.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::SetCoreSettingL( TInt aParam, const TDesC& aValue )
+    {
+    TInt intValue( KErrNotFound );
+    switch ( aParam )
+        {
+        case EName:
+            {
+            TBuf<KMaxSettingsNameLength> name( KNullDesC );
+            name.Copy( aValue );
+            TRAP_IGNORE( ValidateProfileNameL( name ) );
+            iEntry->iProviderName.Copy( name );
+            iEntry->iSettingsName.Copy( name );
+            iSettingsSet = ETrue;
+            break;
+            }
+        case EStartPort:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iEntry->iStartMediaPort = intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EEndPort:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iEntry->iEndMediaPort = intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EMediaQos:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iEntry->iMediaQOS = intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EDtmfInband:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                TEntryOnOff value;
+                if ( !intValue )
+                    {
+                    value = CRCSEProfileEntry::EOff;
+                    }
+                else if ( KNotSet == intValue )
+                    {
+                    value = CRCSEProfileEntry::EOONotSet;
+                    }
+                else
+                    {
+                    value = CRCSEProfileEntry::EOn;
+                    }
+                iEntry->iInbandDTMF = value;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EDtmfOutband:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                TEntryOnOff value;
+                if ( !intValue )
+                    {
+                    value = CRCSEProfileEntry::EOff;
+                    }
+                else if ( KErrNotFound == intValue )
+                    {
+                    value = CRCSEProfileEntry::EOONotSet;
+                    }
+                else
+                    {
+                    value = CRCSEProfileEntry::EOn;
+                    }
+                iEntry->iOutbandDTMF = value;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case ESecureCallPreference:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iEntry->iSecureCallPreference = intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EAllowVoipOverWcdma:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                TEntryOnOff value;
+                if ( !intValue )
+                    {
+                    value = CRCSEProfileEntry::EOff;
+                    }
+                else if ( KErrNotFound == intValue )
+                    {
+                    value = CRCSEProfileEntry::EOONotSet;
+                    }
+                else
+                    {
+                    value = CRCSEProfileEntry::EOn;
+                    }
+                iEntry->iAllowVoIPoverWCDMA = value;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case ERtcp:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iEntry->iRTCP = intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EUserAgentHeaderTerminalType:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iEntry->iSIPVoIPUAHTerminalType = intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EUserAgentHeaderWlanMac:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iEntry->iSIPVoIPUAHeaderWLANMAC = intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EUserAgentHeaderFreeString:
+            {
+            if ( KMaxSettingsLength32 >= aValue.Length() )
+                {
+                iEntry->iSIPVoIPUAHeaderString.Copy( aValue );
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case ECallerIdDigits:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iEntry->iMeanCountOfVoIPDigits = intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EIgnoreDomainPart:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iEntry->iIgnoreAddrDomainPart = intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EAutoAcceptBuddyRequests:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iSpSettings.iAutoAcceptBuddies = (TBool)intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EAddUserPhone:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                TEntryOnOff value;
+                if ( !intValue )
+                    {
+                    value = CRCSEProfileEntry::EOff;
+                    }
+                else if ( KErrNotFound == intValue )
+                    {
+                    value = CRCSEProfileEntry::EOONotSet;
+                    }
+                else
+                    {
+                    value = CRCSEProfileEntry::EOn;
+                    }
+                iEntry->iUserPhoneUriParameter = value;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EProviderUrl:
+            {
+            if ( !iSpSettings.iProviderUrl )
+                {
+                iSpSettings.iProviderUrl = aValue.AllocL();
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EMinSessionInterval:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iEntry->iSIPMinSE = intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case ESessionInterval:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iEntry->iSIPSessionExpires = intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EBrandingUri:
+            {
+            if ( !iSpSettings.iBrandingUri )
+                {
+                iSpSettings.iBrandingUri = aValue.AllocL();
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EAutoEnable:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iSpSettings.iAutoEnable = (TBool)intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EEnableSipIm:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iSpSettings.iEnableSipIm = (TBool)intValue;
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        case EBrandId:
+            {
+            if ( !iSpSettings.iBrandId )
+                {
+                iSpSettings.iBrandId = aValue.AllocL();
+                iSettingsSet = ETrue;
+                }
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Sets codec setting to temporary storage.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::SetCodecSettingL( TInt aParam, const TDesC& aValue )
+    {
+    TInt intValue;
+    switch ( aParam )
+        {
+        // Codec parameters
+        case EName:
+            {
+            if ( iCurrentCodec.iName )
+                {
+                break;
+                }
+            TBuf<KMaxNodeValueLength> value;
+            value.Copy( aValue );
+            value.UpperCase();
+            if ( 0 == value.Compare( KILbc ) )
+                {
+                value.Copy( KAudioCodeciLBC );
+                }
+            iCurrentCodec.iName = value.AllocL();
+            break;
+            }
+        case EJitterBuffer:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iCurrentCodec.iJitterBuffer = intValue;
+                }
+            break;
+            }
+        case EOctetAlign:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                if ( !intValue )
+                    {
+                    iCurrentCodec.iOctetAlign = CRCSEAudioCodecEntry::EOff;
+                    }
+                else if ( KErrNotFound == intValue )
+                    {
+                    iCurrentCodec.iOctetAlign = 
+                        CRCSEAudioCodecEntry::EOONotSet;
+                    }
+                else
+                    {
+                    iCurrentCodec.iOctetAlign = CRCSEAudioCodecEntry::EOn;
+                    }
+                }
+            break;
+            }
+        case EPTime:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iCurrentCodec.iPtime = intValue;
+                }
+            break;
+            }
+        case EMaxPTime:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iCurrentCodec.iMaxPtime = intValue;
+                }
+            break;
+            }
+        case EModeSet:
+            {
+            TBuf<KMaxNodeNameLength> string;
+            string.Copy( aValue );
+            while ( string.Length() )
+                {
+                TInt offset = string.Locate( KComma );
+                TBuf<KMaxNodeNameLength> helpString( KNullDesC );
+                if ( KErrNotFound == offset )
+                    {
+                    if ( KErrNone == VoipXmlUtils::DesToInt( 
+                        string, intValue ) )
+                        {
+                        iCurrentCodec.iModeSet.AppendL( intValue );
+                        }
+                    string.Zero();
+                    }
+                else if ( !offset )
+                    {
+                    string.Delete( 0, 1 );
+                    }
+                else
+                    {
+                    helpString.Copy( string.Left( offset ) );
+                    if ( KErrNone == VoipXmlUtils::DesToInt( helpString,
+                        intValue ) )
+                        {
+                        iCurrentCodec.iModeSet.AppendL( intValue );
+                        }
+                    offset++;
+                    string.Delete( 0, offset );
+                    }
+                }
+            break;
+            }
+        case EModeChangePeriod:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iCurrentCodec.iModeChangePeriod = intValue;
+                }
+            break;
+            }
+        case EModeChangeNeighbor:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                if ( !intValue )
+                    {
+                    iCurrentCodec.iModeChangeNeighbor = 
+                        CRCSEAudioCodecEntry::EOff;
+                    }
+                else if ( KErrNotFound == intValue )
+                    {
+                    iCurrentCodec.iModeChangeNeighbor = 
+                        CRCSEAudioCodecEntry::EOONotSet;
+                    }
+                else
+                    {
+                    iCurrentCodec.iModeChangeNeighbor = 
+                        CRCSEAudioCodecEntry::EOn;
+                    }
+                }
+            break;
+            }
+        case EMaxRed:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iCurrentCodec.iMaxRed = intValue;
+                }
+            break;
+            }
+        case EVad:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                if ( !intValue )
+                    {
+                    iCurrentCodec.iVad = CRCSEAudioCodecEntry::EOff;
+                    }
+                else if ( KErrNotFound == intValue )
+                    {
+                    iCurrentCodec.iVad = CRCSEAudioCodecEntry::EOONotSet;
+                    }
+                else
+                    {
+                    iCurrentCodec.iVad = CRCSEAudioCodecEntry::EOn;
+                    }
+                }
+            break;
+            }
+        case EAnnexb:
+            {
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                if ( !intValue )
+                    {
+                    iCurrentCodec.iAnnexb = CRCSEAudioCodecEntry::EOff;
+                    }
+                else if ( KErrNotFound == intValue )
+                    {
+                    iCurrentCodec.iAnnexb = CRCSEAudioCodecEntry::EOONotSet;
+                    }
+                else
+                    {
+                    iCurrentCodec.iAnnexb = CRCSEAudioCodecEntry::EOn;
+                    }
+                }
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Sets voice mailbox setting to temporary storage.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::SetVmbxSettingL( TInt aParam, const TDesC& aValue )
+    {
+    switch ( aParam )
+        {
+        case EMwiUri:
+            {
+            if ( !iSpSettings.iMwiUri )
+                {
+                iSpSettings.iMwiUri = aValue.AllocL();
+                }
+            break;
+            }
+        case EListeningUri:
+            {
+            if ( !iSpSettings.iListeningUri )
+                {
+                iSpSettings.iListeningUri = aValue.AllocL();
+                }
+            break;
+            }
+        case EReSubscribeInterval:
+            {
+            TInt intValue;
+            if ( KErrNone == VoipXmlUtils::DesToInt( aValue, intValue ) )
+                {
+                iSpSettings.iResubrcribe = intValue;
+                }
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Checks if name is unique and modifies if needed.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::ValidateProfileNameL( TDes& aName )
+    {
+    const TInt maxModifyLength = 
+        KMaxSettingsNameLength - KMaxProfileNameAppendLength;
+
+    RArray<TUint32> voipIds;
+    CleanupClosePushL( voipIds ); // CS:1
+    iRegistry->GetAllIdsL( voipIds );
+
+    const TInt count( voipIds.Count() );
+
+    HBufC* newName = HBufC::NewLC( KMaxSettingsNameLength ); // CS:2
+    newName->Des().Copy( aName.Left( maxModifyLength ) );
+
+    TUint i( 1 ); // Add number to the name if name already in use.
+    TBool changed( EFalse );
+
+    // Go through each profile and see if the name of the new profile    
+    // matches one of the existing names. If it does change it and
+    // check the new name again.
+    for ( TInt index = 0; index < count; index++ )
+        {
+        CRCSEProfileEntry* profile = CRCSEProfileEntry::NewLC(); // CS:3
+        TBuf<KMaxSettingsNameLength> loadedName;
+        iRegistry->FindL( voipIds[index], *profile );
+        loadedName.Copy( profile->iSettingsName );
+        if ( 0 == newName->Des().Compare( loadedName ) )
+            {
+            // If the name is changed we need to begin the comparison
+            // again from the first profile.
+            newName->Des().Copy( aName.Left( maxModifyLength ) );
+            newName->Des().Append( KOpenParenthesis() );
+            newName->Des().AppendNum( i );
+            newName->Des().Append( KClosedParenthesis() );  
+            index = 0;
+            i++;
+            if ( KMaxProfileNames < i )
+                {
+                User::Leave( KErrBadName );
+                }
+            changed = ETrue;
+            }
+        CleanupStack::PopAndDestroy( profile ); // CS:2
+        }
+
+    // Change setting only if it was changed.
+    if ( changed )
+        {
+        aName.Copy( newName->Des() );
+        }
+
+    // newName, &voipIds
+    CleanupStack::PopAndDestroy( 2, &voipIds ); // CS:0
+    }
+
+// ---------------------------------------------------------------------------
+// Sets temporary codec to RCSE.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::SetCodecToRcseL()
+    {
+    // Nameless codecs are not supported.
+    if ( !iCurrentCodec.iName )
+        {
+        ResetTempCodec();
+        return;
+        }
+
+    CRCSEAudioCodecEntry* entry = CRCSEAudioCodecEntry::NewLC();
+    // First set default values...
+    entry->SetDefaultCodecValueSet( iCurrentCodec.iName->Des() );
+    // ...and then replace them with the ones defined in settings XML.
+    if ( KErrNotFound != iCurrentCodec.iJitterBuffer )
+        {
+        entry->iJitterBufferSize = iCurrentCodec.iJitterBuffer;
+        }
+    if ( KErrNotFound != iCurrentCodec.iPtime )
+        {
+        entry->iPtime = iCurrentCodec.iPtime;
+        }
+    if ( KErrNotFound != iCurrentCodec.iMaxPtime )
+        {
+        entry->iMaxptime = iCurrentCodec.iMaxPtime;
+        }
+    if ( CRCSEAudioCodecEntry::EOONotSet != iCurrentCodec.iOctetAlign )
+        {
+        entry->iOctetAlign = iCurrentCodec.iOctetAlign;
+        }
+    if ( CRCSEAudioCodecEntry::EOONotSet != 
+        iCurrentCodec.iModeChangeNeighbor )
+        {
+        entry->iModeChangeNeighbor = iCurrentCodec.iModeChangeNeighbor;
+        }
+    if ( KErrNotFound != iCurrentCodec.iModeChangePeriod )
+        {
+        entry->iModeChangePeriod = iCurrentCodec.iModeChangePeriod;
+        }
+    if ( KErrNotFound != iCurrentCodec.iMaxRed )
+        {
+        entry->iMaxRed = iCurrentCodec.iMaxRed;
+        }
+    if ( CRCSEAudioCodecEntry::EOONotSet != iCurrentCodec.iVad )
+        {
+        entry->iVAD = iCurrentCodec.iVad;
+        }
+    if ( CRCSEAudioCodecEntry::EOONotSet != iCurrentCodec.iAnnexb )
+        {
+        entry->iAnnexb = iCurrentCodec.iAnnexb;
+        }
+    if ( iCurrentCodec.iModeSet.Count() )
+        {
+        entry->iModeSet.Reset();
+        const TInt count = iCurrentCodec.iModeSet.Count();
+        for ( TInt counter = 0; counter < count; counter++ )
+            {
+            entry->iModeSet.AppendL( iCurrentCodec.iModeSet[counter] );
+            }
+        }
+
+    TUint32 codecId = iCodecRegistry->AddL( *entry );
+    CleanupStack::PopAndDestroy( entry );
+    iEntry->iPreferredCodecs.AppendL( codecId );
+    ResetTempCodec();
+    }
+
+// ---------------------------------------------------------------------------
+// Resets temporary codec settings.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::ResetTempCodec( TBool aCloseArray )
+    {
+    if ( iCurrentCodec.iName )
+        {
+        delete iCurrentCodec.iName;
+        iCurrentCodec.iName = NULL;
+        }
+    iCurrentCodec.iJitterBuffer       = KErrNotFound;
+    iCurrentCodec.iOctetAlign         = CRCSEAudioCodecEntry::EOONotSet;
+    iCurrentCodec.iPtime              = KErrNotFound;
+    iCurrentCodec.iMaxPtime           = KErrNotFound;
+    iCurrentCodec.iModeChangePeriod   = KErrNotFound;
+    iCurrentCodec.iModeChangeNeighbor = CRCSEAudioCodecEntry::EOONotSet;
+    iCurrentCodec.iMaxRed             = KErrNotFound;
+    iCurrentCodec.iVad                = CRCSEAudioCodecEntry::EOONotSet;
+    iCurrentCodec.iAnnexb             = CRCSEAudioCodecEntry::EOONotSet;
+    iCurrentCodec.iModeSet.Reset();
+    if ( aCloseArray )
+        {
+        iCurrentCodec.iModeSet.Close();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Resets temporary service provider settings.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::ResetTempSpSettings()
+    {
+    iSpSettings.iAutoAcceptBuddies = EFalse;
+    iSpSettings.iAutoEnable        = EFalse;
+    iSpSettings.iResubrcribe = KErrNotFound;
+    if ( iSpSettings.iBrandingUri )
+        {
+        delete iSpSettings.iBrandingUri;
+        iSpSettings.iBrandingUri = NULL;
+        }
+    if ( iSpSettings.iListeningUri )
+        {
+        delete iSpSettings.iListeningUri;
+        iSpSettings.iListeningUri = NULL;
+        }
+    if ( iSpSettings.iMwiUri )
+        {
+        delete iSpSettings.iMwiUri;
+        iSpSettings.iMwiUri = NULL;
+        }
+    if ( iSpSettings.iProviderUrl )
+        {
+        delete iSpSettings.iProviderUrl;
+        iSpSettings.iProviderUrl = NULL;
+        }
+    if ( iSpSettings.iBrandId )
+        {
+        delete iSpSettings.iBrandId;
+        iSpSettings.iBrandId = NULL;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Sets SIP related VoIP settings.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::SetSipInfoL( TUint32 aSipId )
+    {
+    // First set SIP information to RCSE so that
+    // an entry in service table will be created.
+    TSettingIds settingIds;
+    settingIds.iProfileType = CRCSEProfileEntry::EProtocolSIP; // SIP.
+    settingIds.iProfileId = aSipId;
+    // Never reference to profile specific settings.
+    settingIds.iProfileSpecificSettingId = KNotSet;
+    iEntry->iIds.AppendL( settingIds );
+    iRegistry->UpdateL( iEntry->iId, *iEntry );
+
+    // After update, we'll need to load the profile again from registry
+    // so that we'll get all the values registry has added to the entry
+    // (UpdateL takes entry as const reference).
+    TUint32 profileId = iEntry->iId;
+    iRegistry->FindL( profileId, *iEntry );
+    iServiceId = iEntry->iServiceProviderId;
+
+    // Compile and set User-Agent header.
+    CSIPManagedProfileRegistry* sipReg = CSIPManagedProfileRegistry::NewLC( 
+        *this ); // CS:1
+    CSIPManagedProfile* sipProf = static_cast<CSIPManagedProfile*>( 
+        sipReg->ProfileL( aSipId ) );
+
+    if ( sipProf )
+        {
+        CleanupStack::PushL( sipProf ); // CS:2
+
+        TBuf8<KMaxUserAgentHeaderLength> userAgentString( KNullDesC8 );
+
+        if ( iEntry->iSIPVoIPUAHTerminalType || 
+            iEntry->iSIPVoIPUAHeaderWLANMAC || 
+            iEntry->iSIPVoIPUAHeaderString.Length() != 0 )
+            {
+            // Set this to be an user-agent param.
+            userAgentString.Append( KUserAgent );
+            userAgentString.Append( KColon );
+            userAgentString.Append( KSpace );
+
+            // Set terminal type if eanbled.
+            if ( iEntry->iSIPVoIPUAHTerminalType )
+                {
+                CIpAppPhoneUtils* util = CIpAppPhoneUtils::NewLC(); // CS:3
+                TBuf<KMaxTerminalTypeLength> terminalType( KNullDesC );
+                util->GetTerminalTypeL( terminalType );
+                userAgentString.Append( terminalType );
+                userAgentString.Append( KSpace );
+                CleanupStack::PopAndDestroy( util ); // CS:2
+                }
+
+            // Set WLAN MAC address if enabled.
+            if ( iEntry->iSIPVoIPUAHeaderWLANMAC )
+                {
+                CIPAppUtilsAddressResolver* resolver = 
+                    CIPAppUtilsAddressResolver::NewLC(); // CS:3
+                _LIT8( KFormatType, "-" );
+                TBuf8<KMaxWlanMacAddressLength> wlanMACAddress( KNullDesC8 );
+                resolver->GetWlanMACAddress( wlanMACAddress, KFormatType );
+                userAgentString.Append( wlanMACAddress );
+                userAgentString.Append( KSpace );
+                CleanupStack::PopAndDestroy( resolver ); // CS:2
+                }
+
+            // Set free string if enabled.
+            if ( iEntry->iSIPVoIPUAHeaderString.Length() )
+                {
+                userAgentString.Append( iEntry->iSIPVoIPUAHeaderString );
+                }
+            }
+
+        // Set new user agent header data to profile.
+        CDesC8ArrayFlat* array = new ( ELeave ) 
+            CDesC8ArrayFlat( KUserAgentHeaderDataArrayInitSize );
+        CleanupStack::PushL( array ); // CS:3
+        array->AppendL( userAgentString );
+        sipProf->SetParameter( KSIPHeaders, *array );
+        sipReg->SaveL( *sipProf );
+        // array, profile
+        CleanupStack::PopAndDestroy( 2, sipProf ); // CS:1
+        }
+    CleanupStack::PopAndDestroy( sipReg ); // CS:0
+    }
+
+// ---------------------------------------------------------------------------
+// Sets SPSettings to service table.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::SetSpSettingsL()
+    {
+    TInt serviceId = iEntry->iServiceProviderId;
+    if ( 0 == serviceId || !iEntry->iIds.Count() )
+        {
+        return;
+        }
+    CSPSettings* spSettings = CSPSettings::NewLC(); // CS:1
+    CSPProperty* property = CSPProperty::NewLC(); // CS:2
+
+    // ==============================
+    // Voice mailbox settings.
+    // ==============================
+    //
+
+    TBool vmbx( EFalse );
+
+    // Set MWI URI if present.
+    if ( iSpSettings.iMwiUri )
+        {
+        property->SetName( ESubPropertyVMBXMWIAddress );
+        property->SetValue( iSpSettings.iMwiUri->Des() );
+        spSettings->AddOrUpdatePropertyL( serviceId, *property );
+        // Set the same value to Listening URI if it has no value.
+        if ( !iSpSettings.iListeningUri )
+            {
+            iSpSettings.iListeningUri = iSpSettings.iMwiUri->Des().AllocL();
+            }
+        vmbx = ETrue;
+        }
+    // If there is no MWI URI but listening URI is present, set it as MWI URI.
+    else if ( iSpSettings.iListeningUri )
+        {
+        property->SetName( ESubPropertyVMBXMWIAddress );
+        property->SetValue( iSpSettings.iListeningUri->Des() );
+        spSettings->AddOrUpdatePropertyL( serviceId, *property );
+        vmbx = ETrue;
+        }
+
+    // Set Listening URI if present. This is a separate statement since 
+    // the Listening URI may have been configured when setting MWI URI.
+    if ( iSpSettings.iListeningUri )
+        {
+        property->SetName( ESubPropertyVMBXListenAddress );
+        property->SetValue( iSpSettings.iListeningUri->Des() );
+        spSettings->AddOrUpdatePropertyL( serviceId, *property );
+        vmbx = ETrue;
+        }
+
+    if ( KErrNotFound != iSpSettings.iResubrcribe )
+        {
+        property->SetName( ESubPropertyVMBXMWISubscribeInterval );
+        property->SetValue( iSpSettings.iResubrcribe );
+        spSettings->AddOrUpdatePropertyL( serviceId, *property );
+        }
+    if ( vmbx )
+        {
+        property->SetName( ESubPropertyVMBXSettingsId );
+        property->SetValue( iEntry->iIds[0].iProfileId );
+        spSettings->AddOrUpdatePropertyL( serviceId, *property );
+        }
+
+    // ==============================
+    // "Core" Service Provider Settings.
+    // ==============================
+    //
+
+    if ( iSpSettings.iProviderUrl )
+        {
+        property->SetName( EPropertyServiceBookmarkUri );
+        property->SetValue( iSpSettings.iProviderUrl->Des() );
+        spSettings->AddOrUpdatePropertyL( serviceId, *property );
+        }
+
+    if ( iSpSettings.iBrandingUri )
+        {
+        property->SetName( ESubPropertyVoIPBrandDataUri );
+        property->SetValue( iSpSettings.iBrandingUri->Des() );
+        spSettings->AddOrUpdatePropertyL( serviceId, *property );
+        }
+
+    if ( iPresenceId )
+        {
+        property->SetName( ESubPropertyPresenceSettingsId );
+        property->SetValue( iPresenceId );
+        spSettings->AddOrUpdatePropertyL( serviceId, *property );
+
+        // Converged Connection Handler (CCH) Presence Subservice plug-in UID
+        property->SetName( EPropertyPresenceSubServicePluginId );
+        property->SetValue( KCCHPresenceSubServicePlugId );
+        spSettings->AddOrUpdatePropertyL( serviceId, *property );
+
+        // SIP IM enabled
+        if ( iSpSettings.iEnableSipIm )
+            {
+            // Set IM as enabled.
+            property->SetName( ESubPropertyIMEnabled );
+            property->SetValue( EOn );
+            spSettings->AddOrUpdatePropertyL( serviceId, *property );
+            // Set IM launch UID.
+            property->SetName( ESubPropertyIMLaunchUid );
+            property->SetValue( KIMLaunchUid );
+            spSettings->AddOrUpdatePropertyL( serviceId, *property );
+            // The value only needs to be different from 0,
+            // no-one actually uses it.
+            property->SetName( ESubPropertyIMSettingsId );
+            property->SetValue( KIMSettingsId );
+            spSettings->AddOrUpdatePropertyL( serviceId, *property );
+            // Set IM plugin UID.
+            property->SetName( EPropertyIMSubServicePluginId );
+            property->SetValue( KIMSubServicePluginId );
+            spSettings->AddOrUpdatePropertyL( serviceId, *property );
+            // Set default IM tone.
+            TFileName toneFile;
+            toneFile.Copy( PathInfo::RomRootPath() );
+            toneFile.Append( PathInfo::DigitalSoundsPath() );
+            toneFile.Append( KDefaultTone );
+            MVIMPSTSettingsStore* vimpStSettings =
+                CVIMPSTSettingsStore::NewLC(); // CS:3
+            vimpStSettings->SetL( serviceId,
+                EServiceToneFileName, toneFile );
+            // Pop vimpStSettings (can't use M object as argument).
+            CleanupStack::PopAndDestroy(); // CS:2
+            }
+        }
+
+    if ( iSpSettings.iAutoAcceptBuddies )
+        {
+        property->SetName( ESubPropertyPresenceRequestPreference );
+        property->SetValue( EOn );
+        spSettings->AddOrUpdatePropertyL( serviceId, *property );
+        }
+
+    if ( iDestinationId )
+        {
+        property->SetName( ESubPropertyVoIPPreferredSNAPId );
+        property->SetValue( iDestinationId );
+        spSettings->AddOrUpdatePropertyL( serviceId, *property );
+        if ( iSpSettings.iEnableSipIm )
+            {
+            property->SetName( ESubPropertyIMPreferredSNAPId );
+            property->SetValue( iDestinationId );
+            spSettings->AddOrUpdatePropertyL( serviceId, *property );
+            }
+        }
+
+    if ( iSpSettings.iBrandId )
+        {
+        // Brand version.
+        property->SetName( EPropertyBrandVersion );
+        property->SetValue( KBrandVersion );
+        spSettings->AddOrUpdatePropertyL( serviceId, *property );
+        // Brand language.
+        property->SetName( EPropertyBrandLanguage );
+        property->SetValue( ELangInternationalEnglish );
+        spSettings->AddOrUpdatePropertyL( serviceId, *property );
+        // Brand ID.
+        property->SetName( EPropertyBrandId );
+        property->SetValue( iSpSettings.iBrandId->Des() );
+        spSettings->AddOrUpdatePropertyL( serviceId, *property );
+        }
+
+    if ( iSpSettings.iAutoEnable )
+        {
+        property->SetName( ESubPropertyVoIPEnabled );
+        property->SetValue( EOn );
+        spSettings->AddOrUpdatePropertyL( serviceId, *property );
+        // Also set voicemailbox on if it's defined.
+        if ( vmbx )
+            {
+            property->SetName( ESubPropertyVMBXEnabled );
+            property->SetValue( EOn );
+            spSettings->AddOrUpdatePropertyL( serviceId, *property );
+            }
+        // Also set presence on if there is a presence link.
+        if ( iPresenceId )
+            {
+            property->SetName( ESubPropertyPresenceEnabled );
+            property->SetValue( EOn );
+            spSettings->AddOrUpdatePropertyL( serviceId, *property );
+            }
+        }
+
+    // property, spSettings
+    CleanupStack::PopAndDestroy( 2, spSettings ); // CS:0
+    }
+
+// ---------------------------------------------------------------------------
+// Creates default codecs.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlVoipHandler::AddDefaultCodecsL()
+    {
+    CRCSEAudioCodecEntry* codec = CRCSEAudioCodecEntry::NewLC();
+
+    TUint32 codecId( KErrNone );
+
+    codec->SetDefaultCodecValueSet( KAudioCodecAMRWB() );
+    codecId = iCodecRegistry->AddL( *codec );
+    iEntry->iPreferredCodecs.AppendL( codecId );
+
+    codec->SetDefaultCodecValueSet( KAudioCodecAMR() );
+    codecId = iCodecRegistry->AddL( *codec );
+    iEntry->iPreferredCodecs.AppendL( codecId );
+
+    codec->SetDefaultCodecValueSet( KAudioCodecPCMU() );
+    codecId = iCodecRegistry->AddL( *codec );
+    iEntry->iPreferredCodecs.AppendL( codecId );
+
+    codec->SetDefaultCodecValueSet( KAudioCodecPCMA() );
+    codecId = iCodecRegistry->AddL( *codec );
+    iEntry->iPreferredCodecs.AppendL( codecId );
+
+    codec->SetDefaultCodecValueSet( KAudioCodeciLBC() );
+    codecId = iCodecRegistry->AddL( *codec );
+    iEntry->iPreferredCodecs.AppendL( codecId );
+
+    codec->SetDefaultCodecValueSet( KAudioCodecG729() );
+    codecId = iCodecRegistry->AddL( *codec );
+    iEntry->iPreferredCodecs.AppendL( codecId );
+
+    codec->SetDefaultCodecValueSet( KAudioCodecCN() );
+    codecId = iCodecRegistry->AddL( *codec );
+    iEntry->iPreferredCodecs.AppendL( codecId );
+
+    CleanupStack::PopAndDestroy( codec );
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlxdmhandler.cpp	Tue Feb 02 00:05:57 2010 +0200
@@ -0,0 +1,218 @@
+/*
+* Copyright (c) 2009-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"
+* 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:  XDM handler for VoIP XML processor
+*
+*/
+
+
+#include <e32cmn.h>
+#include <coecntrl.h>
+#include <xdmsettingsapi.h>
+#include <XdmSettingsCollection.h>
+#include <sysutil.h>
+#include <pathinfo.h>
+#include <Authority16.h>
+#include <stringloader.h>
+#include <escapeutils.h>
+
+#include "voipxmlutils.h"
+#include "voipxmlxdmhandler.h"
+#include "voipxmlprocessorlogger.h"
+#include "voipxmlprocessordefaults.h"
+
+// ---------------------------------------------------------------------------
+// CVoipXmlXdmHandler::CVoipXmlXdmHandler
+// ---------------------------------------------------------------------------
+//
+CVoipXmlXdmHandler::CVoipXmlXdmHandler()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlXdmHandler::NewL
+// ---------------------------------------------------------------------------
+//
+CVoipXmlXdmHandler* CVoipXmlXdmHandler::NewL()
+    {
+    CVoipXmlXdmHandler* self = new ( ELeave ) CVoipXmlXdmHandler;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlXdmHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlXdmHandler::ConstructL()
+    {
+    DBG_PRINT( "CVoipXmlXdmHandler::ConstructL begin" );
+    iProfile = new (ELeave) CXdmSettingsCollection();
+    iProfile->AppendL( KDefaultXdmAuthType, EXdmPropAuthType );
+    iProfile->AppendL( KDefaultXdmUri, EXdmPropUri );
+    DBG_PRINT( "CVoipXmlXdmHandler::ConstructL end" );
+    }
+
+// ---------------------------------------------------------------------------
+// CVoipXmlXdmHandler::~CVoipXmlXdmHandler
+// ---------------------------------------------------------------------------
+//
+CVoipXmlXdmHandler::~CVoipXmlXdmHandler()
+    {
+    delete iProfile;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets XDM setting.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlXdmHandler::SetSetting( TInt aParam, const TDesC& aValue )
+    {
+    // Ignore too long descriptors.
+    if ( KMaxNodeValueLength < aValue.Length() )
+        {
+        return;
+        }
+
+    TRAP_IGNORE( SetSettingL( aParam, aValue ) );
+    }
+
+// ---------------------------------------------------------------------------
+// Stores settings through XDM settings API.
+// ---------------------------------------------------------------------------
+//
+TInt CVoipXmlXdmHandler::StoreSettings()
+    {
+    if ( !iSettingsSet )
+        {
+        // No settings to be stored => method not supported.
+        return KErrNotSupported;
+        }
+    TRAPD( err, iProfileId = TXdmSettingsApi::CreateCollectionL( *iProfile ));
+    if ( KErrNone != err )
+        {
+        err = KErrCompletion;
+        }
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the profile ID if the profile saved in StoreSettings.
+// ---------------------------------------------------------------------------
+//
+TUint32 CVoipXmlXdmHandler::SettingsId()
+    {
+    return iProfileId;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets XDM setting.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlXdmHandler::SetSettingL( TInt aParam, const TDesC& aValue )
+    {
+    switch ( aParam )
+        {
+        case EName:
+            {
+            TBuf<KMaxNodeValueLength> name( KNullDesC );
+            name.Copy( aValue );
+            CreateProviderNameL( name );
+            iProfile->AppendL( name, EXdmPropName );
+            iSettingsSet = ETrue;
+            break;
+            }
+        case EType:
+            {
+            // First remove default value.
+            iProfile->RemoveL( EXdmPropAuthType );
+            iProfile->AppendL( aValue, EXdmPropAuthType );
+            iSettingsSet = ETrue;
+            break;
+            }
+        case EUri:
+            {
+            // First remove default value.
+            iProfile->RemoveL( EXdmPropUri );
+            iProfile->AppendL( aValue, EXdmPropUri );
+            iSettingsSet = ETrue;
+            break;
+            }
+        case EUsername:
+            {
+            iProfile->AppendL( aValue, EXdmPropAuthName );
+            iSettingsSet = ETrue;
+            break;
+            }
+        case EPassword:
+            {
+            iProfile->AppendL( aValue, EXdmPropAuthSecret );
+            iSettingsSet = ETrue;
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Checks for duplicate named XDM sets. Renames if same.
+// ---------------------------------------------------------------------------
+//
+void CVoipXmlXdmHandler::CreateProviderNameL( TDes& aName )
+    {
+    DBG_PRINT( "CVoipXmlXdmHandler::CreateProviderNameL begin" );
+
+    RArray<TInt> settingIds;
+    CleanupClosePushL( settingIds ); // CS:1
+    // CS:2
+    CDesCArray* names = TXdmSettingsApi::CollectionNamesLC( settingIds );
+
+    HBufC* newName = HBufC::NewLC( KMaxNodeNameLength ); // CS:3
+    newName->Des().Copy( aName );
+    const TInt count( names->MdcaCount() );
+    TUint i( 1 ); // Add number to the name if name already in use.
+
+    // Go through each profile and see if the name of the new profile    
+    // matches one of the existing names. If it does change it and
+    // check the new name again.
+    for ( TInt counter = 0; counter < count; counter++ )
+        {
+        TBuf<KMaxNodeValueLength> loadedName;
+        loadedName.Copy( names->MdcaPoint( counter ));
+        if ( 0 == newName->Des().Compare( loadedName ) )
+            {
+            // If the name is changed we need to begin the comparison
+            // again from the first profile.
+            newName->Des().Copy( aName );
+            newName->Des().Append( KOpenParenthesis() );
+            newName->Des().AppendNum( i );
+            newName->Des().Append( KClosedParenthesis() );  
+            counter = 0;
+            i++;
+            if ( KMaxProfileNames < i )
+                {
+                User::Leave( KErrBadName );
+                }
+            }
+        }
+    aName.Copy( newName->Des() );
+
+    // newName, names, &settingIds
+    CleanupStack::PopAndDestroy( 3, &settingIds );
+    DBG_PRINT( "CVoipXmlXdmHandler::CreateProviderNameL end" );
+    }
+
+// End of file.