wlanutilities/wlanqtutilities/wrapper/src/wlanqtutilsesockwrapper_symbian.cpp
branchRCL_3
changeset 24 63be7eb3fc78
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlanqtutilities/wrapper/src/wlanqtutilsesockwrapper_symbian.cpp	Tue Aug 31 16:18:40 2010 +0300
@@ -0,0 +1,196 @@
+/*
+* Copyright (c) 2009-2010 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:
+* Private implementation of wrapper for Symbian Esock library.
+*/
+
+// System includes
+
+#include <e32base.h>
+#include <es_sock.h>
+#include <in_sock.h>
+#include <extendedconnpref.h>
+
+// User includes
+
+#include "wlanqtutilsesockwrapper.h"
+#include "wlanqtutilsesockwrapper_symbian.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "wlanqtutilsesockwrapper_symbianTraces.h"
+#endif
+
+/*!
+    \class WlanQtUtilsWlanQtUtilsEsockWrapperPrivate
+    \brief Private implementation of wrapper for Symbian Esock library.
+
+    Provides functionality to connect and disconnect IAPs.
+*/
+
+// External function prototypes
+
+// Local constants
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+/*!
+    Constructor.
+    
+    @param [in] wrapper Wrapper to report progress to.
+ */
+
+WlanQtUtilsEsockWrapperPrivate::WlanQtUtilsEsockWrapperPrivate(
+    WlanQtUtilsEsockWrapper *wrapper) :
+    CActive(EPriorityStandard),
+    iConnectionActive(EFalse),
+    q_ptr(wrapper)
+{
+    OstTraceFunctionEntry1(WLANQTUTILSESOCKWRAPPERPRIVATE_WLANQTUTILSESOCKWRAPPERPRIVATE_ENTRY, this);
+
+    CActiveScheduler::Add(this);
+    
+    // Establish a session to Socket Server. Errors in Socket Server
+    // connection are fatal so just throw them as exceptions
+    qt_symbian_throwIfError(iSocketServer.Connect());
+
+    OstTraceFunctionExit1(WLANQTUTILSESOCKWRAPPERPRIVATE_WLANQTUTILSESOCKWRAPPERPRIVATE_EXIT, this);
+}
+
+/*!
+    Destructor.
+ */
+
+WlanQtUtilsEsockWrapperPrivate::~WlanQtUtilsEsockWrapperPrivate()
+{
+    OstTraceFunctionEntry1(DUP1_WLANQTUTILSESOCKWRAPPERPRIVATE_WLANQTUTILSESOCKWRAPPERPRIVATE_ENTRY, this);
+
+    // Close any possibly ongoing connection
+    Cancel();
+    // Close Socket Server session
+    iSocketServer.Close();
+    
+    OstTraceFunctionExit1(DUP1_WLANQTUTILSESOCKWRAPPERPRIVATE_WLANQTUTILSESOCKWRAPPERPRIVATE_EXIT, this);
+}
+
+/*!
+   Starts connection creation to given IAP.
+
+   @param [in] iapId IAP ID to connect.
+ */
+
+void WlanQtUtilsEsockWrapperPrivate::ConnectIap(int iapId)
+{
+    OstTraceFunctionEntry1(WLANQTUTILSESOCKWRAPPERPRIVATE_CONNECTIAP_ENTRY, this);
+    
+    // Cancel a (possibly) ongoing previous request
+    Cancel();
+    
+    OstTrace1(
+        TRACE_NORMAL,
+        WLANQTUTILSESOCKWRAPPERPRIVATE_CONNECTIAP,
+        "WlanQtUtilsEsockWrapperPrivate::connectIap;iapId=%d",
+        iapId );
+    
+    // Open an RConnection object. Errors in RConnection opening are
+    // fatal so just throw them as exceptions
+    qt_symbian_throwIfError(iConnection.Open(iSocketServer));
+    
+    // Create overrides for connection preferences to force opening of the
+    // given IAP without any user prompts.
+    TConnPrefList prefList;
+    TExtendedConnPref prefs;
+    prefs.SetIapId(iapId);
+    prefs.SetNoteBehaviour(TExtendedConnPref::ENoteBehaviourConnSilent);
+    QT_TRAP_THROWING(prefList.AppendL(&prefs));
+     
+    // Start a connection with connection preferences
+    iConnection.Start(prefList, iStatus);
+
+    iConnectionActive = ETrue;
+    
+    SetActive();
+    
+    OstTraceFunctionExit1(WLANQTUTILSESOCKWRAPPERPRIVATE_CONNECTIAP_EXIT, this);
+}
+
+/*!
+   Disconnects connection, if one is active.
+ */
+
+void WlanQtUtilsEsockWrapperPrivate::DisconnectIap()
+{      
+    OstTraceFunctionEntry1(WLANQTUTILSESOCKWRAPPERPRIVATE_DISCONNECTIAP_ENTRY, this);
+    
+    if (iConnectionActive) {
+        OstTrace0(
+            TRACE_NORMAL,
+            WLANQTUTILSESOCKWRAPPERPRIVATE_DISCONNECTIAP_DISCONNECT,
+            "WlanQtUtilsEsockWrapperPrivate::disconnectIap Disconnecting connection");
+        
+        iConnectionActive = EFalse;
+        iConnection.Close();            
+    } else {
+        OstTrace0(
+            TRACE_NORMAL,
+            WLANQTUTILSESOCKWRAPPERPRIVATE_DISCONNECTIAP_IGNORED,
+            "WlanQtUtilsEsockWrapperPrivate::disconnectIap Ignored since no active connection");
+    }
+    
+    OstTraceFunctionExit1(WLANQTUTILSESOCKWRAPPERPRIVATE_DISCONNECTIAP_EXIT, this);
+}
+
+/*!
+   From CActive: called when async request (RConnection::Start())
+   has been completed.
+ */
+
+void WlanQtUtilsEsockWrapperPrivate::RunL()
+{
+    OstTraceFunctionEntry1(WLANQTUTILSESOCKWRAPPERPRIVATE_RUNL_ENTRY, this);
+
+    OstTrace1(
+        TRACE_NORMAL,
+        WLANQTUTILSESOCKWRAPPERPRIVATE_RUNL,
+        "WlanQtUtilsEsockWrapperPrivate::RunL;iStatus=%d", iStatus.Int());
+    
+    bool success;
+    if (iStatus == KErrNone) {
+        success = true;
+    } else {
+        success = false;
+        iConnectionActive = EFalse;
+    }
+    
+    // Report to public wrapper
+    q_ptr->updateConnection(success, iStatus.Int());
+    
+    OstTraceFunctionExit1(WLANQTUTILSESOCKWRAPPERPRIVATE_RUNL_EXIT, this);
+}
+
+/*!
+   From CActive: called when active object is cancelled.
+ */
+
+void WlanQtUtilsEsockWrapperPrivate::DoCancel()
+{
+    OstTraceFunctionEntry1(WLANQTUTILSESOCKWRAPPERPRIVATE_DOCANCEL_ENTRY, this);
+    
+    // Disconnect, if needed.
+    DisconnectIap();
+    
+    OstTraceFunctionExit1(WLANQTUTILSESOCKWRAPPERPRIVATE_DOCANCEL_EXIT, this);
+}