diff -r b852595f5cbe -r 63be7eb3fc78 wlanutilities/wlanqtutilities/wrapper/src/wlanqtutilsesockwrapper_symbian.cpp --- /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 +#include +#include +#include + +// 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); +}