diff -r fa67e03b87df -r 6295dc2169f3 adaptationlayer/tsy/nokiatsy_dll/src/cmmnetmesshandler.cpp --- a/adaptationlayer/tsy/nokiatsy_dll/src/cmmnetmesshandler.cpp Wed Feb 17 13:58:55 2010 +0200 +++ b/adaptationlayer/tsy/nokiatsy_dll/src/cmmnetmesshandler.cpp Wed Apr 21 14:29:55 2010 +0300 @@ -360,6 +360,8 @@ iNetMessageHandlingOngoing = EFalse; + iLastNetModemRegStatusInd = NULL; + // Request network signal strength (RSSI) NetRssiGetReq(); } @@ -2913,6 +2915,11 @@ TFLOGSTRING("TSY: CMmNetMessHandler::StartHandlingNetModemRegStatusMessages - NET_MODEM_REG_STATUS_IND"); OstTrace0( TRACE_NORMAL, DUP2_CMMNETMESSHANDLER_STARTHANDLINGNETMODEMREGSTATUSMESSAGES, "CMmNetMessHandler::StartHandlingNetModemRegStatusMessages - NET_MODEM_REG_STATUS_IND" ); + // destroy previous ind and store current NET_MODEM_REG_STATUS_IND + // for later use + delete iLastNetModemRegStatusInd; + iLastNetModemRegStatusInd = tempHBuf; + // Start handling NET_MODEM_REG_STATUS_IND message. NetModemRegStatusInd( isimessage ); } @@ -3060,8 +3067,13 @@ } } - // Delete used message. - delete tempHBuf; + // if message is NET_MODEM_REG_STATUS_IND it's not destroyed + // because of it can be needed later on. + if ( NET_MODEM_REG_STATUS_IND != messageId ) + { + // Delete used message. + delete tempHBuf; + } } } @@ -3182,6 +3194,52 @@ return iNetOperatorNameHandler; } +// --------------------------------------------------------------------------- +// CMmNetMessHandler::HandleLastNetModemRegStatusInd +// Handles last received NET_MODEM_REG_STATUS_IND so that network info +// is completed to upper layers +// --------------------------------------------------------------------------- +// +void CMmNetMessHandler::HandleLastNetModemRegStatusInd() + { +TFLOGSTRING("TSY: CMmNetMessHandler::HandleLastNetModemRegStatusInd"); +OstTrace0( TRACE_NORMAL, CMMNETMESSHANDLER_HANDLELASTNETMODEMREGSTATUSIND, "CMmNetMessHandler::HandleLastNetModemRegStatusInd" ); + + TBool handlingNeeded( ETrue ); + if( iNetMessageQueue.Count() ) + { + // we need to check is there any NET_MODEM_REG_STATUS_IND or + // NET_MODEM_REG_STATUS_GET_RESP in queue. If there is one + // of these two messages, we don't need to handle last received + // NET_MODEM_REG_STATUS_IND + for( int i = 0; i < iNetMessageQueue.Count(); i++ ) + { + const TDesC8& message( *iNetMessageQueue[i] ); + TIsiReceiveC isimessage( ( TIsiReceiveC ) message ); + TInt messageId( isimessage.Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) ); + + if( NET_MODEM_REG_STATUS_IND == messageId || + NET_MODEM_REG_STATUS_GET_RESP == messageId ) + { +TFLOGSTRING("TSY: CMmNetMessHandler::HandleLastNetModemRegStatusInd: Similar messages already in queue, no need to handle last received ind"); +OstTrace0( TRACE_NORMAL, DUP1_CMMNETMESSHANDLER_HANDLELASTNETMODEMREGSTATUSIND, "CMmNetMessHandler::HandleLastNetModemRegStatusInd:: Similar messages already in queue, no need to handle last received ind" ); + handlingNeeded = EFalse; + break; + } + } + } + + if( iLastNetModemRegStatusInd && handlingNeeded ) + { + // We need to handle last received NET_MODEM_REG_STATUS_IND + // so that we complete network info to upper layers (for example + // NITZ name) + const TDesC8& message( *iLastNetModemRegStatusInd ); + TIsiReceiveC isimessage( ( TIsiReceiveC ) message ); + QueueNetModemRegStatusMessagesL( message ); + } + } + // ============================================================================= // CDelayTimer: Used for delaying for completion of Packet transfer state // from GPDS_RADIO_AVTIVITY_IND.