diff -r ff3b37722600 -r 10810c91db26 wlanutilities/wlanqtutilities/ut/stubs/wlanqtutilsconnmonstub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlanutilities/wlanqtutilities/ut/stubs/wlanqtutilsconnmonstub.cpp Fri Apr 16 16:07:56 2010 +0300 @@ -0,0 +1,637 @@ +/* +* 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 connmon library stub functions +*/ + +#include +#include +#include +#include +#include "wlanqtutilswlanap.h" + +#ifdef __WINS__ + +// TODO: This function is copied from ConnMonWLANNetworksArrayPckg_v2.cpp because this +// function, although being in rconnmon.h, is not in the interface because IMPORT_C/EXPORT_C +// declarations are not used for this particular constructor. The only change that was made to +// this version was to remove traces and some empty lines. This function is needed when +// creating output in RConnectionMonitor::GetPckgAttribute() for WLAN scan results. +// This is needed for both UT and emulator compilation. +CConnMonWlanNetworksPtrArrayPckg::CConnMonWlanNetworksPtrArrayPckg( + const RPointerArray& aRef, + TUint aBufLen ) + { + RPointerArray items; + TUint len( 0 ); + + for ( TUint i( 0 ); i < aRef.Count(); ++i ) + { + const HBufC* item( aRef[i]->ToBuf() ); + if ( item ) + { + // Is there room in buffer + TUint countFields( 3 ); // aRef.Count(); items->Count(); item->Length() + if ( (countFields + len + item->Length()) > aBufLen ) + { + delete item; + item = NULL; + break; + } + items.Append( item ); + ++( len += item->Length() ); // ++ is for item's size + } + else + { + ; // There was a trace. + } + } + // Check that given buflen (aBufLen) is not smaller than one + // item (TConnMonWLANNetwork) + aRef count + items count + // + item length + if ( items.Count() == 0 && aRef.Count() > 0 ) + { + aBufLen = 2; // aRef.Count(), items.Count() + } + + iBuf = HBufC::New( aBufLen ); // Set size exactly to a buffer length + if ( !iBuf ) + { + items.ResetAndDestroy(); + items.Close(); + return; + } + iBuf->Des().Append( aRef.Count() ); // Total amount of data + iBuf->Des().Append( items.Count() ); // Amount of transferring data + for ( TUint i(0); iDes().Append( items[i]->Length() ); + iBuf->Des().Append( *items[i] ); + } + items.ResetAndDestroy(); + items.Close(); + } + +// ----------------------------------------------------------------------------- +// CConnMonEventBase::CConnMonEventBase +// ----------------------------------------------------------------------------- +// +CConnMonEventBase::CConnMonEventBase( const TInt aEventType, const TUint aConnectionId ) + { + iEventType = aEventType; + iConnectionId = aConnectionId; + } + +// Destructor +CConnMonEventBase::~CConnMonEventBase() + { + } + +// ----------------------------------------------------------------------------- +// CConnMonEventBase::EventType +// ----------------------------------------------------------------------------- +// +TInt CConnMonEventBase::EventType() const + { + return iEventType; + } + +// ----------------------------------------------------------------------------- +// CConnMonConnectionStatusChange::CConnMonConnectionStatusChange +// ----------------------------------------------------------------------------- +// +CConnMonConnectionStatusChange::CConnMonConnectionStatusChange( + const TUint aConnectionId, + const TUint aSubConnectionId, + const TInt aConnectionStatus ) : + CConnMonEventBase(EConnMonConnectionStatusChange, aConnectionId) + { + iSubConnectionId = aSubConnectionId; + iConnectionStatus = aConnectionStatus; + } + +// Destructor +CConnMonConnectionStatusChange::~CConnMonConnectionStatusChange() + { + } + +#ifdef WLANQTUTILS_T_WLANQTUTILS_UT_FLAG + +// ---------------------------------------------- +// Stub functions for connmon library, used in UT +// ---------------------------------------------- + +#include "wlanqtutilstestcontext.h" + +extern WlanQtUtilsTestContext testContext; + +EXPORT_C void RConnectionMonitor::GetConnectionCount( + TUint& aConnectionCount, + TRequestStatus& aStatus) +{ + aConnectionCount = testContext.connMon_.activeConnections_.activeConnList_.count(); + User::RequestComplete(&aStatus, KErrNone); +} + +EXPORT_C TInt RConnectionMonitor::GetConnectionInfo( + const TUint aIndex, + TUint& aConnectionId, + TUint& aSubConnectionCount ) const +{ + aConnectionId = testContext.connMon_.activeConnections_.activeConnList_[aIndex - 1]->connectionId(); + aSubConnectionCount = 0; + return KErrNone; // TODO: put return value into context. +} + +EXPORT_C void RConnectionMonitor::GetIntAttribute( + const TUint aConnectionId, + const TUint /* aSubConnectionId */, + const TUint aAttribute, + TInt& aValue, + TRequestStatus& aStatus ) +{ + WlanQtUtilsCtxActiveConn *activeConn = testContext.connMon_.activeConnections_.findActiveConn(aConnectionId); + if (aAttribute == KBearer) { + aValue = activeConn->connMonBearerType_; + } else if (aAttribute == KConnectionStatus) { + aValue = activeConn->connMonConnectionStatus_; + } else { + Q_ASSERT(false); + } + User::RequestComplete(&aStatus, KErrNone); // TODO: Take return value from the context. +} + +EXPORT_C void RConnectionMonitor::GetUintAttribute( + const TUint aConnectionId, + const TUint /* aSubConnectionId */, + const TUint aAttribute, + TUint& aValue, + TRequestStatus& aStatus ) +{ + WlanQtUtilsCtxActiveConn *activeConn = testContext.connMon_.activeConnections_.findActiveConn(aConnectionId); + if (aAttribute == KIAPId) { + aValue = activeConn->iapId(); + } else { + Q_ASSERT(false); + } + + User::RequestComplete(&aStatus, KErrNone); // TODO: Take return value from the context. +} + +EXPORT_C void RConnectionMonitor::GetPckgAttribute( + const TUint aConnectionId, + const TUint aSubConnectionId, + const TUint aAttribute, + TDes8& aValue, + TRequestStatus& aStatus ) const +{ + // This is copy-paste from real implementation and we'll use that for other requests. + TIpcArgs args(aConnectionId, aSubConnectionId, aAttribute, &aValue); + SendReceive(EReqGetPckgAttribute, args, aStatus); +} + +// --------------------------------------------------------- +// connUtils2ConnMonSecModeMap() +// Local function to map WlanQtUtilsWlanSecMode into Connection +// monitor's security mode. Currently for UT use only. +// --------------------------------------------------------- +// +static TUint connUtils2ConnMonSecModeMap(WlanQtUtilsWlanSecMode connUtilsWlanSecMode) +{ + TUint ret; + switch (connUtilsWlanSecMode) { + case WlanQtUtilsWlanSecModeWep: + ret = EConnMonSecurityWep; + break; + case WlanQtUtilsWlanSecMode802_1x: + ret = EConnMonSecurity802d1x; + break; + case WlanQtUtilsWlanSecModeWpa: + ret = EConnMonSecurityWpa; + break; + case WlanQtUtilsWlanSecModeWpa2: + ret = EConnMonSecurityWpaPsk; + break; + default: + ret = EConnMonSecurityOpen; + break; + } + return ret; +} + + + +EXPORT_C void RConnectionMonitor::GetPckgAttribute( + const TUint /* aConnectionId */, + const TUint /* aSubConnectionId */, + const TUint /* aAttribute */, + TDes16& aValue, + TRequestStatus& aStatus ) const + { + // TODO: verify input parameters, i.e., first three params... + + RConnMonWlanNetworksPtrArray wlanPtrArray; + RBuf vendorData; + + for (int i = 0; i < testContext.connMon_.wlanScanResult_.wlanScanResultList_.count(); i++) { + WlanQtUtilsWlanAp* ap = testContext.connMon_.wlanScanResult_.wlanScanResultList_[i]; + TBufC name(ap->ssid().utf16()); + + TBufC bssid16(QString("addMAC").utf16()); + TBuf8 bssid; + bssid.Copy(bssid16); + + CConnMonWlanNetwork* wlanAp = CConnMonWlanNetwork::NewL( + name, + ap->connectionMode(), + ap->signalStrength(), + connUtils2ConnMonSecModeMap(ap->securityMode()), + bssid, + vendorData ); + wlanPtrArray.Append(wlanAp); + } + + CConnMonWlanNetworksPtrArrayPckg wlanBuf(wlanPtrArray, 2560); + aValue.Copy(wlanBuf.Buf()->Des()); + + User::RequestComplete(&aStatus, KErrNone); // TODO: enable return value modification. + } + +#else // WLANQTUTILS_T_WLANQTUTILS_UT_FLAG + +// ---------------------------------------------------- +// Stub functions for connmon library, used in emulator +// ---------------------------------------------------- + +#if 0 +// In emulator, there are always two active connections. +// The following functions return different properties of these active connection +// so that it's easy to test in emulator. + +EXPORT_C void RConnectionMonitor::GetConnectionCount( + TUint& aConnectionCount, + TRequestStatus& aStatus) +{ + aConnectionCount = 2; + User::RequestComplete(&aStatus, KErrNone); +} + +EXPORT_C TInt RConnectionMonitor::GetConnectionInfo( + const TUint aIndex, + TUint& aConnectionId, + TUint& aSubConnectionCount ) const +{ + if (aIndex == 1) { + aConnectionId = 10; + } else if (aIndex == 2) { + aConnectionId = 20; + } else { + Q_ASSERT(false); + } + + aSubConnectionCount = 0; + return KErrNone; +} + +EXPORT_C void RConnectionMonitor::GetIntAttribute( + const TUint aConnectionId, + const TUint /* aSubConnectionId */, + const TUint aAttribute, + TInt& aValue, + TRequestStatus& aStatus ) +{ + if (aAttribute == KBearer) { + if (aConnectionId == 10) { + aValue = EBearerGPRS; + } else if (aConnectionId == 20) { + aValue = EBearerWLAN; + } else { + Q_ASSERT(false); + } + } else if (aAttribute == KConnectionStatus) { + if (aConnectionId == 10) { + aValue = KConnectionOpen; + } else if (aConnectionId == 20) { + aValue = KStartingConnection; + } else { + Q_ASSERT(false); + } + } else if (aAttribute == KSignalStrength) { + if (aConnectionId == 10) { + Q_ASSERT(false); + } else if (aConnectionId == 20) { + aValue = 78; + } else { + Q_ASSERT(false); + } + } else if (aAttribute == KNetworkMode) { + if (aConnectionId == 10) { + Q_ASSERT(false); + } else if (aConnectionId == 20) { + aValue = EConnMonInfraStructure; + } else { + Q_ASSERT(false); + } + } else if (aAttribute == KSecurityMode) { + if (aConnectionId == 10) { + Q_ASSERT(false); + } else if (aConnectionId == 20) { + aValue = EConnMonSecurityWpaPsk; + } else { + Q_ASSERT(false); + } + } else { + Q_ASSERT(false); + } + User::RequestComplete(&aStatus, KErrNone); +} + +EXPORT_C void RConnectionMonitor::GetUintAttribute( + const TUint aConnectionId, + const TUint /* aSubConnectionId */, + const TUint aAttribute, + TUint& aValue, + TRequestStatus& aStatus ) +{ + if (aAttribute == KIAPId) { + if (aConnectionId == 10) { + aValue = 1; + } else if (aConnectionId == 20) { + aValue = 10; + } else { + Q_ASSERT(false); + } + } else if (aAttribute == KDownlinkData) { + if (aConnectionId == 10) { + aValue = 123; + } else if (aConnectionId == 20) { + aValue = 12345; + } else { + Q_ASSERT(false); + } + } else if (aAttribute == KUplinkData) { + if (aConnectionId == 10) { + aValue = 987654321; + } else if (aConnectionId == 20) { + aValue = 1234567890; + } else { + Q_ASSERT(false); + } + } else if (aAttribute == KTransmitPower) { + if (aConnectionId == 10) { + Q_ASSERT(false); + } else if (aConnectionId == 20) { + aValue = 50; + } else { + Q_ASSERT(false); + } + } else { + Q_ASSERT(false); + } + + User::RequestComplete(&aStatus, KErrNone); +} + +EXPORT_C void RConnectionMonitor::GetBoolAttribute( + const TUint aConnectionId, + const TUint /* aSubConnectionId */, + const TUint aAttribute, + TBool& aValue, + TRequestStatus& aStatus ) +{ + if (aAttribute == KConnectionActive) { + if (aConnectionId == 10) { + aValue = EFalse; + } else if (aConnectionId == 20) { + aValue = ETrue; + } else { + Q_ASSERT(false); + } + } else { + Q_ASSERT(false); + } + + User::RequestComplete(&aStatus, KErrNone); +} + +EXPORT_C void RConnectionMonitor::GetStringAttribute( + const TUint aConnectionId, + const TUint /* aSubConnectionId */, + const TUint aAttribute, + TDes& aValue, + TRequestStatus& aStatus ) const +{ + if (aAttribute == KIAPName) { + if (aConnectionId == 10) { + _LIT(iapNameLit, "PACKET DATA 1"); + TBufC iapName(iapNameLit); + aValue = iapName.Des(); + } else if (aConnectionId == 20) { + _LIT(iapNameLit, "WLAN IAP 3"); + TBufC iapName(iapNameLit); + aValue = iapName.Des(); + } else { + Q_ASSERT(false); + } + } else if (aAttribute == KNetworkName) { + if (aConnectionId == 10) { + Q_ASSERT(false); + } else if (aConnectionId == 20) { + _LIT(ssidLit, "WLAN SSID 3"); + TBufC ssid(ssidLit); + aValue = ssid.Des(); + } else { + Q_ASSERT(false); + } + } else if (aAttribute == KAccessPointName) { + if (aConnectionId == 10) { + _LIT(iapNameLit, "PACKET DATA 1"); + TBufC iapName(iapNameLit); + aValue = iapName.Des(); + } else if (aConnectionId == 20) { + Q_ASSERT(false); + } else { + Q_ASSERT(false); + } + } else { + Q_ASSERT(false); + } + + User::RequestComplete(&aStatus, KErrNone); +} + +EXPORT_C void RConnectionMonitor::GetPckgAttribute( + const TUint aConnectionId, + const TUint aSubConnectionId, + const TUint aAttribute, + TDes8& aValue, + TRequestStatus& aStatus ) const +{ + if (aAttribute == KStartTime) { + if (aConnectionId == 10) { + TDateTime dateTime(2009, EMarch, 31-1, 15, 15, 15, 0); + TTime time(dateTime); + TConnMonTimeBuf timePckg(time); + aValue.Copy(timePckg); + } else if (aConnectionId == 20) { + TTime time; + time.UniversalTime(); + TConnMonTimeBuf timePckg(time); + aValue.Copy(timePckg); + } else { + Q_ASSERT(false); + } + User::RequestComplete(&aStatus, KErrNone); + } else if (aAttribute == KClientInfo) { + TConnMonClientEnum applications; + if (aConnectionId == 10) { + applications.iCount = 1; + applications.iUid[0].iUid = 0x10008D39; // Web + applications.iUid[1].iUid = 0; + applications.iUid[2].iUid = 0; + applications.iUid[3].iUid = 0; + applications.iUid[4].iUid = 0; + applications.iUid[5].iUid = 0; + applications.iUid[6].iUid = 0; + applications.iUid[7].iUid = 0; + applications.iUid[8].iUid = 0; + applications.iUid[9].iUid = 0; + } else if (aConnectionId == 20) { + applications.iCount = 7; + applications.iUid[0].iUid = 0x101fd9c5; // KBannedServerUID + applications.iUid[1].iUid = 0x1020728E; // KFeedsServerUid + applications.iUid[2].iUid = 0x10008D60; // KDownloadMgrServerUid + applications.iUid[3].iUid = 0x1000484b; // KMessagingServerUid + applications.iUid[4].iUid = 0x102033E6; // KJavaVMUid + applications.iUid[5].iUid = 0x102073CA; // KSUPLServerUid + applications.iUid[6].iUid = 0x200212F3; // Connect Screen + applications.iUid[7].iUid = 0; + applications.iUid[8].iUid = 0; + applications.iUid[9].iUid = 0; + } else { + Q_ASSERT(false); + } + TPckgBuf< TConnMonClientEnum > applicationsPckg( applications ); + aValue.Copy(applicationsPckg); + User::RequestComplete(&aStatus, KErrNone); + } else { + // This is copy-paste from real implementation and we'll use that for other requests. + TIpcArgs args( aConnectionId, aSubConnectionId, aAttribute, &aValue ); + SendReceive( EReqGetPckgAttribute, args, aStatus ); + } +} +#endif + +// This function returns WLAN scan results. +// Six results in every second scan and the others have two. +EXPORT_C void RConnectionMonitor::GetPckgAttribute( + const TUint /* aConnectionId */, + const TUint /* aSubConnectionId */, + const TUint aAttribute, + TDes16& aValue, + TRequestStatus& aStatus ) const { + + if (aAttribute == KWlanNetworks) { + RConnMonWlanNetworksPtrArray wlanPtrArray; + RBuf vendorData; + + TBufC bssid16(QString("addMAC").utf16()); + TBuf8 bssid; + bssid.Copy(bssid16); + + _LIT(wlanAp1Name, "Test AP 1"); + TBufC name1(wlanAp1Name); + CConnMonWlanNetwork* wlanAp1 = CConnMonWlanNetwork::NewL( + name1, + EConnMonInfraStructure, + 20, + EConnMonSecurityOpen, + bssid, + vendorData ); + wlanPtrArray.Append(wlanAp1); + + _LIT(wlanAp2Name, "Test AP 2"); + TBufC name2(wlanAp2Name); + CConnMonWlanNetwork* wlanAp2 = CConnMonWlanNetwork::NewL( + name2, + EConnMonAdHoc, + 20, + EConnMonSecurityOpen, + bssid, + vendorData ); + wlanPtrArray.Append(wlanAp2); + + static bool refresh = true; + + if (refresh) { + _LIT(wlanAp3Name, "Test AP 3"); + TBufC name3(wlanAp3Name); + CConnMonWlanNetwork* wlanAp3 = CConnMonWlanNetwork::NewL( + name3, + EConnMonInfraStructure, + 20, + EConnMonSecurityWep, + bssid, + vendorData ); + wlanPtrArray.Append(wlanAp3); + + _LIT(wlanAp4Name, "Test AP 4"); + TBufC name4(wlanAp4Name); + CConnMonWlanNetwork* wlanAp4 = CConnMonWlanNetwork::NewL( + name4, + EConnMonInfraStructure, + 20, + EConnMonSecurityOpen, + bssid, + vendorData ); + wlanPtrArray.Append(wlanAp4); + + _LIT(wlanAp5Name, "Test AP 5"); + TBufC name5(wlanAp5Name); + CConnMonWlanNetwork* wlanAp5 = CConnMonWlanNetwork::NewL( + name5, + EConnMonInfraStructure, + 20, + EConnMonSecurityWpa, + bssid, + vendorData ); + wlanPtrArray.Append(wlanAp5); + + _LIT(wlanAp6Name, "Test AP 6"); + TBufC name6(wlanAp6Name); + CConnMonWlanNetwork* wlanAp6 = CConnMonWlanNetwork::NewL( + name6, + EConnMonInfraStructure, + 20, + EConnMonSecurityWpaPsk, + bssid, + vendorData ); + wlanPtrArray.Append(wlanAp6); + + refresh = false; + } else { + refresh = true; + } + + CConnMonWlanNetworksPtrArrayPckg wlanBuf(wlanPtrArray, 2560); // TODO: buffer size to more dynamic or use constant + aValue.Copy(wlanBuf.Buf()->Des()); + } else { + Q_ASSERT(false); + } + + User::RequestComplete(&aStatus, KErrNone); +} + +#endif // WLANQTUTILS_T_WLANQTUTILS_UT_FLAG +#endif // __WINS__