diff -r 30a5f517c615 -r b3d8f88532b7 wlanutilities/wlanqtutilities/wrapper/src/wlanqtutilsconmonwrapper_s60.cpp --- a/wlanutilities/wlanqtutilities/wrapper/src/wlanqtutilsconmonwrapper_s60.cpp Fri Jun 11 16:27:29 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,633 +0,0 @@ -/* - * Copyright (c) 2009 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: - * This is a source file for following classes: - * ConnMonScanWlanAps, - * ConnMonConnInfo, - * ConnMonConnDisconnect - */ - -// INCLUDE FILES -#include -#include -#include - -#include "wlanqtutilscommon.h" -#include "wlanqtutilswlanap.h" -#include "wlanqtutilsactiveconn.h" -#include "wlanqtutilsconmonwrapper.h" -#include "wlanqtutilsconmonwrapper_s60_p.h" - -#ifdef WLANQTUTILS_NO_OST_TRACES_FLAG -#include -#else -#include "OstTraceDefinitions.h" -#endif -#ifdef OST_TRACE_COMPILER_IN_USE -#include "wlanqtutilsconmonwrapper_s60Traces.h" -#endif - - -// =========== PRIVATE CLASS MEMBER FUNCTIONS =============== -// -// --------------------------------------------------------- -// ConnMonScanWlanAps::ConnMonScanWlanAps() -// Constructor -// --------------------------------------------------------- -// -ConnMonScanWlanAps::ConnMonScanWlanAps(ConMonWrapper *wrapper) : - CActive(EPriorityStandard), q_ptr(wrapper), wlanPtr(0, 0) - { - OstTraceFunctionEntry1( CONNMONSCANWLANAPS_CONNMONSCANWLANAPS_ENTRY, this ); - - CActiveScheduler::Add(this); - // TBD: What if this leaves? - // Beware! iConnMon.ConnectL() can - // both leave AND return an error code.. - // User::LeaveIfError( iMonitor.ConnectL() ); - iMonitor.ConnectL(); - - OstTraceFunctionExit1( CONNMONSCANWLANAPS_CONNMONSCANWLANAPS_EXIT, this ); - } - -// --------------------------------------------------------- -// ConnMonScanWlanAps::ConnMonScanWlanAps() -// Destructor -// --------------------------------------------------------- -// -ConnMonScanWlanAps::~ConnMonScanWlanAps() - { - OstTraceFunctionEntry1( CONNMONSCANWLANAPS_CONNMONSCANWLANAPSDESTR_ENTRY, this ); - - Cancel(); - // Cancel notifications and close connection monitor session - iMonitor.Close(); - if (wlanBuf) - { - delete wlanBuf; - } - - OstTraceFunctionExit1( CONNMONSCANWLANAPS_CONNMONSCANWLANAPSDESTR_EXIT, this ); - } - -// --------------------------------------------------------- -// ConnMonScanWlanAps::DoCancel() -// -// --------------------------------------------------------- -// -void ConnMonScanWlanAps::DoCancel() - { - OstTraceFunctionEntry1( CONNMONSCANWLANAPS_DOCANCEL_ENTRY, this ); - // TODO: error handling - OstTraceFunctionExit1( CONNMONSCANWLANAPS_DOCANCEL_EXIT, this ); - } - -// --------------------------------------------------------- -// ConnMonScanWlanAps::RunL() -// Called when scan is ready. Emits scan results in a signal. -// --------------------------------------------------------- -// -void ConnMonScanWlanAps::RunL() - { - OstTraceFunctionEntry1( CONNMONSCANWLANAPS_RUNL_ENTRY, this ); - - if (iStatus == KErrNone) - { - RConnMonWlanNetworksPtrArray wlanPtrArray; - wlanBuf->UnpackToL(wlanPtrArray); - QList wlanScanResult; - - for (TInt i = 0; i < wlanPtrArray.Count(); i++) - { - WlanQtUtilsWlanAp *ap = new WlanQtUtilsWlanAp(); - - // Security mode values defined in enum TConnMonSecurityMode, rconnmon.h. - TUint connMonWlanSecMode; - WlanQtUtilsWlanSecMode wlanQtUtilsWlanSecMode; - - TBuf wlanName = - wlanPtrArray[i]->Name(); - - QString wlanNameInQt = QString::fromUtf16(wlanName.Ptr(), - wlanName.Length()); - - if (wlanNameInQt.length() == 1 && wlanNameInQt.at(0).unicode() - == 0) - { - // QString handles empty strings (single \0 char) strangely, - // so let's initialize them in a different way: - wlanNameInQt = ""; - } - - ap->setSsid(wlanNameInQt); - - // TODO: Won't compile to ARMV5 for some reason. Commented for awhile. - //TBuf8 wlanBssid = wlanPtrArray[i]->WlanBssid(); - //ap->setBssid(QString::fromUtf8(wlanBssid.Ptr(), wlanBssid.Length())); - ap->setBssid("addMAC"); - - TUint wlanConnectionMode = wlanPtrArray[i]->ConnectionMode(); - ap->setConnectionMode(wlanConnectionMode); - - TUint wlanSignalStrength = wlanPtrArray[i]->SignalStrength(); - ap->setSignalStrength(wlanSignalStrength); - - connMonWlanSecMode = wlanPtrArray[i]->SecurityMode(); - wlanQtUtilsWlanSecMode = conMon2WlanQtUtilsSecModeMap(connMonWlanSecMode); - ap->setSecurityMode(wlanQtUtilsWlanSecMode); - - wlanScanResult.append(ap); - delete wlanPtrArray[i]; - } - q_ptr->emitAvailableWlans(wlanScanResult); - wlanPtrArray.Close(); - delete wlanBuf; - wlanBuf = NULL; - // TODO: Is this enough for clearing QList containing ConnUtilsWlanAps? - wlanScanResult.clear(); - } - else - { - // TODO: add error handling - } - - OstTraceFunctionExit1( CONNMONSCANWLANAPS_RUNL_EXIT, this ); - } - -// --------------------------------------------------------- -// ConnMonScanWlanAps::scanAvailableWlanAPs() -// Gets APs from Connection Monitor -// --------------------------------------------------------- -// -int ConnMonScanWlanAps::scanAvailableWlanAPs() - { - OstTraceFunctionEntry1( CONNMONSCANWLANAPS_SCANAVAILABLEWLANAPS_ENTRY, this ); - - if (!IsActive()) - { - // TODO: What size for wlanBuf? How to know exact size? - // 2560 ~ 35 wlan APs - wlanBuf = new (ELeave) CConnMonWlanNetworksPtrArrayPckg(2560); - wlanPtr.Set(wlanBuf->Buf()->Des()); - - iMonitor.GetPckgAttribute(EBearerIdWLAN, 0, KWlanNetworks, wlanPtr, - iStatus); - SetActive(); - } - - OstTraceFunctionExit1( CONNMONSCANWLANAPS_SCANAVAILABLEWLANAPS_EXIT, this ); - return KErrNone; - } - -// --------------------------------------------------------- -// ConMonScanWlanAps::connMon2WlanQtUtilsSecModeMap() -// Map security mode from Connection Monitor into WlanQtUtilsWlanSecMode. -// --------------------------------------------------------- -// -WlanQtUtilsWlanSecMode ConnMonScanWlanAps::conMon2WlanQtUtilsSecModeMap(TUint connMonSecMode) - { - WlanQtUtilsWlanSecMode ret = WlanQtUtilsWlanSecModeNone; - switch (connMonSecMode) - { - case EConnMonSecurityWep: - ret = WlanQtUtilsWlanSecModeWep; - break; - case EConnMonSecurity802d1x: - ret = WlanQtUtilsWlanSecMode802_1x; - break; - case EConnMonSecurityWpa: - ret = WlanQtUtilsWlanSecModeWpa; - break; - case EConnMonSecurityWpaPsk: - ret = WlanQtUtilsWlanSecModeWpa2; - break; - default: - // TODO: should default be None/unknown or should there be assert against EConnMonSecurityOpen. - ret = WlanQtUtilsWlanSecModeOpen; - break; - } - - return ret; - } - - -// --------------------------------------------------------- -// ConnMonConnInfo::ConnMonConnInfo() -// Constructor -// --------------------------------------------------------- -// -ConnMonConnInfo::ConnMonConnInfo(ConMonWrapper *wrapper) : - q_ptr(wrapper) - { - OstTraceFunctionEntry1( CONNMONCONNINFO_CONNMONCONNINFO_ENTRY, this ); - - iMonitor.ConnectL(); - StartMonitoringL(); - - OstTraceFunctionExit1( CONNMONCONNINFO_CONNMONCONNINFO_EXIT, this ); - } - -// --------------------------------------------------------- -// ConnMonConnInfo::~ConnMonConnInfo() -// Destructor -// --------------------------------------------------------- -// -ConnMonConnInfo::~ConnMonConnInfo() - { - OstTraceFunctionEntry1( CONNMONCONNINFO_CONNMONCONNINFODESTR_ENTRY, this ); - - StopMonitoring(); - iMonitor.Close(); - - OstTraceFunctionExit1( CONNMONCONNINFO_CONNMONCONNINFODESTR_EXIT, this ); - } - -// --------------------------------------------------------- -// ConnMonConnInfo::StartMonitoringL() -// Starts monitoring of Connection Monitor Server events -// --------------------------------------------------------- -// -void ConnMonConnInfo::StartMonitoringL() - { - OstTraceFunctionEntry1( CONNMONCONNINFO_STARTMONITORINGL_ENTRY, this ); - - iMonitoring = ETrue; - iMonitor.NotifyEventL(*this); - - OstTraceFunctionExit1( CONNMONCONNINFO_STARTMONITORINGL_EXIT, this ); - } - -// --------------------------------------------------------- -// ConnMonConnInfo::StopMonitoring() -// Stops monitoring of Connection Monitor Server events -// --------------------------------------------------------- -// -void ConnMonConnInfo::StopMonitoring() - { - OstTraceFunctionEntry1( CONNMONCONNINFO_STOPMONITORING_ENTRY, this ); - - iMonitoring = EFalse; - iMonitor.CancelNotifications(); - - OstTraceFunctionExit1( CONNMONCONNINFO_STOPMONITORING_EXIT, this ); - } - -// --------------------------------------------------------- -// ConnMonConnInfo::EventL() -// Handler of Connection Monitor Server events -// --------------------------------------------------------- -// -void ConnMonConnInfo::EventL(const CConnMonEventBase& aConnMonEvent) - { - OstTraceFunctionEntry1( CONNMONCONNINFO_EVENTL_ENTRY, this ); - - TUint connectionId = aConnMonEvent.ConnectionId(); - OstTraceExt2( - TRACE_NORMAL, - CONNMONCONNINFO_EVENTL_EVENTTYPE, - "ConnMonConnInfo::EventL;connectionId=%u;aConnMonEvent.EventType()=%d", connectionId, aConnMonEvent.EventType() ); - - // Note: Conversions from CConnMonEventBase to sub classes cannot be made to use dynamic_cast - // because constructors of CConnMonEventBase and its sub classes are not public in - // connmon library's interface. - - switch (aConnMonEvent.EventType()) - { - case EConnMonCreateConnection: - q_ptr->emitConnCreatedEvent( connectionId ); - break; - case EConnMonDeleteConnection: - - // TODO: take the following into use. - // const CConnMonDeleteConnection* eventDelete; - // eventDelete = static_cast< const CConnMonDeleteConnection*>( &aConnMonEvent ); - //TUint totalDlVolume = eventDelete->DownlinkData(); - //TUint totalUlVolume = eventDelete->UplinkData(); - //TBool authDelete = eventDelete->AuthoritativeDelete(); - - q_ptr->emitConnDeletedEvent( connectionId ); - break; - case EConnMonConnectionStatusChange: - const CConnMonConnectionStatusChange* eventConnectionStatusChange; - eventConnectionStatusChange = - static_cast< const CConnMonConnectionStatusChange* >( &aConnMonEvent ); - WlanQtUtilsConnectionStatus connectionStatus; - connectionStatus = connMon2WlanQtUtilsConnectionStatusMap( - eventConnectionStatusChange->ConnectionStatus() ); - - OstTraceExt2( - TRACE_NORMAL, - CONNMONCONNINFO_EVENTL_CONNSTATUS, - "ConnMonConnInfo::EventL;connectionId=%u;eventConnectionStatusChange->ConnectionStatus()=%d", - connectionId, - eventConnectionStatusChange->ConnectionStatus() ); - - if (connectionStatus != WlanQtUtilsConnectionStatusNone) { - q_ptr->emitConnStatusEvent( connectionId, connectionStatus ); - } - break; - default: - break; - } - - OstTraceFunctionExit1( CONNMONCONNINFO_EVENTL_EXIT, this ); - } - -// --------------------------------------------------------- -// ConnMonConnInfo::activeConnection() -// --------------------------------------------------------- -// -WlanQtUtilsActiveConn *ConnMonConnInfo::activeConnection() - { - OstTraceFunctionEntry1( CONNMONCONNINFO_ACTIVECONNECTION_ENTRY, this ); - - // Get number of active connections - TRequestStatus status; - - TUint numConnections = 0; - iMonitor.GetConnectionCount( numConnections, status ); - User::WaitForRequest( status ); - if ( status.Int() == KErrNone ) - { - // Get connection info of this connection - for ( TUint i = 1; i <= numConnections; i++ ) - { - TUint numSubConnections = 0; - TUint connectionId = 0; - TInt ret = iMonitor.GetConnectionInfo( i, connectionId, numSubConnections ); - Q_ASSERT( ret == KErrNone ); // TODO: error handling - - WlanQtUtilsActiveConn* activeConn = connectionInfo( connectionId ); - if ( activeConn != NULL ) - { - // connectionInfo() only returns WLAN connections, and there may be only - // one active WLAN connection, so this is the one we want to return - OstTraceFunctionExit1( CONNMONCONNINFO_ACTIVECONNECTION_EXIT, this ); - return activeConn; - } - } - } - - OstTraceFunctionExit1( DUP1_CONNMONCONNINFO_ACTIVECONNECTION_EXIT, this ); - return NULL; - } - -// --------------------------------------------------------- -// ConnMonConnInfo::connectionInfo() -// --------------------------------------------------------- -// -WlanQtUtilsActiveConn *ConnMonConnInfo::connectionInfo( uint connectionId ) - { - OstTraceFunctionEntry1( CONNMONCONNINFO_CONNECTIONINFO_ENTRY, this ); - - TRequestStatus status; - WlanQtUtilsActiveConn *activeConn = NULL; - - // Get the connection bearer. - TInt bearer = 0; - iMonitor.GetIntAttribute( - connectionId, - 0, - KBearer, - bearer, - status ); - User::WaitForRequest( status ); - if ( status.Int() == KErrNone ) - { - // We are only interested in WLAN connections. - WlanQtUtilsBearerType bearerType = connMon2WlanQtUtilsBearerTypeMap( bearer ); - if ( bearerType == WlanQtUtilsBearerTypeWlan ) - { - activeConn = new WlanQtUtilsActiveConn(); - activeConn->setConnectionId( connectionId ); - activeConn->setBearerType( bearerType ); - activeConnInfoUpdate( activeConn ); - } - } - - OstTraceFunctionExit1( CONNMONCONNINFO_CONNECTIONINFO_EXIT, this ); - return activeConn; - } - -// --------------------------------------------------------- -// ConnMonConnInfo::activeConnInfoUpdate() -// Requests active connection info from Connection Monitor Server -// --------------------------------------------------------- -// -// TODO: divide this function into smaller pieces depending on the need. -// TODO: optimize so that all the information is not always requested from connmon. -// Only information that is missing is requested. -void ConnMonConnInfo::activeConnInfoUpdate( WlanQtUtilsActiveConn *activeConn ) - { - OstTraceFunctionEntry1( CONNMONCONNINFO_ACTIVECONNINFOUPDATE_ENTRY, this ); - - Q_ASSERT( activeConn != NULL ); - Q_ASSERT( activeConn->bearerType() != WlanQtUtilsBearerTypeNone ); - - TUint connectionId = activeConn->connectionId(); - TRequestStatus status; - - // Get connection IAP ID. - TUint iapId = 0; - iMonitor.GetUintAttribute( - connectionId, - 0, - KIAPId, - iapId, - status ); - User::WaitForRequest( status ); - if ( status.Int() == KErrNone ) - { - activeConn->setIapId( iapId ); - } - - // Get connection status. - TInt connectionStatus = 0; - iMonitor.GetIntAttribute( - connectionId, - 0, - KConnectionStatus, - connectionStatus, - status ); - User::WaitForRequest( status ); - if ( status.Int() == KErrNone ) { - activeConn->setConnectionStatus( connMon2WlanQtUtilsConnectionStatusMap( connectionStatus ) ); - } - - OstTraceFunctionExit1( CONNMONCONNINFO_ACTIVECONNINFOUPDATE_EXIT, this ); - } - -// --------------------------------------------------------- -// ConnMonConnInfo::connMon2WlanQtUtilsConnectionStatusMap() -// Maps connection status of Connection Monitor Server to connection -// status of Wlan Qt Utilities. -// --------------------------------------------------------- -// -WlanQtUtilsConnectionStatus ConnMonConnInfo::connMon2WlanQtUtilsConnectionStatusMap( TInt aConnectionStatus ) - { - // TODO: This mapping is not specific to current status which is unknown to wrapper. - // TODO: This is only current implementation and will need serious modifications and - // verification from connmon guys. - WlanQtUtilsConnectionStatus connUtilsConnectionStatus = WlanQtUtilsConnectionStatusNone; - switch (aConnectionStatus) - { - // KConnectionOpen is not final status for WLAN, because DHCP is run after that - case KConnectionOpen: - case KStartingConnection: - connUtilsConnectionStatus = WlanQtUtilsConnectionStatusConnecting; - break; - case KLinkLayerOpen: - connUtilsConnectionStatus = WlanQtUtilsConnectionStatusConnected; - break; - case KConnectionClosed: - case KLinkLayerClosed: - connUtilsConnectionStatus = WlanQtUtilsConnectionStatusDisconnected; - break; - default: - // Ignore all other values - connUtilsConnectionStatus = WlanQtUtilsConnectionStatusNone; - break; - } - - return connUtilsConnectionStatus; - } - -// --------------------------------------------------------- -// ConnMonConnInfo::connMon2WlanQtUtilsBearerTypeMap() -// Maps bearer type of Connection Monitor Server to bearer -// type of Wlan Qt Utilities. -// --------------------------------------------------------- -// -WlanQtUtilsBearerType ConnMonConnInfo::connMon2WlanQtUtilsBearerTypeMap( TInt aBearerType ) - { - WlanQtUtilsBearerType connUtilsBearerType = WlanQtUtilsBearerTypeNone; - switch ( aBearerType ) { - case EBearerWCDMA: - case EBearerGPRS: - case EBearerEdgeGPRS: - connUtilsBearerType = WlanQtUtilsBearerTypeCellular; - break; - case EBearerWLAN: - connUtilsBearerType = WlanQtUtilsBearerTypeWlan; - break; - default: - break; - } - - return connUtilsBearerType; - } - -// --------------------------------------------------------- -// ConnMonConnDisconnect::ConnMonConnDisconnect() -// Constructor -// --------------------------------------------------------- -// -ConnMonConnDisconnect::ConnMonConnDisconnect(ConMonWrapper *wrapper) : - CActive(EPriorityStandard), q_ptr(wrapper) - { - OstTraceFunctionEntry1( CONNMONCONNDISCONNECT_CONNMONCONNDISCONNECT_ENTRY, this ); - - CActiveScheduler::Add(this); - iMonitor.ConnectL(); - - OstTraceFunctionExit1( CONNMONCONNDISCONNECT_CONNMONCONNDISCONNECT_EXIT, this ); - } - -// --------------------------------------------------------- -// ConnMonConnDisconnect::ConnMonConnDisconnect() -// Destructor -// --------------------------------------------------------- -// -ConnMonConnDisconnect::~ConnMonConnDisconnect() - { - OstTraceFunctionEntry1( CONNMONCONNDISCONNECT_CONNMONCONNDISCONNECTDESTR_ENTRY, this ); - - // Cancel notifications and close connection monitor session - //iMonitor.CancelNotifications(); - iMonitor.Close(); - - OstTraceFunctionExit1( CONNMONCONNDISCONNECT_CONNMONCONNDISCONNECTDESTR_EXIT, this ); - } - -// --------------------------------------------------------- -// ConnMonConnDisconnect::DoCancel() -// -// --------------------------------------------------------- -// -void ConnMonConnDisconnect::DoCancel() - { - OstTraceFunctionEntry1( CONNMONCONNDISCONNECT_DOCANCEL_ENTRY, this ); - // TODO: error handling - OstTraceFunctionExit1( CONNMONCONNDISCONNECT_DOCANCEL_EXIT, this ); - } - -// --------------------------------------------------------- -// ConnMonConnDisconnect::RunL() -// -// --------------------------------------------------------- -// -void ConnMonConnDisconnect::RunL() - { - OstTraceFunctionEntry1( CONNMONCONNDISCONNECT_RUNL_ENTRY, this ); - // TODO: Is anything needed? - OstTraceFunctionExit1( CONNMONCONNDISCONNECT_RUNL_EXIT, this ); - } - -// --------------------------------------------------------- -// ConnMonConnDisconnect::disconnectConnection(int iapId) -// Stop active connection. -// --------------------------------------------------------- -// -void ConnMonConnDisconnect::disconnectConnection(int iapId) - { - OstTraceFunctionEntry1( CONNMONCONNDISCONNECT_DISCONNECTCONNECTION_ENTRY, this ); - OstTrace1( - TRACE_NORMAL, - CONNMONCONNDISCONNECT_DISCONNECTCONNECTION, - "ConnMonConnDisconnect::disconnectConnection;iapId=%d", iapId ); - - // TODO: Error handling - TUint count; - TRequestStatus status; - iMonitor.GetConnectionCount(count, status); - User::WaitForRequest(status); - - for (TInt i = 1; i <= count; i++) - { - TUint numSubConnections; - TUint iap = 0; - TUint connectionId = 0; - TInt ret = iMonitor.GetConnectionInfo(i, connectionId, - numSubConnections); - if (ret != KErrNone) - { - // error - } - iMonitor.GetUintAttribute(connectionId, 0, KIAPId, iap, status); - User::WaitForRequest(status); - if (status.Int() != KErrNone) - { - // error - } - if (iap == iapId) - { - TInt KErr = iMonitor.SetBoolAttribute(connectionId, 0, - KConnectionStop, ETrue); - } - } - - OstTraceFunctionExit1( CONNMONCONNDISCONNECT_DISCONNECTCONNECTION_EXIT, this ); - } - -//end of file