telephonyutils/etel3rdpartyapi/src/TelephonyActNetwork.cpp
author hgs
Mon, 09 Aug 2010 17:43:08 +0100
changeset 59 ac20d6a0a19d
parent 0 3553901f7fa8
child 24 6638e7f4bd8f
permissions -rw-r--r--
201029_06

/*
* Copyright (c) 2009 Sony Ericsson Mobile Communications AB
* 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:
* Sony Ericsson Mobile Communications AB - initial contribution.
* Nokia Corporation - additional changes.
* 
* Contributors:
* 
* Description:
* Code for TelephonyActNetwork class, used by CTelephonyFunctions class.
*
*/


/**
 @file
*/

#include "TelephonyFunctions.h" 
#include "TelephonyActNetwork.h"


CGetNetworkRegistrationStatusAct* CGetNetworkRegistrationStatusAct::NewL(CTelephonyFunctions* aTelephonyFunctions)
/**
Public constructor which can Leave().

@param	aTelephonyFunctions Object that constructs us.
@leave	Leaves if no memory.
*/
	{
	CGetNetworkRegistrationStatusAct* self = new(ELeave) CGetNetworkRegistrationStatusAct(aTelephonyFunctions);
	CActiveScheduler::Add(self);
	return self;
	}

CGetNetworkRegistrationStatusAct::~CGetNetworkRegistrationStatusAct()
/**
Destructor
*/
	{
	Cancel();
	Complete();
	}

void CGetNetworkRegistrationStatusAct::GetNetworkRegistrationStatus(TDes8& aId)
/**
Issue Request
*/
	{
	iISVNetworkRegistration = reinterpret_cast<CTelephony::TNetworkRegistrationV1*> ( const_cast<TUint8*> (aId.Ptr()) );
	iTelephonyFunctions->Phone()->GetNetworkRegistrationStatus(iStatus, iMMNetworkRegistration);
	SetActive();
	}

void CGetNetworkRegistrationStatusAct::Complete()
/**
Service Completed request.
*/
	{
	if(iTelephonyFunctions->IsRequestPending(CTelephonyFunctions::EGetNetworkRegistrationStatus))
		{
		if(iStatus==KErrNone)
			{
			GetRegistrationStatus(iMMNetworkRegistration, iISVNetworkRegistration->iRegStatus);
			}
		iTelephonyFunctions->CompleteRequest(CTelephonyFunctions::EGetNetworkRegistrationStatus, iStatus.Int());	
		}
	}
	
void CGetNetworkRegistrationStatusAct::GetRegistrationStatus(const RMobilePhone::TMobilePhoneRegistrationStatus aMMRegStatus, CTelephony::TRegistrationStatus& aTelRegStatus)
	{
	switch(aMMRegStatus)
		{
		case RMobilePhone::ERegistrationUnknown:  
			aTelRegStatus=CTelephony::ERegistrationUnknown;
			break;
		case RMobilePhone::ENotRegisteredNoService:
			aTelRegStatus=CTelephony::ENotRegisteredNoService;
			break;
		case RMobilePhone::ENotRegisteredEmergencyOnly:
			aTelRegStatus=CTelephony::ENotRegisteredEmergencyOnly;
			break;
		case RMobilePhone::ENotRegisteredSearching:
			aTelRegStatus=CTelephony::ENotRegisteredSearching;
			break;			
		case RMobilePhone::ERegisteredBusy:
			aTelRegStatus=CTelephony::ERegisteredBusy;
			break;
		case RMobilePhone::ERegisteredOnHomeNetwork:
			aTelRegStatus=CTelephony::ERegisteredOnHomeNetwork;
			break;
		case RMobilePhone::ERegistrationDenied:
			aTelRegStatus=CTelephony::ERegistrationDenied;
			break;
		case RMobilePhone::ERegisteredRoaming:
			aTelRegStatus=CTelephony::ERegisteredRoaming;
			break;
		default:
			aTelRegStatus=CTelephony::ERegistrationUnknown;
		}
	}

TInt CGetNetworkRegistrationStatusAct::RunError(TInt aLeaveCode)
/**
Handle any Leave() from inside RunL().

@param	aLeaveCode	passed in if RunL Leaves.
@return	KErrNone.
*/
	{
	iTelephonyFunctions->CompleteRequest(CTelephonyFunctions::EGetNetworkRegistrationStatus, aLeaveCode);
	return KErrNone;	// to ActiveScheduler.
	}

void CGetNetworkRegistrationStatusAct::DoCancel()
/**
Cancel request.

Async request to dial is cancelled.
*/
	{
	iTelephonyFunctions->Phone()->CancelAsyncRequest(EMobilePhoneGetNetworkRegistrationStatus);
	}


CGetNetworkRegistrationStatusAct::CGetNetworkRegistrationStatusAct(CTelephonyFunctions* aTelephonyFunctions)
: CAsyncRequestBaseAct(),
  iTelephonyFunctions(aTelephonyFunctions)
/**
First-phase constructor which cannot Leave().

@param	aTelephonyFunctions Object that constructs us.
*/
	{
	}
	

CGetCurrentNetworkInfoAct* CGetCurrentNetworkInfoAct::NewL(CTelephonyFunctions* aTelephonyFunctions)
/**
Public constructor which can Leave().

@param	aTelephonyFunctions Object that constructs us.
@leave	Leaves if no memory.
*/
	{
	CGetCurrentNetworkInfoAct* self = new(ELeave) CGetCurrentNetworkInfoAct(aTelephonyFunctions);
	CActiveScheduler::Add(self);
	return self;
	}

CGetCurrentNetworkInfoAct::~CGetCurrentNetworkInfoAct()
/**
Destructor
*/
	{
	Cancel();
	Complete();
	}

void CGetCurrentNetworkInfoAct::GetCurrentNetworkInfo(TDes8& aPckg)
/**
Issue Request
*/
	{
	iISVNetworkInfo = reinterpret_cast<CTelephony::TEtelISVType*> ( const_cast<TUint8*> (aPckg.Ptr()) );

	iPostedIPC = EMobilePhoneGetCurrentNetwork;
	iTelephonyFunctions->Phone()->GetCurrentNetwork(iStatus, iMMNetworkInfoPckg, iMMArea);

	SetActive();
	}


void CGetCurrentNetworkInfoAct::Complete()
/**
Service Completed request.
*/
	{
	if(iTelephonyFunctions->IsRequestPending(CTelephonyFunctions::EGetCurrentNetworkInfo))
		{
		if(iStatus==KErrNone)
			{
			MapNetworkInfo(iISVNetworkInfo, &iMMNetworkInfo, &iMMArea);
			}
		iTelephonyFunctions->CompleteRequest(CTelephonyFunctions::EGetCurrentNetworkInfo, iStatus.Int());		
		}
	}


TInt CGetCurrentNetworkInfoAct::RunError(TInt aLeaveCode)
/**
Handle any Leave() from inside RunL().

@param	aLeaveCode	passed in if RunL Leaves.
@return	KErrNone.
*/
	{
	iTelephonyFunctions->CompleteRequest(CTelephonyFunctions::EGetCurrentNetworkInfo, aLeaveCode);
	return KErrNone;	// to ActiveScheduler.
	}

void CGetCurrentNetworkInfoAct::DoCancel()
/**
Cancel request.

Async request to dial is cancelled.
*/
	{
	iTelephonyFunctions->Phone()->CancelAsyncRequest(iPostedIPC);
	}

	
/**
Map RMobilePhone::TMobilePhoneNetworkInfoV2 to CTelephony::TEtelISVType
*/
void CGetCurrentNetworkInfoAct::MapNetworkInfo(CTelephony::TEtelISVType* aISVNetworkInfo, RMobilePhone::TMobilePhoneNetworkInfoV2* aMMNetworkInfo, RMobilePhone::TMobilePhoneLocationAreaV1* aMMArea)
	{
	switch (aISVNetworkInfo->VersionId())
		{
	case CTelephony::KEtelISVV1:
		{
		CTelephony::TNetworkInfoV1* tempInfo = reinterpret_cast<CTelephony::TNetworkInfoV1*>(aISVNetworkInfo);
		switch(aMMNetworkInfo->iMode)
			{
			case RMobilePhone::ENetworkModeUnknown: 
				tempInfo->iMode=CTelephony::ENetworkModeUnknown;
				break;
			case RMobilePhone::ENetworkModeUnregistered:
				tempInfo->iMode=CTelephony::ENetworkModeUnregistered;
				break;
			case RMobilePhone::ENetworkModeGsm:
				tempInfo->iMode=CTelephony::ENetworkModeGsm;
				break;
			case RMobilePhone::ENetworkModeAmps:
				tempInfo->iMode=CTelephony::ENetworkModeAmps;
				break;			
			case RMobilePhone::ENetworkModeCdma95:
				tempInfo->iMode=CTelephony::ENetworkModeCdma95;
				break;
			case RMobilePhone::ENetworkModeCdma2000:
				tempInfo->iMode=CTelephony::ENetworkModeCdma2000;
				break;
			case RMobilePhone::ENetworkModeWcdma:
				tempInfo->iMode=CTelephony::ENetworkModeWcdma;
				break;
			case RMobilePhone::ENetworkModeTdcdma:
				tempInfo->iMode=CTelephony::ENetworkModeTdcdma;
				break;
			default:
				tempInfo->iMode=CTelephony::ENetworkModeUnknown;
			}	

		switch(aMMNetworkInfo->iStatus)
			{
			case RMobilePhone::ENetworkStatusUnknown: 
				tempInfo->iStatus=CTelephony::ENetworkStatusUnknown;
				break;
			case RMobilePhone::ENetworkStatusAvailable:
				tempInfo->iStatus=CTelephony::ENetworkStatusAvailable;
				break;
			case RMobilePhone::ENetworkStatusCurrent:
				tempInfo->iStatus=CTelephony::ENetworkStatusCurrent;
				break;
			case RMobilePhone::ENetworkStatusForbidden:
				tempInfo->iStatus=CTelephony::ENetworkStatusForbidden;
				break;			
			default:
				tempInfo->iStatus=CTelephony::ENetworkStatusUnknown;
			}	
				
		switch(aMMNetworkInfo->iBandInfo)
			{
			case RMobilePhone::EBandUnknown: 
				tempInfo->iBandInfo=CTelephony::EBandUnknown;
				break;
			case RMobilePhone::E800BandA:
				tempInfo->iBandInfo=CTelephony::E800BandA;
				break;
			case RMobilePhone::E800BandB:
				tempInfo->iBandInfo=CTelephony::E800BandB;
				break;
			case RMobilePhone::E800BandC:
				tempInfo->iBandInfo=CTelephony::E800BandC;
				break;			
			case RMobilePhone::E1900BandA:
				tempInfo->iBandInfo=CTelephony::E1900BandA;
				break;
			case RMobilePhone::E1900BandB:
				tempInfo->iBandInfo=CTelephony::E1900BandB;
				break;
			case RMobilePhone::E1900BandC:
				tempInfo->iBandInfo=CTelephony::E1900BandC;
				break;
			case RMobilePhone::E1900BandD:
				tempInfo->iBandInfo=CTelephony::E1900BandD;
				break;
			case RMobilePhone::E1900BandE:
				tempInfo->iBandInfo=CTelephony::E1900BandE;
				break;
			case RMobilePhone::E1900BandF:
				tempInfo->iBandInfo=CTelephony::E1900BandF;
				break;
			default:
				tempInfo->iBandInfo=CTelephony::EBandUnknown;
			}			
		
		tempInfo->iCountryCode.Copy(aMMNetworkInfo->iCountryCode);
		tempInfo->iNetworkId.Copy(aMMNetworkInfo->iNetworkId);
		tempInfo->iDisplayTag.Copy(aMMNetworkInfo->iDisplayTag);
		
		TInt maxLength = tempInfo->iShortName.MaxLength();
		if (aMMNetworkInfo->iShortName.Length() > maxLength)
			{
			tempInfo->iShortName.Copy(aMMNetworkInfo->iShortName.Ptr(), maxLength);
			}
		else
			{
			tempInfo->iShortName.Copy(aMMNetworkInfo->iShortName);		
			}
		
		maxLength = tempInfo->iLongName.MaxLength();

		if (aMMNetworkInfo->iLongName.Length() > maxLength)
			{
			tempInfo->iLongName.Copy(aMMNetworkInfo->iLongName.Ptr(), maxLength);
			}
		else
			{
			tempInfo->iLongName.Copy(aMMNetworkInfo->iLongName);	
			}
		
		tempInfo->iCdmaSID.Copy(aMMNetworkInfo->iCdmaSID);
		
		if(aMMArea)
			{
			tempInfo->iAreaKnown=aMMArea->iAreaKnown;
			tempInfo->iLocationAreaCode=aMMArea->iLocationAreaCode;
			tempInfo->iCellId=aMMArea->iCellId;	
			}
		else
			{
			tempInfo->iAreaKnown=EFalse;
			tempInfo->iLocationAreaCode=0;
			tempInfo->iCellId=0;	
			}
		
		//check which paramater class version this is.		
		switch(aMMNetworkInfo->iAccess)
			{
			case RMobilePhone::ENetworkAccessUnknown: 
				tempInfo->iAccess=CTelephony::ENetworkAccessUnknown;
				break;
			case RMobilePhone::ENetworkAccessGsm:
				tempInfo->iAccess=CTelephony::ENetworkAccessGsm;
				break;
			case RMobilePhone::ENetworkAccessGsmCompact:
				tempInfo->iAccess=CTelephony::ENetworkAccessGsmCompact;
				break;
			case RMobilePhone::ENetworkAccessUtran:
				tempInfo->iAccess=CTelephony::ENetworkAccessUtran;
				break;			
			default:
				tempInfo->iAccess=CTelephony::ENetworkAccessUnknown;
			}						
			
		}
		break;
	case CTelephony::KEtelISVV2:
		{
		CTelephony::TNetworkInfoV2* tempInfo = reinterpret_cast<CTelephony::TNetworkInfoV2*>(aISVNetworkInfo);
		switch(aMMNetworkInfo->iMode)
			{
			case RMobilePhone::ENetworkModeUnknown: 
				tempInfo->iMode=CTelephony::ENetworkModeUnknown;
				break;
			case RMobilePhone::ENetworkModeUnregistered:
				tempInfo->iMode=CTelephony::ENetworkModeUnregistered;
				break;
			case RMobilePhone::ENetworkModeGsm:
				tempInfo->iMode=CTelephony::ENetworkModeGsm;
				break;
			case RMobilePhone::ENetworkModeAmps:
				tempInfo->iMode=CTelephony::ENetworkModeAmps;
				break;			
			case RMobilePhone::ENetworkModeCdma95:
				tempInfo->iMode=CTelephony::ENetworkModeCdma95;
				break;
			case RMobilePhone::ENetworkModeCdma2000:
				tempInfo->iMode=CTelephony::ENetworkModeCdma2000;
				break;
			case RMobilePhone::ENetworkModeWcdma:
				tempInfo->iMode=CTelephony::ENetworkModeWcdma;
				break;
			case RMobilePhone::ENetworkModeTdcdma:
				tempInfo->iMode=CTelephony::ENetworkModeTdcdma;
				break;
			default:
				tempInfo->iMode=CTelephony::ENetworkModeUnknown;
			}	

		switch(aMMNetworkInfo->iStatus)
			{
			case RMobilePhone::ENetworkStatusUnknown: 
				tempInfo->iStatus=CTelephony::ENetworkStatusUnknown;
				break;
			case RMobilePhone::ENetworkStatusAvailable:
				tempInfo->iStatus=CTelephony::ENetworkStatusAvailable;
				break;
			case RMobilePhone::ENetworkStatusCurrent:
				tempInfo->iStatus=CTelephony::ENetworkStatusCurrent;
				break;
			case RMobilePhone::ENetworkStatusForbidden:
				tempInfo->iStatus=CTelephony::ENetworkStatusForbidden;
				break;			
			default:
				tempInfo->iStatus=CTelephony::ENetworkStatusUnknown;
			}	
				
		switch(aMMNetworkInfo->iBandInfo)
			{
			case RMobilePhone::EBandUnknown: 
				tempInfo->iBandInfo=CTelephony::EBandUnknown;
				break;
			case RMobilePhone::E800BandA:
				tempInfo->iBandInfo=CTelephony::E800BandA;
				break;
			case RMobilePhone::E800BandB:
				tempInfo->iBandInfo=CTelephony::E800BandB;
				break;
			case RMobilePhone::E800BandC:
				tempInfo->iBandInfo=CTelephony::E800BandC;
				break;			
			case RMobilePhone::E1900BandA:
				tempInfo->iBandInfo=CTelephony::E1900BandA;
				break;
			case RMobilePhone::E1900BandB:
				tempInfo->iBandInfo=CTelephony::E1900BandB;
				break;
			case RMobilePhone::E1900BandC:
				tempInfo->iBandInfo=CTelephony::E1900BandC;
				break;
			case RMobilePhone::E1900BandD:
				tempInfo->iBandInfo=CTelephony::E1900BandD;
				break;
			case RMobilePhone::E1900BandE:
				tempInfo->iBandInfo=CTelephony::E1900BandE;
				break;
			case RMobilePhone::E1900BandF:
				tempInfo->iBandInfo=CTelephony::E1900BandF;
				break;
			default:
				tempInfo->iBandInfo=CTelephony::EBandUnknown;
			}			
		
		tempInfo->iCountryCode.Copy(aMMNetworkInfo->iCountryCode);
		tempInfo->iNetworkId.Copy(aMMNetworkInfo->iNetworkId);
		tempInfo->iDisplayTag.Copy(aMMNetworkInfo->iDisplayTag);
		
		TInt maxLength = tempInfo->iShortName.MaxLength();
		if (aMMNetworkInfo->iShortName.Length() > maxLength)
			{
			tempInfo->iShortName.Copy(aMMNetworkInfo->iShortName.Ptr(), maxLength);
			}
		else
			{
			tempInfo->iShortName.Copy(aMMNetworkInfo->iShortName);		
			}
		
		maxLength = tempInfo->iLongName.MaxLength();
		if (aMMNetworkInfo->iLongName.Length() > maxLength)
			{
			tempInfo->iLongName.Copy(aMMNetworkInfo->iLongName.Ptr(), maxLength);
			}
		else
			{
			tempInfo->iLongName.Copy(aMMNetworkInfo->iLongName);	
			}
		
		tempInfo->iCdmaSID.Copy(aMMNetworkInfo->iCdmaSID);
		
		if(aMMArea)
			{
			tempInfo->iAreaKnown=aMMArea->iAreaKnown;
			tempInfo->iLocationAreaCode=aMMArea->iLocationAreaCode;
			tempInfo->iCellId=aMMArea->iCellId;	
			}
		else
			{
			tempInfo->iAreaKnown=EFalse;
			tempInfo->iLocationAreaCode=0;
			tempInfo->iCellId=0;	
			}
		
		//check which paramater class version this is.		
		switch(aMMNetworkInfo->iAccess)
			{
			case RMobilePhone::ENetworkAccessUnknown: 
				tempInfo->iAccess=CTelephony::ENetworkAccessUnknown;
				break;
			case RMobilePhone::ENetworkAccessGsm:
				tempInfo->iAccess=CTelephony::ENetworkAccessGsm;
				break;
			case RMobilePhone::ENetworkAccessGsmCompact:
				tempInfo->iAccess=CTelephony::ENetworkAccessGsmCompact;
				break;
			case RMobilePhone::ENetworkAccessUtran:
				tempInfo->iAccess=CTelephony::ENetworkAccessUtran;
				break;			
			default:
				tempInfo->iAccess=CTelephony::ENetworkAccessUnknown;
			}		
		}
		break;
		}
	}

CGetCurrentNetworkInfoAct::CGetCurrentNetworkInfoAct(CTelephonyFunctions* aTelephonyFunctions)
: CAsyncRequestBaseAct(),
  iTelephonyFunctions(aTelephonyFunctions),
  iMMNetworkInfoPckg(iMMNetworkInfo)
/**
First-phase constructor which cannot Leave().

@param	aTelephonyFunctions Object that constructs us.
*/
	{
	}


CGetCurrentNetworkNameAct* CGetCurrentNetworkNameAct::NewL(CTelephonyFunctions* aTelephonyFunctions)
/**
Public constructor which can Leave().

@param	aTelephonyFunctions Object that constructs us.
@leave	Leaves if no memory.
*/
	{
	CGetCurrentNetworkNameAct* self = new(ELeave) CGetCurrentNetworkNameAct(aTelephonyFunctions);
	CActiveScheduler::Add(self);
	return self;
	}
	
CGetCurrentNetworkNameAct::~CGetCurrentNetworkNameAct()
/**
Destructor
*/
	{
	Cancel();
	Complete();
	}

void CGetCurrentNetworkNameAct::GetCurrentNetworkName(TDes8& aPckg)
/**
Issue Request
*/
	{
	iISVCurrentNetworkName = reinterpret_cast<CTelephony::TEtelISVType*> ( const_cast<TUint8*> (aPckg.Ptr()) );

	iTelephonyFunctions->Phone()->GetCurrentNetworkName(iStatus, iMMNetworkNameV3Pckg, iLocInfoPckg);
	SetActive();
	}

void CGetCurrentNetworkNameAct::Complete()
/**
Service Completed request.
*/
	{
	if(iTelephonyFunctions->IsRequestPending(CTelephonyFunctions::EGetCurrentNetworkName))
		{
		if(iStatus==KErrNone)
			{
			switch(iISVCurrentNetworkName->VersionId())
				{
			case CTelephony::KEtelISVV1:
				{
				CTelephony::TNetworkNameV1* tempNetName = reinterpret_cast<CTelephony::TNetworkNameV1*>(iISVCurrentNetworkName);
				TInt maxLength = tempNetName->iNetworkName.MaxLength();
				if (iMMNetworkNameV3.iLongName.Length() > maxLength)
					{
					tempNetName->iNetworkName.Copy(iMMNetworkNameV3.iLongName.Ptr(), maxLength);
					}
				else
					{
					tempNetName->iNetworkName.Copy(iMMNetworkNameV3.iLongName);		
					}
				}
				break;
			case CTelephony::KEtelISVV2:
				{
				CTelephony::TNetworkNameV2* tempNetName = reinterpret_cast<CTelephony::TNetworkNameV2*>(iISVCurrentNetworkName);
				TInt maxLength = tempNetName->iNetworkName.MaxLength();
				if (iMMNetworkNameV3.iLongName.Length() > maxLength)
					{
					tempNetName->iNetworkName.Copy(iMMNetworkNameV3.iLongName.Ptr(), maxLength);
					}
				else
					{
					tempNetName->iNetworkName.Copy(iMMNetworkNameV3.iLongName);		
					}	
				}
				break;
				}

			}
		iTelephonyFunctions->CompleteRequest(CTelephonyFunctions::EGetCurrentNetworkName, iStatus.Int());
		}
	}


TInt CGetCurrentNetworkNameAct::RunError(TInt aLeaveCode)
/**
Handle any Leave() from inside RunL().

@param	aLeaveCode	passed in if RunL Leaves.
@return	KErrNone.
*/
	{
	iTelephonyFunctions->CompleteRequest(CTelephonyFunctions::EGetCurrentNetworkName, aLeaveCode);
	return KErrNone;	// to ActiveScheduler.
	}

void CGetCurrentNetworkNameAct::DoCancel()
/**
Cancel request.

Async request to dial is cancelled.
*/
	{
	iTelephonyFunctions->Phone()->CancelAsyncRequest(EMobilePhoneGetNetworkName);
	}


CGetCurrentNetworkNameAct::CGetCurrentNetworkNameAct(CTelephonyFunctions* aTelephonyFunctions)
: CAsyncRequestBaseAct(),
  iTelephonyFunctions(aTelephonyFunctions),
  iMMNetworkNameV3Pckg(iMMNetworkNameV3),
  iLocInfoPckg(iLocInfo)
/**
First-phase constructor which cannot Leave().

@param	aTelephonyFunctions Object that constructs us.
*/
	{
	}


CGetOperatorNameAct* CGetOperatorNameAct::NewL(CTelephonyFunctions* aTelephonyFunctions)
/**
Public constructor which can Leave().

@param	aTelephonyFunctions Object that constructs us.
@leave	Leaves if no memory.
*/
	{
	CGetOperatorNameAct* self = new(ELeave) CGetOperatorNameAct(aTelephonyFunctions);
	CActiveScheduler::Add(self);
	return self;
	}
	
CGetOperatorNameAct::~CGetOperatorNameAct()
/**
Destructor
*/
	{
	Cancel();
	Complete();
	}

void CGetOperatorNameAct::GetOperatorName(TDes8& aId)
/**
Issue Request
*/
	{
	iISVOperatorName = reinterpret_cast<CTelephony::TOperatorNameV1*> ( const_cast<TUint8*> (aId.Ptr()) );
	iTelephonyFunctions->Phone()->GetServiceProviderName(iStatus, iMMServiceProviderNamePckg);
	SetActive();
	}

void CGetOperatorNameAct::Complete()
/**
Service Completed request.
*/
	{
	if(iTelephonyFunctions->IsRequestPending(CTelephonyFunctions::EGetOperatorName))
		{
		if(iStatus==KErrNone)
			{
			TInt maxLength = iISVOperatorName->iOperatorName.MaxLength();
			if (iMMServiceProviderName.iSPName.Length() > maxLength)
				{
				iISVOperatorName->iOperatorName.Copy(iMMServiceProviderName.iSPName.Ptr(), maxLength);
				}
			else
				{
				iISVOperatorName->iOperatorName.Copy(iMMServiceProviderName.iSPName);
				}
			}
		iTelephonyFunctions->CompleteRequest(CTelephonyFunctions::EGetOperatorName, iStatus.Int());
		}
	}


TInt CGetOperatorNameAct::RunError(TInt aLeaveCode)
/**
Handle any Leave() from inside RunL().

@param	aLeaveCode	passed in if RunL Leaves.
@return	KErrNone.
*/
	{
	iTelephonyFunctions->CompleteRequest(CTelephonyFunctions::EGetOperatorName, aLeaveCode);
	return KErrNone;	// to ActiveScheduler.
	}

void CGetOperatorNameAct::DoCancel()
/**
Cancel request.

Async request to dial is cancelled.
*/
	{
	iTelephonyFunctions->Phone()->CancelAsyncRequest(EMobilePhoneGetServiceProviderName);
	}


CGetOperatorNameAct::CGetOperatorNameAct(CTelephonyFunctions* aTelephonyFunctions)
: CAsyncRequestBaseAct(),
  iTelephonyFunctions(aTelephonyFunctions),
  iMMServiceProviderNamePckg(iMMServiceProviderName)
/**
First-phase constructor which cannot Leave().

@param	aTelephonyFunctions Object that constructs us.
*/
	{
	}



CNotifyNetworkRegistrationStatusAct* CNotifyNetworkRegistrationStatusAct::NewL(CTelephonyFunctions* aTelephonyFunctions)
/**
Public constructor which can Leave().

@param	aTelephonyFunctions Object that constructs us.
@leave	Leaves if no memory.
*/
	{
	CNotifyNetworkRegistrationStatusAct* self = new(ELeave) CNotifyNetworkRegistrationStatusAct(aTelephonyFunctions);
	CActiveScheduler::Add(self);
	return self;
	}

CNotifyNetworkRegistrationStatusAct::~CNotifyNetworkRegistrationStatusAct()
/**
Destructor
*/
	{
	Cancel();
	Complete();
	}

void CNotifyNetworkRegistrationStatusAct::NotifyNetworkRegistrationStatus(TDes8& aId)
/**
Issue Request
*/
	{
	iISVNetworkRegistration = reinterpret_cast<CTelephony::TNetworkRegistrationV1*> ( const_cast<TUint8*> (aId.Ptr()) );
	iTelephonyFunctions->Phone()->NotifyNetworkRegistrationStatusChange(iStatus, iMMNetworkRegistration);
	SetActive();
	}

void CNotifyNetworkRegistrationStatusAct::Complete()
/**
Service Completed request.
*/
	{
	if(iTelephonyFunctions->IsRequestPending(CTelephonyFunctions::ENotifyNetworkRegistrationStatus))
		{
		if(iStatus==KErrNone)
			{
			CGetNetworkRegistrationStatusAct::GetRegistrationStatus(iMMNetworkRegistration, iISVNetworkRegistration->iRegStatus);
			}
		iTelephonyFunctions->CompleteRequest(CTelephonyFunctions::ENotifyNetworkRegistrationStatus, iStatus.Int());
		}
	}

TInt CNotifyNetworkRegistrationStatusAct::RunError(TInt aLeaveCode)
/**
Handle any Leave() from inside RunL().

@param	aLeaveCode	passed in if RunL Leaves.
@return	KErrNone.
*/
	{
	iTelephonyFunctions->CompleteRequest(CTelephonyFunctions::ENotifyNetworkRegistrationStatus, aLeaveCode);
	return KErrNone;	// to ActiveScheduler.
	}

void CNotifyNetworkRegistrationStatusAct::DoCancel()
/**
Cancel request.

Async request to dial is cancelled.
*/
	{
	iTelephonyFunctions->Phone()->CancelAsyncRequest(EMobilePhoneNotifyNetworkRegistrationStatusChange);
	}


CNotifyNetworkRegistrationStatusAct::CNotifyNetworkRegistrationStatusAct(CTelephonyFunctions* aTelephonyFunctions)
: CAsyncRequestBaseAct(),
  iTelephonyFunctions(aTelephonyFunctions)
/**
First-phase constructor which cannot Leave().

@param	aTelephonyFunctions Object that constructs us.
*/
	{
	}
	

CNotifyCurrentNetworkInfoAct* CNotifyCurrentNetworkInfoAct::NewL(CTelephonyFunctions* aTelephonyFunctions)
/**
Public constructor which can Leave().

@param	aTelephonyFunctions Object that constructs us.
@leave	Leaves if no memory.
*/
	{
	CNotifyCurrentNetworkInfoAct* self = new(ELeave) CNotifyCurrentNetworkInfoAct(aTelephonyFunctions);
	CActiveScheduler::Add(self);
	return self;
	}

CNotifyCurrentNetworkInfoAct::~CNotifyCurrentNetworkInfoAct()
/**
Destructor
*/
	{
	Cancel();
	Complete();
	}

void CNotifyCurrentNetworkInfoAct::NotifyCurrentNetworkInfo(TDes8& aPckg)
/**
Issue Request
*/
	{
	iISVNetworkInfo = reinterpret_cast<CTelephony::TEtelISVType*> ( const_cast<TUint8*> (aPckg.Ptr()) );

	iPostedIPC = EMobilePhoneNotifyCurrentNetworkChange;
	iTelephonyFunctions->Phone()->NotifyCurrentNetworkChange(iStatus,iMMNetworkInfoPckg, iMMArea);

	SetActive();
	}

/**
Service Completed request.
*/
void CNotifyCurrentNetworkInfoAct::Complete()
	{
	if(iTelephonyFunctions->IsRequestPending(CTelephonyFunctions::ENotifyCurrentNetworkInfo))
		{
		if(iStatus==KErrNone)
			{
			CGetCurrentNetworkInfoAct::MapNetworkInfo(iISVNetworkInfo, &iMMNetworkInfo, &iMMArea);
			}
		iTelephonyFunctions->CompleteRequest(CTelephonyFunctions::ENotifyCurrentNetworkInfo, iStatus.Int());
		}
	}


TInt CNotifyCurrentNetworkInfoAct::RunError(TInt aLeaveCode)
/**
Handle any Leave() from inside RunL().

@param	aLeaveCode	passed in if RunL Leaves.
@return	KErrNone.
*/
	{
	iTelephonyFunctions->CompleteRequest(CTelephonyFunctions::ENotifyCurrentNetworkInfo, aLeaveCode);
	return KErrNone;	// to ActiveScheduler.
	}

void CNotifyCurrentNetworkInfoAct::DoCancel()
/**
Cancel request.

Async request to dial is cancelled.
*/
	{
	iTelephonyFunctions->Phone()->CancelAsyncRequest(iPostedIPC);
	}


CNotifyCurrentNetworkInfoAct::CNotifyCurrentNetworkInfoAct(CTelephonyFunctions* aTelephonyFunctions)
: CAsyncRequestBaseAct(),
  iTelephonyFunctions(aTelephonyFunctions),
  iMMNetworkInfoPckg(iMMNetworkInfo)
/**
First-phase constructor which cannot Leave().

@param	aTelephonyFunctions Object that constructs us.
*/
	{
	}