--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/XDMEngine/XdmProvisioning/src/xdmprovitem.cpp Tue Feb 02 01:05:17 2010 +0200
@@ -0,0 +1,500 @@
+/*
+* Copyright (c) 2006 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: Provisioning item.
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <CWPParameter.h>
+#include <CWPCharacteristic.h>
+#include <commdb.h>
+#include <XdmSettingsCollection.h>
+#include <XdmSettingsApi.h>
+
+#include "xdmprovitem.h"
+
+#ifdef _DEBUG
+ #include "xdmprovadapter.h"
+#endif
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::CXdmProvItem
+//
+// -----------------------------------------------------------------------------
+//
+CXdmProvItem::CXdmProvItem():
+ iXdmSettingsId( KErrNotFound ),
+ iAppId( KNullDesC ),
+ iAppName( KNullDesC ),
+ iProviderId( KNullDesC ),
+ iSipReference( NULL ),
+ iToNapId( KNullDesC ),
+ iNapId( NULL ),
+ iNapName( KNullDesC ),
+ iAppRef( KNullDesC ),
+ iXcapRootUri( KNullDesC ),
+ iUserName( KNullDesC ),
+ iPassword( KNullDesC ),
+ iAuthType( KNullDesC ),
+ iSettingsSaved( EFalse )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CXdmProvItem* CXdmProvItem::NewL()
+ {
+ CXdmProvItem* self = new (ELeave) CXdmProvItem();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::~CXdmProvItem
+// -----------------------------------------------------------------------------
+//
+CXdmProvItem::~CXdmProvItem()
+ {
+ iToAppReferences.Close();
+ delete iSipReference;
+ delete iNapId;
+ }
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::Validate
+// -----------------------------------------------------------------------------
+//
+TBool CXdmProvItem::Validate() const
+ {
+ if ( !iAppId.Length() )
+ {
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::Validate iAppId missing" ) );
+#endif
+ return EFalse;
+ }
+ else if ( iAppId.Compare( KXdmProvAppId ) )
+ {
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::Validate wrong iAppId" ) );
+#endif
+ return EFalse;
+ }
+ else if ( !iAppName.Length() )
+ {
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::Validate iAppName missing" ) );
+#endif
+ return EFalse;
+ }
+ else if ( !iToNapId.Length() )
+ {
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::Validate iNapId missing" ) );
+#endif
+ return EFalse;
+ }
+ else if ( !iXcapRootUri.Length() )
+ {
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::Validate iXcapRootUri missing" ) );
+#endif
+ return EFalse;
+ }
+ else
+ {
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::Validate returns true" ) );
+#endif
+ return ETrue;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::Name
+// -----------------------------------------------------------------------------
+//
+const TDesC& CXdmProvItem::Name() const
+ {
+ return iAppName;
+ }
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::ApplicationId
+// -----------------------------------------------------------------------------
+//
+const TDesC& CXdmProvItem::ApplicationId() const
+ {
+ return iAppId;
+ }
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::XdmSettingsId
+// -----------------------------------------------------------------------------
+//
+TInt CXdmProvItem::XdmSettingsId() const
+ {
+ return iXdmSettingsId;
+ }
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::AppReference
+// -----------------------------------------------------------------------------
+//
+const TDesC& CXdmProvItem::AppReference() const
+ {
+ return iAppRef;
+ }
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::SaveL
+// -----------------------------------------------------------------------------
+//
+TInt CXdmProvItem::SaveL()
+ {
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::SaveL" ) );
+#endif
+
+ if( !iSettingsSaved )
+ {
+ CXdmSettingsCollection* settings = new (ELeave) CXdmSettingsCollection();
+ CleanupStack::PushL( settings ); // << settings
+ settings->AppendL( iAppId, EXdmPropAppId );
+ CheckExistingNamesL();
+ settings->AppendL( iAppName, EXdmPropName );
+ settings->AppendL( iProviderId, EXdmPropProvId );
+ FindAccessPointIdL();
+ settings->AppendL( *iNapId, EXdmPropToNapId );
+ if( iSipReference )
+ {
+ settings->AppendL( *iSipReference, EXdmPropToAppRef );
+ }
+ settings->AppendL( iXcapRootUri, EXdmPropUri );
+ settings->AppendL( iUserName, EXdmPropAuthName );
+ settings->AppendL( iPassword, EXdmPropAuthSecret );
+ settings->AppendL( iAuthType, EXdmPropAuthType );
+ iXdmSettingsId = TXdmSettingsApi::CreateCollectionL( *settings );
+ CleanupStack::PopAndDestroy( settings ); // >>> settings
+ iSettingsSaved = ETrue;
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::SaveL settings saved" ) );
+#endif
+ }
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::ToAppReferences
+// -----------------------------------------------------------------------------
+//
+const RArray<TPtrC>& CXdmProvItem::ToAppReferences() const
+ {
+ return iToAppReferences;
+ }
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::VisitL
+// -----------------------------------------------------------------------------
+//
+void CXdmProvItem::VisitL( CWPCharacteristic& aCharacteristic )
+ {
+ if ( KWPResource == aCharacteristic.Type( ) )
+ {
+ aCharacteristic.AcceptL( *this );
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::VisitL CWPCharacteristic" ) );
+#endif
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::VisitL
+// -----------------------------------------------------------------------------
+//
+void CXdmProvItem::VisitL( CWPParameter& aParameter )
+ {
+#ifdef _DEBUG
+ HBufC8* value = HBufC8::NewLC( aParameter.Value().Length() ); // << value
+ TPtr8 bufferPtr = value->Des();
+ bufferPtr.Copy( aParameter.Value() );
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::VisitL CWPParameter aParameter.Value() =%S" ), &bufferPtr );
+ CleanupStack::PopAndDestroy( value ); // >>> value
+#endif
+ switch( aParameter.ID() )
+ {
+ case EWPParameterAppID:
+ {
+ iAppId.Set( aParameter.Value() );
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::EWPParameterAppID" ) );
+#endif
+ }
+ break;
+
+ case EWPParameterProviderID:
+ {
+ iProviderId.Set( aParameter.Value() );
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::EWPParameterProviderID" ) );
+#endif
+ }
+ break;
+
+ case EWPParameterName:
+ {
+ iAppName.Set( aParameter.Value() );
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::EWPParameterName" ) );
+#endif
+ }
+ break;
+
+ case EWPParameterToAppRef:
+ {
+ iToAppReferences.Append( aParameter.Value() );
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::EWPParameterToAppRef" ) );
+#endif
+ }
+ break;
+
+ case EWPParameterToNapID:
+ {
+ iToNapId.Set( aParameter.Value() );
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::EWPParameterToNapID" ) );
+#endif
+ }
+ break;
+
+ case EWPParameterURI:
+ {
+ iXcapRootUri.Set( aParameter.Value() );
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::EWPParameterURI" ) );
+#endif
+ }
+ break;
+
+ case EWPParameterAAuthName:
+ {
+ iUserName.Set( aParameter.Value() );
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::EWPParameterAAuthName" ) );
+#endif
+ }
+ break;
+
+ case EWPParameterAAuthSecret:
+ {
+ iPassword.Set( aParameter.Value() );
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::EWPParameterAAuthSecret" ) );
+#endif
+ }
+ break;
+
+ case EWPParameterAAuthType:
+ {
+ iAuthType.Set( aParameter.Value() );
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::EWPParameterAAuthType" ) );
+#endif
+ }
+ break;
+
+ case EWPParameterAppRef:
+ {
+ iAppRef.Set( aParameter.Value() );
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::EWPParameterAppRef" ) );
+#endif
+ }
+ break;
+ default:
+ {
+ DetermineNamedParameter( aParameter.Name(), aParameter.Value() );
+ }
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::DetermineNamedParameter
+// -----------------------------------------------------------------------------
+//
+void CXdmProvItem::DetermineNamedParameter( const TDesC& aName, const TDesC& aValue )
+ {
+ if ( !aName.Compare( KXdmProvAppRef ) )
+ {
+ iAppRef.Set( aValue );
+ }
+ else if ( !aName.Compare( KXdmProvToAppRef ) )
+ {
+ iToAppReferences.Append( aValue );
+ }
+ }
+// -----------------------------------------------------------------------------
+// CXdmProvItem::VisitLinkL
+// -----------------------------------------------------------------------------
+//
+void CXdmProvItem::VisitLinkL( CWPCharacteristic& aLink )
+ {
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::VisitLinkL" ) );
+#endif
+ if( KWPNapDef == aLink.Type() )
+ {
+ // check that this is the correct one
+ CArrayFix<TPtrC>* napId = new (ELeave) CArrayFixFlat<TPtrC>(1);
+ CleanupStack::PushL( napId ); // << napId
+ aLink.ParameterL( EWPParameterNapID, napId );
+ if ( 0 < napId->Count() )
+ {
+ if ( !napId->At(0).Compare( iToNapId ) )
+ {
+ SetNapDefL( aLink );
+ }
+ }
+ CleanupStack::PopAndDestroy( napId ); // >>> napId
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::SetNapDefL
+// -----------------------------------------------------------------------------
+//
+void CXdmProvItem::SetNapDefL ( CWPCharacteristic& aLink )
+ {
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::SetNapDefL" ) );
+#endif
+ // find the name of the access point
+ CArrayFix<TPtrC>* name = new (ELeave) CArrayFixFlat<TPtrC>(1);
+ CleanupStack::PushL( name ); // << name
+ aLink.ParameterL( EWPParameterName, name );
+ if ( name->Count() > 0 )
+ {
+ iNapName.Set( name->At(0) );
+ }
+ CleanupStack::PopAndDestroy( name ); // >>> name
+
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::SetNapDefL done" ) );
+#endif
+ }
+// -----------------------------------------------------------------------------
+// CXdmProvItem::SetSipSettingsIdL
+// -----------------------------------------------------------------------------
+//
+void CXdmProvItem::SetSipSettingsIdL( const TDesC8& aStorageIdValue )
+ {
+ delete iSipReference;
+ iSipReference = NULL;
+ iSipReference = HBufC::NewL( aStorageIdValue.Length() );
+ iSipReference->Des().Copy( aStorageIdValue );
+ }
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::FindAccessPointIdL
+// -----------------------------------------------------------------------------
+//
+void CXdmProvItem::FindAccessPointIdL ()
+ {
+
+ TInt result( KErrNone );
+ TUint32 idNum;
+ TBuf<KXdmProvNameLength> name;
+ // Get IAP names and ids from the database
+ CCommsDatabase* commsDb = CCommsDatabase::NewL( EDatabaseTypeIAP );
+ CleanupStack::PushL( commsDb ); // << commsDb
+ commsDb->ShowHiddenRecords();
+ CCommsDbTableView* view = commsDb->OpenTableLC( TPtrC( IAP ) ); // << view
+ result = view->GotoFirstRecord();
+
+ while( KErrNone == result )
+ {
+ view->ReadTextL( TPtrC( COMMDB_NAME ), name );
+ if ( KErrNotFound != name.Find( iNapName ) )
+ {
+ view->ReadUintL( TPtrC( COMMDB_ID ), idNum );
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::FindAccessPointIdL IAP found id=%d" ), idNum );
+#endif
+ }
+ result = view->GotoNextRecord();
+ }
+#ifdef _DEBUG
+ CXdmProvAdapter::WriteToLog( _L8( "CXdmProvItem::FindAccessPointIdL IAP using id=%d" ), idNum );
+#endif
+ CleanupStack::PopAndDestroy( 2, commsDb ); // >>> view, commsDb
+ TBuf<KXdmProvIdLength> id;
+ id.AppendNum( idNum, EDecimal );
+ delete iNapId;
+ iNapId = NULL;
+ iNapId = id.AllocL();
+ }
+
+// -----------------------------------------------------------------------------
+// CXdmProvItem::CheckExistingNamesL()
+// -----------------------------------------------------------------------------
+//
+void CXdmProvItem::CheckExistingNamesL( )
+ {
+ TBool ready( EFalse );
+ RArray<TInt> settingIds;
+ CleanupClosePushL( settingIds ); // << settingIds
+ CDesCArray* settingNames = TXdmSettingsApi::CollectionNamesLC( settingIds ); // << settingNames
+ TInt index( 0 );
+ while ( !ready )
+ {
+ TBool found ( EFalse );
+ TInt count = settingNames->MdcaCount();
+ TBuf<KXdmProvBufLength> tempName;
+ tempName.Copy( iAppName );
+ if ( index > 0 )
+ {
+ tempName.Append( KXdmProvStartBracket );
+ tempName.AppendNumFixedWidth( index, EDecimal, 2 );
+ tempName.Append( KXdmProvCloseBracket );
+ }
+ for ( TInt i(0); i < count && !found; i++ )
+ {
+ if ( !settingNames->MdcaPoint(i).CompareF( tempName ) )
+ {
+ found = ETrue;
+ index++;
+ }
+ }
+ if ( !found )
+ {
+ ready = ETrue;
+ iAppName.Set( tempName );
+ }
+ }
+ // only number used in next function, type of RArray
+ CleanupStack::PopAndDestroy( 2 ); // >>> settingNames, settingIds
+ }
+
+
+// End of File
+