diff -r 000000000000 -r 3553901f7fa8 cellularsrvapitest/telephonyhaitest/etelmm/src/T_RMobileConferenceCallData.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cellularsrvapitest/telephonyhaitest/etelmm/src/T_RMobileConferenceCallData.cpp Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,211 @@ +/* +* Copyright (c) 2005-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: +* +*/ + +#include "t_rmobileconferencecalldata.h" +#include + + +_LIT( KNumOfCalls, "NumOfCalls" ); + +_LIT(KMobilePhoneKey, "RMobilePhone"); + +_LIT(KCmdClose, "Close"); +_LIT(KCmdCreateConference, "CreateConference"); +_LIT(KCmdEnumerateCalls, "EnumerateCalls"); +_LIT(KCmdOpen, "Open"); + +/** + * Two phase constructor + * + * @leave system wide error + */ +CT_RMobileConferenceCallData* CT_RMobileConferenceCallData::NewL() + { + CT_RMobileConferenceCallData* ret=new (ELeave) CT_RMobileConferenceCallData(); + CleanupStack::PushL(ret); + ret->ConstructL(); + CleanupStack::Pop(ret); + return ret; + } + + +/** + * Protected constructor. First phase construction + */ +CT_RMobileConferenceCallData::CT_RMobileConferenceCallData() +: iActiveCallback(NULL), + iMobileConferenceCall(NULL) + { + } + +void CT_RMobileConferenceCallData::ConstructL() + { + iMobileConferenceCall = new (ELeave) RMobileConferenceCall(); + iActiveCallback = CActiveCallback::NewL(*this); + } + +/** + * Public destructor + */ +CT_RMobileConferenceCallData::~CT_RMobileConferenceCallData() + { + delete iMobileConferenceCall; + iMobileConferenceCall = NULL; + delete iActiveCallback; + iActiveCallback=NULL; + } + +TAny* CT_RMobileConferenceCallData::GetObject() + { + return iMobileConferenceCall; + } + +void CT_RMobileConferenceCallData::RunL(CActive* aActive, TInt aIndex) + { + DecOutstanding(); // One of the async calls has completed + TInt err = aActive->iStatus.Int(); + if( err != KErrNone ) + { + ERR_PRINTF2(_L("RunL Error %d"), err); + SetAsyncError( aIndex, err ); + } + else + { + INFO_PRINTF1(_L("RunL completed successfully")); + } + } + +TBool CT_RMobileConferenceCallData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex) + { + TBool ret = ETrue; + + if ( aCommand==KCmdClose ) + { + DoCmdClose(); + } + else if ( aCommand==KCmdCreateConference) + { + DoCmdCreateConference(aAsyncErrorIndex); + } + else if ( aCommand==KCmdEnumerateCalls) + { + DoCmdEnumerateCalls(aSection); + } + else if ( aCommand==KCmdOpen) + { + DoCmdOpen(aSection); + } + else + { + ERR_PRINTF1(_L("Unknown command")); + ret = EFalse; + } + + return ret; + } + + + +void CT_RMobileConferenceCallData::DoCmdClose() + { + INFO_PRINTF1(_L("*START*CT_VoiceCallDriverData::DoCmdCloseConferenceCall")); + + iMobileConferenceCall->Close(); + + INFO_PRINTF1(_L("*END*CT_VoiceCallDriverData::DoCmdCloseConferenceCall")); + } + + +void CT_RMobileConferenceCallData::DoCmdCreateConference(const TInt aAsyncErrorIndex) + { + INFO_PRINTF1(_L("*START*CT_VoiceCallDriverData::DoCmdCreateConferenceCall")); + + iMobileConferenceCall->CreateConference(iActiveCallback->iStatus); + iActiveCallback->Activate(aAsyncErrorIndex); + IncOutstanding(); + + INFO_PRINTF1(_L("*END*CT_VoiceCallDriverData::DoCmdCreateConferenceCall")); + } + + +void CT_RMobileConferenceCallData::DoCmdEnumerateCalls(const TTEFFunction& aSection) + { + INFO_PRINTF1(_L("*START*CT_VoiceCallDriverData::DoCmdEnumerateCallsOnConference")); + + TInt expectedCalls; + TInt error(0); + if( !GetIntFromConfig(aSection, KNumOfCalls, expectedCalls) ) + { + ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KNumOfCalls); + SetBlockResult(EFail); + } + else + { + INFO_PRINTF2(_L("Expecting conference call to contain [%d] calls"), expectedCalls); + TInt calls(0); + error = iMobileConferenceCall->EnumerateCalls(calls); + if(error != KErrNone) + { + ERR_PRINTF2(_L("Failed to enumerate calls with error %d"), error); + SetError(error); + } + else + { + INFO_PRINTF2(_L("Conference contained [%d] calls"), calls); + if (expectedCalls != calls) + { + ERR_PRINTF3(_L("Obtained number of calls %d is different from expected number of calls %d"), calls, expectedCalls); + SetBlockResult(EFail); + } + else + { + INFO_PRINTF1(_L("DoCmdEnumerateCallsOnConference succeeded")); + } + } + } + INFO_PRINTF1(_L("*END*CT_VoiceCallDriverData::DoCmdEnumerateCallsOnConference")); + } + +void CT_RMobileConferenceCallData::DoCmdOpen(const TTEFFunction& aSection) + { + INFO_PRINTF1(_L("*START*CT_VoiceCallDriverData::DoCmdOpenConferenceCall")); + + TPtrC mobilePhoneName; + TInt error(0); + if( !GetStringFromConfig(aSection, KMobilePhoneKey, mobilePhoneName)) + { + ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KMobilePhoneKey); + SetBlockResult(EFail); + } + else + { + RMobilePhone* MobilePhoneObject = static_cast(GetDataObjectL(mobilePhoneName)); + error = iMobileConferenceCall->Open(*MobilePhoneObject); + if (error != KErrNone) + { + ERR_PRINTF2(_L("Conference call open failed [%d]"), error); + SetError(error); + } + else + { + INFO_PRINTF1(_L("DoCmdOpenConferenceCall succeeded")); + } + } + INFO_PRINTF1(_L("*END*CT_VoiceCallDriverData::DoCmdOpenConferenceCall")); + } + +