diff -r 6a29d5ad0713 -r 0707dd69d236 bluetoothengine/bteng/src/btengpairman.cpp --- 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 }