voipplugins/voipadapters/cpvoipadapter/inc/CWPVoIPItem.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:29:57 +0100
branchRCL_3
changeset 22 d38647835c2e
parent 0 a4daefaec16c
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2002-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:  Holds and stores one VoIP item.
*
*/


#ifndef CWPVOIPITEM_H
#define CWPVOIPITEM_H

//  INCLUDES
#include <e32base.h> // CBase.
#include <crcseprofileentry.h> // TOnOff, RCSE entry
#include "CWPVoIPCodec.h" // VoIP codecs.

// CONSTANTS
const TUint KMaxTerminalTypeLength = 64;
const TUint KWlanMacAddressLength  = 50;
const TUint KPhoneModelLength      = 20;
const TUint KUAHLength             = 200;

// MACROS

// DATA TYPES
typedef CRCSEProfileEntry VoIPProfileEntry;

// FORWARD DECLARATIONS
class CWPCharacteristic;
class CWPVoIPCodec;
class CCoeEnv;

// CLASS DECLARATION
/**
 *  This class keeps transiently the VoIP setting values and stores the 
 *  values via interface provided by RCSE and SPS.
 *
 *  @lib CWPVoIPAdapter.lib
 *  @since S60 3.0
 */
class CWPVoIPItem : public CBase
    {    
    #ifdef _DEBUG
    /**
     * Friend class for unit testing.
     */
    friend class UT_CWPVoIPItem;
    friend class UT_CWPVoIPAdapter;
    #endif

    public: // Data types 
        
        /**  For setting telephony preference */
        enum TTelephonyPreference
            {
            ECSPreferred,
            EPSPreferred
            };

        /** For telling which settings storage ID is related to. */
        enum TSettingsType
            {
            ESIP,
            ESCCP,
            ENATFW,
            EPresence,
            ESNAP
            };

    public: // Constructor and destructor
        
        static CWPVoIPItem* NewL();
        virtual ~CWPVoIPItem();

    public: // New functions

        /**
         * Setter for AppRef.
         *
         * @since S60 3.2
         * @param aAppRef.
         */
        void SetAppRefL( const TDesC8& aAppRef );

        /**
         * Getter for AppRef.
         *
         * @since S60 3.2
         * @return AppRef.
         */        
        HBufC8* AppRef();

        /**
         * Setter for provider.
         *
         * @since S60 3.0
         * @param aPROVIDERID.
         */
        void SetProviderIdL( const TDesC& aPROVIDERID );

        /**
         * Setter for user viewable name of the setting.
         *
         * @since S60 3.0
         * @param aNAME - value is TCP or UDP.
         */
        void SetNameL( const TDesC& aNAME );

        /**
         * Setter for TO-APPREF parameter values.
         *
         * @since S60 3.0
         * @param aTOAPPREF (i.e.actual CP parameter TO-APPREF).
         */
        void AddToAppRefL( const TDesC8& aTOAPPREF );

        /**
         * Setter for start media port.
         *
         * @since S60 3.0
         * @param aSMPORT.
         */
        void SetStartMediaPort( TInt aSMPORT );

        /**
         * Setter for end media port.
         *
         * @since S60 3.0
         * @param aEMPORT.
         */
        void SetEndMediaPort( TInt aEMPORT );

        /**
         * Setter for media QoS.
         *
         * @since S60 3.0
         * @param aMediaQoSValue.
         */
        void SetMediaQoS( TInt aMEDIAQOS );

        /**
         * Setter for switching DTMF in-band on/off.
         *
         * @since S60 3.0
         * @param aDTMFInBand (derived from CP parameter NODTMFIB, where
         * "NO" means negation).
         */
        void SetDTMFInBand( TInt aDTMFInBand );

        /**
         * Setter for DTMF out-of-band parameter.
         *
         * @since S60 3.0
         * @param aDTMFOutBandValue (derived from CP parameter 
         * NODTMFOOB, where "NO" means negation).
         */
        void SetDTMFOutBand( TInt aDTMFOutBandValue );

        /**
         * Setter for VoIP codecs.
         * Takes ownership of aVoIPCodec.
         *
         * @since S60 3.0
         * @param aVoIPCodec.
         */
        void AddCodecL( const CWPVoIPCodec* aVoIPCodec );

        /**
         * Setter for iSecureCallPreference.
         *
         * @since S60 3.0
         * @return aSecureCallPreference.
         */
        void SetSecureCallPref( TInt aSecureCallPref );

        /**
         * Setter for iRTCP.
         *
         * @since S60 3.0
         * @param aRTCP.
         */
        void SetRTCP( TInt aRTCP );

        /**
         * Setter for iUAHTerminalType.
         *
         * @since S60 3.0
         * @param aUAHTerminalType SIP User Agent Header:
         *                         terminal type display.
         */
        void SetUAHTerminalType( TInt aUAHTerminalType );

        /**
         * Setter for iUAHWLANMAC.
         *
         * @since S60 3.0
         * @param aUAHWLANMAC SIP User Agent Header: WLAN MAC address display.
         */
        void SetUAHWLANMAC( TInt aUAHWLANMAC );

        /**
         * Setter for iUAHString.
         *
         * @since S60 3.0
         * @param aUAHString SIP User Agent Header: free string.
         */
        void SetUAHStringL( const TDesC& aUAHString );

        /**
         * Setter for iProfileLockedToIAP.
         *
         * @since S60 3.0
         * @param aProfileLockedToIAP Is profile locked to a pre-defined IAP.
         */
        void SetProfileLockedToIAP( TInt aProfileLockedToIAP );

        /**
         * Setter for iVoIPPluginUid.
         *
         * @since S60 3.0
         * @param aVoIPPluginUid VoIP plugin UID.
         */
        void SetVoIPPluginUid( TInt aVoIPPluginUid );

        /**
         * Setter for iAllowVoIPOverWCDMA.
         *
         * @since S60 3.0
         * @param aAllowVoIPOverWCDMA Allow VoIP over WCDMA.
         */
        void SetAllowVoIPOverWCDMA( TInt aAllowVoIPOverWCDMA );

        /**
         * Setter for iVoIPDigits.
         *
         * @since S60 3.0
         * @param aVoIPDigits Number of meaningful VoIP digits for call
         *                    identification.
         */
        void SetVoIPDigits( TInt aVoIPDigits );

        /**
         * Setter for iDomainPartIgnoreRule.
         *
         * @since S60 3.0
         * @param aDomainPartIgnoreRule Rule for ignoring domain part of URI 
         *                              for VoIP calls.
         */
        void SetDomainPartIgnoreRule( TInt aDomainPartIgnoreRule );

        /**
         * Setter for iAddUserPhoneToAllNumbers.
         *
         * @since S60 3.2
         * @param aAddUserPhone The indication whether or not to add 
         *        user=phone to all numbers.
         */
        void SetAddUserPhone( TInt32 aAddUserPhone );

        /**
         * Setter for iSIPConnTestAddress.
         *
         * @since S60 3.2
         * @param aSIPConnTestAddress Connectivity test call address 
         *        in registering.
         */
        void SetSipConnTestAddressL( const TDesC& aSIPConnTestAddress );

         /**
          * Setter for iServiceProviderBookmark.
          *
          * @since S60 3.2
          * @param aServiceProviderBookmark Absolute URI for service 
          *        provider bookmark.
          */         
        void SetServiceProviderBookmarkL( 
            const TDesC& aServiceProviderBookmark );

        /**
         * Setter for iSIPMinSE.
         *
         * @since S60 3.2
         * @param aSIPMinSE The minimum allowed value for the session timer.
         */
        void SetSipMinSe( TInt32 aSIPMinSE );

        /**
         * Setter for iSIPSessionExpires.
         *
         * @since S60 3.2
         * @param aSIPMinSE The session interval for a SIP session.
         */
        void SetSipSessionExpires( TInt32 aSIPSessionExpires );

        /**
         * Setter for iIPVoiceMailBoxURI.
         *
         * @since S60 3.
         * @param aIPVoiceMailBoxURI IP Voice Mail Box address.
         */
        void SetIPVoiceMailBoxURIL( const TDesC& aIPVoiceMailBoxURI );

        /**
         * Setter for iVmbxListenAddress.
         *
         * @since S60 3.2
         * @param aVmbxListenAddress VoiceMailBox listening address.
         */
        void SetVoiceMailBoxListenURIL( const TDesC& aVmbxListenAddress );

        /**
         * Setter for iReSubscribeInterval.
         *
         * @since S60 3.2
         * @param aReSubscribeInterval Interval for sending re-SUBSCRIBE.
         */
        void SetReSubscribeInterval( TInt32 aReSubscribeInterval );

        /**
         * Setter for iBrandingDataAddress.
         *
         * @since S60 3.2
         * @param aBrandingDataAddress URI to branding data xml.
         */
        void SetBrandingDataAddressL( const TDesC& aVmbxListenAddress );

        /**
         * Setter for iAutoAcceptBuddy.
         *
         * @since S60 3.2
         * @param aAutoAcceptBuddy for defining auto accept buddy presence
         *        subscription request.
         */
        void SetAutoAcceptBuddyRequest( TInt32 aAutoAcceptBuddyRequest );

        /**
         * Setter for iAutoEnableService.
         *
         * @since S60 3.2
         * @param aAutoEnableService for defining 
         *        auto enable state of service.
         */
        void SetAutoEnableService( TInt32 aAutoEnableService );

        /**
         * Setter for NAPDEF (IAP settings).
         *
         * @since S60 3.2
         * @param aNapDef NAPDEF (IAP settings) characteristic.
         */
        void SetNapDef( CWPCharacteristic* aNapDef );

        /**
         * Setter for TO-NAPID parameter.
         *
         * @since S60 3.2
         * @param aNapDefName TO-NAPID value.
         */
        void SetToNapIdL( const TDesC8& ToNapId );

        /**
         * Setter for IAP ID.
         *
         * @since S60 3.2
         * @param aIapId IAP ID.
         */
        void SetIapId( TUint32 aIapId );

        /**
         * Setter for storage ID's (APPREF/TO-APPREF linkage).
         *
         * @since S60 3.2
         * @param aAppId APPID value.
         * @param aStorageId Storage ID.
         * @return ETrue if storage ID was set,
                   EFalse if storage ID was not set.
         */
        TBool SetStorageId( TSettingsType aProfileType, TUint32 aStorageId, 
            const TDesC8& aAppRef );

        /**
         * Sets TO-APPREF value to internal variable.
         *
         * @since S60 3.2
         * @param aToAppRef TO-APPREF value.
         */
        void SetVoipUrisToAppRefL( const TDesC8& aToAppRef );

        /**
         * Setter for iUsedNatProtocol.
         *
         * @since S60 3.2
         * @param aUsedNatProtocol for indicating which NAT protocol should
         *        be used.         
         */
         void SetUsedNatProtocol( TInt32 aUsedNatProtocol);

        /**
         * Getter for user viewable name of VoIP settings item.
         *
         * @since S60 3.0
         * @return Settings name.
         */
        const TDesC& Name() const; 
        
        /** 
         * Getter for iUAHString.
         *
         * @since S60 3.0
         * @return SIP VoIP User Agent header: free string.
         */
        const TDesC& UAHString() const;

        /**
         * Getter for NAPDEF (IAP settings).
         *
         * @since S60 3.2
         * @return NAPDEF characteristic.
         */
        CWPCharacteristic* NapDef();

        /**
         * Getter for TO-NAPID value.
         *
         * @since S60 3.2.
         * @return TO-NAPID value.
         */
        const TDesC8& ToNapId() const;

        /**
         * Returns TO-APPREF value.
         *
         * @since S60 3.2
         * @return TO-APPREF value.
         */
        const TDesC8& VoipUrisToAppRef() const;

        /**
         * Saves the VoIP settings and returns the uid of the stored new VoIP 
         * profile.
         *
         * @since S60 3.0
         * @return VoIP profile ID.
         */
        TUint StoreL();

        /**
         * Return profile ID as a descriptor.
         *
         * @since 3.0
         * @return ID of the VoIP item (VoIP profile ID).
         */
        const TDesC8& SaveData() const;

        /**
         * Make update for data that is received after the actual StoreL save 
         * method call. Data received after that can be: SIP profile ids in 
         * VoIP profile settings and in the SIP specific VoIP settings items 
         * and SCCP profile ids. SIP and SCCP ids are always received from the
         * other adapters via CWPAdapter::SettingsSaved mehod that can be
         * called after call to StoreL.
         *
         * @since S60 3.0
         */
        void SavingFinalizedL();

        /**
         * Sets CS/PS telephony preference.
         *
         * @since S60 3.0
         * @param aTelephonyPreference state to set
         */
        void SetTelephonyPreferenceL( const TTelephonyPreference& 
            aTelephonyPreference ) const;

        /**
         * Gather SIP User-Agent header.
         *
         * @since S60 3.0
         * @param aUserAgentHeader User Agent Header.
         */
        void GetUserAgentHeaderL( TBuf8<KUAHLength>& aUserAgentHeader ) const;

        /**
         * Getter for RCSE storage ID.
         *
         * @since S60 3.2
         * @return RCSE storage ID.
         */
        TUint32 ItemId();

        /**
         * Sets IM enabled flag to true.
         *
         * @since S60 3.2
         */
        void EnableIm();

    private:

        CWPVoIPItem();
        void ConstructL();

    private: // New functions

        /**
         * Check for duplicate provider and settingsname and renames if same.
         *
         * @since S60 3.0
         * @param aProfile Profile to check.
         * @return ETrue if operation was done; otherwise EFalse.
         */
        TBool CheckDuplicatesL( CRCSEProfileEntry& aEntry ) const;

        /**
         * Get Terminal Type for SIP User Agent Header.
         *
         * @since S60 3.0
         * @param aTeminalType Terminal type.
         */
        void GetTerminalTypeL( 
            TBuf<KMaxTerminalTypeLength>& aTerminalType ) const;

        /**
         * Get WLAN MAC address for SIP User Agent Header.
         *
         * @since S60 3.0
         * @param aMac WLAN MAC address.
         */
        void GetWlanMacAddressL( TBuf<KWlanMacAddressLength>& aMac ) const;

        /**
         * Cleanup method for array.
         *
         * @since S60 3.1
         * @param aParameter Parameter to be cleaned.
         */
        static void CleanupArrayItem( TAny* aArray );

        /**
         * Creates default codecs.
         *
         * @since S60 3.2
         * @param aProfile Profile to append new codecs.
         */
        void AddDefaultCodecsL( CRCSEProfileEntry& aProfileEntry );

    private: // Data.

        /*
         * VoIP codecs.
         * Own.
         */
         RPointerArray<CWPVoIPCodec> iCodecs;

        /*
         * Identifies the item.
         */
        TUint iItemId;

        /* Provider of settings. See OMA ProvCont document.
         * CP parameter: PROVIDER-ID.
         * Own.
         */
        HBufC* iProviderId;

        /* Name of VoIP settings visible to user when viewing the provisioning
         * message. See OMA ProvCont document.
         * CP parameter: NAME
         * Own.
         */
        HBufC* iName;

        /* All APPREFs that are referenced from this VoIP item's TO-APPREF 
         * parameter.
         * Own.
         */
        RPointerArray<HBufC8> iToAppRefs;

        /* Start media port.See w9013.txt or VoIP software settings document.
         * CP parameter: SMPORT.
         */
        TInt32 iStartMediaPort;

        /* End media port.See w9013.txt or VoIP software settings document.
         * CP parameter: EMPORT.
         */
        TInt32 iEndMediaPort;

        /* Quality of service for the media.See w9013.txt or VoIP software 
         * settings document.
         * CP parameter: MEDIAQOS.
         */
        TInt32 iMediaQoS;

        /* In band. See w9013.txt or VoIP software settings document.
         * CP parameter: NODTMFIB
         */
        TInt32 iDTMFInBand;

        /* Out-of-band. See w9013.txt or VoIP software settings document.
         * CP parameter: NODTMFOOB.
         */
        TInt32 iDTMFOutBand;

        /* VoIP id as descriptor to be returned by the SaveData method to the 
         * framework via adapter SaveDataL.
         * Own.
         */
        HBufC8* iSavedProfileId;

        /**
         * Secure call preference. See w9013.txt or VoIP software settings
         * document.
         */
        TInt iSecureCallPref;

        /**
         * RTCP, Real-Time Control Protocol reporting. See w9013.txt or VoIP
         * software settings document.
         */
        TInt iRTCP;

        /**
         * SIP VoIP User Agent header: terminal type display. See w9013.txt or
         * VoIP software settings document.
         */
        TInt iUAHTerminalType;

        /**
         * SIP VoIP User Agent header WLAN MAC address display. See w9013.txt
         * or VoIP software settings document.
         */
        TInt iUAHWLANMAC;

        /**
         * SIP VoIP User Agent header: free string. See w9013.txt or VoIP
         * software settings document.
         * Own.
         */
        HBufC* iUAHString;

        /**
         * Profile locked to IAP. See w9013.txt or VoIP software settings
         * document.
         */
        TInt iProfileLockedToIAP;

        /**
         * VoIP plugin UID. See w9013.txt or VoIP software settings document.
         */
        TInt iVoIPPluginUid;

        /**
         * Allow VoIP over WCDMA. See w9013.txt or VoIP software settings
         * document.
         */
        TInt iAllowVoIPOverWCDMA;

        /**
         * Number of meaningful VoIP digits for call identification.
         * See w9013.txt.
         */
        TInt iVoIPDigits;

        /**
         * Ignore domain part of address (URI) for VoIP calls rule.
         * See w9013.txt.
         */
        TInt iDomainPartIgnoreRule;

        /**
         * Flag to prevent set vmbx sip id if no vmbx settings are used.         
         */
        TBool iVmbxSettingsExist;

        /**
         * Whether or not to add user=phone to all numbers.
         * See w9013.txt.
         */
        TInt32 iAddUserPhoneToAllNumbers;

        /**
         * Connectivity test call address in registering.
         * See w9013.txt.
         * Own.
         */   
        HBufC* iSIPConnTestAddress;

        /**
         * Absolute URI for service provider bookmark.
         * See w9013.txt.
         * Own.
         */   
        HBufC* iServiceProviderBookmark;

        /**
         * The minimum allowed value for the session timer.
         * See w9013.txt.
         */
        TInt32 iSIPMinSE;

        /**
         * The session interval for a SIP session.
         * See w9013.txt.
         */
        TInt32 iSIPSessionExpires;

        /**
         * VoiceMailBox: MWI-URI.
         * See w9013.txt.
         * Own.
         */
        HBufC* iIPVoiceMailBoxURI;

        /**
         * VoiceMailBox: VoiceMailBox listening address.
         * See w9013.txt.
         * Own.
         */
        HBufC* iVmbxListenAddress;

        /**
         * VoiceMailBox: Interval for sending re-SUBSCRIBE.
         * See w9013.txt.
         */
        TInt32 iReSubscribeInterval;

        /**
         * VoiceMailBox: NAPDEF.
         * See w9013.txt.
         * Not own.
         */
        CWPCharacteristic* iNapDef;

        /**
         * VoiceMailBox: IAP ID.
         * See w9013.txt.
         */
        TUint32 iVmbxIapId;

        /**
         * URI to branding data xml.
         * See w9013.txt
         * Own.
         */   
        HBufC* iBrandingDataAddress;

        /**
         * Auto accept buddy presence subscription request.
         * see w9013.txt.
         */
        TInt32 iAutoAcceptBuddyRequest;

        /**
         * Auto enable state of service.
         * see w9013.txt.
         */
        TInt32 iAutoEnableService;

        /**
         * TO-NAPID value.
         * See w9013.txt
         * Own.
         */
        HBufC8* iToNapId;

        /**
         * SIP profile ID for VoIP profile.
         */
        TUint32 iSipId;

        /**
         * SCCP profile ID for VoIP profile.
         */
        TUint32 iSccpId;

        /**
         * SIP profile ID for VoiceMailBox.
         */
        TUint32 iVmbxSipId;

        /**
         * NATFW profile ID for VoIP profile.
         */
        TUint32 iNatFwId;

        /**
         * Presence settings ID for service settings.
         */
        TUint32 iPresenceId;

        /**
         * Boolean for telling if SIP ID is already set.
         */
        TBool iSipIdSet;

        /**
         * Boolean for telling if SCCP ID is already set.
         */
        TBool iSccpIdSet;

        /**
         * Boolean for telling if VMBX SIP ID is already set.
         */
        TBool iVmbxSipIdSet;

        /**
         * Boolean for telling if NATFW ID is already set.
         */
        TBool iNatFwIdSet;

        /**
         * Boolean for telling if Presence ID is already set.
         */
        TBool iPresenceIdSet;

        /**
         * TO-APPREF value under characteristic VOIPURIS.
         * Own.
         */
        HBufC8* iVoipUrisToAppRef;

        /**
         * Indicates which NAT protocol should be used.
         * see w9013.txt.
         */
        TInt32 iUsedNatProtocol;

        /**
         * Boolean for telling if SNAP ID is already set.
         */
        TBool iSnapIdSet;

        /**
         * SNAP profile ID for VoIP profile.
         */
        TUint32 iSnapId;        

        /**
         * APPREF of this settings item.
         * Own.
         */
        HBufC8* iAppRef;

        /**
         * Tells if IM is enabled or not.
         */
        TBool iImEnabled;
    };

#endif      // CWPVOIPITEM_H
            
// End of File