connectivitylayer/isce/isaaccessextension_dll/src/router.cpp
changeset 8 6295dc2169f3
parent 7 fa67e03b87df
equal deleted inserted replaced
7:fa67e03b87df 8:6295dc2169f3
   254             {
   254             {
   255 #endif
   255 #endif
   256             iChannelTable[ aChannelId ].iChannel = NULL;
   256             iChannelTable[ aChannelId ].iChannel = NULL;
   257             iChannelTable[ aChannelId ].iWaitingChannel = NULL;
   257             iChannelTable[ aChannelId ].iWaitingChannel = NULL;
   258             iChannelTable[ aChannelId ].iType = ENormalOpen;
   258             iChannelTable[ aChannelId ].iType = ENormalOpen;
   259             const TInt indicationCancelOrderSize( 2 );
   259             if( iConnectionStatus == EIADConnectionOk )
   260             TDes8& cancelOrder = AllocateBlock( indicationCancelOrderSize );
   260                 {
   261             cancelOrder.Append( 0x00 );
   261                 const TInt indicationCancelOrderSize( 2 );
   262             cancelOrder.Append( 0x00 );
   262                 TDes8& cancelOrder = AllocateBlock( indicationCancelOrderSize );
   263             // Order internally, so no return values above ::Close { 0x00, 0x00 } 8-bit cancel indication.
   263                 cancelOrder.Append( 0x00 );
   264             TInt error( OrderIndication( cancelOrder, aChannelId, EFalse ) );
   264                 cancelOrder.Append( 0x00 );
   265             C_TRACE( ( _T( "DRouter::Close open->close indication order returned %d 0x%x" ), error, aChannelId ) );
   265                 // Order internally, so no return values above ::Close { 0x00, 0x00 } 8-bit cancel indication.
   266             OstTraceExt2( TRACE_NORMAL, DROUTER_CLOSE, "DRouter::Close open->close indication order returned;error=%d;aChannelId=%x", error, aChannelId );
   266                 TInt error( OrderIndication( cancelOrder, aChannelId, EFalse ) );
   267             ASSERT_RESET_ALWAYS( KErrNone == error, EIADIndicationOrderFailed | static_cast<TUint8>( ( aChannelId << KChannelNumberShift ) ) );
   267                 C_TRACE( ( _T( "DRouter::Close open->close indication order returned %d 0x%x" ), error, aChannelId ) );
   268             DeAllocateBlock( cancelOrder );
   268                 OstTraceExt2( TRACE_NORMAL, DROUTER_CLOSE, "DRouter::Close open->close indication order returned;error=%d;aChannelId=%x", error, aChannelId );
       
   269                 ASSERT_RESET_ALWAYS( KErrNone == error, EIADIndicationOrderFailed | static_cast<TUint8>( ( aChannelId << KChannelNumberShift ) ) );
       
   270                 DeAllocateBlock( cancelOrder );
       
   271                 }
   269 #if (NCP_COMMON_SOS_VERSION_SUPPORT >= SOS_VERSION_95)
   272 #if (NCP_COMMON_SOS_VERSION_SUPPORT >= SOS_VERSION_95)
   270             }
   273             }
   271         else
   274         else
   272             {
   275             {
   273             C_TRACE( ( _T( "DRouter::Close open->close loaned channel 0x%x" ), aChannelId ) );
   276             C_TRACE( ( _T( "DRouter::Close open->close loaned channel 0x%x" ), aChannelId ) );
   274             OstTrace1( TRACE_NORMAL, DROUTER_CLOSE_2, "DRouter::Close open->close loaned channel;aChannelId=%x", aChannelId );
   277             OstTrace1( TRACE_NORMAL, DROUTER_CLOSE_2, "DRouter::Close open->close loaned channel;aChannelId=%x", aChannelId );
   275             iChannelTable[ aChannelId ].iType = ENormalOpen;
   278             iChannelTable[ aChannelId ].iType = ENormalOpen;
   276             iChannelTable[ aChannelId ].iChannel = iChannelTable[ aChannelId ].iWaitingChannel;
   279             iChannelTable[ aChannelId ].iChannel = iChannelTable[ aChannelId ].iWaitingChannel;
   277             iChannelTable[ aChannelId ].iWaitingChannel = NULL;
   280             iChannelTable[ aChannelId ].iWaitingChannel = NULL;
       
   281             // TODO: When pipe functionality working, call PipeLoanReturned
   278             }
   282             }
   279 #endif
   283 #endif
   280         }
   284         }
   281     C_TRACE( ( _T( "DRouter::Close 0x%x <-" ), aChannelId ) );
   285     C_TRACE( ( _T( "DRouter::Close 0x%x <-" ), aChannelId ) );
   282     OstTrace0( TRACE_NORMAL, DROUTER_CLOSE_EXIT, "<DRouter::Close" );
   286     OstTrace0( TRACE_NORMAL, DROUTER_CLOSE_EXIT, "<DRouter::Close" );
   647                 {
   651                 {
   648                 C_TRACE( ( _T( "DRouter::SendMessage sending to NAMESERVICE>" ) ) );
   652                 C_TRACE( ( _T( "DRouter::SendMessage sending to NAMESERVICE>" ) ) );
   649                 iNameService->Receive( aMessage );
   653                 iNameService->Receive( aMessage );
   650                 C_TRACE( ( _T( "DRouter::SendMessage sending to NAMESERVICE<" ) ) );
   654                 C_TRACE( ( _T( "DRouter::SendMessage sending to NAMESERVICE<" ) ) );
   651                 }
   655                 }
       
   656             else if ( msgBlockPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] == PN_DEV_OWN ||
       
   657                       msgBlockPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] == PN_DEV_PC )
       
   658                 {
       
   659                 C_TRACE( ( _T( "DRouter::SendMessage to 0x%x" ), msgBlockPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] ) );
       
   660                 this->MessageReceived( aMessage );
       
   661                 }
   652             else // Normal way
   662             else // Normal way
   653                 {
   663                 {
   654                 // The IST shall deallocate the block when it's approriate to do.
   664                 // The IST shall deallocate the block when it's approriate to do.
   655                 C_TRACE( ( _T( "DRouter::SendMessage sending 0x%x" ), &aMessage ) );
   665                 C_TRACE( ( _T( "DRouter::SendMessage sending 0x%x" ), &aMessage ) );
   656                 OstTrace1( TRACE_NORMAL, DUP3_DROUTER_SENDMESSAGE, "DRouter::SendMessage;aMessage=%x", (TUint)&(aMessage ));
   666                 OstTrace1( TRACE_NORMAL, DUP3_DROUTER_SENDMESSAGE, "DRouter::SendMessage;aMessage=%x", (TUint)&(aMessage ));
   662         {
   672         {
   663         C_TRACE( ( _T( "DRouter::SendMessage not sending due error 0x%x %d %d" ), &aMessage, aCh, error ) );
   673         C_TRACE( ( _T( "DRouter::SendMessage not sending due error 0x%x %d %d" ), &aMessage, aCh, error ) );
   664         OstTraceExt2( TRACE_NORMAL, DUP1_DROUTER_SENDMESSAGE, "DRouter::SendMessage;aCh=%hx;error=%d", aCh, error );
   674         OstTraceExt2( TRACE_NORMAL, DUP1_DROUTER_SENDMESSAGE, "DRouter::SendMessage;aCh=%hx;error=%d", aCh, error );
   665         // Deallocate the block.
   675         // Deallocate the block.
   666         TRACE_ASSERT_INFO( 0, (TUint8)aCh<<KChannelNumberShift | (TUint8)error );
   676         TRACE_ASSERT_INFO( 0, (TUint8)aCh<<KChannelNumberShift | (TUint8)error );
   667         this->DeAllocateBlock( aMessage );
   677         if ( error != KErrNotReady ) // No deallocation if no connection
       
   678             {
       
   679             this->DeAllocateBlock( aMessage );
       
   680             }
   668         // TODO: who should NULL the block? IST or IAD
   681         // TODO: who should NULL the block? IST or IAD
   669         }
   682         }
   670     C_TRACE( ( _T( "DRouter::SendMessage 0x%x %d %d <-" ), &aMessage, aCh, error ) );
   683     C_TRACE( ( _T( "DRouter::SendMessage 0x%x %d %d <-" ), &aMessage, aCh, error ) );
   671     OstTraceExt2( TRACE_NORMAL, DROUTER_SENDMESSAGE_EXIT, "<DRouter::SendMessage;aCh=%hx;error=%d", aCh, error );
   684     OstTraceExt2( TRACE_NORMAL, DROUTER_SENDMESSAGE_EXIT, "<DRouter::SendMessage;aCh=%hx;error=%d", aCh, error );
   672     return error;
   685     return error;
  1272     OstTraceExt2( TRACE_NORMAL, DROUTER_SETSENDERINFO_ENTRY, ">DRouter::SetSenderInfo;aMessage=%x;aCh=%hx", ( TUint )&( aMessage ), aCh );
  1285     OstTraceExt2( TRACE_NORMAL, DROUTER_SETSENDERINFO_ENTRY, ">DRouter::SetSenderInfo;aMessage=%x;aCh=%hx", ( TUint )&( aMessage ), aCh );
  1273     C_TRACE( ( _T( "DRouter::SetSenderInfo 0x%x ->" ), &aMessage ) );
  1286     C_TRACE( ( _T( "DRouter::SetSenderInfo 0x%x ->" ), &aMessage ) );
  1274     TUint8* msgBlockPtr = const_cast<TUint8*>( aMessage.Ptr() );
  1287     TUint8* msgBlockPtr = const_cast<TUint8*>( aMessage.Ptr() );
  1275     ASSERT_RESET_ALWAYS( aMessage.Length() > ISI_HEADER_OFFSET_MEDIA, EIADOverTheLimits | EIADFaultIdentifier10 << KFaultIdentifierShift  );
  1288     ASSERT_RESET_ALWAYS( aMessage.Length() > ISI_HEADER_OFFSET_MEDIA, EIADOverTheLimits | EIADFaultIdentifier10 << KFaultIdentifierShift  );
  1276     if ( aCh == EIADNokiaUsbPhonetLink )
  1289     if ( aCh == EIADNokiaUsbPhonetLink )
  1277  	      {
  1290         {
  1278         msgBlockPtr[ ISI_HEADER_OFFSET_MEDIA ] = PN_MEDIA_SOS;
  1291         msgBlockPtr[ ISI_HEADER_OFFSET_MEDIA ] = PN_MEDIA_SOS;
  1279         SET_RECEIVER_DEV( msgBlockPtr, OTHER_DEVICE_1 );
  1292         C_TRACE( ( _T( "DRouter::SetSenderInfo 0x%x 0x%x 0x%x" ), aMessage.Ptr()[0], msgBlockPtr[ ISI_HEADER_OFFSET_MEDIA ], PN_MEDIA_SOS ) );
       
  1293         if( GET_RECEIVER_DEV( msgBlockPtr ) != PN_DEV_OWN)
       
  1294       	    {
       
  1295       	    C_TRACE( ( _T( "DRouter::SetSenderInfo to OTHER_DEVICE_1" ) ) );
       
  1296             SET_RECEIVER_DEV( msgBlockPtr, OTHER_DEVICE_1 );
       
  1297             }  
  1280         }
  1298         }
  1281     else{
  1299     else{
  1282         SET_SENDER_OBJ( msgBlockPtr, aCh );    
  1300         SET_SENDER_OBJ( msgBlockPtr, aCh );    
  1283         C_TRACE( ( _T( "DRouter::SetSenderInfo receiver device %d" ), msgBlockPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] ) );
  1301         C_TRACE( ( _T( "DRouter::SetSenderInfo receiver device %d" ), msgBlockPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] ) );
  1284         if( msgBlockPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] == PN_DEV_OWN )
  1302         if( msgBlockPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] == PN_DEV_OWN || msgBlockPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] == PN_DEV_PC )
  1285             {
  1303             {
  1286             C_TRACE( ( _T( "DRouter::SetSenderInfo message to APE from APE" ) ) );
  1304             C_TRACE( ( _T( "DRouter::SetSenderInfo message to APE from APE" ) ) );
  1287             SET_SENDER_DEV( msgBlockPtr, PN_DEV_OWN );
  1305             SET_SENDER_DEV( msgBlockPtr, PN_DEV_OWN );
  1288             }
  1306             }
  1289         else
  1307         else
  1382     }
  1400     }
  1383 
  1401 
  1384 //From objectapi
  1402 //From objectapi
  1385 EXPORT_C MISIObjectRouterIf* MISIObjectRouterIf::Connect( const TInt32 aUID, TUint8& aObjId, MISIRouterObjectIf* aCallback )
  1403 EXPORT_C MISIObjectRouterIf* MISIObjectRouterIf::Connect( const TInt32 aUID, TUint8& aObjId, MISIRouterObjectIf* aCallback )
  1386     {
  1404     {
  1387     C_TRACE( ( _T( "MISIObjectRouterIf::Connect  %d 0x%x 0x%x>" ), aUID, aObjId, aCallback ) );
  1405     C_TRACE( ( _T( "MISIObjectRouterIf::Connect %d 0x%x 0x%x>" ), aUID, aObjId, aCallback ) );
  1388     Kern::Printf( "IADRouter::Connect" );
       
  1389     //Connect( aUID, aObjId, aCallback );
  1406     //Connect( aUID, aObjId, aCallback );
  1390     if( aUID == KNameServiceUID )
  1407     if( aUID == KNameServiceUID )
  1391         {
  1408         {
  1392         C_TRACE( ( _T( "MISIObjectRouterIf was nameservice" ) ) );
  1409         C_TRACE( ( _T( "MISIObjectRouterIf was nameservice" ) ) );
  1393         DRouter::iThisPtr->iNameService = aCallback;
  1410         DRouter::iThisPtr->iNameService = aCallback;
  1409     }
  1426     }
  1410 
  1427 
  1411 TInt DRouter::Send( TDes8& aMessage, const TUint8 aObjId )
  1428 TInt DRouter::Send( TDes8& aMessage, const TUint8 aObjId )
  1412     {
  1429     {
  1413   	C_TRACE( ( _T( "DRouter::Send objectapi 0x%x 0x%x>" ), &aMessage, aObjId ) );
  1430   	C_TRACE( ( _T( "DRouter::Send objectapi 0x%x 0x%x>" ), &aMessage, aObjId ) );
  1414     Kern::Printf( "IADRouter::Send" );
       
  1415     if( aObjId == PN_OBJ_EVENT_MULTICAST ) //from communicationmanager
  1431     if( aObjId == PN_OBJ_EVENT_MULTICAST ) //from communicationmanager
  1416         {
  1432         {
  1417         // Don't put to mainrxqueue
  1433         // Don't put to mainrxqueue
  1418         HandleIsiMessage( aMessage );
  1434         HandleIsiMessage( aMessage );
  1419         }
  1435         }