bluetoothengine/btnotif/btnotifsrv/src/btnotifdeviceselector.cpp
changeset 42 b72428996822
parent 31 a0ea99b6fa53
child 47 9e2a905b887f
--- a/bluetoothengine/btnotif/btnotifsrv/src/btnotifdeviceselector.cpp	Fri May 28 17:03:06 2010 +0300
+++ b/bluetoothengine/btnotif/btnotifsrv/src/btnotifdeviceselector.cpp	Mon Jul 12 18:51:05 2010 +0300
@@ -26,6 +26,8 @@
 #include "btnotifserver.h"
 #include "btnotificationmanager.h"
 #include "btnotifclientserver.h"
+// Key description length
+const TInt KMaxKeyDesCLength  = 20;
 
 // ======== MEMBER FUNCTIONS ========
 
@@ -187,8 +189,8 @@
                 devParams().SetDeviceClass(iDevices[val]->Device().DeviceClass());
                 devParams().SetDeviceName(iDevices[val]->Alias());
                 err = iMessage.Write( EBTNotifSrvReplySlot, devParams );
+                iNotification->RemoveObserver();
                 iNotification->Close(); // Also dequeues the notification from the queue.
-                iNotification->RemoveObserver();
                 iNotification = NULL;                
                 }
             iMessage.Complete( err );
@@ -208,8 +210,8 @@
         }
     else if(aData.Keys().MdcaPoint(0).Compare(_L("MoreDevices"))==KErrNone)
         {
+        iNotification->RemoveObserver();
         iNotification->Close(); // Also dequeues the notification from the queue.
-        iNotification->RemoveObserver();
         iNotification = NULL;
         iDevices.ResetAndDestroy();
         TRAP_IGNORE( {
@@ -243,8 +245,13 @@
     CBtDevExtension* devext = CBtDevExtension::NewLC( aAddr, aName );
     iDevices.AppendL( devext );
     CleanupStack::Pop( devext );
+    
+    if(iNotification)
+        {// conditional check required as CAdvanceDevDiscoverer sends discovered devices at times
+         // even after canceldiscovery is issued and notification is set to NULL
+         // this causes EExcDataAbort
     CHbSymbianVariantMap* map = iNotification->Data();
-    TBuf<8> keyStr;
+        TBuf<KMaxKeyDesCLength> keyStr;
     CHbSymbianVariant* devEntry;
 
     keyStr.Num( TBluetoothDialogParams::EDialogExt + iDevices.Count() - 1 );
@@ -252,6 +259,7 @@
             CHbSymbianVariant::EDes );
     map->Add( keyStr, devEntry );
     iNotification->Update();
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -262,10 +270,11 @@
     {
     (void) aErr;
     CHbSymbianVariantMap* map = iNotification->Data();
-    TBuf<25> keyStr;
+    TBuf<KMaxKeyDesCLength> keyStr;
     
 
     //TODO compile fail here we need to send the discovery completed text to the dialog 
+    //TODO change the hardcoded string
     keyStr.Copy(_L("Search Completed"));
     CHbSymbianVariant* devEntry( NULL );
     TRAP_IGNORE( devEntry = CHbSymbianVariant::NewL( (TAny*) &(keyStr), 
@@ -345,6 +354,11 @@
     TBTDialogResourceId aResourceId )
     {
     BOstraceFunctionEntry0( DUMMY_DEVLIST );
+    if(iNotification)
+        {
+        iNotification->RemoveObserver();
+        iNotification = NULL;
+        }
     iNotification = iServer.NotificationManager()->GetNotification();
     User::LeaveIfNull( iNotification ); // For OOM exception, leaves with KErrNoMemory
     iNotification->SetObserver( this );
@@ -367,7 +381,7 @@
             {
             iDevices.AppendL( devArray[i]->CopyL() );
             CHbSymbianVariantMap* map = iNotification->Data();
-            TBuf<8> keyStr;
+            TBuf<KMaxKeyDesCLength> keyStr;
             CHbSymbianVariant* devEntry;
 
             keyStr.Num( TBluetoothDialogParams::EDialogExt + iDevices.Count() - 1 );