connectivitylayer/isce/isaaccessextension_dll/src/router.cpp
changeset 5 8ccc39f9d787
parent 0 63b37f68c1ce
child 7 fa67e03b87df
--- a/connectivitylayer/isce/isaaccessextension_dll/src/router.cpp	Mon Nov 09 10:36:19 2009 +0000
+++ b/connectivitylayer/isce/isaaccessextension_dll/src/router.cpp	Thu Jan 14 10:44:58 2010 +0200
@@ -19,10 +19,6 @@
 #include <phonetisi.h>                  // For ISI_HEADER_SIZE
 #include <pn_const.h>                   // For PN_HEADER_SIZE
 #include <pipeisi.h>                    // For PNS_PIPE_DATA_OFFSET_DATA
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-#include <mediaisi.h>                   // For PNS_MEDIA_SPECIFIC_REQ/RESP
-#include <nsisi.h>                      // For PNS_NAME...
-#endif // NCP_COMMON_BRIDGE_FAMILY
 #include <commisi.h>                    // For SIZE_COMMON_MESSAGE_COMM_ISA_ENTITY_NOT_REACHABLE_RESP
 #include "router.h"
 #include "iadtrace.h"                   // For C_TRACE..
@@ -31,6 +27,7 @@
 #include "queue.h"                      // For DQueue
 #include "iadinternaldefinitions.h"     // For EIADAsync...
 #include "iadhelpers.h"                 // For GET_RECEIVER
+#include <nsisi.h>                      // For PN_NAMESERVICE...
 
 #include "pipehandler.h"                // For PipeHandler
 #include "OstTraceDefinitions.h"
@@ -38,97 +35,18 @@
 #include "routerTraces.h"
 #endif
 
+
 //#define MODEM_MCE_DOES_NOT_WORK_AS_IT_SHOULD // TODO: to be removed when Bridge Modem SW is ok
 
 // ISCE
 #include "memapi.h"                     // For MemApi
 #include "trxdefs.h"                    // For ETrx...
 // ISCE
-// ISCE #include "miad2istapi.h" // For MIAD2ISTApi
-
-
 
 // CONSTS
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-
-// TODO : spec this to some document
-/**** IAD<->SOS_MM ****/
-const TUint8 KIADObjId( 0xfe );
-/* CTRL CONF REQ START *
-[0]     media,          PN_MEDIA_SOS;
-[1]     recdev,         PN_MEDIA_ROUTING_REQ
-[2]     senderdev,      PN_DEV_SOS
-[3]     function,       PN_MEDIA_CONTROL
-[4,5]   length,         8
-[6]     recobj,         PN_OBJ_ROUTER
-[7]     senderobj,      KIADObjId
-[8]     transaction     0x00
-[9]     messageid       PNS_MEDIA_SPECIFIC_REQ
-[10]    media2control   PN_MEDIA_SOS
-[11]    ctrl msg id     KIADCtrlConfReq (0x05)
-[12]    filler          0x00
-[13]    filler          0x00
-*  CTRL CONF REQ END */
-const TUint8 KIADCtrlConfReq( 0x5 );
-/* CTRL CONF RESP START *
-[0]     media,          PN_MEDIA_SOS;
-[1]     recdev,         PN_DEV_SOS
-[2]     senderdev,      PN_MEDIA_ROUTING_REQ
-[3]     function,       PN_MEDIA_CONTROL
-[4,5]   length,         10
-[6]     recobj,         KIADObjId
-[7]     senderobj,      PN_OBJ_ROUTER
-[8]     transaction     0x00
-[9]     messageid       PNS_MEDIA_SPECIFIC_REQ
-[10]    media2control   PN_MEDIA_SOS
-[11]    media error     PN_MCTRL_NO_ERROR
-[12]    ctrl msg id     KIADCtrlConfResp (0x06)
-[13]    conf size       8 bytes
-[14]    conf size       8 bytes
-[15]    filler          0x00
-*  CTRL CONF RESP END */
-const TUint8 KIADCtrlConfResp( 0x6 );
-/* CTRL DRM REQ START *
-[0]     media,          PN_MEDIA_SOS;
-[1]     recdev,         PN_MEDIA_ROUTING_REQ
-[2]     senderdev,      PN_DEV_SOS
-[3]     function,       PN_MEDIA_CONTROL
-[4,5]   length,         8 ( + 6 = KIADCtrlDrmReqLength )
-[6]     recobj,         PN_OBJ_ROUTER
-[7]     senderobj,      KIADObjId
-[8]     channel number  IAD client's channel number
-[9]     messageid       PNS_MEDIA_SPECIFIC_REQ
-[10]    mediatocontrol  PN_MEDIA_SOS
-[11]    ctrl msg id     KIADCtrlDrmReq (0x07)
-[12]    ch is 2 be reg  IAD client's channel number
-[13]    filler          0x00
-*  CTRL DRM REQ END */
-const TUint8 KIADCtrlDrmReq( 0x7 );
-const TInt KIADCtrlDrmReqLength( 14 );
-/* CTRL DRM RESP START *
-[0]     media,          PN_MEDIA_SOS;
-[1]     recdev,         PN_DEV_SOS
-[2]     senderdev,      PN_MEDIA_ROUTING_REQ
-[3]     function,       PN_MEDIA_CONTROL
-[4,5]   length,         8
-[6]     recobj,         KIADObjId
-[7]     senderobj,      PN_OBJ_ROUTER
-[8]     channel number  IAD client's channel number
-[9]     messageid       PNS_MEDIA_SPECIFIC_RESP
-[10]    mediatocontrol  PN_MEDIA_SOS
-[11]    media error     PN_MCTRL_NO_ERROR
-[12]    ctrl msg id     KIADCtrlDrmResp (0x08)
-[13]    filler          0x00
-* CTRL DRM REQ END */
-const TUint8 KIADCtrlDrmResp( 0x8 );
-
-#define CTRL_REQ_OFFSET_MESSAGEID ( ISI_HEADER_SIZE + PNS_MEDIA_SPECIFIC_REQ_OFFSET_DATA )
-#define CTRL_RESP_OFFSET_MESSAGEID ( ISI_HEADER_SIZE + PNS_MEDIA_SPECIFIC_RESP_OFFSET_DATA )
-#define CTRL_CONF_RESP_OFFSET_SIZE_BYTE1 ( CTRL_RESP_OFFSET_MESSAGEID + 1 )
-#define CTRL_CONF_RESP_OFFSET_SIZE_BYTE2 ( CTRL_CONF_RESP_OFFSET_SIZE_BYTE1 + 1 )
-#define CTR_DRM_REQ_RESP_OFFSET_CHANNEL_ID ( ISI_HEADER_SIZE + PNS_MEDIA_SPECIFIC_RESP_OFFSET_UTID )
-#define CTRL_DRM_REQ_OFFSET_REQUIRED_CHANNEL_ID ( CTRL_REQ_OFFSET_MESSAGEID + 1 )
-#endif // NCP_COMMON_BRIDGE_FAMILY
+DRouter* DRouter::iThisPtr = NULL;
+const TUint32 KCommunicationManagerUID( 0x2002B3D0 );
+const TUint32 KNameServiceUID( 0x2002A5A1 );
 
 // TODO: change this to use UnuqueID instead and to extension..
 void DRouter::CheckDfc()
@@ -169,7 +87,7 @@
     
     C_TRACE( ( _T( "DRouter::DRouter ->" ) ) );
     // owned
-#ifndef NCP_COMMON_BRIDGE_FAMILY
+#ifdef NCP_COMMON_BRIDGE_FAMILY_PIPE_SUPPORT
     iPipeHandler = new DPipeHandler( *this );
 #endif
     iIndicationHandler = new DIndicationHandler( *this );
@@ -201,21 +119,17 @@
         C_TRACE( ( _T( "DRouter::DRouter %d" ), i ) );
         }
     // Configuration of ISI links. TODO: devices and link configurations for coming platforms are unknown and to be done later.
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-    iLinksArray[ DRouter::EISIMediaSOS ] = MISIRouterLinkIf::CreateLinkF( this, PN_MEDIA_SOS, ETrxPartnerOS );
-#else
-    // Bridge media = PN_MEDIA_MODEM_HOST_IF
     iLinksArray[ DRouter::EISIMediaHostSSI ] = MISIRouterLinkIf::CreateLinkF( this, PN_MEDIA_MODEM_HOST_IF, ETrxSharedMemory );
-#endif // NCP_COMMON_BRIDGE_FAMILY
-    // ISCE
+    DRouter::iThisPtr = this;
     C_TRACE( ( _T( "DRouter::DRouter 0x%x <-" ), this ) );
     OstTrace1( TRACE_NORMAL, DROUTER_DROUTER_EXIT, "<DRouter::DRouter;this=%x", this );
     }
-    
+
 DRouter::~DRouter(
         // None
        )
     {
+
     OstTrace0( TRACE_NORMAL, DUP1_DROUTER_DROUTER_ENTRY, "<DRouter::~DRouter" );
 //ISCE
     // owning so deleting
@@ -235,7 +149,7 @@
         iChannelTable[ i ].iWaitingChannel = NULL;
         iChannelTable[ i ].iType = ENormalOpen;
         }
-#ifndef NCP_COMMON_BRIDGE_FAMILY
+#ifdef NCP_COMMON_BRIDGE_FAMILY_PIPE_SUPPORT
     if( iPipeHandler )
         {
         delete iPipeHandler;
@@ -301,7 +215,7 @@
     C_TRACE( ( _T( "DRouter::AllocateDataBlock %d <->" ), aSize ) );
     TUint32 neededLength( aSize + ISI_HEADER_SIZE + PNS_PIPE_DATA_OFFSET_DATA );
     TDes8& tmp = this->AllocateBlock( neededLength );
-#ifndef NCP_COMMON_BRIDGE_FAMILY
+#ifdef NCP_COMMON_BRIDGE_FAMILY_PIPE_SUPPORT
     tmp.SetLength( neededLength );
     TUint8* msgPtr = const_cast<TUint8*>( tmp.Ptr() );
     SET_RECEIVER_DEV( msgPtr, PN_DEV_DONT_CARE );    
@@ -324,7 +238,7 @@
     OstTraceExt1( TRACE_NORMAL, DROUTER_CLOSE_ENTRY, ">DRouter::Close;aChannelId=%hx", aChannelId );
     C_TRACE( ( _T( "DRouter::Close 0x%x ->" ), aChannelId ) );
     // Channel must be from appropiate length and although it is sixteenbit value it must contain only 8-bit values. If over 8-bit changes needed.
-    ASSERT_RESET_ALWAYS( aChannelId < EIADSizeOfChannels || aChannelId < 0xff, EIADWrongParameter | EIADFaultIdentifier10 << KFaultIdentifierShift );
+    ASSERT_RESET_ALWAYS( aChannelId < EIADSizeOfChannels || aChannelId < 0xff, EIADWrongParameter | EIADFaultIdentifier10 << KFaultIdentifierShift | aChannelId << KChannelNumberShift );
     ASSERT_DFCTHREAD_INEXT();
     // If channel open (!NULL) set as closed (NULL) or if channel open is pending.
     ASSERT_RESET_ALWAYS( aChannelId < EIADSizeOfChannels, EIADWrongParameter | (TUint8)aChannelId << KChannelNumberShift | EIADFaultIdentifier21 << KFaultIdentifierShift );
@@ -454,26 +368,10 @@
         // Null so channel is not open, set !null to mark opened channel.
         else
             {
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-            const TBool drmChannel( ( aChannel == EIADNokiaDRM || aChannel == EIADNokiaSecurityDriver ) ? ETrue : EFalse );
-            if( drmChannel )
-                {
-                C_TRACE( ( _T( "DRouter::Open channel 0x%x drm 0x%x" ), aChannel, aCallback ) );
-                OstTraceExt1( TRACE_NORMAL, DROUTER_OPEN, "DRouter::Open DRM;aChannel=%hx", aChannel );
-                iChannelTable[ aChannel ].iWaitingChannel = aCallback;
-                iChannelTable[ aChannel ].iType = EDrmOpen;
-                SendDrmReq( aChannel );
-                }
-            else
-                {
-#endif // NCP_COMMON_BRIDGE_FAMILY
-                C_TRACE( ( _T( "DRouter::Open channel 0x%x normal 0x%x" ), aChannel, aCallback ) );
-                OstTraceExt1( TRACE_NORMAL, DUP1_DROUTER_OPEN, "DRouter::Open normal;aChannel=%hx", aChannel );
-                iChannelTable[ aChannel ].iChannel = aCallback;
-                aCallback->CompleteChannelRequest( aRequest, KErrNone );
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-                }
-#endif // NCP_COMMON_BRIDGE_FAMILY
+            C_TRACE( ( _T( "DRouter::Open channel 0x%x normal 0x%x" ), aChannel, aCallback ) );
+            OstTraceExt1( TRACE_NORMAL, DUP1_DROUTER_OPEN, "DRouter::Open normal;aChannel=%hx", aChannel );
+            iChannelTable[ aChannel ].iChannel = aCallback;
+            aCallback->CompleteChannelRequest( aRequest, KErrNone );
             }
         }
     else
@@ -482,17 +380,11 @@
         OstTrace0( TRACE_NORMAL, DUP2_DROUTER_OPEN, "DRouter::Open Not ready" );        
         ASSERT_RESET_ALWAYS( !iChannelTable[ aChannel ].iWaitingChannel, EIADWrongRequest | EIADFaultIdentifier15 << KFaultIdentifierShift  );
         iChannelTable[ aChannel ].iWaitingChannel = aCallback;
-        iChannelTable[ aChannel ].iType = ( ( aChannel == EIADNokiaDRM || aChannel == EIADNokiaSecurityDriver ) ?
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-EDrmOpen : ENormalOpen );
-#else
-ENormalOpen : ENormalOpen );
-#endif // NCP_COMMON_BRIDGE_FAMILY
+        iChannelTable[ aChannel ].iType = ( ( aChannel == EIADNokiaDRM || aChannel == EIADNokiaSecurityDriver ) ? ENormalOpen : ENormalOpen );//??? TODO FIX THIS
         }
     C_TRACE( ( _T( "DRouter::Open 0x%x <-" ), aChannel ) );
+    OstTraceExt1( TRACE_NORMAL, DROUTER_OPEN_EXIT, "<DRouter::Open;aChannel=%hx", aChannel );
 
-    OstTraceExt1( TRACE_NORMAL, DROUTER_OPEN_EXIT, "<DRouter::Open;aChannel=%hx", aChannel );
-    
     }
 
 // With resource and media
@@ -504,52 +396,15 @@
         )
     {
     OstTraceExt4( TRACE_NORMAL, DUP1_DROUTER_OPEN_ENTRY, ">DRouter::Open;aChannel=%hx;aRequest=%hu;aOpenInfo=%x;aCallback=%x", aChannel, aRequest, ( TUint )&( aOpenInfo ), ( TUint )( aCallback ) );
-//TODO: open with resource: change not to be permit one and in closing pn_name_remove_req.
     C_TRACE( ( _T( "DRouter::Open 0x%x %d 0x%x 0x%x ->" ), aChannel, aRequest, &aOpenInfo, aCallback ) );
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-    ASSERT_RESET_ALWAYS( aCallback, EIADNullParameter | EIADFaultIdentifier20 << KFaultIdentifierShift  );
-    ASSERT_DFCTHREAD_INEXT();
-    ASSERT_RESET_ALWAYS( aChannel < EIADSizeOfChannels, EIADWrongParameter | (TUint8)aChannel << KChannelNumberShift | EIADFaultIdentifier27 << KFaultIdentifierShift );
-    if( iConnectionStatus == EIADConnectionOk )
-        {
-        // If not null channel is allready open.
-        if( iChannelTable[ aChannel ].iChannel ||
-            iChannelTable[ aChannel ].iWaitingChannel )
-            {
-            // If another channel tries to open already open channel.
-            OstTrace0( TRACE_NORMAL, DUP4_DROUTER_OPEN, "DRouter::Open already open channel" );            
-            TRACE_WARNING( iChannelTable[ aChannel ].iChannel == aCallback, (TUint8)aChannel << KChannelNumberShift );
-            aCallback->CompleteChannelRequest( aRequest, ( iChannelTable[ aChannel ].iChannel == aCallback ? KErrInUse : KErrAlreadyExists ) );
-            }
-        // Null so channel is not open, set !null to mark opened channel.
-        else
-            {
-            OstTrace0( TRACE_NORMAL, DUP3_DROUTER_OPEN, "DRouter::Open with resource" );            
-            C_TRACE( ( _T( "DRouter::Open channel with resource 0x%x 0x%x" ), aChannel, aCallback ) );
-            iChannelTable[ aChannel ].iWaitingChannel = aCallback;
-            iChannelTable[ aChannel ].iType = ENameAddOpen;
-            SendPnsNameAddReq( aChannel, aOpenInfo );
-            }
-        }
-    else
-        {
-        C_TRACE( ( _T( "DRouter::Open with resource not ready" ) ) );
-        // Opening with resource Id is not supported before IAD is initialized. 
-        // If needed, client can open channel without resource Id and send PNS_NAME_ADD_REQ after 
-        // channel open is actually completed
-        TRACE_ASSERT_INFO( 0, (TUint8)aChannel<<KChannelNumberShift );
-        ASSERT_RESET_ALWAYS( iBootDone, EIADNotSupported | EIADFaultIdentifier5 << KFaultIdentifierShift | (TUint8)aChannel<<KChannelNumberShift );        
-        }
-#else // NCP_COMMON_BRIDGE_FAMILY
     // Some maniac from modem sw decided to remove name service in the last meters, hip-hip hurray inform which clients use resource from open to help debug!
     TRACE_ASSERT_INFO( 0, (TUint8)aChannel<<KChannelNumberShift );
-    // Treat as normal open to enable the sending NOTE! resource is not functioning!!
+    // Treat as normal open to enable the sending.
+    // NOTE! SUPPORT FOR RESOURCE OPEN DOES NOT EXISTS: CLIENT SHOULD NAME SERVICE BY ISI IF. SUPPORT FOR NAME SERVICE DOES NOT EXIST IN APE SW YET: NCP_COMMON_BRIDGE_FAMILY_NAME_SERVICE_SUPPORT
     Open( aChannel, aRequest, aCallback );
-#endif // NCP_COMMON_BRIDGE_FAMILY
+    C_TRACE( ( _T( "DRouter::Open 0x%x <-" ), aChannel ) );
+    OstTraceExt1( TRACE_NORMAL, DUP1_DROUTER_OPEN_EXIT, "<DRouter::Open;aChannel=%hx", aChannel );
 
-    C_TRACE( ( _T( "DRouter::Open 0x%x <-" ), aChannel ) );
-
-    OstTraceExt1( TRACE_NORMAL, DUP1_DROUTER_OPEN_EXIT, "<DRouter::Open;aChannel=%hx", aChannel );
     }
 
 #if (NCP_COMMON_SOS_VERSION_SUPPORT >= SOS_VERSION_95)
@@ -567,7 +422,7 @@
     ASSERT_DFCTHREAD_INEXT();
     ASSERT_RESET_ALWAYS( aChannel < EIADSizeOfChannels, aChannel );
     TInt error( KErrNone );
-#ifndef NCP_COMMON_BRIDGE_FAMILY
+#ifdef NCP_COMMON_BRIDGE_FAMILY_PIPE_SUPPORT
     // Is connection lost.
     error = ( iConnectionStatus == EIADConnectionNotOk ) ? KErrNotSupported : error;
     TRACE_ASSERT_INFO( KErrNone == error, error );
@@ -614,7 +469,7 @@
     ASSERT_DFCTHREAD_INEXT();
     ASSERT_RESET_ALWAYS( aChannel < EIADSizeOfChannels, aChannel );
     TInt error( KErrNone );
-#ifndef NCP_COMMON_BRIDGE_FAMILY
+#ifdef NCP_COMMON_BRIDGE_FAMILY_PIPE_SUPPORT
     // Is connection lost.
     error = ( iConnectionStatus == EIADConnectionNotOk ) ? KErrNotSupported : error;
     TRACE_ASSERT_INFO( KErrNone == error, error );
@@ -701,9 +556,11 @@
         ASSERT_RESET_ALWAYS( aMessage.Length() > ISI_HEADER_OFFSET_RESOURCEID, EIADOverTheLimits | EIADFaultIdentifier2 << KFaultIdentifierShift  );
         if( msgBlockPtr[ ISI_HEADER_OFFSET_RESOURCEID ] == PN_PIPE && msgBlockPtr[ ISI_HEADER_OFFSET_SENDERDEVICE ] == THIS_DEVICE )
             {
-#ifndef NCP_COMMON_BRIDGE_FAMILY
+#ifdef NCP_COMMON_BRIDGE_FAMILY_PIPE_SUPPORT
             // This shall send the message and deallocate it too.
             error = iPipeHandler->SendPipeMessage( aMessage, aCh );
+#else
+			error = KErrNotSupported;
 #endif
             if( error != KErrNone )
                 {
@@ -729,10 +586,28 @@
                 SET_RECEIVER_OBJ( indicationPtr, KIADEventSubscriptionObjId );
                 this->MessageReceived( tmpIndication );
                 }
-            // The IST shall deallocate the block when it's approriate to do.
-            C_TRACE( ( _T( "DRouter::SendMessage sending 0x%x" ), &aMessage ) );
-            OstTrace1( TRACE_NORMAL, DUP3_DROUTER_SENDMESSAGE, "DRouter::SendMessage;aMessage=%x", (TUint)&(aMessage ));
-            error = SendMsg( aMessage );
+            // To communicationmanager
+            if( ( msgBlockPtr[ ISI_HEADER_OFFSET_RECEIVEROBJECT ] == PN_OBJ_EVENT_MULTICAST  )
+               && ( msgBlockPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] == PN_DEV_OWN ) )
+                {
+                C_TRACE( ( _T( "DRouter::SendMessage sending to COMMUNICATIONMANAGER>" ) ) );
+                iCommunicationManager->Receive( aMessage );
+                C_TRACE( ( _T( "DRouter::SendMessage sending to COMMUNICATIONMANAGER<" ) ) );
+                }
+            else if( ( msgBlockPtr[ ISI_HEADER_OFFSET_RECEIVEROBJECT ] == PN_OBJ_ROUTING_REQ  )
+               && ( msgBlockPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] == PN_DEV_OWN ) )
+                {
+                C_TRACE( ( _T( "DRouter::SendMessage sending to NAMESERVICE>" ) ) );
+                iNameService->Receive( aMessage );
+                C_TRACE( ( _T( "DRouter::SendMessage sending to NAMESERVICE<" ) ) );
+                }
+            else // Normal way
+                {
+                // The IST shall deallocate the block when it's approriate to do.
+                C_TRACE( ( _T( "DRouter::SendMessage sending 0x%x" ), &aMessage ) );
+                OstTrace1( TRACE_NORMAL, DUP3_DROUTER_SENDMESSAGE, "DRouter::SendMessage;aMessage=%x", (TUint)&(aMessage ));
+                error = SendMsg( aMessage );
+                }
             }//PIPE
         }
     else
@@ -839,20 +714,48 @@
     OstTrace1( TRACE_NORMAL, DROUTER_HANDLEISIMESSAGE_ENTRY, ">DRouter::HandleIsiMessage;aMsg=%x", ( TUint )&( aMsg ) );
 
     C_TRACE( ( _T( "DRouter::HandleIsiMessage 0x%x ->" ), &aMsg ) );
-    const TUint16 rcvObjId( GET_RECEIVER_OBJ( aMsg ) );
-    C_TRACE( ( _T( "DRouter::HandleIsiMessage rcvObjId 0x%x" ), rcvObjId ) );
-    ASSERT_RESET_ALWAYS( rcvObjId < EIADSizeOfChannels, EIADWrongParameter | (TUint8)rcvObjId << KChannelNumberShift | EIADFaultIdentifier22 << KFaultIdentifierShift );
-    if( iChannelTable[ rcvObjId ].iChannel )
+    TUint8* msg = const_cast<TUint8*>( aMsg.Ptr() );
+    // Message from MODEM to APE, or from APE to APE. If Media SOS -> come through link. If dev OWN -> from APE nameservice
+    if( msg[ ISI_HEADER_OFFSET_MEDIA ] == PN_MEDIA_SOS || ( msg[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] == PN_DEV_OWN ) )
         {
-        iChannelTable[ rcvObjId ].iChannel->ReceiveMsg( aMsg );
-        // DeAllocation done by the channel after writing to client's address space.
+        const TUint16 rcvObjId( GET_RECEIVER_OBJ( aMsg ) );
+        C_TRACE( ( _T( "DRouter::HandleIsiMessage rcvObjId 0x%x" ), rcvObjId ) );
+        ASSERT_RESET_ALWAYS( rcvObjId < EIADSizeOfChannels, EIADWrongParameter | (TUint8)rcvObjId << KChannelNumberShift | EIADFaultIdentifier22 << KFaultIdentifierShift );
+        if( rcvObjId == PN_OBJ_ROUTER ) //TODO to channel table
+            {
+            C_TRACE( ( _T( "DRouter::HandleIsiMessage to NAMESERVICE>" ) ) );
+            iNameService->Receive( aMsg );
+            C_TRACE( ( _T( "DRouter::HandleIsiMessage to NAMESERVICE<" ) ) );
+            }
+        else if( rcvObjId == PN_OBJ_EVENT_MULTICAST )
+            {
+            C_TRACE( ( _T( "DRouter::HandleIsiMessage to COMMUNICATIONMANAGER>" ) ) );
+            iCommunicationManager->Receive( aMsg );
+            C_TRACE( ( _T( "DRouter::HandleIsiMessage to COMMUNICATIONMANAGER<" ) ) );
+            }
+        else
+            {
+            if( iChannelTable[ rcvObjId ].iChannel )
+                {
+                iChannelTable[ rcvObjId ].iChannel->ReceiveMsg( aMsg );
+                // DeAllocation done by the channel after writing to client's address space.
+                }
+            else
+                {
+                SendCommIsaEntityNotReachableResp( aMsg );
+                // Not going to anywhere deallocate.
+                DeAllocateBlock( aMsg );
+                }
+            }
         }
-    else
+    else // PN_MEDIA_ROUTING_REQ, receivedevice != own, from nameservice, send to modem
         {
-        SendCommIsaEntityNotReachableResp( aMsg );
-        // Not going to anywhere deallocate.
-        DeAllocateBlock( aMsg );
-        }
+    	  C_TRACE( ( _T( "DRouter::CheckRouting going to MODEM" ) ) );
+    	  msg[ ISI_HEADER_OFFSET_MEDIA ] = PN_MEDIA_SOS; // link should set this
+        TInt sendError = SendMsg( aMsg );
+        C_TRACE( ( _T( "DRouter::CheckRouting sendError %d" ), sendError ) );
+    	  }
+    
     C_TRACE( ( _T( "DRouter::HandleIsiMessage 0x%x <-" ), &aMsg ) );
 
     OstTrace0( TRACE_NORMAL, DROUTER_HANDLEISIMESSAGE_EXIT, "<DRouter::HandleIsiMessage" );    
@@ -866,7 +769,7 @@
     OstTrace1( TRACE_NORMAL, DROUTER_HANDLEPIPEMESSAGE_ENTRY, ">DRouter::HandlePipeMessage;aMsg=%x", ( TUint )&( aMsg ) );
 
     C_TRACE( ( _T( "DRouter::HandlePipeMessage 0x%x ->" ), &aMsg ) );
-#ifndef NCP_COMMON_BRIDGE_FAMILY
+#ifdef NCP_COMMON_BRIDGE_FAMILY_PIPE_SUPPORT
     const TUint16 rcvObjId( GET_RECEIVER_OBJ( aMsg ) );
     C_TRACE( ( _T( "DRouter::HandlePipeMessage rcvObjId 0x%x" ), rcvObjId ) );
     ASSERT_RESET_ALWAYS( rcvObjId < EIADSizeOfChannels, EIADWrongParameter | (TUint8)rcvObjId << KChannelNumberShift| EIADFaultIdentifier25 << KFaultIdentifierShift );    
@@ -898,47 +801,13 @@
         TDes8& aMsg
         )
     {
+
     OstTrace1( TRACE_NORMAL, DROUTER_HANDLEMEDIAMESSAGE_ENTRY, ">DRouter::HandleMediaMessage;aMsg=%x", ( TUint )&( aMsg ) );
-
     C_TRACE( ( _T( "DRouter::HandleMediaMessage 0x%x ->" ), &aMsg ) );
     TUint8 rcvObjId( 0x00);
     ASSERT_RESET_ALWAYS( aMsg.Length() > ISI_HEADER_OFFSET_MEDIA, EIADOverTheLimits | EIADFaultIdentifier3 << KFaultIdentifierShift  );
-    switch( aMsg[ ISI_HEADER_OFFSET_MEDIA ] )
-        {
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-        case PN_MEDIA_USB:
-            {
-            C_TRACE( ( _T( "DRouter::HandleMediaMessage USB" ) ) );
-            OstTrace0( TRACE_NORMAL, DROUTER_HANDLEMEDIAMESSAGE_USB, "DRouter::HandleMediaMessage USB" );            
-            rcvObjId = EIADNokiaUsbPhonetLink;
-            break;
-            }
-        case PN_MEDIA_BT:
-            {
-            C_TRACE( ( _T( "DRouter::HandleMediaMessage BT" ) ) );
-            OstTrace0( TRACE_NORMAL, DROUTER_HANDLEMEDIAMESSAGE_BT, "DRouter::HandleMediaMessage BT" );            
-            rcvObjId = EIADNokiaBtPhonetLink;
-            break;
-            }
-        //TBR AFTER CMT ERROR CORRECTION : wk49 cellmo has correction, so remove this later on
-        case PN_MEDIA_ROUTING_REQ:
-            {
-            // TODO: write an error! Someone is sending to APE with wrong media.
-            // USB PDD
-            TRACE_ASSERT_ALWAYS;
-            rcvObjId = GET_RECEIVER_OBJ( aMsg );
-            Kern::Printf("Unknown message 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x", aMsg[ 0 ], aMsg[ 1 ], aMsg[ 2 ], aMsg[ 3 ], aMsg[ 4 ], aMsg[ 5 ], aMsg[ 6 ], aMsg[ 7 ], aMsg[ 8 ], aMsg[ 9 ] );
-            break;
-            }
-#endif
-        //TBR AFTER CMT ERROR CORRECTION
-        default:
-            {
-            rcvObjId = GET_RECEIVER_OBJ( aMsg );
-            ASSERT_RESET_ALWAYS( 0, EIADUnkownMedia | ( rcvObjId << KChannelNumberShift ) );
-            break;
-            }
-        }
+    rcvObjId = GET_RECEIVER_OBJ( aMsg );
+    ASSERT_RESET_ALWAYS( 0, EIADUnkownMedia | ( rcvObjId << KChannelNumberShift ) );
     // TODO: UNIQUE
     ASSERT_RESET_ALWAYS( rcvObjId < EIADSizeOfChannels, EIADWrongParameter | (TUint8)rcvObjId << KChannelNumberShift | EIADFaultIdentifier3 << KFaultIdentifierShift  );
     if( iChannelTable[ rcvObjId ].iChannel )
@@ -953,122 +822,8 @@
         DeAllocateBlock( aMsg );
         }
     C_TRACE( ( _T( "DRouter::HandleMediaMessage 0x%x <-" ), &aMsg ) );
-
     OstTrace0( TRACE_NORMAL, DROUTER_HANDLEMEDIAMESSAGE_EXIT, "<DRouter::HandleMediaMessage" );
-    }
-
-void DRouter::HandleControlMessage(
-        TDes8& aMsg
-        )
-    {
-    OstTrace1( TRACE_NORMAL, DROUTER_HANDLECONTROLMESSAGE_ENTRY, ">DRouter::HandleControlMessage;aMsg=%x", ( TUint )&( aMsg ) );
 
-    C_TRACE( ( _T( "DRouter::HandleControlMessage 0x%x ->" ), &aMsg ) );
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-    const TUint8* msgPtr( aMsg.Ptr() );
-    // Check legal msgs
-    ASSERT_RESET_ALWAYS( msgPtr[ ISI_HEADER_SIZE + PNS_MEDIA_SPECIFIC_RESP_OFFSET_SUBFUNCTION ] == PNS_MEDIA_SPECIFIC_RESP, EIADInvalidCtrlMessage | EIADFaultIdentifier1 << KFaultIdentifierShift  );
-    ASSERT_RESET_ALWAYS( msgPtr[ ISI_HEADER_SIZE + PNS_MEDIA_SPECIFIC_RESP_OFFSET_MEDIATOCTRL ] == PN_MEDIA_SOS, EIADInvalidCtrlMessage | EIADFaultIdentifier2 << KFaultIdentifierShift  );
-    ASSERT_RESET_ALWAYS( msgPtr[ ISI_HEADER_SIZE + PNS_MEDIA_SPECIFIC_RESP_OFFSET_ERRORCODE ] == PN_MCTRL_NO_ERROR, EIADInvalidCtrlMessage | EIADFaultIdentifier3 << KFaultIdentifierShift  );
-    ASSERT_RESET_ALWAYS( aMsg.Length() > CTRL_RESP_OFFSET_MESSAGEID,  EIADOverTheLimits | EIADFaultIdentifier4 << KFaultIdentifierShift );
-    switch( msgPtr[ CTRL_RESP_OFFSET_MESSAGEID ] )
-        {
-        case KIADCtrlConfResp:
-            {
-            // In MINI_OS case take the maximumdatasize amount from configuration message if bigger than "hat" constant.
-            iMaxFrameSize = KIADMaxIsiMsgSize;
-#ifdef NCP_COMMON_MINIOS
-            TUint16 confMsgSize = ( ( ( ( TUint16 )( msgPtr[ CTRL_CONF_RESP_OFFSET_SIZE_BYTE1 ] ) ) << 8 ) | ( ( TUint16 )( msgPtr[ CTRL_CONF_RESP_OFFSET_SIZE_BYTE2 ] ) ) );
-            // NOTE! This hat constant has relation to cmt side (sos_mm) if the const is changed in either place harmonize!!
-            const TUint16 KSosProxyHatConst( 2140 );
-            iMaxFrameSize = ( confMsgSize > KSosProxyHatConst ? confMsgSize : KIADMaxIsiMsgSize );
-            ASSERT_RESET_ALWAYS( iMaxFrameSize <= confMsgSize, EIADConfigurationInvalid );
-#endif
-            // Datalink layer initialized, router layer is this and knows it, now inform obj layer clients.
-            iConnectionStatus = EIADConnectionOk;
-            iBootDone = ETrue;
-            // Could call straight cause the context is the same thread (extension dfc)
-            NotifyObjLayerConnStat( EIADConnectionOk );
-            // TODO: pns_name_add_req
-            // Initialize channels to NULL when channel is opened !NULL.
-            for( TInt i( 0 ); i < EIADSizeOfChannels; ++i )
-                {
-                ASSERT_RESET_ALWAYS( !iChannelTable[ i ].iChannel, EIADChannelOpenedBeforePhysicalLayerInit );
-                C_TRACE( ( _T( "DRouter::HandleControlMessage loop TBR 0x%x" ), i ) );
-                if( iChannelTable[ i ].iWaitingChannel )
-                    {
-                    switch( iChannelTable[ i ].iType )
-                        {
-                        case ENormalOpen:
-                            {
-                            C_TRACE( ( _T( "DRouter::HandleControlMessage booting ENormalOpen 0x%x" ), i ) );
-                            OstTrace1( TRACE_NORMAL, DROUTER_HANDLECONTROLMESSAGE_NORMAL_OPEN, "DRouter::HandleControlMessage;i=%x", i );
-                            
-                            MIAD2ChannelApi* tmpChannel = iChannelTable[ i ].iWaitingChannel;
-                            iChannelTable[ i ].iChannel = tmpChannel;
-                            iChannelTable[ i ].iWaitingChannel = NULL;
-                            iChannelTable[ i ].iChannel->CompleteChannelRequest( EIADAsyncOpen, KErrNone );
-                            break;
-                            }
-                        case EDrmOpen:
-                            {
-                            C_TRACE( ( _T( "DRouter::HandleControlMessage booting EDrmOpen 0x%x" ), i ) );
-                            OstTrace1( TRACE_NORMAL, DROUTER_HANDLECONTROLMESSAGE_DRM_OPEN, "DRouter::HandleControlMessage EDrmOpen;i=%x", i );
-                            
-                            SendDrmReq( i );
-                            break;
-                            }
-                        case ENameAddOpen:
-                            {
-                            C_TRACE( ( _T( "DRouter::HandleControlMessage booting ENameAddOpen 0x%x" ), i ) );
-                            OstTrace1( TRACE_NORMAL, DROUTER_HANDLECONTROLMESSAGE_NAMEADD_OPEN, "DRouter::HandleControlMessage ENameAddOpen;i=%x", i );
-                            
-                            // TODO: Not done yet, problem info get as param, channel to allocate deallocate after open complete?
-                            ASSERT_RESET_ALWAYS( 0, EIADWrongParameter | EIADFaultIdentifier13 << KFaultIdentifierShift );
-                            break;
-                            }
-                        default:
-                            {
-                            ASSERT_RESET_ALWAYS( 0, EIADWrongParameter | EIADFaultIdentifier14 << KFaultIdentifierShift  );
-                            break;
-                            }
-                        }
-                    }
-                }
-            C_TRACE( ( _T( "DRouter::HandleControlMessage conf %d" ), iMaxFrameSize ) );
-            break;
-            }
-        case KIADCtrlDrmResp:
-            {
-            const TUint16 channelId( msgPtr[ CTR_DRM_REQ_RESP_OFFSET_CHANNEL_ID ] );
-            C_TRACE( ( _T( "DRouter::HandleControlMessage drm resp 0x%x" ), channelId ) );
-            OstTrace0( TRACE_NORMAL, DROUTER_HANDLECONTROLMESSAGE_DRM_RESP, "DRouter::HandleControlMessage drm resp");
-            
-            // Check is this waiting
-            ASSERT_RESET_ALWAYS( channelId < EIADSizeOfChannels, EIADWrongParameter | (TUint8)channelId << KChannelNumberShift | EIADFaultIdentifier28 << KFaultIdentifierShift );
-            TRACE_ASSERT_INFO( iChannelTable[ channelId ].iWaitingChannel, (TUint8)channelId<<KChannelNumberShift );
-            TRACE_ASSERT_INFO( !iChannelTable[ channelId ].iChannel, (TUint8)channelId<<KChannelNumberShift );
-            ASSERT_RESET_ALWAYS( iChannelTable[ channelId ].iType == EDrmOpen, EIADWrongTypeOfOpenPending | EIADFaultIdentifier1 << KFaultIdentifierShift );
-            MIAD2ChannelApi* tmpChannel = iChannelTable[ channelId ].iWaitingChannel;
-            iChannelTable[ channelId ].iChannel = tmpChannel;
-            iChannelTable[ channelId ].iWaitingChannel = NULL;
-            C_TRACE( ( _T( "DRouter::HandleControlMessage drm resp 0x%x 0x%x 0x%x 0x%x" ), channelId, tmpChannel, iChannelTable[ channelId ].iChannel, &aMsg ) );
-            iChannelTable[ channelId ].iChannel->CompleteChannelRequest( EIADAsyncOpen, KErrNone );
-            break;
-            }
-        default:
-            {
-            // If wrong message reset! IF changed take care of completion of requests.
-            ASSERT_RESET_ALWAYS( 0, EIADInvalidCtrlMessage | EIADFaultIdentifier5 << KFaultIdentifierShift  );
-            break;
-            }
-        } // switch
-#endif
-    // De-allocate cause not going anywhere else.
-    DeAllocateBlock( aMsg );
-    C_TRACE( ( _T( "DRouter::HandleControlMessage 0x%x <-" ), &aMsg ) );
-
-    OstTrace0( TRACE_NORMAL, DROUTER_HANDLECONTROLMESSAGE_EXIT, "<DRouter::HandleControlMessage" );
     }
 
 // KErrBadDescriptor, if message length too small
@@ -1131,17 +886,7 @@
             {
             switch( msg[ ISI_HEADER_OFFSET_RECEIVEROBJECT ] )
                 {
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-                // Router <-> SOSMM
-                case KIADObjId:
-                    {
-                    // Name add resp, drm or conf
-                    ASSERT_RESET_ALWAYS( msg[  ISI_HEADER_OFFSET_RESOURCEID ] == PN_NAMESERVICE || msg[  ISI_HEADER_OFFSET_RESOURCEID ] == PN_MEDIA_CONTROL, EIADWrongParameter | msg[  ISI_HEADER_OFFSET_RESOURCEID ] );
-                    route = ( msg[ ISI_HEADER_OFFSET_RESOURCEID ] == PN_NAMESERVICE ) ? EPnNameAddRespMsg : EControlMsg;
-                    break;
-                    }
-#endif
-                // Indication
+                // Indication NOTE! INDICATION HANDLING IS STILL LEGACY
                 case KIADEventSubscriptionObjId:
                     {
                     ASSERT_RESET_ALWAYS( msg[  ISI_HEADER_OFFSET_RESOURCEID ] != PN_PIPE, EIADWrongParameter | msg[  ISI_HEADER_OFFSET_RESOURCEID ] );
@@ -1169,6 +914,11 @@
             SET_RECEIVER_DEV( ptr, THIS_DEVICE );
             route = EIndicationMsg;
             }
+       else if ( msg[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] == PN_DEV_PC )// TODO: This (PN_DEV_GLOBAL) should be removed from Bridge when modem SW MCE Server is ok
+            {
+            C_TRACE( ( _T( "DRouter::CheckRouting message to PN_DEV_PC ") ) );
+            route=EUsbPhonetMsg;
+            }
 #ifdef MODEM_MCE_DOES_NOT_WORK_AS_IT_SHOULD
 #include <mceisi.h>
             else
@@ -1196,6 +946,12 @@
             Kern::Printf("Unknown message 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x", msg[ 0 ], msg[ 1 ], msg[ 2 ], msg[ 3 ], msg[ 4 ], msg[ 5 ], msg[ 6 ], msg[ 7 ], msg[ 8 ], msg[ 9 ] );
             }
         }
+    // APE to APE routing
+    else if( ( msg[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] == PN_DEV_OWN ) && ( msg[ ISI_HEADER_OFFSET_SENDERDEVICE ] == PN_DEV_OWN ) )
+        {
+        C_TRACE( ( _T( "DRouter::CheckRouting APE to APE routing" ) ) );
+        route = EIsiMsg;
+        }
     // Message to other media than sos in symbian side.
     else
         {
@@ -1228,18 +984,11 @@
             aTmp.DeAllocateBlock( aMsg );
             break;
             }
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-        case EControlMsg:
+        case EUsbPhonetMsg:
             {
-            aTmp.HandleControlMessage( aMsg );
+            aTmp.iChannelTable[ EIscNokiaUsbPhonetLink ].iChannel->ReceiveMsg( aMsg );
             break;
             }
-        case EPnNameAddRespMsg:
-            {
-            aTmp.HandlePnsNameAddResp( aMsg );
-            break;
-            }
-#endif // NCP_COMMON_BRIDGE_FAMILY
         case ENotKnownMsg:
             {
             // Not going to anywhere deallocate.
@@ -1266,6 +1015,7 @@
     C_TRACE( ( _T( "DRouter::CommonRxDfc ->" ) ) );
     DRouter& tmp = *reinterpret_cast<DRouter*>( aPtr );
     ASSERT_DFCTHREAD_INEXT();
+		
     if( tmp.iCommonRxQueue->Count() > KErrNone )
         {
         TDes8& msg( tmp.iCommonRxQueue->Get() );
@@ -1328,9 +1078,15 @@
     tempPtr.Append( 0x00 );
 
 //    ASSERT_RESET_ALWAYS( iConnectionStatus == EIADConnectionOk, EIADCmtConnectionLost | EIADFaultIdentifier2 << KFaultIdentifierShift );
-    SendMsg( tempPtr );
+    if( msgTmpPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] == PN_DEV_OWN )
+        {
+        MessageReceived( *reinterpret_cast<TDes8*>( const_cast<TDesC8*>(&aMsg) ) );
+        }
+    else
+        {
+        SendMsg( tempPtr );
+        }
     C_TRACE( ( _T( "DRouter::SendCommIsaEntityNotReachableResp 0x%x <-" ), &aMsg ) );
-
     OstTrace0( TRACE_NORMAL, DROUTER_SENDCOMMISAENTITYNOTREACHABLERESP_EXIT, "<DRouter::SendCommIsaEntityNotReachableResp" );
     }
 
@@ -1344,22 +1100,15 @@
     DRouter& tmp = *reinterpret_cast<DRouter*>( aPtr );
     if( !tmp.iBootDone )
         {
-#ifdef NCP_COMMON_BRIDGE_FAMILY
 #ifndef MODEM_MCE_DOES_NOT_WORK_AS_IT_SHOULD
         tmp.InitConnectionOk();
 #endif // MODEM_MCE_DOES_NOT_WORK_AS_IT_SHOULD
-#else
-        tmp.InitCmtConnection();
-#endif
         }
+    C_TRACE( ( _T( "DRouter::InitCmtDfc <-" ) ) );
+    OstTrace0( TRACE_NORMAL, DROUTER_INITCMTDFC_EXIT, "<DRouter::InitCmtDfc" );
 
-// ISCE    tmp.InitCmtConnection();
-    C_TRACE( ( _T( "DRouter::InitCmtDfc <-" ) ) );
-
-    OstTrace0( TRACE_NORMAL, DROUTER_INITCMTDFC_EXIT, "<DRouter::InitCmtDfc" );
     }
 
-#ifdef NCP_COMMON_BRIDGE_FAMILY
 void DRouter::InitConnectionOk()
     {
 
@@ -1396,216 +1145,6 @@
         }
     C_TRACE( ( _T( "DRouter::InitConnectionOk <-" ) ) );
     }
-#endif // NCP_COMMON_BRIDGE_FAMILY
-
-void DRouter::InitCmtConnection(
-        // None
-        )
-    {
-    OstTrace0( TRACE_NORMAL, DROUTER_INITCMTCONNECTION_ENTRY, ">DRouter::InitCmtConnection" );
-
-    C_TRACE( ( _T( "DRouter::InitCmtConnection ->" ) ) );
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-
-    // send configuration request to proxy
-    const TInt KCtrlConfReqLength( 14 );
-    //ASSERT_RESET_ALWAYS( iIST, EIADNullParameter | EIADFaultIdentifier16 << KFaultIdentifierShift  );
-    TDes8& temp = AllocateBlock( KCtrlConfReqLength );
-    ASSERT_RESET_ALWAYS( ( KCtrlConfReqLength > CTRL_REQ_OFFSET_MESSAGEID + 2 ), EIADOverTheLimits | EIADFaultIdentifier6 << KFaultIdentifierShift  );
-    temp.SetLength( KCtrlConfReqLength );
-    TUint8* tmpPtr( const_cast<TUint8*>( temp.Ptr() ) );
-    tmpPtr[ ISI_HEADER_OFFSET_MEDIA ]                                       = PN_MEDIA_SOS;
-    SET_RECEIVER_DEV( tmpPtr, PN_MEDIA_ROUTING_REQ );
-    SET_SENDER_DEV( tmpPtr, THIS_DEVICE );
-    tmpPtr[ ISI_HEADER_OFFSET_RESOURCEID ]                                  = PN_MEDIA_CONTROL;
-    SET_LENGTH( tmpPtr, ( KCtrlConfReqLength - PN_HEADER_SIZE ) );
-    SET_RECEIVER_OBJ( tmpPtr, PN_OBJ_ROUTER );
-    SET_SENDER_OBJ( tmpPtr, KIADObjId );
-    tmpPtr[ ISI_HEADER_SIZE + PNS_MEDIA_SPECIFIC_REQ_OFFSET_UTID ]          = 0x00;
-    tmpPtr[ ISI_HEADER_SIZE + PNS_MEDIA_SPECIFIC_REQ_OFFSET_SUBFUNCTION ]   = PNS_MEDIA_SPECIFIC_REQ;
-    tmpPtr[ ISI_HEADER_SIZE + PNS_MEDIA_SPECIFIC_REQ_OFFSET_MEDIATOCTRL ]   = PN_MEDIA_SOS;
-    tmpPtr[ CTRL_REQ_OFFSET_MESSAGEID ]                                     = KIADCtrlConfReq;
-    tmpPtr[ CTRL_REQ_OFFSET_MESSAGEID + 1 ]                                 = 0x00; // Filler
-    tmpPtr[ CTRL_REQ_OFFSET_MESSAGEID +2 ]                                  = 0x00; // Filler
-    temp.SetLength( KCtrlConfReqLength );
-    SendMsg( temp );
-#endif // NCP_COMMON_BRIDGE_FAMILY
-
-    C_TRACE( ( _T( "DRouter::InitCmtConnection <-" ) ) );
-
-    OstTrace0( TRACE_NORMAL, DROUTER_INITCMTCONNECTION_EXIT, "<DRouter::InitCmtConnection" );
-    }
-
-void DRouter::SendDrmReq(
-        const TUint16 aChannelId
-        )
-    {
-    OstTraceExt1( TRACE_NORMAL, DROUTER_SENDDRMREQ_ENTRY, ">DRouter::SendDrmReq;aChannelId=%hx", aChannelId );
-
-    C_TRACE( ( _T( "DRouter::SendDrmReq 0x%x ->" ), aChannelId) );
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-    // DRM REQ/RESP messages are spec so that only 8-bit values for channelid are possible.
-    ASSERT_RESET_ALWAYS( aChannelId <= 0xff, EIADTooManyBytesToPresent );
-    TDes8& block = AllocateBlock( KIADCtrlDrmReqLength );
-    ASSERT_RESET_ALWAYS( ( KIADCtrlDrmReqLength > CTRL_DRM_REQ_OFFSET_REQUIRED_CHANNEL_ID ), EIADOverTheLimits | EIADFaultIdentifier7 << KFaultIdentifierShift  );;
-    block.SetLength( KIADCtrlDrmReqLength );
-    TUint8* ptr( const_cast<TUint8*>( block.Ptr() ) );
-    ptr[ ISI_HEADER_OFFSET_MEDIA ]                                      = PN_MEDIA_SOS;
-    SET_RECEIVER_DEV( ptr, PN_MEDIA_ROUTING_REQ );
-    SET_SENDER_DEV( ptr, THIS_DEVICE );
-    ptr[ ISI_HEADER_OFFSET_RESOURCEID ]                                 = PN_MEDIA_CONTROL;
-    SET_LENGTH( ptr, ( KIADCtrlDrmReqLength - PN_HEADER_SIZE ) );
-    SET_RECEIVER_OBJ( ptr, PN_OBJ_ROUTER );
-    SET_SENDER_OBJ( ptr, KIADObjId );
-    ptr[ ISI_HEADER_SIZE + PNS_MEDIA_SPECIFIC_REQ_OFFSET_UTID ]         = aChannelId;
-    ptr[ ISI_HEADER_SIZE + PNS_MEDIA_SPECIFIC_REQ_OFFSET_SUBFUNCTION ]  = PNS_MEDIA_SPECIFIC_REQ;
-    ptr[ ISI_HEADER_SIZE + PNS_MEDIA_SPECIFIC_REQ_OFFSET_MEDIATOCTRL ]  = PN_MEDIA_SOS;
-    ptr[ CTRL_REQ_OFFSET_MESSAGEID ]                                    = KIADCtrlDrmReq;
-    ptr[ CTRL_DRM_REQ_OFFSET_REQUIRED_CHANNEL_ID ]                      = aChannelId;
-    ASSERT_RESET_ALWAYS( iConnectionStatus == EIADConnectionOk, EIADCmtConnectionLost | EIADFaultIdentifier3 << KFaultIdentifierShift );
-    SendMsg( block );
-#endif // NCP_COMMON_BRIDGE_FAMILY
-    C_TRACE( ( _T( "DRouter::SendDrmReq 0x%x <-" ), aChannelId) );
-
-    OstTrace0( TRACE_NORMAL, DROUTER_SENDDRMREQ_EXIT, "<DRouter::SendDrmReq" );
-    }
-
-void DRouter::SendPnsNameAddReq( 
-        const TUint16 aChannel, 
-        const TDesC8& aOpenInfo
-        )
-    {
-    OstTraceExt2( TRACE_NORMAL, DROUTER_SENDPNSNAMEADDREQ_ENTRY, ">DRouter::SendPnsNameAddReq;aChannel=%hx;aOpenInfo=%x", aChannel, ( TUint )&( aOpenInfo ) );
-
-    C_TRACE( ( _T( "DRouter::SendPnsNameAddReq 0x%x 0x%x ->" ), aChannel, &aOpenInfo ) );
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-
-    TUint16 msgLength( ISI_HEADER_SIZE + SIZE_PNS_NAME_ADD_REQ );
-    TDes8& block = AllocateBlock( msgLength );
-    ASSERT_RESET_ALWAYS( ( msgLength > ( ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_NAMEENTRY + 7 ) ), EIADOverTheLimits | EIADFaultIdentifier8 << KFaultIdentifierShift );
-    block.SetLength( msgLength );
-    TUint8* ptr = const_cast<TUint8*>( block.Ptr() );
-
-    ptr[ ISI_HEADER_OFFSET_MEDIA ] = PN_MEDIA_SOS;
-    SET_RECEIVER_DEV( ptr, OTHER_DEVICE_1 );
-    SET_SENDER_DEV( ptr, THIS_DEVICE );
-    ptr[ ISI_HEADER_OFFSET_RESOURCEID ] = PN_NAMESERVICE;
-    SET_LENGTH( ptr, ( msgLength - PN_HEADER_SIZE ) );
-    SET_RECEIVER_OBJ( ptr, PN_OBJ_ROUTER);
-    SET_SENDER_OBJ( ptr, KIADObjId );
-    ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_UTID ] = aChannel; 
-    ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_SUBFUNCTION ] = PNS_NAME_ADD_REQ;
-    ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_RESERVED1 ] = 0x00;
-    ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_RESERVED2 ] = 0x00;
-
-    TUint8* resourcePtr = const_cast<TUint8*>( aOpenInfo.Ptr() );
-    /*
-    //TBR
-    for( TInt i( 0 ); i < aOpenInfo.Length(); i++ )
-        {
-        Kern::Printf( "resource[%d]0x%x", i, resourcePtr[i] );
-        }
-    //TBR
-    */
-    switch( aOpenInfo.Length() )
-        {
-        // Resource bigendian 32-bit, TODO : how about winscw?
-        case 4:
-            {
-            C_TRACE( ( _T( "DRouter::SendPnsNameAddReq 32-bit resourceid used 0x%x 0x%x" ), aChannel, &aOpenInfo ) );
-            OstTraceExt5( TRACE_NORMAL, DROUTER_SENDPNSNAMEADDREQ_32BIT, "DRouter::SendPnsNameAddReq;aChannel=%hx;resourcePtr[0]=%hhx;resourcePtr[1]=%hhx;resourcePtr[2]=%hhx;resourcePtr[3]=%hhx", aChannel, resourcePtr[0], resourcePtr[1], resourcePtr[2], resourcePtr[3] );
-            
-            ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_NAMEENTRY ] = resourcePtr[ 0 ];
-            ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_NAMEENTRY + 1 ] = resourcePtr[ 1 ];
-            ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_NAMEENTRY + 2 ] = resourcePtr[ 2 ];
-            ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_NAMEENTRY + 3 ] = resourcePtr[ 3 ];
-            break;
-            }
-        case 1:
-            {
-            ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_NAMEENTRY ] = 0x00;
-            ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_NAMEENTRY + 1 ] = 0x00;
-            ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_NAMEENTRY + 2 ] = 0x00;
-            ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_NAMEENTRY + 3 ] = resourcePtr[ 0 ];
-            OstTraceExt2( TRACE_NORMAL, DROUTER_SENDPNSNAMEADDREQ_8BIT, "DRouter::SendPnsNameAddReq;aChannel=%hx;resourcePtr[0]=%hhx", aChannel, resourcePtr[0] );
-            C_TRACE( ( _T( "DRouter::SendPnsNameAddReq 8-bit resourceid used 0x%x 0x%x" ), aChannel, &aOpenInfo ) );
-            break;
-            }
-        default:
-            {
-            ASSERT_RESET_ALWAYS( 0, EIADWrongParameter | EIADFaultIdentifier17 << KFaultIdentifierShift  );
-            break;
-            }
-        }
-    // Phonet device id associated with name.
-    ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_NAMEENTRY + 4 ] = THIS_DEVICE;
-    // Phonet object id associated with name.
-    ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_NAMEENTRY + 5 ] = aChannel;
-    // Record flags. This entry cannot be changed.
-    ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_NAMEENTRY + 6 ] = PN_NAME_NOCHG;
-    ptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_NAMEENTRY + 7 ] = 0x00;
-    ASSERT_RESET_ALWAYS( iConnectionStatus == EIADConnectionOk, EIADCmtConnectionLost | EIADFaultIdentifier4 << KFaultIdentifierShift );
-    SendMsg( block );
-#endif // NCP_COMMON_BRIDGE_FAMILY
-    C_TRACE( ( _T( "DRouter::SendPnsNameAddReq 0x%x 0x%x <-" ), aChannel, &aOpenInfo ) );
-
-    OstTrace0( TRACE_NORMAL, DROUTER_SENDPNSNAMEADDREQ_EXIT, "<DRouter::SendPnsNameAddReq" );
-    }
-
-void DRouter::HandlePnsNameAddResp(
-        TDes8& aMsg
-        )
-    {
-    OstTrace1( TRACE_NORMAL, DROUTER_HANDLEPNSNAMEADDRESP_ENTRY, ">DRouter::HandlePnsNameAddResp;aMsg=%x", ( TUint )&( aMsg ) );
-
-    C_TRACE( ( _T( "DRouter::HandlePnsNameAddResp 0x%x ->" ), &aMsg ) );
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-
-    // Channel id from Transaction ID.
-    const TUint8* cptr( aMsg.Ptr() );
-    ASSERT_RESET_ALWAYS( ( ISI_HEADER_SIZE + PNS_NAME_ADD_RESP_OFFSET_REASON ) < aMsg.Length(), EIADOverTheLimits | EIADFaultIdentifier9 << KFaultIdentifierShift  );
-    TUint8 channelId( cptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_REQ_OFFSET_UTID ] );
-    ASSERT_RESET_ALWAYS( channelId < EIADSizeOfChannels, EIADWrongParameter | (TUint8)channelId << KChannelNumberShift | EIADFaultIdentifier23 << KFaultIdentifierShift );
-    if( iChannelTable[ channelId ].iWaitingChannel )
-        {
-        ASSERT_RESET_ALWAYS( iChannelTable[ channelId ].iType == ENameAddOpen, EIADWrongTypeOfOpenPending | EIADFaultIdentifier2 << KFaultIdentifierShift );
-        if( cptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_RESP_OFFSET_REASON ] == PN_NAME_OK )
-            {
-            MIAD2ChannelApi* tmpChannel = iChannelTable[ channelId ].iWaitingChannel;
-            iChannelTable[ channelId ].iChannel = tmpChannel;
-            iChannelTable[ channelId ].iWaitingChannel = NULL;
-            C_TRACE( ( _T( "DRouter::HandlePnsNameAddResp name add resp ok 0x%x 0x%x 0x%x 0x%x" ), channelId, tmpChannel, iChannelTable[ channelId ].iChannel, &aMsg ) );
-
-            OstTraceExt2( TRACE_NORMAL, DROUTER_HANDLEPNSNAMEADDRESP_OK, "DRouter::HandlePnsNameAddResp OK;channelId=%hhx;tmpChannel=%x", channelId, (TUint) ( tmpChannel ) );
-            
-            iChannelTable[ channelId ].iChannel->CompleteChannelRequest( EIADAsyncOpen, KErrNone );
-            }
-        else
-            {
-            C_TRACE( ( _T( "DRouter::HandlePnsNameAddResp name add resp NOK 0x%x 0x%x" ), channelId, &aMsg ) );
-            OstTraceExt1( TRACE_NORMAL, DROUTER_HANDLEPNSNAMEADDRESP_NOK, "DRouter::HandlePnsNameAddResp;channelId=%hhx", channelId );
-            
-            TRACE_ASSERT( cptr[ ISI_HEADER_SIZE + PNS_NAME_ADD_RESP_OFFSET_REASON ] == PN_NAME_OK );
-            iChannelTable[ channelId ].iWaitingChannel->CompleteChannelRequest( EIADAsyncOpen, KErrNotSupported );
-            // Set channel open waiting to null, open was failed.
-            iChannelTable[ channelId ].iWaitingChannel = NULL;
-            }
-        }
-    else
-        {
-        // Check is this waiting
-        // TODO: Does pns_name_add_resp need to be informed with comm_isa_entity_not_reachable_resp if channel is closed?
-        TRACE_ASSERT_INFO( !iChannelTable[ channelId ].iChannel, channelId<<KChannelNumberShift );
-        TRACE_ASSERT_INFO( iChannelTable[ channelId ].iWaitingChannel, channelId<<KChannelNumberShift ); // TODO: This will come when open cancel called with resource.
-        }
-    // De-allocate cause not going anywhere else.
-    DeAllocateBlock( aMsg );
-#endif // NCP_COMMON_BRIDGE_FAMILY
-
-    C_TRACE( ( _T( "DRouter::HandlePnsNameAddResp 0x%x <-" ), &aMsg ) );
-
-    OstTrace0( TRACE_NORMAL, DROUTER_HANDLEPNSNAMEADDRESP_EXIT, "<DRouter::HandlePnsNameAddResp" );
-    }
 
 // router and handler (pipe and indication)
 TInt DRouter::SendMsg(
@@ -1665,40 +1204,34 @@
          )
     {
     OstTraceExt2( TRACE_NORMAL, DROUTER_SETSENDERINFO_ENTRY, ">DRouter::SetSenderInfo;aMessage=%x;aCh=%hx", ( TUint )&( aMessage ), aCh );
-
-    C_TRACE( ( _T( "DRouter::SetSenderInfo 0x%x ->" ), &aMessage ) );    
+    C_TRACE( ( _T( "DRouter::SetSenderInfo 0x%x ->" ), &aMessage ) );
     TUint8* msgBlockPtr = const_cast<TUint8*>( aMessage.Ptr() );
     ASSERT_RESET_ALWAYS( aMessage.Length() > ISI_HEADER_OFFSET_MEDIA, EIADOverTheLimits | EIADFaultIdentifier10 << KFaultIdentifierShift  );
-    switch( aCh )
-        {
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-        case EIADNokiaBtPhonetLink:
-            {
-            OstTrace0( TRACE_NORMAL, DROUTER_SETSENDERINFO_BT, "DRouter::SetSenderInfo BT" );            
-            msgBlockPtr[ ISI_HEADER_OFFSET_MEDIA ] = PN_MEDIA_BT;
-            break;
-            }
-        case EIADNokiaUsbPhonetLink:
+    if ( aCh == EIADNokiaUsbPhonetLink )
+ 	      {
+        msgBlockPtr[ ISI_HEADER_OFFSET_MEDIA ] = PN_MEDIA_SOS;
+        SET_RECEIVER_DEV( msgBlockPtr, OTHER_DEVICE_1 );
+        }
+    else{
+        SET_SENDER_OBJ( msgBlockPtr, aCh );    
+        C_TRACE( ( _T( "DRouter::SetSenderInfo receiver device %d" ), msgBlockPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] ) );
+        if( msgBlockPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] == PN_DEV_OWN )
             {
-            OstTrace0( TRACE_NORMAL, DROUTER_SETSENDERINFO_USB, "DRouter::SetSenderInfo USB" );            
-            msgBlockPtr[ ISI_HEADER_OFFSET_MEDIA ] = PN_MEDIA_USB;
-            break;
+            C_TRACE( ( _T( "DRouter::SetSenderInfo message to APE from APE" ) ) );
+            SET_SENDER_DEV( msgBlockPtr, PN_DEV_OWN );
             }
-#endif
-        default:
+        else
             {
+            C_TRACE( ( _T( "DRouter::SetSenderInfo message to MODEM from APE" ) ) );
             msgBlockPtr[ ISI_HEADER_OFFSET_MEDIA ] = PN_MEDIA_SOS;
+            SET_RECEIVER_DEV( msgBlockPtr, OTHER_DEVICE_1 );
             SET_SENDER_DEV( msgBlockPtr, THIS_DEVICE );
-            SET_RECEIVER_DEV( msgBlockPtr, OTHER_DEVICE_1 );
-            SET_SENDER_OBJ( msgBlockPtr, aCh );
-            break;
             }
         }
-    C_TRACE( ( _T( "DRouter::SetSenderInfo 0x%x <-" ), &aMessage ) );        
-    
+    C_TRACE( ( _T( "DRouter::SetSenderInfo 0x%x <-" ), &aMessage ) );
     OstTrace0( TRACE_NORMAL, DROUTER_SETSENDERINFO_EXIT, "<DRouter::SetSenderInfo" );
     }
-    
+
 void DRouter::CheckSameThreadContext()
     {
     OstTrace0( TRACE_NORMAL, DROUTER_CHECKSAMETHREADCONTEXT_ENTRY, ">DRouter::CheckSameThreadContext" );
@@ -1768,11 +1301,7 @@
         {
         case PN_MEDIA_SOS:
             {
-#ifndef NCP_COMMON_BRIDGE_FAMILY
-            linkdId = EISIMediaSOS;
-#else
             linkdId = EISIMediaHostSSI;
-#endif
             break;
             }
         // Not supported media
@@ -1786,5 +1315,47 @@
 
     }
 
+//From objectapi
+EXPORT_C MISIObjectRouterIf* MISIObjectRouterIf::Connect( const TInt32 aUID, TUint8& aObjId, MISIRouterObjectIf* aCallback )
+    {
+    C_TRACE( ( _T( "MISIObjectRouterIf::Connect %d 0x%x 0x%x>" ), aUID, aObjId, aCallback ) );
+    //Connect( aUID, aObjId, aCallback );
+    if( aUID == KNameServiceUID )
+        {
+        C_TRACE( ( _T( "MISIObjectRouterIf was nameservice" ) ) );
+        DRouter::iThisPtr->iNameService = aCallback;
+        aObjId = PN_OBJ_ROUTING_REQ; // 0x00
+        }
+    else if( aUID == KCommunicationManagerUID )
+        {
+        C_TRACE( ( _T( "MISIObjectRouterIf was communicationmanager" ) ) );
+        DRouter::iThisPtr->iCommunicationManager = aCallback;
+        aObjId = PN_OBJ_EVENT_MULTICAST; // 0x20
+        }
+    else
+        {
+        C_TRACE( ( _T( "MISIObjectRouterIf unknown object api client" ) ) );
+        }
+    MISIObjectRouterIf* tmp = DRouter::iThisPtr;
+    C_TRACE( ( _T( "MISIObjectRouterIf::Connect %d 0x%x 0x%x<" ), aUID, aObjId, aCallback ) );
+    return tmp;
+    }
+
+TInt DRouter::Send( TDes8& aMessage, const TUint8 aObjId )
+    {
+  	C_TRACE( ( _T( "DRouter::Send objectapi 0x%x 0x%x>" ), &aMessage, aObjId ) );
+    if( aObjId == PN_OBJ_EVENT_MULTICAST ) //from communicationmanager
+        {
+        // Don't put to mainrxqueue
+        HandleIsiMessage( aMessage );
+        }
+    else
+        {
+        Receive( aMessage );
+        }
+    C_TRACE( ( _T( "DRouter::Send objectapi 0x%x 0x%x<" ), &aMessage, aObjId ) );
+  	return KErrNone;
+    }
+
 // End of file.