satengine/SatServer/Commands/CallControlCmd/src/ccallcontrolrequesthandler.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:11:09 +0200
changeset 0 ff3b6d0fd310
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 2008 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:  Handles CallControl request that need SAT perform
*
*/


#include <etelmm.h>

#include "ccallcontrolrequesthandler.h"
#include "CCallControlHandler.h"
#include "SatLog.h"

// ================= MEMBER FUNCTIONS =======================

// -----------------------------------------------------------------------------
// CCallControlRequestHandler::CCallControlRequestHandler
// The class constructor.
// -----------------------------------------------------------------------------
//
CCallControlRequestHandler::CCallControlRequestHandler(
                MSatMultiModeApi& aPhone, CCallControlHandler* aDispatcher )
    : CActive( EPriorityStandard ), iPhone( aPhone ), 
      iDispatcher( aDispatcher )
    {
    LOG( SIMPLE,
        "CALLCONTROL: CCallControlRequestHandler::CCallControlRequestHandler \
        calling" )

    CActiveScheduler::Add( this );

    LOG( SIMPLE,
        "CALLCONTROL: CCallControlRequestHandler::CCallControlRequestHandler \
        exiting" )
    }

// -----------------------------------------------------------------------------
// CCallControlRequestHandler::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CCallControlRequestHandler* CCallControlRequestHandler::NewL(
    MSatMultiModeApi& aPhone, CCallControlHandler* aDispatcher )
    {
    LOG( SIMPLE, "CALLCONTROL: CCallControlRequestHandler::NewL calling" )

    CCallControlRequestHandler* self =
        new ( ELeave ) CCallControlRequestHandler( aPhone, aDispatcher );
            
    LOG( SIMPLE, "CALLCONTROL: CCallControlRequestHandler::NewL exiting" )
    return self;
    }


// -----------------------------------------------------------------------------
// CCallControlRequestHandler::~CCallControlRequestHandler
// Destructor
// -----------------------------------------------------------------------------
//
CCallControlRequestHandler::~CCallControlRequestHandler()
    {
    LOG( SIMPLE, "CALLCONTROL: \
            CCallControlRequestHandler::~CCallControlRequestHandler calling" )

    Cancel();
    iDispatcher = NULL;

    LOG( SIMPLE, "CALLCONTROL: \
            CCallControlRequestHandler::~CCallControlRequestHandler exiting" )
    }

// -----------------------------------------------------------------------------
// CCallControlRequestHandler::DialNumber
// -----------------------------------------------------------------------------
//
void CCallControlRequestHandler::DialNumber( const TDesC8& aCallParams,
                                             const TDesC& aTelNumber )
    {
    LOG( SIMPLE, "CALLCONTROL: CCallControlRequestHandler::DialNumber calling" )

    if ( !IsActive() )
        {
        iPhone.DialNoFdnCheck( iStatus, aCallParams, aTelNumber );
        SetActive();
        }
    else
        {
        iDispatcher->DispatchCcRequestComplete( KErrInUse );
        }

    LOG( SIMPLE, "CALLCONTROL: CCallControlRequestHandler::DialNumber exiting" )
    }

// -----------------------------------------------------------------------------
// CCallControlRequestHandler::SendSs
// -----------------------------------------------------------------------------
//
void CCallControlRequestHandler::SendSs( const TDesC& aServiceString )
    {
    LOG( SIMPLE, "CALLCONTROL: CCallControlRequestHandler::SendSs calling" )

    if ( !IsActive() )
        {        
        iPhone.SendNetworkServiceRequestNoFdnCheck( iStatus, aServiceString );
        SetActive();
        }
    else
        {
        iDispatcher->DispatchCcRequestComplete( KErrInUse );
        }

    LOG( SIMPLE, "CALLCONTROL: CCallControlRequestHandler::SendSs exiting" )
    }

// -----------------------------------------------------------------------------
// CCallControlRequestHandler::SendUssd
// -----------------------------------------------------------------------------
//
void CCallControlRequestHandler::SendUssd( const TDesC8& aMsgData,
		const TDesC8& aMsgAttributes )
    {
    LOG( SIMPLE, "CALLCONTROL: CCallControlRequestHandler::SendUssd calling" )

    if ( !IsActive() )
        {
        iPhone.SendMessageNoFdnCheck( iStatus, aMsgData, aMsgAttributes );
        SetActive();
        }
    else
        {
        iDispatcher->DispatchCcRequestComplete( KErrInUse );
        }

    LOG( SIMPLE, "CALLCONTROL: CCallControlRequestHandler::SendUssd exiting" )
    }


// -----------------------------------------------------------------------------
// CCallControlRequestHandler::RunL
// Handles the command.
// -----------------------------------------------------------------------------
//
void CCallControlRequestHandler::RunL()
    {
    LOG( SIMPLE, "CALLCONTROL: CCallControlRequestHandler::RunL calling" )
    
    if ( iStatus == KErrNone )
        {
        LOG( NORMAL, "CALLCONTROL: CCallControlRequestHandler::RunL\
             iStatus == KErrNone" )
        iDispatcher->DispatchCcRequestComplete( iCcStatus );
        }
    else
        {
        LOG2( NORMAL, "CALLCONTROL: CCallControlRequestHandler::RunL\
              iStatus == %i", iStatus.Int() )
        iDispatcher->DispatchCcRequestComplete( KErrGeneral );
        }
    
    LOG( SIMPLE, "CALLCONTROL: CCallControlRequestHandler::RunL exiting" )
    }

// -----------------------------------------------------------------------------
// CCallControlRequestHandler::CancelOperation
// -----------------------------------------------------------------------------
//
void CCallControlRequestHandler::CancelOperation( TInt aOperationType )
    {
    LOG( SIMPLE, "CALLCONTROL: \
                  CCallControlRequestHandler::CancelOperation calling" )

    LOG2( NORMAL, "CALLCONTROL: \
        CCallControlRequestHandler::CancelOperation callingOperation Type %d",
        aOperationType )

    switch( aOperationType )
        {
        case CCallControlHandler::ECcDialWaiting:
            {
            iPhone.DialCancel();
            break;
            }
        case CCallControlHandler::ECcSendSsWaiting:
            {
            iPhone.CancelAsyncRequest( 
                EMobilePhoneSendNetworkServiceRequestNoFdnCheck );
            break;
            }
        case CCallControlHandler::ECcSendUssdWaiting:
            {
            iPhone.CancelAsyncRequest( 
                EMobileUssdMessagingSendMessageNoFdnCheck );
            break;
            }
        }
    LOG( SIMPLE, 
        "CALLCONTROL: CCallControlRequestHandler::CancelOperation exiting" )
    }

// -----------------------------------------------------------------------------
// From class CActive.
// Cancels the sat request.
// -----------------------------------------------------------------------------
//
void CCallControlRequestHandler::DoCancel()
    {
    LOG( SIMPLE, "CALLCONTROL: CCallControlRequestHandler::DoCancel calling" )

    LOG( SIMPLE, "CALLCONTROL: CCallControlRequestHandler::DoCancel exiting" )
    }


//  End of File