diff -r b852595f5cbe -r 63be7eb3fc78 wlanutilities/wlansniffer/engine/server/src/wsfsession.cpp --- a/wlanutilities/wlansniffer/engine/server/src/wsfsession.cpp Thu Aug 19 10:59:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,720 +0,0 @@ -/* -* 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 CWsfSession -* -*/ - - -// CLASS HEADER -#include "wsfsession.h" -#include "wsfserver.h" -#include "wsfengine.h" -#include "wsfservercommon.h" -#include "wsfwlaninfo.h" -#include "wsflogger.h" - - -// ---------------------------------------------------------------------------- -// CWsfSession::CWsfSession -// ---------------------------------------------------------------------------- -// -CWsfSession::CWsfSession( CWsfServer& aServer ): - iServer( aServer ), - iRequestNotify( EFalse ), - iEnabledScanning( EFalse ) - { - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::NewL -// ---------------------------------------------------------------------------- -// -CWsfSession* CWsfSession::NewL( CWsfServer& aServer ) - { - CWsfSession* thisPtr = new (ELeave) CWsfSession( aServer ); - CleanupStack::PushL( thisPtr ); - thisPtr->ConstructL(); - CleanupStack::Pop( thisPtr ); - return thisPtr; - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::~CWsfSession -// ---------------------------------------------------------------------------- -// -CWsfSession::~CWsfSession() - { - LOG_ENTERFN( "CWsfSession::~CWsfSession" ); - CancelPendingTasks(); - iServer.Engine()->Detach( this ); - iServer.ClientRelease(); - iEventQueue.Close(); - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::ConstructL -// ---------------------------------------------------------------------------- -// -void CWsfSession::ConstructL() - { - iServer.ClientAttach(); - iServer.Engine()->AttachL( this ); - iEnabledScanning = iServer.Engine()->IsScanning(); - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::ServiceL -// ---------------------------------------------------------------------------- -// -void CWsfSession::ServiceL( const RMessage2& aMessage ) - { - TRAPD( err, DispatchMessageL( aMessage ) ); - if ( err != KErrNone ) - { - LOG_WRITEF( "CWsfSession::ServiceL DispatchMessageL leave error = %d", - err ); - aMessage.Complete( err ); - } - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::DispatchMessageL -// ---------------------------------------------------------------------------- -// -void CWsfSession::DispatchMessageL( const RMessage2& aMessage ) - { - LOG_ENTERFN( "CWsfSession::DispatchMessageL" ); - LOG_WRITEF( "CWsfSession::DispatchMessageL message = %d", - aMessage.Function() ); - - switch ( aMessage.Function() ) - { - case ESnifferCmdWlanDataSize: - { - ReplyWlanDataSizeL( aMessage ); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdNotifyEvents: - { - RequestNotifyL( aMessage ); - break; - } - - case ESnifferCmdCancelNotifyEvents: - { - CancelNotifyEvents(); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdGetWlanInfo: - { - WriteWlanDataL( aMessage ); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdConnect: - { - ConnectWlanL( aMessage ); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdDisconnect: - { - DisconnectWlanL( aMessage ); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdActivateScan: - { - ActivateScanL(); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdDisableScan: - { - DisableScanL(); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdConnectionName: - { - GetConnectedAccountNameL( aMessage ); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdCancelAll: - { - CancelPendingTasks(); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdRequestScan: - { - RequestScanL( aMessage ); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdMonitorAp: - { - MonitorApL( aMessage ); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdIsScanEnabled: - { - ReplyIsScanningL(aMessage); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdIsConnected: - { - IsConnectedL( aMessage ); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdConnectedDetails: - { - GetConnectedDetailsL( aMessage ); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdAbortScanning: - { - AbortScanning(); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdAbortConnecting: - { - AbortConnectingL(); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdSetIapPersistence: - { - SetIapPersistenceL( aMessage ); - aMessage.Complete( KErrNone ); - break; - } - - case ESnifferCmdControlDisconnectTimer: - { - ControlDisconnectTimerL( aMessage ); - aMessage.Complete( KErrNone ); - break; - } - - - // requests we don't understand at all are a different thing, - // so panic the client here, this function also completes the message - default: - { - _LIT( KWsfServerPanic, "WlanSnifferServer" ); - aMessage.Panic( KWsfServerPanic, 1 ); - } - - } - } - - -// --------------------------------------------------------------------------- -// CWsfSession::RequestNotify -// --------------------------------------------------------------------------- -// -void CWsfSession::RequestNotifyL( const RMessage2& aMessage ) - { - LOG_ENTERFN( "CWsfSession::RequestNotifyL" ); - if ( !iRequestNotify ) - { - LOG_WRITE( "CWsfSession::RequestNotifyL first subscription" ); - // first subscription - iRequestNotify = ETrue; - iEventQueue.Reset(); - } - - // initial value / processing finished - iProcessingEvent = EFalse; - - // store the message to be completed - iNotifyChangesMessage = aMessage; - - // deal with the queue - if ( iEventQueue.Count() ) - { - LOG_WRITE( "CWsfSession::RequestNotifyL queue not empty" ); - NotifyClientL(); - } - } - - -// --------------------------------------------------------------------------- -// CWsfSession::CancelNotifyEvents -// --------------------------------------------------------------------------- -// -void CWsfSession::CancelNotifyEvents() - { - LOG_ENTERFN( "CWsfSession::CancelNotifyEvents" ); - - // interrupt ongoing event handling - iProcessingEvent = EFalse; - if ( !iNotifyChangesMessage.IsNull() ) - { - iNotifyChangesMessage.Complete( KErrCancel ); - } - - // unsubscribe - iRequestNotify = EFalse; - - // drop all waiting events - iEventQueue.Reset(); - } - - -// --------------------------------------------------------------------------- -// CWsfSession::CancelPendingTasks -// --------------------------------------------------------------------------- -// -void CWsfSession::CancelPendingTasks() - { - LOG_ENTERFN( "CWsfSession::CancelPendingTasks" ); - if ( iEnabledScanning ) - { - TRAP_IGNORE( iServer.Engine()->DisableScanningL() ); - } - - CancelNotifyEvents(); - } - - - -// from MWsfEngineObserver - -// --------------------------------------------------------------------------- -// CWsfSession::WlanListChangedL -// --------------------------------------------------------------------------- -// -void CWsfSession::WlanListChangedL() - { - LOG_ENTERFN( "CWsfSession::WlanListChangedL" ); - TWsfNotifyEventContainer event = { EEngineWlanDataChanged, KErrNone }; - iEventQueue.AppendL( event ); - - NotifyClientL(); - } - - -// --------------------------------------------------------------------------- -// CWsfSession::NotifyErrorL -// --------------------------------------------------------------------------- -// -void CWsfSession::NotifyErrorL( TInt aError ) - { - LOG_ENTERFN( "CWsfSession::NotifyErrorL" ); - TWsfNotifyEventContainer event = { EEngineError, aError }; - iEventQueue.AppendL( event ); - - NotifyClientL(); - } - - -// --------------------------------------------------------------------------- -// CWsfSession::ScanEnabledL -// --------------------------------------------------------------------------- -// -void CWsfSession::ScanEnabledL() - { - LOG_ENTERFN( "CWsfSession::ScanEnabledL" ); - iEnabledScanning = ETrue; - TWsfNotifyEventContainer event = { EEngineScanEnabled, KErrNone }; - iEventQueue.AppendL( event ); - - NotifyClientL(); - } - - -// --------------------------------------------------------------------------- -// CWsfSession::ScanDisabledL -// --------------------------------------------------------------------------- -// -void CWsfSession::ScanDisabledL() - { - LOG_ENTERFN( "CWsfSession::ScanDisabledL" ); - iEnabledScanning = EFalse; - TWsfNotifyEventContainer event = { EEngineScanDisabled, KErrNone }; - iEventQueue.AppendL( event ); - - NotifyClientL(); - } - - -// --------------------------------------------------------------------------- -// CWsfSession::ConnectedL -// --------------------------------------------------------------------------- -// -void CWsfSession::ConnectedL() - { - LOG_ENTERFN( "CWsfSession::ConnectedL" ); - TWsfNotifyEventContainer event = { EEngineConnected, KErrNone }; - iEventQueue.AppendL( event ); - - NotifyClientL(); - } - - -// --------------------------------------------------------------------------- -// CWsfSession::DisconnectedL -// --------------------------------------------------------------------------- -// -void CWsfSession::DisconnectedL() - { - LOG_ENTERFN( "CWsfSession::DisconnectedL" ); - TWsfNotifyEventContainer event = { EEngineDisconnected, KErrNone }; - iEventQueue.AppendL( event ); - - NotifyClientL(); - } - - -// --------------------------------------------------------------------------- -// CWsfSession::ConnectingFailedL -// --------------------------------------------------------------------------- -// -void CWsfSession::ConnectingFailedL( TInt aError ) - { - LOG_ENTERFN( "CWsfSession::ConnectingFailedL" ); - TWsfNotifyEventContainer event = { EEngineConnectingFailed, aError }; - iEventQueue.AppendL( event ); - - NotifyClientL(); - } - - -// --------------------------------------------------------------------------- -// CWsfSession::NotifyClientL -// --------------------------------------------------------------------------- -// -void CWsfSession::NotifyClientL() - { - LOG_ENTERFN( "CWsfSession::NotifyClientL" ); - - if ( iRequestNotify && !iProcessingEvent ) - { - LOG_WRITE( "CWsfSession::NotifyClientL notify" ); - TPckgBuf container( iEventQueue[0] ); - - iNotifyChangesMessage.WriteL( 0, container ); - - // remove the item that we have just handed over - iEventQueue.Remove( 0 ); - - iProcessingEvent = ETrue; - iNotifyChangesMessage.Complete( KErrNone ); - } - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::GetConnectedAccountNameL -// ---------------------------------------------------------------------------- -// -void CWsfSession::GetConnectedAccountNameL( const RMessage2& aMessage ) - { - LOG_ENTERFN( "CWsfSession::GetConnectedAccountNameL" ); - HBufC* iapName = iServer.Engine()->ConnectedWlanSsidL(); - CleanupStack::PushL( iapName ); - TPckgBuf package; - - TInt maxLen = package().iConnectedAccountName.MaxLength(); - - if ( iapName->Length() ) - { - if ( iapName->Length() > maxLen ) - { - package().iConnectedAccountName.Copy( iapName->Ptr(), maxLen ); - } - else - { - package().iConnectedAccountName.Copy( *iapName ); - } - package().iConnected = ETrue; - } - else - { - package().iConnected = EFalse; - } - aMessage.WriteL( 0, package ); - CleanupStack::PopAndDestroy( iapName ); - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::GetConnectedDetailsL -// ---------------------------------------------------------------------------- -// -void CWsfSession::GetConnectedDetailsL( const RMessage2& aMessage ) - { - LOG_ENTERFN( "CWsfSession::GetConnectedDetailsL" ); - TPckgBuf package; - TPckgBuf ret( ETrue ); - - if ( !iServer.Engine()->ConnectedWlanConnectionDetailsL( package() ) ) - { - LOG_WRITE( "engine returned false, so wlaninfo is marked as invalid" ); - ret() = EFalse; - } - - aMessage.WriteL( 0, ret ); - aMessage.WriteL( 1, package ); - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::ReplyWlanDataSizeL -// ---------------------------------------------------------------------------- -// -void CWsfSession::ReplyWlanDataSizeL( const RMessage2& aMessage ) - { - LOG_ENTERFN( "CWsfSession::ReplyWlanDataSizeL" ); - const TInt KInvalidLength = 0; - TPckgBuf p( KInvalidLength ); - - HBufC8* results = iServer.Engine()->GetScanResults(); - if ( results ) - { - p() = results->Length(); - } - - aMessage.WriteL( 0, p ); - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::WriteWlanDataL -// ---------------------------------------------------------------------------- -// -void CWsfSession::WriteWlanDataL( const RMessage2& aMessage ) - { - LOG_ENTERFN( "CWsfSession::WriteWlanDataL" ); - TPckgBuf sizeData; - - // don't take the ownership - HBufC8* scanData = iServer.Engine()->GetScanResults(); - - if ( scanData ) - { - LOG_WRITEF( "scanData->Length() = %d aMessage.GetDesMaxLength(1) = %d", - scanData->Length(), aMessage.GetDesMaxLength( 1 ) ); - if ( scanData->Length() > aMessage.GetDesMaxLength( 1 ) ) - { - // the data has changed - // return error to client to alloc more buffer - sizeData() = scanData->Length(); - aMessage.WriteL( 0, sizeData ); - } - else - { - // else we have enough buffer... copy the data - sizeData() = scanData->Length(); - aMessage.WriteL( 0, sizeData ); - aMessage.WriteL( 1, *scanData, 0 ); - } - } - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::ActivateScanL -// ---------------------------------------------------------------------------- -// -void CWsfSession::ActivateScanL() - { - LOG_ENTERFN( "CWsfSession::ActivateScanL" ); - iServer.Engine()->EnableScanningL(); - iEnabledScanning = ETrue; - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::DisableScanL -// ---------------------------------------------------------------------------- -// -void CWsfSession::DisableScanL() - { - LOG_ENTERFN( "CWsfSession::DisableScanL" ); - if ( iEnabledScanning ) - { - iServer.Engine()->DisableScanningL(); - iEnabledScanning = EFalse; - } - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::ConnectWlanL -// ---------------------------------------------------------------------------- -// -void CWsfSession::ConnectWlanL( const RMessage2& aMessage ) - { - LOG_ENTERFN( "CWsfSession::ConnectWlanL" ); - TUint32 iapId( aMessage.Int1() ); - TBool connectOnly( aMessage.Int2() ); - TWsfIapPersistence persistence( TWsfIapPersistence( aMessage.Int3() ) ); - TPckgBuf p( iServer.Engine()->ConnectWlanL( iapId, connectOnly, persistence ) ); - aMessage.WriteL( 0, p ); - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::DisconnectWlanL -// ---------------------------------------------------------------------------- -// -void CWsfSession::DisconnectWlanL( const RMessage2& aMessage ) - { - LOG_ENTERFN( "CWsfSession::DisconnectWlanL" ); - TPckgBuf p( iServer.Engine()->DisconnectWlan() ); - aMessage.WriteL( 0, p ); - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::RequestScanL -// ---------------------------------------------------------------------------- -// -void CWsfSession::RequestScanL( const RMessage2& aMessage ) - { - LOG_ENTERFN( "CWsfSession::RequestScanL" ); - TPckgBuf requestMade( EFalse ); - // check if the client has enabled scanning - if not do not request scans - if ( !iEnabledScanning ) - { - LOG_WRITE( "CWsfSession::RequestScanL error, not scanning" ); - aMessage.WriteL( 0, requestMade ); - return; - } - - requestMade = iServer.Engine()->RefreshScanResults(); - aMessage.WriteL( 0, requestMade ); - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::MonitorApL -// ---------------------------------------------------------------------------- -// -void CWsfSession::MonitorApL( const RMessage2& aMessage ) - { - LOG_ENTERFN( "CWsfSession::MonitorApL" ); - TUint32 accessPoint( (TUint32) aMessage.Int0() ); - iServer.Engine()->MonitorAccessPointL( accessPoint ); - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::ReplyIsScanningL -// ---------------------------------------------------------------------------- -// -void CWsfSession::ReplyIsScanningL( const RMessage2& aMessage ) - { - LOG_ENTERFN( "CWsfSession::ReplyIsScanningL" ); - TPckgBuf p( iServer.Engine()->IsScanning() ); - aMessage.WriteL( 0, p ); - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::IsConnectedL -// ---------------------------------------------------------------------------- -// -void CWsfSession::IsConnectedL( const RMessage2& aMessage ) - { - TBool b = iServer.Engine()->IsConnected(); - TPckgBuf p( b ); - aMessage.WriteL( 0, p ); - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::AbortScanning -// ---------------------------------------------------------------------------- -// -void CWsfSession::AbortScanning() - { - LOG_ENTERFN( "CWsfSession::AbortScanningL" ); - iServer.Engine()->AbortScanning(); - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::AbortConnectingL -// ---------------------------------------------------------------------------- -// -void CWsfSession::AbortConnectingL() - { - LOG_ENTERFN( "CWsfSession::AbortConnectingL" ); - iServer.Engine()->AbortConnectingL(); - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::SetIapPersistenceL -// ---------------------------------------------------------------------------- -// -void CWsfSession::SetIapPersistenceL( const RMessage2& aMessage ) - { - LOG_ENTERFN( "CWsfSession::SetIapPersistenceL" ); - - TWsfIapPersistence persistence( TWsfIapPersistence( aMessage.Int1() ) ); - TPckgBuf ret( iServer.Engine()->SetIapPersistenceL( persistence ) ); - - aMessage.WriteL( 0, ret ); - } - - -// ---------------------------------------------------------------------------- -// CWsfSession::ControlDisconnectTimerL -// ---------------------------------------------------------------------------- -// -void CWsfSession::ControlDisconnectTimerL( const RMessage2& aMessage ) - { - LOG_ENTERFN( "CWsfSession::ControlDisconnectTimerL" ); - - TPckgBuf ret( iServer.Engine()->ControlDisconnectTimer( - TUint( aMessage.Int1() ) ) ); - - aMessage.WriteL( 0, ret ); - } - -