bluetoothengine/bteng/src/btengpairman.cpp
branchRCL_3
changeset 8 0707dd69d236
parent 0 f63038272f30
child 9 a42ed326b458
--- a/bluetoothengine/bteng/src/btengpairman.cpp	Fri Feb 19 22:59:18 2010 +0200
+++ b/bluetoothengine/bteng/src/btengpairman.cpp	Fri Mar 12 15:43:23 2010 +0200
@@ -134,6 +134,10 @@
         iPairingServ->Close();
         delete iPairingServ;
         }
+    if ( !iMessage.IsNull() )
+        {
+        iMessage.Complete( KErrCancel );
+        }
     TRACE_FUNC_EXIT
     }
 
@@ -156,14 +160,24 @@
             }
         case EBTEngPairDevice:
             {
+            if ( !iMessage.IsNull() )
+                {
+                User::Leave( KErrServerBusy );
+                }
             TBTDevAddrPckgBuf addrPkg;
             aMessage.ReadL( KBTEngAddrSlot, addrPkg );
             PairDeviceL( addrPkg(), aMessage.Int1() );
+            iMessage = RMessage2( aMessage );
             break;
             }
         case EBTEngCancelPairDevice:
             {
-            CancelCommand( opcode );
+            // Only the client who requested pairing can cancel it:
+            if ( !iMessage.IsNull() && aMessage.Session() == iMessage.Session() )
+                {
+                iPairer->CancelOutgoingPair();
+                iMessage.Complete( KErrCancel );
+                }
             break;
             }
         default:
@@ -177,27 +191,6 @@
     }
 
 // ---------------------------------------------------------------------------
-// Cancels outgoing pairing requests
-// ---------------------------------------------------------------------------
-//
-void CBTEngPairMan::CancelCommand( TInt aOpCode )
-    {
-    switch( aOpCode )
-        {
-        case EBTEngPairDevice:
-            {
-            TRACE_FUNC_ENTRY
-            if ( iPairer )
-                {
-                iPairer->CancelOutgoingPair();
-                }
-            TRACE_FUNC_EXIT
-            break;
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
 // Handle a change in BTRegistry remote devices table.
 // ---------------------------------------------------------------------------
 //
@@ -228,7 +221,7 @@
 //
 RSocketServ& CBTEngPairMan::SocketServ()
     {
-    return iServer.SocketServ();
+    return iServer.SocketServer();
     }
 
 // ---------------------------------------------------------------------------
@@ -237,7 +230,7 @@
 //
 RBTRegServ& CBTEngPairMan::BTRegServ()
     {
-    return iServer.BTRegServ();
+    return iServer.RegistrServer();
     }
 
 // ---------------------------------------------------------------------------
@@ -265,13 +258,23 @@
         aErr = KErrNone;
         }
     // we must complete client's pairing request:
-    iServer.iSessionIter.SetToLast();
-    CBTEngSrvSession* session = (CBTEngSrvSession*) iServer.iSessionIter--;
-    TInt ret( KErrNotFound );
-    while( session && ret )
+    if ( !iMessage.IsNull()  )
         {
-        ret = session->CompletePairRequest( aErr );
-        session = (CBTEngSrvSession*) iServer.iSessionIter--;
+        iMessage.Complete( aErr );
+        }
+    TRACE_FUNC_EXIT
+    }
+
+// ---------------------------------------------------------------------------
+// A session will be ended, completes the pending request for this session.
+// ---------------------------------------------------------------------------
+//
+void CBTEngPairMan::SessionClosed( CSession2* aSession )
+    {
+    TRACE_FUNC_ARG( ( _L( " session %x"), aSession ) )
+    if ( !iMessage.IsNull() && iMessage.Session() == aSession )
+        {
+        iMessage.Complete( KErrCancel );
         }
     TRACE_FUNC_EXIT
     }