diff -r c2bc3f8c7777 -r dff6ebfd236f wlanutilities/wlansniffer/aiplugin/src/wsfwlanlistactivewrapper.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlanutilities/wlansniffer/aiplugin/src/wsfwlanlistactivewrapper.cpp Fri Mar 12 15:48:54 2010 +0200 @@ -0,0 +1,274 @@ +/* + * 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: Implementation of CWsfWLANListActiveWrapper. + * + */ + + +// INCLUDE FILES +#include "wsflogger.h" +#include "wsfmodel.h" +#include "wsfwlaninfoarray.h" +#include "wsfaicontroller.h" +#include "wsfwlanlistactivewrapper.h" + + +/** +* Number of retries to fetch wlan data +*/ +static const TInt KRetries = 5; + + +// ---------------------------------------------------------------------------- +// CWsfWLANListActiveWrapper::CWsfWLANListActiveWrapper +// ---------------------------------------------------------------------------- +// +CWsfWLANListActiveWrapper::CWsfWLANListActiveWrapper() : + CActive( EPriorityStandard ), // Standard priority + iPtr( NULL, 0 ) + { + } + + +// ---------------------------------------------------------------------------- +// CWsfWLANListActiveWrapper::NewLC +// ---------------------------------------------------------------------------- +// +CWsfWLANListActiveWrapper* CWsfWLANListActiveWrapper::NewLC( CWsfModel* aModel, + TWsfAiController &aController ) + { + LOG_ENTERFN( "CWsfWLANListActiveWrapper::NewLC" ); + CWsfWLANListActiveWrapper* self = + new (ELeave) CWsfWLANListActiveWrapper(); + CleanupStack::PushL(self); + self->ConstructL( aModel, aController ); + return self; + } + + +// ---------------------------------------------------------------------------- +// CWsfWLANListActiveWrapper::NewL +// ---------------------------------------------------------------------------- +// +CWsfWLANListActiveWrapper* CWsfWLANListActiveWrapper::NewL( CWsfModel* aModel, + TWsfAiController &aController ) + { + LOG_ENTERFN( "CWsfWLANListActiveWrapper::NewL" ); + CWsfWLANListActiveWrapper* self = CWsfWLANListActiveWrapper::NewLC( + aModel, aController ); + CleanupStack::Pop(); // self; + return self; + } + + +// ---------------------------------------------------------------------------- +// CWsfWLANListActiveWrapper::ConstructL +// ---------------------------------------------------------------------------- +// +void CWsfWLANListActiveWrapper::ConstructL( CWsfModel* aModel, + TWsfAiController &aController ) + { + LOG_ENTERFN( "CWsfWLANListActiveWrapper::ConstructL" ); + CActiveScheduler::Add(this); // Add to scheduler + iModel = aModel; + iController = &aController; + iArray = CWsfWlanInfoArray::NewL(); + } + +// ---------------------------------------------------------------------------- +// CWsfWLANListActiveWrapper::~CWsfWLANListActiveWrapper +// ---------------------------------------------------------------------------- +// +CWsfWLANListActiveWrapper::~CWsfWLANListActiveWrapper() + { + LOG_ENTERFN( "CWsfWLANListActiveWrapper::~CWsfWLANListActiveWrapper" ); + Cancel(); // Cancel any request, if outstanding + // Delete instance variables if any + if ( iBuffer ) + { + delete iBuffer; + } + delete iArray; + } + +// ---------------------------------------------------------------------------- +// CWsfWLANListActiveWrapper::DoCancel +// ---------------------------------------------------------------------------- +// +void CWsfWLANListActiveWrapper::DoCancel() + { + } + +// ---------------------------------------------------------------------------- +// CWsfWLANListActiveWrapper::Start +// ---------------------------------------------------------------------------- +// +void CWsfWLANListActiveWrapper::Start( TBool aStarUp ) + { + LOG_ENTERFN( "CWsfWLANListActiveWrapper::Start" ); + Cancel(); // Cancel any request, just to be sure + iStartUp = aStarUp; + iState = EUninitialized; + iRetriesLeft = KRetries; + iPckgAllocatedSize() = 0; + iPckgNeededSize() = 0; + SetActive(); + TRequestStatus* status = &iStatus; + User::RequestComplete(status, KErrNone); + } + +// ---------------------------------------------------------------------------- +// CWsfWLANListActiveWrapper::GetWlanList +// ---------------------------------------------------------------------------- +// +CWsfWlanInfoArray* CWsfWLANListActiveWrapper::GetWlanList() + { + LOG_ENTERFN( "CWsfWLANListActiveWrapper::GetWlanList" ); + return iArray; + } + +// ---------------------------------------------------------------------------- +// CWsfWLANListActiveWrapper::GetConnectedWLANNetwork +// ---------------------------------------------------------------------------- +// +TWsfWlanInfo CWsfWLANListActiveWrapper::GetConnectedWLANNetwork() + { + LOG_ENTERFN( "CWsfWLANListActiveWrapper::GetConnectedWLANNetwork" ); + return iConnectedWlan; + } + +// ---------------------------------------------------------------------------- +// CWsfWLANListActiveWrapper::RunL +// ---------------------------------------------------------------------------- +// +void CWsfWLANListActiveWrapper::RunL() + { + LOG_ENTERFN( "CWsfWLANListActiveWrapper::RunL" ); + if ( iState == EUninitialized ) + { + LOG_WRITE( "Get WLAN list size" ); + iModel->GetWlanListSize( iPckgNeededSize, iStatus ); + iState = EInitialized; + SetActive(); // Tell scheduler a request is active + } + else if ( iState == EInitialized ) + { + LOG_WRITEF( "WLAN data buffer size = %d", iPckgNeededSize() ); + + if ( !iPckgNeededSize() ) + { + LOG_WRITE( "no data.." ); + iState = EProcessWLANListData; + SetActive(); + TRequestStatus* status = &iStatus; + User::RequestComplete(status, KErrNone); + } + else + { + // alloc the required size buffer... + delete iBuffer; + iBuffer = NULL; + iBuffer = HBufC8::NewL( iPckgNeededSize() ); + iPtr.Set( iBuffer->Des() ); + + LOG_WRITE( "Get WLAN list" ); + iModel->GetWlanList( iPckgAllocatedSize, iPtr, iStatus ); + iState = EProcessWLANListData; + SetActive(); // Tell scheduler a request is active + } + } + else if ( iState == EProcessWLANListData ) + { + LOG_WRITEF( "actual bytes occupied = %d", iPckgAllocatedSize() ); + + if ( iPckgNeededSize() != iPckgAllocatedSize() ) + { + // the buffer is not long enough... stop + if ( iRetriesLeft > 0 ) + { + LOG_WRITEF( "iRetriesLeft = %d", iRetriesLeft ); + iRetriesLeft--; + iState = EUninitialized; + SetActive(); + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + return; + } + else + { + // no more retries + User::Leave( KErrOverflow ); + } + } + + iArray->Reset(); + + if ( iPckgAllocatedSize() ) + { + iArray->AppendFromStreamBufferL( iPtr ); + } + + LOG_WRITEF( "Array count=%d startup=%d", iArray->Count(), iStartUp ); + + iModel->GetConnectedWlanDetails( iPckg, iConnectedWlan, iStatus ); + iState = EGetConnectedNetwork; + SetActive(); // Tell scheduler a request is active + } + else if ( iState == EGetConnectedNetwork ) + { + LOG_WRITEF( "request result = %d", iPckg() ); + + if ( !iPckg() ) + { + LOG_WRITE( "result is false, so wlaninfo is marked not connected" ); + iConnectedWlan.iConnectionState = ENotConnected; + } + + LOG_WRITEF( "Connected = %d", iConnectedWlan.Connected() ); + + LOG_WRITEF( "iConnectedWlan state = %d", + iConnectedWlan.iConnectionState ); + + if ( iStartUp ) + { + iController->StartupRefreshDataReadyL(); + } + else + { + iController->WlanListDataReadyL(); + } + } + else + { + LOG_WRITEF( "iState = %d", iState ); + } + } + +// ---------------------------------------------------------------------------- +// CWsfWLANListActiveWrapper::RunError +// ---------------------------------------------------------------------------- +// +#ifdef _DEBUG +TInt CWsfWLANListActiveWrapper::RunError( TInt aError ) + { + LOG_ENTERFN( "CWsfWLANListActiveWrapper::RunError" ); + LOG_WRITEF( "aError = %d", aError ); + return aError; + } +#else +TInt CWsfWLANListActiveWrapper::RunError( TInt /*aError*/ ) + { + return KErrNone; + } +#endif