phoneclientserver/phoneclient/tsrc/public/basic/ut_ussd/etel_mock.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:45:17 +0300
branchRCL_3
changeset 19 7d48bed6ce0c
permissions -rw-r--r--
Revision: 201033 Kit: 201035



#include "ut_testenv.h"
#include <etel.h>
#include <etelmm.h>
#include <etelmmcs.h>
#include <QTest>


// global variables
CPeriodic* messageResponseTimer = 0;

// ==============================================================================
// RMobileUssdMessaging
// ==============================================================================

RMobileUssdMessaging::RMobileUssdMessaging()
{
}

RMobileUssdMessaging::RMobileUssdMessaging(const RMobileUssdMessaging&)
{
}

void RMobileUssdMessaging::ConstructL()
{
	QVERIFY(!messageResponseTimer);
    messageResponseTimer =
		CPeriodic::NewL(CActive::EPriorityStandard+1);
}

TInt RMobileUssdMessaging::Open(RMobilePhone& /*aPhone*/)
{
	TRAPD(err,ConstructL());
    return err;
}

void RMobileUssdMessaging::Close()
{
	delete messageResponseTimer;
	messageResponseTimer = 0;
}

void RMobileUssdMessaging::Destruct()
{
}

TInt RMobileUssdMessaging::GetCaps(TDes8& aCaps) const
{
    TMobileUssdCapsV1 caps;
    caps.iUssdFormat = KCapsPackedString;
    caps.iUssdTypes = KCapsMTUssd | KCapsMOUssd;
    TMobileUssdCapsV1Pckg pckgCaps( caps );
    aCaps.Copy( pckgCaps );
    return KErrNone;
}

void RMobileUssdMessaging::ReceiveMessage(
    TRequestStatus& aReqStatus, TDes8& aMsgData,
    TDes8& aMsgAttributes) const
{
	EtelMsgLoop& loop = TestEnv::env().etelMsgLoop();
    QVERIFY2(!loop.mReceiveMessageReqStatus,
    		"etel_mock: ReceiveMessage called twice!");
    aReqStatus = KRequestPending;
    loop.mReceiveMessageReqStatus = &aReqStatus;
	loop.mReceiveMessageData = &aMsgData;
	loop.mReceiveMessageAttributes = &aMsgAttributes;
}

TInt SendMessageCallback(TAny* /*aPtr*/)
	{
	messageResponseTimer->Cancel();

	EtelMsgLoop& loop = TestEnv::env().etelMsgLoop();
    const TestMode& mode = TestEnv::env().testMode();
    if (mode.m_event == TestMode::Normal)
    	{
    	User::RequestComplete(loop.mSendMessageReqStatus, mode.m_error);
    	}
    return 0;
	}

void RMobileUssdMessaging::SendMessage(
    TRequestStatus& aReqStatus, const TDesC8& /*aMsgData*/,
    const TDesC8& /*aMsgAttributes*/) const
{
	EtelMsgLoop& loop = TestEnv::env().etelMsgLoop();
    QVERIFY2(!loop.mSendMessageReqStatus,
    		"etel_mock: SendMessage called twice!");
    aReqStatus = KRequestPending;
    loop.mSendMessageReqStatus = &aReqStatus;

    const TestMode& mode = TestEnv::env().testMode();
    if (mode.m_event != TestMode::NoResp)
    	{
		// start timer to respond
		TTimeIntervalMicroSeconds32 delay(
				1000*mode.m_timeout);
		messageResponseTimer->Start(delay,delay,
				TCallBack(SendMessageCallback,(TAny*)this));
    	}
}

void RMobileUssdMessaging::SendMessageNoFdnCheck(
    TRequestStatus& /*aReqStatus*/, const TDesC8& /*aMsgData*/,
    const TDesC8& /*aMsgAttributes*/) const
{
	// not used
}

void RMobileUssdMessaging::SendRelease(
    TRequestStatus& /*aReqStatus*/, TDes8& /*aReturnResult*/) const
{
	// not used
}

void RMobileUssdMessaging::NotifyNetworkRelease(
    TRequestStatus& aReqStatus, TDes8& aReturnResult) const
{
	EtelMsgLoop& loop = TestEnv::env().etelMsgLoop();
    QVERIFY2(!loop.mNetworkReleaseReqStatus,
    		"etel_mock: NotifyNetworkRelease called twice!");
    aReqStatus = KRequestPending;
    loop.mNetworkReleaseReqStatus = &aReqStatus;
	loop.mNetworkReleaseMessageData = &aReturnResult;
	loop.mNetworkReleaseMessageAttributes = 0;
}

void RMobileUssdMessaging::NotifyNetworkRelease(
    TRequestStatus& aReqStatus, TDes8& aMsgData,
    TDes8& aMsgAttributes) const
{
	EtelMsgLoop& loop = TestEnv::env().etelMsgLoop();
    QVERIFY2(!loop.mNetworkReleaseReqStatus,
    		"etel_mock: NotifyNetworkRelease called twice!");
    aReqStatus = KRequestPending;
    loop.mNetworkReleaseReqStatus = &aReqStatus;
	loop.mNetworkReleaseMessageData = &aMsgData;
	loop.mNetworkReleaseMessageAttributes = &aMsgAttributes;
}


RMobileUssdMessaging::TMobileUssdAttributesV1::TMobileUssdAttributesV1()
{
    iFlags = 0;
    iFormat = EFormatUnspecified;
    iType = EUssdUnknown;
    iDcs = 0;
}

RMobileUssdMessaging::TMobileUssdCapsV1::TMobileUssdCapsV1()
{
    iUssdFormat = 0;
    iUssdTypes = 0;
}

// ==============================================================================
// RMobilePhone
// ==============================================================================

RMobilePhone::TMobilePhoneSendSSRequestV3::TMobilePhoneSendSSRequestV3()
{
    iOpCode = 0;
}

RMobilePhone::TMultimodeType::TMultimodeType()
{
    iExtensionId = 0;
}

// ==============================================================================
// RTelSubSessionBase
// ==============================================================================

RTelSubSessionBase::RTelSubSessionBase()
{
}

void RTelSubSessionBase::CancelAsyncRequest(TInt aReqToCancel) const
{
	if ( aReqToCancel == EMobileUssdMessagingSendMessage )
	{
		EtelMsgLoop& loop = TestEnv::env().etelMsgLoop();
		if ( loop.mSendMessageReqStatus )
		{
		User::RequestComplete( loop.mSendMessageReqStatus, KErrCancel );
		}
	}
	else if ( aReqToCancel == EMobileUssdMessagingReceiveMessage )
	{
		EtelMsgLoop& loop = TestEnv::env().etelMsgLoop();
		if ( loop.mReceiveMessageReqStatus )
    	{
        User::RequestComplete( loop.mReceiveMessageReqStatus, KErrCancel );
    	}
	}
	else if ( aReqToCancel == EMobileUssdMessagingNotifyNetworkRelease )
	{
		EtelMsgLoop& loop = TestEnv::env().etelMsgLoop();
		if ( loop.mNetworkReleaseReqStatus )
    	{
        User::RequestComplete( loop.mNetworkReleaseReqStatus, KErrCancel );
    	}
	}
	else if ( aReqToCancel == EMobileUssdMessagingSendRelease )
	{
	// not used
	}
}