diff -r 675a964f4eb5 -r 35751d3474b7 authorisation/userpromptservice/examples/integration/tmsgapp/tmsgapp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/authorisation/userpromptservice/examples/integration/tmsgapp/tmsgapp.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -0,0 +1,212 @@ +/* +* Copyright (c) 2007-2009 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: +* Example Code +* +*/ + + +#include "tmsgapp.h" +#include +#include + +// UPS client library is only included to allow the test application +// to reset its decision records. +#include + +_LIT(KTo, "+442071541000"); +_LIT_SECURE_ID(KMySecureId, 0x01000003); + +// CAlarm ******************************************************************** +inline CAlarm::CAlarm() :CTimer(-1) {CActiveScheduler::Add(this);} +inline void CAlarm::ConstructL() {CTimer::ConstructL();} + +void CAlarm::RunL() + { + iObserver->WakeupL(); + } + +void CAlarm::After(MAlarmObserver* aObserver, TTimeIntervalMicroSeconds32 aInterval) + { + iObserver = aObserver; + CTimer::After(aInterval); + } + +// CSendMessages ************************************************************* +CSendMessages::CSendMessages() : CActive(EPriorityStandard) + { + CActiveScheduler::Add(this); + } + +CSendMessages::~CSendMessages() + { + Deque(); + iMsgCon.Close(); + } + +CSendMessages* CSendMessages::NewLC() + { + CSendMessages* self = new(ELeave) CSendMessages(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +void CSendMessages::ConstructL() + { + iAlarm.ConstructL(); + User::LeaveIfError(iMsgCon.Connect()); + TRequestStatus* status = &iStatus; + *status = KRequestPending; + SetActive(); + User::RequestComplete(status, KErrNone); + } + +TInt CSendMessages::RunError(TInt /* aError */) + { + CActiveScheduler::Stop(); // Non-recoverable error + return KErrNone; + } + +void CSendMessages::DoCancel() + { + iMsgCon.CancelSendMsg(); + iAlarm.Cancel(); + } + +void CSendMessages::WakeupL() +/** + * Timeout the pending message. + */ + { + iMsgCon.CancelSendMsg(); + } + +void CSendMessages::RunL() +/** + * Send a series of test messages and cancellations that should trigger + * user prompts. + * All test cases timeout after KDefaultTimeout to enable automated tests + */ + { + TInt err = iStatus.Int(); + if (iStatus != KErrNone && iStatus != KErrCancel && iStatus != KErrPermissionDenied) + { + User::Leave(err); + } + iAlarm.Cancel(); + + RDebug::Printf("Test %d completed with error %d", iTestNum, 0); + + ++iTestNum; // move on to next test case + switch (iTestNum) + { + case 1: + { + // Send message and wait for user prompt to complete + _LIT(KBody, "Hello"); + iMsgCon.SendMsg(KTo, KBody, iStatus); + SetActive(); + iAlarm.After(this, KDefaultTimeout); + break; + } + case 2: + { + // Send a message and cancel straight away, should be no user prompt + _LIT(KBody, "Hello - Cancel immediate"); + iMsgCon.SendMsg(KTo, KBody, iStatus); + SetActive(); + iAlarm.After(this, 1); + break; + } + case 3: + { + // Send a message and attempt to cancel whilst the user prompt is being displayed. + _LIT(KBody, "Hello - Cancel 5 secs"); + iMsgCon.SendMsg(KTo, KBody, iStatus); + SetActive(); + iAlarm.After(this, 5 * 1000 * 1000); + break; + } + case 4: + { + // Force the message server to exit + iMsgCon.Close(); + _LIT(KInfo, "Waiting for messageserver to exit"); + User::InfoPrint(KInfo); + User::After(5 * 1000 * 1000); + User::LeaveIfError(iMsgCon.Connect()); // reconnect + + // Send a message to the new server instance + _LIT(KBody, "Hello again"); + iMsgCon.SendMsg(KTo, KBody, iStatus); + SetActive(); + iAlarm.After(this, KDefaultTimeout); + break; + } + default: + // All done + CActiveScheduler::Stop(); + break; + } + } + +void DeleteOldDecisionsL() +/** + * Delete all decision records for this test application + */ + { + UserPromptService::RUpsManagement m; + CleanupClosePushL(m); + User::LeaveIfError(m.Connect()); + UserPromptService::CDecisionFilter* f = UserPromptService::CDecisionFilter::NewLC(); + f->SetClientSid(KMySecureId, UserPromptService::EEqual); + m.RemoveDecisionsL(*f); + CleanupStack::PopAndDestroy(2, &m); // m, f + } + +void MainL() + { + // Create active scheduler, reset UPS and start tests + CActiveScheduler* s=new(ELeave) CActiveScheduler; + CleanupStack::PushL(s); + CActiveScheduler::Install(s); + DeleteOldDecisionsL(); // reset decision database + CSendMessages* test = CSendMessages::NewLC(); + s->Start(); + CleanupStack::PopAndDestroy(2, s); // s, test + + // Add log file for automated test environment + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + RFile log; + CleanupClosePushL(log); + User::LeaveIfError(log.Replace(fs, _L("c:\\tmsgapp.log"), EFileShareAny|EFileWrite)); + User::LeaveIfError(log.Write(_L8("\n\n0 tests failed out of 1\n"))); + CleanupStack::PopAndDestroy(2, &fs); + } + +GLDEF_C TInt E32Main() + { + CTrapCleanup* cleanup = CTrapCleanup::New(); + if(cleanup == NULL) + { + return KErrNoMemory; + } + TRAP_IGNORE(MainL()); + delete cleanup; + return KErrNone; + } +