apengine/apsettingshandlerui/src/ApSettingsModel.cpp
changeset 0 5a93021fdf25
child 8 2e6c4614c58e
equal deleted inserted replaced
-1:000000000000 0:5a93021fdf25
       
     1 /*
       
     2 * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Implementation of CApSettingsModel.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include "APSettingsHandlerUIVariant.hrh"
       
    21 
       
    22 #include <ActiveApDb.h>
       
    23 #include <ApListItemList.h>
       
    24 #include <ApListItem.h>
       
    25 #include <ApSelect.h>
       
    26 #include <ApSetUI.rsg>
       
    27 #include <VpnApEngine.h>
       
    28 #include <hlplch.h>
       
    29 #include <eikenv.h>
       
    30 #include <eikappui.h>
       
    31 #include <StringLoader.h>
       
    32 #include <featmgr.h>
       
    33 
       
    34 #include "ApSettingsHandlerUI.hrh"
       
    35 
       
    36 #include "ApSettingsModel.h"
       
    37 #include <ApSettingsHandlerCommons.h>
       
    38 #include "Apsettingsdeleteoperation.h"
       
    39 
       
    40 #include <sysutil.h>
       
    41 #include <ErrorUI.h>
       
    42 
       
    43 
       
    44 #include "ApNetworks.h"
       
    45 #include "FeatureManagerWrapper.h"
       
    46 
       
    47 #include <WEPSecuritySettingsUI.h>
       
    48 #include <WPASecuritySettingsUI.h>
       
    49 
       
    50 #include <ApAccessPointItem.h>
       
    51 
       
    52 #include "ApSettingsHandlerLogger.h"
       
    53 
       
    54 //#define __TEST_PERFORMANCE
       
    55 
       
    56 // CONSTANTS
       
    57 
       
    58 
       
    59 
       
    60 
       
    61 /**
       
    62 * Estimated number of bytes in FFS for one writing operation. This amount
       
    63 * is checked to be available before each transaction which places write-lock.
       
    64 * Exact size is not known (because what happens in a transaction is unknown).
       
    65 * A typical access point is estimated to be less than ~2000 bytes; 
       
    66 * so assuming the typical operation of adding one access point 
       
    67 * (with database transaction overhead and safety) is estimated 
       
    68 * to be 2000 bytes. This should be a safe guess.
       
    69 */
       
    70 LOCAL_C const TInt KEstimatedFfsUsage = 2000;
       
    71 
       
    72 
       
    73 
       
    74 // ================= MEMBER FUNCTIONS =======================
       
    75 
       
    76 // ---------------------------------------------------------
       
    77 // CApSettingsModel::NewL
       
    78 // ---------------------------------------------------------
       
    79 //
       
    80 CApSettingsModel* CApSettingsModel::NewL( TInt aIspFilter, TInt aBearerFilter,
       
    81                                           TInt aSortType, TInt aReqIpvType,
       
    82                                           TVpnFilterType aVpnFilterType,
       
    83                                           TInt aVariant,
       
    84                                           TBool aIncludeEasyWlan,
       
    85                                           TBool aNoEdit )
       
    86     {
       
    87     APSETUILOGGER_ENTERFN( EModel,"Model::NewL")    
       
    88     CApSettingsModel* db = 
       
    89         new( ELeave ) CApSettingsModel( aIspFilter, aBearerFilter, 
       
    90                                         aSortType, aReqIpvType, aVariant,
       
    91                                         aVpnFilterType, aIncludeEasyWlan,
       
    92                                         aNoEdit );
       
    93     CleanupStack::PushL( db );
       
    94     db->ConstructL( NULL );
       
    95     CleanupStack::Pop(); // db
       
    96     APSETUILOGGER_LEAVEFN( EModel,"Model::NewL")    
       
    97     return db;
       
    98     }
       
    99 
       
   100 
       
   101 
       
   102 // ---------------------------------------------------------
       
   103 // CApSettingsModel::NewL
       
   104 // ---------------------------------------------------------
       
   105 //
       
   106 CApSettingsModel* CApSettingsModel::NewL( CActiveApDb& aDb, TInt aIspFilter,
       
   107                                           TInt aBearerFilter, TInt aSortType,
       
   108                                           TInt aReqIpvType, 
       
   109                                           TVpnFilterType aVpnFilterType,
       
   110                                           TInt aVariant,
       
   111                                           TBool aIncludeEasyWlan,
       
   112                                           TBool aNoEdit )
       
   113     {
       
   114     APSETUILOGGER_ENTERFN( EModel,"Model::NewL2")
       
   115     CApSettingsModel* db = 
       
   116         new( ELeave ) CApSettingsModel( aIspFilter, aBearerFilter, 
       
   117                                         aSortType, aReqIpvType, aVariant,
       
   118                                         aVpnFilterType, aIncludeEasyWlan,
       
   119                                         aNoEdit );
       
   120     CleanupStack::PushL( db );
       
   121     db->ConstructL( &aDb );
       
   122     CleanupStack::Pop(); // db
       
   123     APSETUILOGGER_LEAVEFN( EModel,"Model::NewL2")    
       
   124     return db;
       
   125     }
       
   126 
       
   127 
       
   128 /**
       
   129 * Destructor.
       
   130 */
       
   131 CApSettingsModel::~CApSettingsModel( )
       
   132     {
       
   133     APSETUILOGGER_ENTERFN( EModel,"~Model")
       
   134     delete iFeatureManagerWrapper;
       
   135 
       
   136     delete iApData;
       
   137     delete iUtils;
       
   138     delete iVpnApEngine;
       
   139     if ( iDbOwned )
       
   140         {
       
   141         delete iDb;
       
   142         }
       
   143     if (iop)
       
   144         {
       
   145         delete iop;
       
   146         }
       
   147 
       
   148     delete iWepSecSettings;
       
   149     delete iWepSecSettingsUi;
       
   150 
       
   151     delete iWpaSecSettings;
       
   152     delete iWpaSecSettingsUi;
       
   153     APSETUILOGGER_LEAVEFN( EModel,"~Model")    
       
   154     }
       
   155 
       
   156 
       
   157 /**
       
   158 * Constructor
       
   159 */
       
   160 CApSettingsModel::CApSettingsModel( TInt aIspFilter, TInt aBearerFilter, 
       
   161                                     TInt aSortType, TInt aReqIpvType,
       
   162                                     TInt aVariant,
       
   163                                     TVpnFilterType aVpnFilterType,
       
   164                                     TBool aIncludeEasyWlan,
       
   165                                     TBool aNoEdit )
       
   166 
       
   167     {
       
   168     APSETUILOGGER_ENTERFN( EModel,"Model")
       
   169     
       
   170     iWepUiExitReason = 0;
       
   171     iParams.iIspFilter = aIspFilter;
       
   172     iParams.iBearerFilter = aBearerFilter;
       
   173     iParams.iSortType = aSortType;
       
   174     iReqIpvType = aReqIpvType;
       
   175     iApData = NULL;
       
   176     iDb = NULL;
       
   177     iUtils = NULL;
       
   178     iDbOwned = ETrue;
       
   179     iVpnFilterType = aVpnFilterType;
       
   180     iVariant = aVariant;
       
   181     iIncludeEasyWlan = aIncludeEasyWlan;
       
   182     iNoEdit = aNoEdit;
       
   183     iInRefresh = EFalse;
       
   184     iNeedRefresh = EFalse;
       
   185     APSETUILOGGER_LEAVEFN( EModel,"Model")    
       
   186     }
       
   187 
       
   188 
       
   189 
       
   190 // ---------------------------------------------------------
       
   191 // CApSettingsModel::ConstructL
       
   192 // ---------------------------------------------------------
       
   193 //
       
   194 void CApSettingsModel::ConstructL( CActiveApDb* aDb )
       
   195     {
       
   196     APSETUILOGGER_ENTERFN( EModel,"Model::ConstructL")
       
   197     if ( aDb )
       
   198         {
       
   199         iDbOwned = EFalse;
       
   200         iDb = aDb;
       
   201         }
       
   202     else
       
   203         {
       
   204         iDb = CActiveApDb::NewL( EDatabaseTypeIAP );
       
   205         iDbOwned = ETrue;
       
   206         }
       
   207     iApData = CApDataHandler::NewLC( *iDb->Database() );
       
   208     CleanupStack::Pop( iApData ); // as it is a member
       
   209     iUtils = CApUtils::NewLC( *iDb->Database() );
       
   210     CleanupStack::Pop( iUtils ); //
       
   211     iVpnApEngine = CVpnApEngine::NewLC( iDb->Database() );
       
   212     CleanupStack::Pop( iVpnApEngine ); //
       
   213 
       
   214     iFeatureManagerWrapper = CFeatureManagerWrapper::NewL();
       
   215     iHelpSupported = FeatureManager::FeatureSupported( KFeatureIdHelp );
       
   216     iProtectionSupported = FeatureManager::FeatureSupported( 
       
   217                                             KFeatureIdSettingsProtection );
       
   218     
       
   219     APSETUILOGGER_LEAVEFN( EModel,"Model::ConstructL")    
       
   220     }
       
   221 
       
   222 
       
   223 
       
   224 // ---------------------------------------------------------
       
   225 // CApSettingsModel::Database
       
   226 // ---------------------------------------------------------
       
   227 //
       
   228 CActiveApDb* CApSettingsModel::Database()
       
   229     {
       
   230     APSETUILOGGER_ENTERFN( EModel,"Model::Database<->")
       
   231     return iDb;
       
   232     }
       
   233 
       
   234 
       
   235 
       
   236 
       
   237 // ---------------------------------------------------------
       
   238 // CApSettingsModel::AllListItemDataL
       
   239 // ---------------------------------------------------------
       
   240 //
       
   241 TInt CApSettingsModel::AllListItemDataL( TBool& aFailedLocked, 
       
   242                                          CApListItemList& aList, 
       
   243                                          TInt aIspFilter, TInt aBearerFilter,
       
   244                                          TInt aSortType, TInt aReqIpvType )
       
   245     {
       
   246     APSETUILOGGER_ENTERFN( EModel,"Model::AllListItemDataL<->")
       
   247     return AllListItemDataL( aFailedLocked, aList, aIspFilter, 
       
   248                              aBearerFilter, aSortType, aReqIpvType,
       
   249                              iVpnFilterType, iIncludeEasyWlan );
       
   250     }
       
   251 
       
   252 
       
   253 
       
   254 // ---------------------------------------------------------
       
   255 // CApSettingsModel::AllListItemDataL
       
   256 // ---------------------------------------------------------
       
   257 //
       
   258 TInt CApSettingsModel::AllListItemDataL( 
       
   259                                         TBool& aFailedLocked,
       
   260                                         CApListItemList& aList,
       
   261                                         TInt aIspFilter,
       
   262                                         TInt aBearerFilter,
       
   263                                         TInt aSortType,
       
   264                                         TInt aReqIpvType,
       
   265                                         TVpnFilterType aVpnFilterType,
       
   266                                         TBool aIncludeEasyWlan
       
   267                                         )
       
   268     {
       
   269     APSETUILOGGER_ENTERFN( EModel,"Model::AllListItemDataL2")
       
   270     TInt retval( 0 );
       
   271     if (iInRefresh)
       
   272         {
       
   273         APSETUILOGGER_WRITE( EModel,"AllListItemData overrun->");
       
   274         iNeedRefresh = ETrue;
       
   275         }
       
   276     else
       
   277         {
       
   278         iInRefresh = ETrue;
       
   279         aFailedLocked = EFalse;
       
   280         CApSelect* apselect = CApSelect::NewLC( *iDb->Database(), aIspFilter, 
       
   281                                                 aBearerFilter, aSortType,
       
   282                                                 aReqIpvType,
       
   283                                                 aVpnFilterType,
       
   284                                                 aIncludeEasyWlan );
       
   285         APSETUILOGGER_WRITE( EModel,"ApSelect::NewLC returned");
       
   286         
       
   287         retval = apselect->AllListItemDataL( aList );
       
   288         
       
   289         APSETUILOGGER_WRITE( EModel,"ApSelect::AllListItemDataL returned");
       
   290 
       
   291         CleanupStack::PopAndDestroy( apselect ); // apselect
       
   292         retval = aList.Count();
       
   293     
       
   294         iInRefresh = EFalse;
       
   295         }
       
   296     if (iNeedRefresh && !iInRefresh)
       
   297         {
       
   298         APSETUILOGGER_WRITE( EModel,"add. refresh starts");
       
   299         retval = AllListItemDataL( aFailedLocked, aList, aIspFilter, 
       
   300                                    aBearerFilter, aSortType, aReqIpvType,
       
   301                                    aVpnFilterType, aIncludeEasyWlan );
       
   302         iNeedRefresh = EFalse;
       
   303         APSETUILOGGER_WRITE( EModel,"add. refresh ends");
       
   304         }
       
   305     APSETUILOGGER_LEAVEFN( EModel,"Model::AllListItemDataL2")
       
   306     return retval;
       
   307     }
       
   308 
       
   309 
       
   310 
       
   311 // ---------------------------------------------------------
       
   312 // CApSettingsModel::AllListItemDataL
       
   313 // ---------------------------------------------------------
       
   314 //
       
   315 TInt CApSettingsModel::AllListItemDataL( TBool& aFailedLocked, 
       
   316                                          CApListItemList& aList )
       
   317     {
       
   318     APSETUILOGGER_ENTERFN( EModel,"Model::AllListItemDataL ->")
       
   319     return AllListItemDataL( aFailedLocked, aList,  iParams.iIspFilter, 
       
   320                                                 iParams.iBearerFilter, 
       
   321                                                 iParams.iSortType,
       
   322                                                 iReqIpvType, iVpnFilterType,
       
   323                                                 iIncludeEasyWlan );
       
   324     }
       
   325 
       
   326 
       
   327 
       
   328 // ---------------------------------------------------------
       
   329 // CApSettingsModel::AccessPointDataL
       
   330 // ---------------------------------------------------------
       
   331 //
       
   332 void CApSettingsModel::AccessPointDataL( TUint32 aUid, 
       
   333                                          CApAccessPointItem& aApItem )
       
   334     {
       
   335     APSETUILOGGER_ENTERFN( EModel,"Model::AccessPointDataL")
       
   336     TTransactionResult ownTransaction = StartTransactionLC( /*aWrite*/EFalse,
       
   337                                                /*aShowNote*/ETrue,
       
   338                                                /*aRetry*/ETrue );
       
   339     if ( ownTransaction != EFailedWithLocked )
       
   340         {
       
   341         iApData->AccessPointDataL( aUid, aApItem );    // adds normal ap
       
   342         // Load wlan data, only loads if WLAN ap.
       
   343         TRAPD( err, LoadWlanL( aApItem ) );
       
   344         if ( err != KErrUnknown)
       
   345             {
       
   346             User::LeaveIfError( err );
       
   347             }
       
   348 
       
   349         if ( ownTransaction == EOwnTransaction )
       
   350             {
       
   351             TInt err = CommitTransaction();
       
   352             User::LeaveIfError( err );
       
   353             CleanupStack::Pop(); // RollbackTransactionOnLeave
       
   354             }
       
   355         }
       
   356     
       
   357     APSETUILOGGER_LEAVEFN( EModel,"Model::AccessPointDataL")    
       
   358     }
       
   359 
       
   360 
       
   361 
       
   362 // ---------------------------------------------------------
       
   363 // CApSettingsModel::UpdateAccessPointDataL
       
   364 // ---------------------------------------------------------
       
   365 //
       
   366 TBool CApSettingsModel::UpdateAccessPointDataL( CApAccessPointItem& aApItem )
       
   367     {
       
   368     APSETUILOGGER_ENTERFN( EModel,"Model::UpdateAccessPointDataL")
       
   369     TBool nameChanged( EFalse );
       
   370 // It should be aWrite ETrue, but there is an error in Symbian stuff
       
   371 // causing a memory leak
       
   372 //    TTransactionResult ownTransaction = StartTransactionLC( /*aWrite*/ETrue,
       
   373     TTransactionResult ownTransaction = StartTransactionLC( /*aWrite*/EFalse,
       
   374                                                /*aShowNote*/ETrue,
       
   375                                                /*aRetry*/ETrue );
       
   376     if ( ownTransaction != EFailedWithLocked )
       
   377         {
       
   378         TBool isnew(EFalse);
       
   379         if ( aApItem.BearerTypeL() == EApBearerTypeWLAN )
       
   380             { // it is WLAN...
       
   381             // check that there were no bearer-change, because if orig. bearer
       
   382             // was NOT wlan, then we shouls consider it as a new record!!!
       
   383             if ( iUtils->BearerTypeL( aApItem.WapUid() ) != EApBearerTypeWLAN )
       
   384                 {
       
   385                 isnew = ETrue;
       
   386                 }
       
   387             }
       
   388         iApData->UpdateAccessPointDataL( aApItem, nameChanged );
       
   389         // write wlan data, only writes if WLAN ap.
       
   390         WriteWlanL( aApItem, isnew );
       
   391 
       
   392 #ifdef __WINS__
       
   393         ShowNoteL( R_APUI_VIEW_SAVED );
       
   394 #endif
       
   395         if ( ownTransaction == EOwnTransaction )
       
   396             {
       
   397             TInt err = CommitTransaction();
       
   398             User::LeaveIfError( err );
       
   399             CleanupStack::Pop(); // RollbackTransactionOnLeave
       
   400             }
       
   401         }
       
   402 
       
   403     APSETUILOGGER_LEAVEFN( EModel,"Model::UpdateAccessPointDataL")
       
   404     return nameChanged;
       
   405     }
       
   406 
       
   407 
       
   408 
       
   409 
       
   410 // ---------------------------------------------------------
       
   411 // CApSettingsModel::DataHandler
       
   412 // ---------------------------------------------------------
       
   413 //
       
   414 CApDataHandler* CApSettingsModel::DataHandler()
       
   415     {
       
   416     APSETUILOGGER_ENTERFN( EModel,"Model::DataHandler <->")
       
   417     return iApData;
       
   418     }
       
   419 
       
   420 
       
   421 
       
   422 // ---------------------------------------------------------
       
   423 // CApSettingsModel::ApUtils
       
   424 // ---------------------------------------------------------
       
   425 //
       
   426 CApUtils* CApSettingsModel::ApUtils()
       
   427     {
       
   428     APSETUILOGGER_ENTERFN( EModel,"Model::ApUtils <->")
       
   429     return iUtils;
       
   430     }
       
   431 
       
   432 
       
   433 // ---------------------------------------------------------
       
   434 // CApSettingsModel::SetParams
       
   435 // ---------------------------------------------------------
       
   436 //
       
   437 void CApSettingsModel::SetParams( TApSettingsParams aParams )
       
   438     {
       
   439     APSETUILOGGER_ENTERFN( EModel,"Model::SetParams <->")
       
   440     iParams = aParams;
       
   441     }
       
   442 
       
   443 
       
   444 // ---------------------------------------------------------
       
   445 // CApSettingsModel::Params
       
   446 // ---------------------------------------------------------
       
   447 //
       
   448 TApSettingsParams CApSettingsModel::Params()
       
   449     {
       
   450     APSETUILOGGER_ENTERFN( EModel,"Model::Params <->")
       
   451     return iParams;
       
   452     }
       
   453 
       
   454 
       
   455 
       
   456 // ---------------------------------------------------------
       
   457 // CApSettingsModel::VpnEngine
       
   458 // ---------------------------------------------------------
       
   459 //
       
   460 CVpnApEngine* CApSettingsModel::VpnEngine()
       
   461     {
       
   462     APSETUILOGGER_ENTERFN( EModel,"Model::VpnEngine <->")
       
   463     return iVpnApEngine;
       
   464     }
       
   465 
       
   466 
       
   467 // ---------------------------------------------------------
       
   468 // CApSettingsModel::LaunchHelpL
       
   469 // ---------------------------------------------------------
       
   470 //
       
   471 void CApSettingsModel::LaunchHelpL()
       
   472     {
       
   473 #ifdef __SERIES60_HELP
       
   474     APSETUILOGGER_ENTERFN( EModel,"Model::LaunchHelpL")
       
   475     HlpLauncher::LaunchHelpApplicationL(
       
   476                         EikEnv()->WsSession(),
       
   477                         EikEnv()->EikAppUi()->AppHelpContextL() );
       
   478     APSETUILOGGER_LEAVEFN( EModel,"Model::LaunchHelpL")    
       
   479 #endif // __SERIES60_HELP
       
   480     }
       
   481 
       
   482 
       
   483 // ---------------------------------------------------------
       
   484 // CApSettingsModel::RemoveApL
       
   485 // ---------------------------------------------------------
       
   486 //
       
   487 void CApSettingsModel::RemoveApL( TUint32 aUid )
       
   488     {
       
   489     APSETUILOGGER_ENTERFN( EModel,"Model::RemoveApL")
       
   490 // DELETE OPERATION STARTS HERE
       
   491     TBuf<KModifiableTextLength> sgd;
       
   492     iUtils->NameL( aUid, sgd );
       
   493     HBufC* temp = StringLoader::LoadLC( R_APUI_VIEW_DELETING_AP, sgd );    
       
   494 
       
   495     APSETUILOGGER_WRITE( EModel,"Creating thread");
       
   496     
       
   497     if (!iop)
       
   498         {
       
   499         iop = CApSettingsDeleteOperation::NewL(
       
   500                         KApWaitNote, R_APUI_VIEW_WAIT_NOTE,
       
   501                         aUid, *temp
       
   502                         );
       
   503         APSETUILOGGER_WRITE( EModel,"Thread created");
       
   504         }
       
   505     else
       
   506         {
       
   507         if (iop->State() != CApSettingsDeleteOperation::EProcOffDialogOff )
       
   508             {
       
   509             ShowNoteL( R_APUI_VIEW_TEXT_CANNOT_ACCESS_DB );
       
   510             User::Leave( KErrInUse );
       
   511             }
       
   512         else
       
   513             {
       
   514             iop->SetUid( aUid );
       
   515             iop->SetNoteTextL( *temp );
       
   516             }
       
   517         }
       
   518     
       
   519     TRAPD(err, iop->StartL() );
       
   520     
       
   521     APSETUILOGGER_WRITE_FORMAT( EModel, "Thread StartL returned, code:%d", err);
       
   522     
       
   523     if ( err != KErrNone )
       
   524         { 
       
   525         User::Leave( err );
       
   526         }
       
   527     
       
   528     CleanupStack::PopAndDestroy( temp );
       
   529     APSETUILOGGER_LEAVEFN( EModel,"Model::RemoveApL")    
       
   530 // DELETE OPERATION ENDS HERE
       
   531 
       
   532     }
       
   533 
       
   534 
       
   535 
       
   536 
       
   537 // ---------------------------------------------------------
       
   538 // CApSettingsModel::StarTransactionLC
       
   539 // ---------------------------------------------------------
       
   540 //
       
   541 TTransactionResult CApSettingsModel::StartTransactionLC(
       
   542                         TBool aWrite, TBool aShowNote,
       
   543                         TBool aRetry, TBool aLFFSChecking /* ETrue */ )
       
   544     {
       
   545     APSETUILOGGER_ENTERFN( EModel,"Model::StartTransactionLC")
       
   546     TTransactionResult retval( EOwnTransaction );
       
   547 
       
   548     // Before attempting db modification, check if we would go below Critical
       
   549     // Level in FFS (disk). The value used for checking is an estimate.
       
   550     // Reading the db also allocates some bytes (transaction log), but
       
   551     // this is not estimated and not checked, because it should be small
       
   552     // enough, and would slow down operation. (Typical use is to read a lot
       
   553     // and write much less.)
       
   554     if (    aLFFSChecking &&
       
   555             aWrite &&
       
   556             FFSSpaceBelowCriticalLevelL
       
   557                 ( /*aShowErrorNote=*/EFalse, KEstimatedFfsUsage )
       
   558        )
       
   559         {
       
   560         User::Leave( KErrDiskFull );
       
   561         }
       
   562 
       
   563     CCommsDatabase* aDb = iDb->Database();
       
   564     TInt err( KErrNone );
       
   565     if ( !aDb->InTransaction() )
       
   566         {
       
   567         TInt retriesLeft( aRetry ? KRetryCount : 1 );
       
   568         err = aDb->BeginTransaction();
       
   569         while ( ( ( err == KErrLocked ) || ( err == KErrAccessDenied ) )
       
   570                 && --retriesLeft )
       
   571             {
       
   572             User::After( KRetryWait );
       
   573             err = aDb->BeginTransaction();
       
   574             if (aWrite )
       
   575                 {
       
   576                 TRAP(err, GetWriteLockL() );
       
   577                 }
       
   578             }
       
   579         if ( err && aShowNote )
       
   580             {
       
   581             ShowNoteL( R_APUI_VIEW_TEXT_CANNOT_ACCESS_DB );
       
   582             }
       
   583         switch ( err )
       
   584             {
       
   585             case KErrNone:
       
   586                 {
       
   587                 CleanupStack::PushL( 
       
   588                     TCleanupItem( RollbackTransactionOnLeave, aDb ) );
       
   589                 break;
       
   590                 }
       
   591             case KErrLocked:
       
   592             case KErrAccessDenied:
       
   593                 {
       
   594                 retval = EFailedWithLocked;
       
   595                 break;
       
   596                 }
       
   597             default:
       
   598                 {
       
   599                 User::LeaveIfError( err );
       
   600                 break;
       
   601                 }
       
   602             }
       
   603         }
       
   604     else
       
   605         {
       
   606         if ( aWrite )
       
   607             {
       
   608             TRAP(err, GetWriteLockL() );
       
   609             }
       
   610         if ( err && aShowNote )
       
   611             {
       
   612             ShowNoteL( R_APUI_VIEW_TEXT_CANNOT_ACCESS_DB );
       
   613             }
       
   614         if ( err != KErrLocked )
       
   615             {
       
   616             User::LeaveIfError( err );
       
   617             }
       
   618         if ( err )
       
   619             {
       
   620             retval = EFailedWithLocked;
       
   621             }
       
   622         else
       
   623             {
       
   624             retval = EUsingAlreadyStarted;
       
   625             }
       
   626         }
       
   627     APSETUILOGGER_LEAVEFN( EModel,"Model::StartTransactionLC")    
       
   628     return retval;
       
   629     }
       
   630 
       
   631 
       
   632 // ---------------------------------------------------------
       
   633 // CApSettingsModel::GetWriteLockL
       
   634 // ---------------------------------------------------------
       
   635 //
       
   636 void CApSettingsModel::GetWriteLockL( )
       
   637     {
       
   638     APSETUILOGGER_ENTERFN( EModel,"Model::GetWriteLockL")
       
   639     CCommsDbTableView* v = 
       
   640         iDb->Database()->OpenTableLC( TPtrC(WAP_ACCESS_POINT ) );
       
   641     TUint32 dummyUid( KApNoneUID );
       
   642     TInt err = v->InsertRecord( dummyUid );
       
   643     User::LeaveIfError( err );
       
   644     v->CancelRecordChanges();
       
   645     User::LeaveIfError( err );
       
   646     CleanupStack::PopAndDestroy( v );
       
   647     APSETUILOGGER_LEAVEFN( EModel,"Model::GetWriteLockL")    
       
   648     }
       
   649 
       
   650 // ---------------------------------------------------------
       
   651 // CApSettingsModel::RollbackTransactionOnLeave
       
   652 // ---------------------------------------------------------
       
   653 //
       
   654 void CApSettingsModel::RollbackTransactionOnLeave( TAny* aDb )
       
   655     {
       
   656     APSETUILOGGER_ENTERFN( EModel,"Model::RollbackTransactionOnLeave")
       
   657     CCommsDatabase* db = STATIC_CAST( CCommsDatabase*, aDb );
       
   658     db->RollbackTransaction();
       
   659     APSETUILOGGER_LEAVEFN( EModel,"Model::RollbackTransactionOnLeave")    
       
   660     }
       
   661 
       
   662 
       
   663 
       
   664 // ---------------------------------------------------------
       
   665 // CApSettingsModel::CommitTransaction
       
   666 // ---------------------------------------------------------
       
   667 //
       
   668 TInt CApSettingsModel::CommitTransaction()
       
   669     {
       
   670     APSETUILOGGER_ENTERFN( EModel,"Model::CommitTransaction")
       
   671     TInt err = iDb->Database()->CommitTransaction();
       
   672     APSETUILOGGER_LEAVEFN( EModel,"Model::CommitTransaction")    
       
   673     return err;
       
   674     }
       
   675 
       
   676 
       
   677 
       
   678 // ---------------------------------------------------------
       
   679 // CApSettingsModel::FFSSpaceBelowCriticalLevelL
       
   680 // ---------------------------------------------------------
       
   681 //
       
   682 TBool CApSettingsModel::FFSSpaceBelowCriticalLevelL
       
   683         ( TBool aShowErrorNote, TInt aBytesToWrite /*=0*/ )
       
   684     {
       
   685     APSETUILOGGER_ENTERFN( EModel,"Model::FFSSpaceBelowCriticalLevelL")
       
   686     TBool ret( EFalse );
       
   687     if ( SysUtil::FFSSpaceBelowCriticalLevelL
       
   688                 ( &( EikEnv()->FsSession()), aBytesToWrite ) )
       
   689         {
       
   690         ret = ETrue;
       
   691         if ( aShowErrorNote )
       
   692             {
       
   693             CErrorUI* errorUi = CErrorUI::NewLC( *EikEnv() );
       
   694             errorUi->ShowGlobalErrorNoteL( KErrDiskFull );
       
   695             CleanupStack::PopAndDestroy();  // errorUi
       
   696             }
       
   697         }
       
   698     APSETUILOGGER_LEAVEFN( EModel,"Model::FFSSpaceBelowCriticalLevelL")    
       
   699     return ret;
       
   700     }
       
   701 
       
   702 
       
   703 
       
   704 
       
   705 // ---------------------------------------------------------
       
   706 // CApSettingsModel::NetWorkListDataL
       
   707 // ---------------------------------------------------------
       
   708 //
       
   709 TInt CApSettingsModel::NetWorkListDataL( TBool& aFailedLocked, 
       
   710                                          CApNetworkItemList& aList )
       
   711     {
       
   712     APSETUILOGGER_ENTERFN( EModel,"Model::NetWorkListDataL")
       
   713     TInt retval( KErrNone );
       
   714     aFailedLocked = EFalse;
       
   715     TTransactionResult ownTransaction = StartTransactionLC( /*aWrite*/EFalse,
       
   716                                                /*aShowNote*/EFalse,
       
   717                                                /*aRetry*/ETrue );
       
   718     if ( ownTransaction != EFailedWithLocked )
       
   719         {
       
   720         CApNetworks* apnet = CApNetworks::NewLC( *iDb->Database() );
       
   721         retval = apnet->AllListItemDataL( aList );
       
   722         CleanupStack::PopAndDestroy( apnet ); // apSelect
       
   723         if ( ownTransaction == EOwnTransaction )
       
   724             {
       
   725             TInt err = CommitTransaction();
       
   726             User::LeaveIfError( err );
       
   727             CleanupStack::Pop(); // RollbackTransactionOnLeave
       
   728             }
       
   729         }
       
   730     else
       
   731         {
       
   732         aFailedLocked = ETrue;
       
   733         }
       
   734     APSETUILOGGER_LEAVEFN( EModel,"Model::NetWorkListDataL")    
       
   735     return retval;
       
   736     }
       
   737 
       
   738 
       
   739 
       
   740 // ---------------------------------------------------------
       
   741 // CApSettingsModel::RequestedIPvType
       
   742 // ---------------------------------------------------------
       
   743 //
       
   744 TInt CApSettingsModel::RequestedIPvType( )
       
   745     {
       
   746     APSETUILOGGER_ENTERFN( EModel,"Model::RequestedIPvType<->")
       
   747     return iReqIpvType;
       
   748     }
       
   749 
       
   750 
       
   751 
       
   752 
       
   753 // ---------------------------------------------------------
       
   754 // CApSettingsModel::Need2DeleteSelect
       
   755 // called when menu needs to be displayed
       
   756 // ---------------------------------------------------------
       
   757 //
       
   758 TBool CApSettingsModel::Need2DeleteSelect(  TInt aResourceId, TInt aCount )
       
   759     {
       
   760     APSETUILOGGER_ENTERFN( EModel,"Model::Need2DeleteSelect")
       
   761     TBool retval( EFalse );
       
   762 
       
   763     if ( ( aCount == 0 )
       
   764          &&
       
   765          ( aResourceId == R_APSETTINGSUI_MENU_SELECT_NORMAL ) )
       
   766         {
       
   767         retval = ETrue;
       
   768         }
       
   769     APSETUILOGGER_LEAVEFN( EModel,"Model::Need2DeleteSelect")    
       
   770     return retval;
       
   771     }
       
   772 
       
   773 
       
   774 // ---------------------------------------------------------
       
   775 // CApSettingsModel::Need2DeleteOpen
       
   776 // called when menu needs to be displayed
       
   777 // ---------------------------------------------------------
       
   778 //
       
   779 TBool CApSettingsModel::Need2DeleteOpen(  TInt aResourceId, TInt aCount, 
       
   780                                           TUint32 aUid, TBool aNeedsNone )
       
   781     {
       
   782     APSETUILOGGER_ENTERFN( EModel,"Model::Need2DeleteOpen")
       
   783     TBool retval( EFalse );
       
   784     TBool noItem( EFalse );
       
   785     TBool onlyItemIsNone( EFalse );
       
   786     TBool editOnlyVPN( EFalse );
       
   787     TBool noEdit( EFalse );
       
   788 
       
   789     noItem = ( aCount == 0) && 
       
   790             ( ( aResourceId == R_APSETTINGSUI_MENU_NORMAL ) ||
       
   791               ( aResourceId == R_APSETTINGSUI_MENU_SELECT_NORMAL ) );
       
   792     
       
   793     onlyItemIsNone = ( aNeedsNone ) && ( aUid == KApNoneUID ) 
       
   794          && ( ( aResourceId == R_APSETTINGSUI_MENU_SELECT_ONLY ) ||
       
   795               ( aResourceId == R_APSETTINGSUI_MENU_SELECT_NORMAL ) ||
       
   796               ( aResourceId == R_APSETTINGSUI_MENU_NORMAL ) );
       
   797 
       
   798     editOnlyVPN = ( iVariant & KApUiEditOnlyVPNs ) 
       
   799         && ( ( aResourceId == R_APSETTINGSUI_SELECT_ONLY_MENUBAR ) ||
       
   800              ( aResourceId == R_APSETTINGSUI_SELECT_NORMAL_MENUBAR ) ||
       
   801              ( aResourceId == R_APSETTINGSUI_MENU_NORMAL ) );
       
   802     noEdit = ( iNoEdit )
       
   803         && ( ( aResourceId == R_APSETTINGSUI_MENU_SELECT_NORMAL ) ||
       
   804              ( aResourceId == R_APSETTINGSUI_MENU_NORMAL ) );
       
   805 
       
   806     retval = noItem || onlyItemIsNone || editOnlyVPN || noEdit;
       
   807     
       
   808     APSETUILOGGER_LEAVEFN( EModel,"Model::Need2DeleteOpen")    
       
   809     return retval;
       
   810     }
       
   811 
       
   812 
       
   813 // ---------------------------------------------------------
       
   814 // CApSettingsModel::Need2DeleteDeleteL
       
   815 // called when menu needs to be displayed
       
   816 // ---------------------------------------------------------
       
   817 //
       
   818 TBool CApSettingsModel::Need2DeleteDeleteL(  TInt aResourceId, TInt aCount, 
       
   819                                              TUint32 aUid, TBool aNeedsNone )
       
   820     {
       
   821     APSETUILOGGER_ENTERFN( EModel,"Model::Need2DeleteDeleteL")
       
   822     TBool retval( EFalse );
       
   823     TBool noItem( EFalse );
       
   824     TBool onlyItemIsNone( EFalse );    
       
   825     TBool editOnlyVPN( EFalse );
       
   826     TBool noEdit( EFalse );
       
   827 
       
   828     noItem = ( aCount == 0) && 
       
   829             ( ( aResourceId == R_APSETTINGSUI_MENU_NORMAL ) ||
       
   830               ( aResourceId == R_APSETTINGSUI_MENU_SELECT_NORMAL ) );
       
   831 
       
   832     onlyItemIsNone = ( aNeedsNone ) && ( aUid == KApNoneUID ) 
       
   833         && ( ( aResourceId == R_APSETTINGSUI_MENU_SELECT_ONLY ) ||
       
   834              ( aResourceId == R_APSETTINGSUI_MENU_SELECT_NORMAL ) ||
       
   835              ( aResourceId == R_APSETTINGSUI_MENU_NORMAL ) );
       
   836 
       
   837     editOnlyVPN = ( iVariant & KApUiEditOnlyVPNs )
       
   838         && ( ( aResourceId == R_APSETTINGSUI_SELECT_ONLY_MENUBAR ) ||
       
   839              ( aResourceId == R_APSETTINGSUI_SELECT_NORMAL_MENUBAR ) ||
       
   840              ( aResourceId == R_APSETTINGSUI_MENU_NORMAL ) );
       
   841              
       
   842     noEdit = ( iNoEdit )
       
   843         && ( ( aResourceId == R_APSETTINGSUI_MENU_SELECT_NORMAL ) ||
       
   844              ( aResourceId == R_APSETTINGSUI_MENU_NORMAL ) );
       
   845 
       
   846     if ( editOnlyVPN )
       
   847         {
       
   848         // check if current item is VPN...        
       
   849         if ( ( aCount != 0 ) && ( aUid != KApNoneUID ) )
       
   850             {
       
   851             retval = ! iVpnApEngine->IsVpnApL( aUid );                
       
   852             }
       
   853         else
       
   854             {
       
   855             retval = ETrue;
       
   856             }
       
   857         }
       
   858     else
       
   859         {
       
   860         if ( onlyItemIsNone || noItem )
       
   861             {
       
   862             retval = ETrue;
       
   863             }
       
   864         }
       
   865     if ( !retval )
       
   866         {
       
   867         if (noEdit)
       
   868             {
       
   869             retval = ETrue;
       
   870             }
       
   871         }        
       
   872     APSETUILOGGER_LEAVEFN( EModel,"Model::Need2DeleteDeleteL")    
       
   873     return retval;
       
   874     }
       
   875 
       
   876 
       
   877 // ---------------------------------------------------------
       
   878 // CApSettingsModel::Need2DeleteNewUseExisting
       
   879 // called when menu needs to be displayed
       
   880 // ---------------------------------------------------------
       
   881 //
       
   882 TBool CApSettingsModel::Need2DeleteNewUseExisting(  
       
   883                                             TInt aResourceId, 
       
   884                                             TInt aCount )
       
   885     {
       
   886     APSETUILOGGER_ENTERFN( EModel,"Model::Need2DeleteNewUseExisting")
       
   887     TBool noEdit( EFalse );
       
   888     TBool retval( EFalse );
       
   889     
       
   890     if ( iProtectionSupported )
       
   891         {
       
   892         if (  aResourceId == R_APSETTINGSUI_MENU_SELECT_NORMAL  ||
       
   893                 aResourceId == R_APSETTINGSUI_MENU_NORMAL )
       
   894             {
       
   895             TRAP_IGNORE( retval = CApProtHandler::IsTableProtectedL( iDb->Database() ));
       
   896             }
       
   897         }
       
   898 
       
   899     if ( aCount == 0)
       
   900         {
       
   901         if ( ( aResourceId == R_APSETTINGSUI_MENU_NORMAL ) ||
       
   902             ( aResourceId == R_APSETTINGSUI_MENU_SELECT_NORMAL ) )
       
   903             {
       
   904             retval = ETrue;
       
   905             }
       
   906         }
       
   907 
       
   908     noEdit = ( iNoEdit )
       
   909         && ( ( aResourceId == R_APSETTINGSUI_MENU_SELECT_NORMAL ) ||
       
   910              ( aResourceId == R_APSETTINGSUI_MENU_NORMAL ) );
       
   911 
       
   912     if (noEdit)
       
   913         {
       
   914         retval = ETrue;
       
   915         }
       
   916     APSETUILOGGER_LEAVEFN( EModel,"Model::Need2DeleteNewUseExisting")    
       
   917     return retval;
       
   918     }
       
   919 
       
   920 
       
   921 // ---------------------------------------------------------
       
   922 // CApSettingsModel::Need2DeleteNewL
       
   923 // called when menu needs to be displayed
       
   924 // ---------------------------------------------------------
       
   925 //
       
   926 TBool CApSettingsModel::Need2DeleteNewL(  TInt aResourceId )
       
   927     {
       
   928     APSETUILOGGER_ENTERFN( EModel,"Model::Need2DeleteNewL")
       
   929     TBool noEdit( EFalse );
       
   930     TBool retval( EFalse );
       
   931 
       
   932     if ( iProtectionSupported )
       
   933         {
       
   934         if (  aResourceId == R_APSETTINGSUI_MENU_SELECT_NORMAL  ||
       
   935                 aResourceId == R_APSETTINGSUI_MENU_NORMAL )
       
   936             {      
       
   937             if ( CApProtHandler::IsTableProtectedL( iDb->Database() ))
       
   938                 {
       
   939                 retval = ETrue;
       
   940                 }
       
   941             }
       
   942         }
       
   943 
       
   944     if ( iVariant & KApUiEditOnlyVPNs )
       
   945         {
       
   946         if ( ( aResourceId == R_APSETTINGSUI_MENU_SELECT_NORMAL ) ||
       
   947              ( aResourceId == R_APSETTINGSUI_MENU_NORMAL ) 
       
   948            )
       
   949             {
       
   950             retval = ETrue;
       
   951             }
       
   952         }
       
   953 
       
   954     noEdit = ( iNoEdit )
       
   955         && ( ( aResourceId == R_APSETTINGSUI_MENU_SELECT_NORMAL ) ||
       
   956              ( aResourceId == R_APSETTINGSUI_MENU_NORMAL ) );
       
   957 
       
   958     if (noEdit)
       
   959         {
       
   960         retval = ETrue;
       
   961         }
       
   962     APSETUILOGGER_LEAVEFN( EModel,"Model::Need2DeleteNewL")    
       
   963     return retval;
       
   964     }
       
   965 
       
   966 
       
   967 
       
   968 // ---------------------------------------------------------
       
   969 // CApSettingsModel::Need2DeleteHelp
       
   970 // called when menu needs to be displayed
       
   971 // ---------------------------------------------------------
       
   972 //
       
   973 TBool CApSettingsModel::Need2DeleteHelp(  TInt aResourceId )
       
   974     {
       
   975     APSETUILOGGER_ENTERFN( EModel,"Model::Need2DeleteHelp")
       
   976     TBool retval( EFalse );
       
   977 
       
   978 	if ( !iHelpSupported )
       
   979 		{
       
   980 	    if ( aResourceId == R_APSETTINGSUI_MENU_NORMAL )
       
   981 	        {
       
   982 	        retval = ETrue;
       
   983 	        }
       
   984 		}
       
   985     
       
   986     APSETUILOGGER_LEAVEFN( EModel,"Model::Need2DeleteHelp")    
       
   987     return retval;
       
   988     }
       
   989 
       
   990 
       
   991 
       
   992 
       
   993 
       
   994 
       
   995 
       
   996 
       
   997 
       
   998 // ---------------------------------------------------------
       
   999 // CApSettingsModel::GetLinkedVpnAccessPointLC
       
  1000 // ---------------------------------------------------------
       
  1001 //
       
  1002 HBufC* CApSettingsModel::GetLinkedVpnAccessPointLC( TUint32 aUid )
       
  1003     {
       
  1004     APSETUILOGGER_ENTERFN( EModel,"Model::GetLinkedVpnAccessPointLC")
       
  1005     HBufC* retval = HBufC::NewLC( KCommsDbSvrMaxFieldLength );    
       
  1006     
       
  1007     // Get iap for the above WAP, aUid
       
  1008     TUint32 homeiap = iUtils->IapIdFromWapIdL( aUid );
       
  1009 
       
  1010     // now get ALL VPN_SERVICE entry ID where HOME_IAP == iap
       
  1011     // Select * from VPN_SERVICE where HOME_IAP == homeiap
       
  1012     CCommsDbTableView* t;
       
  1013     t = iDb->Database()->OpenViewMatchingUintLC( TPtrC(VPN_SERVICE), 
       
  1014                                                  TPtrC(VPN_SERVICE_IAP), 
       
  1015                                                  homeiap );
       
  1016     TInt err = t->GotoFirstRecord();
       
  1017     // if not found, no such, simply exit, no change in passed array
       
  1018     if ( err != KErrNotFound )
       
  1019         {
       
  1020         User::LeaveIfError( err );
       
  1021         TPtr sgd = retval->Des();
       
  1022         t->ReadTextL( TPtrC(COMMDB_NAME), sgd );
       
  1023         CleanupStack::PopAndDestroy( t );//t
       
  1024         }
       
  1025     else
       
  1026         {
       
  1027         CleanupStack::PopAndDestroy( 2, retval );// retval, t
       
  1028         retval = NULL;
       
  1029         }
       
  1030     
       
  1031     APSETUILOGGER_LEAVEFN( EModel,"Model::GetLinkedVpnAccessPointLC")    
       
  1032     return retval;
       
  1033     }
       
  1034 
       
  1035 
       
  1036 
       
  1037 // ---------------------------------------------------------
       
  1038 // CApSettingsModel::EikEnv
       
  1039 // ---------------------------------------------------------
       
  1040 //
       
  1041 CEikonEnv* CApSettingsModel::EikEnv()
       
  1042     {
       
  1043     APSETUILOGGER_ENTERFN( EModel,"Model::EikEnv<->")
       
  1044     if ( !iEikEnv )
       
  1045         {
       
  1046         iEikEnv = CEikonEnv::Static();
       
  1047         }
       
  1048     return iEikEnv;
       
  1049     }
       
  1050 
       
  1051 
       
  1052 
       
  1053 // ---------------------------------------------------------
       
  1054 // CApSettingsModel::CreateFromDataL
       
  1055 // ---------------------------------------------------------
       
  1056 //
       
  1057 TUint32 CApSettingsModel::CreateFromDataL( CApAccessPointItem& aApItem )
       
  1058     {
       
  1059     APSETUILOGGER_ENTERFN( EModel,"Model::CreateFromDataL")
       
  1060     TTransactionResult ownTransaction = StartTransactionLC( /*aWrite*/EFalse,
       
  1061                                                /*aShowNote*/ETrue,
       
  1062                                                /*aRetry*/ETrue );
       
  1063     if ( ownTransaction != EFailedWithLocked )
       
  1064         {
       
  1065         iApData->CreateFromDataL( aApItem );    // adds normal ap
       
  1066         // write wlan data, only writes if WLAN ap.
       
  1067         WriteWlanL( aApItem, ETrue );
       
  1068 
       
  1069         if ( ownTransaction == EOwnTransaction )
       
  1070             {
       
  1071             TInt err = CommitTransaction();
       
  1072             User::LeaveIfError( err );
       
  1073             CleanupStack::Pop(); // RollbackTransactionOnLeave
       
  1074             }
       
  1075         }
       
  1076 
       
  1077     APSETUILOGGER_LEAVEFN( EModel,"Model::CreateFromDataL")    
       
  1078     return aApItem.WapUid();
       
  1079     }
       
  1080 
       
  1081 
       
  1082 
       
  1083 
       
  1084 
       
  1085 // ---------------------------------------------------------
       
  1086 // CApSettingsModel::ChangeWepSettingsL
       
  1087 // ---------------------------------------------------------
       
  1088 //
       
  1089 TInt CApSettingsModel::ChangeWepSettingsL( CApAccessPointItem* aApItem )
       
  1090     {
       
  1091     APSETUILOGGER_ENTERFN( EModel,"Model::ChangeWepSettingsL")
       
  1092     TInt retval(0);
       
  1093         
       
  1094     if ( !iWepSecSettings )
       
  1095         {
       
  1096         iWepSecSettings = CWEPSecuritySettings::NewL();
       
  1097         TUint32 iapid( 0 );
       
  1098         aApItem->ReadUint( EApIapServiceId, iapid );
       
  1099         iWepSecSettings->LoadL( iapid, *Database()->Database() );        
       
  1100         }
       
  1101 
       
  1102     if ( !iWepSecSettingsUi )
       
  1103         {
       
  1104         iWepSecSettingsUi = CWEPSecuritySettingsUi::NewL( *EikEnv() );
       
  1105         }
       
  1106 
       
  1107     iWepUiExitReason = iWepSecSettings->EditL( *iWepSecSettingsUi, 
       
  1108                                                aApItem->ConnectionName() );
       
  1109                                                
       
  1110     if ( iWepUiExitReason & CWEPSecuritySettings::EExitReq )
       
  1111         {
       
  1112         retval += KApUiEventExitRequested;
       
  1113         }
       
  1114     if ( iWepUiExitReason & CWEPSecuritySettings::EShutDownReq )
       
  1115         {
       
  1116         retval += KApUiEventShutDownRequested;
       
  1117         }
       
  1118     APSETUILOGGER_LEAVEFN( EModel,"Model::ChangeWepSettingsL")
       
  1119     return retval;
       
  1120     }
       
  1121 
       
  1122 
       
  1123 
       
  1124 // ---------------------------------------------------------
       
  1125 // CApSettingsModel::ChangeWpaSettingsL
       
  1126 // ---------------------------------------------------------
       
  1127 //
       
  1128 TInt CApSettingsModel::ChangeWpaSettingsL( CApAccessPointItem* aApItem )
       
  1129     {
       
  1130     APSETUILOGGER_ENTERFN( EModel,"Model::ChangeWpaSettingsL")
       
  1131     TInt retval(0);
       
  1132 
       
  1133     if ( !iWpaSecSettings )
       
  1134         {
       
  1135         iWpaSecSettings = CWPASecuritySettings::NewL( ESecurityModeWpa );
       
  1136         TUint32 iapid( 0 );
       
  1137         aApItem->ReadUint( EApIapServiceId, iapid );
       
  1138         iWpaSecSettings->LoadL( iapid, *Database()->Database() );
       
  1139         }
       
  1140 
       
  1141     if ( !iWpaSecSettingsUi )
       
  1142         {
       
  1143         iWpaSecSettingsUi = CWPASecuritySettingsUi::NewL( *EikEnv() );
       
  1144         }
       
  1145 
       
  1146     iWpaUiExitReason = iWpaSecSettings->EditL( *iWpaSecSettingsUi, 
       
  1147                                                aApItem->ConnectionName() );
       
  1148                                                
       
  1149     if ( iWpaUiExitReason & CWPASecuritySettings::EExitReq )
       
  1150         {
       
  1151         retval += KApUiEventExitRequested;
       
  1152         }
       
  1153     if ( iWpaUiExitReason & CWPASecuritySettings::EShutDownReq )
       
  1154         {
       
  1155         retval += KApUiEventShutDownRequested;
       
  1156         }
       
  1157     APSETUILOGGER_LEAVEFN( EModel,"Model::ChangeWpaSettingsL")    
       
  1158     return retval;
       
  1159     }
       
  1160 
       
  1161 
       
  1162 
       
  1163 // ---------------------------------------------------------
       
  1164 // CApSettingsModel::Change8021xSettingsL
       
  1165 // ---------------------------------------------------------
       
  1166 //
       
  1167 TInt CApSettingsModel::Change8021xSettingsL( CApAccessPointItem* aApItem )
       
  1168     {
       
  1169     APSETUILOGGER_ENTERFN( EModel,"Model::Change8021xSettingsL")
       
  1170     TInt retval(0);
       
  1171 
       
  1172     if ( !iWpaSecSettings )
       
  1173         {
       
  1174         iWpaSecSettings = CWPASecuritySettings::NewL( ESecurityMode8021x );
       
  1175         TUint32 iapid( 0 );
       
  1176         aApItem->ReadUint( EApIapServiceId, iapid );
       
  1177         iWpaSecSettings->LoadL( iapid, *Database()->Database() );        
       
  1178         }
       
  1179         
       
  1180     if ( !iWpaSecSettingsUi )
       
  1181         {
       
  1182         iWpaSecSettingsUi = CWPASecuritySettingsUi::NewL( *EikEnv() );
       
  1183         }
       
  1184         
       
  1185     iWpaUiExitReason = iWpaSecSettings->EditL( *iWpaSecSettingsUi, 
       
  1186                                                aApItem->ConnectionName() );
       
  1187 
       
  1188     if ( iWpaUiExitReason & CWPASecuritySettings::EExitReq )
       
  1189         {
       
  1190         retval += KApUiEventExitRequested;
       
  1191         }
       
  1192     if ( iWpaUiExitReason & CWPASecuritySettings::EShutDownReq )
       
  1193         {
       
  1194         retval += KApUiEventShutDownRequested;
       
  1195         }
       
  1196     APSETUILOGGER_LEAVEFN( EModel,"Model::Change8021xSettingsL")       
       
  1197     return retval;
       
  1198     }
       
  1199 
       
  1200 
       
  1201 
       
  1202 // ---------------------------------------------------------
       
  1203 // CApSettingsModel::ClearWEPAndWPASettings
       
  1204 // ---------------------------------------------------------
       
  1205 //
       
  1206 void CApSettingsModel::ClearWEPAndWPASettings()
       
  1207     {
       
  1208     APSETUILOGGER_ENTERFN( EModel,"Model::ClearWEPAndWPASettings")
       
  1209     
       
  1210     delete iWepSecSettings;
       
  1211     iWepSecSettings = NULL;
       
  1212 
       
  1213     delete iWpaSecSettings;
       
  1214     iWpaSecSettings = NULL;
       
  1215     
       
  1216     APSETUILOGGER_LEAVEFN( EModel,"Model::ClearWEPAndWPASettings") 
       
  1217     }
       
  1218 
       
  1219 
       
  1220 
       
  1221 // ---------------------------------------------------------
       
  1222 // CApSettingsModel::WriteWlanL
       
  1223 // ---------------------------------------------------------
       
  1224 //
       
  1225 void CApSettingsModel::WriteWlanL( CApAccessPointItem& aApItem,
       
  1226                                    TBool aIsNew )
       
  1227     {
       
  1228     APSETUILOGGER_ENTERFN( EModel,"Model::WriteWlanL")
       
  1229     // now check if it is WLAN and handle security savings...
       
  1230     if ( aApItem.BearerTypeL() == EApBearerTypeWLAN )
       
  1231         { // it is WLAN...
       
  1232         // check that there were no bearer-change, because if orig. bearer 
       
  1233         // was NOT wlan, then we shouls consider it as a new record!!!
       
  1234         TUint32 wlanid(0);
       
  1235         aApItem.ReadUint( EApIapServiceId, wlanid );        
       
  1236         
       
  1237         TUint32 oldwlanid(wlanid);
       
  1238         
       
  1239         TTypeOfSaving savetype( ESavingEditedAP );
       
  1240         
       
  1241         if ( aIsNew )
       
  1242             {
       
  1243             savetype = ESavingBrandNewAP;
       
  1244             oldwlanid = 0;
       
  1245             }
       
  1246         // now check if it is WEP...
       
  1247         // read up security mode
       
  1248         TUint32 secmode( 0 );
       
  1249         aApItem.ReadUint( EApWlanSecurityMode, secmode );
       
  1250         
       
  1251         
       
  1252         TBool fresh(EFalse); 
       
  1253         
       
  1254         
       
  1255         switch ( secmode )
       
  1256             {
       
  1257             case EOpen:
       
  1258                 {
       
  1259                 break;
       
  1260                 }
       
  1261             case EWep:
       
  1262                 {
       
  1263                 // we have to try to save if:
       
  1264                 // 1. it is a changed AP, it is possible that only 
       
  1265                 // sec. settings have been changed. 
       
  1266                 // In this case, iWepSecSettings might be NULL!!
       
  1267                 // 2. it's sec. settings had been edited
       
  1268                 
       
  1269                 if ( !iWepSecSettings )
       
  1270                     {
       
  1271                     iWepSecSettings = CWEPSecuritySettings::NewL();
       
  1272                     fresh = ETrue;
       
  1273                     iWepSecSettings->LoadL( oldwlanid, 
       
  1274                                             *Database()->Database() );
       
  1275                     }
       
  1276                 
       
  1277                 if ( ( iWepUiExitReason & CWEPSecuritySettings::EValid ) 
       
  1278                     || ( fresh ) )
       
  1279                     { // save WEP settings, too, into same transaction...
       
  1280                     iWepSecSettings->SaveL( wlanid, *iDb->Database() );
       
  1281                     }
       
  1282                 break;
       
  1283                 }
       
  1284             case E802_1x:
       
  1285                 {
       
  1286                 
       
  1287                 if ( !iWpaSecSettings )
       
  1288                     {
       
  1289                     iWpaSecSettings = 
       
  1290                         CWPASecuritySettings::NewL( ESecurityMode8021x );
       
  1291                     fresh = ETrue;
       
  1292                     iWpaSecSettings->LoadL( oldwlanid, 
       
  1293                                             *Database()->Database() );
       
  1294                     }                
       
  1295                 
       
  1296                 if ( ( iWpaUiExitReason & CWPASecuritySettings::EValid )
       
  1297                     || ( fresh ) )
       
  1298                     { // save WPA settings, too, into same transaction...
       
  1299                     iWpaSecSettings->SaveL( wlanid, *iDb->Database(), 
       
  1300                                             savetype, oldwlanid );
       
  1301                     }
       
  1302                 break;
       
  1303                 }
       
  1304             case EWpa:
       
  1305             case EWpa2:
       
  1306                 {
       
  1307                 
       
  1308                 if ( !iWpaSecSettings )
       
  1309                     {
       
  1310                     iWpaSecSettings = 
       
  1311                           CWPASecuritySettings::NewL( ESecurityModeWpa );
       
  1312                     fresh = ETrue;
       
  1313                     iWpaSecSettings->LoadL( oldwlanid, 
       
  1314                                             *Database()->Database() );
       
  1315                     }                
       
  1316                 
       
  1317                 if ( ( iWpaUiExitReason & CWPASecuritySettings::EValid )
       
  1318                     || ( fresh ) )
       
  1319                     { // save WPA settings, too, into same transaction...
       
  1320                     iWpaSecSettings->SaveL( wlanid, *iDb->Database(),
       
  1321                                             savetype, oldwlanid );
       
  1322                     }
       
  1323                 break;
       
  1324                 }
       
  1325             default:
       
  1326                 {
       
  1327                 __ASSERT_DEBUG( EFalse, Panic( EUnknownCase ) );
       
  1328                 // do nothing in urel
       
  1329                 break;
       
  1330                 }
       
  1331             }
       
  1332         }
       
  1333     APSETUILOGGER_LEAVEFN( EModel,"Model::WriteWlanL")    
       
  1334     }
       
  1335 
       
  1336 
       
  1337 
       
  1338 
       
  1339 
       
  1340 // ---------------------------------------------------------
       
  1341 // CApSettingsModel::LoadWlanL
       
  1342 // ---------------------------------------------------------
       
  1343 //
       
  1344 void CApSettingsModel::LoadWlanL( CApAccessPointItem& aApItem )
       
  1345     {
       
  1346     APSETUILOGGER_ENTERFN( EModel,"Model::LoadWlanL")
       
  1347     // now check if it is WLAN and handle security savings...
       
  1348     if ( aApItem.BearerTypeL() == EApBearerTypeWLAN )
       
  1349         { // it is WLAN...
       
  1350         // now check if it is WEP...
       
  1351         // read up security mode
       
  1352         TUint32 secmode( 0 );
       
  1353         aApItem.ReadUint( EApWlanSecurityMode, secmode );
       
  1354         switch ( secmode )
       
  1355             {
       
  1356             case EOpen:
       
  1357                 {
       
  1358                 break;
       
  1359                 }
       
  1360             case EWep:
       
  1361                 {
       
  1362                 if ( !iWepSecSettings )
       
  1363                     {
       
  1364                     iWepSecSettings = CWEPSecuritySettings::NewL();
       
  1365                     }
       
  1366     
       
  1367                 if ( !iWepSecSettingsUi )
       
  1368                     {
       
  1369                     iWepSecSettingsUi = 
       
  1370                         CWEPSecuritySettingsUi::NewL( *EikEnv() );
       
  1371                     }
       
  1372                 TUint32 wlanid( 0 );
       
  1373                 aApItem.ReadUint( EApIapServiceId, wlanid );
       
  1374                 iWepSecSettings->LoadL( wlanid, *Database()->Database() );
       
  1375                 break;
       
  1376                 }
       
  1377             case E802_1x:
       
  1378                 {
       
  1379                 if ( !iWpaSecSettings )
       
  1380                     {
       
  1381                     iWpaSecSettings = 
       
  1382                         CWPASecuritySettings::NewL( ESecurityMode8021x );
       
  1383                     }
       
  1384     
       
  1385                 if ( !iWpaSecSettingsUi )
       
  1386                     {
       
  1387                     iWpaSecSettingsUi = 
       
  1388                         CWPASecuritySettingsUi::NewL( *EikEnv() );
       
  1389                     }
       
  1390                 TUint32 wlanid( 0 );
       
  1391                 aApItem.ReadUint( EApIapServiceId, wlanid );
       
  1392                 iWpaSecSettings->LoadL( wlanid, *Database()->Database() );
       
  1393                 break;
       
  1394                 }
       
  1395             case EWpa:
       
  1396             case EWpa2:
       
  1397                 {
       
  1398                 if ( !iWpaSecSettings )
       
  1399                     {
       
  1400                     iWpaSecSettings = 
       
  1401                         CWPASecuritySettings::NewL( ESecurityModeWpa );
       
  1402                     }
       
  1403     
       
  1404                 if ( !iWpaSecSettingsUi )
       
  1405                     {
       
  1406                     iWpaSecSettingsUi = 
       
  1407                         CWPASecuritySettingsUi::NewL( *EikEnv() );
       
  1408                     }
       
  1409                 TUint32 wlanid( 0 );
       
  1410                 aApItem.ReadUint( EApIapServiceId, wlanid );
       
  1411                 iWpaSecSettings->LoadL( wlanid, *Database()->Database() );
       
  1412                 break;
       
  1413                 }
       
  1414             default:
       
  1415                 {
       
  1416                 __ASSERT_DEBUG( EFalse, Panic( EUnknownCase ) );
       
  1417                 // do nothing in urel
       
  1418                 break;
       
  1419                 }
       
  1420             }
       
  1421         }
       
  1422     APSETUILOGGER_LEAVEFN( EModel,"Model::LoadWlanL")    
       
  1423     }
       
  1424 
       
  1425 
       
  1426 
       
  1427 
       
  1428 
       
  1429 //----------------------------------------------------------
       
  1430 // CApSettingsModel::HasWlanSecSettingsFilledL
       
  1431 //----------------------------------------------------------
       
  1432 //
       
  1433 TBool CApSettingsModel::HasWlanSecSettingsFilledL( CApAccessPointItem& aApItem )
       
  1434     {
       
  1435     APSETUILOGGER_ENTERFN( EModel,"Model::HasWlanSecSettingsFilledL")
       
  1436     TBool retval(EFalse);
       
  1437     
       
  1438     TUint32 secmode( 0 );
       
  1439     aApItem.ReadUint( EApWlanSecurityMode, secmode );
       
  1440     
       
  1441     TUint32 wlanid(0);
       
  1442     aApItem.ReadUint( EApIapServiceId, wlanid );        
       
  1443         
       
  1444     TUint32 oldwlanid(wlanid);
       
  1445 
       
  1446     TUint32 wapuid = aApItem.WapUid();
       
  1447 
       
  1448     if ( ( wapuid == KApNoneUID )
       
  1449         || ( iUtils->BearerTypeL( wapuid ) != EApBearerTypeWLAN ) )
       
  1450         {
       
  1451         oldwlanid = 0;
       
  1452         }
       
  1453 
       
  1454     switch ( secmode )
       
  1455         {
       
  1456         case EOpen:
       
  1457             {
       
  1458             retval = ETrue;
       
  1459             break;
       
  1460             }
       
  1461         case EWep:
       
  1462             {
       
  1463             if ( !iWepSecSettings )
       
  1464                 {
       
  1465                 iWepSecSettings = CWEPSecuritySettings::NewL();
       
  1466                 iWepSecSettings->LoadL( oldwlanid, 
       
  1467                                         *Database()->Database() );
       
  1468                 }
       
  1469             retval = iWepSecSettings->IsValid();
       
  1470             break;
       
  1471             }
       
  1472         case E802_1x:
       
  1473             {
       
  1474             if ( !iWpaSecSettings )
       
  1475                 {
       
  1476                 iWpaSecSettings = 
       
  1477                     CWPASecuritySettings::NewL( ESecurityMode8021x );
       
  1478                 iWpaSecSettings->LoadL( oldwlanid, 
       
  1479                                         *Database()->Database() );
       
  1480                 }
       
  1481             retval = iWpaSecSettings->IsValid();
       
  1482             break;
       
  1483             }
       
  1484         case EWpa:
       
  1485         case EWpa2:
       
  1486             {
       
  1487             if ( !iWpaSecSettings )
       
  1488                 {
       
  1489                 iWpaSecSettings = 
       
  1490                       CWPASecuritySettings::NewL( ESecurityModeWpa );
       
  1491                 iWpaSecSettings->LoadL( oldwlanid, 
       
  1492                                         *Database()->Database() );
       
  1493                 }                
       
  1494             retval = iWpaSecSettings->IsValid();                
       
  1495             break;
       
  1496             }
       
  1497         default:
       
  1498             {
       
  1499             __ASSERT_DEBUG( EFalse, Panic( EUnknownCase ) );
       
  1500             // do nothing in urel
       
  1501             break;
       
  1502             }
       
  1503         }
       
  1504     APSETUILOGGER_LEAVEFN( EModel,"Model::HasWlanSecSettingsFilledL")    
       
  1505     return retval;
       
  1506     }
       
  1507 
       
  1508 
       
  1509 //----------------------------------------------------------
       
  1510 // CApSettingsModel::UpdateSecurityModeL
       
  1511 //----------------------------------------------------------
       
  1512 //
       
  1513 void CApSettingsModel::UpdateSecurityModeL( CApAccessPointItem& aApItem )
       
  1514     {
       
  1515     APSETUILOGGER_ENTERFN( EModel,"Model::UpdateSecurityModeL")
       
  1516     TUint32 secmode( 0 );
       
  1517     aApItem.ReadUint( EApWlanSecurityMode, secmode );
       
  1518 
       
  1519     TUint32 wlanid(0);
       
  1520     aApItem.ReadUint( EApIapServiceId, wlanid );
       
  1521 
       
  1522     switch ( secmode )
       
  1523         {
       
  1524         case EOpen:
       
  1525             {
       
  1526             break;
       
  1527             }
       
  1528         case EWep:
       
  1529             {
       
  1530             if ( iWepSecSettings )
       
  1531                 {
       
  1532                 delete iWepSecSettings;
       
  1533                 iWepSecSettings = NULL; // to satisfy CodeScanner
       
  1534                 }
       
  1535             iWepSecSettings = CWEPSecuritySettings::NewL();
       
  1536             iWepSecSettings->LoadL( wlanid, 
       
  1537                                     *Database()->Database() );
       
  1538             break;
       
  1539             }
       
  1540         case E802_1x:
       
  1541             {
       
  1542             if ( iWpaSecSettings )
       
  1543                 {
       
  1544                 delete iWpaSecSettings;
       
  1545                 iWpaSecSettings = NULL; // to satisfy CodeScanner
       
  1546                 }
       
  1547             iWpaSecSettings = 
       
  1548                 CWPASecuritySettings::NewL( ESecurityMode8021x );
       
  1549             iWpaSecSettings->LoadL( wlanid, 
       
  1550                                     *Database()->Database() );
       
  1551             break;
       
  1552             }
       
  1553         case EWpa:
       
  1554         case EWpa2:
       
  1555             {
       
  1556             if ( iWpaSecSettings )
       
  1557                 {
       
  1558                 delete iWpaSecSettings;
       
  1559                 iWpaSecSettings = NULL; // to satisfy CodeScanner
       
  1560                 }
       
  1561             iWpaSecSettings = 
       
  1562                   CWPASecuritySettings::NewL( ESecurityModeWpa );
       
  1563             iWpaSecSettings->LoadL( wlanid, 
       
  1564                                     *Database()->Database() );
       
  1565             break;
       
  1566             }
       
  1567         default:
       
  1568             {
       
  1569             __ASSERT_DEBUG( EFalse, Panic( EUnknownCase ) );
       
  1570             // do nothing in urel
       
  1571             break;
       
  1572             }
       
  1573         }
       
  1574     APSETUILOGGER_LEAVEFN( EModel,"Model::UpdateSecurityModeL")    
       
  1575     }
       
  1576 
       
  1577 // End of File