adaptationlayer/tsy/nokiatsy_dll/src/cmmnetmesshandler.cpp
changeset 8 6295dc2169f3
parent 7 fa67e03b87df
child 9 8486d82aef45
--- 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.