wlanutilities/wlansniffer/engine/client/src/wsfeventhandler.cpp
branchRCL_3
changeset 25 f28ada11abbf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlansniffer/engine/client/src/wsfeventhandler.cpp	Wed Sep 01 12:20:32 2010 +0100
@@ -0,0 +1,341 @@
+/*
+* 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 CWsfEventHandler
+*
+*/
+
+
+
+
+//  CLASS HEADER
+#include "wsfeventhandler.h"
+
+//  INTERNAL INCLUDES
+#include "wsfstatechangeobserver.h"
+#include "wsflogger.h"
+
+
+// ---------------------------------------------------------------------------
+// CWsfEventHandler::NewL
+// ---------------------------------------------------------------------------
+//
+CWsfEventHandler* CWsfEventHandler::NewL( RWsfSession& aSession, 
+                                          MWsfStateChangeObserver& aObserver )
+    {
+    CWsfEventHandler* thisPtr = new (ELeave) CWsfEventHandler( aSession, 
+                                                               aObserver );
+    CleanupStack::PushL( thisPtr );
+    thisPtr->ConstructL();
+    CleanupStack::Pop( thisPtr );
+    return thisPtr;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CWsfEventHandler::~CWsfEventHandler
+// ---------------------------------------------------------------------------
+//
+CWsfEventHandler::~CWsfEventHandler()
+    {
+    Cancel();
+    iSession = NULL;
+    iObserver = NULL;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CWsfEventHandler::CWsfEventHandler
+// ---------------------------------------------------------------------------
+//
+CWsfEventHandler::CWsfEventHandler( RWsfSession& aSession, 
+                                    MWsfStateChangeObserver& aObserver ): 
+    CActive( CActive::EPriorityStandard )
+    {
+    iSession = &aSession;
+    iObserver = &aObserver;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CWsfEventHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CWsfEventHandler::ConstructL()
+    {
+    CActiveScheduler::Add( this );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CWsfEventHandler::DoRunL
+// ---------------------------------------------------------------------------
+//
+void CWsfEventHandler::DoRunL()
+    {
+    LOG_ENTERFN( "CWsfEventHandler::DoRunL" );    
+    LOG_WRITEF( "CWsfEventHandler::DoRunL event = %d", iEvent().iEvent );    
+
+    switch ( iEvent().iEvent )
+        {
+        case EEngineWlanDataChanged:
+            {
+            iObserver->WlanListChangedL();
+            break;
+            }
+
+        case EEngineScanDisabled:
+            {
+            iObserver->ScanDisabledL();
+            break;
+            }
+
+        case EEngineScanEnabled:
+            {
+            iObserver->ScanEnabledL();
+            break;
+            }
+
+        case EEngineConnected:
+            {
+            if ( !iBlockConnectedEvent )
+                {
+                // if the event wasn't blocked, notify the observer
+                iObserver->WlanConnectionActivatedL();
+                }
+            else
+                {
+                // if it was blocked, just clear the flag
+                iBlockConnectedEvent = EFalse;
+                }
+                
+            // anyhow, connecting process is finished
+            if ( iConnecting )
+                {
+                iConnecting = EFalse;
+                iSession->StopConnectingWait();
+                iObserver->ConnectionCreationProcessFinishedL( 
+                                        KErrNone );
+                }
+            break;
+            }
+
+        case EEngineDisconnected:
+            {
+            iObserver->WlanConnectionClosedL();
+            break;
+            }
+
+        case EEngineError:
+            {
+            iObserver->NotifyEngineError( iEvent().iError );
+            break;
+            }
+            
+        case EEngineConnectingFailed:
+            {
+            if ( iConnecting )
+                {
+                // connecting is over
+                iConnecting = EFalse;
+
+                // make client return with KErrCancel
+                iSession->iConnectingResult = iEvent().iError;
+                iSession->StopConnectingWait();
+                iObserver->ConnectionCreationProcessFinishedL( 
+                        iSession->iConnectingResult );
+                }
+            break;
+            }
+
+        default:
+            __ASSERT_DEBUG(0, _L("CWsfEventHandler - Invalid EngineEvent"));
+            break;        
+        }
+
+    }
+
+
+// ---------------------------------------------------------------------------
+// CWsfEventHandler::RunL
+// ---------------------------------------------------------------------------
+//
+void CWsfEventHandler::RunL()
+    {
+    LOG_ENTERFN( "CWsfEventHandler::RunL" );
+    TInt notifyError( KErrNone );
+    TBool reissue( ETrue );
+    
+    if ( iStatus.Int() >= KErrNone && iObserver )
+        {
+        TRAP( notifyError, DoRunL() );
+        }
+        
+    if ( notifyError )
+        {
+        // notified class leaved
+        LOG_WRITEF( "CWsfEventHandler::RunL notify error %d", notifyError );
+        }
+    else if ( iStatus.Int() != KErrNone )
+        {
+        if ( iStatus.Int() == KErrCancel )
+            {
+            // KErrCancel is the signal that we are going down
+            LOG_WRITE( "going down..." );
+            reissue = EFalse;
+            }
+        else
+            {
+            // error on the server side
+            LOG_WRITEF( "CWsfEventHandler::RunL engine error %d", 
+                        iStatus.Int() );
+
+            TBool notify( ETrue );
+                      
+            if ( iStatus.Int() == KErrServerTerminated )
+                {
+                reissue = EFalse;
+                
+                if ( iObserver
+                        && iSession->RecoverFromServerTermination( *iObserver ) )
+                    {
+                    // no need to reissue if recovered since it is already
+                    // done in the recovery process
+                    notify = EFalse;
+                    }
+                }
+
+            if ( notify && iObserver )
+                {
+                // let the client decide what to do
+                iObserver->NotifyEngineError( iStatus.Int() );
+                }
+            }
+        }
+        
+
+    if ( reissue && iObserver )
+        {
+        // reissue callback request
+        iSession->NotifyEventL( *iObserver );
+        }
+    }
+  
+
+// ---------------------------------------------------------------------------
+// CWsfEventHandler::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CWsfEventHandler::DoCancel()
+    {
+    LOG_ENTERFN( "CWsfEventHandler::DoCancel" );
+    iSession->DoCancelNotifyEvent();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CWsfEventHandler::RunError
+// ---------------------------------------------------------------------------
+//
+TInt CWsfEventHandler::RunError( TInt aError )
+    {
+    LOG_ENTERFN( "CWsfEventHandler::RunError" );
+    LOG_WRITEF( "CWsfEventHandler::RunError error = %d", aError );
+    if ( iObserver )
+        {
+        iObserver->NotifyEngineError( aError ) ;
+        }
+    return KErrNone; // we don't wan't to panic euser-47 - do we?
+    }
+
+
+// ---------------------------------------------------------------------------
+// CWsfEventHandler::Start
+// ---------------------------------------------------------------------------
+//
+void CWsfEventHandler::Start()
+    {
+    SetActive();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CWsfEventHandler::EventContainer
+// ---------------------------------------------------------------------------
+//
+TPckgBuf<TWsfNotifyEventContainer>& CWsfEventHandler::EventContainer()
+    {
+    return iEvent;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CWsfEventHandler::ResetObserver
+// ---------------------------------------------------------------------------
+//
+void CWsfEventHandler::ResetObserver( MWsfStateChangeObserver& aObserver )
+    {
+    LOG_ENTERFN( "CWsfEventHandler::ResetObserver" );
+    iObserver = &aObserver;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CWsfEventHandler::BlockNextConnectedEvent
+// ---------------------------------------------------------------------------
+//
+void CWsfEventHandler::BlockNextConnectedEvent()
+    {
+    LOG_ENTERFN( "CWsfEventHandler::BlockNextConnectedEvent" );
+    if ( iConnecting )
+        {
+        LOG_WRITE( "iBlockConnectedEvent to true" );
+        // set the flag only if we are the ones who are connecting
+        iBlockConnectedEvent = ETrue;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CWsfEventHandler::UnBlockNextConnectedEvent
+// ---------------------------------------------------------------------------
+//
+void CWsfEventHandler::UnBlockNextConnectedEvent()
+    {
+    LOG_ENTERFN( "CWsfEventHandler::UnBlockNextConnectedEvent" );
+    LOG_WRITE( "iBlockConnectedEvent to false" );
+    iBlockConnectedEvent = EFalse;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CWsfEventHandler::SetConnecting
+// ---------------------------------------------------------------------------
+//
+void CWsfEventHandler::SetConnecting( TBool aConnecting )
+    {
+    LOG_ENTERFN( "CWsfEventHandler::SetConnecting" );
+    LOG_WRITEF( "iConnecting=%d, aConnecting=%d", iConnecting, aConnecting );
+    iConnecting = aConnecting;
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// CWsfEventHandler::Connecting
+// ---------------------------------------------------------------------------
+//
+TBool CWsfEventHandler::Connecting() const
+    {
+    return iConnecting;
+    }
+