bluetoothengine/bteng/src/btengpairman.cpp
branchRCL_3
changeset 10 0707dd69d236
parent 0 f63038272f30
child 11 a42ed326b458
equal deleted inserted replaced
6:6a29d5ad0713 10:0707dd69d236
   132     if ( iPairingServ )
   132     if ( iPairingServ )
   133         {
   133         {
   134         iPairingServ->Close();
   134         iPairingServ->Close();
   135         delete iPairingServ;
   135         delete iPairingServ;
   136         }
   136         }
       
   137     if ( !iMessage.IsNull() )
       
   138         {
       
   139         iMessage.Complete( KErrCancel );
       
   140         }
   137     TRACE_FUNC_EXIT
   141     TRACE_FUNC_EXIT
   138     }
   142     }
   139 
   143 
   140 // ---------------------------------------------------------------------------
   144 // ---------------------------------------------------------------------------
   141 // Handles pairing related commands from BTEng clients.
   145 // Handles pairing related commands from BTEng clients.
   154             SetPairObserver( addrPkg(), aMessage.Int1() );
   158             SetPairObserver( addrPkg(), aMessage.Int1() );
   155             break;
   159             break;
   156             }
   160             }
   157         case EBTEngPairDevice:
   161         case EBTEngPairDevice:
   158             {
   162             {
       
   163             if ( !iMessage.IsNull() )
       
   164                 {
       
   165                 User::Leave( KErrServerBusy );
       
   166                 }
   159             TBTDevAddrPckgBuf addrPkg;
   167             TBTDevAddrPckgBuf addrPkg;
   160             aMessage.ReadL( KBTEngAddrSlot, addrPkg );
   168             aMessage.ReadL( KBTEngAddrSlot, addrPkg );
   161             PairDeviceL( addrPkg(), aMessage.Int1() );
   169             PairDeviceL( addrPkg(), aMessage.Int1() );
       
   170             iMessage = RMessage2( aMessage );
   162             break;
   171             break;
   163             }
   172             }
   164         case EBTEngCancelPairDevice:
   173         case EBTEngCancelPairDevice:
   165             {
   174             {
   166             CancelCommand( opcode );
   175             // Only the client who requested pairing can cancel it:
       
   176             if ( !iMessage.IsNull() && aMessage.Session() == iMessage.Session() )
       
   177                 {
       
   178                 iPairer->CancelOutgoingPair();
       
   179                 iMessage.Complete( KErrCancel );
       
   180                 }
   167             break;
   181             break;
   168             }
   182             }
   169         default:
   183         default:
   170             {
   184             {
   171             TRACE_INFO( ( _L( "CBTEngPairMan ProcessCommandL: bad request (%d)" ), 
   185             TRACE_INFO( ( _L( "CBTEngPairMan ProcessCommandL: bad request (%d)" ), 
   175         }
   189         }
   176     TRACE_FUNC_EXIT    
   190     TRACE_FUNC_EXIT    
   177     }
   191     }
   178 
   192 
   179 // ---------------------------------------------------------------------------
   193 // ---------------------------------------------------------------------------
   180 // Cancels outgoing pairing requests
       
   181 // ---------------------------------------------------------------------------
       
   182 //
       
   183 void CBTEngPairMan::CancelCommand( TInt aOpCode )
       
   184     {
       
   185     switch( aOpCode )
       
   186         {
       
   187         case EBTEngPairDevice:
       
   188             {
       
   189             TRACE_FUNC_ENTRY
       
   190             if ( iPairer )
       
   191                 {
       
   192                 iPairer->CancelOutgoingPair();
       
   193                 }
       
   194             TRACE_FUNC_EXIT
       
   195             break;
       
   196             }
       
   197         }
       
   198     }
       
   199 
       
   200 // ---------------------------------------------------------------------------
       
   201 // Handle a change in BTRegistry remote devices table.
   194 // Handle a change in BTRegistry remote devices table.
   202 // ---------------------------------------------------------------------------
   195 // ---------------------------------------------------------------------------
   203 //
   196 //
   204 void CBTEngPairMan::RemoteRegistryChangeDetected()
   197 void CBTEngPairMan::RemoteRegistryChangeDetected()
   205     {
   198     {
   226 // Access the reference of RSockServ
   219 // Access the reference of RSockServ
   227 // ---------------------------------------------------------------------------
   220 // ---------------------------------------------------------------------------
   228 //
   221 //
   229 RSocketServ& CBTEngPairMan::SocketServ()
   222 RSocketServ& CBTEngPairMan::SocketServ()
   230     {
   223     {
   231     return iServer.SocketServ();
   224     return iServer.SocketServer();
   232     }
   225     }
   233 
   226 
   234 // ---------------------------------------------------------------------------
   227 // ---------------------------------------------------------------------------
   235 // Access the reference of RBTRegSrv
   228 // Access the reference of RBTRegSrv
   236 // ---------------------------------------------------------------------------
   229 // ---------------------------------------------------------------------------
   237 //
   230 //
   238 RBTRegServ& CBTEngPairMan::BTRegServ()
   231 RBTRegServ& CBTEngPairMan::BTRegServ()
   239     {
   232     {
   240     return iServer.BTRegServ();
   233     return iServer.RegistrServer();
   241     }
   234     }
   242 
   235 
   243 // ---------------------------------------------------------------------------
   236 // ---------------------------------------------------------------------------
   244 // Deletes the current pairing handler and transfer the responsibility
   237 // Deletes the current pairing handler and transfer the responsibility
   245 // to the specified.
   238 // to the specified.
   263     if ( aErr == KHCIErrorBase )
   256     if ( aErr == KHCIErrorBase )
   264         {
   257         {
   265         aErr = KErrNone;
   258         aErr = KErrNone;
   266         }
   259         }
   267     // we must complete client's pairing request:
   260     // we must complete client's pairing request:
   268     iServer.iSessionIter.SetToLast();
   261     if ( !iMessage.IsNull()  )
   269     CBTEngSrvSession* session = (CBTEngSrvSession*) iServer.iSessionIter--;
   262         {
   270     TInt ret( KErrNotFound );
   263         iMessage.Complete( aErr );
   271     while( session && ret )
   264         }
   272         {
   265     TRACE_FUNC_EXIT
   273         ret = session->CompletePairRequest( aErr );
   266     }
   274         session = (CBTEngSrvSession*) iServer.iSessionIter--;
   267 
       
   268 // ---------------------------------------------------------------------------
       
   269 // A session will be ended, completes the pending request for this session.
       
   270 // ---------------------------------------------------------------------------
       
   271 //
       
   272 void CBTEngPairMan::SessionClosed( CSession2* aSession )
       
   273     {
       
   274     TRACE_FUNC_ARG( ( _L( " session %x"), aSession ) )
       
   275     if ( !iMessage.IsNull() && iMessage.Session() == aSession )
       
   276         {
       
   277         iMessage.Complete( KErrCancel );
   275         }
   278         }
   276     TRACE_FUNC_EXIT
   279     TRACE_FUNC_EXIT
   277     }
   280     }
   278 
   281 
   279 // ---------------------------------------------------------------------------
   282 // ---------------------------------------------------------------------------