// Copyright (c) 2008-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:
// cltsydispatchsupplementaryserviceshandler.h
//

/**
 @file
 @internalAll 
*/

#ifndef __CLTSYDISPATCHSUPPLEMENTARYSERVICESHANDLER_H_
#define __CLTSYDISPATCHSUPPLEMENTARYSERVICESHANDLER_H_

// INCLUDES
#include <e32std.h>
#include <e32base.h>

#include <ctsy/ltsy/mltsydispatchinterface.h>
#include <ctsy/ltsy/mltsydispatchsupplementaryservicesinterface.h>
#include "misdispatchinterfacesupported.h"
#include "ltsymacros.h"

// Can be removed in real LTSY implementation
#include MTEST_INCLUDE_MOCKLTSYENGINE_HEADER

// FORWARD DECLARATIONS
class CCtsyDispatcherCallback;

// Can be removed in real LTSY implementation
MTEST_FORWARD_DECLARE_MOCKLTSYENGINE

// CLASS DECLARATION

/**
 * Implements interfaces from the CTSY Dispatcher. The CTSY Dispatcher uses these
 * interfaces to make requests to the Licensee LTSY.
 */
class CLtsySupplementaryServicesHandler : 	public CBase,
							public MIsDispatchInterfaceSupported, 
							public MLtsyDispatchSupplementaryServicesSendNetworkServiceRequestNoFdnCheck,
							public MLtsyDispatchSupplementaryServicesGetCallWaitingStatus,
							public MLtsyDispatchSupplementaryServicesSendNetworkServiceRequest,
							public MLtsyDispatchSupplementaryServicesGetCallBarringStatus,
							public MLtsyDispatchSupplementaryServicesSetCallBarringStatus,
							public MLtsyDispatchSupplementaryServicesSetCallForwardingStatus,
							public MLtsyDispatchSupplementaryServicesSetCallWaitingStatus,
							public MLtsyDispatchSupplementaryServicesSetSsPassword,
							public MLtsyDispatchSupplementaryServicesGetCallForwardingStatus,
							public MLtsyDispatchSupplementaryServicesSendUssdMessage,
							public MLtsyDispatchSupplementaryServicesSendUssdMessageNoFdnCheck,
                            public MLtsyDispatchSupplementaryServicesSendUssdRelease,
                            public MLtsyDispatchSupplementaryServicesClearBlacklist
							
	{
public:

	virtual ~CLtsySupplementaryServicesHandler();
	static CLtsySupplementaryServicesHandler* NewL(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
	static CLtsySupplementaryServicesHandler* NewLC(CCtsyDispatcherCallback& aCtsyDispatcherCallback);

	// From MIsDispatchInterfaceSupported
	virtual TBool IsInterfaceSupported(TLtsyDispatchInterfaceApiId aDispatchApiId);
	void IsCallbackIndicatorSupported(TLtsyDispatchIndIdGroup aIdGroup, TUint32& aIndIdBitMask);
	


    // From MLtsyDispatchSupplementaryServicesSendNetworkServiceRequestNoFdnCheck
    virtual TInt HandleSendNetworkServiceRequestNoFdnCheckReqL(const TDesC& aRequest);

    // From MLtsyDispatchSupplementaryServicesGetCallWaitingStatus
    virtual TInt HandleGetCallWaitingStatusReqL();

    // From MLtsyDispatchSupplementaryServicesSendNetworkServiceRequest
    virtual TInt HandleSendNetworkServiceRequestReqL(const TDesC& aRequest);

    // From MLtsyDispatchSupplementaryServicesGetCallBarringStatus
    virtual TInt HandleGetCallBarringStatusReqL(RMobilePhone::TMobilePhoneCBCondition aCondition);

    // From MLtsyDispatchSupplementaryServicesSetCallBarringStatus
    virtual TInt HandleSetCallBarringStatusReqL(RMobilePhone::TMobilePhoneCBCondition aCondition,
        RMobilePhone::TMobilePhoneServiceAction aAction,
        RMobilePhone::TMobileService aGroup,
        const TDesC& aPassword);

    // From MLtsyDispatchSupplementaryServicesSetCallForwardingStatus
    virtual TInt HandleSetCallForwardingStatusReqL(RMobilePhone::TMobilePhoneCFCondition aCondition,
    		RMobilePhone::TMobileService aServiceGroup,
    		RMobilePhone::TMobilePhoneServiceAction aAction,
    		const TDesC& aNumber,
    		TInt aTimeout);

    // From MLtsyDispatchSupplementaryServicesSetCallWaitingStatus
    virtual TInt HandleSetCallWaitingStatusReqL(RMobilePhone::TMobileService aService,
    		RMobilePhone::TMobilePhoneServiceAction aAction);

    // From MLtsyDispatchSupplementaryServicesSetSsPassword
    virtual TInt HandleSetSsPasswordReqL(const TDesC& aOldPassword,
			const TDesC& aNewPassword,
    		MLtsyDispatchSupplementaryServicesSetSsPassword::TServiceType aService);

    // From MLtsyDispatchSupplementaryServicesGetCallForwardingStatus
    virtual TInt HandleGetCallForwardingStatusReqL(RMobilePhone::TMobilePhoneCFCondition aCondition, RMobilePhone::TMobileService aService);

    // From MLtsyDispatchSupplementaryServicesSendUssdMessage
    virtual TInt HandleSendUssdMessageReqL(const TDesC8& aData, TUint8 aDcs, 
			RMobileUssdMessaging::TMobileUssdDataFormat aFormat, RMobileUssdMessaging::TMobileUssdMessageType aType);
    
    // From MLtsyDispatchSupplementaryServicesSendUssdMessagenoFdnCheck
    virtual TInt HandleSendUssdMessageNoFdnCheckReqL(const TDesC8& aData, TUint8 aDcs, 
			RMobileUssdMessaging::TMobileUssdDataFormat aFormat, RMobileUssdMessaging::TMobileUssdMessageType aType);

    // From MLtsyDispatchSupplementaryServicesSendUssdRelease
    virtual TInt HandleSendUssdReleaseReqL();

    // From MLtsyDispatchSupplementaryServicesClearBlacklist
    virtual TInt HandleClearBlacklistReqL();


private:
	
	CLtsySupplementaryServicesHandler(CCtsyDispatcherCallback& aCtsyDispatcherCallback);
	void ConstructL();

private:
	
	// Not owned
	
	/**
	 * Callback object in the CTSY Dispatcher.
	 * 
	 * Used to complete a request back to the CTSY Dispatcher.
	 */
	CCtsyDispatcherCallback& iCtsyDispatcherCallback;
	
public:
	// Can be removed in real LTSY implementation.
	MTEST_DECLARE_MOCKLTSYENGINE

	}; // class CLtsySupplementaryServicesHandler

#endif // __CLTSYDISPATCHSUPPLEMENTARYSERVICESHANDLER_H_

