wlanutilities/wlansniffer/engine/client/src/wsfsession.cpp
branchRCL_3
changeset 10 dff6ebfd236f
parent 0 56b72877c1cb
child 13 858c6c491d0e
--- a/wlanutilities/wlansniffer/engine/client/src/wsfsession.cpp	Fri Feb 19 23:55:42 2010 +0200
+++ b/wlanutilities/wlansniffer/engine/client/src/wsfsession.cpp	Fri Mar 12 15:48:54 2010 +0200
@@ -35,6 +35,11 @@
 */
 static const TInt KIPCSlots = 6;
 
+/**
+* Number of retries to start the server
+*/
+static const TInt KRetries = 3;
+
 
 
 // ---------------------------------------------------------------------------
@@ -110,7 +115,7 @@
     LOG_ENTERFN( "RWsfSession::Connect" );
     TInt err = StartServer();
     
-    if ( err == KErrNone )
+    for (TInt tries = 0; tries < KRetries; tries++)
         {
         LOG_WRITE( "server started" );
 
@@ -118,15 +123,37 @@
 
         LOG_WRITEF( "CreateSession() returned %d", err );
         
-        if ( err == KErrNone )
+        if (!err)
+            {
+            LOG_WRITE( "connected" );
+            TRAP( err, iConnWaiter = new (ELeave) CActiveSchedulerWait() );
+            break; 
+            }
+        if (err != KErrNotFound && err != KErrServerTerminated)
             {
-            TRAP( err, iConnWaiter = new (ELeave) CActiveSchedulerWait() );
+            LOG_WRITE( "problems session creation - break" );
+            break; 
             }
+            
+        TInt err = StartServer(); // try to launch the server
+
+        if (!err)
+            {
+            LOG_WRITE( "ok - try to connect again" );
+            continue; 
+            }
+            
+        if (err == KErrAlreadyExists)
+            {
+            LOG_WRITE( "someone else started - try to connect again" );
+            continue; 
+            }
+            
+        LOG_WRITE( "problems - break" );
+        break; 
         }
-    else
-        {
-        LOG_WRITEF( "server starting failed with error %d", err );
-        }
+    
+    LOG_WRITEF( "connect exit value = %d", err );
 
     return err;
     }
@@ -212,6 +239,22 @@
 
 
 // ---------------------------------------------------------------------------
+// RWsfSession::GetConnectedWlanDetails
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RWsfSession::GetConnectedWlanDetails( TPckgBuf<TBool>& aPckg,
+                                                    TWsfWlanInfo& aWlanInfo,
+                                                    TRequestStatus& aStatus )
+    {
+    LOG_ENTERFN("RWsfSession::GetConnectedWlanDetails");
+    TPckg<TWsfWlanInfo> package( aWlanInfo );
+
+    SendReceive( ESnifferCmdConnectedDetails, TIpcArgs( &aPckg, &package ), 
+                 aStatus );
+    }
+
+
+// ---------------------------------------------------------------------------
 // RWsfSession::NotifyEventL
 // ---------------------------------------------------------------------------
 //
@@ -362,6 +405,28 @@
 
 
 // ---------------------------------------------------------------------------
+// RWsfSession::GetWlanListSize
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RWsfSession::GetWlanListSize( TPckgBuf<TUint> &aPckg, TRequestStatus& aStatus )
+    {
+    LOG_ENTERFN("RWsfSession::GetWlanListSize");    
+    SendReceive( ESnifferCmdWlanDataSize, TIpcArgs( &aPckg ), aStatus );
+    }
+
+
+// ---------------------------------------------------------------------------
+// RWsfSession::GetWlanList
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RWsfSession::GetWlanList( TPckgBuf<TUint>& aPckg, TPtr8& aPtr, TRequestStatus& aStatus )
+    {
+    LOG_ENTERFN("RWsfSession::GetWlanList");    
+    SendReceive( ESnifferCmdGetWlanInfo, TIpcArgs( &aPckg, &aPtr ), aStatus );
+    }
+
+
+// ---------------------------------------------------------------------------
 // RWsfSession::MonitorAccessPointL
 // ---------------------------------------------------------------------------
 //
@@ -369,18 +434,10 @@
     {
     LOG_ENTERFN("RWsfSession::MonitorAccessPointL");
 
-    CWsfActiveWaiter *waiter = CWsfActiveWaiter::NewL();
-    CleanupStack::PushL( waiter );
-
-    SendReceive( ESnifferCmdMonitorAp, TIpcArgs( aMonitoredIap ), 
-                                                            waiter->iStatus );
-    waiter->WaitForRequest();
-    LOG_WRITEF( "message[%d] call returned %d", 
-                ESnifferCmdMonitorAp,
-                waiter->iStatus.Int() );
-    User::LeaveIfError( waiter->iStatus.Int() );
-    
-    CleanupStack::PopAndDestroy( waiter );
+    TInt err = Send( ESnifferCmdMonitorAp, TIpcArgs( aMonitoredIap ));
+    LOG_WRITEF( "message[%d] call returned %d", ESnifferCmdMonitorAp, err );
+        
+    User::LeaveIfError( err );
     }
 
 
@@ -408,6 +465,17 @@
 
 
 // ---------------------------------------------------------------------------
+// RWsfSession::RequestScan
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RWsfSession::RequestScan(TPckgBuf<TBool>& aPckg, TRequestStatus& aStatus )
+    {
+    LOG_ENTERFN("RWsfSession::RequestScan");
+    SendReceive( ESnifferCmdRequestScan, TIpcArgs( &aPckg ), aStatus );
+    }
+
+
+// ---------------------------------------------------------------------------
 // RWsfSession::ConnectWlanBearerL
 // ---------------------------------------------------------------------------
 //
@@ -460,42 +528,39 @@
 
 
 // ---------------------------------------------------------------------------
-// RWsfSession::ConnectWlanBearerWithoutConnWaiterL
+// RWsfSession::ConnectWlanBearer
 // ---------------------------------------------------------------------------
 //
-EXPORT_C TInt RWsfSession::ConnectWlanBearerWithoutConnWaiterL( TUint32 aIapId, 
-                                              TWsfIapPersistence aPersistence )
+EXPORT_C void RWsfSession::ConnectWlanBearer( TPckgBuf<TBool>& aPckg,
+                                               TUint32 aIapId, 
+                                               TWsfIapPersistence aPersistence,
+                                               TRequestStatus& aStatus )
     {
-    LOG_ENTERFN( "RWsfSession::ConnectWlanBearerWithoutConnWaiterL" );
+    LOG_ENTERFN( "RWsfSession::ConnectWlanBearer" );
     LOG_WRITEF( "IAP id = %d", aIapId );
 
     // mark the beginning of the connection process
     iEventHandler->SetConnecting( ETrue );
 
-    TInt res( KErrNone );
-    TPckgBuf<TInt> pckg;
+    SendReceive( ESnifferCmdConnect, TIpcArgs( &aPckg, aIapId, aPersistence ), 
+                                                aStatus );
+    }
 
-    CWsfActiveWaiter *waiter = CWsfActiveWaiter::NewL();
-    CleanupStack::PushL( waiter );
 
-    SendReceive( ESnifferCmdConnect, TIpcArgs( &pckg, aIapId, aPersistence ), 
-                                                             waiter->iStatus );
-    waiter->WaitForRequest();
-    LOG_WRITEF( "message[%d] call returned %d", 
-                ESnifferCmdConnect,
-                waiter->iStatus.Int() );
-    User::LeaveIfError( waiter->iStatus.Int() );
-    CleanupStack::PopAndDestroy( waiter );
+// ---------------------------------------------------------------------------
+// RWsfSession::SetConnectWlanBearerResult
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RWsfSession::SetConnectWlanBearerResult( TInt aResult )
+    {
+    LOG_ENTERFN( "RWsfSession::SetConnectWlanBearerResult" );
+    LOG_WRITEF( "Result = %d", aResult );
     
-    res = pckg();
-    
-    if ( res != KErrNone )
+    if ( aResult != KErrNone )
         {
         // on any error the flag should be cleared
         iEventHandler->SetConnecting( EFalse );
         }
-        
-    return res;
     }
 
 
@@ -541,6 +606,17 @@
 
 
 // ---------------------------------------------------------------------------
+// RWsfSession::DisconnectWlanBearer
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RWsfSession::DisconnectWlanBearer( TPckgBuf<TBool>& aPckg, TRequestStatus& aStatus )
+    {
+    LOG_ENTERFN("RWsfSession::DisconnectWlanBearer");
+    SendReceive( ESnifferCmdDisconnect, TIpcArgs( &aPckg ), aStatus );
+    }
+
+
+// ---------------------------------------------------------------------------
 // RWsfSession::Close
 // ---------------------------------------------------------------------------
 //
@@ -550,6 +626,7 @@
     delete iEventHandler; iEventHandler = NULL;
     delete iConnWaiter; iConnWaiter = NULL;
     
+    LOG_WRITE( "close session" );
     RSessionBase::Close();
     }