telephonyserverplugins/common_tsy/commontsy/src/mmpacket/Cmmpacketqostsy.cpp
changeset 0 3553901f7fa8
child 7 fe8b59ab9fa0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/common_tsy/commontsy/src/mmpacket/Cmmpacketqostsy.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,605 @@
+// 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 "Cmmpacketservicetsy.h"
+#include "Cmmpacketqostsy.h"
+#include "Cmmpacketcontexttsy.h"
+#include "cmmpacketqosgsmwcdmaext.h"
+#include "MmTsy_timeoutdefs.h"
+#include "MmTsy_numberOfSlots.h"
+#include <ctsy/serviceapi/mmtsy_ipcdefs.h>
+#include <ctsy/pluginapi/cmmdatapackage.h>
+
+// ======== MEMBER FUNCTIONS ========
+
+CMmPacketQoSTsy::CMmPacketQoSTsy()
+    {
+    }
+
+CMmPacketQoSTsy* CMmPacketQoSTsy::NewL(
+        CMmPacketServiceTsy* aMmPacketService,
+        CMmPacketContextTsy* aMmPacketContext ) 
+    {
+TFLOGSTRING("TSY: CMmPacketQoSTsy::NewL." );
+
+    CMmPacketQoSTsy* mmPacketQoS = new ( ELeave ) CMmPacketQoSTsy();
+    CleanupClosePushL( *mmPacketQoS );
+    mmPacketQoS->iMmPacketService = aMmPacketService;
+    mmPacketQoS->iMmPacketContext = aMmPacketContext;
+    mmPacketQoS->ConstructL();
+    CleanupStack::Pop( mmPacketQoS );
+
+    return mmPacketQoS;
+    }
+
+
+void CMmPacketQoSTsy::ConstructL()
+    {  
+
+    InitExtensionModulesL();
+
+#ifdef REQHANDLE_TIMER   
+    // Create req handle store
+    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL( this,
+        iMmPacketService->PhoneTsy(), EMaxNumOfPacketQoSRequests,
+        iPacketQoSReqHandles );
+#else
+    // Create req handle store
+    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL( 
+        EMaxNumOfPacketQoSRequests, iPacketQoSReqHandles );
+
+#endif // REQHANDLE_TIMER
+
+    }
+
+CMmPacketQoSTsy::~CMmPacketQoSTsy()
+    {
+TFLOGSTRING("TSY: CMmPacketQoSTsy::~CMmPacketQoSTsy." );
+    if( iMmPacketContext )
+	    {
+	    iMmPacketContext->RemoveQoS();	
+	    }
+    
+    delete iMmPacketQoSGsmWcdmaExt;
+    delete iTsyReqHandleStore;
+    }
+
+
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::InitExtensionModulesL
+// Initialises extension module for CMmPacketQoSTsy
+// create and allocate memory for iMmPacketQoSGsmWcdmaExt
+//----------------------------------------------------------------------------
+
+void CMmPacketQoSTsy::InitExtensionModulesL()
+    {
+
+    // Create Packet QoS GSM/WCDMA extension
+    iMmPacketQoSGsmWcdmaExt = 
+        CMmPacketQoSGsmWcdmaExt::NewL( this, iMmPacketService );
+
+    }
+
+
+//---------------------------------------------------------------------------
+// CMmPacketQoSTsy::Init
+// Initialisation method that is called from ETel Server.
+//---------------------------------------------------------------------------
+
+void CMmPacketQoSTsy::Init()
+    {
+    }
+
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::ExtFunc 
+// Handles the ETel server requests.
+//----------------------------------------------------------------------------
+
+TInt CMmPacketQoSTsy::ExtFunc( 
+        const TTsyReqHandle aTsyReqHandle, 
+        const TInt aIpc,     
+        const TDataPackage& aPackage )      
+    {
+TFLOGSTRING2("TSY: CMmPacketQoSTsy::ExtFunc. aIpc: %d", aIpc );
+    TInt ret( KErrNone );
+    TInt trapError( KErrNone );
+
+    // Reset last tsy request type
+    iReqHandleType = EMultimodePacketQoSReqHandleUnknown;
+
+    TRAP( trapError, ret = DoExtFuncL( aTsyReqHandle, aIpc, aPackage ); );
+
+    if ( KErrNone != trapError )
+        {
+        CMmPacketQoSTsy::ReqCompleted( aTsyReqHandle, trapError );
+        }
+    else if ( KErrNone != ret )
+        {
+        CMmPacketQoSTsy::ReqCompleted( aTsyReqHandle, ret );
+        }
+
+    // Save request handle
+    if ( EMultimodePacketQoSReqHandleUnknown != iReqHandleType )
+        {
+#ifdef REQHANDLE_TIMER
+        SetTypeOfResponse( iReqHandleType, aTsyReqHandle );
+#else
+        iTsyReqHandleStore->SetTsyReqHandle( iReqHandleType, aTsyReqHandle );
+#endif //REQHANDLE_TIMER
+        }
+
+    return KErrNone;
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::DoExtFuncL    
+// DoExtFuncL calls Packet QoS related methods 
+//----------------------------------------------------------------------------
+
+TInt CMmPacketQoSTsy::DoExtFuncL( 
+        const TTsyReqHandle aTsyReqHandle, 
+        const TInt aIpc,        
+        const TDataPackage& aPackage )  
+    {
+TFLOGSTRING3("TSY: CMmPacketQoSTsy::DoExtFuncL. IPC: %d  Handle:%d", aIpc, aTsyReqHandle);
+    TInt ret( KErrNotSupported );
+
+    switch ( aIpc )
+        {
+        case EPacketQoSSetProfileParams:
+            ret = SetProfileParametersL( aTsyReqHandle, aPackage.Des1n() );
+            break;
+        case EPacketQoSGetProfileParams:
+            ret = GetProfileParameters( aTsyReqHandle, aPackage.Des1n() );
+            break;
+        case EPacketQoSGetProfileCaps:
+            ret = GetProfileCapabilities( aTsyReqHandle, aPackage.Des1n() );
+            break;
+        case EPacketQoSNotifyProfileChanged:
+            ret = NotifyProfileChanged( aPackage.Des1n() );
+            break;
+        default:
+            break;
+        }
+    return ret;
+
+    }
+
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::ReqModeL
+// Returns request mode for given IPC.
+//----------------------------------------------------------------------------
+
+CTelObject::TReqMode CMmPacketQoSTsy::ReqModeL(    
+        const TInt aIpc ) 
+    {
+TFLOGSTRING2("TSY: CMmPacketQoSTsy::ReqModeL. IPC: %d", aIpc );
+    CTelObject::TReqMode reqMode( 0 );
+
+    switch ( aIpc )
+        {
+        case EPacketQoSSetProfileParams:
+        case EPacketQoSGetProfileParams:
+        case EPacketQoSGetProfileCaps:
+            reqMode = KReqModeFlowControlObeyed;
+            break;
+
+        case EPacketQoSNotifyProfileChanged:
+            reqMode = KReqModeMultipleCompletionEnabled |
+                      KReqModeRePostImmediately;
+            break;
+
+        // Leave with KErrNotSupported
+        default:
+            User::Leave( KErrNotSupported );
+            break;
+        }
+    return reqMode;
+    }
+
+
+//----------------------------------------------------------------------------
+//CMmPacketQoSTsy::NumberOfSlotsL
+// Returns number of slots to be used for given IPC.
+//----------------------------------------------------------------------------
+
+TInt CMmPacketQoSTsy::NumberOfSlotsL(    
+        const TInt aIpc ) 
+    {
+
+TFLOGSTRING2("TSY: CMmPacketQoSTsy::NumberOfSlotsL. IPC: %d", aIpc );
+
+    TInt numberOfSlots( 0 );
+
+    if ( EPacketQoSNotifyProfileChanged == aIpc )
+        {
+        numberOfSlots = KMmPacketQoSNotifyParameterChangedSlots;
+        }
+    else
+        {
+        // Unknown or invalid IPC
+        User::Leave( KErrNotSupported );
+        }
+
+    return numberOfSlots;
+
+    }
+
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::CancelService
+// Cancels request defined by aIpc.
+//----------------------------------------------------------------------------
+
+TInt CMmPacketQoSTsy::CancelService(    
+        const TInt aIpc,   
+        const TTsyReqHandle aTsyReqHandle ) 
+    {
+TFLOGSTRING3("TSY: CMmPacketQoSTsy::CancelService. IPC: %d  Handle:%d", aIpc, aTsyReqHandle);
+     TInt ret( KErrNone );
+
+     switch ( aIpc )
+        {
+        case EPacketQoSSetProfileParams:
+        case EPacketQoSGetProfileParams:
+        case EPacketQoSGetProfileCaps:
+            break;
+
+        // Notification cancels
+        case EPacketQoSNotifyProfileChanged:
+            // Reset tsy request handle
+            iTsyReqHandleStore->ResetTsyReqHandle( 
+                EMultimodePacketQoSNotifyParameterChanged );
+
+            // Complete request with KErrCancel
+            CMmPacketQoSTsy::ReqCompleted( aTsyReqHandle, KErrCancel );
+
+            break;
+        // Default case
+        default:
+            ret = KErrNotSupported;
+            break;
+        }
+
+    return ret;
+    }
+
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::RegisterNotification
+// Registers Notification
+//----------------------------------------------------------------------------
+
+TInt CMmPacketQoSTsy::RegisterNotification(    
+        const TInt aIpc ) 
+    {
+TFLOGSTRING2("TSY: CMmPacketQoSTsy::RegisterNotification. IPC: %d", aIpc );
+
+    if ( EPacketQoSNotifyProfileChanged == aIpc )
+        {
+        return KErrNone;
+        }
+    return KErrNotSupported;
+    }
+
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::DeregisterNotification
+// This function unsubscribe given notification from Manufacturer specific 
+// part.Currently does not really do anything but returns KErrNone to 
+// ETel server in case of known notification request type.
+//----------------------------------------------------------------------------
+
+TInt CMmPacketQoSTsy::DeregisterNotification(
+        const TInt aIpc )    
+    {
+TFLOGSTRING2("TSY: CMmPacketQoSTsy::DeregisterNotification. IPC: %d", aIpc );
+
+    if ( EPacketQoSNotifyProfileChanged == aIpc )
+        {
+        return KErrNone;
+        }
+    return KErrNotSupported;
+    }
+
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::OpenNewObjectL
+// Creates new object and returns a pointer to it.
+// leave with KErrNotSupported
+// return NULL and control to calling object
+//----------------------------------------------------------------------------
+
+CTelObject* CMmPacketQoSTsy::OpenNewObjectL(    
+        TDes& /* aNewName*/ ) 
+    {
+TFLOGSTRING("TSY: CMmPacketQoSTsy::OpenNewObjectL. Leaves with:KErrNotSupported" );
+    User::Leave( KErrNotSupported );
+    return NULL;
+    }
+
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::OpenNewObjectByNameL
+// Creates new object and returns a pointer to it.   
+// The ETel Server calls this method. TSY classes must not use this method.
+// leave with KErrNotSupported
+// return NULL and control to calling object
+//----------------------------------------------------------------------------
+
+CTelObject* CMmPacketQoSTsy::OpenNewObjectByNameL(    
+        const TDesC& /* aName */ )  
+    {
+TFLOGSTRING("TSY: CMmPacketQoSTsy::OpenNewObjectByNameL. Leaves with:KErrNotSupported" );
+    // Otherwise we can leave...
+    User::Leave( KErrNotSupported );
+    return NULL;
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::PacketQoSGsmWcdmaExt
+// Return pointer to the PacketQoSGsmWcdmaExt.
+//----------------------------------------------------------------------------
+
+CMmPacketQoSGsmWcdmaExt* CMmPacketQoSTsy::PacketQoSGsmWcdmaExt()
+    {
+    return iMmPacketQoSGsmWcdmaExt;
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::GetProfileCapabilities
+// Returns the QoS capabilities for the current packet service.
+// The TSY will assign a bitmask for each parameter in the relevant TQoSCaps
+// class. This bitmask contains all values which can be assigned to the 
+// particular parameter for the current packet service & phone.  The bitmask 
+// values will conform to values stated in the QoS-related enum data types 
+// defined in ETelQoS.h
+//----------------------------------------------------------------------------
+
+TInt CMmPacketQoSTsy::GetProfileCapabilities(
+        const TTsyReqHandle aTsyReqHandle,   
+        TDes8* aProfileCaps )   
+    {
+TFLOGSTRING3("TSY: CMmPacketQoSTsy::GetProfileCapabilities. TsyReqHandle: %d  aProfileCaps: %d", aTsyReqHandle, aProfileCaps );
+     
+    // Call GetProfileCapabilities from GSM/WCDMA extension
+    TInt ret = iMmPacketQoSGsmWcdmaExt->GetProfileCapabilities( 
+        aProfileCaps );
+   
+    // Complete the request
+    CMmPacketQoSTsy::ReqCompleted( aTsyReqHandle, ret );
+    return KErrNone;
+    }
+        
+
+//----------------------------------------------------------------------------
+//CMmPacketQoSTsy::GetProfileParameters
+// Retrieves all parameters associated with a negotiated profile.
+//----------------------------------------------------------------------------
+
+TInt CMmPacketQoSTsy::GetProfileParameters(
+        const TTsyReqHandle aTsyReqHandle,
+        TDes8* aProfile )      
+    {
+TFLOGSTRING3("TSY: CMmPacketQoSTsy::GetProfileParameters. TsyReqHandle: %d   aProfile: %d", aTsyReqHandle, aProfile );
+  
+    // Call GetProfileParameters method from GSM/WCDMA extension
+    TInt ret = iMmPacketQoSGsmWcdmaExt->GetProfileParameters( aProfile );
+
+    // Complete the request
+    CMmPacketQoSTsy::ReqCompleted( aTsyReqHandle, ret );
+
+    return KErrNone;
+
+    }
+
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::NotifyProfileChanged
+// Notifies of the change in the negotiated QoS profile.
+//----------------------------------------------------------------------------
+
+TInt CMmPacketQoSTsy::NotifyProfileChanged(
+        TDes8* aProfile )  
+    {
+TFLOGSTRING2("TSY: CMmPacketQoSTsy::NotifyProfileChanged. aProfile: %d", aProfile );
+
+    // Set Req Handle
+    iReqHandleType = EMultimodePacketQoSNotifyParameterChanged;
+
+    // Call NotifyProfileChanged-method from GSM/WCDMA extension
+    return iMmPacketQoSGsmWcdmaExt->NotifyProfileChanged( aProfile );
+
+    }
+
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::CompleteNotifyProfileChanged
+// Completes the notification to client.
+//----------------------------------------------------------------------------
+
+void CMmPacketQoSTsy::CompleteNotifyProfileChanged()
+    {
+TFLOGSTRING("TSY: CMmPacketQoSTsy::CompleteNotifyProfileChanged." );
+   
+    // Reset tsy request handle. 
+    TTsyReqHandle reqHandle( iTsyReqHandleStore->ResetTsyReqHandle( 
+        EMultimodePacketQoSNotifyParameterChanged ) );
+
+    if ( EMultimodePacketQoSReqHandleUnknown != reqHandle )
+        {
+
+        // Complete the client request
+        CMmPacketQoSTsy::ReqCompleted( reqHandle, KErrNone );
+
+        }
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::SetProfileParametersL
+// Allows client pass to the TSY required parameters
+//----------------------------------------------------------------------------
+
+TInt CMmPacketQoSTsy::SetProfileParametersL(
+        const TTsyReqHandle aTsyReqHandle, 
+        TDes8* aProfile )                
+    {
+TFLOGSTRING3("TSY: CMmPacketQoSTsy::SetProfileParametersL. TsyReqHandle: %d  aProfile: %d", aTsyReqHandle, &aProfile );
+
+    // Call SetProfileParametersL from GSM/WCDMA extension
+    TInt ret = iMmPacketQoSGsmWcdmaExt->SetProfileParametersL( aProfile );
+
+    RPacketContext::TContextStatus contextStatus =
+        CMmPacketQoSTsy::PacketContextTsy()->ContextStatus();
+
+    if ( KErrNone == ret )
+        {
+
+        if ( RPacketContext::EStatusActivating != contextStatus &&
+             RPacketContext::EStatusActive != contextStatus)
+            {
+
+            // Store the request handle type 
+            iReqHandleType = EMultimodePacketQoSSetProfileParameters;
+
+            }
+
+        else
+            {
+
+            CMmPacketQoSTsy::ReqCompleted( aTsyReqHandle, KErrNone );
+
+            }
+        }
+
+    return ret;
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::CompleteSetProfileParameters
+// Complete Set Profile Parameters
+//----------------------------------------------------------------------------
+
+void CMmPacketQoSTsy::CompleteSetProfileParameters(
+        const TInt aError )     
+    {
+TFLOGSTRING2("TSY: CMmPacketQoSTsy::CompleteSetProfileParameters. Error: %d", aError );
+
+    // Reset the request handle. 
+    TTsyReqHandle reqHandle( iTsyReqHandleStore->ResetTsyReqHandle(
+        EMultimodePacketQoSSetProfileParameters ) );
+
+    if ( EMultimodePacketQoSReqHandleUnknown != reqHandle )
+        {
+
+        // Complete the client request
+        CMmPacketQoSTsy::ReqCompleted( reqHandle, aError );
+
+        }
+
+    }
+
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::PacketContextTsy
+// Return pointer to the CMmPacketContextTsy.
+//----------------------------------------------------------------------------
+
+CMmPacketContextTsy* CMmPacketQoSTsy::PacketContextTsy()
+    {
+    return iMmPacketContext;
+    }
+
+#ifdef REQHANDLE_TIMER
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::SetTypeOfResponse
+// Sets the type of response for a given Handle.    
+// Automatic mode includes an automatic response in case of non response from
+// the manufacturer specific layer in a specified time.
+//----------------------------------------------------------------------------
+
+void CMmPacketQoSTsy::SetTypeOfResponse(
+        const TInt aReqHandleType,    
+        const TTsyReqHandle aTsyReqHandle )    
+    {
+
+    if ( EMultimodePacketQoSSetProfileParameters == aReqHandleType )
+        {
+        // The timeout parameter is given in seconds.
+        iTsyReqHandleStore->SetTsyReqHandle( aReqHandleType, aTsyReqHandle,
+			KMmPacketQoSSetProfileParametersTimeOut );
+        }
+    else 
+        {
+        // Does not use timer
+        iTsyReqHandleStore->SetTsyReqHandle( aReqHandleType, aTsyReqHandle );
+        }
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::Complete
+// Completes the request due timer expiration.
+//----------------------------------------------------------------------------
+
+void CMmPacketQoSTsy::Complete(
+        const TInt aReqHandleType,    
+        const TInt aError )        
+    {
+
+    if ( EMultimodePacketQoSSetProfileParameters == aReqHandleType )
+        {
+        CMmPacketQoSTsy::CompleteSetProfileParameters( aError );
+        }
+    else
+        {
+        CMmPacketQoSTsy::ReqCompleted( iTsyReqHandleStore->ResetTsyReqHandle( 
+                            aReqHandleType ), aError );
+        }
+
+    }
+#endif //REQHANDLE_TIMER
+
+#ifdef TF_LOGGING_ENABLED
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSTsy::ReqCompleted
+// Description: Overloads CTelObject::ReqCompleted for logging purposes.
+// calls CTelObject::ReqCompleted.
+//----------------------------------------------------------------------------
+
+void CMmPacketQoSTsy::ReqCompleted(
+        const TTsyReqHandle aTsyReqHandle,
+        const TInt aError )     
+       
+    {
+TFLOGSTRING3("TSY: CMmPacketQoSTsy::Request Completed.  Handle: %d Error:%d", aTsyReqHandle, aError ); 
+
+    CTelObject::ReqCompleted( aTsyReqHandle, aError );  
+    }
+
+#endif //TF_LOGGING_ENABLED
+
+
+//  End of File