telephonyserverplugins/common_tsy/commontsy/src/mmutility/CMmTsyBase.cpp
changeset 0 3553901f7fa8
--- /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
+