diff -r 7b872347d83b -r 6d0b9f605b61 voipplugins/voipadapters/cpvoipadapter/src/CWPVoIPItem.cpp --- 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 -#include -#include -#include // TInetAddr, TSockAddr -#include -#include -#include -#include -#include -#include // For GetWlanMacAddressL. -#include // For GetWlanMacAddressL. -#include -#include -#include // For GetPhoneModelL. -#include -#include -#include -#include -#include // for SPS -#include // for SPS -#include // for SPS -#include -#include -#include -#include -#include -#include // For WLAN plugin UID, i.e. bearer type. -#include -#include // For IM tone path -#include // 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 - ( 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 - ( 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( tmpCodec->iVAD ); - } - - // AnnexB - if ( KNotSet != tmpCodec->iAnnexB ) - { - cRCSEAudioCodecEntry->iAnnexb = - static_cast( 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 priorityArray; - for ( TInt codecIndex = 0; codecIndex < numberOfCodecs; codecIndex++ ) - { - priorityArray.Append( iCodecs[codecIndex]->iPriorityIndex ); - } - priorityArray.Sort(); - RPointerArray 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( iDTMFInBand ); - } - - // OutbandDTMF - if ( KNotSet != iDTMFOutBand ) - { - cRCSEProfileEntry->iOutbandDTMF = - static_cast( 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( iProfileLockedToIAP ); - } - - // VoIPPluginUid - if ( KNotSet != iVoIPPluginUid ) - { - cRCSEProfileEntry->iVoIPPluginUID = iVoIPPluginUid; - } - - // AllowVoIPOverWCDMA - if ( KNotSet != iAllowVoIPOverWCDMA ) - { - cRCSEProfileEntry->iAllowVoIPoverWCDMA = - static_cast( iAllowVoIPOverWCDMA ); - } - - // VoIPDigits - if ( KNotSet != iVoIPDigits ) - { - cRCSEProfileEntry->iMeanCountOfVoIPDigits = iVoIPDigits; - } - - // DomainPartIgnoreRule - if ( KNotSet != iDomainPartIgnoreRule ) - { - cRCSEProfileEntry->iIgnoreAddrDomainPart = iDomainPartIgnoreRule; - } - - // UserPhoneToAllNumbers - if ( KNotSet != iAddUserPhoneToAllNumbers ) - { - cRCSEProfileEntry->iUserPhoneUriParameter = - static_cast - ( 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 ( iAutoAcceptBuddyRequest ) ); - if ( KErrNone == err ) - { - err = spEntry->AddPropertyL( *property ); - if ( KErrAlreadyExists == err ) - { - User::LeaveIfError( spEntry->UpdateProperty( - ESubPropertyPresenceRequestPreference, - static_cast ( iAutoAcceptBuddyRequest ) ) ); - } - else - { - User::LeaveIfError( err ); - } - } - DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \ - AutoAcceptBuddyRequest set" ); - } - - // AutoEnableService - if ( KNotSet != iAutoEnableService ) - { - err = property->SetName( ESubPropertyVoIPEnabled ); - property->SetValue( static_cast( iAutoEnableService ) ); - if ( KErrNone == err ) - { - err = spEntry->AddPropertyL( *property ); - if ( KErrAlreadyExists == err ) - { - User::LeaveIfError( spEntry->UpdateProperty( - ESubPropertyVoIPEnabled, - static_cast ( iAutoEnableService ) ) ); - } - else - { - User::LeaveIfError( err ); - } - DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \ - voip AutoEnableService set" ); - } - if ( iPresenceIdSet ) - { - err = property->SetName( ESubPropertyPresenceEnabled ); - property->SetValue( - static_cast( iAutoEnableService ) ); - if ( KErrNone == err ) - { - err = spEntry->AddPropertyL( *property ); - if ( KErrAlreadyExists == err ) - { - User::LeaveIfError( spEntry->UpdateProperty( - ESubPropertyPresenceEnabled, - static_cast ( 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( iAutoEnableService ) ); - if ( KErrNone == err ) - { - err = spEntry->AddPropertyL( *property ); - if ( KErrAlreadyExists == err ) - { - User::LeaveIfError( spEntry->UpdateProperty( - ESubPropertyVMBXEnabled, - static_cast ( iAutoEnableService ) ) ); - } - else - { - User::LeaveIfError( err ); - } - } - DBG_PRINT( "CWPVoIPItem::SavingFinalizedL - \ - vmbx AutoEnableService set" ); - } - - if ( iImEnabled ) - { - err = property->SetName( ESubPropertyIMEnabled ); - property->SetValue( static_cast( iAutoEnableService ) ); - if ( KErrNone == err ) - { - err = spEntry->AddPropertyL( *property ); - if ( KErrAlreadyExists == err ) - { - User::LeaveIfError( spEntry->UpdateProperty( - ESubPropertyIMEnabled, - static_cast ( 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( 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( 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* profileEntries = new (ELeave) - CArrayPtrFlat( 1 ); - TCleanupItem cleanupItem( CWPVoIPItem::CleanupArrayItem, profileEntries ); - CleanupStack::PushL( cleanupItem ); - - // Load profiles to pointerarray. - RArray 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( 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( 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& 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& aMac ) const - { - DBG_PRINT( "CWPVoIPItem::GetWlanMacAddressL - begin" ); - - CIPAppUtilsAddressResolver* resolver = - CIPAppUtilsAddressResolver::NewLC(); - - TBuf8 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& 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 tempTerminalType; - TBuf tempWlanMac; - TBuf 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* tempArray = - static_cast*>( 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