--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/htiui/HtiServicePlugins/HtiMessagesServicePlugin/src/HtiMsgSettingsHandler.cpp Tue Feb 02 00:17:27 2010 +0200
@@ -0,0 +1,829 @@
+/*
+* Copyright (c) 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: Implementation of message settings handling.
+*
+*/
+
+
+// INCLUDE FILES
+#include "HtiMessagesServicePlugin.h"
+#include "HtiMsgSettingsHandler.h"
+
+#include <HtiDispatcherInterface.h>
+#include <HTILogging.h>
+
+#include <cmconnectionmethod.h>
+#include <cmconnectionmethoddef.h>
+#include <cmdestination.h>
+#include <cmmanager.h>
+
+#include <csmsaccount.h>
+#include <mmssettings.h>
+#include <smutset.h>
+#include <CentralRepository.h>
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+const TUid KCRUidSmum = { 0x101F87EF }; // from MessagingInternalCRKeys.h
+
+const TInt KMinSetDefaultSmsCenterLength = 4;
+const TInt KMinDeleteSmsCenterLength = 2;
+const TInt KMinSetMmsSettingsLength = 10;
+
+// set SMS settings has a fixed length
+const TInt KSetSmsSettingsLength = 6;
+
+// message validity times in seconds
+const TInt KValidityTimeMax = 0;
+const TInt KValidityTime1h = 3600;
+const TInt KValidityTime6h = 6 * 3600;
+const TInt KValidityTime24h = 24 * 3600;
+const TInt KValidityTime3d = 3 * 24 * 3600;
+const TInt KValidityTime1w = 7 * 24 * 3600;
+
+// from MmsSettingsDefs.h
+const TInt KMmsUniImageSmallWidth = 640;
+const TInt KMmsUniImageSmallHeight = 480;
+const TInt KMmsUniImageLargeWidth = 1600;
+const TInt KMmsUniImageLargeHeight = 1200;
+
+const TInt KApMaxConnNameLength = 30;
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+_LIT8( KErrorInvalidParameters, "Invalid command parameters" );
+_LIT8( KErrorSetDefaultSmsCenterFailed, "Setting default SMS center failed" );
+_LIT8( KErrorDeleteSmsCenterFailed, "SMS center deletion failed" );
+_LIT8( KErrorSmsCenterAlreadyExists, "SMS center with given name already exists with different number" );
+_LIT8( KErrorSmsCenterNotFound, "SMS center with given name not found" );
+_LIT8( KErrorSetSmsSettingsFailed, "Setting SMS service settings failed" );
+_LIT8( KErrorSetMmsSettingsFailed, "Setting MMS service settings failed" );
+_LIT8( KErrorApNotFound, "Access Point not found" );
+_LIT8( KErrorUnrecognizedCommand, "Unrecognized command" );
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CHtiMsgSettingsHandler::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CHtiMsgSettingsHandler* CHtiMsgSettingsHandler::NewL()
+ {
+ HTI_LOG_FUNC_IN( "CHtiMsgSettingsHandler::NewL" );
+ CHtiMsgSettingsHandler* self = new (ELeave) CHtiMsgSettingsHandler();
+ CleanupStack::PushL ( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ HTI_LOG_FUNC_OUT( "CHtiMsgSettingsHandler::NewL" );
+ return self;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CHtiMsgSettingsHandler::CHtiMsgSettingsHandler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------------------------------
+CHtiMsgSettingsHandler::CHtiMsgSettingsHandler()
+ {
+ HTI_LOG_FUNC_IN( "CHtiMsgSettingsHandler::CHtiMsgSettingsHandler" );
+
+ HTI_LOG_FUNC_OUT( "CHtiMsgSettingsHandler::CHtiMsgSettingsHandler" );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CHtiMsgSettingsHandler::~CHtiMsgSettingsHandler
+// Destructor.
+// -----------------------------------------------------------------------------
+CHtiMsgSettingsHandler::~CHtiMsgSettingsHandler()
+ {
+ HTI_LOG_FUNC_IN( "CHtiMsgSettingsHandler::~CHtiMsgSettingsHandler" );
+
+ HTI_LOG_FUNC_OUT( "CHtiMsgSettingsHandler::~CHtiMsgSettingsHandler" );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CHtiMsgSettingsHandler::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CHtiMsgSettingsHandler::ConstructL()
+ {
+ HTI_LOG_FUNC_IN( "CHtiMsgSettingsHandler::ConstructL" );
+
+ HTI_LOG_FUNC_OUT( "CHtiMsgSettingsHandler::ConstructL" );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CHtiMsgSettingsHandler::SetDispatcher
+// Sets the dispatcher pointer.
+// -----------------------------------------------------------------------------
+
+void CHtiMsgSettingsHandler::SetDispatcher( MHtiDispatcher* aDispatcher )
+ {
+ HTI_LOG_FUNC_IN( "CHtiMsgSettingsHandler::SetDispatcher" );
+ iDispatcher = aDispatcher;
+ HTI_LOG_FUNC_OUT( "CHtiMsgSettingsHandler::SetDispatcher" );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CHtiMsgSettingsHandler::ProcessMessageL
+// Parses the received message and calls handler functions.
+// -----------------------------------------------------------------------------
+void CHtiMsgSettingsHandler::ProcessMessageL( const TDesC8& aMessage,
+ THtiMessagePriority /*aPriority*/ )
+ {
+ HTI_LOG_FUNC_IN( "CHtiMsgSettingsHandler::ProcessMessageL" );
+
+ // Zero length message and command code validity already checked
+ // in HtiMessagesServicePlugin.
+
+ if ( aMessage[0] == CHtiMessagesServicePlugin::ESetDefaultSmsCenter )
+ {
+ if ( aMessage.Length() < 1 + KMinSetDefaultSmsCenterLength )
+ {
+ SendErrorMessageL( KErrArgument, KErrorInvalidParameters );
+ }
+ else
+ {
+ TRAPD( err, HandleSetDefaultSmsCenterL(
+ aMessage.Right( aMessage.Length() - 1 ) ) );
+ if ( err != KErrNone )
+ {
+ SendErrorMessageL( err, KErrorSetDefaultSmsCenterFailed );
+ }
+ }
+ }
+
+ else if ( aMessage[0] == CHtiMessagesServicePlugin::EDeleteSmsCenter )
+ {
+ if ( aMessage.Length() < 1 + KMinDeleteSmsCenterLength )
+ {
+ SendErrorMessageL( KErrArgument, KErrorInvalidParameters );
+ }
+ else
+ {
+ TRAPD( err, HandleDeleteSmsCenterL(
+ aMessage.Right( aMessage.Length() - 1 ) ) );
+ if ( err != KErrNone )
+ {
+ SendErrorMessageL( err, KErrorDeleteSmsCenterFailed );
+ }
+ }
+ }
+
+ else if ( aMessage[0] == CHtiMessagesServicePlugin::ESetSmsSettings )
+ {
+ if ( aMessage.Length() != 1 + KSetSmsSettingsLength )
+ {
+ SendErrorMessageL( KErrArgument, KErrorInvalidParameters );
+ }
+ else
+ {
+ TRAPD( err, HandleSetSmsSettingsL(
+ aMessage.Right( aMessage.Length() - 1 ) ) );
+ if ( err != KErrNone )
+ {
+ SendErrorMessageL( err, KErrorSetSmsSettingsFailed );
+ }
+ }
+ }
+
+ else if ( aMessage[0] == CHtiMessagesServicePlugin::ESetMmsSettings )
+ {
+ if ( aMessage.Length() < 1 + KMinSetMmsSettingsLength )
+ {
+ SendErrorMessageL( KErrArgument, KErrorInvalidParameters );
+ }
+ else
+ {
+ TRAPD( err, HandleSetMmsSettingsL(
+ aMessage.Right( aMessage.Length() - 1 ) ) );
+ if ( err != KErrNone )
+ {
+ SendErrorMessageL( err, KErrorSetMmsSettingsFailed );
+ }
+ }
+ }
+
+ else
+ {
+ SendErrorMessageL( KErrArgument, KErrorUnrecognizedCommand );
+ }
+
+ HTI_LOG_FUNC_OUT( "CHtiMsgSettingsHandler::ProcessMessageL" );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CHtiMsgSettingsHandler::HandleSetDefaultSmsCenterL
+// Creates new default SMS center.
+// ----------------------------------------------------------------------------
+void CHtiMsgSettingsHandler::HandleSetDefaultSmsCenterL( const TDesC8& aData )
+ {
+ HTI_LOG_FUNC_IN( "CHtiMsgSettingsHandler::HandleSetDefaultSmsCenterL" );
+
+ TBuf<255> name;
+ TBuf<255> number;
+
+ TInt dataLength = aData.Length();
+ TInt offset = 0;
+ TInt fieldLength = aData[offset];
+ offset++;
+
+ if ( offset + fieldLength > dataLength )
+ {
+ HTI_LOG_TEXT( "Invalid length specified for name" );
+ SendErrorMessageL( KErrArgument, KErrorInvalidParameters );
+ return;
+ }
+ name.Copy( aData.Mid( offset, fieldLength ) );
+ offset += fieldLength;
+ fieldLength = aData[offset];
+ offset++;
+
+ if ( offset + fieldLength > dataLength )
+ {
+ HTI_LOG_TEXT( "Invalid length specified for number" );
+ SendErrorMessageL( KErrArgument, KErrorInvalidParameters );
+ return;
+ }
+ number.Copy( aData.Mid( offset, fieldLength ) );
+
+ HTI_LOG_FORMAT( "SMS center name: %S", &name );
+ HTI_LOG_FORMAT( "SMS center number: %S", &number );
+
+ HTI_LOG_TEXT( "Loading current settings..." );
+ CSmsSettings* smsSettings = CSmsSettings::NewLC();
+ CSmsAccount* smsAccount = CSmsAccount::NewLC();
+ smsAccount->LoadSettingsL( *smsSettings );
+
+ HTI_LOG_TEXT( "Looping through existing SMS centers..." );
+ TInt i = 0;
+ for ( i = 0; i < smsSettings->ServiceCenterCount(); i++ )
+ {
+ CSmsServiceCenter ¢er = smsSettings->GetServiceCenter( i );
+
+ HTI_LOG_FORMAT( "Found SMS center: %S", &( center.Name() ) );
+
+ if ( center.Name() == name && center.Address() != number )
+ {
+ HTI_LOG_TEXT( "Error, SMS center with given name already exists" );
+ SendErrorMessageL( KErrAlreadyExists, KErrorSmsCenterAlreadyExists );
+ CleanupStack::PopAndDestroy( 2 ); // smsAccount, smsSettings
+ return;
+ }
+ else if ( center.Name() == name && center.Address() == number )
+ {
+ HTI_LOG_TEXT( "The defined SMS center already exists, setting it to default" );
+ smsSettings->SetDefaultServiceCenter( i );
+ smsAccount->SaveSettingsL( *smsSettings );
+
+ CleanupStack::PopAndDestroy( 2 ); // smsAccount, smsSettings
+ SendOkMsgL( KNullDesC8 );
+
+ return;
+ }
+ }
+
+ HTI_LOG_TEXT( "Creating new default SMS center" );
+ smsSettings->AddServiceCenterL( name, number );
+ smsSettings->SetDefaultServiceCenter( i );
+ smsAccount->SaveSettingsL( *smsSettings );
+
+ CleanupStack::PopAndDestroy( 2 ); // smsAccount, smsSettings
+
+ SendOkMsgL( KNullDesC8 );
+
+ HTI_LOG_FUNC_OUT( "CHtiMsgSettingsHandler::HandleSetDefaultSmsCenterL" );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CHtiMsgSettingsHandler::HandleDeleteSmsCenterL
+// Deletes the defined SMS center.
+// ----------------------------------------------------------------------------
+void CHtiMsgSettingsHandler::HandleDeleteSmsCenterL( const TDesC8& aData )
+ {
+ HTI_LOG_FUNC_IN( "CHtiMsgSettingsHandler::HandleDeleteSmsCenterL" );
+
+ TBuf<255> name;
+
+ TInt dataLength = aData.Length();
+ TInt offset = 0;
+ TInt fieldLength = aData[offset];
+ offset++;
+
+ if ( offset + fieldLength > dataLength )
+ {
+ HTI_LOG_TEXT( "Invalid length specified for name" );
+ SendErrorMessageL( KErrArgument, KErrorInvalidParameters );
+ return;
+ }
+ name.Copy( aData.Mid( offset, fieldLength ) );
+
+ HTI_LOG_FORMAT( "SMS center name: %S", &name );
+
+ HTI_LOG_TEXT( "Loading current settings..." );
+ CSmsSettings* smsSettings = CSmsSettings::NewLC();
+ CSmsAccount* smsAccount = CSmsAccount::NewLC();
+ smsAccount->LoadSettingsL( *smsSettings );
+
+ HTI_LOG_TEXT( "Looping through existing SMS centers..." );
+ TInt i = 0;
+ for ( i = 0; i < smsSettings->ServiceCenterCount(); i++ )
+ {
+ CSmsServiceCenter ¢er = smsSettings->GetServiceCenter( i );
+
+ HTI_LOG_FORMAT( "Found SMS center: %S", &( center.Name() ) );
+
+ if ( center.Name() == name )
+ {
+ HTI_LOG_TEXT( "Name matches, deleting..." );
+ smsSettings->RemoveServiceCenter( i );
+ smsAccount->SaveSettingsL( *smsSettings );
+
+ CleanupStack::PopAndDestroy( 2 ); // smsAccount, smsSettings
+
+ SendOkMsgL( KNullDesC8 );
+ return;
+ }
+ }
+
+ CleanupStack::PopAndDestroy( 2 ); // smsAccount, smsSettings
+
+ SendErrorMessageL( KErrNotFound, KErrorSmsCenterNotFound );
+
+ HTI_LOG_FUNC_OUT( "CHtiMsgSettingsHandler::HandleDeleteSmsCenterL" );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CHtiMsgSettingsHandler::HandleSetSmsSettingsL
+// Sets the SMS service settings.
+// ----------------------------------------------------------------------------
+void CHtiMsgSettingsHandler::HandleSetSmsSettingsL( const TDesC8& aData )
+ {
+ HTI_LOG_FUNC_IN( "CHtiMsgSettingsHandler::HandleSetSmsSettingsL" );
+
+ // extract values
+ TInt offset = 0;
+ TInt characterSupport = aData[offset];
+ offset++;
+ HTI_LOG_FORMAT( "Character support = %d", characterSupport );
+
+ TBool deliveryReport = aData[offset];
+ offset++;
+ HTI_LOG_FORMAT( "Delivery report = %d", deliveryReport );
+
+ TInt validityPeriod = aData[offset];
+ offset++;
+ HTI_LOG_FORMAT( "Validity period = %d", validityPeriod );
+
+ TInt messageConversion = aData[offset];
+ offset++;
+ HTI_LOG_FORMAT( "Message conversion = %d", messageConversion );
+
+ TInt preferredConnection = aData[offset];
+ offset++;
+ HTI_LOG_FORMAT( "Preferred connection = %d", preferredConnection );
+
+ TBool replyViaSameCenter = aData[offset];
+ offset++;
+ HTI_LOG_FORMAT( "Reply via same center = %d", replyViaSameCenter );
+
+ // Validate values
+ if ( characterSupport > 1 || validityPeriod > 5 ||
+ messageConversion > 3 || preferredConnection > 1 )
+ {
+ HTI_LOG_TEXT( "Invalid values found" );
+ SendErrorMessageL( KErrArgument, KErrorInvalidParameters );
+ return;
+ }
+
+ HTI_LOG_TEXT( "Loading current settings..." );
+ CSmsSettings* smsSettings = CSmsSettings::NewLC();
+ CSmsAccount* smsAccount = CSmsAccount::NewLC();
+ smsAccount->LoadSettingsL( *smsSettings );
+
+ HTI_LOG_TEXT( "Opening SMS settings Central Repository" );
+ CRepository* cenRep = CRepository::NewLC( KCRUidSmum );
+ HTI_LOG_TEXT( "Setting character support setting to SMS settings Central Repository" );
+ TUint32 KSmumCharSupport = 0x00000008; // from MessagingInternalCRKeys.h
+ switch ( characterSupport )
+ {
+ case 0:
+ cenRep->Set( KSmumCharSupport, ECharSetFull );
+ break;
+ case 1:
+ cenRep->Set( KSmumCharSupport, ECharSetReduced );
+ break;
+ default:
+ User::Leave( KErrArgument );
+ break;
+ }
+ CleanupStack::PopAndDestroy( cenRep );
+ HTI_LOG_TEXT( "SMS settings Central Repository closed" );
+
+ smsSettings->SetDeliveryReport( deliveryReport );
+
+ switch ( validityPeriod )
+ {
+ case 0:
+ smsSettings->SetValidityPeriod( TTimeIntervalMinutes( 0 ) );
+ break;
+ case 1:
+ smsSettings->SetValidityPeriod(
+ TTimeIntervalMinutes( KValidityTime1h / 60 ) );
+ break;
+ case 2:
+ smsSettings->SetValidityPeriod(
+ TTimeIntervalMinutes( KValidityTime6h / 60 ) );
+ break;
+ case 3:
+ smsSettings->SetValidityPeriod(
+ TTimeIntervalMinutes( KValidityTime24h / 60 ) );
+ break;
+ case 4:
+ smsSettings->SetValidityPeriod(
+ TTimeIntervalMinutes( KValidityTime3d / 60 ) );
+ break;
+ case 5:
+ smsSettings->SetValidityPeriod(
+ TTimeIntervalMinutes( KValidityTime1w / 60 ) );
+ break;
+ default:
+ User::Leave( KErrArgument );
+ break;
+ }
+
+ switch ( messageConversion )
+ {
+ case 0:
+ smsSettings->SetMessageConversion( ESmsConvPIDNone );
+ break;
+ case 1:
+ smsSettings->SetMessageConversion( ESmsConvFax );
+ break;
+ case 2:
+ smsSettings->SetMessageConversion( ESmsConvPaging );
+ break;
+ case 3:
+ smsSettings->SetMessageConversion( ESmsConvMail );
+ break;
+ default:
+ User::Leave( KErrArgument );
+ break;
+ }
+
+ switch ( preferredConnection )
+ {
+ case 0:
+ smsSettings->SetSmsBearer( CSmsSettings::ESmsBearerCircuitPreferred );
+ break;
+ case 1:
+ smsSettings->SetSmsBearer( CSmsSettings::ESmsBearerPacketPreferred );
+ break;
+ default:
+ User::Leave( KErrArgument );
+ break;
+ }
+
+ smsSettings->SetReplyPath( replyViaSameCenter );
+
+ HTI_LOG_TEXT( "Saving the settings" );
+ smsAccount->SaveSettingsL( *smsSettings );
+
+ CleanupStack::PopAndDestroy( 2 ); // smsAccount, smsSettings
+
+ SendOkMsgL( KNullDesC8 );
+
+ HTI_LOG_FUNC_OUT( "CHtiMsgSettingsHandler::HandleSetSmsSettingsL" );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CHtiMsgSettingsHandler::HandleSetMmsSettingsL
+// Sets the MMS service settings.
+// ----------------------------------------------------------------------------
+void CHtiMsgSettingsHandler::HandleSetMmsSettingsL( const TDesC8& aData )
+ {
+ HTI_LOG_FUNC_IN( "CHtiMsgSettingsHandler::HandleSetMmsSettingsL" );
+ TInt offset = 0;
+
+ // Get the access point name and search UID for that AP.
+ TInt apNameLength = aData[offset];
+ offset++;
+ if ( apNameLength > KApMaxConnNameLength ||
+ aData.Length() != ( KMinSetMmsSettingsLength + apNameLength - 1 ) )
+ {
+ SendErrorMessageL( KErrArgument, KErrorInvalidParameters );
+ return;
+ }
+
+ TBuf<KApMaxConnNameLength> apName;
+ apName.Copy( aData.Mid( offset, apNameLength ) );
+ offset += apNameLength;
+ HTI_LOG_FORMAT( "Searching AP with name: %S", &apName );
+ TInt apUid = GetAccessPointUIDL( apName );
+ if ( apUid == KErrNotFound )
+ {
+ SendErrorMessageL( KErrNotFound, KErrorApNotFound );
+ return;
+ }
+
+ // Extract other values
+ TMmsCreationMode creationMode = ( TMmsCreationMode ) aData[offset];
+ offset++;
+ HTI_LOG_FORMAT( "creation mode = %d", creationMode );
+
+ TInt imageSize = aData[offset];
+ offset++;
+ HTI_LOG_FORMAT( "image size = %d", imageSize );
+
+ TInt receptionMode = aData[offset];
+ offset++;
+ HTI_LOG_FORMAT( "reception mode = %d", receptionMode );
+
+ TBool receiveAnonymous = aData[offset];
+ offset++;
+ HTI_LOG_FORMAT( "receive anonymous = %d", receiveAnonymous );
+
+ TBool receiveAdvert = aData[offset];
+ offset++;
+ HTI_LOG_FORMAT( "receive adverts = %d", receiveAdvert );
+
+ TBool requestDeliveryReport = aData[offset];
+ offset++;
+ HTI_LOG_FORMAT( "request deliv reps = %d", requestDeliveryReport );
+
+ TBool sendDeliveryReport = aData[offset];
+ offset++;
+ HTI_LOG_FORMAT( "send deliv reps = %d", sendDeliveryReport );
+
+ TInt validityPeriod = aData[offset];
+ offset++;
+ HTI_LOG_FORMAT( "validity period = %d", validityPeriod );
+
+ // Validate values
+ if ( creationMode > 2 || imageSize > 2 ||
+ receptionMode > 3 || validityPeriod > 5 ||
+ ( creationMode == 0 && imageSize == 2 ) )
+ {
+ HTI_LOG_TEXT( "Invalid values found" );
+ SendErrorMessageL( KErrArgument, KErrorInvalidParameters );
+ return;
+ }
+
+ // Load current settings
+ CMmsSettings* mmsSettings = CMmsSettings::NewL();
+ CleanupStack::PushL( mmsSettings );
+ mmsSettings->LoadSettingsL();
+ HTI_LOG_TEXT( "Settings loaded - now updating" );
+
+ // Update the values
+ if ( mmsSettings->AccessPointCount() > 0 )
+ {
+ mmsSettings->DeleteAccessPointL( 0 );
+ }
+ mmsSettings->AddAccessPointL( apUid, 0 );
+
+ mmsSettings->SetCreationMode( creationMode );
+
+ switch ( imageSize )
+ {
+ case 0:
+ mmsSettings->SetImageWidth( KMmsUniImageSmallWidth );
+ mmsSettings->SetImageHeight( KMmsUniImageSmallHeight );
+ break;
+ case 1:
+ mmsSettings->SetImageWidth( KMmsUniImageLargeWidth );
+ mmsSettings->SetImageHeight( KMmsUniImageLargeHeight );
+ break;
+ default:
+ User::Leave( KErrArgument );
+ break;
+ }
+
+ switch ( receptionMode )
+ {
+ case 0:
+ mmsSettings->SetReceivingModeHome( EMmsReceivingAutomatic );
+ mmsSettings->SetReceivingModeForeign( EMmsReceivingAutomatic );
+ break;
+ case 1:
+ mmsSettings->SetReceivingModeHome( EMmsReceivingAutomatic );
+ mmsSettings->SetReceivingModeForeign( EMmsReceivingManual );
+ break;
+ case 2:
+ mmsSettings->SetReceivingModeHome( EMmsReceivingManual );
+ mmsSettings->SetReceivingModeForeign( EMmsReceivingManual );
+ break;
+ case 3:
+ mmsSettings->SetReceivingModeHome( EMmsReceivingReject );
+ mmsSettings->SetReceivingModeForeign( EMmsReceivingReject );
+ break;
+ default:
+ User::Leave( KErrArgument );
+ break;
+ }
+
+ mmsSettings->SetAcceptAnonymousMessages( receiveAnonymous );
+ mmsSettings->SetAcceptAdvertisementMessages( receiveAdvert );
+
+ if ( requestDeliveryReport )
+ {
+ mmsSettings->SetDeliveryReportWanted( KMmsYes );
+ }
+ else
+ {
+ mmsSettings->SetDeliveryReportWanted( KMmsNo );
+ }
+
+ if ( sendDeliveryReport )
+ {
+ mmsSettings->SetDeliveryReportSendingAllowed( KMmsYes );
+ }
+ else
+ {
+ mmsSettings->SetDeliveryReportSendingAllowed( KMmsNo );
+ }
+
+ switch ( validityPeriod )
+ {
+ case 0:
+ mmsSettings->SetExpiryInterval( KValidityTimeMax );
+ break;
+ case 1:
+ mmsSettings->SetExpiryInterval( KValidityTime1h );
+ break;
+ case 2:
+ mmsSettings->SetExpiryInterval( KValidityTime6h );
+ break;
+ case 3:
+ mmsSettings->SetExpiryInterval( KValidityTime24h );
+ break;
+ case 4:
+ mmsSettings->SetExpiryInterval( KValidityTime3d );
+ break;
+ case 5:
+ mmsSettings->SetExpiryInterval( KValidityTime1w );
+ break;
+ default:
+ User::Leave( KErrArgument );
+ break;
+ }
+
+ // Check validity of updated settings and save if valid.
+ if ( mmsSettings->ValidateSettings() != KErrNone )
+ {
+ HTI_LOG_TEXT( "Settings not valid - won't save" );
+ SendErrorMessageL( KErrArgument, KErrorInvalidParameters );
+ }
+ else
+ {
+ HTI_LOG_TEXT( "Settings valid - now saving" );
+ mmsSettings->SaveSettingsL();
+ SendOkMsgL( KNullDesC8 );
+ }
+
+ CleanupStack::PopAndDestroy(); // mmsSettings
+ HTI_LOG_FUNC_OUT( "CHtiMsgSettingsHandler::HandleSetMmsSettingsL" );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CHtiMsgSettingsHandler::GetAccessPointUIDL
+// Gets the UID of Access Point named by aApName.
+// Returns KErrNotFound if AP not found.
+// ----------------------------------------------------------------------------
+TInt CHtiMsgSettingsHandler::GetAccessPointUIDL( const TDesC& aApName )
+ {
+ HTI_LOG_FUNC_IN( "CHtiMsgSettingsHandler::GetAccessPointUIDL" );
+ TInt uid = KErrNotFound;
+
+ RCmManager cmManager;
+ cmManager.OpenL();
+ CleanupClosePushL( cmManager );
+
+ // Search from uncategorised first
+ RArray<TUint32> array = RArray<TUint32>();
+ cmManager.ConnectionMethodL( array );
+ CleanupClosePushL( array );
+ TInt i = 0;
+ while ( i < array.Count() && uid == KErrNotFound )
+ {
+ RCmConnectionMethod cm = cmManager.ConnectionMethodL( array[i] );
+ CleanupClosePushL( cm );
+ HBufC* name = cm.GetStringAttributeL( CMManager::ECmName );
+ HTI_LOG_FORMAT( "Found name: %S", name );
+ CleanupStack::PushL( name );
+ if ( aApName.Compare( *name ) == 0 )
+ {
+ uid = cm.GetIntAttributeL( CMManager::ECmWapId );
+ HTI_LOG_FORMAT( "Match: UID = %d", uid );
+ }
+ CleanupStack::PopAndDestroy(); // name
+ CleanupStack::PopAndDestroy(); // cm
+ i++;
+ }
+ CleanupStack::PopAndDestroy(); // array
+
+ // If not found from uncategorised, search from all destinations
+ if ( uid == KErrNotFound )
+ {
+ HTI_LOG_TEXT( "Not found from uncategorised" );
+ RArray<TUint32> destIdArray = RArray<TUint32>();
+ cmManager.AllDestinationsL( destIdArray );
+ CleanupClosePushL( destIdArray );
+ i = 0;
+ while ( i < destIdArray.Count() && uid == KErrNotFound )
+ {
+ RCmDestination dest = cmManager.DestinationL( destIdArray[i] );
+ CleanupClosePushL( dest );
+ TInt j = 0;
+ while ( j < dest.ConnectionMethodCount() && uid == KErrNotFound )
+ {
+ HBufC* name = dest.ConnectionMethodL( j ).GetStringAttributeL(
+ CMManager::ECmName );
+ CleanupStack::PushL( name );
+ HTI_LOG_FORMAT( "Found name: %S", name );
+ if ( aApName.Compare( *name ) == 0 )
+ {
+ uid = dest.ConnectionMethodL( j ).GetIntAttributeL(
+ CMManager::ECmWapId );
+ HTI_LOG_FORMAT( "Match: UID = %d", uid );
+ }
+ CleanupStack::PopAndDestroy(); // name
+ j++;
+ }
+ CleanupStack::PopAndDestroy(); // dest
+ i++;
+ }
+ CleanupStack::PopAndDestroy(); // destIdArray
+ }
+
+ CleanupStack::PopAndDestroy(); // cmManager
+
+ HTI_LOG_FUNC_OUT( "CHtiMsgSettingsHandler::GetAccessPointUIDL" );
+ return uid;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CHtiMsgSettingsHandler::SendOkMsgL
+// Helper function for sending response messages.
+// ----------------------------------------------------------------------------
+void CHtiMsgSettingsHandler::SendOkMsgL( const TDesC8& aData )
+ {
+ HTI_LOG_FUNC_IN( "CHtiMsgSettingsHandler::SendOkMsgL" );
+ User::LeaveIfNull( iDispatcher );
+ HBufC8* temp = HBufC8::NewL( aData.Length() + 1 );
+ TPtr8 response = temp->Des();
+ response.Append( ( TChar ) CHtiMessagesServicePlugin::EResultOk );
+ response.Append( aData );
+ User::LeaveIfError( iDispatcher->DispatchOutgoingMessage(
+ temp, KHtiMessagesServiceUid ) );
+ HTI_LOG_FUNC_OUT( "CHtiMsgSettingsHandler::SendOkMsgL" );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CHtiMsgSettingsHandler::SendErrorMessageL
+// Helper function for sending error response messages.
+// ----------------------------------------------------------------------------
+void CHtiMsgSettingsHandler::SendErrorMessageL( TInt aError, const TDesC8& aDescription )
+ {
+ HTI_LOG_FUNC_IN( "CHtiMsgSettingsHandler::SendErrorMessageL" );
+ User::LeaveIfNull( iDispatcher );
+ User::LeaveIfError( iDispatcher->DispatchOutgoingErrorMessage(
+ aError, aDescription, KHtiMessagesServiceUid ) );
+ HTI_LOG_FUNC_OUT( "CHtiMsgSettingsHandler::SendErrorMessageL" );
+ }
+
+// End of file