connectionmonitoring/connmon/connectionmonitor/src/connmonwlannetwork_v2.cpp
changeset 0 5a93021fdf25
child 20 9c97ad6591ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connmon/connectionmonitor/src/connmonwlannetwork_v2.cpp	Thu Dec 17 08:55:21 2009 +0200
@@ -0,0 +1,280 @@
+/*
+* Copyright (c) 2006-2008 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:  Implementation for the CConnMonWlanNetwork class.
+*
+*/
+
+#include <e32cmn.h>
+#include <rconnmon.h>
+
+#include "ConnMonUtils.h"
+#include "log.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+//  Constructor
+// ---------------------------------------------------------------------------
+//
+CConnMonWlanNetwork::CConnMonWlanNetwork()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+//  Constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CConnMonWlanNetwork* CConnMonWlanNetwork::NewL()
+    {
+    CConnMonWlanNetwork* self = new( ELeave ) CConnMonWlanNetwork();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+//  Constructor
+// ---------------------------------------------------------------------------
+//
+CConnMonWlanNetwork::CConnMonWlanNetwork(
+        const TBuf<KMaxNameLength>& aName,
+        TUint aConnectionMode,
+        TUint aSignalStrength,
+        TUint aSecurityMode,
+        const TBuf8<KWlanBssId>& aBssId,
+        const TDesC& aVendorData )
+        :
+        iName( aName ),
+        iConnectionMode( aConnectionMode ),
+        iSignalStrength( aSignalStrength ),
+        iSecurityMode( aSecurityMode ),
+        iWlanBssId( aBssId ),
+        iVendorData( NULL )
+    {
+    if ( aVendorData != KNullDesC() && aVendorData.Length() > 0 )
+        {
+        // Can't leave here, copy contents only if enough memory
+        iVendorData = HBufC::New( aVendorData.Length() );
+        if ( iVendorData )
+            {
+            iVendorData->Des().Copy( aVendorData );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+//  Constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CConnMonWlanNetwork* CConnMonWlanNetwork::NewL(
+        const TBuf<KMaxNameLength>& aName,
+        TUint aConnectionMode,
+        TUint aSignalStrength,
+        TUint aSecurityMode,
+        const TBuf8<KWlanBssId>& aBssId,
+        const TDesC& aVendorData )
+    {
+    CConnMonWlanNetwork* wlanNet = new( ELeave ) CConnMonWlanNetwork(
+            aName,
+            aConnectionMode,
+            aSignalStrength,
+            aSecurityMode,
+            aBssId,
+            aVendorData );
+
+    return wlanNet;
+    }
+
+// ---------------------------------------------------------------------------
+//  Second-phase constructor
+// ---------------------------------------------------------------------------
+//
+void CConnMonWlanNetwork::ConstructL()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+//  Copy Constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CConnMonWlanNetwork* CConnMonWlanNetwork::NewL(
+        CConnMonWlanNetwork& aConnMonWlanNetwork )
+    {
+    CConnMonWlanNetwork* wlanNet;
+    if ( aConnMonWlanNetwork.iVendorData )
+        {
+        wlanNet = new( ELeave ) CConnMonWlanNetwork(
+                aConnMonWlanNetwork.iName,
+                aConnMonWlanNetwork.iConnectionMode,
+                aConnMonWlanNetwork.iSignalStrength,
+                aConnMonWlanNetwork.iSecurityMode,
+                aConnMonWlanNetwork.iWlanBssId,
+                aConnMonWlanNetwork.iVendorData->Des() );
+        }
+    else
+        {
+        wlanNet = new( ELeave ) CConnMonWlanNetwork(
+                aConnMonWlanNetwork.iName,
+                aConnMonWlanNetwork.iConnectionMode,
+                aConnMonWlanNetwork.iSignalStrength,
+                aConnMonWlanNetwork.iSecurityMode,
+                aConnMonWlanNetwork.iWlanBssId,
+                KNullDesC() );
+        }
+    return wlanNet;
+    }
+
+// ---------------------------------------------------------------------------
+//  Destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CConnMonWlanNetwork::~CConnMonWlanNetwork()
+    {
+    delete iVendorData;
+    }
+
+// ---------------------------------------------------------------------------
+//  = operator
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CConnMonWlanNetwork& CConnMonWlanNetwork::operator=(
+        CConnMonWlanNetwork& aConnMonWlanNetwork )
+    {
+    TInt err( KErrNone );
+
+    iName.Copy( aConnMonWlanNetwork.Name() );
+    iConnectionMode = aConnMonWlanNetwork.ConnectionMode();
+    iSignalStrength = aConnMonWlanNetwork.SignalStrength();
+    iSecurityMode = aConnMonWlanNetwork.SecurityMode();
+    iWlanBssId = aConnMonWlanNetwork.WlanBssid();
+
+    if ( aConnMonWlanNetwork.iVendorData )
+        {
+        delete iVendorData;
+        iVendorData = NULL;
+        TRAP( err, iVendorData = HBufC::NewL( aConnMonWlanNetwork.iVendorData->Length() ) );
+        if ( err )
+            {
+            LOGIT1("VendorData handling error <%d>", err)
+            }
+        else
+            {
+            iVendorData = aConnMonWlanNetwork.iVendorData;
+            }
+        }
+    return *this;
+    }
+
+// ---------------------------------------------------------------------------
+// Compares two networks by iSignalStrength
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CConnMonWlanNetwork::CompareBySignal(
+        const CConnMonWlanNetwork& aFirst,
+        const CConnMonWlanNetwork& aSecond )
+    {
+    //LOGENTRFN("CConnMonWlanNetwork::CompareBySignal()")
+
+    TInt rc( 0 );
+    if ( aFirst.iSignalStrength > aSecond.iSignalStrength )
+        {
+        rc = 1;
+        }
+    else if ( aFirst.iSignalStrength < aSecond.iSignalStrength )
+        {
+        rc = -1;
+        }
+
+    //LOGEXITFN1("CConnMonWlanNetwork::CompareBySignal()", rc)
+    return rc;
+    }
+
+// ---------------------------------------------------------------------------
+// Packages object to HBufC descriptor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const HBufC* CConnMonWlanNetwork::ToBuf() const
+    {
+    //LOGENTRFN("CConnMonWlanNetwork::ToBuf()")
+
+    // Check the vendor data length
+    TInt vendorDataSize( 0 );
+    if ( iVendorData )
+        {
+        vendorDataSize = iVendorData->Length();
+        }
+
+    // Allocate buffer to "all" data
+    HBufC* buf = HBufC::New( sizeof( CConnMonWlanNetwork ) + vendorDataSize );
+    if ( !buf )
+        {
+        LOGIT("ToBuf: out of memory error")
+        }
+    else
+        {
+        TPtr ptr( buf->Des() );
+
+        // Add CConnMonWlanNetwork object
+        ptr.Copy( (TUint16*)this, (TInt)sizeof( CConnMonWlanNetwork ) / sizeof( TUint16 ) );
+
+        // If vendor data exists, add it also
+        if ( vendorDataSize > 0 )
+            {
+            ptr.Append( iVendorData->Des() );
+            }
+        }
+
+    //LOGEXITFN("CConnMonWlanNetwork::ToBuf()")
+    return buf;
+    }
+
+// ---------------------------------------------------------------------------
+// Unpackages CConnMonWlanNetwork from TPtrC descriptor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CConnMonWlanNetwork::FromPtrC(
+        const TPtrC& aPtrC,
+        CConnMonWlanNetwork* aConnMonWlanNetwork )
+    {
+    //LOGENTRFN("CConnMonWlanNetwork::FromPtrC()")
+    TInt err( KErrNone );
+
+    // Copy CConnMonWlanNetwork object data from the beginning of aPtrC
+    memcpy( aConnMonWlanNetwork, aPtrC.Ptr(), sizeof( CConnMonWlanNetwork ) );
+
+    // Reset vendor data pointer
+    aConnMonWlanNetwork->iVendorData = NULL;
+
+    // If vendor data exists, allocate memory and read it (it exists just after
+    // CConnMonWlanNetwork object data) from aPtrC
+    if ( aPtrC.Length() > sizeof( CConnMonWlanNetwork ) )
+        {
+        TInt vendorDataLen = aPtrC.Length() - sizeof( CConnMonWlanNetwork );
+
+        aConnMonWlanNetwork->iVendorData = HBufC::New( vendorDataLen );
+        if ( !aConnMonWlanNetwork->iVendorData )
+            {
+            err = KErrNoMemory;
+            LOGIT("FromPtrC: out of memory error")
+            }
+        else
+            {
+            aConnMonWlanNetwork->iVendorData->Des().Copy(
+                    aPtrC.Mid( sizeof( CConnMonWlanNetwork ), vendorDataLen ) );
+            }
+        }
+
+    //LOGEXITFN1("CConnMonWlanNetwork::FromPtrC()", err)
+    return err;
+    }
+
+// End-of-file