convergedconnectionhandler/cchclientapi/src/cchuiconnectionhandler.cpp
branchRCL_3
changeset 16 df4dfb214df5
parent 11 6134b5029079
--- a/convergedconnectionhandler/cchclientapi/src/cchuiconnectionhandler.cpp	Tue May 25 12:31:20 2010 +0300
+++ b/convergedconnectionhandler/cchclientapi/src/cchuiconnectionhandler.cpp	Wed Jun 09 09:31:04 2010 +0300
@@ -25,6 +25,8 @@
 #include <cmconnectionmethodext.h>
 #include <WEPSecuritySettingsUI.h>
 #include <WPASecuritySettingsUI.h>
+#include <cmmanager.h>
+#include <cmpluginpacketdatadef.h>
 
 #include "cchuilogger.h"
 #include "cchuicchhandler.h"
@@ -610,7 +612,74 @@
     
     CCHUIDEBUG( "CCchUiConnectionHandler::SetSnapToUseL - OUT" );
     } 
+
+// ---------------------------------------------------------------------------
+// CCchUiConnectionHandler::ConnectionMethodAlreadyExistsL
+// ---------------------------------------------------------------------------
+//
+TBool CCchUiConnectionHandler::ConnectionMethodAlreadyExistsL(
+    TUint32 aIapId, RCmDestinationExt& aTargetSnap ) const
+    {
+    CCHUIDEBUG( "CCchUiConnectionHandler::ConnectionMethodAlreadyExistsL - IN" );
     
+    TBool returnVal = EFalse;
+    TInt conMethodCount = aTargetSnap.ConnectionMethodCount();
+
+    for ( TInt i( 0 ) ; i < conMethodCount && !returnVal; i ++ )
+        {
+        RCmConnectionMethodExt cm = aTargetSnap.ConnectionMethodL( i );
+        CleanupClosePushL( cm );
+        
+        TUint32 bearerType = cm.GetIntAttributeL( CMManager::ECmBearerType );
+        if ( bearerType == iCmManagerExt.GetConnectionMethodInfoIntL(
+            aIapId, CMManager::ECmBearerType ) )
+            {
+            HBufC* buffer = NULL;
+            HBufC* bufferToCompare = NULL;
+            
+            switch( bearerType )
+                {
+                case KUidWlanBearerType:
+                    CCHUIDEBUG( "ConnectionMethodAlreadyExistsL - KUidWlanBearerType" );
+                    buffer = iCmManagerExt.GetConnectionMethodInfoStringL(
+                        aIapId, CMManager::EWlanSSID );
+                    CleanupStack::PushL( buffer );
+                    bufferToCompare =
+                        cm.GetStringAttributeL( CMManager::EWlanSSID );
+                    if ( buffer->Compare( *bufferToCompare ) == 0 )
+                        {
+                        returnVal = ETrue;
+                        }
+                    CleanupStack::PopAndDestroy( buffer );
+                    delete bufferToCompare;
+                    bufferToCompare = NULL;
+                    break;
+                case KUidPacketDataBearerType:
+                    CCHUIDEBUG( "ConnectionMethodAlreadyExistsL - KUidPacketDataBearerType" );
+                    buffer = iCmManagerExt.GetConnectionMethodInfoStringL(
+                        aIapId, CMManager::EPacketDataAPName );
+                    CleanupStack::PushL( buffer );
+                    bufferToCompare =
+                        cm.GetStringAttributeL( CMManager::EPacketDataAPName );
+                    if ( buffer->Compare( *bufferToCompare ) == 0 )
+                        {
+                        returnVal = ETrue;
+                        }
+                    CleanupStack::PopAndDestroy( buffer );
+                    delete bufferToCompare;
+                    bufferToCompare = NULL;
+                    break;
+                default:
+                    break;
+                }
+            }
+        CleanupStack::PopAndDestroy( &cm );
+        }
+    CCHUIDEBUG2( "CCchUiConnectionHandler::ConnectionMethodAlreadyExistsL - return = %d", returnVal );
+    
+    return returnVal;
+    }
+
 // ---------------------------------------------------------------------------
 // Copies specific iap from specific snap to target snap
 // ---------------------------------------------------------------------------
@@ -642,38 +711,26 @@
         {
         CleanupClosePushL( targetSnap );
         }
-    CCHUIDEBUG( "CopyIapToServiceSnapL - Get source connection");    
     
-    RCmConnectionMethodExt sourceConn = 
-        iCmManagerExt.ConnectionMethodL( aSourceIap );       
-    CleanupClosePushL( sourceConn );
-    
-    TInt conMethodCount = targetSnap.ConnectionMethodCount();
-    TUint32 sourceIapId = sourceConn.GetIntAttributeL( CMManager::ECmIapId );
-    TBool matchFound( EFalse );
-    
-    for ( TInt ndx = 0 ; ndx < conMethodCount && matchFound == 0; ndx ++ )
-        {
-        RCmConnectionMethodExt cm = targetSnap.ConnectionMethodL( ndx );
-        CleanupClosePushL( cm );
-        
-        TUint32 targetIapId = cm.GetIntAttributeL( CMManager::ECmIapId );
-        
-        if( targetIapId == sourceIapId )
-            {
-            matchFound = ETrue;
-            }
-        CleanupStack::PopAndDestroy( &cm );
-        }
-    if( !matchFound )
+    if( !ConnectionMethodAlreadyExistsL( aSourceIap, targetSnap ) )
         {
         CCHUIDEBUG( 
-          "CopyIapToServiceSnapL - Get source connection ok -> add connection");
+            "CopyIapToServiceSnapL - connection not exists -> add connection" );
+        
+        RCmConnectionMethodExt sourceConn = 
+            iCmManagerExt.ConnectionMethodL( aSourceIap );       
+        CleanupClosePushL( sourceConn );
         
-        targetSnap.AddConnectionMethodL( sourceConn.CreateCopyL() );
+        RCmConnectionMethodExt newConnection = sourceConn.CreateCopyL();
+        CleanupClosePushL( newConnection );
+        targetSnap.AddConnectionMethodL( newConnection );
+        CleanupStack::PopAndDestroy( &newConnection );
+        CleanupStack::PopAndDestroy( &sourceConn );
+        
+        targetSnap.UpdateL();
         }
-    CleanupStack::PopAndDestroy( &sourceConn );
-    CleanupStack::PopAndDestroy( &targetSnap );      
+    
+    CleanupStack::PopAndDestroy( &targetSnap ); 
     
     CCHUIDEBUG( "CCchUiConnectionHandler::CopyIapToServiceSnapL - OUT" );
     }