diff -r 000000000000 -r 3553901f7fa8 telephonyserverplugins/common_tsy/commontsy/src/mmutility/CMmTsyBase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserverplugins/common_tsy/commontsy/src/mmutility/CMmTsyBase.cpp Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,295 @@ +// Copyright (c) 2006-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 FILES +#include "CMmTsyBase.h" + +// ======== MEMBER FUNCTIONS ======== + +CMmTsyBase::~CMmTsyBase() + { + } + +CMmTsyBase::CMmTsyBase() + { + } + +// --------------------------------------------------------------------------- +// CMmTsyBase::Init +// Initialisation method that is called from ETel Server. +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CMmTsyBase::Init() + { + TInt iMax = GetMaxNumberOfSubsystems(); + CMmSubTsyBase** subTsyPtr = GetSubsystemArrayPtr(); + + for ( TInt i = 0; iMax > i; i++ ) + { + if( NULL != subTsyPtr[i] ) + { + subTsyPtr[i]->Init(); + } + } + return; + } + +// --------------------------------------------------------------------------- +// CMmTsyBase::Init +// RegisterNotification is called when the server recognises +// that this notification is being posted for the first time on this sub- +// session object. It enables the TSY to "turn on" any regular notification +// messages that it may receive from DOS. +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +TInt CMmTsyBase::RegisterNotification( + const TInt aIpc ) + { + TInt ret = KErrNotSupported; + TInt iMax = GetMaxNumberOfSubsystems(); + CMmSubTsyBase** subTsyPtr = GetSubsystemArrayPtr(); + + for ( TInt i = 0; iMax > i; i++ ) + { + if ( ( NULL != subTsyPtr[i] ) + && ( EFalse != subTsyPtr[i]->SupportingIPC( aIpc ) ) ) + { + ret = subTsyPtr[i]->RegisterNotification( aIpc ); + break; + } + } + return ret; + } + +// --------------------------------------------------------------------------- +// CMmTsyBase::OpenNewObjectByNameL +// Creates new CTelObject object and returns a pointer to it. Not supported +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +CTelObject* CMmTsyBase::OpenNewObjectByNameL( + const TDesC& //aName + ) + { + //Not supported + User::Leave( KErrNotSupported ); + return NULL; + } + +// --------------------------------------------------------------------------- +// CMmTsyBase::OpenNewObjectL +// Opens a new Object by newname (not supported by CUSTOM) +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +CTelObject* CMmTsyBase::OpenNewObjectL( + TDes& /*aNewName*/ ) + { + User::Leave(KErrNotSupported); + return NULL; + } + +// --------------------------------------------------------------------------- +// CMmTsyBase::DeregisterNotification +// DeregisterNotification is called when the server recognises that this +// notification will not be posted again because the last client to have +// a handle on this sub-session object has just closed the handle. It +// enables the TSY to "turn off" any regular notification messages that +// it may receive from DOS. +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +TInt CMmTsyBase::DeregisterNotification( + const TInt aIpc ) + { + TInt ret = KErrNotSupported; + TInt iMax = GetMaxNumberOfSubsystems(); + CMmSubTsyBase** subTsyPtr = GetSubsystemArrayPtr(); + + for ( TInt i = 0; iMax > i; i++ ) + { + if ( ( NULL != subTsyPtr[i] ) + && ( EFalse != subTsyPtr[i]->SupportingIPC( aIpc ) ) ) + { + ret = subTsyPtr[i]->DeregisterNotification( aIpc ); + break; + } + } + return ret; + } + +// --------------------------------------------------------------------------- +// CMmTsyBase::DoBaseExtFuncL +// Dispatches extension function requests. At the beginning of this method, +// packaged pointers are unpacked. Then the correct function is selected +// using the IPC number. +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +TInt CMmTsyBase::DoBaseExtFuncL( + const TTsyReqHandle aTsyReqHandle, + const TInt aIpc, + const TDataPackage& aPackage ) + { + TInt ret = KErrNotSupported; + TInt iMax = GetMaxNumberOfSubsystems(); + CMmSubTsyBase** subTsyPtr = GetSubsystemArrayPtr(); + + for ( TInt i = 0; iMax > i; i++ ) + { + if ( ( NULL != subTsyPtr[i] ) + && ( EFalse != subTsyPtr[i]->SupportingIPC( aIpc ) ) ) + { + ret = subTsyPtr[i]->DoExtFuncL( aTsyReqHandle, aIpc, aPackage ); + break; + } + } + return ret; + } + +// --------------------------------------------------------------------------- +// CMmTsyBase::ReqModeL +// Returns request mode for given IPC. If the IPC number belongs to some of +// the Custom API functions. +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +CTelObject::TReqMode CMmTsyBase::ReqModeL( + const TInt aIpc ) + { + CTelObject::TReqMode ret=0; + TInt i = 0; + TInt iMax = GetMaxNumberOfSubsystems(); + CMmSubTsyBase** subTsyPtr = GetSubsystemArrayPtr(); + + for ( i = 0; iMax > i; i++ ) + { + if ( ( NULL != subTsyPtr[i] ) + && ( EFalse != subTsyPtr[i]->SupportingIPC( aIpc ) ) ) + { + ret = subTsyPtr[i]->ReqModeL( aIpc ); + break; + } + } + if ( i >= iMax ) + { + User::Leave(KErrNotSupported); + } + return ret; + } + +// --------------------------------------------------------------------------- +// CMmTsyBase::NumberOfSlotsL +// Returns number of slots to be used for given IPC. +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +TInt CMmTsyBase::NumberOfSlotsL( + const TInt aIpc ) + { + TInt numberOfSlots = 0; + TInt i = 0; + TInt iMax = GetMaxNumberOfSubsystems(); + CMmSubTsyBase** subTsyPtr = GetSubsystemArrayPtr(); + + for ( i = 0; iMax > i; i++ ) + { + if ( ( NULL != subTsyPtr[i] ) + && ( EFalse != subTsyPtr[i]->SupportingIPC( aIpc ) ) ) + { + numberOfSlots = subTsyPtr[i]->NumberOfSlotsL( aIpc ); + break; + } + } + if ( i >= iMax ) + { + User::Leave(KErrNotSupported); + } + return numberOfSlots; + } + +// --------------------------------------------------------------------------- +// CMmTsyBase::CancelService +// When the clients close their subsessions (eg. by calling RPhone::Close), +// they may not have cancelled all their outstanding asynchronous requests +// before closing. It is up to the ETel server to clean up in this situation, +// so the server will find the list of outstanding requests related to that +// sub-session object and pass these outstanding IPC request numbers, one at +// a time, to the CancelService function in the TSY. +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +TInt CMmTsyBase::CancelService( + const TInt aIpc, + const TTsyReqHandle aTsyReqHandle ) + { + TInt ret = KErrNone; + TInt i = 0; + TInt iMax = GetMaxNumberOfSubsystems(); + CMmSubTsyBase** subTsyPtr = GetSubsystemArrayPtr(); + + for ( i = 0; iMax > i; i++ ) + { + if ( ( NULL != subTsyPtr[i] ) + && ( EFalse != subTsyPtr[i]->SupportingIPC( aIpc ) ) ) + { + ret = subTsyPtr[i]->CancelService( aIpc, aTsyReqHandle ); + break; + } + } + if ( i >= iMax ) + { + ret = KErrGeneral; + } + return ret; + } + +#ifdef REQHANDLE_TIMER + +// --------------------------------------------------------------------------- +// CMmTsyBase::Complete +// Completes the request due timer expiration +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CMmTsyBase::Complete( + TInt aReqHandleType, + TInt aError, + TInt aIPC ) + { + TInt max = GetMaxNumberOfSubsystems(); + CMmSubTsyBase** subTsyPtr = GetSubsystemArrayPtr(); + + for ( TInt i = 0; max > i; i++ ) + { + //check which custom object handles this IPC + if ( ( NULL != subTsyPtr[i] ) + && ( EFalse != subTsyPtr[i]->SupportingIPC( aIPC ) ) ) + { + //call complete method of the right custom object + subTsyPtr[i]->Complete( aReqHandleType, aError ); + i = max; + } + } + } + +#endif + +// End of File +