connectivitylayer/isce/isirouter_dll/src/isirouter.cpp
changeset 7 fa67e03b87df
parent 0 63b37f68c1ce
child 9 8486d82aef45
equal deleted inserted replaced
6:942573423a60 7:fa67e03b87df
    22 #include "isidevice.h"            // For DLogicalDevice
    22 #include "isidevice.h"            // For DLogicalDevice
    23 #include "isihelpers.h"           // For SET_SENDER_DEV...
    23 #include "isihelpers.h"           // For SET_SENDER_DEV...
    24 #include "misirouterchannelif.h"  // For MISIRouterChannelIf
    24 #include "misirouterchannelif.h"  // For MISIRouterChannelIf
    25 #include "isithreadcontainer.h"   // For DISIThreadContainer
    25 #include "isithreadcontainer.h"   // For DISIThreadContainer
    26 #include "isicltransceiver.h"     // For DISICLTransceiver
    26 #include "isicltransceiver.h"     // For DISICLTransceiver
    27 
    27 #include "misirouterobjectif.h"
    28 #define PN_DEV_APE 0x14 //TODO take from real location in future
    28 
       
    29 #define PN_DEV_OWN 0x6C //TODO take from real location in future
       
    30 
       
    31 const TInt KDfcPriority( 5 );
       
    32 const TUint32 KCommunicationManagerUID( 0x2002B3D0 );
       
    33 const TUint32 KNameServiceUID( 0x2002A5A1 );
    29 
    34 
    30 DISIRouter* DISIRouter::iSelfPtr = NULL;
    35 DISIRouter* DISIRouter::iSelfPtr = NULL;
    31 
    36 
    32 // Faults
    37 // Faults
    33 enum TISIRouterFaults
    38 enum TISIRouterFaults
    41     EISIRouterNULLPtr1,
    46     EISIRouterNULLPtr1,
    42     EISIRouterNULLPtr2,
    47     EISIRouterNULLPtr2,
    43     EISIRouterNULLThreadPointer,
    48     EISIRouterNULLThreadPointer,
    44     };
    49     };
    45 
    50 
    46 const TInt KDfcPriority( 5 );
    51 
    47 
    52 
    48 void DISIRouter::Connect(
    53 void DISIRouter::Connect(
    49         const TInt32 aUID,
    54         const TInt32 aUID,
    50         TUint8& aObjId, 
    55         TUint8& aObjId, 
    51         MISIRouterChannelIf* aCallback
    56         MISIRouterChannelIf* aCallback
   144 TDfcQue* DISIRouter::GetDfcThread(
   149 TDfcQue* DISIRouter::GetDfcThread(
   145         const TISIDfcQThreadType aType
   150         const TISIDfcQThreadType aType
   146         )
   151         )
   147     {
   152     {
   148     C_TRACE( ( _T( "DISIRouter::GetDfcThread<>" ) ) );  
   153     C_TRACE( ( _T( "DISIRouter::GetDfcThread<>" ) ) );  
       
   154     Kern::Printf( "ISIRouter::GetDfcThread" );
   149     return iClientThreadContainer->AllocateThread( aType );
   155     return iClientThreadContainer->AllocateThread( aType );
   150     }
   156     }
   151 
   157 
   152 void DISIRouter::FreeDfcThread( TDfcQue* aThread )
   158 void DISIRouter::FreeDfcThread( TDfcQue* aThread )
   153     {
   159     {
   154     C_TRACE( ( _T( "DISIRouter::FreeDfcThread 0x%x>" ), aThread ) );
   160     C_TRACE( ( _T( "DISIRouter::FreeDfcThread 0x%x>" ), aThread ) );
       
   161     Kern::Printf( "ISIRouter::FreeDfcThread" );
   155     iClientThreadContainer->DeallocateThread( aThread );
   162     iClientThreadContainer->DeallocateThread( aThread );
   156     C_TRACE( ( _T( "DISIRouter::FreeDfcThread 0x%x<" ), aThread ) );
   163     C_TRACE( ( _T( "DISIRouter::FreeDfcThread 0x%x<" ), aThread ) );
   157     }
   164     }
   158 
   165 
   159 MISIChannelRouterIf* MISIChannelRouterIf::GetIf()
   166 MISIChannelRouterIf* MISIChannelRouterIf::GetIf()
   248         TDes8& aMessage,
   255         TDes8& aMessage,
   249         const TUint8 aObjId
   256         const TUint8 aObjId
   250         )
   257         )
   251     {
   258     {
   252     C_TRACE( ( _T( "DISIRouter::Send 0x%x 0x%x>" ), &aMessage, aObjId ) );
   259     C_TRACE( ( _T( "DISIRouter::Send 0x%x 0x%x>" ), &aMessage, aObjId ) );
   253     TUint8* messageBlockPtr( const_cast<TUint8*>( aMessage.Ptr() ) );
   260     Kern::Printf( "ISIRouter::Send" );
   254     SET_SENDER_DEV( messageBlockPtr, PN_DEV_APE );
   261 
   255     SET_SENDER_OBJ( messageBlockPtr, aObjId );
   262     if( ( aObjId != PN_OBJ_ROUTING_REQ ) 
   256     iCLTransceiver->RouteISIMessage( aMessage );
   263      && ( aObjId != PN_OBJ_EVENT_MULTICAST ) )
       
   264         {
       
   265         TUint8* messageBlockPtr( const_cast<TUint8*>( aMessage.Ptr() ) );
       
   266         SET_SENDER_DEV( messageBlockPtr, PN_DEV_OWN );
       
   267         SET_SENDER_OBJ( messageBlockPtr, aObjId );
       
   268         }
       
   269     TInt error = iCLTransceiver->RouteISIMessage( aMessage );
   257     C_TRACE( ( _T( "DISIRouter::Send 0x%x %d 0x%x<" ), &aMessage, aObjId ) );
   270     C_TRACE( ( _T( "DISIRouter::Send 0x%x %d 0x%x<" ), &aMessage, aObjId ) );
   258     return KErrNone;
   271     return error;
   259     }
   272     }
   260 
   273 
   261 TBool DISIRouter::Receive( TDes8& aMessage, const TUint8 aObjId )
   274 TBool DISIRouter::Receive( TDes8& aMessage, const TUint8 aObjId )
   262     {
   275     {
   263     C_TRACE( ( _T( "DISIRouter::Receive 0x%x 0x%x>" ), &aMessage, aObjId ) );
   276     C_TRACE( ( _T( "DISIRouter::Receive 0x%x 0x%x>" ), &aMessage, aObjId ) );
   264     NKern::FMWait( iClientTableFastMutex );
   277     TBool error( EFalse );
   265     if( iClientTable[ aObjId ] )
   278     TUint8* messageBlockPtr( const_cast<TUint8*>( aMessage.Ptr() ) ); 
   266         {
   279     switch( GET_RECEIVER_OBJ( aMessage ) )
   267         NKern::FMSignal( iClientTableFastMutex );
   280         {
   268         ( iClientTable[ aObjId ]->iChannel )->ReceiveMsg( aMessage ); //may not be safe, consider receive/delete sync
   281         case PN_OBJ_ROUTING_REQ:
   269         C_TRACE( ( _T( "DISIRouter::Receive ok 0x%x 0x%x>" ), &aMessage, aObjId ) );
   282             {
   270         return ETrue;
   283             C_TRACE( ( _T( "DISIRouter msg to PN_OBJ_ROUTING_REQ: nameservice" ) ) );
   271     	  }
   284             //route with resource and nameservice
   272     NKern::FMSignal( iClientTableFastMutex );
   285             iNameService->Receive( aMessage );
   273     C_TRACE( ( _T( "DISIRouter::Receive failed 0x%x 0x%x<" ), &aMessage, aObjId ) );
   286             C_TRACE( ( _T( "DRouter::HandleIsiMessage to NAMESERVICE<" ) ) );
   274     return EFalse;
   287             error = ETrue;
       
   288             break;
       
   289             }
       
   290         case PN_OBJ_EVENT_MULTICAST:
       
   291             {
       
   292             C_TRACE( ( _T( "DISIRouter msg to PN_OBJ_EVENT_MULTICAST: communication manager" ) ) );
       
   293             iCommunicationManager->Receive( aMessage );
       
   294             C_TRACE( ( _T( "DRouter::HandleIsiMessage to Communication Manager<" ) ) );
       
   295             error = ETrue;
       
   296             break;
       
   297             }           
       
   298         default:
       
   299             {   //default regular channel
       
   300              NKern::FMWait( iClientTableFastMutex );
       
   301              if( iClientTable[ aObjId ] )
       
   302                 {
       
   303                 NKern::FMSignal( iClientTableFastMutex );
       
   304                 ( iClientTable[ aObjId ]->iChannel )->ReceiveMsg( aMessage ); //may not be safe, consider receive/delete sync
       
   305                 C_TRACE( ( _T( "DISIRouter::Receive ok 0x%x 0x%x>" ), &aMessage, aObjId ) );
       
   306                 error = ETrue;
       
   307 	              }
       
   308 	          else
       
   309 	              {
       
   310                 NKern::FMSignal( iClientTableFastMutex );
       
   311                 C_TRACE( ( _T( "DISIRouter::Receive failed 0x%x 0x%x<" ), &aMessage, aObjId ) );
       
   312                 error = EFalse;
       
   313                 }
       
   314             break;    
       
   315             }
       
   316          }   
       
   317      return error;
       
   318 
   275     }
   319     }
   276 
   320 
   277 DECLARE_STANDARD_EXTENSION()
   321 DECLARE_STANDARD_EXTENSION()
   278     {
   322     {
   279     Kern::Printf( "ISI Router extension>" );
   323     Kern::Printf( "ISI Router extension>" );
   291     TRACE_ASSERT( device );
   335     TRACE_ASSERT( device );
   292     Kern::Printf( "ISI Router ldd 0x%x<", device );
   336     Kern::Printf( "ISI Router ldd 0x%x<", device );
   293     return( device );
   337     return( device );
   294     }
   338     }
   295 
   339 
       
   340 //From objectapi
       
   341 EXPORT_C MISIObjectRouterIf* MISIObjectRouterIf::Connect( const TInt32 aUID, TUint8& aObjId, MISIRouterObjectIf* aCallback )
       
   342     {
       
   343     C_TRACE( ( _T( "MISIObjectRouterIf::Connect %d 0x%x 0x%x>" ), aUID, aObjId, aCallback ) );
       
   344     
       
   345     Kern::Printf( "ISIRouter::Connect" );
       
   346     if( aUID == KNameServiceUID )
       
   347         {
       
   348         C_TRACE( ( _T( "MISIObjectRouterIf was nameservice" ) ) );
       
   349         DISIRouter::iSelfPtr->iNameService = aCallback;
       
   350         aObjId = PN_OBJ_ROUTING_REQ; // 0x00
       
   351         }
       
   352     else if( aUID == KCommunicationManagerUID )
       
   353         {
       
   354         C_TRACE( ( _T( "MISIObjectRouterIf was communicationmanager" ) ) );
       
   355         DISIRouter::iSelfPtr->iCommunicationManager = aCallback;
       
   356         aObjId = PN_OBJ_EVENT_MULTICAST; // 0x20
       
   357         }
       
   358     else
       
   359         {
       
   360         C_TRACE( ( _T( "MISIObjectRouterIf unknown object api client" ) ) );
       
   361         }
       
   362     MISIObjectRouterIf* tmp =  DISIRouter::iSelfPtr;
       
   363     C_TRACE( ( _T( "MISIObjectRouterIf::Connect %d 0x%x 0x%x<" ), aUID, aObjId, aCallback ) );
       
   364     return tmp;
       
   365     }
       
   366