--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/src/creator_accesspoint.cpp Wed Sep 01 12:30:35 2010 +0100
@@ -0,0 +1,469 @@
+/*
+* 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:
+*
+*/
+
+
+
+#include "creator_accesspoint.h"
+#include "creator_traces.h"
+#include <ApListItemList.h>
+#include <ApListItem.h>
+
+static const TInt KAccessPointsFieldLength = 128;
+
+_LIT(KCreatorAccessPointsPrefixName, "CR_");
+_LIT(KZeroIP, "0.0.0.0");
+
+//----------------------------------------------------------------------------
+
+CAccessPointsParameters::CAccessPointsParameters()
+ {
+ LOGSTRING("Creator: CAccessPointsParameters::CAccessPointsParameters");
+
+ iConnectionName = HBufC::New(KAccessPointsFieldLength);
+ iWapStartPage = HBufC::New(KAccessPointsFieldLength);
+ iGprsAcessPointName = HBufC::New(KAccessPointsFieldLength);
+ iIspLoginName = HBufC::New(KAccessPointsFieldLength);
+ iIspLoginPass = HBufC::New(KAccessPointsFieldLength);
+ iWapGatewayAddress = HBufC::New(KAccessPointsFieldLength);
+ iIspIPAddr = HBufC::New(KAccessPointsFieldLength);
+ iIspIPNameServer1 = HBufC::New(KAccessPointsFieldLength);
+ iIspIPNameServer2 = HBufC::New(KAccessPointsFieldLength);
+ iIspDefaultTelNumber = HBufC::New(KAccessPointsFieldLength);
+ iProxyServerAddress = HBufC::New(KAccessPointsFieldLength);
+ }
+
+CAccessPointsParameters::~CAccessPointsParameters()
+ {
+ LOGSTRING("Creator: CAccessPointsParameters::~CAccessPointsParameters");
+
+ delete iProxyServerAddress;
+ delete iIspDefaultTelNumber;
+ delete iIspIPNameServer2;
+ delete iIspIPNameServer1;
+ delete iIspIPAddr;
+ delete iWapGatewayAddress;
+ delete iIspLoginPass;
+ delete iIspLoginName;
+ delete iGprsAcessPointName;
+ delete iWapStartPage;
+ delete iConnectionName;
+ }
+
+void CAccessPointsParameters::SetRandomCMNameL(CCreatorEngine& aEngine)
+ {
+ TInt num = aEngine.RandomNumber(1, 3);
+ TBuf<10> apType;
+
+ if (num==1)
+ apType = _L("mms");
+ else if (num==2)
+ apType = _L("wap");
+ else
+ apType = _L("internet");
+
+ TBuf<160> company = aEngine.RandomString(CCreatorEngine::ECompany);
+
+ iConnectionName->Des() = KCreatorAccessPointsPrefixName;
+ iConnectionName->Des().Append( company );
+ iConnectionName->Des().Append(_L(" "));
+ iConnectionName->Des().Append(apType);
+ }
+
+void CAccessPointsParameters::SetRandomLoginNameL(CCreatorEngine& aEngine)
+ {
+ iIspLoginName->Des() = aEngine.RandomString(CCreatorEngine::EFirstName);
+ iIspLoginName->Des().LowerCase();
+ }
+
+void CAccessPointsParameters::SetRandomLoginPassL(CCreatorEngine& /*aEngine*/)
+ {}
+
+void CAccessPointsParameters::SetRandomSecureAuthenticationL(CCreatorEngine& /*aEngine*/)
+ {}
+
+void CAccessPointsParameters::SetRandomPromptPasswordL(CCreatorEngine& /*aEngine*/)
+ {}
+
+void CAccessPointsParameters::SetRandomProxyAddressL(CCreatorEngine& /*aEngine*/)
+ {}
+
+void CAccessPointsParameters::SetRandomProxyPortL(CCreatorEngine& /*aEngine*/)
+ {}
+
+void CAccessPointsParameters::SetRandomStartPageL(CCreatorEngine& /*aEngine*/)
+ {}
+
+void CAccessPointsParameters::SetRandomIPAddressL(CCreatorEngine& /*aEngine*/)
+ {}
+
+void CAccessPointsParameters::SetRandomIP4NameServer1L(CCreatorEngine& /*aEngine*/)
+ {}
+
+void CAccessPointsParameters::SetRandomIP4NameServer2L(CCreatorEngine& /*aEngine*/)
+ {}
+
+void CAccessPointsParameters::SetRandomTelephoneNumberL(CCreatorEngine& /*aEngine*/)
+ {}
+
+void CAccessPointsParameters::SetRandomBearerTypeIsdnL(CCreatorEngine& /*aEngine*/)
+ {}
+
+void CAccessPointsParameters::SetRandomBearerSpeedL(CCreatorEngine& /*aEngine*/)
+ {}
+
+void CAccessPointsParameters::SetRandomWapWspOptionL(CCreatorEngine& /*aEngine*/)
+ {}
+
+void CAccessPointsParameters::SetRandomGatewayAddressL(CCreatorEngine& /*aEngine*/)
+ {}
+
+//----------------------------------------------------------------------------
+
+CCreatorAccessPoints* CCreatorAccessPoints::NewL(CCreatorEngine* aEngine)
+ {
+ CCreatorAccessPoints* self = CCreatorAccessPoints::NewLC(aEngine);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CCreatorAccessPoints* CCreatorAccessPoints::NewLC(CCreatorEngine* aEngine)
+ {
+ CCreatorAccessPoints* self = new (ELeave) CCreatorAccessPoints;
+ CleanupStack::PushL(self);
+ self->ConstructL(aEngine);
+ return self;
+ }
+
+CCreatorAccessPoints::CCreatorAccessPoints()
+ {
+ }
+
+void CCreatorAccessPoints::ConstructL(CCreatorEngine* aEngine)
+ {
+ LOGSTRING("Creator: CCreatorAccessPoints::ConstructL");
+
+ iEngine = aEngine;
+
+ iCommsDb = CCommsDatabase::NewL();;
+ iApDataHandler = CApDataHandler::NewLC(*iCommsDb);
+ CleanupStack::Pop();
+ iApUtils = CApUtils::NewLC(*iCommsDb);
+ CleanupStack::Pop();
+ }
+
+CCreatorAccessPoints::~CCreatorAccessPoints()
+ {
+ LOGSTRING("Creator: CCreatorAccessPoints::~CCreatorAccessPoints");
+
+ if ( iEngine && iEntryIds.Count() )
+ {
+ TRAP_IGNORE( iEngine->WriteEntryIdsToStoreL( iEntryIds, KUidDictionaryUidIAP ) );
+ }
+ iEntryIds.Reset();
+ iEntryIds.Close();
+
+ delete iApUtils;
+ delete iApDataHandler;
+ delete iCommsDb;
+
+ if (iParameters)
+ delete iParameters;
+ }
+
+//----------------------------------------------------------------------------
+
+TBool CCreatorAccessPoints::AskDataFromUserL(TInt aCommand, TInt& aNumberOfEntries)
+ {
+ LOGSTRING("Creator: CCreatorAccessPoints::AskDataFromUserL");
+
+ if( aCommand == ECmdDeleteIAPs )
+ {
+ return iEngine->YesNoQueryDialogL(_L("Delete all Access Points?") );
+ }
+ else if( aCommand == ECmdDeleteCreatorIAPs )
+ {
+ return iEngine->YesNoQueryDialogL(_L("Delete all Access Points created with Creator?") );
+ }
+
+ return iEngine->EntriesQueryDialogL(aNumberOfEntries, _L("How many entries to create?"));
+ }
+
+
+//----------------------------------------------------------------------------
+
+TInt CCreatorAccessPoints::CreateConnectionSettingsEntryL(CCreatorModuleBaseParameters *aParameters)
+ {
+ LOGSTRING("Creator: CCreatorAccessPoints::CreateAccessPointEntryL");
+
+ CAccessPointsParameters* parameters = (CAccessPointsParameters*) aParameters;
+
+ // clear any existing parameter definations
+ delete iParameters;
+ iParameters = NULL;
+
+
+
+ // random data needed if no predefined data available
+ if (!parameters)
+ {
+ TBuf<160> company = iEngine->RandomString(CCreatorEngine::ECompany);
+ TInt num = iEngine->RandomNumber(1, 3);
+ TBuf<10> apType;
+
+ if (num==1)
+ apType = _L("mms");
+ else if (num==2)
+ apType = _L("wap");
+ else
+ apType = _L("internet");
+
+ iParameters = new(ELeave) CAccessPointsParameters;
+ parameters = iParameters;
+
+ parameters->SetRandomCMNameL(*iEngine);
+
+ // in random mode just create GPRS access points
+ parameters->iBearerType = EApBearerTypeGPRS;
+
+ parameters->SetRandomLoginNameL(*iEngine);
+
+ iParameters->iIspLoginPass->Des() = iEngine->RandomString(CCreatorEngine::ESurname);
+ iParameters->iIspLoginPass->Des().LowerCase();
+
+ iParameters->iSecureAuthentication = EFalse;
+ iParameters->iPromptPassword = EFalse;
+
+ iParameters->iProxyServerAddress->Des() = _L("127.0.0.1");
+ iParameters->iProxyPortNumber = 80;
+
+ iParameters->iWapStartPage->Des() = _L("http://");
+ iParameters->iWapStartPage->Des().Append(apType);
+ iParameters->iWapStartPage->Des().Append(_L("."));
+ iParameters->iWapStartPage->Des().Append(company);
+ iParameters->iWapStartPage->Des().Append(_L(".com"));
+ iParameters->iWapStartPage->Des().LowerCase();
+
+ iParameters->iIspIPAddr->Des() = KZeroIP;
+ iParameters->iIspIPNameServer1->Des() = KZeroIP;
+ iParameters->iIspIPNameServer1->Des() = KZeroIP;
+ iParameters->iGprsAcessPointName->Des() = apType;
+ iParameters->iIspDefaultTelNumber->Des() = iEngine->RandomString(CCreatorEngine::EPhoneNumber);
+ iParameters->iIspBearerCallTypeIsdn = ECallTypeISDNv110;
+ iParameters->iIspBearerSpeed = KSpeed14400;
+
+ iParameters->iWapWspOption = EWapWspOptionConnectionOriented;
+ iParameters->iWapGatewayAddress->Des() = KZeroIP;
+ }
+ else
+ {
+ // otherwise replace the parameters object
+ iParameters = parameters;
+ }
+
+ TInt err = KErrNone;
+
+ // access point item
+ CApAccessPointItem* apItem = CApAccessPointItem::NewLC();
+
+ // set the bearer type, if it fails try to set a default type
+ TRAPD(bearerErr, apItem->SetBearerTypeL(iParameters->iBearerType));
+ if (bearerErr != KErrNone)
+ {
+ iParameters->iBearerType = EApBearerTypeGPRS;
+ TRAPD(bearerErr2, apItem->SetBearerTypeL(iParameters->iBearerType));
+ bearerErr2=bearerErr2;
+ }
+
+ if (iParameters->iBearerType == EApBearerTypeGPRS) // GPRS
+ {
+ err = apItem->WriteLongTextL(EApGprsAccessPointName, iParameters->iGprsAcessPointName->Des());
+ }
+ else // CSD or HCSD
+ {
+ err = apItem->WriteTextL(EApIspDefaultTelNumber, iParameters->iIspDefaultTelNumber->Des());
+ err = apItem->WriteUint(EApIspBearerCallTypeIsdn, iParameters->iIspBearerCallTypeIsdn);
+ err = apItem->WriteUint(EApIspBearerSpeed, iParameters->iIspBearerSpeed);
+ }
+
+ err = apItem->WriteTextL(EApIspLoginName, iParameters->iIspLoginName->Des());
+ err = apItem->WriteTextL(EApIspIfAuthName, iParameters->iIspLoginName->Des());
+ err = apItem->WriteTextL(EApIspLoginPass, iParameters->iIspLoginPass->Des());
+ err = apItem->WriteTextL(EApIspIfAuthPass, iParameters->iIspLoginPass->Des());
+ err = apItem->WriteTextL(EApGprsIfAuthPassword, iParameters->iIspLoginPass->Des());
+ err = apItem->WriteBool(EApIspDisablePlainTextAuth, iParameters->iSecureAuthentication);
+ err = apItem->WriteBool(EApIspPromptForLogin, iParameters->iPromptPassword);
+ err = apItem->WriteTextL(EApWapGatewayAddress, iParameters->iWapGatewayAddress->Des());
+ err = apItem->WriteLongTextL(EApProxyServerAddress, iParameters->iProxyServerAddress->Des());
+ err = apItem->WriteUint(EApProxyPortNumber, iParameters->iProxyPortNumber);
+ err = apItem->WriteLongTextL(EApWapStartPage, iParameters->iWapStartPage->Des());
+ err = apItem->WriteUint(EApWapWspOption, iParameters->iWapWspOption);
+ err = apItem->WriteTextL(EApGprsIPNameServer1, iParameters->iIspIPNameServer1->Des());
+ err = apItem->WriteTextL(EApGprsIPNameServer2, iParameters->iIspIPNameServer2->Des());
+ err = apItem->WriteTextL(EApIspIPAddr, iParameters->iIspIPAddr->Des());
+
+
+ TUint32 uid = iApDataHandler->CreateFromDataL(*apItem); // save the access point, returns the uid of the AP
+
+ // id has been generated, store it for being able to delete
+ // entries created only with Creator
+ iEntryIds.Append( uid );
+
+ TBuf<256> name = iParameters->iConnectionName->Des();
+ iApUtils->SetNameL(name, uid); // sets the AP name
+
+
+ // if no defaults set, set the created AP as a default
+
+ // MMS access point
+ if (iParameters->iWapStartPage->Des().FindF(_L("mms")) >=0 || iParameters->iConnectionName->Des().FindF(_L("mms")) >=0 )
+ {
+ //User::Panic(_L("Not done yet..."), 123);
+ }
+
+
+ // WAP access point
+ else if (iParameters->iConnectionName->Des().FindF(_L("wap")) >=0 || iParameters->iGprsAcessPointName->Des().FindF(_L("wap")) >= 0)
+ {
+ TUint32 defID = 0;
+ TRAP( err, defID = iApDataHandler->DefaultL(ETrue) ); // ETrue==WAP
+
+ if (defID <= 1)
+ TRAP( err, iApDataHandler->SetAsDefaultL(uid, EIspTypeWAPOnly) );
+
+ }
+
+ // Internet access point
+ else if (iParameters->iConnectionName->Des().FindF(_L("internet")) >=0 || iParameters->iGprsAcessPointName->Des().FindF(_L("internet")) >= 0)
+ {
+ TUint32 defID = 0;
+ TRAP( err, defID = iApDataHandler->DefaultL(EFalse) ); // EFalse==IAP
+
+ if (defID <= 1)
+ TRAP( err, iApDataHandler->SetAsDefaultL(uid, EIspTypeInternetOnly) ); // <-- POSSIBLY NOT CORRECT, NEEDS MORE TESTING
+ }
+
+
+
+ CleanupStack::PopAndDestroy(); //apItem
+
+ return err;
+ }
+
+//----------------------------------------------------------------------------
+
+TUint32 CCreatorAccessPoints::AccessPointNameToIdL(const TDesC& aAPName, TBool /*aAnyIfNotFound*/ )
+ {
+ LOGSTRING("Creator: CCreatorEngine::AccessPointNameToIdL");
+
+ TBuf<256> apName = aAPName.Left(256);
+ apName.Trim();
+
+ TUint32 APId = iEngine->GetDefaultIAPL();
+
+ // return default IAP if requested
+ if (apName.CompareF(_L("DEFAULT-IAP")) == 0 || apName.CompareF(_L("DEFAULT")) == 0)
+ {
+ return APId;
+ }
+
+ CCommsDatabase* db = CCommsDatabase::NewL(EDatabaseTypeIAP);
+ CleanupStack::PushL(db);
+ CApUtils* apUtils = CApUtils::NewLC(*db);
+ CApSelect* apSelect = CApSelect::NewLC(*db, KEApIspTypeAll, EApBearerTypeAll, KEApSortNameAscending);
+
+
+ // loop through all access points and try to find a matching name
+ if (apSelect->MoveToFirst())
+ {
+ do
+ {
+ TBuf<256> apName2;
+ apUtils->NameL(apSelect->Uid(), apName2);
+ apName2.Trim();
+
+ if (apName2.CompareF( apName ) == 0)
+ {
+ // match found, get uid and break the loop
+ TRAPD( err, APId = apUtils->IapIdFromWapIdL(apSelect->Uid()) );
+ err=err;
+ break;
+ }
+ }
+ while (apSelect->MoveNext());
+ }
+
+ CleanupStack::PopAndDestroy(3); //apSelect, apUtils, db
+
+ return APId;
+ }
+
+//----------------------------------------------------------------------------
+
+void CCreatorAccessPoints::HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) // from MMsvSessionObserver
+ {
+ }
+
+//----------------------------------------------------------------------------
+void CCreatorAccessPoints::DeleteAllL()
+ {
+ LOGSTRING("Creator: CCreatorEngine::DeleteAllL");
+
+ CApSelect* selector = CApSelect::NewLC( *iCommsDb,
+ KEApIspTypeAll,
+ EApBearerTypeAllBearers,
+ KEApSortUidAscending );
+
+ CApListItemList* list = new (ELeave) CApListItemList();
+ CleanupStack::PushL( list );
+ TInt count = selector->AllListItemDataL( *list );
+ for ( TInt i = 0; i < count; i++ )
+ {
+ TRAP_IGNORE( iApDataHandler->RemoveAPL( (*list)[i]->Uid() ) );
+ }
+
+ CleanupStack::PopAndDestroy( list );
+ CleanupStack::PopAndDestroy( selector );
+
+ // reset must be done here, because iEntryIds is stored in destructor
+ iEntryIds.Reset();
+
+ // all entries deleted, remove the Logs related registry
+ iEngine->RemoveStoreL( KUidDictionaryUidIAP );
+ }
+
+//----------------------------------------------------------------------------
+
+void CCreatorAccessPoints::DeleteAllCreatedByCreatorL()
+ {
+ LOGSTRING("Creator: CCreatorEngine::DeleteAllCreatedByCreatorL");
+ iEntryIds.Reset();
+
+ // fetch ids of entries created by Creator
+ iEngine->ReadEntryIdsFromStoreL( iEntryIds, KUidDictionaryUidIAP );
+
+ // delete entries
+ for ( TInt i = 0; i < iEntryIds.Count(); i++ )
+ {
+ TRAP_IGNORE( iApDataHandler->RemoveAPL( iEntryIds[i] ) );
+ }
+
+ // reset must be done here, because iEntryIds is stored in destructor
+ iEntryIds.Reset();
+
+ // all entries deleted, remove the Logs related registry
+ iEngine->RemoveStoreL( KUidDictionaryUidIAP );
+ }