diff -r 000000000000 -r c8830336c852 wlansecuritysettings/wifiprotectedsetup/pluginsrc/wifiprotdlgsplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlansecuritysettings/wifiprotectedsetup/pluginsrc/wifiprotdlgsplugin.cpp Thu Dec 17 08:47:43 2009 +0200 @@ -0,0 +1,458 @@ +/* +* Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: Implementation of CWiFiProtDlgsPlugin. +* +*/ + + +// INCLUDE FILES +#include // For RProperty +#include +#include +#include +#include + +#include "wifiprotdlgsplugin.h" +#include "wifiprotplugin.h" +#include "wifiprotlogger.h" +#include "wifiprotactiverunner.h" + + + +using namespace WiFiProt; + +// CONSTS +_LIT( KDriveZ, "z:" ); + +// ============================ MEMBER FUNCTIONS ============================ + +// -------------------------------------------------------------------------- +// CWiFiProtDlgsPlugin* CWiFiProtDlgsPlugin::NewL() +// -------------------------------------------------------------------------- +// +CWiFiProtDlgsPlugin* CWiFiProtDlgsPlugin::NewL( + const TBool aResourceFileResponsible, + RCmManagerExt* aCmManagerExt ) + + { + CLOG_ENTERFN( "CWiFiProtDlgsPlugin::NewL" ); + + CWiFiProtDlgsPlugin* self = new ( ELeave ) CWiFiProtDlgsPlugin(); + CleanupStack::PushL( self ); + self->ConstructL( KResourceFileName, + aResourceFileResponsible, aCmManagerExt ); + CleanupStack::Pop( self ); + + CLOG_LEAVEFN( "CWiFiProtDlgsPlugin::NewL" ); + + return self; + } + +// -------------------------------------------------------------------------- +// CWiFiProtDlgsPlugin* CWiFiProtDlgsPlugin::NewL() +// -------------------------------------------------------------------------- +// +CWiFiProtDlgsPlugin* CWiFiProtDlgsPlugin::NewL( + const TBool aResourceFileResponsible ) + { + CLOG_ENTERFN( "CWiFiProtDlgsPlugin::NewL (without passed CmManager)" ); + + CWiFiProtDlgsPlugin* ret = NewL( aResourceFileResponsible, NULL ); + + CLOG_LEAVEFN( "CWiFiProtDlgsPlugin::NewL (without passed CmManager)" ); + + return ret; + } + +// -------------------------------------------------------------------------- +// CWiFiProtDlgsPlugin::~CWiFiProtDlgsPlugin +// -------------------------------------------------------------------------- +// +CWiFiProtDlgsPlugin::~CWiFiProtDlgsPlugin( ) + + { + CLOG_ENTERFN( "CWiFiProtDlgsPlugin::~CWiFiProtDlgsPlugin" ); + + delete iRunner; + + //we didn't get a cmManager from the client, so use our own + if (iPassedCmManagerExt == NULL) + { + iCmManagerExt.Close(); + } + + iUids.Close(); + + if ( iResource ) + { + CCoeEnv::Static()->DeleteResourceFile( iResource ); + } + + CLOG_LEAVEFN( "CWiFiProtDlgsPlugin::~CWiFiProtDlgsPlugin" ); + + } + +// -------------------------------------------------------------------------- +// CWiFiProtDlgsPlugin::TNotifierInfo +// CWiFiProtDlgsPlugin::Info() const +// -------------------------------------------------------------------------- +// +CWiFiProtDlgsPlugin::TNotifierInfo CWiFiProtDlgsPlugin::Info() const + { + return iInfo; + } + +// -------------------------------------------------------------------------- +// TPtrC8 CWiFiProtDlgsPlugin::StartL() +// -------------------------------------------------------------------------- +// +TPtrC8 CWiFiProtDlgsPlugin::StartL( const TDesC8& /*aBuffer*/ ) + { + CLOG_WRITE( "CWiFiProtDlgsPlugin::StartL" ); + return KNullDesC8().Ptr(); + } + +// -------------------------------------------------------------------------- +// void CWiFiProtDlgsPlugin::Cancel() +// -------------------------------------------------------------------------- +// +void CWiFiProtDlgsPlugin::Cancel() + { + CLOG_ENTERFN( "CWiFiProtDlgsPlugin::Cancel" ); + + if ( !iCancelled ) + { + if ( iRunner && !iCancelledFromInside ) + { + iClientCancelled = ETrue; + iRunner->CancelByClient(); + } + iCancelled = ETrue; + if ( !iMessage.IsNull() ) + { + if ( iConnMode ) + { + TRAP_IGNORE( iMessage.WriteL( iReplySlot, + TPckg( + TWlanProtectedSetupCredentialAttribute() ) + )); + } + else + { + TRAP_IGNORE( iMessage.WriteL( iReplySlot, + TPckg( KNullDesC8() ) + )); + } + iMessage.Complete( KErrCancel ); + } + } + + CLOG_LEAVEFN( "CWiFiProtDlgsPlugin::Cancel" ); + + } + +// -------------------------------------------------------------------------- +// void CWiFiProtDlgsPlugin::Release() +// -------------------------------------------------------------------------- +// +void CWiFiProtDlgsPlugin::Release() + { + CLOG_ENTERFN( "CWiFiProtDlgsPlugin::Release" ); + + delete this; + + CLOG_LEAVEFN( "CWiFiProtDlgsPlugin::Release" ); + } + +// -------------------------------------------------------------------------- +// TPtrC8 CWiFiProtDlgsPlugin::UpdateL() +// -------------------------------------------------------------------------- +// +TPtrC8 CWiFiProtDlgsPlugin::UpdateL(const TDesC8& /*aBuffer*/) + { + return KNullDesC8().Ptr(); + } + +// -------------------------------------------------------------------------- +// void CWiFiProtDlgsPlugin::CompleteL() +// -------------------------------------------------------------------------- +// +void CWiFiProtDlgsPlugin::CompleteL( TInt aStatus ) + { + CLOG_ENTERFN( "CWiFiProtDlgsPlugin::CompleteL" ); + + CLOG_WRITEF( _L( "aStatus:" ), aStatus ); + iCancelled = ETrue; + if ( !iMessage.IsNull() ) + { + if ( iConnMode ) + { + // return a different kind of message + // for connection creation + WiFiProt::TWiFiConnOutputParams connOutputParams = + WiFiProt::TWiFiConnOutputParams( iNetworkSettings ); + connOutputParams.iReturn = iReturn; + iMessage.WriteL( iReplySlot, + TPckg( connOutputParams ) ); + } + else + { + // ... or iap(s) creation + const TInt elementSize = sizeof(TUint32); + TBuf8<(KMaxNumberOfUids * elementSize)> buf; + TInt uidsCount = iUids.Count(); + if ( uidsCount > KMaxNumberOfUids ) + { + uidsCount = KMaxNumberOfUids; + } + // copy data from the array to iIapIds in TWiFiOutputParams + buf.Append((const TUint8 *)(&iUids[0]), uidsCount *elementSize); + //append return value + WiFiProt::TWiFiOutputParams outputParams = + WiFiProt::TWiFiOutputParams(buf); + outputParams.iReturn = iReturn; + iMessage.WriteL( iReplySlot, + TPckg( outputParams ) ); + } + iMessage.Complete( aStatus ); + } + + CLOG_LEAVEFN( "CWiFiProtDlgsPlugin::CompleteL" ); + + } + +// -------------------------------------------------------------------------- +// CWiFiProtDlgsPlugin::SetCancelledFlag +// -------------------------------------------------------------------------- +// +void CWiFiProtDlgsPlugin::SetCancelledFlag( TBool aCancelled ) + { + iCancelled = aCancelled; + } + +// -------------------------------------------------------------------------- +// CWiFiProtDlgsPlugin::TNotifierInfo CWiFiProtDlgsPlugin::RegisterL() +// -------------------------------------------------------------------------- +// +CWiFiProtDlgsPlugin::TNotifierInfo CWiFiProtDlgsPlugin::RegisterL() + { + CLOG_ENTERFN( "CWiFiProtDlgsPlugin::RegisterL" ); + + iInfo.iUid = KUidWiFiProtSetup; + iInfo.iPriority = ENotifierPriorityHigh; + iInfo.iChannel = KUidWiFiProtSetup; + + CLOG_LEAVEFN( "CWiFiProtDlgsPlugin::RegisterL" ); + + return iInfo; + } + +// -------------------------------------------------------------------------- +// void CWiFiProtDlgsPlugin::StartL +// -------------------------------------------------------------------------- +// +void CWiFiProtDlgsPlugin::StartL( const TDesC8& aBuffer, + TInt aReplySlot, + const RMessagePtr2& aMessage ) + { + CLOG_ENTERFN( "CWiFiProtDlgsPlugin::StartL" ); + + TPckgBuf pckgParams( + TPckgBuf(TWiFiInputParams(KNullDesC8(), + EFalse))); + pckgParams.Copy( *((TPckgBuf*) (&aBuffer))); + TWiFiInputParams params((pckgParams)()); + iConnMode = params.iConnectionNeeded; + TWlanSsid ssid; + ssid.Copy( params.iSSid ); + + iCancelled = EFalse; + + iReplySlot = aReplySlot; + iMessage = aMessage; + + if ( iConnMode ) + { + // no need for uid array to return, but we need a single network + // settings struct + iRunner->StartProtectedSetupConnL( ssid, iNetworkSettings, + CmManagerToUse()); + } + else + { + iRunner->StartProtectedSetupAsyncL( ssid, iUids, CmManagerToUse() ); + } + + CLOG_LEAVEFN( "CWiFiProtDlgsPlugin::StartL" ); + } + +// -------------------------------------------------------------------------- +// WiFiProt::TWiFiReturn CWiFiProtDlgsPlugin::CompleteProcessL +// -------------------------------------------------------------------------- +// +void CWiFiProtDlgsPlugin::CompleteProcessL( WiFiProt::TWiFiReturn aReturnValue ) + { + CLOG_ENTERFN( "WiFiProtDlgsPlugin::CompleteProcessL" ); + iReturn = aReturnValue; + switch ( aReturnValue ) + { + case EWiFiOK: + { + CLOG_WRITE("StartProtectedSetupL returned EWiFiOK"); + CompleteL( KErrNone ); + break; + } + case EWifiNoAuto: + { + CLOG_WRITE("StartProtectedSetupL returned EWifiNoAuto"); + CompleteL( KErrNone ); + break; + } + case EWiFiCancel: + { + CLOG_WRITE("StartProtectedSetupL returned EWiFiCancel"); + iCancelledFromInside = ETrue; + Cancel(); + break; + } + default: + { + //should never happen + CLOG_WRITE("Unhandled exit value, leaving..."); + User::Leave( KErrGeneral ); + break; + } + } + CLOG_WRITEF( _L( "Uids returned:" ), iUids.Count() ); + for ( TInt i = 0;i& aUidsReturned) + { + CLOG_ENTERFN( "CWiFiProtDlgsPlugin::StartFromUiL" ); + + CLOG_WRITE("Input params:"); + CLOG_WRITE("SSid:"); + + TBuf buf; + buf.Copy(aSSid); + CLOG_WRITEF( buf ); + CLOG_WRITE("Connection needed:"); + if ( aConnectionNeeded ) + { + CLOG_WRITE("ETrue"); + } + else + { + CLOG_WRITE("EFalse"); + } + //use passed CmManager if present + WiFiProt::TWiFiReturn ret = iRunner->StartProtectedSetupL( + aSSid, aUidsReturned, CmManagerToUse()); + + CLOG_LEAVEFN( "CWiFiProtDlgsPlugin::StartFromUiL" ); + return ret; + } + +// -------------------------------------------------------------------------- +// void CWiFiProtDlgsPlugin::CmManagerToUse() +// -------------------------------------------------------------------------- +// +RCmManagerExt& CWiFiProtDlgsPlugin::CmManagerToUse() + { + CLOG_ENTERFN( "CWiFiProtDlgsPlugin::CmManagerToUse" ); + + if (iPassedCmManagerExt == NULL ) + { + CLOG_WRITE("Own CmManagerExt used"); + + CLOG_LEAVEFN( "CWiFiProtDlgsPlugin::CmManagerToUse" ); + + return iCmManagerExt; + } + else + { + CLOG_WRITE("Passed CmManagerExt used"); + + CLOG_LEAVEFN( "CWiFiProtDlgsPlugin::CmManagerToUse" ); + + return *iPassedCmManagerExt; + } + } + +// -------------------------------------------------------------------------- +// CWiFiProtDlgsPlugin::CWiFiProtDlgsPlugin() +// -------------------------------------------------------------------------- +// +CWiFiProtDlgsPlugin::CWiFiProtDlgsPlugin() +: iCancelled( EFalse ), + iResource( 0 ), + iCancelledFromInside( EFalse ) + + { + CLOG_WRITE("CWiFiProtDlgsPlugin::CWiFiProtDlgsPlugin"); + } + +// -------------------------------------------------------------------------- +// void CWiFiProtDlgsPlugin::ConstructL( ) +// -------------------------------------------------------------------------- +// +void CWiFiProtDlgsPlugin::ConstructL(const TDesC& aResourceFileName, + const TBool aResourceFileResponsible, + RCmManagerExt* aCmManagerExt ) + { + CLOG_ENTERFN( "CWiFiProtDlgsPlugin::ConstructL" ); + + if ( aResourceFileResponsible ) + { + // Since this is a .DLL, resource files that are to be used by the + // notifier aren't added automatically so we do that here. + TFileName fileName; + + fileName.Append( KDriveZ ); + fileName.Append( KDC_RESOURCE_FILES_DIR ); + fileName.Append( aResourceFileName ); + + BaflUtils::NearestLanguageFile( CCoeEnv::Static()->FsSession(), + fileName ); + iResource = CCoeEnv::Static()->AddResourceFileL( fileName ); + } + + iPassedCmManagerExt = aCmManagerExt; + //we didn't get a cmManager from the client, so use our own + if (iPassedCmManagerExt == NULL) + { + iCmManagerExt.OpenL(); + } + iRunner = CWiFiProtActiveRunner::NewL( this ); + + CLOG_LEAVEFN( "CWiFiProtDlgsPlugin::ConstructL" ); + + } + +// End of File