--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlanindicatorplugin/src/wlanindicatorpluginimplementation.cpp Wed Sep 01 12:20:32 2010 +0100
@@ -0,0 +1,359 @@
+/*
+* Copyright (c) 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: wlanindicatorplugin implementation
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <eikenv.h>
+#include <avkon.rsg>
+#include <avkon.hrh>
+#include <apgcli.h>
+#include <apgtask.h>
+#include <coemain.h>
+#include <bautils.h>
+#include <data_caging_path_literals.hrh>
+#include <StringLoader.h>
+#include <rconnmon.h>
+#include <cmmanager.h>
+#include <cmconnectionmethod.h>
+#include <cmpluginwlandef.h>
+#include <utf.h>
+#include <wlanindicator.rsg>
+#include "wlanindicatorpluginimplementation.h"
+
+
+// CONSTANTS
+const TUid KSnifferAppUid = { 0x10281CAA };
+_LIT( KDriveZ, "z:" );
+_LIT( KWlanIndicatorResourceFile, "wlanindicator.rsc" );
+
+using namespace CMManager;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CWlanIndicatorPluginImplementation::CWlanIndicatorPluginImplementation
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+CWlanIndicatorPluginImplementation::CWlanIndicatorPluginImplementation()
+ : iCoeEnv( CCoeEnv::Static() )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CWlanIndicatorPluginImplementation::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CWlanIndicatorPluginImplementation::ConstructL()
+ {
+ TFileName fileName;
+
+ fileName.Append( KDriveZ );
+ fileName.Append( KDC_RESOURCE_FILES_DIR );
+ fileName.Append( KWlanIndicatorResourceFile );
+
+ BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), fileName );
+ iResource = iCoeEnv->AddResourceFileL( fileName );
+
+ iConnMonitor.ConnectL();
+
+ }
+
+// -----------------------------------------------------------------------------
+// CWlanIndicatorPluginImplementation::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CWlanIndicatorPluginImplementation* CWlanIndicatorPluginImplementation::NewL()
+ {
+ CWlanIndicatorPluginImplementation* self =
+ new( ELeave ) CWlanIndicatorPluginImplementation;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CWlanIndicatorPluginImplementation::~CWlanIndicatorPluginImplementation
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CWlanIndicatorPluginImplementation::~CWlanIndicatorPluginImplementation()
+ {
+ iCoeEnv->DeleteResourceFile( iResource );
+
+ iConnMonitor.Close();
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// CWlanIndicatorPluginImplementation::HandleIndicatorTapL
+// ---------------------------------------------------------------------------
+//
+void CWlanIndicatorPluginImplementation::HandleIndicatorTapL( const TInt aUid )
+ {
+
+ switch ( aUid )
+ {
+ case EAknIndicatorWlanAvailable:
+ case EAknIndicatorWlanActive:
+ case EAknIndicatorWlanActiveSecure:
+ {
+
+ LaunchWlanSnifferL();
+
+ break;
+ }
+
+ default:
+
+ break;
+
+ }
+
+
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CWlanIndicatorPluginImplementation::TextL( const TInt aUid, TInt& aTextType )
+// ---------------------------------------------------------------------------
+//
+HBufC* CWlanIndicatorPluginImplementation::TextL( const TInt aUid,
+ TInt& aTextType )
+ {
+
+ HBufC* textBuf = NULL;
+
+ switch ( aUid )
+ {
+ case EAknIndicatorWlanAvailable:
+ {
+ textBuf = CreateWlanNetworksFoundTextL();
+ aTextType = EAknIndicatorPluginLinkText;
+
+ break;
+ }
+
+ case EAknIndicatorWlanActive:
+ case EAknIndicatorWlanActiveSecure:
+ {
+ textBuf = CreateWlanConnectedTextL();
+ aTextType = EAknIndicatorPluginLinkText;
+
+ break;
+ }
+
+ default:
+
+ break;
+
+ }
+
+
+ return textBuf;
+
+ }
+
+// ---------------------------------------------------------------------------
+// CWlanIndicatorPluginImplementation::CreateWlanNetworksFoundTextL()
+// ---------------------------------------------------------------------------
+//
+HBufC* CWlanIndicatorPluginImplementation::CreateWlanNetworksFoundTextL()
+ {
+
+ HBufC* dynText = NULL;
+
+ // "qtn_uni_ind_wlan_avail_unknown_many WLAN networks found"
+ dynText = StringLoader::LoadL (
+ R_QTN_UNI_IND_WLAN_AVAIL_UNKNOWN_MANY, iCoeEnv );
+
+ return dynText;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CWlanIndicatorPluginImplementation::CreateWlanConnectedTextL()
+// ---------------------------------------------------------------------------
+//
+HBufC* CWlanIndicatorPluginImplementation::CreateWlanConnectedTextL()
+ {
+
+ HBufC* dynText = NULL;
+ HBufC* connectedNetworkName = NULL;
+
+ connectedNetworkName = ConnectionNameL( );
+
+ CleanupStack::PushL( connectedNetworkName );
+
+ if ( connectedNetworkName )
+ {
+ // "qtn_uni_ind_wlan_conn '%U' connected"
+ dynText = StringLoader::LoadL (
+ R_QTN_UNI_IND_WLAN_CONN, *connectedNetworkName, iCoeEnv );
+ }
+
+ CleanupStack::PopAndDestroy( connectedNetworkName );
+
+ return dynText;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CWlanIndicatorPluginImplementation::ConnectionNameL()
+// ---------------------------------------------------------------------------
+//
+HBufC* CWlanIndicatorPluginImplementation::ConnectionNameL( )
+ {
+ HBufC* connName = NULL;
+
+ // get the connection ID
+ TUint connectionId = FindWlanBearerConnectedL();
+
+ TUint connectedIapId(0);
+ TRequestStatus status;
+
+ // get the IAP ID
+ iConnMonitor.GetUintAttribute( connectionId, 0, KIAPId,
+ connectedIapId, status );
+ User::WaitForRequest( status );
+
+ // get the connection method from cmmanager
+ RCmManager cmManager;
+ cmManager.OpenLC();
+
+ RCmConnectionMethod connMethod = cmManager.ConnectionMethodL( connectedIapId );
+ CleanupClosePushL( connMethod );
+
+ TUint32 easyWLANIapId = cmManager.EasyWlanIdL();
+ if ( easyWLANIapId != connectedIapId )
+ {
+ connName = connMethod.GetStringAttributeL( ECmName );
+ }
+ else
+ {
+ connName = connMethod.GetStringAttributeL( EWlanUsedSSID );
+ }
+
+ CleanupStack::PopAndDestroy( 2, &cmManager ); //cmManager and connMethod
+
+ return connName;
+ }
+
+// ---------------------------------------------------------------------------
+// CWlanIndicatorPluginImplementation::FindWlanBearerConnectedL()
+// ---------------------------------------------------------------------------
+//
+TUint CWlanIndicatorPluginImplementation::FindWlanBearerConnectedL( )
+ {
+ TUint connectionId( 0 );
+
+ TUint connCount( 0 );
+ TUint subConnectionCount( 0 );
+ TRequestStatus status;
+
+ iConnMonitor.GetConnectionCount( connCount, status );
+ User::WaitForRequest( status );
+
+ if ( status.Int() == KErrNone )
+ {
+ for ( TUint i = 1; i <= connCount; ++i )
+ {
+ User::LeaveIfError( iConnMonitor.GetConnectionInfo( i, connectionId,
+ subConnectionCount ) );
+ if ( CheckIfWlan( connectionId ) )
+ {
+ break;
+ }
+ }
+ }
+
+ return connectionId;
+ }
+
+// ---------------------------------------------------------------------------
+// CWlanIndicatorPluginImplementation::CheckIfWlan()
+// ---------------------------------------------------------------------------
+//
+TBool CWlanIndicatorPluginImplementation::CheckIfWlan( TUint aConnectionId )
+ {
+ TConnMonBearerType bearerType( EBearerUnknown );
+
+ TBool foundWlanBearer( EFalse );
+
+ TRequestStatus status;
+
+ // Add only connections with valid id
+ if ( aConnectionId > 0 )
+ {
+ iConnMonitor.GetIntAttribute( aConnectionId, 0, KBearer, (TInt&)bearerType,
+ status );
+ User::WaitForRequest( status );
+
+ if ( status.Int() == KErrNone )
+ {
+ if ( bearerType == EBearerWLAN )
+ {
+ foundWlanBearer = ETrue;
+ }
+ }
+
+ }
+
+ return foundWlanBearer;
+
+ }
+
+// ---------------------------------------------------------------------------
+// CWlanIndicatorPluginImplementation::LaunchWlanSnifferL()
+// ---------------------------------------------------------------------------
+//
+void CWlanIndicatorPluginImplementation::LaunchWlanSnifferL()
+ {
+
+ RApaLsSession appArcSession;
+
+ User::LeaveIfError( appArcSession.Connect() ); // connect to AppArc server
+ CleanupClosePushL( appArcSession );
+
+ // check if the app is already running
+ TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
+ TApaTask task = taskList.FindApp( KSnifferAppUid );
+
+ if ( task.Exists() )
+ {
+ task.BringToForeground();
+ }
+ else
+ {
+ TThreadId threadId;
+ User::LeaveIfError( appArcSession.StartDocument( KNullDesC,
+ KSnifferAppUid, threadId ) );
+
+ }
+
+ CleanupStack::PopAndDestroy(); // appArcSession
+
+ }
+
+// End of File