commsprocess/commsrootserverconfig/TE_rootserver/src/TestAsynchHandler.cpp
author hgs
Mon, 13 Sep 2010 15:06:46 +0100
changeset 77 c9776eadbffd
parent 72 ae47d0499bee
permissions -rw-r--r--
201035_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     1
// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     2
// All rights reserved.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     7
//
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     8
// Initial Contributors:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    10
//
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    11
// Contributors:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    12
//
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    13
// Description:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    14
//
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    15
// This contains CTestAsynchHandler which is an active object to
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    16
// handle the asynch calls from the RootServer during testing
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    17
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    18
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    19
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    20
// EPOC includes
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    21
#include <e32base.h>
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    22
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    23
// RootServer includes
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    24
#include "rsshared.h"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    25
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    26
// Test system includes
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    27
#include "TestAsynchHandler.h"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    28
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    29
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    30
CTestAsynchHandler* CTestAsynchHandler::NewLC(RRootServ* aRootServer)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    31
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    32
	CTestAsynchHandler* self = new(ELeave) CTestAsynchHandler;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    33
	CleanupStack::PushL(self);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    34
	self->ConstructL(aRootServer);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    35
	return self;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    36
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    37
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    38
CTestAsynchHandler::CTestAsynchHandler() : CActive(0)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    39
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    40
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    41
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    42
void CTestAsynchHandler::ConstructL(RRootServ* aRootServer)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    43
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    44
	iState = EIdle;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    45
	iRootServer = aRootServer;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    46
	User::LeaveIfError(iTimer.CreateLocal());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    47
	CActiveScheduler::Add(this);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    48
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    49
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    50
CTestAsynchHandler::~CTestAsynchHandler()  
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    51
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    52
	Cancel();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    53
	iTimer.Close();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    54
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    55
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    56
// from CActive
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    57
void CTestAsynchHandler::RunL()     
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    58
	{ 
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    59
	switch(iState)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    60
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    61
		case ELoading:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    62
		case EUnLoading:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    63
		case EBinding:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    64
		case EUnBinding:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    65
		case EListeningforDeath:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    66
		case EWaitingforTimer:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    67
		case EIdle:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    68
		default:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    69
			CActiveScheduler::Stop();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    70
			break;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    71
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    72
	iState = EIdle;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    73
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    74
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    75
void CTestAsynchHandler::DoCancel() 
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    76
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    77
	switch (iState)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    78
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    79
		case EListeningforDeath:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    80
			iPropertyDeath.Cancel();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    81
			break;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    82
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    83
		case EWaitingforTimer:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    84
			iTimer.Cancel();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    85
			break;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    86
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    87
		case ELoading:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    88
		case EIdle:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    89
		default:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    90
			break;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    91
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    92
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    93
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    94
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    95
// requests
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    96
void CTestAsynchHandler::TryLoad(const TRSStartModuleParams& aParams, 
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    97
									   const TDesC8& aIniData)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    98
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    99
    iState = ELoading;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   100
	iRootServer->LoadCpm(iStatus, aParams, aIniData);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   101
	SetActive();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   102
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   103
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   104
void CTestAsynchHandler::TryUnLoad(const TCFModuleName& aName, TRSUnLoadType aType)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   105
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   106
  	iState = EUnLoading;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   107
	iRootServer->UnloadCpm(iStatus, aName, aType);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   108
	SetActive();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   109
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   110
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   111
void CTestAsynchHandler::TryBind( TRSBindingInfo& aBindInfo )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   112
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   113
	iState = EBinding;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   114
	iRootServer->Bind( iStatus, aBindInfo );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   115
	SetActive();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   116
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   117
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   118
void CTestAsynchHandler::TryUnBind( TRSUnBindingInfo& aUnbindInfo )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   119
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   120
	iState = EUnBinding;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   121
	iRootServer->Unbind( iStatus, aUnbindInfo );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   122
	SetActive();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   123
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   124
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   125
void CTestAsynchHandler::TryWaitForDeath(void)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   126
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   127
	iState = EListeningforDeath;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   128
	TInt result = iPropertyDeath.Attach( KUidSystemCategory,KUidC32RootModuleDeathKey.iUid );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   129
	if(result != KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   130
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   131
		_LIT( KAsynch, "Asynch" );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   132
		User::Panic( KAsynch, result );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   133
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   134
	iPropertyDeath.Subscribe( iStatus );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   135
	SetActive();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   136
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   137
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   138
void CTestAsynchHandler::TryCancelDeath()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   139
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   140
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   141
	// we are already active cos we are waiting on our subscription
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   142
	// therefore we will simply cancel the property subscription
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   143
	iState=EIdle;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   144
	DoCancel();	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   145
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   146
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   147
void CTestAsynchHandler::WaitForTimer(TInt aTimeout_ms)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   148
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   149
	iState = EWaitingforTimer;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   150
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   151
	DoCancel(); // in case timer already running
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   152
	iTimer.After(iStatus, aTimeout_ms * 1000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   153
	SetActive();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   154
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   155
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   156