--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/omaprovisioning/provisioning/MbxNbrAdapter/Src/MbxNbrAdapter.cpp Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,384 @@
+/*
+* Copyright (c) 2002 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: Handles mailbox number settings in OMA provisioning.
+*
+*/
+
+
+// INCLUDE FILES
+#include <f32file.h>
+#include <CWPCharacteristic.h>
+#include <CWPParameter.h>
+#include <wpmbxnbradapterresource.rsg>
+#include <vmnumber.h>
+#include <commonphoneparser.h>
+#include <voicemailboxdomaincrkeys.h>
+#include <centralrepository.h>
+
+#include "WPAdapterUtil.h"
+#include "MbxNbrAdapter.h"
+#include "ProvisioningDebug.h"
+
+// CONSTANTS
+#if ( defined (__WINS__) || defined (__WINSCW) ) // this different on hw
+ _LIT( KAdapterName, "WPMbxNbrAdapterResource" );
+#else
+ _LIT( KAdapterName, "WPMbxNbrAdapter" );
+#endif
+_LIT( KMailboxNumberStr, "MBNMBR" );
+_LIT( KMailboxTypeStr, "MBTYPE" );
+_LIT( KCSVideoMailboxType, "VIDEO" );
+_LIT( KVideoSupportType, "VIDEO_MBOX_SUPPORT" );
+_LIT( KVideoSupportTypeTrue, "TRUE" );
+_LIT( KVideoSupportTypeFalse, "FALSE" );
+_LIT( KMailboxAppId, "w9027" ); // From OMA provisioning registration document
+const TInt KSettingsGranularity = 2;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::CMbxNbrAdapter
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CMbxNbrAdapter::CMbxNbrAdapter() :
+ iSettings( KSettingsGranularity )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CMbxNbrAdapter::ConstructL()
+ {
+ FLOG( _L( "[Provisioning] CMbxNbrAdapter::ConstructL:" ) );
+
+ TFileName fileName;
+ Dll::FileName( fileName );
+ iTitle = WPAdapterUtil::ReadHBufCL( fileName,
+ KAdapterName,
+ R_MAILBOX_NUMBER_ADAPTER_TITLE );
+
+ FLOG( _L( "[Provisioning] CMbxNbrAdapter::ConstructL: Done" ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CMbxNbrAdapter* CMbxNbrAdapter::NewL()
+ {
+ CMbxNbrAdapter* self = new( ELeave ) CMbxNbrAdapter;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::~CMbxNbrAdapter
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CMbxNbrAdapter::~CMbxNbrAdapter()
+ {
+ delete iTitle;
+ iSettings.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::ItemCount
+// -----------------------------------------------------------------------------
+//
+TInt CMbxNbrAdapter::ItemCount() const
+ {
+ // SummaryTitle(), SummaryText(), SaveL(), SetAsDefaultL() and
+ // CanSetAsDefault() are called ItemCount() times
+ return iSettings.Count();
+ }
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::SummaryTitle
+// -----------------------------------------------------------------------------
+//
+const TDesC16& CMbxNbrAdapter::SummaryTitle( TInt /*aIndex*/ ) const
+ {
+ return *iTitle;
+ }
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::SummaryText
+// -----------------------------------------------------------------------------
+//
+const TDesC16& CMbxNbrAdapter::SummaryText( TInt aIndex ) const
+ {
+ // SummaryText should be called ItemCount() times
+ __ASSERT_DEBUG( iSettings.Count() > aIndex,
+ User::Panic( _L("CMbxNbrAdapter::SummaryText"), KErrCorrupt ) );
+ __ASSERT_DEBUG( aIndex >= 0,
+ User::Panic( _L("CMbxNbrAdapter::SummaryText"), KErrCorrupt ) );
+ return iSettings[ aIndex ].iName;
+ }
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::DetailsL
+// -----------------------------------------------------------------------------
+//
+TInt CMbxNbrAdapter::DetailsL( TInt /*aItem*/, MWPPairVisitor& /*aVisitor*/ )
+ {
+ // Detail view is a feature for later release.
+ return KErrNotSupported;
+ }
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::SaveL
+// -----------------------------------------------------------------------------
+//
+void CMbxNbrAdapter::SaveL( TInt aItem )
+ {
+ FLOG( _L( "[Provisioning] CMbxNbrAdapter::SaveL:" ) );
+ __ASSERT_DEBUG( iSettings.Count() > aItem, User::Leave( KErrCorrupt ) );
+ __ASSERT_DEBUG( aItem >= 0, User::Leave( KErrCorrupt ) );
+
+ RVmbxNumber model;
+ User::LeaveIfError( model.Open() );
+ CleanupClosePushL( model );
+
+ TInt err( KErrNone );
+ switch( iSettings[aItem].iMailboxType )
+ {
+ case ECSVoiceMailbox:
+ err = model.SaveVmbxNumber( iSettings[aItem].iMailboxNumber,
+ EAlsActiveLineEntry );
+ break;
+ case ECSVideoMailbox:
+ FLOG( _L( "[Provisioning] CMbxNbrAdapter::SaveL:case ECSVideoMailbox" ) );
+ err = model.SaveVideoMbxNumber( iSettings[aItem].iMailboxNumber,
+ EAlsActiveLineEntry );
+ if ( iSettings[aItem].iIsVideosupport )
+ {
+ CRepository* cenrep = CRepository::NewL( KCRUidVideoMailbox );
+ FLOG( _L( "[Provisioning] CMbxNbrAdapter::SaveL:case Saving it to Cenrep" ) );
+ TBuf<100> buf1;
+ buf1.AppendNum( iSettings[aItem].iVidiosupport );
+
+ FLOG( buf1 );
+ CleanupStack::PushL(cenrep);
+ User::LeaveIfError(
+ cenrep->Set( KVideoMbxSupport, iSettings[aItem].iVidiosupport ));
+ FLOG( _L( "[Provisioning] CMbxNbrAdapter::SaveL:case Saved" ) );
+ CleanupStack::PopAndDestroy(cenrep);
+ }
+ break;
+ default:
+ User::Leave( KErrCorrupt );
+ break;
+ }
+
+ User::LeaveIfError( err );
+ CleanupStack::PopAndDestroy(); // Close model
+
+ FLOG( _L( "[Provisioning] CStreamingAdapter::SaveL: Done" ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::CanSetAsDefault
+// -----------------------------------------------------------------------------
+//
+TBool CMbxNbrAdapter::CanSetAsDefault( TInt /*aItem*/ ) const
+ {
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::SetAsDefault
+// -----------------------------------------------------------------------------
+//
+void CMbxNbrAdapter::SetAsDefaultL( TInt /*aItem*/ )
+ {
+ // This shouldn't be called because CanSetAsDefault
+ // always returns EFalse.
+ }
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::VisitL
+// -----------------------------------------------------------------------------
+//
+void CMbxNbrAdapter::VisitL( CWPCharacteristic& aCharacteristic )
+ {
+ switch( aCharacteristic.Type() )
+ {
+ case KWPApplication:
+ // Initialize iTempData's members
+ iTempData.iName.Set( KNullDesC );
+ iTempData.iMailboxNumber.Set( KNullDesC );
+ iTempData.iVidiosupport = EFalse;
+ iTempData.iIsVideosupport = EFalse;
+ iTempData.iMailboxType = ECSVoiceMailbox;
+
+ // Accept characteristic
+ aCharacteristic.AcceptL( *this );
+
+ // Check iAppId and validate data
+ if( iAppId == KMailboxAppId && IsValid() )
+ {
+ // iAppId is correct and data is valid
+ // -> Lets append it to array
+ iSettings.Append( iTempData );
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::VisitL
+// -----------------------------------------------------------------------------
+//
+void CMbxNbrAdapter::VisitL( CWPParameter& aParameter )
+ {
+ switch( aParameter.ID() )
+ {
+ case EWPParameterAppID:
+ iAppId.Set( aParameter.Value() );
+ break;
+ case EWPParameterName:
+ iTempData.iName.Set( aParameter.Value() );
+ break;
+ case EWPNamedParameter:
+ {
+ if( aParameter.Name().Compare( KMailboxNumberStr ) == 0 )
+ {
+ iTempData.iMailboxNumber.Set( aParameter.Value() );
+ }
+ else if( aParameter.Name().Compare( KMailboxTypeStr ) == 0 )
+ {
+ ParseMbxTypeL( aParameter.Value(), iTempData.iMailboxType );
+ }
+ else if( aParameter.Name().Compare( KVideoSupportType ) == 0)
+ {
+ FLOG( _L( "[Provisioning] CMbxNbrAdapter::VisitL:Visiting to ParseVideoTypeL" ) );
+ ParseVideoTypeL( aParameter.Value(), iTempData.iVidiosupport, iTempData.iIsVideosupport );
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::VisitLinkL
+// -----------------------------------------------------------------------------
+//
+void CMbxNbrAdapter::VisitLinkL( CWPCharacteristic& /*aCharacteristic*/ )
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::IsValid
+// -----------------------------------------------------------------------------
+//
+TBool CMbxNbrAdapter::IsValid()
+ {
+ TBool validity( EFalse );
+
+ // Validity check:
+ // iMailboxType is either ECSVideoMailbox or ECSVoiceMailbox and
+ // iMailboxNumber is valid number in e.164 format
+ if( ( iTempData.iMailboxType == ECSVideoMailbox ||
+ iTempData.iMailboxType == ECSVoiceMailbox ) &&
+ IsValidPhoneNumber( iTempData.iMailboxNumber ) )
+ {
+ validity = ETrue;
+ }
+
+ return validity;
+ }
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::IsValidPhoneNumber
+// -----------------------------------------------------------------------------
+//
+TBool CMbxNbrAdapter::IsValidPhoneNumber( const TDesC& aPtr )
+ {
+ return CommonPhoneParser::IsValidPhoneNumber( aPtr,
+ CommonPhoneParser::EPhoneClientNumber );
+ }
+
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::ParseMbxTypeL
+// -----------------------------------------------------------------------------
+//
+void CMbxNbrAdapter::ParseMbxTypeL( const TDesC& aPtr, TMailboxType& aType )
+ {
+ if( aPtr.Length() )
+ {
+ if( aPtr.Compare( KCSVideoMailboxType ) == 0 )
+ {
+ aType = ECSVideoMailbox;
+ }
+ else
+ {
+ User::Leave( KErrNotSupported );
+ }
+ }
+ else
+ {
+ aType = ECSVoiceMailbox;
+ }
+ }
+// -----------------------------------------------------------------------------
+// CMbxNbrAdapter::ParseVideoTypeL
+// -----------------------------------------------------------------------------
+//
+void CMbxNbrAdapter::ParseVideoTypeL( const TDesC& aPtr, TBool& aType, TBool& aType1 )
+ {
+ FLOG( _L( "[Provisioning] CMbxNbrAdapter::ParseVideoTypeL:in" ) );
+ if( aPtr.Length() )
+ {
+ FLOG( _L( "[Provisioning] CMbxNbrAdapter::ParseVideoTypeL:If there is ON/OFF Value" ) );
+ if( aPtr.Compare( KVideoSupportTypeTrue ) == 0 )
+ {
+ FLOG( _L( "[Provisioning] CMbxNbrAdapter::ParseVideoTypeL:if ON set TRUE" ) );
+ aType = ETrue;
+ aType1 = ETrue;
+ }
+ else if( aPtr.Compare( KVideoSupportTypeFalse ) == 0 )
+ {
+ FLOG( _L( "[Provisioning] CMbxNbrAdapter::ParseVideoTypeL:if OFF set False" ) );
+ aType = EFalse;
+ aType1 = ETrue;
+ }
+ else
+ {
+ FLOG( _L( "[Provisioning] CMbxNbrAdapter::ParseVideoTypeL:if some thing else set False" ) );
+ aType1 = EFalse;
+ }
+ }
+ else
+ {
+ FLOG( _L( "[Provisioning] CMbxNbrAdapter::ParseVideoTypeL:no ON/OFF" ) );
+ aType1 = EFalse;
+ }
+ }
+
+// End of File