--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/apengine/apeng/src/APUtils.cpp Thu Dec 17 08:55:21 2009 +0200
@@ -0,0 +1,1469 @@
+/*
+* 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: Declaration of the class CApUtils
+* Contains utility functions for access point handling
+*
+*/
+
+
+// INCLUDE FILES
+#include "APEngineVariant.hrh"
+
+#include "ApUtils.h"
+#include "ApAccessPointItem.h"
+#include "ApDataHandler.h"
+#include "ApEngineCommons.h"
+#include "ApEngineLogger.h"
+#include <e32des16.h>
+#include <es_sock.h>
+#include <es_enum.h>
+
+#include <featmgr.h>
+
+#include <WlanCdbCols.h>
+
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// construct/destruct/copy
+// ---------------------------------------------------------
+// CApUtils::NewLC
+// ---------------------------------------------------------
+//
+EXPORT_C CApUtils* CApUtils::NewLC( CCommsDatabase& aDb )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::NewLC" ) ) );
+
+ CApUtils* db = new( ELeave ) CApUtils;
+ CleanupStack::PushL( db );
+ db->ConstructL( aDb );
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::NewLC" ) ) );
+ return db;
+ }
+
+
+
+// Destructor
+// ---------------------------------------------------------
+// CApUtils::~CApUtils
+// ---------------------------------------------------------
+//
+EXPORT_C CApUtils::~CApUtils()
+ {
+ if ( iExt )
+ {
+ if ( iExt->iIsFeatureManagerInitialised )
+ {
+ FeatureManager::UnInitializeLib();
+ }
+ }
+ delete iExt;
+ CLOG( ( EUtil, 0, _L( "<-> CApUtils::~CApUtils" ) ) );
+ }
+
+
+// C++ default constructor can NOT contain any code that
+// might leave.
+//
+// ---------------------------------------------------------
+// CApUtils::CApUtils
+// ---------------------------------------------------------
+//
+EXPORT_C CApUtils::CApUtils()
+ {
+ }
+
+
+// Symbian OS default constructor can leave.
+// ---------------------------------------------------------
+// CApUtils::ConstructL
+// ---------------------------------------------------------
+//
+EXPORT_C void CApUtils::ConstructL( CCommsDatabase& aDb )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::ConstructL" ) ) );
+
+ iDb = &aDb;
+ iExt = new ( ELeave )TUtilsExtra;
+
+ FeatureManager::InitializeLibL();
+ iExt->iIsFeatureManagerInitialised = ETrue;
+
+ iExt->iVariant = ApCommons::GetVariantL();
+#ifdef __TEST_CDMA_WRITE_PROTECT
+ iExt->iVariant |= KApUiEditOnlyVPNs;
+#endif // __TEST_CDMA_WRITE_PROTECT
+
+ iExt->iWlanSupported =
+ FeatureManager::FeatureSupported( KFeatureIdProtocolWlan );
+
+
+#ifdef __TEST_WLAN_SUPPORT
+ iExt->iWlanSupported = ETrue;
+#endif // __TEST_WLAN_SUPPORT
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::ConstructL" ) ) );
+ }
+
+
+
+
+
+// utilities
+
+// ---------------------------------------------------------
+// CApUtils::IsAPInUseL
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CApUtils::IsAPInUseL( TUint32 aUid )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::IsAPInUseL" ) ) );
+
+
+
+ TBool retval( EFalse );
+#ifdef __WINS__
+ // just to satisfy compiler...
+ aUid++;
+#else //
+ RSocketServ rs;
+ RConnection rc;
+
+ TUint32 iap( 0 );
+ TBool ownTransaction = ApCommons::StartPushedTransactionLC( *iDb, ETrue );
+ TRAP_IGNORE( iap = IapIdFromWapIdL( aUid ) );
+
+ User::LeaveIfError( rs.Connect() );
+ User::LeaveIfError( rc.Open( rs ) );
+
+ TUint count( 0 );
+ User::LeaveIfError( rc.EnumerateConnections( count ) );
+ // Go on only if there is any
+ if ( count )
+ {
+ for( TUint i = 1; i <= count; i++)
+ {
+ TPckgBuf<TConnectionInfo> connInfo;
+ User::LeaveIfError( rc.GetConnectionInfo( i, connInfo ) );
+ if ( iap == connInfo().iIapId )
+ {
+ // IAP is in use, break
+ retval = ETrue;
+ break;
+ }
+ }
+ }
+
+ rc.Close();
+ rs.Close();
+
+ if ( ownTransaction )
+ {
+ ApCommons::CommitTransaction( *iDb );
+ CleanupStack::Pop(); // RollbackTransactionOnLeave
+ }
+#endif // __WINS__
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::IsAPInUseL" ) ) );
+ return ( retval );
+ }
+
+
+
+
+// ---------------------------------------------------------
+// CApUtils::WapBearerTypeL
+// ---------------------------------------------------------
+//
+EXPORT_C void CApUtils::WapBearerTypeL( TUint32 aUid, TDes& aBearer )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::WapBearerTypeL" ) ) );
+
+ TBool ownTransaction = ApCommons::StartPushedTransactionLC( *iDb );
+
+ DoWapBearerTypeL( aUid, aBearer );
+
+ if ( ownTransaction )
+ {
+ ApCommons::CommitTransaction( *iDb );
+ CleanupStack::Pop(); // RollbackTransactionOnLeave
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::WapBearerTypeL" ) ) );
+ }
+
+
+// ---------------------------------------------------------
+// CApUtils::BearerTypeL
+// ---------------------------------------------------------
+//
+EXPORT_C TApBearerType CApUtils::BearerTypeL( TUint32 aUid )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::BearerTypeL" ) ) );
+
+ TBool ownTransaction = ApCommons::StartPushedTransactionLC( *iDb );
+ TApBearerType retval = EApBearerTypeAllBearers;
+ retval = DoBearerTypeL( aUid );
+ if ( ownTransaction )
+ {
+ ApCommons::CommitTransaction( *iDb );
+ CleanupStack::Pop(); // RollbackTransactionOnLeave
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::BearerTypeL" ) ) );
+ return retval;
+ }
+
+
+// ---------------------------------------------------------
+// CApUtils::ISPTypeL
+// ---------------------------------------------------------
+//
+EXPORT_C void CApUtils::ISPTypeL( TUint32 aUid, TCommsDbIspType& aIspType )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::ISPTypeL" ) ) );
+
+ TBool ownTransaction = ApCommons::StartPushedTransactionLC( *iDb );
+ DoISPTypeL( aUid, aIspType );
+ if ( ownTransaction )
+ {
+ ApCommons::CommitTransaction( *iDb );
+ CleanupStack::Pop(); // RollbackTransactionOnLeave
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::ISPTypeL" ) ) );
+ }
+
+
+
+// ---------------------------------------------------------
+// CApUtils::IsValidNameL
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CApUtils::IsValidNameL( const TDesC& aNameText )
+ {
+ CLOG( ( EUtil, 0, _L( "<-> CApUtils::IsValidNameL" ) ) );
+
+ return IsValidNameL( aNameText, 0 );
+ }
+
+
+// ---------------------------------------------------------
+// CApUtils::MakeValidName
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CApUtils::MakeValidNameL( TDes& aNameText )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::MakeValidNameL" ) ) );
+
+ TBool ownTransaction = ApCommons::StartPushedTransactionLC( *iDb );
+
+ HBufC* buf = HBufC::NewLC( KModifiableTextLength );
+ TPtr ptr( buf->Des() );
+ ptr.Copy( aNameText );
+ TBool nameChanged( EFalse );
+ HBufC* sgd = ApCommons::DoMakeValidNameL( *iDb,
+ nameChanged,
+ buf,
+ 0,
+ EFalse );
+
+ if ( nameChanged )
+ {
+ aNameText.Copy( *sgd );
+ }
+ CleanupStack::PopAndDestroy( buf ); // buf
+ delete sgd;
+ if ( ownTransaction )
+ {
+ ApCommons::CommitTransaction( *iDb );
+ CleanupStack::Pop(); // RollbackTransactionOnLeave
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::MakeValidNameL" ) ) );
+ return nameChanged;
+ }
+
+
+// ---------------------------------------------------------
+// CApUtils::NameL
+// ---------------------------------------------------------
+//
+EXPORT_C void CApUtils::NameL( TUint32 aUid, TDes& aName )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::NameL" ) ) );
+
+ TBool ownTransaction = ApCommons::StartPushedTransactionLC( *iDb );
+ DoNameL( aUid, aName );
+ if ( ownTransaction )
+ {
+ ApCommons::CommitTransaction( *iDb );
+ CleanupStack::Pop(); // RollbackTransactionOnLeave
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::NameL" ) ) );
+ }
+
+
+
+// ---------------------------------------------------------
+// CApUtils::SetNameL
+// ---------------------------------------------------------
+//
+EXPORT_C void CApUtils::SetNameL( TDes& aName, TUint32 aUid )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::SetNameL" ) ) );
+
+ if ( iExt->iVariant & KApUiEditOnlyVPNs )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ TBool ownTransaction = ApCommons::StartPushedTransactionLC( *iDb );
+ DoSetNameL( aName, aUid );
+ if ( ownTransaction )
+ {
+ ApCommons::CommitTransaction( *iDb );
+ CleanupStack::Pop(); // RollbackTransactionOnLeave
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::SetNameL" ) ) );
+ }
+
+
+
+// ---------------------------------------------------------
+// CApUtils::SetISPTypeL
+// ---------------------------------------------------------
+//
+EXPORT_C void CApUtils::SetISPTypeL( TUint32 aUid, TCommsDbIspType aIspType )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::SetISPTypeL" ) ) );
+
+ if ( iExt->iVariant & KApUiEditOnlyVPNs )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ TBool ownTransaction = ApCommons::StartPushedTransactionLC( *iDb );
+ DoSetISPTypeL( aUid, aIspType );
+ if ( ownTransaction )
+ {
+ ApCommons::CommitTransaction( *iDb );
+ CleanupStack::Pop(); // RollbackTransactionOnLeave
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::SetISPTypeL" ) ) );
+ }
+
+
+
+// ---------------------------------------------------------
+// CApUtils::IapIdFromWapIdL
+// ---------------------------------------------------------
+//
+EXPORT_C TUint32 CApUtils::IapIdFromWapIdL( TUint32 aUid )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::IapIdFromWapIdL" ) ) );
+
+ TBool ownTransaction = ApCommons::StartPushedTransactionLC( *iDb );
+ TUint32 retval( 0 );
+
+ CCommsDbTableView* wapt;
+ wapt = iDb->OpenViewMatchingUintLC( TPtrC(WAP_ACCESS_POINT),
+ TPtrC(COMMDB_ID), aUid );
+ User::LeaveIfError( wapt->GotoFirstRecord() );
+
+ HBufC* wapBearer = ApCommons::ReadText16ValueLC
+ (
+ wapt,
+ TPtrC(WAP_CURRENT_BEARER)
+ );
+
+ if ( *wapBearer == TPtrC(WAP_IP_BEARER) )
+ {
+ CCommsDbTableView* bearert;
+ bearert = iDb->OpenViewMatchingUintLC( TPtrC(*wapBearer),
+ TPtrC(WAP_ACCESS_POINT_ID), aUid );
+ User::LeaveIfError( bearert->GotoFirstRecord() );
+ ApCommons::ReadUintL( bearert, TPtrC(WAP_IAP), retval );
+ CleanupStack::PopAndDestroy( bearert ); // bearert
+ }
+ else
+ {
+ User::Leave( KErrInvalidBearerType );
+ }
+ CleanupStack::PopAndDestroy( 2, wapt ); // wapBearer, wapt
+ if ( ownTransaction )
+ {
+ ApCommons::CommitTransaction( *iDb );
+ CleanupStack::Pop(); // RollbackTransactionOnLeave
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::IapIdFromWapIdL" ) ) );
+ return retval;
+ }
+
+
+// ---------------------------------------------------------
+// CApUtils::WapIdFromIapIdL
+// ---------------------------------------------------------
+//
+EXPORT_C TUint32 CApUtils::WapIdFromIapIdL( TUint32 aUid )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::WapIdFromIapIdL" ) ) );
+
+ TBool ownTransaction = ApCommons::StartPushedTransactionLC( *iDb );
+ TUint32 retval( 0 );
+
+ CCommsDbTableView* bearert;
+ bearert = iDb->OpenViewMatchingUintLC( TPtrC(WAP_IP_BEARER),
+ TPtrC(WAP_IAP), aUid );
+ User::LeaveIfError( bearert->GotoFirstRecord() );
+ ApCommons::ReadUintL( bearert, TPtrC(WAP_ACCESS_POINT_ID), retval );
+ CleanupStack::PopAndDestroy( bearert ); // bearert
+
+ if ( ownTransaction )
+ {
+ ApCommons::CommitTransaction( *iDb );
+ CleanupStack::Pop(); // RollbackTransactionOnLeave
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::WapIdFromIapIdL" ) ) );
+ return retval;
+ }
+
+
+// ---------------------------------------------------------
+// CApUtils::HasMandatoryFieldsFilledL
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CApUtils::HasMandatoryFieldsFilledL( TUint32 aUid )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::HasMandatoryFieldsFilledL" ) ) );
+
+ TBool retval( EFalse );
+ TBool isOwn = ApCommons::StartPushedTransactionLC( *iDb );
+ retval= DoHasMandatoryFieldsFilledL( aUid );
+ if ( isOwn )
+ {
+ ApCommons::CommitTransaction( *iDb );
+ CleanupStack::Pop(); // RollbackTransactionOnLeave
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::HasMandatoryFieldsFilledL" ) ) );
+ return retval;
+ }
+
+
+
+// ---------------------------------------------------------
+// CApUtils::IAPExistsL
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CApUtils::IAPExistsL( TUint32 aUid )
+ {
+ CLOG( ( EUtil, 0, _L( "<-> CApUtils::IAPExistsL" ) ) );
+
+ return DoesExistsL( TPtrC( IAP ), aUid );
+ }
+
+
+// ---------------------------------------------------------
+// CApUtils::WapApExistsL
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CApUtils::WapApExistsL( TUint32 aUid )
+ {
+ CLOG( ( EUtil, 0, _L( "<-> CApUtils::WapApExistsL" ) ) );
+
+ return DoesExistsL( TPtrC( WAP_ACCESS_POINT ), aUid );
+ }
+
+
+
+// ---------------------------------------------------------
+// CApUtils::DoHasMandatoryFieldsFilledL
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CApUtils::DoHasMandatoryFieldsFilledL(
+ TUint32 aUid,
+ CCommsDbTableView* aWapt,
+ TApBearerType aBearertype )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::DoHasMandatoryFieldsFilledL" ) ) );
+
+ TBool retval( EFalse );
+ TInt need2pop( 0 );
+ // if not contains, retval = False...
+ // Mandatory WAP settings are:
+ // CSD: StartPage, GatewayAddr
+ // Note: SMS bearer had been dropped.
+ // SMS: ServerNumber, ServiceNumber
+ // Gprs: StartPage, GatewayAddr
+ // Cdma: StartPage, GatewayAddr
+ // Start with CSD/GPRS:
+
+ if ( aBearertype == EApBearerTypeAllBearers )
+ {
+ aBearertype = BearerTypeL( aUid );
+ }
+ if ( aBearertype == EApBearerTypeAllBearers )
+ {
+ User::Leave( KErrInvalidBearerType );
+ }
+
+ if ( !aWapt )
+ {
+ aWapt = iDb->OpenViewMatchingUintLC( TPtrC(WAP_ACCESS_POINT ),
+ TPtrC( COMMDB_ID ), aUid );
+ need2pop++;
+ TInt res = aWapt->GotoFirstRecord();
+ if ( res != KErrNone )
+ {
+ aWapt = NULL;
+ User::Leave( res );
+ }
+ }
+ switch ( aBearertype )
+ {
+ case EApBearerTypeCSD:
+ case EApBearerTypeHSCSD:
+ case EApBearerTypeGPRS:
+ case EApBearerTypeCDMA:
+ {
+ TInt aLength( 0 );
+ aWapt->ReadColumnLengthL( TPtrC(WAP_START_PAGE), aLength );
+ if ( aLength )
+ {
+ CCommsDbTableView* bearert = iDb->OpenViewMatchingUintLC(
+ TPtrC(WAP_IP_BEARER),
+ TPtrC(WAP_ACCESS_POINT_ID),
+ aUid );
+ User::LeaveIfError( bearert->GotoFirstRecord() );
+ bearert->ReadColumnLengthL( TPtrC(WAP_GATEWAY_ADDRESS),
+ aLength );
+ if ( aLength )
+ {
+ HBufC* txtbuf = HBufC::NewLC( aLength );
+ TPtr16 txt = txtbuf->Des();
+ bearert->ReadTextL( TPtrC(WAP_GATEWAY_ADDRESS), txt );
+ if ( txt.Compare( KDynIpAddress ) )
+ {
+ retval = ETrue;
+ }
+ }
+ CleanupStack::PopAndDestroy( 2, bearert ); // txtbuf,bearert
+ }
+ break;
+ }
+ default:
+ {
+ User::Leave( KErrInvalidBearerType );
+ break;
+ }
+ }
+ if ( need2pop )
+ {
+ CleanupStack::PopAndDestroy( need2pop );
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::DoHasMandatoryFieldsFilledL" ) ) );
+ return retval;
+ }
+
+
+
+// ---------------------------------------------------------
+// CApUtils::IsValidNameL
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CApUtils::IsValidNameL( const TDesC& aNameText,
+ TUint32 aAcceptUid )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::IsValidNameL" ) ) );
+
+ // Valid name: it means the name of the Connection,
+ // that is the COMMDB_NAME in WAP_ACCESS_POINT table
+ //
+ TBool ret( ETrue ) ;
+ TBool ownTransaction = ApCommons::StartPushedTransactionLC( *iDb, ETrue );
+
+ HBufC* esc = ApCommons::EscapeTextLC( aNameText );
+ CCommsDbTableView* wapt;
+ wapt = iDb->OpenViewMatchingTextLC( TPtrC(WAP_ACCESS_POINT),
+ TPtrC(COMMDB_NAME),
+ *esc );
+
+ TInt res;
+ res = wapt->GotoFirstRecord(); // OK
+ do
+ {
+ if ( res == KErrNone )
+ {
+ // Check UID
+ TUint32 arecid;
+ ApCommons::ReadUintL( wapt, TPtrC(COMMDB_ID), arecid);
+ if ( arecid != aAcceptUid )
+ {
+ // some other record is already using this name,
+ // need to change it
+ ret = EFalse;
+ }
+ }
+ else
+ {
+ if ( res == KErrNotFound )
+ {
+ ret = ETrue;
+ }
+ else
+ {
+ User::Leave( res );
+ }
+ }
+ if ( ret && ( res == KErrNone ) )
+ {
+ res = wapt->GotoNextRecord();
+ }
+ }while ( ( res == KErrNone ) && ( ret ) );
+
+ CleanupStack::PopAndDestroy( wapt ); // wapt
+ CleanupStack::PopAndDestroy( esc ); // esc
+
+ if ( ownTransaction )
+ {
+ ApCommons::CommitTransaction( *iDb );
+ CleanupStack::Pop(); // RollbackTransactionOnLeave
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::IsValidNameL" ) ) );
+ return ret;
+ }
+
+
+// ---------------------------------------------------------
+// CApUtils::IsReadOnlyL
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CApUtils::IsReadOnlyL( TUint32 aUid )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::IsReadOnlyL" ) ) );
+
+ TBool retval( EFalse );
+ TBool ownTransaction = ApCommons::StartPushedTransactionLC( *iDb, ETrue );
+ CCommsDbTableView* wapt;
+ wapt = iDb->OpenViewMatchingUintLC( TPtrC(WAP_ACCESS_POINT),
+ TPtrC(COMMDB_ID), aUid );
+ User::LeaveIfError( wapt->GotoFirstRecord() );
+ retval = ApCommons::DoGetReadOnlyL( *wapt );
+ CleanupStack::PopAndDestroy( wapt ); // wapt
+ if ( ownTransaction )
+ {
+ ApCommons::CommitTransaction( *iDb );
+ CleanupStack::Pop(); // RollbackTransactionOnLeave
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::IsReadOnlyL" ) ) );
+ return retval;
+ }
+
+
+
+
+// ---------------------------------------------------------
+// CApUtils::IsWlanL
+// ---------------------------------------------------------
+//
+TBool CApUtils::IsWlanL( TUint32 aLanCommdbId )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::IsWlanL" ) ) );
+
+ TBool retval( EFalse );
+ TRAPD( err, retval = DoIsWlanL( aLanCommdbId ) );
+
+ if ( err == KErrNotFound )
+ {
+ retval = EFalse;
+ }
+ else
+ {
+ User::LeaveIfError( err );
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::IsWlanL" ) ) );
+ return retval;
+ }
+
+
+
+// ---------------------------------------------------------
+// CApUtils::HasWlanSSIDL
+// ---------------------------------------------------------
+//
+TBool CApUtils::HasWlanSSIDL( TUint32 aLanCommdbId )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::HasWlanSSIDL" ) ) );
+
+ TBool retval( EFalse );
+ CCommsDbTableView* wlantable = NULL;
+
+ // WLAN settings table backlinks to LAN service,
+ // so we query WLAN settings for a record
+ // where WLAN_SERVICE_ID is LAN_SERVICE's COMMDB_ID,
+ // which is aApItem.iIapServiceId...
+ wlantable = iDb->OpenViewMatchingUintLC( TPtrC(WLAN_SERVICE),
+ TPtrC(WLAN_SERVICE_ID),
+ aLanCommdbId );
+ TInt err = wlantable->GotoFirstRecord();
+ if ( err == KErrNotFound )
+ {
+ retval = EFalse;
+ }
+ else
+ {
+ User::LeaveIfError( err );
+ HBufC* wlanssid = ApCommons::ReadText16ValueLC
+ ( wlantable, TPtrC(NU_WLAN_SSID) );
+ if ( wlanssid->Compare( KEmpty ) != 0 )
+ {
+ retval = ETrue;
+ }
+ CleanupStack::PopAndDestroy( wlanssid );
+ }
+ CleanupStack::PopAndDestroy( wlantable );
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::HasWlanSSIDL" ) ) );
+ return retval;
+ }
+
+
+// ==== OTHER PRIVATE/protected, NON-EXPORTED FUNCTIONS ====
+
+// ---------------------------------------------------------
+// CApUtils::DoWapBearerTypeL
+// ---------------------------------------------------------
+//
+void CApUtils::DoWapBearerTypeL( TUint32 aUid, TDes& aBearer )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::DoWapBearerTypeL" ) ) );
+
+ CCommsDbTableView* wapt;
+ wapt = iDb->OpenViewMatchingUintLC( TPtrC(WAP_ACCESS_POINT),
+ TPtrC(COMMDB_ID), aUid );
+ User::LeaveIfError( wapt->GotoFirstRecord() );
+ HBufC* wapBearer = ApCommons::ReadText16ValueLC
+ (
+ wapt,
+ TPtrC(WAP_CURRENT_BEARER)
+ );
+ if ( aBearer.MaxLength() < wapBearer->Length() )
+ {
+ User::Leave( KErrDescOverflow );
+ }
+ else
+ {
+ aBearer.SetLength( wapBearer->Length() );
+ aBearer.Format( KFormat, &*wapBearer );
+ }
+ CleanupStack::PopAndDestroy( 2, wapt ); // wapBearer, wapt
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::DoWapBearerTypeL" ) ) );
+ }
+
+
+
+// ---------------------------------------------------------
+// CApUtils::DoBearerTypeL
+// ---------------------------------------------------------
+//
+TApBearerType CApUtils::DoBearerTypeL( TUint32 aUid )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::DoBearerTypeL" ) ) );
+
+ TApBearerType retval = EApBearerTypeAllBearers;
+
+ CCommsDbTableView* wapt;
+ wapt = iDb->OpenViewMatchingUintLC( TPtrC(WAP_ACCESS_POINT),
+ TPtrC(COMMDB_ID),
+ aUid );
+
+ // TRAPped for some record that doesn't have a WAP -table.
+ // If KErrNotFound, then just return EApBearerTypeWLAN
+ TInt wapErr = wapt->GotoFirstRecord();
+ if ( wapErr == KErrNotFound )
+ {
+ CleanupStack::PopAndDestroy( wapt );
+ return EApBearerTypeWLAN;
+ }
+ else
+ {
+ User::LeaveIfError( wapErr );
+ }
+
+ HBufC* wapBearer = ApCommons::ReadText16ValueLC
+ (
+ wapt,
+ TPtrC(WAP_CURRENT_BEARER)
+ );
+
+ CCommsDbTableView* bearert = iDb->OpenViewMatchingUintLC( *wapBearer,
+ TPtrC(WAP_ACCESS_POINT_ID), aUid );
+
+ User::LeaveIfError( bearert->GotoFirstRecord() );
+ // decide which bearer, read bearer spec. data.
+ if ( *wapBearer == TPtrC(WAP_IP_BEARER) )
+ {
+ TUint32 wapIap;
+ ApCommons::ReadUintL( bearert, TPtrC(WAP_IAP), wapIap );
+
+ CCommsDbTableView* iapt = iDb->OpenViewMatchingUintLC( TPtrC(IAP),
+ TPtrC(COMMDB_ID), wapIap );
+
+ User::LeaveIfError( iapt->GotoFirstRecord() );
+ HBufC* aIapServiceType = ApCommons::ReadText16ValueLC
+ (
+ iapt,
+ TPtrC(IAP_SERVICE_TYPE)
+ );
+ if ( ( *aIapServiceType == TPtrC(DIAL_OUT_ISP) ) ||
+ ( *aIapServiceType == TPtrC(DIAL_IN_ISP) ) )
+ {
+ // need to get 'speed' data ( HS or normal CSD )
+ TUint32 wapIsp;
+ ApCommons::ReadUintL( iapt, TPtrC(IAP_SERVICE), wapIsp );
+ CCommsDbTableView* ispt = iDb->OpenViewMatchingUintLC(
+ *aIapServiceType,
+ TPtrC(COMMDB_ID),
+ wapIsp );
+ User::LeaveIfError( ispt->GotoFirstRecord() );
+ TUint32 bear;
+ if ( ApCommons::ReadUintL( ispt, TPtrC(ISP_BEARER_TYPE), bear )
+ == KErrUnknown )
+ {
+ bear = EBearerTypeCSD;
+ }
+ if ( bear == EBearerTypeCSD )
+ {
+ retval = EApBearerTypeCSD;
+ }
+ else
+ {
+ if ( bear == EBearerTypeHSCSD )
+ {
+ retval = EApBearerTypeHSCSD;
+ }
+ else
+ {
+ User::Leave( KErrInvalidBearer );
+ }
+ }
+ CleanupStack::PopAndDestroy( ispt ); // ispt
+ }
+ else
+ {
+ if ( ( *aIapServiceType == TPtrC(OUTGOING_WCDMA) ) ||
+ ( *aIapServiceType == TPtrC(INCOMING_WCDMA) ) )
+ {
+ retval = EApBearerTypeGPRS;
+ }
+ else
+ { // some other bearer, currently it might be VPN or WLAN
+ if ( *aIapServiceType == TPtrC(VPN_SERVICE) )
+ { // Get real VPN bearertype...
+ TUint32 service;
+ ApCommons::ReadUintL( iapt, TPtrC(IAP_SERVICE), service );
+
+ CCommsDbTableView* ispt;
+ ispt = iDb->OpenViewMatchingUintLC( TPtrC(VPN_SERVICE),
+ TPtrC(COMMDB_ID),
+ service );
+ User::LeaveIfError( ispt->GotoFirstRecord() );
+ TUint32 tempint;
+ HBufC* buf = NULL;
+ // get the real iap
+ ApCommons::ReadUintL( ispt,
+ TPtrC(VPN_SERVICE_IAP),
+ tempint );
+
+ // now open the real IAP an get it's bearer...
+ CCommsDbTableView* iapt2 = NULL;
+ iapt2 = iDb->OpenViewMatchingUintLC( TPtrC(IAP),
+ TPtrC(COMMDB_ID),
+ tempint );
+ User::LeaveIfError( iapt2->GotoFirstRecord() );
+
+ buf = ApCommons::ReadText16ValueLC( iapt2,
+ TPtrC(IAP_SERVICE_TYPE) );
+ TUint32 service2;
+ ApCommons::ReadUintL( iapt2, TPtrC(IAP_SERVICE),
+ service2 );
+
+ if ( ( buf->Compare( TPtrC(OUTGOING_WCDMA ) ) == 0 ) ||
+ ( buf->Compare( TPtrC(INCOMING_WCDMA ) ) == 0 ) )
+ {
+ retval = EApBearerTypeGPRS;
+ }
+ else
+ {
+ if ( ( buf->Compare( TPtrC(DIAL_OUT_ISP ) ) == 0 ) ||
+ ( buf->Compare( TPtrC(DIAL_IN_ISP ) ) == 0 ) )
+ {
+ // need to get ISP,
+ CCommsDbTableView* doutt = NULL;
+ doutt = iDb->OpenViewMatchingUintLC(
+ *buf,
+ TPtrC(COMMDB_ID),
+ service2 );
+
+ User::LeaveIfError( doutt ->GotoFirstRecord() );
+ ApCommons::ReadUintL( doutt ,
+ TPtrC(ISP_BEARER_TYPE),
+ tempint );
+ if ( tempint == EBearerTypeCSD )
+ {
+ retval = EApBearerTypeCSD;
+ }
+ else
+ {
+ retval = EApBearerTypeHSCSD;
+ }
+ CleanupStack::PopAndDestroy( doutt ); // doutt
+ }
+ else
+ {
+ // VPN, having a bearer something
+ // else than CSD, HSCSD & GPRS?
+ // check for WLAN
+ if ( iExt->iWlanSupported )
+ {
+ if ( buf->Compare( TPtrC(LAN_SERVICE) ) == 0 )
+ { // LAN or WLAN
+ if ( IsWlanL( service2 ) )
+ {
+ retval = EApBearerTypeWLAN;
+ }
+ else
+ {
+ User::Leave( KErrInvalidBearer );
+ }
+ }
+ else
+ {
+ User::Leave( KErrInvalidBearer );
+ }
+ }
+ else
+ {
+ User::Leave( KErrInvalidBearer );
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy( 3, ispt ); // buf, iapt2, ispt
+ }
+ else
+ { // other, but not VPN, check for WLAN
+ if ( iExt->iWlanSupported )
+ {
+ if ( *aIapServiceType == TPtrC(LAN_SERVICE) )
+ { // check existence...
+ TUint32 service;
+ TUint32 bearer;
+ ApCommons::ReadUintL( iapt, TPtrC(IAP_SERVICE),
+ service );
+ ApCommons::ReadUintL( iapt, TPtrC(IAP_BEARER),
+ bearer );
+
+
+ CCommsDbTableView* ispt;
+ ispt = iDb->OpenViewMatchingUintLC(
+ TPtrC(LAN_SERVICE),
+ TPtrC(COMMDB_ID),
+ service );
+ User::LeaveIfError( ispt->GotoFirstRecord() );
+ // now we know it is either WLAN or some kinda LAN
+ if ( IsWlanL( service ) )
+ {
+ retval = EApBearerTypeWLAN;
+ }
+ else
+ { // other,
+ // check for LANModem first, then for LAN
+ CCommsDbTableView* lanbearer;
+ lanbearer =
+ iDb->OpenViewMatchingUintLC(
+ TPtrC(LAN_BEARER),
+ TPtrC(COMMDB_ID),
+ bearer );
+ User::LeaveIfError(
+ lanbearer->GotoFirstRecord() );
+ // LANMODEM? check commdb_name
+ HBufC* lbuf;
+ lbuf = ApCommons::ReadText16ValueLC( lanbearer,
+ TPtrC(COMMDB_NAME) );
+ // if it is KModemBearerLANModem,
+ // it is LANModem
+ if ( *lbuf == KModemBearerLANModem )
+ {
+ retval = EApBearerTypeLANModem;
+ }
+ else
+ {
+ #ifdef __TEST_LAN_BEARER
+ // LAN?
+ if ( *lbuf == KModemBearerLAN )
+ {
+ retval = EApBearerTypeLAN;
+ }
+ else
+ {
+ // other, but not VPN, or not supported
+ User::Leave( KErrInvalidBearer );
+ }
+ #else
+ // other, but not VPN, or not supported
+ User::Leave( KErrInvalidBearer );
+ #endif // __TEST_LAN_BEARER
+ }
+ CleanupStack::PopAndDestroy( lbuf );
+ CleanupStack::PopAndDestroy( lanbearer );
+ }
+ CleanupStack::PopAndDestroy( ispt );
+ }
+ }
+ else
+ {
+ #ifdef __TEST_LAN_BEARER
+ if ( *aIapServiceType == TPtrC(LAN_SERVICE) )
+ { // check existence...
+ TUint32 service;
+ TUint32 bearer;
+ ApCommons::ReadUintL( iapt, TPtrC(IAP_SERVICE),
+ service );
+ ApCommons::ReadUintL( iapt, TPtrC(IAP_BEARER),
+ bearer );
+
+ CCommsDbTableView* ispt;
+ ispt = iDb->OpenViewMatchingUintLC(
+ TPtrC(LAN_SERVICE),
+ TPtrC(COMMDB_ID),
+ service );
+ User::LeaveIfError( ispt->GotoFirstRecord() );
+ // now we know it is some kinda LAN
+ // check for LANModem first, then for LAN
+ CCommsDbTableView* lanbearer;
+ lanbearer =
+ iDb->OpenViewMatchingUintLC(
+ TPtrC(LAN_BEARER),
+ TPtrC(COMMDB_ID),
+ bearer );
+ User::LeaveIfError(
+ lanbearer->GotoFirstRecord() );
+ // LANMODEM? check commdb_name
+ HBufC* lbuf;
+ lbuf = ApCommons::ReadText16ValueLC( lanbearer,
+ TPtrC(COMMDB_NAME) );
+ // if it is KModemBearerLANModem, it is LANModem
+ if ( *lbuf == KModemBearerLANModem )
+ {
+ retval = EApBearerTypeLANModem;
+ }
+ else
+ {
+ // LAN?
+ if ( *lbuf == KModemBearerLANModem )
+ {
+ retval = EApBearerTypeLAN;
+ }
+ else
+ {
+ // other, but not VPN, or not supported
+ User::Leave( KErrInvalidBearer );
+ }
+ }
+ CleanupStack::PopAndDestroy( lbuf );
+ CleanupStack::PopAndDestroy( lanbearer );
+ CleanupStack::PopAndDestroy( ispt );
+ }
+ else
+ {// other, but not LAN
+ User::Leave( KErrInvalidBearer );
+ }
+ #endif // __TEST_LAN_BEARER
+ }
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy( 2, iapt );// aIapServiceType, iapt
+ }
+ else
+ {
+ User::Leave( KErrInvalidBearer );
+ }
+
+ CleanupStack::PopAndDestroy( bearert ); // bearert
+ CleanupStack::Pop( wapBearer ); // wapBearer,
+ // cannot PopAndDestroy because it has been re-allocated !
+ delete wapBearer;
+ CleanupStack::PopAndDestroy( wapt ); // wapt
+
+ if ( retval == EApBearerTypeAllBearers )
+ {
+ User::Leave( KErrInvalidBearer );
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::DoBearerTypeL" ) ) );
+ return retval;
+ }
+
+
+
+// ---------------------------------------------------------
+// CApUtils::DoISPTypeL
+// ---------------------------------------------------------
+//
+void CApUtils::DoISPTypeL( TUint32 aUid, TCommsDbIspType& aIspType )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::DoISPTypeL" ) ) );
+
+ TCommsDbIspType retval = EIspTypeInternetAndWAP;
+
+ CCommsDbTableView* wapt;
+ wapt = iDb->OpenViewMatchingUintLC( TPtrC(WAP_ACCESS_POINT),
+ TPtrC(COMMDB_ID),
+ aUid );
+
+ User::LeaveIfError( wapt->GotoFirstRecord() );
+ HBufC* wapBearer = ApCommons::ReadText16ValueLC
+ (
+ wapt,
+ TPtrC(WAP_CURRENT_BEARER)
+ );
+
+ if ( *wapBearer == TPtrC(WAP_IP_BEARER) )
+ {
+ CCommsDbTableView* bearert;
+ bearert = iDb->OpenViewMatchingUintLC( TPtrC(*wapBearer),
+ TPtrC(WAP_ACCESS_POINT_ID),
+ aUid );
+
+ User::LeaveIfError( bearert->GotoFirstRecord() );
+ TUint32 aWapIap;
+ ApCommons::ReadUintL( bearert, TPtrC(WAP_IAP), aWapIap );
+ // now we have IAP uid, can go for Service type, ID
+
+ CCommsDbTableView* iapt;
+ iapt = iDb->OpenViewMatchingUintLC( TPtrC(IAP),
+ TPtrC(COMMDB_ID),
+ aWapIap );
+
+ User::LeaveIfError( iapt->GotoFirstRecord() );
+ HBufC* aIapServiceType = ApCommons::ReadText16ValueLC
+ (
+ iapt,
+ TPtrC(IAP_SERVICE_TYPE)
+ );
+ // decide which bearer, read bearer spec. data.
+ TUint32 aIsp;
+ ApCommons::ReadUintL( iapt, TPtrC(IAP_SERVICE), aIsp );
+
+ // No need to be defensive, if *aIapServiceType is invalid,
+ // it shall Leave,
+ // otherwise, we will handle the difference...
+ CCommsDbTableView* ispt = iDb->OpenViewMatchingUintLC(
+ *aIapServiceType,
+ TPtrC(COMMDB_ID), aIsp );
+ User::LeaveIfError( ispt->GotoFirstRecord() );
+ TUint32 sgd;
+ if ( ( *aIapServiceType == TPtrC(DIAL_OUT_ISP) ) ||
+ ( *aIapServiceType == TPtrC(DIAL_IN_ISP) ) )
+ { // get real IspType
+ ApCommons::ReadUintL( ispt, TPtrC(ISP_TYPE), sgd );
+ }
+ else
+ {
+ // OUTGOING_WCDMA/INCOMING_WCDMA
+ // read ISP type
+ ApCommons::ReadUintL( ispt, TPtrC(GPRS_AP_TYPE), sgd );
+ }
+ retval = TCommsDbIspType( sgd );
+ CleanupStack::PopAndDestroy( ispt ); // ispt
+ CleanupStack::Pop( aIapServiceType );// aIapServiceType,
+ // cannot PopAndDestroy because it has been re-allocated !
+ delete aIapServiceType;
+ CleanupStack::PopAndDestroy( 2, bearert ); // iapt, bearert
+ }
+ else
+ {
+ User::Leave( KErrInvalidBearer );
+ }
+
+ CleanupStack::Pop( wapBearer ); // wapBearer,
+ // cannot PopAndDestroy because it has been re-allocated !
+ delete wapBearer;
+ CleanupStack::PopAndDestroy( wapt ); // wapt
+ aIspType = retval;
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::DoISPTypeL" ) ) );
+ }
+
+
+// ---------------------------------------------------------
+// CApUtils::DoNameL
+// ---------------------------------------------------------
+//
+void CApUtils::DoNameL( TUint32 aUid, TDes& aName )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::DoNameL" ) ) );
+
+ CCommsDbTableView* wapt = iDb->OpenViewMatchingUintLC(
+ TPtrC(WAP_ACCESS_POINT),
+ TPtrC(COMMDB_ID), aUid );
+ User::LeaveIfError( wapt->GotoFirstRecord() );
+ HBufC* sgd = ApCommons::ReadText16ValueLC( wapt, TPtrC(COMMDB_NAME) );
+
+ if ( aName.MaxLength() < sgd->Length() )
+ {
+ User::Leave( KErrDescOverflow );
+ }
+ else
+ {
+ aName.SetLength( sgd->Length() );
+ aName.Format( KFormat, &*sgd );
+ }
+ CleanupStack::PopAndDestroy( 2, wapt ); // sgd, wapt
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::DoNameL" ) ) );
+ }
+
+
+// ---------------------------------------------------------
+// CApUtils::DoSetNameL
+// ---------------------------------------------------------
+//
+void CApUtils::DoSetNameL( TDes& aName, TUint32 aUid )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::DoSetNameL" ) ) );
+
+ if ( iExt->iVariant & KApUiEditOnlyVPNs )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ CCommsDbTableView* wapt;
+
+ wapt = iDb->OpenViewMatchingUintLC( TPtrC(WAP_ACCESS_POINT),
+ TPtrC(COMMDB_ID), aUid );
+ User::LeaveIfError( wapt->GotoFirstRecord() );
+ HBufC* aCurrent = ApCommons::ReadText16ValueLC( wapt,
+ TPtrC(COMMDB_NAME) );
+ if ( *aCurrent != aName )
+ {
+ TBool aNameChanged( EFalse );
+ HBufC* namebuf = aName.AllocL();
+ CleanupStack::PushL( namebuf );
+ HBufC* sgd = ApCommons::DoMakeValidNameL
+ (
+ *iDb,
+ aNameChanged,
+ namebuf,
+ aUid,
+ EFalse
+ );
+ if ( aNameChanged )
+ {
+ aName.Copy( *sgd );
+ delete sgd;
+ }
+ CleanupStack::PopAndDestroy( namebuf ); // namebuf
+ User::LeaveIfError( wapt->UpdateRecord() );
+ wapt->WriteTextL( TPtrC(COMMDB_NAME), aName );
+ User::LeaveIfError( wapt->PutRecordChanges() );
+ }
+ CleanupStack::PopAndDestroy( 2, wapt ); // aCurrent,wapt
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::DoSetNameL" ) ) );
+ }
+
+
+// ---------------------------------------------------------
+// CApUtils::DoSetISPTypeL
+// ---------------------------------------------------------
+//
+void CApUtils::DoSetISPTypeL( TUint32 aUid, TCommsDbIspType aIspType )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::DoSetISPTypeL" ) ) );
+
+ if ( iExt->iVariant & KApUiEditOnlyVPNs )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ // first check requested ISP-type validity
+ if ( ( aIspType == EIspTypeInternetOnly ) ||
+ ( aIspType == EIspTypeWAPOnly ) ||
+ ( aIspType == EIspTypeInternetAndWAP ) )
+ {
+ CCommsDbTableView* wapt;
+ wapt = iDb->OpenViewMatchingUintLC( TPtrC(WAP_ACCESS_POINT),
+ TPtrC(COMMDB_ID), aUid );
+ User::LeaveIfError( wapt->GotoFirstRecord() );
+ HBufC* wapBearer = ApCommons::ReadText16ValueLC
+ (
+ wapt,
+ TPtrC(WAP_CURRENT_BEARER)
+ );
+ if ( *wapBearer == TPtrC(WAP_IP_BEARER) )
+ {
+ CCommsDbTableView* bearert;
+ bearert = iDb->OpenViewMatchingUintLC(
+ *wapBearer,
+ TPtrC(WAP_ACCESS_POINT_ID), aUid );
+
+ User::LeaveIfError( bearert->GotoFirstRecord() );
+ TUint32 aWapIap;
+ ApCommons::ReadUintL( bearert, TPtrC(WAP_IAP), aWapIap );
+ // now we have IAP uid, can go for Service type, ID
+
+ CCommsDbTableView* iapt;
+ iapt = iDb->OpenViewMatchingUintLC( TPtrC(IAP),
+ TPtrC(COMMDB_ID),
+ aWapIap );
+ User::LeaveIfError( iapt->GotoFirstRecord() );
+
+ HBufC* aIapServiceType = ApCommons::ReadText16ValueLC
+ (
+ iapt,
+ TPtrC(IAP_SERVICE_TYPE)
+ );
+
+ // get ISP ID
+ TUint32 aIsp;
+ ApCommons::ReadUintL( iapt, TPtrC(IAP_SERVICE), aIsp );
+
+ CCommsDbTableView* ispt;
+ ispt = iDb->OpenViewMatchingUintLC( *aIapServiceType,
+ TPtrC(COMMDB_ID), aIsp );
+ User::LeaveIfError( ispt->GotoFirstRecord() );
+ // now we have it, just write:
+ User::LeaveIfError( ispt->UpdateRecord() );
+ // decide which bearer, write into bearer spec. column.
+ if ( ( *aIapServiceType == TPtrC(DIAL_OUT_ISP) ) ||
+ ( *aIapServiceType == TPtrC(DIAL_IN_ISP) ) )
+ { // write real IspType
+ ispt->WriteUintL( TPtrC(ISP_TYPE), aIspType );
+ }
+ else
+ {
+ // OUTGOING_WCDMA / INCOMING_WCDMA
+ ispt->WriteUintL( TPtrC(GPRS_AP_TYPE), aIspType );
+ }
+ User::LeaveIfError( ispt->PutRecordChanges( EFalse, EFalse ) );
+ // ispt, aIapServiceType, iapt, bearert
+ CleanupStack::PopAndDestroy( 4, bearert );
+ }
+ else
+ {
+ User::Leave( KErrInvalidBearer );
+ }
+ CleanupStack::PopAndDestroy( 2, wapt ); // wapBearer, wapt
+ }
+ else
+ {
+ User::Leave( KErrInvalidIspRequest );
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::DoSetISPTypeL" ) ) );
+ }
+
+
+// ---------------------------------------------------------
+// CApUtils::DoesExistsL
+// ---------------------------------------------------------
+//
+TBool CApUtils::DoesExistsL( TPtrC aTable, TUint32 aUid )
+ {
+ CLOG( ( EUtil, 0, _L( "-> CApUtils::DoesExistsL" ) ) );
+
+ TBool retval( EFalse );
+ TBool ownTransaction = ApCommons::StartPushedTransactionLC( *iDb, ETrue );
+ CCommsDbTableView* table;
+ table = iDb->OpenViewMatchingUintLC( aTable,
+ TPtrC(COMMDB_ID), aUid );
+ TInt res = table->GotoFirstRecord();
+ CleanupStack::PopAndDestroy( table ); // table
+ if ( res == KErrNone )
+ {
+ retval = ETrue;
+ }
+ if ( res != KErrNotFound )
+ {
+ User::LeaveIfError( res );
+ }
+ if ( ownTransaction )
+ {
+ ApCommons::CommitTransaction( *iDb );
+ CleanupStack::Pop(); // RollbackTransactionOnLeave
+ }
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::DoesExistsL" ) ) );
+ return retval;
+ }
+
+
+
+// ---------------------------------------------------------
+// CApUtils::DoIsWlanL
+// ---------------------------------------------------------
+//
+TBool CApUtils::DoIsWlanL( TUint32 aLanCommdbId )
+ {
+ CLOG( ( EUtil, 1, _L( "-> CApUtils::DoIsWlanL" ) ) );
+
+ TBool retval( EFalse );
+
+ CCommsDbTableView* wlantable = NULL;
+
+ // WLAN settings table backlinks to LAN service,
+ // so we query WLAN settings for a record
+ // where WLAN_SERVICE_ID is LAN_SERVICE's COMMDB_ID,
+ // which is aApItem.iIapServiceId...
+ wlantable = iDb->OpenViewMatchingUintLC( TPtrC(WLAN_SERVICE),
+ TPtrC(WLAN_SERVICE_ID),
+ aLanCommdbId );
+
+ TInt err = wlantable->GotoFirstRecord();
+ if ( err == KErrNotFound )
+ {
+ retval = EFalse;
+ }
+ else
+ {
+ User::LeaveIfError( err );
+ retval = ETrue;
+ }
+
+ CleanupStack::PopAndDestroy( wlantable );
+
+ CLOG( ( EUtil, 1, _L( "<- CApUtils::DoIsWlanL" ) ) );
+ return retval;
+ }
+
+// End of File