--- a/voipplugins/voipadapters/cpvoipadapter/src/CWPVoIPItem.cpp Tue Feb 02 00:05:57 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2001 +0,0 @@
-/*
-* 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 transiently and stores one VoIP settings item.
-*
-*/
-
-
-// INCLUDE FILES
-#include <e32std.h>
-#include <WPVoIPAdapter.rsg>
-#include <charconv.h>
-#include <in_sock.h> // TInetAddr, TSockAddr
-#include <crcseprofileentry.h>
-#include <crcseprofileregistry.h>
-#include <crcseaudiocodecentry.h>
-#include <crcseaudiocodecregistry.h>
-#include <CWPCharacteristic.h>
-#include <sysutil.h> // For GetWlanMacAddressL.
-#include <wlaninternalpskeys.h> // For GetWlanMacAddressL.
-#include <centralrepository.h>
-#include <settingsinternalcrkeys.h>
-#include <coemain.h> // For GetPhoneModelL.
-#include <WPAdapterUtil.h>
-#include <sipmanagedprofile.h>
-#include <sipprofileregistryobserver.h>
-#include <sipmanagedprofileregistry.h>
-#include <spsettings.h> // for SPS
-#include <spentry.h> // for SPS
-#include <spproperty.h> // for SPS
-#include <spdefinitions.h>
-#include <cmmanagerext.h>
-#include <cmdestinationext.h>
-#include <cmconnectionmethodext.h>
-#include <cmconnectionmethoddef.h>
-#include <cmpluginwlandef.h> // For WLAN plugin UID, i.e. bearer type.
-#include <versit.h>
-#include <cvimpstsettingsstore.h> // For IM tone path
-#include <pathinfo.h> // For getting phone rom root path.
-
-#include "CWPVoIPItem.h"
-#include "CSIPProfileRegistryObserver.h"
-#include "cipappphoneutils.h" // For GetPhoneModelL, GetTerminalTypeL
-#include "cipapputilsaddressresolver.h" // For GetWlanMacAddressL
-
-// LOCAL CONSTANTS
-static const TInt32 KNotSaved( -1 );
-static const TInt KMaxCharsInTUint32( 10 );
-const TInt32 KCCHPresenceSubServicePlugId = 0x1027545A;
-_LIT8( KUserAgent, "User-Agent" );
-_LIT8( KColonMark, ":" );
-// Default IM message tone
-_LIT( KDefaultTone, "Message 2.aac" );
-_LIT8( KSpaceMark, " " );
-_LIT( KVoIPAdapterName, "WPVoIPAdapter");
-_LIT( KOpenParenthesis, "(" );
-_LIT( KClosedParenthesis, ")" );
-const TInt KTwo( 2 );
-const TInt KVmbxResubscribeDefault = 600;
-
-// IM related constants.
-const TUint32 KIMSubServicePluginId = 0x1027545A; // KSIPConnectivityPluginImplUid
-const TUint32 KIMLaunchUid = 0x200255D0;
-const TInt KIMSettingsId = 1;
-
-// Following lines are for enabling debug prints.
-#ifdef _DEBUG
-#define DBG_PRINT(p) RDebug::Print(_L(p))
-#define DBG_PRINT2(p,a) RDebug::Print(_L(p),a)
-#else
-#define DBG_PRINT(p)
-#define DBG_PRINT2(p,a)
-#endif // _DEBUG
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::CWPVoIPItem
-//
-// ---------------------------------------------------------------------------
-//
-CWPVoIPItem::CWPVoIPItem()
- {
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::NewL
-//
-// ---------------------------------------------------------------------------
-//
-CWPVoIPItem* CWPVoIPItem::NewL()
- {
- DBG_PRINT( "CWPVoIPItem::NewL - begin" );
- CWPVoIPItem* self = new (ELeave) CWPVoIPItem;
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- DBG_PRINT( "CWPVoIPItem::NewL - end" );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::ConstructL()
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::ConstructL()
- {
- // Initialization with empty string or KNotSaved or -1 or if default
- // value exists with default values.
- iItemId = TUint( KNotSaved );
- TFileName fileName;
- Dll::FileName(fileName);
-
- // Default provider value read from the resource file.
- iProviderId = WPAdapterUtil::ReadHBufCL( fileName,
- KVoIPAdapterName, R_QTN_SM_PROVIDER_VOIP );
- // Default name value read from the resource file.
- iName = WPAdapterUtil::ReadHBufCL( fileName, KVoIPAdapterName,
- R_QTN_SM_HEAD_VOIP );
-
- iStartMediaPort = KNotSet;
- iEndMediaPort = KNotSet;
- iMediaQoS = KNotSet;
- iDTMFInBand = KNotSet;
- iDTMFOutBand = KNotSet;
- iSavedProfileId = HBufC8::NewL( 0 );
- iSecureCallPref = KNotSet;
- iRTCP = KNotSet;
- iUAHTerminalType = KNotSet;
- iUAHWLANMAC = KNotSet;
- iUAHString = HBufC::NewL( 0 );
- iProfileLockedToIAP = KNotSet;
- iVoIPPluginUid = KNotSet;
- iAllowVoIPOverWCDMA = KNotSet;
- iVoIPDigits = KNotSet;
- iDomainPartIgnoreRule = KNotSet;
- iAddUserPhoneToAllNumbers = KNotSet;
- iSIPConnTestAddress = HBufC::NewL( 0 );
- iServiceProviderBookmark = HBufC::NewL( 0 );
- iSIPMinSE = KNotSet;
- iSIPSessionExpires = KNotSet;
- iIPVoiceMailBoxURI = HBufC::NewL( 0 );
- iVmbxListenAddress = HBufC::NewL( 0 );
- iAutoAcceptBuddyRequest = KNotSet;
- iBrandingDataAddress = HBufC::NewL( 0 );
- iToNapId = HBufC8::NewL( 0 );
- iVoipUrisToAppRef = HBufC8::NewL( 0 );
- iUsedNatProtocol = KNotSet;
- iAppRef = HBufC8::NewL( 0 );
- iReSubscribeInterval = KVmbxResubscribeDefault;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::~CWPVoIPItem
-//
-// ---------------------------------------------------------------------------
-//
-CWPVoIPItem::~CWPVoIPItem()
- {
- DBG_PRINT( "CWPVoIPItem::~CWPVoIPItem - begin" );
- delete iProviderId;
- delete iName;
- iToAppRefs.ResetAndDestroy();
- iToAppRefs.Close();
- delete iSavedProfileId;
- delete iUAHString;
- delete iSIPConnTestAddress;
- delete iServiceProviderBookmark;
- delete iIPVoiceMailBoxURI;
- delete iVmbxListenAddress;
- delete iBrandingDataAddress;
- delete iToNapId;
- delete iVoipUrisToAppRef;
- delete iAppRef;
-
- iCodecs.ResetAndDestroy();
- iCodecs.Close();
-
- DBG_PRINT( "CWPVoIPItem::~CWPVoIPItem - end" );
- //lint -e{1740} iNapDef is not owned
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetAppRefL
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetAppRefL( const TDesC8& aAppRef )
- {
- delete iAppRef;
- iAppRef = NULL;
- iAppRef = aAppRef.AllocL();
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetProviderIdL
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetProviderIdL( const TDesC& aPROVIDERID )
- {
- delete iProviderId;
- iProviderId = NULL;
- iProviderId = aPROVIDERID.AllocL();
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetNameL
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetNameL( const TDesC& aNAME )
- {
- delete iName;
- iName = NULL;
- iName = aNAME.AllocL();
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::AddToAppRefL
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::AddToAppRefL( const TDesC8& aToAppRef )
- {
- // Dependencies to SIP, SCCP, NATFW and SNAP settings.
-
- // Must put string on cleanup stack in case memory alloc fails in AppendL.
- HBufC8* tmp = aToAppRef.AllocLC();
- iToAppRefs.AppendL( tmp );
- CleanupStack::Pop( tmp );
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetStartMediaPort
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetStartMediaPort( TInt aStartMediaPort )
- {
- iStartMediaPort = aStartMediaPort;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetEndMediaPort
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetEndMediaPort( TInt aEndMediaPort )
- {
- iEndMediaPort = aEndMediaPort;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetMediaQoS
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetMediaQoS( TInt aMediaQoS )
- {
- iMediaQoS = aMediaQoS;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetDTMFInBand
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetDTMFInBand( TInt aDTMFInBand )
- {
- iDTMFInBand = aDTMFInBand;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetDTMFOutOfBand
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetDTMFOutBand( TInt aDTMFOutBand )
- {
- iDTMFOutBand = aDTMFOutBand;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::AddCodec
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::AddCodecL( const CWPVoIPCodec* aVoIPCodec )
- {
- iCodecs.AppendL( aVoIPCodec );
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetSecureCallPref
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetSecureCallPref( TInt aSecureCallPref )
- {
- iSecureCallPref = aSecureCallPref;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetRTCP
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetRTCP( TInt aRTCP )
- {
- iRTCP = aRTCP;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetUAHTerminalType
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetUAHTerminalType( TInt aUAHTerminalType )
- {
- iUAHTerminalType = aUAHTerminalType;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetUAHWLANMAC
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetUAHWLANMAC( TInt aUAHWLANMAC )
- {
- iUAHWLANMAC = aUAHWLANMAC;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetUAHStringL
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetUAHStringL( const TDesC& aUAHString )
- {
- delete iUAHString;
- iUAHString = NULL;
- iUAHString = aUAHString.AllocL();
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetProfileLockedToIAP
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetProfileLockedToIAP( TInt aProfileLockedToIAP )
- {
- iProfileLockedToIAP = aProfileLockedToIAP;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetVoIPPluginUid
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetVoIPPluginUid( TInt aVoIPPluginUid )
- {
- iVoIPPluginUid = aVoIPPluginUid;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetAllowVoIPOverWCDMA
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetAllowVoIPOverWCDMA( TInt aAllowVoIPOverWCDMA )
- {
- iAllowVoIPOverWCDMA = aAllowVoIPOverWCDMA;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetVoIPDigits
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetVoIPDigits( TInt aVoIPDigits )
- {
- iVoIPDigits = aVoIPDigits;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetDomainPartIgnoreRule
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetDomainPartIgnoreRule( TInt aDomainPartIgnoreRule )
- {
- iDomainPartIgnoreRule = aDomainPartIgnoreRule;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetAddUserPhone
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetAddUserPhone( TInt32 aAddUserPhone )
- {
- iAddUserPhoneToAllNumbers = aAddUserPhone;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetSipConnTestAddress
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetSipConnTestAddressL( const TDesC& aSIPConnTestAddress )
- {
- delete iSIPConnTestAddress;
- iSIPConnTestAddress = NULL;
- iSIPConnTestAddress = aSIPConnTestAddress.AllocL();
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetServiceProviderBookmarkL
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetServiceProviderBookmarkL(
- const TDesC& aServiceProviderBookmark )
- {
- delete iServiceProviderBookmark;
- iServiceProviderBookmark = NULL;
- iServiceProviderBookmark = aServiceProviderBookmark.AllocL();
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetSipMinSe
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetSipMinSe( TInt32 aSIPMinSE )
- {
- iSIPMinSE = aSIPMinSE;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetSipSessionExpires
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetSipSessionExpires( TInt32 aSIPSessionExpires )
- {
- iSIPSessionExpires = aSIPSessionExpires;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetIPVoiceMailBoxURIL
-//
-// ---------------------------------------------------------------------------
-void CWPVoIPItem::SetIPVoiceMailBoxURIL( const TDesC& aIPVoiceMailBoxURI )
- {
- delete iIPVoiceMailBoxURI;
- iIPVoiceMailBoxURI = NULL;
- iIPVoiceMailBoxURI = aIPVoiceMailBoxURI.AllocL();
- iVmbxSettingsExist = ETrue;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetVoiceMailBoxListenURIL
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetVoiceMailBoxListenURIL( const TDesC& aVmbxListenAddress )
- {
- delete iVmbxListenAddress;
- iVmbxListenAddress = NULL;
- iVmbxListenAddress = aVmbxListenAddress.AllocL();
- iVmbxSettingsExist = ETrue;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetReSubscribeInterval
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetReSubscribeInterval( TInt32 aReSubscribeInterval )
- {
- iReSubscribeInterval = aReSubscribeInterval;
- iVmbxSettingsExist = ETrue;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetBrandingDataAddressL
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetBrandingDataAddressL( const TDesC& aBrandingDataAddress )
- {
- delete iBrandingDataAddress;
- iBrandingDataAddress = NULL;
- iBrandingDataAddress = aBrandingDataAddress.AllocL();
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetAutoAcceptBuddyRequest
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetAutoAcceptBuddyRequest( TInt32 aAutoAcceptBuddyRequest )
- {
- iAutoAcceptBuddyRequest = aAutoAcceptBuddyRequest;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetAutoEnableService
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetAutoEnableService( TInt32 aAutoEnableService )
- {
- iAutoEnableService = aAutoEnableService;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetNapDef
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetNapDef( CWPCharacteristic* aNapDef )
- {
- iNapDef = aNapDef;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetToNapIdL
-//
-// ---------------------------------------------------------------------------
-void CWPVoIPItem::SetToNapIdL( const TDesC8& aToNapId )
- {
- delete iToNapId;
- iToNapId = NULL;
- iToNapId = aToNapId.AllocL();
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetIapId
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetIapId( TUint32 aIapId )
- {
- iVmbxIapId = aIapId;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetStorageId
-//
-// ---------------------------------------------------------------------------
-//
-TBool CWPVoIPItem::SetStorageId( TSettingsType aProfileType,
- TUint32 aStorageId, const TDesC8& aAppRef )
- {
- DBG_PRINT( "CWPVoIPItem::SetStorageId - begin" );
- const TInt toAppRefCount = iToAppRefs.Count();
- TInt counter( KErrNone );
-
- //lint -e{961} No need for else statement here
- if ( ESIP == aProfileType )
- {
- for ( counter = 0; counter < toAppRefCount; counter++ )
- {
- if ( KErrNone == iToAppRefs[counter]->CompareF( aAppRef )
- && !iSipIdSet )
- {
- iSipId = aStorageId;
- iSipIdSet = ETrue;
- DBG_PRINT( "CWPVoIPItem::SetStorageId - SIP ID set; end" );
- return ETrue;
- }
- }
- if ( KErrNone == iVoipUrisToAppRef->CompareF( aAppRef ) )
- {
- iVmbxSipId = aStorageId;
- iVmbxSipIdSet = ETrue;
- DBG_PRINT(
- "CWPVoIPItem::SetStorageId - SIP ID for VMBX set; end" );
- return ETrue;
- }
- }
-
- else if ( ESCCP == aProfileType )
- {
- for ( counter = 0; counter < toAppRefCount; counter++ )
- {
- if ( KErrNone == iToAppRefs[counter]->CompareF( aAppRef )
- && !iSccpIdSet )
- {
- iSccpId = aStorageId;
- iSccpIdSet = ETrue;
- DBG_PRINT( "CWPVoIPItem::SetStorageId - SCCP ID set; end" );
- return ETrue;
- }
- }
- }
-
- else if ( ENATFW == aProfileType )
- {
- for ( counter = 0; counter < toAppRefCount; counter++ )
- {
- if ( KErrNone == iToAppRefs[counter]->CompareF( aAppRef )
- && !iNatFwIdSet )
- {
- iNatFwId = aStorageId;
- iNatFwIdSet = ETrue;
- DBG_PRINT(
- "CWPVoIPItem::SetStorageId - NAT/FW ID set; end" );
- return ETrue;
- }
- }
- }
-
- else if ( EPresence == aProfileType )
- {
- for ( counter = 0; counter < toAppRefCount; counter++ )
- {
- if ( KErrNone == iToAppRefs[counter]->CompareF( aAppRef )
- && !iPresenceIdSet )
- {
- iPresenceId = aStorageId;
- iPresenceIdSet = ETrue;
- DBG_PRINT(
- "CWPVoIPItem::SetStorageId - Presence ID set; end" );
- return ETrue;
- }
- }
- }
-
- else if ( ESNAP == aProfileType )
- {
- for ( counter = 0; counter < toAppRefCount; counter++ )
- {
- if ( KErrNone == iToAppRefs[counter]->CompareF( aAppRef )
- && !iSnapIdSet )
- {
- iSnapId = aStorageId;
- iSnapIdSet = ETrue;
- DBG_PRINT( "CWPVoIPItem::SetStorageId - SNAP ID set; end" );
- return ETrue;
- }
- }
- }
-
- return EFalse;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetVoipUrisToAppRefL
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetVoipUrisToAppRefL( const TDesC8& aToAppRef )
- {
- // VMBX dependency to SIP settigns, VoIP dependency to Presence settings.
- delete iVoipUrisToAppRef;
- iVoipUrisToAppRef = NULL;
- iVoipUrisToAppRef = aToAppRef.AllocL();
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SetUsedNatProtocol
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetUsedNatProtocol( TInt32 aUsedNatProtocol)
- {
- iUsedNatProtocol = aUsedNatProtocol;
- }
-
-// Getters
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::Name
-//
-// ---------------------------------------------------------------------------
-//
-const TDesC& CWPVoIPItem::Name() const
- {
- return *iName;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::UAHString
-//
-// ---------------------------------------------------------------------------
-//
-const TDesC& CWPVoIPItem::UAHString() const
- {
- return *iUAHString;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::ToNapId
-//
-// ---------------------------------------------------------------------------
-//
-const TDesC8& CWPVoIPItem::ToNapId() const
- {
- return *iToNapId;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::NapDef
-//
-// ---------------------------------------------------------------------------
-//
-CWPCharacteristic* CWPVoIPItem::NapDef()
- {
- return iNapDef;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::VoipUrisToAppRef
-//
-// ---------------------------------------------------------------------------
-//
-const TDesC8& CWPVoIPItem::VoipUrisToAppRef() const
- {
- return *iVoipUrisToAppRef;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::StoreL
-// 1) Set VoIP parameters into the VoIP profile entry.
-// 2) Save audio codecs and add their storage ids into the VoIP profile entry
-// and VoIP item.
-// 3) Save the VoIP profile entry.
-// SIP ID's, SIP profile specific data, SCCP ID & Presence ID are not stored
-// here, nor are VoIP settings belonging to SPS. They are all stored when the
-// SavingFinalized method is called because only then it is guaranteed that
-// the data needed is received and ready for saving.
-// ---------------------------------------------------------------------------
-//
-TUint CWPVoIPItem::StoreL()
- {
- DBG_PRINT( "CWPVoIPItem::StoreL - begin" );
- // Save the VoIP profile.
- CRCSEProfileEntry* cRCSEProfileEntry = CRCSEProfileEntry::NewLC(); // CS:1
- cRCSEProfileEntry->iId = iItemId;
- cRCSEProfileEntry->iProviderName.Copy( iProviderId->Des() );
- cRCSEProfileEntry->iSettingsName.Copy( iName->Des() );
-
- // Saving the codecs and and storaging their ids in VoIP profile.
- typedef CRCSEAudioCodecEntry AudioCodecEntry;
- CRCSEAudioCodecRegistry* cRCSEAudioCodecRegistry =
- CRCSEAudioCodecRegistry::NewLC(); // CS:2
-
- CWPVoIPCodec* tmpCodec = NULL;
- const TInt numberOfCodecs = iCodecs.Count();
-
- for ( TInt codecIndex = 0; codecIndex < numberOfCodecs; codecIndex++ )
- {
- tmpCodec = iCodecs[codecIndex];
- CRCSEAudioCodecEntry* cRCSEAudioCodecEntry =
- CRCSEAudioCodecEntry::NewLC(); // CS:3
-
- // Codec initiated with it's default values.
- cRCSEAudioCodecEntry->SetDefaultCodecValueSet( tmpCodec->
- iMediaSubtypeName->Des() );
-
- cRCSEAudioCodecEntry->iMediaSubTypeName.Zero();
- cRCSEAudioCodecEntry->iMediaSubTypeName.Copy( tmpCodec->
- iMediaSubtypeName->Des() );
-
- // Set codec values, take values only when they exist.
-
- // JitterBufferSize
- if ( KNotSet != tmpCodec->iJitterBufferSize )
- {
- cRCSEAudioCodecEntry->iJitterBufferSize =
- tmpCodec->iJitterBufferSize;
- }
-
- // OctetAlign
- if ( KNotSet != tmpCodec->iOctetAlign )
- {
- cRCSEAudioCodecEntry->iOctetAlign =
- static_cast<AudioCodecEntry::TOnOff>
- ( tmpCodec->iOctetAlign );
- }
-
- // ModeSet
- TInt modeSetCount = iCodecs[codecIndex]->iModeSet.Count();
- if ( modeSetCount > 0 )
- {
- // Take off default values if some values are provisioned.
- cRCSEAudioCodecEntry->iModeSet.Reset();
- for ( TInt modeSetIndex = 0; modeSetIndex < modeSetCount;
- modeSetIndex++ )
- {
- cRCSEAudioCodecEntry->iModeSet.Append( iCodecs[codecIndex]->
- iModeSet[modeSetIndex] );
- }// for
- }// if
-
- // ModeChangePeriod
- if ( KNotSet != tmpCodec->iModeChangePeriod )
- {
- cRCSEAudioCodecEntry->iModeChangePeriod =
- tmpCodec->iModeChangePeriod;
- }
-
- // ModeChangeNeighbor
- if ( KNotSet != tmpCodec->iModeChangeNeighbor )
- {
- cRCSEAudioCodecEntry->iModeChangeNeighbor =
- static_cast<AudioCodecEntry::TOnOff>
- ( tmpCodec->iModeChangeNeighbor );
- }
-
- // PTime
- if ( KNotSet != tmpCodec->iPTime )
- {
- cRCSEAudioCodecEntry->iPtime = tmpCodec->iPTime;
- }
-
- // MaxPTime
- if ( KNotSet != tmpCodec->iMaxPTime )
- {
- cRCSEAudioCodecEntry->iMaxptime = tmpCodec->iMaxPTime;
- }
-
- // VAD
- if ( KNotSet != tmpCodec->iVAD )
- {
- cRCSEAudioCodecEntry->iVAD =
- static_cast<AudioCodecEntry::TOnOff>( tmpCodec->iVAD );
- }
-
- // AnnexB
- if ( KNotSet != tmpCodec->iAnnexB )
- {
- cRCSEAudioCodecEntry->iAnnexb =
- static_cast<AudioCodecEntry::TOnOff>( tmpCodec->iAnnexB );
- }
-
- // MaxRed
- if ( KNotSet != tmpCodec->iMaxRed )
- {
- cRCSEAudioCodecEntry->iMaxRed = tmpCodec->iMaxRed;
- }
- // Simple check, that there is at least media sub type name.
- // If not ok, then the codec is not saved.
- if ( tmpCodec->iMediaSubtypeName->Length() > 0 )
- {
- // Store the codec entry and get the storage id.
- tmpCodec->iId = cRCSEAudioCodecRegistry->AddL(
- *cRCSEAudioCodecEntry );
- }// if
-
- CleanupStack::PopAndDestroy( cRCSEAudioCodecEntry ); // CS:2
- }// for
-
- CleanupStack::PopAndDestroy ( cRCSEAudioCodecRegistry ); // CS:1
-
- if ( numberOfCodecs > 1 )
- {
- // Sort the codec array into priority order (by PRIORITYINDEX).
- RArray<TInt> priorityArray;
- for ( TInt codecIndex = 0; codecIndex < numberOfCodecs; codecIndex++ )
- {
- priorityArray.Append( iCodecs[codecIndex]->iPriorityIndex );
- }
- priorityArray.Sort();
- RPointerArray<CWPVoIPCodec> tmpArray;
-
- for ( TInt priorityIndex = 0; priorityIndex < numberOfCodecs;
- priorityIndex++ )
- {
- for ( TInt codecIndex = 0; codecIndex < numberOfCodecs;
- codecIndex++ )
- {
- if ( priorityArray[priorityIndex] ==
- iCodecs[codecIndex]->iPriorityIndex )
-
- {
- tmpArray.Append( iCodecs[codecIndex] );
- }
- }
- }
-
- for ( TInt codecIndex = 0; codecIndex < numberOfCodecs; codecIndex++ )
- {
- iCodecs[codecIndex] = tmpArray[codecIndex];
- }
- tmpArray.Close();
- priorityArray.Close();
- } // if
-
- // Set the priority list of codecs.
- for ( TInt codecIndex = 0; codecIndex < numberOfCodecs; codecIndex++ )
- {
- cRCSEProfileEntry->iPreferredCodecs.Append(
- iCodecs[codecIndex]->iId );
- }// for
-
- // If no codecs exist create default codecs
- if ( !numberOfCodecs )
- {
- AddDefaultCodecsL( *cRCSEProfileEntry );
- }
-
- // StartMediaPort
- if ( KNotSet != iStartMediaPort )
- {
- cRCSEProfileEntry->iStartMediaPort = iStartMediaPort;
- }
-
- // EndMediaPort
- if ( KNotSet != iEndMediaPort )
- {
- cRCSEProfileEntry->iEndMediaPort = iEndMediaPort;
- }
-
- // MediaQoS
- if ( KNotSet != iMediaQoS )
- {
- cRCSEProfileEntry->iMediaQOS = iMediaQoS;
- }
-
- // InbandDTMF
- if ( KNotSet != iDTMFInBand )
- {
- cRCSEProfileEntry->iInbandDTMF =
- static_cast<VoIPProfileEntry::TOnOff>( iDTMFInBand );
- }
-
- // OutbandDTMF
- if ( KNotSet != iDTMFOutBand )
- {
- cRCSEProfileEntry->iOutbandDTMF =
- static_cast<VoIPProfileEntry::TOnOff>( iDTMFOutBand );
- }
-
- // SecureCallPref
- if ( KNotSet != iSecureCallPref )
- {
- cRCSEProfileEntry->iSecureCallPreference = iSecureCallPref;
- }
-
- // RTCP
- if ( KNotSet != iRTCP )
- {
- cRCSEProfileEntry->iRTCP = iRTCP;
- }
-
- // UAHTerminalType
- if ( KNotSet != iUAHTerminalType )
- {
- cRCSEProfileEntry->iSIPVoIPUAHTerminalType = iUAHTerminalType;
- }
-
- // UAHWLANMAC
- if ( KNotSet != iUAHWLANMAC )
- {
- cRCSEProfileEntry->iSIPVoIPUAHeaderWLANMAC = iUAHWLANMAC;
- }
-
- // UAHString
- if ( iUAHString->Des().Length() > 0 )
- {
- cRCSEProfileEntry->iSIPVoIPUAHeaderString.Zero();
- cRCSEProfileEntry->iSIPVoIPUAHeaderString.Insert( 0,
- iUAHString->Des() );
- }
-
- // ProfileLockedToIAP
- if ( KNotSet != iProfileLockedToIAP )
- {
- cRCSEProfileEntry->iProfileLockedToIAP =
- static_cast<VoIPProfileEntry::TOnOff>( iProfileLockedToIAP );
- }
-
- // VoIPPluginUid
- if ( KNotSet != iVoIPPluginUid )
- {
- cRCSEProfileEntry->iVoIPPluginUID = iVoIPPluginUid;
- }
-
- // AllowVoIPOverWCDMA
- if ( KNotSet != iAllowVoIPOverWCDMA )
- {
- cRCSEProfileEntry->iAllowVoIPoverWCDMA =
- static_cast<VoIPProfileEntry::TOnOff>( iAllowVoIPOverWCDMA );
- }
-
- // VoIPDigits
- if ( KNotSet != iVoIPDigits )
- {
- cRCSEProfileEntry->iMeanCountOfVoIPDigits = iVoIPDigits;
- }
-
- // DomainPartIgnoreRule
- if ( KNotSet != iDomainPartIgnoreRule )
- {
- cRCSEProfileEntry->iIgnoreAddrDomainPart = iDomainPartIgnoreRule;
- }
-
- // UserPhoneToAllNumbers
- if ( KNotSet != iAddUserPhoneToAllNumbers )
- {
- cRCSEProfileEntry->iUserPhoneUriParameter =
- static_cast<VoIPProfileEntry::TOnOff>
- ( iAddUserPhoneToAllNumbers );
- }
-
- // SIPConnTestAddress
- if ( iSIPConnTestAddress->Des().Length() > 0 )
- {
- cRCSEProfileEntry->iSIPConnTestAddress.Zero();
- cRCSEProfileEntry->iSIPConnTestAddress.Insert( 0,
- iSIPConnTestAddress->Des() );
- }
-
- // SIPMinSE
- if ( KNotSet != iSIPMinSE )
- {
- cRCSEProfileEntry->iSIPMinSE = iSIPMinSE;
- }
-
- // SIPSessionExpires
- if ( KNotSet != iSIPSessionExpires )
- {
- cRCSEProfileEntry->iSIPSessionExpires = iSIPSessionExpires;
- }
-
- // UsedNATProtocol
- if ( KNotSet != iUsedNatProtocol )
- {
- cRCSEProfileEntry->iNATProtocol = iUsedNatProtocol;
- }
-
- if ( iSipIdSet )
- {
- TSettingIds referredIds;
- referredIds.iProfileType = 0; // SIP.
- referredIds.iProfileId = TInt( iSipId );
- // Never reference to profile specific settings.
- referredIds.iProfileSpecificSettingId = KNotSet;
- cRCSEProfileEntry->iIds.Append( referredIds );
- }
-
- // Save the new profile into the registry.
- CRCSEProfileRegistry* cRCSEProfileRegistry =
- CRCSEProfileRegistry::NewLC();
- // CS:2
- CheckDuplicatesL( *cRCSEProfileEntry );
- iItemId = cRCSEProfileRegistry->AddL( *cRCSEProfileEntry );
-
- CleanupStack::PopAndDestroy( cRCSEProfileRegistry ); // CS:1
- CleanupStack::PopAndDestroy( cRCSEProfileEntry ); // CS:0
-
- // __UHEAP_MARKEND; // for testing
-
- HBufC8* tmpId = HBufC8::NewL( KMaxCharsInTUint32 );
- _LIT8( KFormatTxt,"%u" );
- tmpId->Des().Format( KFormatTxt, iItemId );
- delete iSavedProfileId;
- iSavedProfileId = NULL;
- iSavedProfileId = tmpId;
- tmpId = NULL;
- DBG_PRINT( "CWPVoIPItem::StoreL - end" );
- return iItemId;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SaveData
-//
-// ---------------------------------------------------------------------------
-//
-const TDesC8& CWPVoIPItem::SaveData() const
- {
- return *iSavedProfileId;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::SavingFinalizedL()
-// 1) Save TO-APPREF dependent data and set SIP User Agent Header in SIP
-// profile.
-// 2) Update the VoIP profile with references to the saved TO-APPREF dependent
-// data.
-// 3) Reset the data collections that are based on data received via call to
-// method SettingsSaved (i.e. APPREF related data). This is because the
-// user might for some reason save the settings twice and then the data is
-// received once again (there would be then dublicates of data).
-//
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SavingFinalizedL()
- {
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - begin" );
- // Load the VoIP profile for update from the registry.
- CRCSEProfileRegistry* cRCSEProfileRegistry =
- CRCSEProfileRegistry::NewLC();
- // CS:1
- CRCSEProfileEntry* cRCSEProfileEntry = CRCSEProfileEntry::NewLC(); // CS:2
- cRCSEProfileRegistry->FindL( iItemId, *cRCSEProfileEntry );
-
- // Data dependent on the other adapters can be saved here, because it is
- // now quaranteed that TO-APPREF pointed information is known.
- // Test if this VoIP settings item of type SIP or SCCP dependent.
-
- // Save RCSE related data.
- //lint -e{961} No need for else statement here
- if ( iSccpIdSet )
- {
- TSettingIds referredIds;
- referredIds.iProfileType = 1; // SCCP.
- referredIds.iProfileId = TInt( iSccpId );
- // Never reference to profile specific settings.
- referredIds.iProfileSpecificSettingId = KNotSet;
- cRCSEProfileEntry->iIds.Append( referredIds );
- cRCSEProfileRegistry->UpdateL( iItemId, *cRCSEProfileEntry );
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - SCCP ID set" );
- }
-
- if ( iNatFwIdSet )
- {
- cRCSEProfileEntry->iNATSettingsStorageId = iNatFwId;
- cRCSEProfileRegistry->UpdateL( iItemId, *cRCSEProfileEntry );
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - NAT/FW ID set" );
- }
-
- // Save Service Provider Settings related data if service ID exists.
- TUint32 serviceId = cRCSEProfileEntry->iServiceProviderId;
- if ( 0 == serviceId )
- {
- CleanupStack::PopAndDestroy( 2, cRCSEProfileRegistry );
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - end" );
- return;
- }
- CSPSettings* spSettings = CSPSettings::NewLC(); // CS:3
- CSPEntry* spEntry = CSPEntry::NewLC(); // CS:4
-
- TInt err = spSettings->FindEntryL( serviceId, *spEntry );
- User::LeaveIfError( err );
-
- CSPProperty* property = CSPProperty::NewLC(); // CS:5
-
- // VoiceMailBox: SIP ID
- //lint -e{961} No need for else statement here
- if ( iVmbxSipIdSet )
- {
- err = property->SetName( ESubPropertyVMBXSettingsId );
- property->SetValue( iVmbxSipId );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyVMBXSettingsId, iVmbxSipId ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- }
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - Vmbx SIP ID set" );
- }
- // Use the same SIP ID as in RCSE. Store only if some
- // vmbx settings are provisioned.
- else if ( iSipIdSet && iVmbxSettingsExist )
- {
- err = property->SetName( ESubPropertyVMBXSettingsId );
- property->SetValue( iSipId );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyVMBXSettingsId, iSipId ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- }
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \
- Vmbx SIP ID set (same SIP ID as in RCSE)" );
- }
-
- // VoiceMailBox: MWI-URI
- if ( iIPVoiceMailBoxURI->Des().Length() > 0 )
- {
- err = property->SetName( ESubPropertyVMBXMWIAddress );
- property->SetValue( iIPVoiceMailBoxURI->Des() );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyVMBXMWIAddress,
- iIPVoiceMailBoxURI->Des() ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- }
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - Vmbx MWI-URI set" );
- }
-
- // VoiceMailBox: Listening URI
- if ( !iVmbxListenAddress->Des().Length()
- && iIPVoiceMailBoxURI->Des().Length() )
- {
- // Use same URI as with MWI-URI.
- delete iVmbxListenAddress;
- iVmbxListenAddress = NULL;
- iVmbxListenAddress = iIPVoiceMailBoxURI->Des().AllocL();
- }
-
- if ( iVmbxListenAddress->Des().Length() > 0 )
- {
- err = property->SetName( ESubPropertyVMBXListenAddress );
- property->SetValue( iVmbxListenAddress->Des() );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyVMBXListenAddress,
- iVmbxListenAddress->Des() ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- }
- DBG_PRINT(
- "CWPVoIPItem::SavingFinalizedL - Vmbx Listening URI set" );
- }
-
- // VoiceMailBox: Re-Subscribe interval
- if ( iVmbxSettingsExist )
- {
- err = property->SetName( ESubPropertyVMBXMWISubscribeInterval );
- property->SetValue( iReSubscribeInterval );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyVMBXMWISubscribeInterval,
- iReSubscribeInterval ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- }
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \
- Vmbx re-SUBSCRIBE interval set" );
- }
-
- // VoiceMailBox: Preferred IAP ID
- if ( iVmbxIapId )
- {
- err = property->SetName( ESubPropertyVMBXPreferredIAPId );
- property->SetValue( iVmbxIapId );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyVMBXPreferredIAPId, iVmbxIapId ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- }
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - Vmbx IAP ID set" );
- }
-
- // Service provider bookmark URI
- if ( iServiceProviderBookmark->Des().Length() > 0 )
- {
- err = property->SetName( EPropertyServiceBookmarkUri );
- property->SetValue( iServiceProviderBookmark->Des() );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- EPropertyServiceBookmarkUri,
- iServiceProviderBookmark->Des() ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- }
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \
- Service provider bookmark URI set" );
- }
-
- // Branding data URI
- if ( iBrandingDataAddress->Des().Length() > 0 )
- {
- err = property->SetName( ESubPropertyVoIPBrandDataUri );
- property->SetValue( iBrandingDataAddress->Des() );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyVoIPBrandDataUri,
- iBrandingDataAddress->Des() ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- }
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - Branding data URI set" );
- }
-
- // Presence settings ID and Presence Subservice plug-in UID
- if ( iPresenceIdSet )
- {
- err = property->SetName( ESubPropertyPresenceSettingsId );
- property->SetValue( iPresenceId );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyPresenceSettingsId, iPresenceId ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- }
-
- // Converged Connection Handler (CCH) Presence Subservice plug-in UID
- err = property->SetName( EPropertyPresenceSubServicePluginId );
- property->SetValue( KCCHPresenceSubServicePlugId );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- EPropertyPresenceSubServicePluginId,
- KCCHPresenceSubServicePlugId ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- }
-
- // ***************
- // IM settings
- // ***************
- //
- if ( iImEnabled )
- {
- property->SetName( ESubPropertyIMEnabled );
- property->SetValue( EOn );
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyIMEnabled, EOn ) );
- }
-
- property->SetName( ESubPropertyIMLaunchUid );
- property->SetValue( KIMLaunchUid );
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyIMLaunchUid, KIMLaunchUid ) );
- }
-
- property->SetName( ESubPropertyIMSettingsId );
- // The value only needs to be different from 0,
- // no-one actually uses it.
- property->SetValue( KIMSettingsId );
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyIMSettingsId, KIMSettingsId ) );
- }
-
- property->SetName( EPropertyIMSubServicePluginId );
- property->SetValue( KIMSubServicePluginId );
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- EPropertyIMSubServicePluginId, KIMSubServicePluginId ) );
- }
-
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - set IM tonepath" );
-
- MVIMPSTSettingsStore* settings =
- CVIMPSTSettingsStore::NewLC(); // CS: 1
-
- // Set default tone.
- TFileName toneFile;
- toneFile.Copy( PathInfo::RomRootPath() );
- toneFile.Append( PathInfo::DigitalSoundsPath() );
- toneFile.Append( KDefaultTone );
- User::LeaveIfError( settings->SetL( serviceId,
- EServiceToneFileName, toneFile ) );
- // settings
- CleanupStack::PopAndDestroy(); // CS: 0
-
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - IM settings set" );
- }
- DBG_PRINT(
- "CWPVoIPItem::SavingFinalizedL - Presence settings ID set" );
- }
-
- // AutoAcceptBuddyRequest
- if ( KNotSet != iAutoAcceptBuddyRequest )
- {
- err = property->SetName( ESubPropertyPresenceRequestPreference );
- property->SetValue( static_cast<TOnOff> ( iAutoAcceptBuddyRequest ) );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyPresenceRequestPreference,
- static_cast<TOnOff> ( iAutoAcceptBuddyRequest ) ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- }
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \
- AutoAcceptBuddyRequest set" );
- }
-
- // AutoEnableService
- if ( KNotSet != iAutoEnableService )
- {
- err = property->SetName( ESubPropertyVoIPEnabled );
- property->SetValue( static_cast<TOnOff>( iAutoEnableService ) );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyVoIPEnabled,
- static_cast<TOnOff> ( iAutoEnableService ) ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \
- voip AutoEnableService set" );
- }
- if ( iPresenceIdSet )
- {
- err = property->SetName( ESubPropertyPresenceEnabled );
- property->SetValue(
- static_cast<TOnOff>( iAutoEnableService ) );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyPresenceEnabled,
- static_cast<TOnOff> ( iAutoEnableService ) ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \
- presence AutoEnableService set" );
- }
-
- }
- if ( iVmbxSipIdSet || ( iSipIdSet && iVmbxSettingsExist )
- && iIPVoiceMailBoxURI->Des().Length() )
- {
- err = property->SetName( ESubPropertyVMBXEnabled );
- property->SetValue( static_cast<TOnOff>( iAutoEnableService ) );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyVMBXEnabled,
- static_cast<TOnOff> ( iAutoEnableService ) ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- }
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \
- vmbx AutoEnableService set" );
- }
-
- if ( iImEnabled )
- {
- err = property->SetName( ESubPropertyIMEnabled );
- property->SetValue( static_cast<TOnOff>( iAutoEnableService ) );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyIMEnabled,
- static_cast<TOnOff> ( iAutoEnableService ) ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- }
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \
- im AutoEnableService set" );
- }
- }
-
- // SNAP ID
- if ( iSnapIdSet && iSipIdSet )
- {
- CSIPProfileRegistryObserver* sipObs =
- CSIPProfileRegistryObserver::NewLC(); // CS:1
- CSIPManagedProfileRegistry* sipReg =
- CSIPManagedProfileRegistry::NewLC( *sipObs ); // CS:2
- CSIPProfile* sipProf = NULL;
- sipProf = sipReg->ProfileL( iSipId );
- CleanupStack::PushL( sipProf ); // CS:3
- CSIPManagedProfile* sipManagedProf =
- static_cast<CSIPManagedProfile*>( sipProf );
- CleanupStack::PushL( sipManagedProf ); // CS:4
- sipManagedProf->SetParameter( KSIPSnapId, iSnapId );
- sipManagedProf->SetParameter( KSIPAccessPointId, (TUint32)0 );
- sipReg->SaveL( *sipManagedProf );
- CleanupStack::PopAndDestroy( sipManagedProf ); // CS:3
- CleanupStack::Pop( sipProf ); // CS:2
- sipProf = NULL;
- // sipReg, sipObs
- CleanupStack::PopAndDestroy( 2, sipObs ); // CS:0
- }
- else if ( !iSnapIdSet && iSipIdSet )
- {
- CSIPProfileRegistryObserver* sipObs =
- CSIPProfileRegistryObserver::NewLC(); // CS:1
- CSIPManagedProfileRegistry* sipReg =
- CSIPManagedProfileRegistry::NewLC( *sipObs ); // CS:2
- CSIPProfile* sipProf = NULL;
- sipProf = sipReg->ProfileL( iSipId );
- CleanupStack::PushL( sipProf ); // CS:3
- CSIPManagedProfile* sipManagedProf =
- static_cast<CSIPManagedProfile*>( sipProf );
- CleanupStack::PushL( sipManagedProf ); // CS:4
-
- TUint32 snapId( 0 );
- err = sipManagedProf->GetParameter( KSIPSnapId, snapId );
- if ( KErrNone == err )
- {
- iSnapId = snapId;
- iSnapIdSet = ETrue;
- }
- CleanupStack::PopAndDestroy( sipManagedProf ); // CS:3
- CleanupStack::Pop( sipProf ); // CS:2
- sipProf = NULL;
- // sipReg, sipObs
- CleanupStack::PopAndDestroy( 2, sipObs ); // CS:0
- }
-
- if ( iSnapIdSet )
- {
- err = property->SetName( ESubPropertyVoIPPreferredSNAPId );
- property->SetValue( iSnapId );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyVoIPPreferredSNAPId, iSnapId ) );
- }
- else
- {
- User::LeaveIfError( err );
- }
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - SNAP ID set" );
- }
- }
-
- // ***************
- // IM SNAP ID
- // ***************
- //
- if ( iImEnabled )
- {
- property->SetName( ESubPropertyIMPreferredSNAPId );
- err = property->SetValue( iSnapId );
- if ( KErrNone == err )
- {
- err = spEntry->AddPropertyL( *property );
- if ( KErrAlreadyExists == err )
- {
- User::LeaveIfError( spEntry->UpdateProperty(
- ESubPropertyIMPreferredSNAPId, iSnapId ) );
- }
- }
- }
-
- User::LeaveIfError( spSettings->UpdateEntryL( *spEntry ) );
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \
- Service provider entry updated" );
-
- // property, spEntry spSettings, cRCSEProfileEntry, cRCSEProfileRegistry
- CleanupStack::PopAndDestroy( 5, cRCSEProfileRegistry ); // CS:0
- iSipIdSet = EFalse;
-
- DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - end" );
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::CheckDuplicatesL
-// Checks if duplicate provider and settings name. Renames if same.
-// ---------------------------------------------------------------------------
-//
-TBool CWPVoIPItem::CheckDuplicatesL(
- CRCSEProfileEntry& aEntry ) const
- {
- DBG_PRINT( "CWPVoIPItem::CheckDuplicatesL - begin" );
- CRCSEProfileRegistry *cRCSEProfile = CRCSEProfileRegistry::NewLC();
-
- // Array of pointers to all profile entries.
- CArrayPtrFlat<CRCSEProfileEntry>* profileEntries = new (ELeave)
- CArrayPtrFlat<CRCSEProfileEntry>( 1 );
- TCleanupItem cleanupItem( CWPVoIPItem::CleanupArrayItem, profileEntries );
- CleanupStack::PushL( cleanupItem );
-
- // Load profiles to pointerarray.
- RArray<TUint32> allIds;
- CleanupClosePushL( allIds );
- cRCSEProfile->GetAllIdsL( allIds );
-
- for ( TInt counter = 0; counter < allIds.Count(); counter++ )
- {
- CRCSEProfileEntry* profile = CRCSEProfileEntry::NewLC();
- cRCSEProfile->FindL( allIds[counter], *profile );
- profileEntries->AppendL( profile );
- CleanupStack::Pop( profile );
- }
- CleanupStack::PopAndDestroy( &allIds );
-
- // Check and rename duplicate provider.
-
- TBool isValid( EFalse );
-
- HBufC* newProviderName = HBufC::NewLC( KMaxProviderNameLength * KTwo );
- newProviderName->Des().Copy( aEntry.iProviderName );
-
- TInt count( profileEntries->Count() );
-
- for ( TInt n = 0; n < count; n++ )
- {
- const TDesC& existingName = profileEntries->At( n )->iProviderName;
- if ( existingName.Compare( aEntry.iProviderName ) == 0 )
- {
- TBool isUnique( EFalse );
-
- for ( TInt i = 1; !isUnique; i++ )
- {
- TBool found( EFalse );
- newProviderName->Des().Copy( aEntry.iProviderName );
- newProviderName->Des().Append( KOpenParenthesis() );
- newProviderName->Des().AppendNum( static_cast<TInt64>( i ) );
- newProviderName->Des().Append( KClosedParenthesis() );
- for ( TInt m = 0; m < count; m++ )
- {
- if ( profileEntries->At( m )->iProviderName.Compare(
- newProviderName->Des() ) == 0 )
- {
- found = ETrue;
- }
- }
- if ( !found )
- {
- isUnique = ETrue;
- }
- }
- }
- }
-
- // Change setting only if length is smaller than max length.
- if ( newProviderName->Length() < KMaxProviderNameLength )
- {
- aEntry.iProviderName.Copy( newProviderName->Des() );
- isValid = ETrue;
- }
-
- // Check and rename also duplicate settingsName.
- HBufC* newSettingsName = HBufC::NewLC( KMaxSettingsNameLength * KTwo );
- newSettingsName->Des().Copy( aEntry.iSettingsName );
- isValid = EFalse;
- for ( TInt n = 0; n < count; n++ )
- {
- const TDesC& existingName = profileEntries->At( n )->iSettingsName;
- if ( existingName.Compare( aEntry.iSettingsName ) == 0 )
- {
- TBool isUnique( EFalse );
-
- for ( TInt i = 1; !isUnique; i++ )
- {
- TBool found( EFalse );
- newSettingsName->Des().Copy( aEntry.iSettingsName );
- newSettingsName->Des().Append( KOpenParenthesis() );
- newSettingsName->Des().AppendNum( static_cast<TInt64>( i ) );
- newSettingsName->Des().Append( KClosedParenthesis() );
- for ( TInt m = 0; m < count; m++ )
- {
- if ( profileEntries->At( m )->iSettingsName.Compare(
- newSettingsName->Des() ) == 0 )
- {
- found = ETrue;
- } // if
- } // for
-
- if ( !found )
- {
- isUnique = ETrue;
- }
- } // for ( TInt m = 0; m < count; m++ )
- } // if ( existingName.Compare( ...
- } // for ( TInt n = 0; n < count; n++ )
-
- // Change setting only if length is smaller than max length.
- if ( newSettingsName->Length() < KMaxSettingsNameLength )
- {
- aEntry.iSettingsName.Copy( newSettingsName->Des() );
- isValid = ETrue;
- }
-
- // newSettingsName, newProviderName, profileEntries, cRCSEProfile
- CleanupStack::PopAndDestroy( 4, cRCSEProfile );
- DBG_PRINT( "CWPVoIPItem::CheckDuplicatesL - end" );
- return isValid;
- }
-
-// ---------------------------------------------------------------------------
-// void CWPVoIPItem::SetTelephonyPreferenceL
-// For setting telephony preference.
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::SetTelephonyPreferenceL ( const TTelephonyPreference&
- aTelephonyPreference ) const
- {
- DBG_PRINT( "CWPVoIPItem::SetTelephonyPreferenceL - begin" );
- // Central Repository for richcall settings
- CRepository* rep = CRepository::NewLC( KCRUidRichCallSettings );
- //lint -e{961} No need for else statement here
- if ( EPSPreferred == aTelephonyPreference )
- {
- rep->Set( KRCSEPreferredTelephony, EPSPreferred );
- }
- else if ( ECSPreferred == aTelephonyPreference )
- {
- rep->Set( KRCSEPreferredTelephony, ECSPreferred );
- }
-
- CleanupStack::PopAndDestroy( rep );
-
- DBG_PRINT( "CWPVoIPItem::SetTelephonyPreferenceL - end" );
- }
-
-// ---------------------------------------------------------------------------
-// void CWPVoIPItem::AppRef
-// ---------------------------------------------------------------------------
-//
-HBufC8* CWPVoIPItem::AppRef()
- {
- DBG_PRINT( "CWPVoIPItem::AppRef()" );
- return iAppRef;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::GetTerminalTypeL
-// Collect terminal type used in SIP User Agent Header.
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::GetTerminalTypeL(
- TBuf<KMaxTerminalTypeLength>& aTerminalType ) const
- {
- DBG_PRINT( "CWPVoIPItem::GetTerminalTypeL - begin" );
-
- aTerminalType.Zero(); // Reset before use
-
- CIpAppPhoneUtils* phoneUtils = CIpAppPhoneUtils::NewLC();
- phoneUtils->GetTerminalTypeL( aTerminalType ); // Gets phone model + type
- CleanupStack::PopAndDestroy( phoneUtils );
-
- DBG_PRINT( "CWPVoIPItem::GetTerminalTypeL - end" );
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::GetWlanMacAddressL
-// Gets WLAN MAC address used in SIP User Agent Header (same as *#62209526#).
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::GetWlanMacAddressL(
- TBuf<KWlanMacAddressLength>& aMac ) const
- {
- DBG_PRINT( "CWPVoIPItem::GetWlanMacAddressL - begin" );
-
- CIPAppUtilsAddressResolver* resolver =
- CIPAppUtilsAddressResolver::NewLC();
-
- TBuf8<KWlanMacAddressLength> wlanmac;
- _LIT8( KFormat, "-" );
- resolver->GetWlanMACAddress( wlanmac, KFormat );
- // wlanmac buffer contains now the wlan mac address like 00-15-a0-99-10-ec
- CleanupStack::PopAndDestroy( resolver );
- aMac.Copy( wlanmac );
-
- DBG_PRINT( "CWPVoIPItem::GetWlanMacAddressL - end" );
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::GetUserAgentHeaderL
-// Gets SIP User Agent Header.
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::GetUserAgentHeaderL(
- TBuf8<KUAHLength>& aUserAgentHeader ) const
- {
- DBG_PRINT( "CWPVoIPItem::GetUserAgentHeaderL - begin" );
- // Create a CRCSEProfileEntry to get default values for User-Agent header
- // parameters.
- CRCSEProfileEntry* cRCSEProfileEntry = CRCSEProfileEntry::NewLC();
-
- aUserAgentHeader.Zero(); // Reset before use
- TBuf<KMaxTerminalTypeLength> tempTerminalType;
- TBuf<KWlanMacAddressLength> tempWlanMac;
- TBuf<KMaxSettingsLength32> tempFreeString;
- tempFreeString = UAHString();
-
- TInt uahTerminalType = iUAHTerminalType;
- TInt uahWlanMac = iUAHWLANMAC;
-
- if ( KNotSet == iUAHTerminalType )
- {
- uahTerminalType = cRCSEProfileEntry->iSIPVoIPUAHTerminalType;
- }
-
- if ( KNotSet == uahWlanMac )
- {
- uahWlanMac = cRCSEProfileEntry->iSIPVoIPUAHeaderWLANMAC;
- }
-
- if ( uahTerminalType || uahWlanMac || ( tempFreeString.Length() > 0 ) )
- {
- aUserAgentHeader.Append( KUserAgent );
- aUserAgentHeader.Append( KColonMark );
- aUserAgentHeader.Append( KSpaceMark );
- }
-
- if ( uahTerminalType )
- {
- GetTerminalTypeL( tempTerminalType );
- aUserAgentHeader.Append( tempTerminalType );
- aUserAgentHeader.Append( KSpaceMark );
- }
- if ( uahWlanMac )
- {
- GetWlanMacAddressL( tempWlanMac );
- aUserAgentHeader.Append( tempWlanMac );
- aUserAgentHeader.Append( KSpaceMark );
- }
- if ( tempFreeString.Length() > 0 )
- {
- aUserAgentHeader.Append( tempFreeString );
- }
- CleanupStack::PopAndDestroy( cRCSEProfileEntry );
- DBG_PRINT( "CWPVoIPItem::GetUserAgentHeader - end" );
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::CleanupArrayItem
-// Cleans up an array.
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::CleanupArrayItem( TAny* aArray )
- {
- CArrayPtrFlat<CRCSEProfileEntry>* tempArray =
- static_cast<CArrayPtrFlat<CRCSEProfileEntry>*>( aArray );
- if ( tempArray )
- {
- tempArray->ResetAndDestroy();
- }
- delete tempArray;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::AddDefaultCodecsL
-// Creates default codecs.
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::AddDefaultCodecsL( CRCSEProfileEntry& aProfileEntry )
- {
- DBG_PRINT( "CWPVoIPItem::AddDefaultCodecsL - start" );
-
- CRCSEAudioCodecRegistry* audioCodecRegistry =
- CRCSEAudioCodecRegistry::NewLC();
- CRCSEAudioCodecEntry* audioCodecEntry = CRCSEAudioCodecEntry::NewLC();
-
- TUint32 codecId( KErrNone );
-
- audioCodecEntry->SetDefaultCodecValueSet( KAudioCodecAMRWB() );
- codecId = audioCodecRegistry->AddL( *audioCodecEntry );
- aProfileEntry.iPreferredCodecs.AppendL( codecId );
-
- audioCodecEntry->SetDefaultCodecValueSet( KAudioCodecAMR() );
- codecId = audioCodecRegistry->AddL( *audioCodecEntry );
- aProfileEntry.iPreferredCodecs.AppendL( codecId );
-
- audioCodecEntry->SetDefaultCodecValueSet( KAudioCodecPCMU() );
- codecId = audioCodecRegistry->AddL( *audioCodecEntry );
- aProfileEntry.iPreferredCodecs.AppendL( codecId );
-
- audioCodecEntry->SetDefaultCodecValueSet( KAudioCodecPCMA() );
- codecId = audioCodecRegistry->AddL( *audioCodecEntry );
- aProfileEntry.iPreferredCodecs.AppendL( codecId );
-
- audioCodecEntry->SetDefaultCodecValueSet( KAudioCodeciLBC() );
- codecId = audioCodecRegistry->AddL( *audioCodecEntry );
- aProfileEntry.iPreferredCodecs.AppendL( codecId );
-
- audioCodecEntry->SetDefaultCodecValueSet( KAudioCodecG729() );
- codecId = audioCodecRegistry->AddL( *audioCodecEntry );
- aProfileEntry.iPreferredCodecs.AppendL( codecId );
-
- audioCodecEntry->SetDefaultCodecValueSet( KAudioCodecCN() );
- codecId = audioCodecRegistry->AddL( *audioCodecEntry );
- aProfileEntry.iPreferredCodecs.AppendL( codecId );
-
- // audioCodecEntry, audioCodecRegistry
- CleanupStack::PopAndDestroy( 2, audioCodecRegistry );
-
- DBG_PRINT( "CWPVoIPItem::AddDefaultCodecsL - end" );
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::ItemId
-// ---------------------------------------------------------------------------
-//
-TUint32 CWPVoIPItem::ItemId()
- {
- return iItemId;
- }
-
-// ---------------------------------------------------------------------------
-// CWPVoIPItem::EnableIm
-// ---------------------------------------------------------------------------
-//
-void CWPVoIPItem::EnableIm()
- {
- iImEnabled = ETrue;
- }
-
-// End of File