wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmscanrequest.cpp
changeset 0 c40eb8fe8501
child 25 a0fdcd0e4c56
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmscanrequest.cpp	Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,225 @@
+/*
+* Copyright (c) 2006-2007 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:  Active Object for asynchronous scan request.
+*
+*/
+
+
+#include "wlmscanrequest.h"
+#include "am_debug.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+CWlmScanRequest* CWlmScanRequest::NewL(
+    RWLMServer& aClient )
+    {
+    DEBUG( "CWlmScanRequest::NewL()" );
+
+    CWlmScanRequest* self = new CWlmScanRequest(
+        aClient );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+CWlmScanRequest::~CWlmScanRequest()
+    {
+    DEBUG( "CWlmScanRequest::~CWlmScanRequest()" );
+    
+    iScanList = NULL;
+    iClientStatus = NULL;
+    iCacheLifetime = NULL;
+    iMaxDelay = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+TInt CWlmScanRequest::IssueRequest(
+    ScanList& aScanList,
+    const TDesC8& aSsid,
+    TInt& aCacheLifetime,
+    TUint& aMaxDelay,
+    TRequestStatus* aStatus )
+    {
+    DEBUG( "CWlmScanRequest::IssueRequest()" );
+    
+    iScanList = &aScanList;
+    iScanList->ClearAll();
+    if ( !iScanList->SetCurrentMaxSize( KWlmScanListMaxSize ) )
+        {
+        DEBUG( "CWlmScanRequest::IssueRequest() - unable to set scan list size" );
+        
+        if ( !aStatus )
+            {
+            return KErrNoMemory;
+            }
+
+        User::RequestComplete( aStatus, KErrNoMemory );
+        
+        return KErrNone;
+        }
+
+    iScanListPtr.Set( iScanList->Data(), 0, KWlmScanListMaxSize );
+    
+    iDynamicScanListBuf().count = 0;
+    iDynamicScanListBuf().size = 0;
+    
+    iSsidBuf().ssidLength = aSsid.Length();
+    Mem::Copy(
+        &iSsidBuf().ssid[0],
+        aSsid.Ptr(),
+        aSsid.Length() );
+
+    iCacheLifetime = &aCacheLifetime;
+    iMaxDelay = &aMaxDelay;
+    
+    iScanSchedulingBuf().cacheLifetime = aCacheLifetime;
+    iScanSchedulingBuf().maxDelay = aMaxDelay;
+    
+    TIpcArgs params( &iScanListPtr, &iSsidBuf, &iDynamicScanListBuf, &iScanSchedulingBuf );
+
+    if ( !aStatus )
+        {
+        TInt ret = iClient.SendReceive( EGetScanResults, params );
+        if ( ret != KErrNone )
+            {
+            DEBUG1( "CWlmScanRequest::IssueRequest() - EGetScanResults failed (%d)",
+                ret );
+
+            return ret;
+            }
+        aCacheLifetime = iScanSchedulingBuf().cacheLifetime;
+        aMaxDelay = iScanSchedulingBuf().maxDelay;
+
+        return UpdateResults();        
+        }
+    else
+        {
+        iClientStatus = aStatus;
+        *iClientStatus = KRequestPending;
+        iClient.SendReceive( EGetScanResults, params, iStatus );
+        SetActive();
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+TRequestStatus* CWlmScanRequest::ClientStatus()
+    {
+    return iClientStatus;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CWlmScanRequest::RunL()
+    {
+    DEBUG( "CWlmScanRequest::RunL()" );
+
+    *iCacheLifetime = iScanSchedulingBuf().cacheLifetime;
+    *iMaxDelay = iScanSchedulingBuf().maxDelay;
+    
+    TInt ret = iStatus.Int();
+    if ( ret == KErrNone )
+        {
+        ret = UpdateResults();
+        }
+    else
+        {
+        DEBUG1( "CWlmScanRequest::RunL() - EGetScanResults failed (%d)",
+            ret );
+        }
+
+    User::RequestComplete( iClientStatus, ret );
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+TInt CWlmScanRequest::RunError(
+    TInt /* aError */ )
+    {
+    // Ignore the error.
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CWlmScanRequest::DoCancel()
+    {
+    DEBUG( "CWlmScanRequest::DoCancel()" );
+
+    *iCacheLifetime = iScanSchedulingBuf().cacheLifetime;
+    *iMaxDelay = iScanSchedulingBuf().maxDelay;
+    
+    // Send the command
+    iClient.SendReceive( ECancelGetScanResults );
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+CWlmScanRequest::CWlmScanRequest(
+    RWLMServer& aClient ) :
+    CActive( CActive::EPriorityStandard ),
+    iClient( aClient ),
+    iScanList( NULL ),
+    iScanListPtr( NULL, 0 ),
+    iCacheLifetime( NULL ),
+    iMaxDelay( NULL ),
+    iClientStatus( NULL )
+    {
+    DEBUG( "CWlmScanRequest::CWlmScanRequest()" );
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CWlmScanRequest::ConstructL()
+    {
+    DEBUG( "CWlmScanRequest::ConstructL()" );
+
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+TInt CWlmScanRequest::UpdateResults()
+    {
+    DEBUG( "CWlmScanRequest::UpdateResults()" );
+
+    DEBUG1( "CWlmScanRequest::UpdateResults() - scan list count is %u",
+    	iDynamicScanListBuf().count );
+    DEBUG1( "CWlmScanRequest::UpdateResults() - scan list size is %u",
+    	iDynamicScanListBuf().size );
+
+    iScanList->Update( iDynamicScanListBuf().count, iDynamicScanListBuf().size );
+    iScanList->Compress();
+
+    return KErrNone;
+    }