diff -r b852595f5cbe -r 63be7eb3fc78 wlanutilities/wlansniffer/mainapplication/src/wsfconnecteddetailsmodel.cpp --- a/wlanutilities/wlansniffer/mainapplication/src/wsfconnecteddetailsmodel.cpp Thu Aug 19 10:59:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,573 +0,0 @@ -/* -* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Details view Model -* -*/ - - -// EXTERNAL INCLUDES -#include -#include -#include -#include -#include -#include -#include -#include - -// INTERNAL INCLUDES -#include "wsfwlaninfo.h" -#include "wsfconnecteddetailsmodel.h" -#include "wsfwlaninfoarray.h" -#include "wsfactivewaiter.h" -#include "wsflogger.h" - - -// LOCAL DEFINITIONS -#ifdef _DEBUG - _LIT( KDetailsViewModelPanic, "CWsfConnectedDetailsModel" ); - #define _ASSERTD( cond ) __ASSERT_DEBUG( (cond), \ - User::Panic( KDetailsViewModelPanic, __LINE__) ) -#else - #define _ASSERTD( cond ) {} -#endif //_DEBUG - -// the size of the Details Listbox's array -const TInt KWlanInfoGranularity = 3; - -// Listbox element format string -_LIT( KListItemFormat, "%S\t%S" ); - -// invalid connection id -const TInt KInvalidConnectionId = 0; - - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::CWsfConnectedDetailsModel -// --------------------------------------------------------------------------- -// -CWsfConnectedDetailsModel::CWsfConnectedDetailsModel(): - iIsConnActive( EFalse ), - iConnectionId( KInvalidConnectionId ), - iCoeEnv( CCoeEnv::Static() ) - { - } - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::ConstructL -// --------------------------------------------------------------------------- -// -void CWsfConnectedDetailsModel::ConstructL() - { - LOG_ENTERFN( "CWsfConnectedDetailsModel::ConstructL" ); - iFormattedWlanInfo = new (ELeave) CDesCArrayFlat( KWlanInfoGranularity ); - iConnectionMonitor.ConnectL(); - FindWlanConnectionL(); - } - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::NewL -// --------------------------------------------------------------------------- -// -CWsfConnectedDetailsModel* CWsfConnectedDetailsModel::NewL() - { - LOG_ENTERFN( "CWsfConnectedDetailsModel::NewL" ); - CWsfConnectedDetailsModel* self = CWsfConnectedDetailsModel::NewLC(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::NewLC -// --------------------------------------------------------------------------- -// -CWsfConnectedDetailsModel* CWsfConnectedDetailsModel::NewLC() - { - LOG_ENTERFN( "CWsfConnectedDetailsModel::NewLC" ); - CWsfConnectedDetailsModel* self = new( ELeave ) CWsfConnectedDetailsModel; - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::~CWsfConnectedDetailsModel -// --------------------------------------------------------------------------- -// -CWsfConnectedDetailsModel::~CWsfConnectedDetailsModel() - { - LOG_ENTERFN( - "CWsfConnectedDetailsModel::~CWsfConnectedDetailsModel" ); - iConnectionMonitor.CancelAsyncRequest(EConnMonGetUintAttribute); - iConnectionMonitor.CancelAsyncRequest(EConnMonGetIntAttribute); - iConnectionMonitor.Close(); - delete iFormattedWlanInfo; - } - - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::FindWlanConnectionL -// --------------------------------------------------------------------------- -// -void CWsfConnectedDetailsModel::FindWlanConnectionL() - { - LOG_ENTERFN( "CWsfConnectedDetailsModel::FindWlanConnectionL" ); - -#ifndef __WINS__ - // first call, need to get the connection parameters - iConnectionId = KInvalidConnectionId; - TUint connectionCount( 0 ); - - CWsfActiveWaiter* waiter = CWsfActiveWaiter::NewL(); - iConnectionMonitor.GetConnectionCount( connectionCount, waiter->iStatus ); - waiter->WaitForRequest(); - - if ( waiter->iStatus.Int() == KErrNone ) - { - LOG_WRITEF( "connectionCount = %d", connectionCount ); - // find the connection with WLAN bearer - // that will be the selected WLAN - for ( TUint i = 1; i <= connectionCount; ++i ) - { - TUint connectionId( KInvalidConnectionId ); - TUint subConnectionCount( 0 ); - TConnMonBearerType bearerType( EBearerUnknown ); - - iConnectionMonitor.GetConnectionInfo( i, - connectionId, - subConnectionCount ); - iConnectionMonitor.GetIntAttribute( connectionId, - 0, - KBearer, - ( TInt& )bearerType, - waiter->iStatus ); - waiter->WaitForRequest(); - - if ( waiter->iStatus.Int() == KErrNone && - bearerType == EBearerWLAN ) - { - LOG_WRITEF( "found connection id = %d", connectionId ); - iConnectionId = connectionId; - break; - } - } - } - - if ( iConnectionId != KInvalidConnectionId ) - { - iIsConnActive = ETrue; - - // now we have the connectiond ID, ask the start time - LOG_WRITE( "querying start time..." ); - - TConnMonTimeBuf timeBuf; - iConnectionMonitor.GetPckgAttribute( iConnectionId, 0, KStartTime, - timeBuf, waiter->iStatus ); - waiter->WaitForRequest(); - - if ( waiter->iStatus.Int() == KErrNone ) - { - iStartTime = timeBuf(); - } - } - - delete waiter; - -#else // __WINS__ - - // for testing - iStartTime.UniversalTime(); - iIsConnActive = ETrue; - -#endif // __WINS__ - - } - - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::FormatWlanInfoL -// --------------------------------------------------------------------------- -// -CDesCArrayFlat* CWsfConnectedDetailsModel::FormatWlanInfoL( - TWsfWlanInfo* aWlanInfo, - CWsfWlanInfoArray* aWlanArray ) - { - LOG_ENTERFN( "CWsfConnectedDetailsModel::FormatWlanInfoL" ); - _ASSERTD( aWlanArray ); - - // While the system loads the dialog and the connection lost that could - // cause problems eg.: "No data" displayed - if ( !aWlanInfo || !VisibleWlans( *aWlanArray ) ) - { - // bad wlan info or no visible wlans - return iFormattedWlanInfo; - } - - iWlanInfo = *aWlanInfo; - iWlanArray = aWlanArray; - - RefreshCurrentWlanInfoL(); - - - return GetWlanDetails(); - } - - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::RefreshCurrentWlanInfoL -// --------------------------------------------------------------------------- -// -CDesCArrayFlat* CWsfConnectedDetailsModel::RefreshCurrentWlanInfoL() - { - LOG_ENTERFN( "CWsfConnectedDetailsModel::RefreshCurrentWlanInfoL" ); - LOG_WRITEF( "iIsConnActive: %d", iIsConnActive ); - _ASSERTD( iWlanArray ); - if ( iRefreshing ) - { - return iFormattedWlanInfo; - } - - // mutual exclusion - iRefreshing = ETrue; - -#ifndef __WINS__ - if ( iIsConnActive ) - { - LOG_WRITEF( "RefreshCurrentWlanInfoL - iConnectionId: %d", - iConnectionId ); - - CWsfActiveWaiter* waiter = CWsfActiveWaiter::NewL(); - TInt connStat( 0 ); - iConnectionMonitor.GetIntAttribute( iConnectionId, - 0, - KConnectionStatus, - connStat, - waiter->iStatus ); - waiter->WaitForRequest(); - - LOG_WRITEF( "connStat: %d", connStat ); - LOG_WRITEF( "status.Int(): %d", waiter->iStatus.Int() ); - - if ( waiter->iStatus.Int() != KErrNone ) - { - delete waiter; - iRefreshing = EFalse; - return iFormattedWlanInfo; - } - - delete waiter; - - // set the connection status - LOG_WRITEF( "connStat: %d", connStat ); - if ( ( connStat == KLinkLayerOpen ) || - ( connStat == KConnectionOpen ) ) - { - iIsConnActive = ETrue; - } - else - { - iIsConnActive = EFalse; - } - } - -#endif // __WINS__ - - iFormattedWlanInfo->Reset(); - - // create array of connected WLAN data - FormatAndAppendConnectedWlanSsidL(); - FormatAndAppendDurationL(); - FormatAndAppendTransferredL(); - - iRefreshing = EFalse; - - return GetWlanDetails(); - } - - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::GetWlanDetails -// --------------------------------------------------------------------------- -// -CDesCArrayFlat* CWsfConnectedDetailsModel::GetWlanDetails() - { - LOG_ENTERFN( "CWsfConnectedDetailsModel::GetWlanDetails" ); -#ifdef _DEBUG - const TInt KThatLongBufferWillMakeDo = 100; - for( TInt i = 0; i < iFormattedWlanInfo->MdcaCount(); i++) - { - TPtrC temp = iFormattedWlanInfo->MdcaPoint( i ); - TBuf tempElement = temp; - LOG_WRITEF( "iFormattedWlanInfo: %S", &tempElement ); - } -#endif - - return iFormattedWlanInfo; - } - - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::WlanSsid -// --------------------------------------------------------------------------- -// -const TDesC8& CWsfConnectedDetailsModel::WlanSsid() const - { - return iWlanInfo.iSsid; - } - - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::FormatListBoxItemLC -// --------------------------------------------------------------------------- -// -HBufC* CWsfConnectedDetailsModel::FormatListBoxItemLC( - const TUint aResourceId, - const TDesC& aValueText ) const - { - LOG_ENTERFN( "CWsfConnectedDetailsModel::FormatListBoxItemLC" ); - // hold the column name on list item - HBufC* columnName = NULL; - - if ( aResourceId ) - { - columnName = StringLoader::LoadLC( aResourceId ); - } - else - { - columnName = KNullDesC().AllocLC(); - } - - - // Holds the list box item - HBufC* listBoxItem = HBufC::NewL( KListItemFormat().Length()+ - columnName->Length() + - aValueText.Length() ); - - // For formating needs - TPtr listBoxItemPrt = listBoxItem->Des(); - - // Format string ( KListItemFormat = %S\t%S ) - listBoxItemPrt.Format( KListItemFormat, columnName, &aValueText ); - CleanupStack::PopAndDestroy( columnName ); - CleanupStack::PushL( listBoxItem ); - return listBoxItem; - } - - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::FormatAndAppendConnectedWlanSsidL -// --------------------------------------------------------------------------- -// -void CWsfConnectedDetailsModel::FormatAndAppendConnectedWlanSsidL() - { - LOG_ENTERFN( - "CWsfConnectedDetailsModel::FormatAndAppendConnectedWlanSsidL" ); - HBufC* wlanName( NULL ); - - if ( iWlanInfo.iNetworkName.Length() ) // If there is IAP - { - wlanName = iWlanInfo.GetIapNameAsUnicodeLC(); - } - else // If there no IAP - { - wlanName = iWlanInfo.GetSsidAsUnicodeLC(); - } - - HBufC* listBoxItem = FormatListBoxItemLC( - R_QTN_WLAN_ITEM_HEADING_TEXT_WLAN, - *wlanName ); - - iFormattedWlanInfo->AppendL( *listBoxItem ); - CleanupStack::PopAndDestroy( listBoxItem ); - CleanupStack::PopAndDestroy( wlanName ); - } - - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::FormatAndAppendDurationL -// --------------------------------------------------------------------------- -// -void CWsfConnectedDetailsModel::FormatAndAppendDurationL() - { - LOG_ENTERFN( "CWsfConnectedDetailsModel::FormatAndAppendDurationL" ); - HBufC* duration = FormatDurationLC(); - HBufC* listBoxItem = FormatListBoxItemLC( - R_QTN_WLAN_ITEM_HEADING_DURATION, - *duration ); - - iFormattedWlanInfo->AppendL( *listBoxItem ); - CleanupStack::PopAndDestroy( listBoxItem ); - CleanupStack::PopAndDestroy( duration ); - } - - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::FormatAndAppendTransferredL -// --------------------------------------------------------------------------- -// -void CWsfConnectedDetailsModel::FormatAndAppendTransferredL() - { - LOG_ENTERFN( - "CWsfConnectedDetailsModel::FormatAndAppendTransferredL" ); - HBufC* transferredData = FormatTransferredLC(); - HBufC* listBoxItem = FormatListBoxItemLC( R_QTN_WLAN_ITEM_HEADING_TRANSF, - *transferredData ); - - iFormattedWlanInfo->AppendL( *listBoxItem ); - CleanupStack::PopAndDestroy( listBoxItem ); - CleanupStack::PopAndDestroy( transferredData ); - } - - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::FormatDurationLC -// --------------------------------------------------------------------------- -// -HBufC* CWsfConnectedDetailsModel::FormatDurationLC() - { - LOG_ENTERFN( "CWsfConnectedDetailsModel::FormatDurationLC" ); - const TUint KTimeStringLength = 64; - - if ( iIsConnActive ) - { - // if connection is still active, update the duration - TTime now; - now.UniversalTime(); - iDuration = now.MicroSecondsFrom( iStartTime ); - } - - HBufC* timeString = HBufC::NewLC( KTimeStringLength ); - TPtr16 tempBuf( timeString->Des() ); - - HBufC* temp = StringLoader::LoadLC( R_QTN_TIME_DURAT_LONG_WITH_ZERO ); - - TTime activeTime( iDuration.Int64() ); - activeTime.FormatL( tempBuf, *temp ); - CleanupStack::PopAndDestroy( temp ); - - TPtr timePtr = timeString->Des(); - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( timePtr ); - - return timeString; - } - - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::FormatTransferredLC -// --------------------------------------------------------------------------- -// -HBufC* CWsfConnectedDetailsModel::FormatTransferredLC() - { - LOG_ENTERFN( "CWsfConnectedDetailsModel::FormatTransferredLC" ); - -#ifndef __WINS__ - CWsfActiveWaiter* waiter = CWsfActiveWaiter::NewL(); - - TUint uplink( 0 ); - TUint downlink( 0 ); - - if ( iIsConnActive && iConnectionId != KInvalidConnectionId ) - { - // if connection is still active, update the transmitted bytes - iConnectionMonitor.GetUintAttribute( iConnectionId, 0, KUplinkData, - uplink, waiter->iStatus ); - waiter->WaitForRequest(); - } - - if ( waiter->iStatus.Int() == KErrNone - && iIsConnActive - && iConnectionId != KInvalidConnectionId ) - { - iConnectionMonitor.GetUintAttribute( iConnectionId, 0, KDownlinkData, - downlink, waiter->iStatus ); - waiter->WaitForRequest(); - - } - - iBytesTransmitted = uplink + downlink; - delete waiter; - -#endif - - const TUint KTransferredBytesFormatBuf = 16; - const TUint KTransferredBytesWidth = 10; - const TUint KTransferredBytesDecimalPlaces = 2; - const TUint KKiloByte = 1024; - TUint resId; - - TBuf buf; - - TReal denom( KKiloByte ); - - if ( iBytesTransmitted < KKiloByte*KKiloByte ) - { - denom = KKiloByte; - resId = R_QTN_WLAN_ITEM_KB; - } - else - { - denom = KKiloByte*KKiloByte; - resId = R_QTN_WLAN_ITEM_MB; - } - - TReal value = TReal( iBytesTransmitted ) / denom; - - TRealFormat realFormat( KTransferredBytesWidth, - KTransferredBytesDecimalPlaces ); - - HBufC* number = HBufC::NewLC( KTransferredBytesWidth ); - number->Des().Num( value, realFormat ); - - _LIT( KUdFormatLarge, "%S" ); - buf.Format( KUdFormatLarge, number ); - CleanupStack::PopAndDestroy( number ); - - HBufC* loadedTxt = StringLoader::LoadLC( resId, buf, iCoeEnv ); - - - // Convert digits - TPtr loadTextPtr( loadedTxt->Des() ); - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( loadTextPtr ); - - return loadedTxt; - } - - -// --------------------------------------------------------------------------- -// CWsfConnectedDetailsModel::VisibleWlans -// --------------------------------------------------------------------------- -// -TInt CWsfConnectedDetailsModel::VisibleWlans( CWsfWlanInfoArray& aArray ) - { - LOG_ENTERFN( "CWsfConnectedDetailsModel::VisibleWlans" ); - TInt i = 0; - TBool hiddenFound = EFalse; - TWsfWlanInfo* wlanInfo; - while ( i < aArray.Count() && !hiddenFound ) - { - wlanInfo = aArray[i]; - if ( wlanInfo->Hidden() && !wlanInfo->Known() ) - { - hiddenFound = ETrue; - } - else - { - ++i; - } - } - return i; - } - -// END OF FILE -