sapi_sysinfo/sysinfoservice/src/sysinfo.cpp
changeset 0 14df0fbfcc4e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sapi_sysinfo/sysinfoservice/src/sysinfo.cpp	Mon Mar 30 12:51:10 2009 +0300
@@ -0,0 +1,1203 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  CSysInfoService class implementation
+*
+*/
+
+
+#include <AccessoryConnection.h>
+#include <AccessoryServer.h>
+#include <PtiEngine.h>
+#include <centralrepository.h>
+#include <SysUtilDomainCRKeys.h>
+
+#include "sysinfo.h"
+#include "SysInfoUtils.h"
+
+// --------------------------------------------------------------------
+// CSysData::CSysData()
+// Constructor
+// --------------------------------------------------------------------
+//
+CSysData::CSysData(TDataType aType):iDataType(aType)
+    {
+    }
+
+// --------------------------------------------------------------------
+// CSysData::~CSysData()
+// Destructor
+// --------------------------------------------------------------------
+//
+CSysData::~CSysData()
+    {
+    }
+
+// --------------------------------------------------------------------
+// CSysData::DataType()
+// returns type of data this instance holds. @TDataType
+// --------------------------------------------------------------------
+//
+EXPORT_C CSysData::TDataType CSysData::DataType() const
+    {
+    return iDataType;
+    }
+
+// --------------------------------------------------------------------
+// CStatus::CStatus()
+// Constructor
+// --------------------------------------------------------------------
+//
+CStatus::CStatus(TInt aStatus):CSysData(EStatus),iStatus(aStatus)
+    {
+    }
+
+// --------------------------------------------------------------------
+// CStatus::~CStatus()
+// Destructor
+// --------------------------------------------------------------------
+//
+CStatus::~CStatus()
+    {
+    }
+
+// --------------------------------------------------------------------
+// CStatus::CStatus()
+// Two-phased constructor
+// --------------------------------------------------------------------
+//
+EXPORT_C CStatus* CStatus::NewL(TInt aStatus)
+    {
+    CStatus* self = new (ELeave) CStatus(aStatus);
+    return self;
+    }
+
+// --------------------------------------------------------------------
+// CStatus::CStatus()
+// returns interger value stored which is used to represent status of
+// many SA's.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CStatus::Status() const
+    {
+    return iStatus;
+    }
+
+// --------------------------------------------------------------------
+// CStringData::CStringData()
+// Constructor.
+// --------------------------------------------------------------------
+//
+CStringData::CStringData():CSysData(EStringData)
+    {
+    }
+
+// --------------------------------------------------------------------
+// CStringData::~CStringData()
+// Destructor
+// --------------------------------------------------------------------
+//
+CStringData::~CStringData()
+    {
+    delete iStringData;
+    }
+
+// --------------------------------------------------------------------
+// CStringData::NewL()
+// Two-phased constructor. returns new instance of this class.
+// --------------------------------------------------------------------
+//
+EXPORT_C CStringData* CStringData::NewL(const TDesC& aString)
+    {
+    CStringData* self = new (ELeave) CStringData();
+    CleanupStack::PushL(self);
+    self->iStringData = aString.AllocL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// --------------------------------------------------------------------
+// CStringData::StringData()
+// On return aString contains string data.
+// --------------------------------------------------------------------
+//
+EXPORT_C void CStringData::StringData(TPtrC& aString) const
+    {
+    aString.Set(*iStringData);
+    }
+
+// --------------------------------------------------------------------
+// CVersion::CVersion()
+// Constructor.
+// --------------------------------------------------------------------
+//
+CVersion::CVersion(TInt aMajor,TInt aMinor):CSysData(EVersion),
+                                        iMajorVersion(aMajor),
+                                        iMinorVersion(aMinor)
+    {
+    }
+
+// --------------------------------------------------------------------
+// CVersion::~CVersion()
+// Destructor
+// --------------------------------------------------------------------
+//
+CVersion::~CVersion()
+    {
+    }
+
+// --------------------------------------------------------------------
+// CVersion::NewL()
+// Two-phased constructor. returns new instance of this class.
+// --------------------------------------------------------------------
+//
+CVersion* CVersion::NewL(TInt aMajor,TInt aMinor)
+    {
+    CVersion* self = new (ELeave) CVersion(aMajor,aMinor);
+    return self;
+    }
+
+// --------------------------------------------------------------------
+// CVersion::MajorVersion()
+// returns major version number.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CVersion::MajorVersion() const
+    {
+    return iMajorVersion;
+    }
+
+// --------------------------------------------------------------------
+// CVersion::MinorVersion()
+// returns minor version number.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CVersion::MinorVersion() const 
+    {
+    return iMinorVersion;
+    }
+
+// --------------------------------------------------------------------
+// CNetworkInfo::CNetworkInfo()
+// Constructor.
+// --------------------------------------------------------------------
+//
+CNetworkInfo::CNetworkInfo(RMobilePhone::TMobilePhoneNetworkInfoV1& aNetworkInfo,
+                            RMobilePhone::TMobilePhoneLocationAreaV1& aArea)
+                            :CSysData(ENetworkInfo),iNetworkInfo(aNetworkInfo),
+                            iLAC(aArea)
+    {
+    }
+
+// --------------------------------------------------------------------
+// CNetworkInfo::~CNetworkInfo()
+// Destructor
+// --------------------------------------------------------------------
+//
+CNetworkInfo::~CNetworkInfo()
+    {
+    }
+
+// --------------------------------------------------------------------
+// CNetworkInfo::NewL()
+// Two-phased constructor. returns new instance of this class.
+// --------------------------------------------------------------------
+//
+CNetworkInfo* CNetworkInfo::NewL(
+                        RMobilePhone::TMobilePhoneNetworkInfoV1& aNetworkInfo,
+                        RMobilePhone::TMobilePhoneLocationAreaV1& aArea )
+    {
+    CNetworkInfo* self = new (ELeave) CNetworkInfo(aNetworkInfo,aArea);
+    return self;
+    }
+	
+// --------------------------------------------------------------------
+// CNetworkInfo::NetworkName()
+// returns network name.
+// --------------------------------------------------------------------
+//
+EXPORT_C TPtrC CNetworkInfo::NetworkName()  const
+    {
+    return	TPtrC(iNetworkInfo.iLongName);
+    }
+
+// --------------------------------------------------------------------
+// CNetworkInfo::NetworkMode()
+// returns network mode.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CNetworkInfo::NetworkMode() const
+    {
+    return (iNetworkInfo.iMode - 1);
+    }
+	
+// --------------------------------------------------------------------
+// CNetworkInfo::NetworkStatus()
+// returns network status.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CNetworkInfo::NetworkStatus() const
+    {
+    return (iNetworkInfo.iStatus -1);
+    }
+
+// --------------------------------------------------------------------
+// CNetworkInfo::CountryCode()
+// returns MCC Mobile Country Code.
+// --------------------------------------------------------------------
+//
+EXPORT_C TPtrC CNetworkInfo::CountryCode() const
+    {
+    return 	TPtrC(iNetworkInfo.iCountryCode);
+    }
+
+// --------------------------------------------------------------------
+// CNetworkInfo::NetworkCode()
+// returns MNC Mobile Network Code.
+// --------------------------------------------------------------------
+//
+EXPORT_C TPtrC CNetworkInfo::NetworkCode() const
+    {
+    return 	TPtrC(iNetworkInfo.iNetworkId);
+    }	
+
+// --------------------------------------------------------------------
+// CNetworkInfo::LocationAreaCode()
+// returns LAC Location Area Code.
+// --------------------------------------------------------------------
+//
+EXPORT_C TUint CNetworkInfo::LocationAreaCode() const
+    {
+    return iLAC.iLocationAreaCode;
+    }
+	
+// --------------------------------------------------------------------
+// CNetworkInfo::CellId()
+// returns Cell ID of a region.
+// --------------------------------------------------------------------
+//
+EXPORT_C TUint CNetworkInfo::CellId()  const
+    {
+    return iLAC.iCellId;
+    }
+
+// --------------------------------------------------------------------
+// CNetworkInfo::ValidLocationAreaCode()
+// returns bool validates LAC and CellID data values.
+// --------------------------------------------------------------------
+//
+EXPORT_C TBool CNetworkInfo::ValidLocationAreaCode()  const
+    {
+    return iLAC.iAreaKnown;
+    }
+	
+	
+// --------------------------------------------------------------------
+// CAccessoryInfo::CAccessoryInfo()
+// Constructor.
+// --------------------------------------------------------------------
+//
+CAccessoryInfo::CAccessoryInfo(TAccessoryState aAccState)
+                                :CSysData(EAccessoryInfo),
+                                iConnectionState(aAccState)
+    {
+    }
+
+// --------------------------------------------------------------------
+// CAccessoryInfo::~CAccessoryInfo()
+// Destructor
+// --------------------------------------------------------------------
+//
+CAccessoryInfo::~CAccessoryInfo()
+    {
+    }
+
+// --------------------------------------------------------------------
+// CAccessoryInfo::NewL()
+// Two-phased constructor. returns new instance of this class.
+// --------------------------------------------------------------------
+//
+CAccessoryInfo* CAccessoryInfo::NewL(const TAccPolGenericID& aGenericID, 
+                                        TAccessoryState aAccState)
+    {
+    CAccessoryInfo* self = new (ELeave) CAccessoryInfo(aAccState);
+    self->GetAccessoryProperty(aGenericID);
+    return self;
+    }
+
+// --------------------------------------------------------------------
+// CAccessoryInfo::AccessoryType()
+// returns type of accessory.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CAccessoryInfo::AccessoryType() const
+    {
+    return iAccessoryType;
+    }
+
+// --------------------------------------------------------------------
+// CAccessoryInfo::GetAccessoryProperty()
+// retrives accessory type information from aGenericID.
+// --------------------------------------------------------------------
+//
+void CAccessoryInfo::GetAccessoryProperty(const TAccPolGenericID& aGenericID)
+    {
+    TUint32 deviceType = aGenericID.DeviceTypeCaps();
+    TUint32 connectionType = aGenericID.PhysicalConnectionCaps();
+
+    if(deviceType == KDTHeadset && (connectionType & KPCWired))
+        {
+        iAccessoryType = CAccessoryInfo::EHeadSet;
+        }
+    else if(deviceType == KDTHeadset && (connectionType & KPCBluetooth) )
+        {
+        iAccessoryType = EBTHeadSet;
+        }
+    else if(deviceType == KDTCarKit && (connectionType & KPCWired) )
+        {
+        iAccessoryType = ECarKit;
+        }
+    else if(deviceType == KDTCarKit && (connectionType == KPCBluetooth) )
+        {
+        iAccessoryType = EBTCarKit;
+        }
+    else
+        {
+        iAccessoryType = EUnknown;
+        }
+    }
+
+// --------------------------------------------------------------------
+// CAccessoryInfo::ConnectionState()
+// returns accessory state (Connected,Disconnected).
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CAccessoryInfo::ConnectionState() const
+    {
+    return iConnectionState;
+    }
+
+// --------------------------------------------------------------------
+// CAccList::CAccList()
+// Constructor.
+// --------------------------------------------------------------------
+//
+CAccList::CAccList():CSysData(EAccessoryList)
+    {
+    }
+
+// --------------------------------------------------------------------
+// CAccList::~CAccList()
+// Destructor
+// --------------------------------------------------------------------
+//
+CAccList::~CAccList()
+    {
+    }
+
+// --------------------------------------------------------------------
+// CAccList::NewL()
+// Two-phased constructor. returns new instance of this class.
+// --------------------------------------------------------------------
+//
+CAccList* CAccList::NewL()
+    {
+    CAccList* self = new (ELeave) CAccList();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;	
+    }
+
+// --------------------------------------------------------------------
+// CAccList::ConstructL()
+// 2nd phase construtor
+// --------------------------------------------------------------------
+//
+void CAccList::ConstructL()
+    {
+    RAccessoryServer    		AccSrv;
+    RAccessoryConnection    	AccConnection;
+    	
+    //Connect to accessory server.
+    User::LeaveIfError(AccSrv.Connect());
+    //Create a session to it.
+    User::LeaveIfError(AccConnection.CreateSubSession(AccSrv));
+    //read list of connected accssories at this moment.
+    AccConnection.GetAccessoryConnectionStatus(iAccessories);
+    iCount = iAccessories.Count();
+    //Close subsession.
+    AccConnection.CloseSubSession();
+    //Disconnect accessory server.
+    AccSrv.Disconnect();
+    }
+
+// --------------------------------------------------------------------
+// CAccList::AtL()
+// Reads AccessoryInfo at an index. On return aAccessoryInfo consists 
+// of accessory information.
+// --------------------------------------------------------------------
+//
+EXPORT_C TBool CAccList::AtL(TInt aIndex,const CAccessoryInfo*& 
+                                            aAccessoryInfo) const
+    {
+    TAccPolGenericID accessoryid;
+    if(0 <= aIndex && aIndex < Count())
+        {
+        accessoryid = iAccessories.GetGenericIDL(aIndex);
+        }
+    else
+        {
+        aAccessoryInfo = NULL;
+        return EFalse;
+        }
+
+    //Create CAccessoryInfo. client has the ownership.
+    aAccessoryInfo = CAccessoryInfo::NewL(accessoryid,
+                                            CAccessoryInfo::EConnected);
+    return ETrue;
+    }
+
+// --------------------------------------------------------------------
+// CAccList::[]
+// Reads AccessoryInfo at an index. returns CAccessoryInfo 
+// --------------------------------------------------------------------
+//
+EXPORT_C const CAccessoryInfo* CAccList::operator[](TInt aIndex) const
+    {
+    CAccessoryInfo* accessoryinfo = NULL;
+    if(0 <= aIndex && aIndex < iCount)
+        {
+        TAccPolGenericID accessoryid;
+        accessoryid = iAccessories.GetGenericIDL(aIndex);
+        //Create CAccessoryInfo. client has the ownership.
+        accessoryinfo = CAccessoryInfo::NewL(accessoryid,
+                                            CAccessoryInfo::EConnected);
+        }
+    return accessoryinfo;
+    }
+
+// --------------------------------------------------------------------
+// CAccList::Count()
+// returns number of accessories. 
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CAccList::Count() const
+    {
+    return iCount;
+    }
+
+// --------------------------------------------------------------------
+// CLanguageList::CLanguageList()
+// Constructor.
+// --------------------------------------------------------------------
+//
+CLanguageList::CLanguageList():CSysData(ELanguageList)
+    {
+    }
+
+// --------------------------------------------------------------------
+// CLanguageList::~CLanguageList()
+// Destructor
+// --------------------------------------------------------------------
+//
+CLanguageList::~CLanguageList()
+    {
+    iLanguages.Close();
+    }
+
+// --------------------------------------------------------------------
+// CLanguageList::NewL()
+// Two-phased constructor. returns new instance of this class.
+// --------------------------------------------------------------------
+//
+CLanguageList* CLanguageList::NewL()
+    {
+    CLanguageList* self;
+    self = new (ELeave) CLanguageList();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// --------------------------------------------------------------------
+// CLanguageList::ConstructL()
+// 2nd phase construtor
+// --------------------------------------------------------------------
+//
+void CLanguageList::ConstructL()
+    {
+    CPtiEngine* PtiEngine;
+    PtiEngine = CPtiEngine::NewL();
+    CleanupStack::PushL(PtiEngine);
+    PtiEngine->GetAvailableLanguagesL(iLanguages);
+    CleanupStack::PopAndDestroy(PtiEngine);
+    }
+
+// --------------------------------------------------------------------
+// CLanguageList::[]
+// returns language code at the index.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CLanguageList::operator[](TInt aIndex) const
+    {
+    if(0 <= aIndex && aIndex < Count())
+        return iLanguages[aIndex];
+    else
+        return -1;
+    }
+
+// --------------------------------------------------------------------
+// CLanguageList::At
+// On return aEntry consists of language code at the index.
+// --------------------------------------------------------------------
+//
+EXPORT_C TBool CLanguageList::At(TInt aIndex, TInt& aEntry) const
+    {
+    if(0 <= aIndex && aIndex < Count())
+        {
+        aEntry = iLanguages[aIndex];
+        return ETrue;
+        }
+    return EFalse;	
+    }
+
+// --------------------------------------------------------------------
+// CLanguageList::Count
+// returns number of languages.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CLanguageList::Count() const
+    {
+    return iLanguages.Count();
+    }
+
+// --------------------------------------------------------------------
+// CStringList::CStringList()
+// Constructor.
+// --------------------------------------------------------------------
+//
+CStringList::CStringList(CDesCArray*& aDesArray):CSysData(EStringList),
+                                                iDesArray(aDesArray)
+    {
+    }
+
+// --------------------------------------------------------------------
+// CStringList::~CStringList()
+// Destructor
+// --------------------------------------------------------------------
+//
+CStringList::~CStringList()
+    {
+    delete iDesArray;
+    }
+
+// --------------------------------------------------------------------
+// CStringList::NewL()
+// Two-phased constructor. returns new instance of this class.
+// --------------------------------------------------------------------
+//
+CStringList* CStringList::NewL(CDesCArray*& aDesArray)
+    {
+    CStringList* self = new (ELeave) CStringList(aDesArray);
+    return self;
+    }
+
+// --------------------------------------------------------------------
+// CStringList::[]
+// returns string data at specified index.
+// --------------------------------------------------------------------
+//
+EXPORT_C TPtrC CStringList::operator[](TInt aIndex) const
+    {
+    if( 0 <= aIndex && aIndex < iCount )
+        return (*iDesArray)[aIndex];
+
+    return NULL;
+    }
+
+// --------------------------------------------------------------------
+// CStringList::At
+// On return aEntry consists of string data at specified index.
+// --------------------------------------------------------------------
+//
+EXPORT_C TBool CStringList::At(TInt aIndex, TPtrC& aEntry) const
+    {
+    if( 0 <= aIndex && aIndex < Count() )
+        {
+        aEntry.Set((*iDesArray)[aIndex]);
+        return ETrue;
+        }
+    return EFalse;
+    }
+
+// --------------------------------------------------------------------
+// CStringList::Count
+// returns number of strings.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CStringList::Count() const
+    {
+    return iDesArray->Count();
+    }
+
+// --------------------------------------------------------------------
+// CResolution::CResolution()
+// Constructor.
+// --------------------------------------------------------------------
+//
+CResolution::CResolution(TInt aXPixels, TInt aYPixels):CSysData(EResolution),
+                                        iXPixels(aXPixels),iYPixels(aYPixels)
+    {
+    }
+
+// --------------------------------------------------------------------
+// CResolution::~CResolution()
+// Destructor
+// --------------------------------------------------------------------
+//
+CResolution::~CResolution()
+    {
+    }
+
+// --------------------------------------------------------------------
+// CResolution::NewL()
+// Two-phased constructor. returns new instance of this class.
+// --------------------------------------------------------------------
+//
+CResolution* CResolution::NewL(TInt aXPixels, TInt aYPixels)
+    {
+    CResolution* self = new (ELeave) CResolution(aXPixels,aYPixels);
+    return self;
+    }
+
+// --------------------------------------------------------------------
+// CResolution::XPixels()
+// returns x-pixels.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CResolution::XPixels() const
+    {
+    return iXPixels;
+    }
+
+// --------------------------------------------------------------------
+// CResolution::YPixels()
+// returns y-pixels.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CResolution::YPixels() const
+    {
+    return iYPixels;
+    }
+
+// --------------------------------------------------------------------
+// CDriveList::CDriveList()
+// Constructor.
+// --------------------------------------------------------------------
+//
+CDriveList::CDriveList():CSysData(EDriveList)
+    {
+    }
+
+// --------------------------------------------------------------------
+// CDriveList::~CDriveList()
+// Destructor
+// --------------------------------------------------------------------
+//
+CDriveList::~CDriveList()
+    {
+    iDrives.Close();
+    }
+
+// --------------------------------------------------------------------
+// CDriveList::NewL()
+// Two-phased constructor. returns new instance of this class.
+// --------------------------------------------------------------------
+//
+CDriveList* CDriveList::NewL(TDriveList& aDrives)
+    {
+    CDriveList* self;
+    self = new (ELeave) CDriveList();
+    CleanupStack::PushL(self);
+    self->ConstructL(aDrives);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// --------------------------------------------------------------------
+// CDriveList::ConstructL()
+// 2nd phase construtor
+// --------------------------------------------------------------------
+//
+void CDriveList::ConstructL(TDriveList& aDrives)
+    {
+    for  (TInt i=0; KMaxDrives > i; i++)
+        //check drive is valid.
+        if( aDrives[i] )
+            //add the drive to list.
+            iDrives.AppendL(i);
+
+    iCount = iDrives.Count();
+    }
+
+// --------------------------------------------------------------------
+// CDriveList::[]
+// gets drive number at specified index.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CDriveList::operator[](TInt aIndex) const
+    {
+    if(0 <= aIndex && aIndex<iCount)
+        return iDrives[aIndex];
+    else
+        return -1;
+    }
+
+// --------------------------------------------------------------------
+// CDriveList::AtL
+// gets drive number at specified index. aEntry consists of drive number.
+// --------------------------------------------------------------------
+//
+EXPORT_C TBool CDriveList::At(TInt aIndex, TInt& aEntry) const
+    {
+    if( 0 <= aIndex && aIndex<iCount )
+        {
+        aEntry = iDrives[aIndex];
+        return ETrue;
+        }
+    return EFalse;
+    }
+
+// --------------------------------------------------------------------
+// CDriveList::Count
+// returns number of drives.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CDriveList::Count() const
+    {
+    return iCount;
+    }
+
+// --------------------------------------------------------------------
+// CDriveInfo::CDriveInfo()
+// Constructor.
+// --------------------------------------------------------------------
+//
+CDriveInfo::CDriveInfo(TInt aDrvNumber,TVolumeInfo& aVolumeInfo)
+                            :CSysData(EDriveInfo),iDrvNumber(aDrvNumber),
+                            iVolumeInfo(aVolumeInfo),iVolumeInfoValid(ETrue),
+                            iCriticalSpace(-1)
+    {
+    }
+
+// --------------------------------------------------------------------
+// CDriveInfo::CDriveInfo()
+// Constructor.
+// --------------------------------------------------------------------
+//
+CDriveInfo::CDriveInfo(TInt aDrvNumber,TInt aCriticalSpace)
+                                :CSysData(EDriveInfo),iDrvNumber(aDrvNumber),
+                                iVolumeInfoValid(EFalse),
+                                iCriticalSpace(aCriticalSpace)
+    {
+    }
+
+// --------------------------------------------------------------------
+// CDriveInfo::~CDriveInfo()
+// Destructor
+// --------------------------------------------------------------------
+//
+CDriveInfo::~CDriveInfo()
+    {
+    }
+
+// --------------------------------------------------------------------
+// CDriveInfo::NewL()
+// Two-phased constructor. returns new instance of this class.
+// --------------------------------------------------------------------
+//
+EXPORT_C CDriveInfo* CDriveInfo::NewL(TInt aDriveNumber, TInt aCriticalSpace)
+    {
+    CDriveInfo* self;
+    self = new (ELeave) CDriveInfo(aDriveNumber,aCriticalSpace);
+    return self;
+    }
+
+// --------------------------------------------------------------------
+// CDriveInfo::NewL()
+// Two-phased constructor. returns new instance of this class.
+// --------------------------------------------------------------------
+//
+CDriveInfo* CDriveInfo::NewL(TInt aDriveNumber, TVolumeInfo& aVolumeInfo)
+    {
+    CDriveInfo* self;
+    self = new (ELeave) CDriveInfo(aDriveNumber,aVolumeInfo);
+    return self;
+    }
+
+// --------------------------------------------------------------------
+// CDriveInfo::DriveNumber
+// returns drive number.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CDriveInfo::DriveNumber() const
+    {
+    return iDrvNumber;
+    }
+
+// --------------------------------------------------------------------
+// CDriveInfo::CriticalSpace
+// returns critical space of the drive.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CDriveInfo::CriticalSpace() const
+    {
+    TInt err(KErrNone);
+    TInt criticalspace(0);
+    if( -1 == iCriticalSpace )
+        {
+        if( EMediaRam == MediaType() )
+            {
+            TRAP(err,RepositoryUtil::GetRepositoryKeyL(KCRUidDiskLevel,
+                                KRamDiskCriticalLevel,criticalspace));
+            }
+        else
+            {
+            TRAP(err,RepositoryUtil::GetRepositoryKeyL(KCRUidDiskLevel,
+                                KDiskCriticalThreshold,criticalspace));
+            }
+        }
+    else
+        {
+        criticalspace = iCriticalSpace;
+        }
+
+    return ( (KErrNone == err) ? criticalspace : err);
+    }
+
+// --------------------------------------------------------------------
+// CDriveInfo::MediaType
+// returns drive media type.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CDriveInfo::MediaType() const
+    {
+    return iVolumeInfo.iDrive.iType;
+    }
+
+// --------------------------------------------------------------------
+// CDriveInfo::TotalSpace
+// returns total space on this drive.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt64 CDriveInfo::TotalSpace() const
+    {
+    return iVolumeInfo.iSize;
+    }
+
+// --------------------------------------------------------------------
+// CDriveInfo::FreeSpace
+// returns free space on this drive.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt64 CDriveInfo::FreeSpace() const
+    {
+    return iVolumeInfo.iFree;
+    }
+
+// --------------------------------------------------------------------
+// CDriveInfo::DriveName
+// On return aDriveName consists name of the drive.
+// --------------------------------------------------------------------
+//
+EXPORT_C void CDriveInfo::DriveName(TPtrC& aDriveName) const
+    {
+    aDriveName.Set(iVolumeInfo.iName);
+    }
+
+// --------------------------------------------------------------------
+// CDriveInfo::DriveName
+// returns battery state of this drive.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CDriveInfo::BatteryState() const
+    {
+    return iVolumeInfo.iDrive.iBattery;
+    }
+
+// --------------------------------------------------------------------
+// CConnectionList::CConnectionList()
+// Constructor.
+// --------------------------------------------------------------------
+//
+CConnectionList::CConnectionList():CSysData(EConnectionList)
+    {
+    }
+
+// --------------------------------------------------------------------
+// CConnectionList::~CConnectionList()
+// Destructor
+// --------------------------------------------------------------------
+//
+CConnectionList::~CConnectionList()
+    {
+    iConnectionInfoArray.ResetAndDestroy();
+    iConnectionInfoArray.Close();
+    }
+
+// --------------------------------------------------------------------
+// CConnectionList::NewL()
+// Two-phased constructor. returns new instance of this class.
+// --------------------------------------------------------------------
+//
+CConnectionList* CConnectionList::NewL(
+                            RPointerArray<CConnectionInfo>& aConnectionInfoArr)
+    {
+    CConnectionList* self = CConnectionList::NewLC(aConnectionInfoArr);
+    CleanupStack::Pop(self);
+    return self;
+    }
+ 
+// --------------------------------------------------------------------
+// CConnectionList::NewLC()
+// Two-phased constructor. returns new instance of this class.
+// --------------------------------------------------------------------
+//
+CConnectionList* CConnectionList::NewLC(
+                        RPointerArray<CConnectionInfo>& aConnectionInfoArr)
+    {
+    CConnectionList* self = new (ELeave) CConnectionList();
+    CleanupStack::PushL(self);
+    self->ConstructL(aConnectionInfoArr);
+    return self;
+    }
+
+// --------------------------------------------------------------------
+// CConnectionList::ConstructL()
+// 2nd phase construtor
+// --------------------------------------------------------------------
+//
+void CConnectionList::ConstructL(
+                        RPointerArray<CConnectionInfo>& aConnectionInfoArr)
+    {
+    iCount = aConnectionInfoArr.Count();
+    //Make a copy of available ConnectionInfo pointers.
+    if(iCount > 0)
+        {
+        for(TInt index = 0 ; index < iCount; index++)
+            {
+            iConnectionInfoArray.AppendL(aConnectionInfoArr[index]);
+            }
+        }
+    }
+
+// --------------------------------------------------------------------
+// CConnectionList::At()
+// On return aConnectionInfo contains connection information.
+// --------------------------------------------------------------------
+//
+EXPORT_C TBool CConnectionList::At(TInt aIndex,
+                            const CConnectionInfo*& aConnectionInfo) const
+    {
+    if( 0 <= aIndex && aIndex<iCount )
+        {
+        aConnectionInfo = iConnectionInfoArray[aIndex];
+        return ETrue;
+        }
+    return EFalse;
+    }
+
+// --------------------------------------------------------------------
+// CConnectionList::[]
+// gets CConnectionInfo at specified index.
+// --------------------------------------------------------------------
+//
+EXPORT_C const CConnectionInfo* CConnectionList::operator[](TInt aIndex) const
+    {
+    return iConnectionInfoArray[aIndex];
+    }
+
+// --------------------------------------------------------------------
+// CConnectionList::Count()
+// returns number of connections.
+// --------------------------------------------------------------------
+//
+EXPORT_C TInt CConnectionList::Count() const
+    {
+    return iCount;
+    }
+
+// --------------------------------------------------------------------
+// CConnectionInfo::CConnectionInfo()
+// Constructor.
+// --------------------------------------------------------------------
+//
+CConnectionInfo::CConnectionInfo():CSysData(EConnectionInfo)
+    {
+    }
+
+// --------------------------------------------------------------------
+// CConnectionInfo::~CConnectionInfo()
+// Destructor
+// --------------------------------------------------------------------
+//
+CConnectionInfo::~CConnectionInfo()
+    {
+    delete iIAPName;
+    delete iNetworkName;
+    delete iConnectionName;
+    }
+
+// --------------------------------------------------------------------
+// CConnectionInfo::CopyL()
+// Creates new copy of the connectionInfo
+// --------------------------------------------------------------------
+//
+CConnectionInfo* CConnectionInfo::CopyL()
+    {
+    CConnectionInfo* self = new (ELeave) CConnectionInfo();
+    CleanupStack::PushL(self);
+
+    self->ConstructL(iConnectionId, iIAPId, iBearerType, iConnectStatus,
+                            *iIAPName, *iNetworkName, *iConnectionName);
+
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// --------------------------------------------------------------------
+// CConnectionInfo::NewL()
+// Two-phased constructor. returns new instance of this class.
+// --------------------------------------------------------------------
+//
+CConnectionInfo* CConnectionInfo::NewL(TUint aConnId, TUint aIAPId,
+                            TInt aBearerType,
+                            TConnectionState aConnectState,
+                            const TDesC& aIAPName, 
+                            const TDesC& aNetworkName,
+                            const TDesC& aConnectionName)
+    {
+    CConnectionInfo* self = new (ELeave) CConnectionInfo();
+    CleanupStack::PushL(self);
+    self->ConstructL(aConnId, aIAPId, aBearerType, aConnectState, aIAPName,
+                                            aNetworkName, aConnectionName);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// --------------------------------------------------------------------
+// CConnectionInfo::ConstructL()
+// 2nd phase construtor
+// --------------------------------------------------------------------
+//	
+void CConnectionInfo::ConstructL(TUint aConnId,TUint aIAPId,
+                                TInt aBearerType,
+                                TConnectionState aConnectState,
+                                const TDesC& aIAPName,
+                                const TDesC& aNetworkName,
+                                const TDesC& aConnectionName)
+    {
+    iConnectionId = aConnId;
+    iIAPId = aIAPId;
+    iBearerType = aBearerType;
+    iConnectStatus = aConnectState;
+    iIAPName = aIAPName.AllocL();
+    iNetworkName = aNetworkName.AllocL();
+    iConnectionName = aConnectionName.AllocL();
+    }
+	
+// --------------------------------------------------------------------
+// CConnectionInfo::IAPId()
+// returns IAP ID.
+// --------------------------------------------------------------------
+//	
+EXPORT_C TUint CConnectionInfo::IAPId() const
+    {
+    return iIAPId;
+    }
+
+// --------------------------------------------------------------------
+// CConnectionInfo::ConnectionState()
+// returns Connection State.
+// --------------------------------------------------------------------
+//
+EXPORT_C CConnectionInfo::TConnectionState CConnectionInfo::ConnectionState() 
+                                                                        const
+    {
+    return iConnectStatus;
+    }
+
+// --------------------------------------------------------------------
+// CConnectionInfo::SetConnectionState()
+// changes connection state.
+// --------------------------------------------------------------------
+//
+void CConnectionInfo::SetConnectionState(
+                                CConnectionInfo::TConnectionState aState)
+    {
+    iConnectStatus = aState;
+    }
+
+// --------------------------------------------------------------------
+// CConnectionInfo::ConnectionId()
+// returns iConnection ID.
+// --------------------------------------------------------------------
+//	
+TUint CConnectionInfo::ConnectionId() const
+    {
+    return iConnectionId;
+    }
+
+// --------------------------------------------------------------------
+// CConnectionInfo::BearerType()
+// returns BearerType.
+// --------------------------------------------------------------------
+//	
+EXPORT_C TInt CConnectionInfo::BearerType() const
+    {
+    return iBearerType-1;
+    }	
+
+// --------------------------------------------------------------------
+// CConnectionInfo::IAPName()
+// returns IAP Name.
+// --------------------------------------------------------------------
+//	
+EXPORT_C TPtrC CConnectionInfo::IAPName() const
+    {
+    return	TPtrC(*iIAPName);
+    }
+
+// --------------------------------------------------------------------
+// CConnectionInfo::NetworkName()
+// returns Network Name.
+// --------------------------------------------------------------------
+//		
+EXPORT_C TPtrC CConnectionInfo::NetworkName() const
+    {
+    return	TPtrC(*iNetworkName);
+    }
+	
+// --------------------------------------------------------------------
+// CConnectionInfo::ConnectionName()
+// returns Connection Name.
+// --------------------------------------------------------------------
+//		
+EXPORT_C TPtrC CConnectionInfo::ConnectionName() const
+    {
+    return	TPtrC(*iConnectionName);
+    }
+	
+// End of file.