diff -r 510c70acdbf6 -r 8ccc39f9d787 connectivitylayer/isce/isirouter_dll/src/isicltransceiver.cpp --- a/connectivitylayer/isce/isirouter_dll/src/isicltransceiver.cpp Mon Nov 09 10:36:19 2009 +0000 +++ b/connectivitylayer/isce/isirouter_dll/src/isicltransceiver.cpp Thu Jan 14 10:44:58 2010 +0200 @@ -10,8 +10,8 @@ * Nokia Corporation - initial contribution. * * Contributors: -* -* Description: +* +* Description: * */ @@ -75,11 +75,13 @@ delete []iLinksArray; C_TRACE( ( _T( "DISICLTransceiver::~DISICLTransceiver<" ) ) ); } - -void DISICLTransceiver::SendCommIsaEntityNotReachableResp( TDes8& aMessage ) + +TInt DISICLTransceiver::SendCommIsaEntityNotReachableResp( TDes8& aMessage ) { C_TRACE( ( _T( "DISICLTransceiver::SendCommIsaEntityNotReachableResp 0x%x>" ), &aMessage ) ); const TUint8* msgTmpPtr( aMessage.Ptr() ); + TInt error = KErrAlreadyExists; + // To avoid COMM_ISA_ENTITY_NOT_REACHABLE_RESP loop if( msgTmpPtr[ ISI_HEADER_OFFSET_MESSAGEID ] != COMMON_MESSAGE && msgTmpPtr[ ISI_HEADER_OFFSET_SUBMESSAGEID ] != COMM_ISA_ENTITY_NOT_REACHABLE_RESP ) @@ -89,7 +91,7 @@ TUint8 length( 16 ); TDes8& tempPtr = MemApi::AllocBlock( ISI_HEADER_SIZE + SIZE_COMMON_MESSAGE_COMM_ISA_ENTITY_NOT_REACHABLE_RESP ); ASSERT_RESET_ALWAYS( &tempPtr, ( EISICLTransceiverMemAllocFailure1 | EDISICLTransceiverTraceId << KClassIdentifierShift ) ); - ASSERT_RESET_ALWAYS( ISI_HEADER_SIZE + SIZE_COMMON_MESSAGE_COMM_ISA_ENTITY_NOT_REACHABLE_RESP > ISI_HEADER_OFFSET_MESSAGEID, ( EISICLTransceiverOverTheLimits | EDISICLTransceiverTraceId << KClassIdentifierShift ) ); + ASSERT_RESET_ALWAYS( ISI_HEADER_SIZE + SIZE_COMMON_MESSAGE_COMM_ISA_ENTITY_NOT_REACHABLE_RESP > ISI_HEADER_OFFSET_MESSAGEID, ( EISICLTransceiverOverTheLimits | EDISICLTransceiverTraceId << KClassIdentifierShift ) ); TUint8* ptr = const_cast( tempPtr.Ptr() ); // We start to append from transaction id. tempPtr.SetLength( ISI_HEADER_OFFSET_TRANSID ); @@ -117,23 +119,25 @@ // Filler tempPtr.Append( 0x00 ); // Filler - tempPtr.Append( 0x00 ); + tempPtr.Append( 0x00 ); RouteISIMessage( tempPtr ); - } + error = RouteISIMessage( tempPtr ); + } else { C_TRACE( ( _T( "DISICLTransceiver Not sending another CommIsaEntityNotReachableResp" ) ) ); } C_TRACE( ( _T( "DISICLTransceiver::SendCommIsaEntityNotReachableResp 0x%x<" ), &aMessage ) ); + return error; } -void DISICLTransceiver::RouteISIMessage( TDes8& aMessage ) +TInt DISICLTransceiver::RouteISIMessage( TDes8& aMessage ) { - C_TRACE( ( _T( "DISICLTransceiver::RouteISIMessage 0x%x>" ), &aMessage ) ); - TInt error( ValidateISIMessage( aMessage ) ); //TODO what to do with error? - TBool sendOk( EFalse ); - TUint8* messageBlockPtr( const_cast( aMessage.Ptr() ) ); - switch( messageBlockPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] ) + C_TRACE( ( _T( "DISICLTransceiver::RouteISIMessage 0x%x>" ), &aMessage ) ); + TInt error( ValidateISIMessage( aMessage ) ); + TBool sendOk( EFalse ); + TUint8* messageBlockPtr( const_cast( aMessage.Ptr() ) ); + switch( messageBlockPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] ) { case PN_DEV_APE: { @@ -154,7 +158,7 @@ TUint8 linkId = MapDeviceToMedia( messageBlockPtr[ ISI_HEADER_OFFSET_RECEIVERDEVICE ] ); ASSERT_RESET_ALWAYS( linkId < EISIAmountOfMedias, ( EISICLTransceiverNotSupportedMedia | EDISICLTransceiverTraceId << KClassIdentifierShift ) ); MISIRouterLinkIf* link = iLinksArray[ linkId ]; - ASSERT_RESET_ALWAYS( link, ( EISICLTransceiverNULLPtr | EDISICLTransceiverTraceId << KClassIdentifierShift ) ); + ASSERT_RESET_ALWAYS( link, ( EISICLTransceiverNULLPtr | EDISICLTransceiverTraceId << KClassIdentifierShift ) ); sendOk = link->Send( aMessage ); C_TRACE( ( _T( "DISIRouter link sendOk %d" ), sendOk ) ); break; @@ -164,8 +168,9 @@ { SendCommIsaEntityNotReachableResp( aMessage ); MemApi::DeallocBlock( aMessage ); - } + } C_TRACE( ( _T( "DISICLTransceiver::RouteISIMessage 0x%x<" ), &aMessage ) ); + return error; } // KErrBadDescriptor, if message length too small @@ -189,7 +194,7 @@ // If the ISI message length is bigger that the largest supported. msgOk = ( ( msgOk == KErrNone && isiMsgLength > KMaxISIMsgSize ) ? KErrUnderflow : msgOk ); TRACE_ASSERT_INFO( msgOk == KErrNone, msgOk ); - // If the ISI message length with PN_HEADER_SIZE is less or equal than ISI_HEADER_OFFSET_MESSAGEID. + // If the ISI message length with PN_HEADER_SIZE is less or equal than ISI_HEADER_OFFSET_MESSAGEID. msgOk = ( ( msgOk == KErrNone && isiMsgLength <= ISI_HEADER_OFFSET_MESSAGEID ) ? KErrUnderflow : msgOk ); TRACE_ASSERT_INFO( msgOk == KErrNone, msgOk ); TRACE_ASSERT_INFO( msgOk == KErrNone, msgOk );