cmmanager/cmmgr/cmmserver/src/cmmconnmethodinstance.cpp
changeset 40 c5b848e6c7d1
parent 30 8dde790cab74
child 44 a0c4ceac30d0
--- a/cmmanager/cmmgr/cmmserver/src/cmmconnmethodinstance.cpp	Thu May 27 14:35:19 2010 +0300
+++ b/cmmanager/cmmgr/cmmserver/src/cmmconnmethodinstance.cpp	Thu Jun 10 16:00:16 2010 +0300
@@ -144,7 +144,7 @@
 // Set connection method ID.
 // ---------------------------------------------------------------------------
 //
-void CCmmConnMethodInstance::SetId( const TUint32& aConnMethodId )
+void CCmmConnMethodInstance::SetId( const TUint32 aConnMethodId )
     {
     OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_SETID_ENTRY );
 
@@ -175,7 +175,7 @@
 // Set handle ID.
 // ---------------------------------------------------------------------------
 //
-void CCmmConnMethodInstance::SetHandle( const TInt& aHandle )
+void CCmmConnMethodInstance::SetHandle( const TInt aHandle )
     {
     iHandle = aHandle;
     }
@@ -242,7 +242,12 @@
         User::Leave( KErrCorrupt );
         }
 
-    iPlugin->GetPluginDataL( iPluginDataInstance ); //TODO, check deletes for iPluginDataInstance
+    // Embedded destination does not have any data.
+    if ( !IsEmbeddedDestination() )
+        {
+        iPlugin->GetPluginDataL( iPluginDataInstance );
+        }
+
     aConnMethodStruct->IncrementReferenceCounter();
 
     switch ( aConnMethodStruct->GetStatus() )
@@ -271,7 +276,7 @@
 // CCmmConnMethodInstance::GetIntAttributeL
 // ---------------------------------------------------------------------------
 //
-TUint32 CCmmConnMethodInstance::GetIntAttributeL( const TUint32& aAttribute )
+TUint32 CCmmConnMethodInstance::GetIntAttributeL( const TUint32 aAttribute )
     {
     OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_GETINTATTRIBUTEL_ENTRY );
 
@@ -280,6 +285,26 @@
         User::Leave( KErrCorrupt );
         }
 
+    // Embedded destination has only limited set of attributes.
+    if ( IsEmbeddedDestination() )
+        {
+        switch ( aAttribute )
+            {
+            case CMManager::ECmId:
+            case CMManager::ECmBearerType:
+            case CMManager::ECmDefaultPriority:
+            case CMManager::ECmDefaultUiPriority:
+            case ECmExtensionLevel:
+                {
+                break;
+                }
+            default:
+                {
+                User::Leave( KErrNotSupported );
+                }
+            }
+        }
+
     TUint32 result = iPlugin->GetIntAttributeL( aAttribute, iPluginDataInstance );
 
     OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_GETINTATTRIBUTEL_EXIT );
@@ -290,7 +315,7 @@
 // CCmmConnMethodInstance::GetBoolAttributeL
 // ---------------------------------------------------------------------------
 //
-TBool CCmmConnMethodInstance::GetBoolAttributeL( const TUint32& aAttribute )
+TBool CCmmConnMethodInstance::GetBoolAttributeL( const TUint32 aAttribute )
     {
     OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_GETBOOLATTRIBUTEL_ENTRY );
 
@@ -299,6 +324,27 @@
         User::Leave( KErrCorrupt );
         }
 
+    // Embedded destination has only limited set of attributes.
+    if ( IsEmbeddedDestination() )
+        {
+        switch ( aAttribute )
+            {
+            case CMManager::ECmCoverage:
+            case CMManager::ECmDestination:
+            case CMManager::ECmProtected:
+            case CMManager::ECmHidden:
+            case CMManager::ECmBearerHasUi:
+            case CMManager::ECmVirtual:
+                {
+                break;
+                }
+            default:
+                {
+                User::Leave( KErrNotSupported );
+                }
+            }
+        }
+
     TBool retVal( EFalse );
     switch ( aAttribute )
         {
@@ -306,16 +352,40 @@
             {
             if ( GetId() > 0 )
                 {
-                if ( iCache )
+                // Check first if this is embedded destination.
+                retVal = iPlugin->GetBoolAttributeL( CMManager::ECmDestination,
+                        iPluginDataInstance );
+                if ( retVal )
                     {
-                    retVal = iCache->CheckIfCmConnected( GetId() );
+                    retVal = iCache->DestinationConnectedL( GetId() );
+                    }
+                else
+                    {
+                    if ( iCache )
+                        {
+                        retVal = iCache->CheckIfCmConnected( GetId() );
+                        }
                     }
                 }
             }
             break;
         case CMManager::ECmIsLinked:
             {
-            //TODO
+            // Does any virtual iap point to this connection method.
+            // Check first if this connection method is an embedded destination.
+            if ( GetId() > 0 )
+                {
+                retVal = iPlugin->GetBoolAttributeL( CMManager::ECmDestination,
+                        iPluginDataInstance );
+                if ( retVal )
+                    {
+                    retVal = iCache->DestinationPointedToByVirtualIap( GetId() );
+                    }
+                else
+                    {
+                    retVal = iCache->ConnMethodPointedToByVirtualIap( GetId() );
+                    }
+                }
             }
             break;
         default:
@@ -333,7 +403,7 @@
 // CCmmConnMethodInstance::GetStringAttributeL
 // ---------------------------------------------------------------------------
 //
-HBufC* CCmmConnMethodInstance::GetStringAttributeL( const TUint32& aAttribute )
+HBufC* CCmmConnMethodInstance::GetStringAttributeL( const TUint32 aAttribute )
     {
     OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_GETSTRINGATTRIBUTEL_ENTRY );
 
@@ -342,6 +412,12 @@
         User::Leave( KErrCorrupt );
         }
 
+    // Embedded destination has only limited set of attributes.
+    if ( IsEmbeddedDestination() )
+        {
+        User::Leave( KErrNotSupported );
+        }
+
     HBufC* result = iPlugin->GetStringAttributeL( aAttribute, iPluginDataInstance );
 
     OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_GETSTRINGATTRIBUTEL_EXIT );
@@ -352,7 +428,7 @@
 // CCmmConnMethodInstance::GetString8AttributeL
 // ---------------------------------------------------------------------------
 //
-HBufC8* CCmmConnMethodInstance::GetString8AttributeL( const TUint32& aAttribute )
+HBufC8* CCmmConnMethodInstance::GetString8AttributeL( const TUint32 aAttribute )
     {
     OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_GETSTRING8ATTRIBUTEL_ENTRY );
 
@@ -361,6 +437,12 @@
         User::Leave( KErrCorrupt );
         }
 
+    // Embedded destination has only limited set of attributes.
+    if ( IsEmbeddedDestination() )
+        {
+        User::Leave( KErrNotSupported );
+        }
+
     HBufC8* result = iPlugin->GetString8AttributeL( aAttribute, iPluginDataInstance );
 
     OstTraceFunctionExit0( CCMMCONNMETHODINSTANCE_GETSTRING8ATTRIBUTEL_EXIT );
@@ -372,8 +454,8 @@
 // ---------------------------------------------------------------------------
 //
 void CCmmConnMethodInstance::SetIntAttributeL(
-        const TUint32& aAttribute,
-        const TUint32& aValue )
+        const TUint32 aAttribute,
+        const TUint32 aValue )
     {
     OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_SETINTATTRIBUTEL_ENTRY );
 
@@ -392,8 +474,8 @@
 // ---------------------------------------------------------------------------
 //
 void CCmmConnMethodInstance::SetBoolAttributeL(
-        const TUint32& aAttribute,
-        const TBool& aValue )
+        const TUint32 aAttribute,
+        const TBool aValue )
     {
     OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_SETBOOLATTRIBUTEL_ENTRY );
 
@@ -412,7 +494,7 @@
 // ---------------------------------------------------------------------------
 //
 void CCmmConnMethodInstance::SetStringAttributeL(
-        const TUint32& aAttribute,
+        const TUint32 aAttribute,
         const TDesC16& aValue )
     {
     OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_SETSTRINGATTRIBUTEL_ENTRY );
@@ -432,7 +514,7 @@
 // ---------------------------------------------------------------------------
 //
 void CCmmConnMethodInstance::SetString8AttributeL(
-        const TUint32& aAttribute,
+        const TUint32 aAttribute,
         const TDesC8& aValue )
     {
     OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_SETSTRING8ATTRIBUTEL_ENTRY );
@@ -481,7 +563,7 @@
 // connection method structure to reflect the new deleted state.
 // ---------------------------------------------------------------------------
 //
-void CCmmConnMethodInstance::DeleteSuccessful( const TUint32& aNewSecondaryId )
+void CCmmConnMethodInstance::DeleteSuccessful( const TUint32 aNewSecondaryId )
     {
     OstTraceFunctionEntry0( CCMMCONNMETHODINSTANCE_DELETESUCCESSFUL_ENTRY );
 
@@ -516,7 +598,7 @@
 // ---------------------------------------------------------------------------
 //
 void CCmmConnMethodInstance::RemoveConnMethodFromSessionDestinationHandles(
-        const TUint32& aConnMethodId )
+        const TUint32 aConnMethodId )
     {
     if ( iCmmSession )
         {