diff -r 77415202bfc8 -r fcbbe021d614 connectionmonitoring/connmon/connectionmonitor/src/ConnMonIAP.cpp --- a/connectionmonitoring/connmon/connectionmonitor/src/ConnMonIAP.cpp Tue Feb 02 00:24:11 2010 +0200 +++ b/connectionmonitoring/connmon/connectionmonitor/src/ConnMonIAP.cpp Fri Apr 16 15:21:37 2010 +0300 @@ -33,6 +33,7 @@ #include "connmontelnoti.h" #include "ConnMonBearerNotifier.h" #include "log.h" +#include "cellulardatausagekeyupdater.h" // ============================ MEMBER FUNCTIONS =============================== @@ -1180,6 +1181,7 @@ { LOGENTRFN("CConnMonIAP::GetBearerInfo()") TInt err( KErrNone ); + TBool getBearerCalled( EFalse ); // Find connection matching the given Id TInt index = Index( aConnectionId ); @@ -1198,6 +1200,7 @@ aConnectionId, iConnInfos[index].iBearer, iConnInfos[index].iBearerInfo ); + getBearerCalled = ETrue; } if ( KErrNone == err ) { @@ -1243,17 +1246,21 @@ iConnInfos[index].iBearerInfo.iBearer == EBearerInfoHSUPA || iConnInfos[index].iBearerInfo.iBearer == EBearerInfoHSxPA ) ) { - // CSD/HSCSD info could change after the first query also - // GPRS/EdgeGPRS/WCDMA info can change. - TInt bearer( EBearerUnknown ); - TBearerInfo bearerInfo; - - LOGIT("GetBearerInfo: GetBearer() 2nd query") - err = GetBearer( aConnectionId, bearer, bearerInfo ); - if ( ( KErrNone == err ) && ( bearerInfo.iBearer != EBearerInfoUnknown ) ) + // If GetBearer() was just called, no need to do it again. + if ( !getBearerCalled ) { - iConnInfos[index].iBearer = bearer; - iConnInfos[index].iBearerInfo = bearerInfo; + // CSD/HSCSD info could change after the first query also + // GPRS/EdgeGPRS/WCDMA info can change. + TInt bearer( EBearerUnknown ); + TBearerInfo bearerInfo; + + LOGIT("GetBearerInfo: GetBearer() 2nd query") + err = GetBearer( aConnectionId, bearer, bearerInfo ); + if ( ( KErrNone == err ) && ( bearerInfo.iBearer != EBearerInfoUnknown ) ) + { + iConnInfos[index].iBearer = bearer; + iConnInfos[index].iBearerInfo = bearerInfo; + } } } } @@ -2007,8 +2014,15 @@ iNetwRegistrationNotifier = CNetwRegistrationNotifier::NewL( iServer, iMobilePhone ); } if ( !iNetwRegistrationNotifier->IsActive() ) - { + { iNetwRegistrationNotifier->Receive(); // (re)start listening + + // We might have missed the network registration notification before + // we started listening for notifications here. Update the + // network registration information. + TInt registration( ENetworkRegistrationExtNotAvailable ); + User::LeaveIfError( GetNetworkRegistration_v2( registration ) ); + iServer->CellularDataUsageKeyUpdater()->UpdateKeyL( registration ); } // Bearer change (GPRS/Edge GPRS) status events