--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/src/creator_imps.cpp Wed Sep 01 12:30:35 2010 +0100
@@ -0,0 +1,260 @@
+/*
+* Copyright (c) 2008 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:
+*
+*/
+
+
+#ifdef __PRESENCE
+
+#include "creator_imps.h"
+#include "creator_traces.h"
+
+#include <cimpssapsettingslist.h>
+
+static const TInt KIMPSFieldLength = 128;
+
+_LIT(KCreatorIMPSPrefixName, "CR_");
+
+
+//----------------------------------------------------------------------------
+
+CIMPSParameters::CIMPSParameters()
+ {
+ LOGSTRING("Creator: CIMPSParameters::CIMPSParameters");
+
+ iServerName = HBufC::New(KIMPSFieldLength);
+ iServerURL = HBufC::New(KIMPSFieldLength);
+ iServerUsername = HBufC::New(KIMPSFieldLength);
+ iServerPassword = HBufC::New(KIMPSFieldLength);
+ iServerAccessPointName = HBufC::New(KIMPSFieldLength);
+ // User needs to set connectionmethod manually to be able to use the IMPS setting
+ iServerAccessPointName->Des().Copy(_L("DEFAULT-IAP"));
+ }
+
+CIMPSParameters::~CIMPSParameters()
+ {
+ LOGSTRING("Creator: CIMPSParameters::~CIMPSParameters");
+
+ delete iServerAccessPointName;
+ delete iServerPassword;
+ delete iServerUsername;
+ delete iServerURL;
+ delete iServerName;
+ }
+
+void CIMPSParameters::SetRandomNameL(CCreatorEngine& aEngine)
+ {
+ if(iServerName == 0)
+ {
+ iServerName = HBufC::New(KIMPSFieldLength);
+ }
+ TBuf<160> company = aEngine.RandomString(CCreatorEngine::ECompany);
+ iServerName->Des() = KCreatorIMPSPrefixName;
+ iServerName->Des().Append( company );
+ iServerName->Des().Append( _L(" #") );
+ iServerName->Des().AppendNum( aEngine.RandomNumber(1000, 9999) );
+ }
+
+void CIMPSParameters::SetRandomUrlL(CCreatorEngine& aEngine)
+ {
+ if(iServerURL == 0)
+ {
+ iServerURL = HBufC::New(KIMPSFieldLength);
+ }
+ TBuf<160> company = aEngine.RandomString(CCreatorEngine::ECompany);
+ iServerURL->Des() = _L("http://imps.");
+ iServerURL->Des().Append( company );
+ iServerURL->Des().Append( _L(".com:18080/CSP/csp") );
+ }
+
+void CIMPSParameters::SetRandomUsernameL(CCreatorEngine& aEngine)
+ {
+ iServerUsername->Des() = aEngine.RandomString(CCreatorEngine::EFirstName);
+ iServerUsername->Des().LowerCase();
+ }
+
+void CIMPSParameters::SetRandomPasswordL(CCreatorEngine& aEngine)
+ {
+ iServerPassword->Des() = aEngine.RandomString(CCreatorEngine::ESurname);
+ iServerPassword->Des().LowerCase();
+ }
+void CIMPSParameters::SetDefaultAccessPointL()
+ {
+ iServerAccessPointName->Des().Copy(_L("DEFAULT-IAP"));
+ }
+//----------------------------------------------------------------------------
+
+CCreatorIMPS* CCreatorIMPS::NewL(CCreatorEngine* aEngine)
+ {
+ CCreatorIMPS* self = CCreatorIMPS::NewLC(aEngine);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CCreatorIMPS* CCreatorIMPS::NewLC(CCreatorEngine* aEngine)
+ {
+ CCreatorIMPS* self = new (ELeave) CCreatorIMPS;
+ CleanupStack::PushL(self);
+ self->ConstructL(aEngine);
+ return self;
+ }
+
+CCreatorIMPS::CCreatorIMPS()
+ {
+ }
+
+void CCreatorIMPS::ConstructL(CCreatorEngine* aEngine)
+ {
+ LOGSTRING("Creator: CCreatorIMPS::ConstructL");
+
+ iEngine = aEngine;
+
+ iIMPSSAPSettingsStore = CIMPSSAPSettingsStore::NewL();
+ }
+
+CCreatorIMPS::~CCreatorIMPS()
+ {
+ LOGSTRING("Creator: CCreatorIMPS::~CCreatorIMPS");
+
+ if ( iEngine && iEntryIds.Count() )
+ {
+ TRAP_IGNORE( iEngine->WriteEntryIdsToStoreL( iEntryIds, KUidDictionaryUidIMPS ) );
+ }
+ iEntryIds.Reset();
+ iEntryIds.Close();
+
+ delete iIMPSSAPSettingsStore;
+
+ if (iParameters)
+ delete iParameters;
+ }
+
+//----------------------------------------------------------------------------
+
+TBool CCreatorIMPS::AskDataFromUserL(TInt aCommand, TInt& aNumberOfEntries)
+ {
+ LOGSTRING("Creator: CCreatorIMPS::AskDataFromUserL");
+ if ( aCommand == ECmdDeleteIMPSs )
+ {
+ return iEngine->YesNoQueryDialogL( _L("Delete all IMPS server entries?") );
+ }
+ else if ( aCommand == ECmdDeleteCreatorIMPSs )
+ {
+ return iEngine->YesNoQueryDialogL( _L("Delete all IMPS server entries created with Creator?") );
+ }
+ return iEngine->EntriesQueryDialogL(aNumberOfEntries, _L("How many entries to create?"));
+ }
+
+
+//----------------------------------------------------------------------------
+
+TInt CCreatorIMPS::CreateIMPSServerEntryL(CIMPSParameters *aParameters)
+ {
+ LOGSTRING("Creator: CCreatorIMPS::CreateIMPSServerEntryL");
+
+ // clear any existing parameter definations
+ delete iParameters;
+ iParameters = NULL;
+
+ CIMPSParameters* parameters = aParameters;
+
+ // random data needed if no predefined data available
+ if (!parameters)
+ {
+ iParameters = new(ELeave) CIMPSParameters;
+ parameters = iParameters;
+ parameters->SetRandomNameL(*iEngine);
+ parameters->SetRandomUrlL(*iEngine);
+ parameters->SetRandomUsernameL(*iEngine);
+ parameters->SetRandomPasswordL(*iEngine);
+ parameters->SetDefaultAccessPointL();
+ }
+
+ TInt err = KErrNone;
+
+ // set data to save item
+ CIMPSSAPSettings* settings = CIMPSSAPSettings::NewLC();
+ TUint32 iapId = iEngine->AccessPointNameToIdL(parameters->iServerAccessPointName->Des(), ETrue );
+ err = settings->SetAccessPoint( iapId );
+ if( err != KErrNone )
+ {
+ LOGSTRING("Creator: CCreatorIMPS::CreateIMPSServerEntryL - Unable to resolve access point.");
+ err = KErrNone;
+ }
+ settings->SetSAPNameL( parameters->iServerName->Des() );
+ settings->SetSAPAddressL( parameters->iServerURL->Des() );
+ settings->SetSAPUserIdL( parameters->iServerUsername->Des() );
+ settings->SetSAPUserPasswordL( parameters->iServerPassword->Des() );
+
+ // save the item
+ TRAP(err, iIMPSSAPSettingsStore->StoreNewSAPL( settings, EIMPSIMAccessGroup ));
+
+ // id has been generated, store it for being able to delete
+ // only entries created with Creator
+ iEntryIds.Append( settings->Uid() );
+
+ TRAP(err, iIMPSSAPSettingsStore->StoreNewSAPL( settings, EIMPSPECAccessGroup ));
+
+ // id has been generated, store it for being able to delete
+ // only entries created with Creator
+ iEntryIds.Append( settings->Uid() );
+
+ CleanupStack::PopAndDestroy(); //settings
+ return err;
+ }
+
+
+//----------------------------------------------------------------------------
+void CCreatorIMPS::DeleteAllL()
+ {
+ LOGSTRING("Creator: CCreatorIMPS::DeleteAllL");
+ CIMPSSAPSettingsList* imps = CIMPSSAPSettingsList::NewLC();
+ iIMPSSAPSettingsStore->PopulateSAPSettingsListL( *imps, EIMPSAccessFilterAll );
+ for ( TInt i = 0; i < imps->Count(); i++ )
+ {
+ iIMPSSAPSettingsStore->DeleteSAPL( imps->UidForIndex( i ) );
+ }
+ CleanupStack::PopAndDestroy( imps );
+
+ // reset must be done here, because iEntryIds is stored in destructor
+ iEntryIds.Reset();
+
+ // all entries deleted, remove the IMPS related registry
+ iEngine->RemoveStoreL( KUidDictionaryUidIMPS );
+ }
+
+//----------------------------------------------------------------------------
+void CCreatorIMPS::DeleteAllCreatedByCreatorL()
+ {
+ LOGSTRING("Creator: CCreatorIMPS::DeleteAllCreatedByCreatorL");
+ iEntryIds.Reset();
+
+ // fetch ids of entries created by Creator
+ iEngine->ReadEntryIdsFromStoreL( iEntryIds, KUidDictionaryUidIMPS );
+
+ // delete entries
+ for ( TInt i = 0; i < iEntryIds.Count(); i++ )
+ {
+ TRAP_IGNORE( iIMPSSAPSettingsStore->DeleteSAPL( iEntryIds[i] ) );
+ }
+ // reset must be done here, because iEntryIds is stored in destructor
+ iEntryIds.Reset();
+
+ // all entries deleted, remove the IMPS related registry
+ iEngine->RemoveStoreL( KUidDictionaryUidIMPS );
+ }
+
+#endif //__PRESENCE
+