diff -r b852595f5cbe -r 63be7eb3fc78 wlanutilities/wpswizard/src/cwpsactiverunner.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlanutilities/wpswizard/src/cwpsactiverunner.cpp Tue Aug 31 16:18:40 2010 +0300 @@ -0,0 +1,223 @@ +/* + * Copyright (c) 2010 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: Implementation of middleware wrapper class + * + * + */ +// System includes +#include +#include + +// User includes +#include "cwpsactiverunner.h" + +// External function prototypes + +//Constants +static const TInt KArrayGranularity = 4; +static const TInt KDefaultPinLength = 10; + +// Trace includes +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "cwpsactiverunnerTraces.h" +#endif + +/*! + \class CWpsActiveRunner + \brief CWpsActiveRunner is a wrapper class wlan Mgmt engine interface. + The wrapper class for wlan management engine calls + */ + +// ======== LOCAL FUNCTIONS ======== + +// ======== MEMBER FUNCTIONS ======== + +/*! + * Creates the instance of active runner which encapsulates the wlan mgmt + * interface middleware calls + * + * + * \param MWpsActiveRunnerCallback[in] call back interface to notify the + * completion of the middleware calls + */ +CWpsActiveRunner* CWpsActiveRunner::NewL(MWpsActiveRunnerCallback& aObserver) +{ + OstTraceFunctionEntry0( CWPSACTIVERUNNER_NEWL_ENTRY ); + CWpsActiveRunner* self = new (ELeave) CWpsActiveRunner(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + OstTraceFunctionExit0( CWPSACTIVERUNNER_NEWL_EXIT ); + return self; +} + +/*! + * Creates the instance of active runner which encapsulates the wlan mgmt + * interface middleware calls + * + * + * \param MWpsActiveRunnerCallback[in] call back interface to notify the + * completion of the middleware calls + */ +CWpsActiveRunner::CWpsActiveRunner(MWpsActiveRunnerCallback& aObserver) : + CActive(EPriorityStandard), + iObserver(aObserver), + isCancelTriggered(false), + iWLANMgmtClient(NULL), + iIapParametersArray(NULL) +{ + OstTraceFunctionEntry1( CWPSACTIVERUNNER_CWPSACTIVERUNNER_ENTRY, this ); + OstTraceFunctionExit1( CWPSACTIVERUNNER_CWPSACTIVERUNNER_EXIT, this ); +} + +/*! + * ConstructL, Two phased constructor. + * + */ +void CWpsActiveRunner::ConstructL() +{ + OstTraceFunctionEntry1( CWPSACTIVERUNNER_CONSTRUCTL_ENTRY, this ); + + CActiveScheduler::Add(this); + InitializeL(); + OstTraceFunctionExit1( CWPSACTIVERUNNER_CONSTRUCTL_EXIT, this ); +} + +/*! + * Initializes the member variables for making the middleware calls + * + */ + +void CWpsActiveRunner::InitializeL() +{ + OstTraceFunctionEntry1( CWPSACTIVERUNNER_INITIALIZEL_ENTRY, this ); + iWLANMgmtClient = CWlanMgmtClient::NewL(); + iIapParametersArray = new (ELeave) CArrayFixSeg< + TWlanProtectedSetupCredentialAttribute> (KArrayGranularity); + + OstTraceFunctionExit1( CWPSACTIVERUNNER_INITIALIZEL_EXIT, this ); +} + +/*! + * Destructor + * + */ +CWpsActiveRunner::~CWpsActiveRunner() +{ + OstTraceFunctionEntry0( DUP1_CWPSACTIVERUNNER_CWPSACTIVERUNNER_ENTRY ); + Cancel(); + delete iWLANMgmtClient; + delete iIapParametersArray; + OstTraceFunctionExit0( DUP1_CWPSACTIVERUNNER_CWPSACTIVERUNNER_EXIT ); +} + +/*! + * Initiates the call to the middleware + * + * \param aSsid[in] The network ssid to which we have to connect + * \param aPin[in] The pin to be used for WPS negotiating + */ +void CWpsActiveRunner::StartSetup(RBuf8& aSsid, int aPin) +{ + OstTraceFunctionEntry1( CWPSACTIVERUNNER_STARTSETUP_ENTRY, this ); + TWlanSsid ssid; + TWlanWpsPin pin; + + isCancelTriggered = false; + ssid.Copy(aSsid); + TBuf8 pinCode; + + if (aPin == 0) { + pinCode.AppendFill('0', 8); + } + else { + pinCode.AppendNum(aPin); + } + + pin.Copy(pinCode); + + iWLANMgmtClient->RunProtectedSetup(iStatus, ssid, pin, *iIapParametersArray); + + SetActive(); + + OstTraceFunctionExit1( CWPSACTIVERUNNER_STARTSETUP_EXIT, this ); +} + +/*! + * RunL implementation + */ +void CWpsActiveRunner::RunL() +{ + OstTraceFunctionEntry1( CWPSACTIVERUNNER_RUNL_ENTRY, this ); + + TInt completionCode = iStatus.Int(); + QList credentials; + + if(!isCancelTriggered) { + + if (completionCode < KErrNone) { + //Raise Error + QT_TRYCATCH_LEAVING(iObserver.WpsActiveRunnerStopped(credentials, completionCode)); + } + else { + TInt len = iIapParametersArray->Length(); + TInt count; + for(count=0;countCount();count++) + { + TWlanProtectedSetupCredentialAttribute attr =(*iIapParametersArray)[count]; + credentials.append(attr); + } + QT_TRYCATCH_LEAVING(iObserver.WpsActiveRunnerStopped(credentials,completionCode)); + + } + } + + OstTraceFunctionExit1( CWPSACTIVERUNNER_RUNL_EXIT, this ); +} + +/*! + * Cancels the ongoing call + */ +void CWpsActiveRunner::DoCancel() +{ + OstTraceFunctionEntry1( CWPSACTIVERUNNER_DOCANCEL_ENTRY, this ); + isCancelTriggered = true; + if(iWLANMgmtClient) + { + iWLANMgmtClient->CancelProtectedSetup(); + } + OstTraceFunctionExit1( CWPSACTIVERUNNER_DOCANCEL_EXIT, this ); +} + +/*! + * Handles the error usecase + */ +TInt CWpsActiveRunner::RunError(TInt aError) +{ + OstTraceFunctionEntry1( CWPSACTIVERUNNER_RUNERROR_ENTRY, this ); + + OstTrace1( TRACE_ERROR, CWPSACTIVERUNNER_RUNERROR, "CWpsActiveRunner::RunError;aError=%d", aError ); + + QList credentials; + if(iWLANMgmtClient) + { + iWLANMgmtClient->CancelProtectedSetup(); + } + + QT_TRYCATCH_LEAVING(iObserver.WpsActiveRunnerStopped(credentials, aError)); + + return 0; +} +