cmmanager/cmmgr/cmmpluginbase/src/ccmpluginbaseeng.cpp
branchRCL_3
changeset 58 83ca720e2b9a
parent 57 05bc53fe583b
child 62 bb1f80fb7db2
equal deleted inserted replaced
57:05bc53fe583b 58:83ca720e2b9a
     1 /*
       
     2 * Copyright (c) 2009-2010 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:
       
    15 *        Implementation of plugin base class
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 #include <datamobilitycommsdattypes.h>
       
    21 #include <cmpluginbaseeng.h>
       
    22 #include <cmpsettingsconsts.h>
       
    23 #include <featmgr.h>
       
    24 #include <cmpluginembdestinationdef.h>
       
    25 
       
    26 #include "cmmserverdefs.h"
       
    27 #include "ccmpluginbaseengtextresolver.h"
       
    28 
       
    29 #include "OstTraceDefinitions.h"
       
    30 #ifdef OST_TRACE_COMPILER_IN_USE
       
    31 #include "ccmpluginbaseengTraces.h"
       
    32 #endif
       
    33 
       
    34 
       
    35 using namespace CMManager;
       
    36 using namespace CommsDat;
       
    37 
       
    38 const TInt KApMaxConnNameLength = 50;
       
    39 _LIT( KFormatPostfix, "%02d" );
       
    40 _LIT( KFormatLargePostfix, "%d" );
       
    41 _LIT( KFormatNameWithPostfix, "%S(%S)" );
       
    42 _LIT( KFormatNoPostfix, "%S" );
       
    43 const TInt KMaxPostfixLength = 5;
       
    44 
       
    45 _LIT( KDefWapGatewayIpAddress, "0.0.0.0" );
       
    46 
       
    47 _LIT( KLocationName, "Mobile" );
       
    48 
       
    49 _LIT( KDefaultIapName, "Connection Method" );
       
    50 
       
    51 
       
    52 EXPORT_C CCmClientPluginInstance* CCmClientPluginInstance::NewLC()
       
    53     {
       
    54     OstTraceFunctionEntry0( CCMCLIENTPLUGININSTANCE_NEWLC_ENTRY );
       
    55 
       
    56     CCmClientPluginInstance* self = new( ELeave ) CCmClientPluginInstance();
       
    57     CleanupStack::PushL( self );
       
    58     self->ConstructL();
       
    59 
       
    60     OstTraceFunctionExit0( CCMCLIENTPLUGININSTANCE_NEWLC_EXIT );
       
    61     return self;
       
    62     }
       
    63 
       
    64 EXPORT_C CCmClientPluginInstance* CCmClientPluginInstance::NewL()
       
    65     {
       
    66     OstTraceFunctionEntry0( CCMCLIENTPLUGININSTANCE_NEWL_ENTRY );
       
    67 
       
    68     CCmClientPluginInstance* self = CCmClientPluginInstance::NewLC();
       
    69     CleanupStack::Pop( self );
       
    70 
       
    71     OstTraceFunctionExit0( CCMCLIENTPLUGININSTANCE_NEWL_EXIT );
       
    72     return self;
       
    73     }
       
    74 
       
    75 CCmClientPluginInstance::CCmClientPluginInstance()
       
    76         :
       
    77         iNamingMethod( ENamingUnique ),
       
    78         iLocationEnabled( EFalse ),
       
    79         iIapId( 0 )
       
    80     {
       
    81     }
       
    82 
       
    83 EXPORT_C CCmClientPluginInstance::~CCmClientPluginInstance()
       
    84     {
       
    85     OstTraceFunctionEntry0( CCMCLIENTPLUGININSTANCE_CCMCLIENTPLUGININSTANCE_ENTRY );
       
    86 
       
    87     iGenRecordArray.ResetAndDestroy();
       
    88     iBearerSpecRecordArray.ResetAndDestroy();
       
    89 
       
    90     OstTraceFunctionExit0( CCMCLIENTPLUGININSTANCE_CCMCLIENTPLUGININSTANCE_EXIT );
       
    91     }
       
    92 
       
    93 // ---------------------------------------------------------------------------
       
    94 // Second phase constructor.
       
    95 // ---------------------------------------------------------------------------
       
    96 //
       
    97 void CCmClientPluginInstance::ConstructL()
       
    98     {
       
    99     }
       
   100 
       
   101 
       
   102 // ---------------------------------------------------------------------------
       
   103 // TCmPluginInitParam::TCmPluginInitParam
       
   104 // ---------------------------------------------------------------------------
       
   105 //
       
   106 EXPORT_C TCmPluginInitParam::TCmPluginInitParam( CommsDat::CMDBSession& aSession )
       
   107         :
       
   108         iSessionRef( aSession )
       
   109     {
       
   110     OstTraceFunctionEntry0( TCMPLUGININITPARAM_TCMPLUGININITPARAM_ENTRY );
       
   111 
       
   112     iNotused1 = NULL;
       
   113     iNotused2 = NULL;
       
   114 
       
   115     OstTraceFunctionExit0( TCMPLUGININITPARAM_TCMPLUGININITPARAM_EXIT );
       
   116     }
       
   117 
       
   118 // ---------------------------------------------------------------------------
       
   119 // CCmPluginBaseEng::CCmPluginBaseEng
       
   120 // ---------------------------------------------------------------------------
       
   121 //
       
   122 EXPORT_C CCmPluginBaseEng::CCmPluginBaseEng( TCmPluginInitParam *aInitParam )
       
   123         :
       
   124         iSession( aInitParam->iSessionRef ),
       
   125         iNamingMethod( ENamingUnique )
       
   126     {
       
   127     OstTraceFunctionEntry0( CCMPLUGINBASEENG_CCMPLUGINBASEENG_ENTRY );
       
   128 
       
   129     iDtor_ID_Key.iUid = 0;
       
   130     iBearerType = 0;
       
   131 
       
   132     iIapRecord = NULL;
       
   133     iProxyRecord = NULL;
       
   134     iServiceRecord = NULL;
       
   135     iNetworkRecord = NULL;
       
   136     iLocationRecord = NULL;
       
   137     iWapAPRecord = NULL;
       
   138     iWapIPBearerRecord = NULL;
       
   139     iMetaDataRecord = NULL;
       
   140 
       
   141     iCmId = 0;
       
   142     iMetadataTableId = 0;
       
   143     iLocationEnabled = EFalse;
       
   144 
       
   145     OstTraceFunctionExit0( CCMPLUGINBASEENG_CCMPLUGINBASEENG_EXIT );
       
   146     }
       
   147 
       
   148 // ---------------------------------------------------------------------------
       
   149 // CCmPluginBaseEng::~CCmPluginBaseEng
       
   150 // ---------------------------------------------------------------------------
       
   151 //
       
   152 EXPORT_C CCmPluginBaseEng::~CCmPluginBaseEng()
       
   153     {
       
   154     OstTraceFunctionEntry0( DUP1_CCMPLUGINBASEENG_CCMPLUGINBASEENG_ENTRY );
       
   155 
       
   156     iCmId = 0;
       
   157     delete iIapRecord; iIapRecord = NULL;
       
   158     delete iProxyRecord; iProxyRecord = NULL;
       
   159     delete iServiceRecord; iServiceRecord = NULL;
       
   160     delete iNetworkRecord; iNetworkRecord = NULL;
       
   161     delete iLocationRecord; iLocationRecord = NULL;
       
   162     delete iWapAPRecord; iWapAPRecord = NULL;
       
   163     delete iWapIPBearerRecord; iWapIPBearerRecord = NULL;
       
   164     delete iMetaDataRecord; iMetaDataRecord = NULL;
       
   165 
       
   166     iLocationEnabled = EFalse;
       
   167 
       
   168     REComSession::DestroyedImplementation( iDtor_ID_Key );
       
   169 
       
   170     OstTraceFunctionExit0( DUP1_CCMPLUGINBASEENG_CCMPLUGINBASEENG_EXIT );
       
   171     }
       
   172 
       
   173 // ---------------------------------------------------------------------------
       
   174 // CCmPluginBaseEng::ConstructL
       
   175 // ---------------------------------------------------------------------------
       
   176 //
       
   177 EXPORT_C void CCmPluginBaseEng::ConstructL()
       
   178     {
       
   179     OstTraceFunctionEntry0( CCMPLUGINBASEENG_CONSTRUCTL_ENTRY );
       
   180 
       
   181     TRAPD( err, iMetadataTableId = CCDIAPMetadataRecord::TableIdL( iSession ) );
       
   182     if ( err )
       
   183         {
       
   184         if ( err == KErrNotFound )
       
   185             {
       
   186             iMetadataTableId = CCDIAPMetadataRecord::CreateTableL( iSession );
       
   187             }
       
   188         else
       
   189             {
       
   190             User::LeaveIfError( err );
       
   191             }
       
   192         }
       
   193 
       
   194     OstTraceFunctionExit0( CCMPLUGINBASEENG_CONSTRUCTL_EXIT );
       
   195     }
       
   196 
       
   197 // ---------------------------------------------------------------------------
       
   198 // CCmPluginBaseEng::UpdateL
       
   199 // ---------------------------------------------------------------------------
       
   200 //
       
   201 EXPORT_C void CCmPluginBaseEng::UpdateL(
       
   202         CCmClientPluginInstance* aClientPluginInstance )
       
   203     {
       
   204     OstTraceFunctionEntry0( CCMPLUGINBASEENG_UPDATEL_ENTRY );
       
   205 
       
   206     PrepareToUpdateRecordsL( aClientPluginInstance );
       
   207 
       
   208     UpdateServiceRecordL( aClientPluginInstance );
       
   209     UpdateLocationRecordL( aClientPluginInstance );
       
   210     UpdateNetworkRecordL( aClientPluginInstance );
       
   211     UpdateIAPRecordL( aClientPluginInstance );
       
   212     UpdateWapRecordL( aClientPluginInstance );
       
   213     UpdateProxyRecordL( aClientPluginInstance );
       
   214     UpdateMetadataRecordL( aClientPluginInstance );
       
   215     UpdateConnPrefSettingL();
       
   216 
       
   217     UpdateBearerRecordsL(
       
   218             aClientPluginInstance->iGenRecordArray,
       
   219             aClientPluginInstance->iBearerSpecRecordArray );
       
   220 
       
   221     OstTraceFunctionExit0( CCMPLUGINBASEENG_UPDATEL_EXIT );
       
   222     }
       
   223 
       
   224 // ---------------------------------------------------------------------------
       
   225 // Delete this connection methond.
       
   226 // Record ids are checked to be sure that we delete only records
       
   227 // that were loaded before.
       
   228 // ---------------------------------------------------------------------------
       
   229 //
       
   230 EXPORT_C void CCmPluginBaseEng::DeleteL()
       
   231     {
       
   232     OstTraceFunctionEntry0( CCMPLUGINBASEENG_DELETEL_ENTRY );
       
   233 
       
   234     PrepareToDeleteRecordsL();
       
   235 
       
   236     if ( iIapRecord && iIapRecord->RecordId() )
       
   237         {
       
   238         iIapRecord->DeleteL( iSession );
       
   239         }
       
   240 
       
   241     if ( iProxyRecord && iProxyRecord->RecordId() )
       
   242         {
       
   243         iProxyRecord->DeleteL( iSession );
       
   244         }
       
   245 
       
   246     if ( iServiceRecord && iServiceRecord->RecordId() )
       
   247         {
       
   248         iServiceRecord->DeleteL( iSession );
       
   249         }
       
   250 
       
   251     if ( iNetworkRecord && iNetworkRecord->RecordId() )
       
   252         {
       
   253         iNetworkRecord->DeleteL( iSession );
       
   254         }
       
   255 
       
   256     if ( iLocationRecord && iLocationRecord->RecordId() )
       
   257         {
       
   258         iLocationRecord->DeleteL( iSession );
       
   259         }
       
   260 
       
   261     if ( iWapAPRecord && iWapAPRecord->RecordId() )
       
   262         {
       
   263         iWapAPRecord->DeleteL( iSession );
       
   264         }
       
   265 
       
   266     if ( iWapIPBearerRecord && iWapIPBearerRecord->RecordId() )
       
   267         {
       
   268         iWapIPBearerRecord->DeleteL( iSession );
       
   269         }
       
   270 
       
   271     if ( iMetaDataRecord && iMetaDataRecord->RecordId() )
       
   272         {
       
   273         iMetaDataRecord->DeleteL( iSession );
       
   274         }
       
   275 
       
   276     DeleteBearerRecordsL();
       
   277 
       
   278     OstTraceFunctionExit0( CCMPLUGINBASEENG_DELETEL_EXIT );
       
   279     }
       
   280 
       
   281 // ---------------------------------------------------------------------------
       
   282 // CCmPluginBaseEng::ReLoad
       
   283 // ---------------------------------------------------------------------------
       
   284 //
       
   285 EXPORT_C void CCmPluginBaseEng::ReLoadL()
       
   286     {
       
   287     OstTraceFunctionEntry0( CCMPLUGINBASEENG_RELOAD_ENTRY );
       
   288 
       
   289     delete iIapRecord; iIapRecord = NULL;
       
   290     delete iProxyRecord; iProxyRecord = NULL;
       
   291     delete iServiceRecord; iServiceRecord = NULL;
       
   292     delete iNetworkRecord; iNetworkRecord = NULL;
       
   293     delete iLocationRecord; iLocationRecord = NULL;
       
   294     delete iWapAPRecord; iWapAPRecord = NULL;
       
   295     delete iWapIPBearerRecord; iWapIPBearerRecord = NULL;
       
   296     delete iMetaDataRecord; iMetaDataRecord = NULL;
       
   297 
       
   298     iLocationEnabled = EFalse;
       
   299 
       
   300     ResetBearerRecords();
       
   301 
       
   302     LoadL( iCmId );
       
   303 
       
   304     OstTraceFunctionExit0( CCMPLUGINBASEENG_RELOAD_EXIT );
       
   305     }
       
   306 
       
   307 // ---------------------------------------------------------------------------
       
   308 // CCmPluginBaseEng::LoadL
       
   309 // ---------------------------------------------------------------------------
       
   310 //
       
   311 EXPORT_C void CCmPluginBaseEng::LoadL( TUint32 aIapId )
       
   312     {
       
   313     OstTraceFunctionEntry0( CCMPLUGINBASEENG_LOADL_ENTRY );
       
   314 
       
   315     // Embedded destination must be handled separately first.
       
   316     if ( aIapId > KCmDefaultDestinationAPTagId )
       
   317         {
       
   318         iCmId = aIapId;
       
   319         return;
       
   320         }
       
   321 
       
   322     DoLoadL( aIapId );
       
   323 
       
   324     OstTraceFunctionExit0( CCMPLUGINBASEENG_LOADL_EXIT );
       
   325     }
       
   326 
       
   327 // ---------------------------------------------------------------------------
       
   328 // CCmPluginBaseEng::CreateNewL
       
   329 // ---------------------------------------------------------------------------
       
   330 //
       
   331 EXPORT_C void CCmPluginBaseEng::CreateNewL( TUint32 aCmId )
       
   332     {
       
   333     OstTraceFunctionEntry0( CCMPLUGINBASEENG_CREATENEWL_ENTRY );
       
   334 
       
   335     if ( iCmId )
       
   336         // we already have IAP id ->
       
   337         {
       
   338         User::Leave( KErrAlreadyExists );
       
   339         }
       
   340 
       
   341     // Optional record, disabled by default.
       
   342     iLocationEnabled = EFalse;
       
   343 
       
   344     // Create mandatory records.
       
   345     iIapRecord = static_cast<CCDIAPRecord*>(
       
   346             CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) );
       
   347     iNetworkRecord = static_cast<CCDNetworkRecord*>(
       
   348             CCDRecordBase::RecordFactoryL( KCDTIdNetworkRecord ) );
       
   349     iProxyRecord = static_cast<CCDProxiesRecord*>(
       
   350             CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) );
       
   351     NewWapRecordL();
       
   352     iWapIPBearerRecord->iWAPGatewayAddress.SetL( KDefWapGatewayIpAddress );
       
   353 
       
   354     iMetaDataRecord = NewMetadataRecordL( ETrue );
       
   355 
       
   356     // Call plugin to create its own records.
       
   357     CreateServiceRecordL();
       
   358 
       
   359     // Update iaprecord servicetype name.
       
   360     HBufC* servicetypeName( NULL );
       
   361     ServiceRecordNameLC( servicetypeName );
       
   362     iIapRecord->iServiceType.SetL( *servicetypeName );
       
   363     CleanupStack::PopAndDestroy( servicetypeName );
       
   364 
       
   365     // Update iaprecord bearertype name.
       
   366     HBufC* bearerTypeName( NULL );
       
   367     BearerRecordNameLC( bearerTypeName );
       
   368     iIapRecord->iBearerType.SetL( *bearerTypeName );
       
   369     CleanupStack::PopAndDestroy( bearerTypeName );
       
   370 
       
   371     CreateBearerRecordsL();
       
   372 
       
   373     EnableProxyL( EFalse );
       
   374 
       
   375     _LIT( KDefaultConnNameTextId, "txt_occ_setlabel_connection_name_val_connection" );
       
   376     HBufC* resolvedText( NULL );
       
   377     resolvedText = CCmPluginBaseEngTextResolver::ResolveTextL( KDefaultConnNameTextId );
       
   378     if ( resolvedText )
       
   379         {
       
   380         SetDefaultNameL( *resolvedText );
       
   381         }
       
   382     else
       
   383         {
       
   384         SetDefaultNameL( KDefaultIapName );
       
   385         }
       
   386 
       
   387     delete resolvedText;
       
   388     resolvedText = NULL;
       
   389 
       
   390     iIapRecord->iNetworkWeighting = 0; // it's always 0.
       
   391 
       
   392     if ( aCmId != 0 )
       
   393         {
       
   394         iIapRecord->SetRecordId( aCmId );
       
   395         iCmId = 0;
       
   396         }
       
   397     else
       
   398         {
       
   399         iIapRecord->SetRecordId( KCDNewRecordRequest );
       
   400         }
       
   401 
       
   402     OstTraceFunctionExit0( CCMPLUGINBASEENG_CREATENEWL_EXIT );
       
   403     }
       
   404 
       
   405 // ---------------------------------------------------------------------------
       
   406 // CCmPluginBaseEng::CreateCopyL
       
   407 // ---------------------------------------------------------------------------
       
   408 //
       
   409 EXPORT_C CCmPluginBaseEng* CCmPluginBaseEng::CreateCopyL(
       
   410         CCmClientPluginInstance* /*aClientPluginInstance*/ )
       
   411     {
       
   412     OstTraceFunctionEntry0( CCMPLUGINBASEENG_CREATECOPYL_ENTRY );
       
   413 
       
   414     TCmPluginInitParam params( iSession );
       
   415     CCmPluginBaseEng* copyInst = CreateInstanceL( params );
       
   416     CleanupStack::PushL( copyInst );
       
   417 
       
   418     PrepareToCopyDataL( copyInst );
       
   419     CopyDataL( copyInst );
       
   420     CleanupStack::Pop( copyInst );
       
   421 
       
   422     OstTraceFunctionExit0( CCMPLUGINBASEENG_CREATECOPYL_EXIT );
       
   423     return copyInst;
       
   424     }
       
   425 
       
   426 // ---------------------------------------------------------------------------
       
   427 // CCmPluginBaseEng::GetGenericTableIdsToBeObserved
       
   428 // ---------------------------------------------------------------------------
       
   429 //
       
   430 EXPORT_C void CCmPluginBaseEng::GetGenericTableIdsToBeObservedL(
       
   431         RArray<TUint32>& aTableIdArray ) const
       
   432     {
       
   433     OstTraceFunctionEntry0( CCMPLUGINBASEENG_GETGENERICTABLEIDSTOBEOBSERVED_ENTRY );
       
   434 
       
   435     // Service and bearer records should be added by plugins.
       
   436     aTableIdArray.AppendL( KCDTIdIAPRecord );
       
   437     aTableIdArray.AppendL( KCDTIdWAPAccessPointRecord );
       
   438     aTableIdArray.AppendL( KCDTIdWAPIPBearerRecord );
       
   439     aTableIdArray.AppendL( KCDTIdProxiesRecord );
       
   440     aTableIdArray.AppendL( iMetadataTableId );
       
   441 
       
   442     OstTraceFunctionExit0( CCMPLUGINBASEENG_GETGENERICTABLEIDSTOBEOBSERVED_EXIT );
       
   443     }
       
   444 
       
   445 // ---------------------------------------------------------------------------
       
   446 // CCmPluginBaseEng::CopyDataL
       
   447 // ---------------------------------------------------------------------------
       
   448 //
       
   449 void CCmPluginBaseEng::CopyDataL( CCmPluginBaseEng* aCopyInstance )
       
   450     {
       
   451     OstTraceFunctionEntry0( CCMPLUGINBASEENG_COPYDATAL_ENTRY );
       
   452 
       
   453     aCopyInstance->iLocationEnabled = iLocationEnabled;
       
   454     aCopyInstance->iNamingMethod = iNamingMethod;
       
   455     CopyRecordsL( aCopyInstance );
       
   456 
       
   457     OstTraceFunctionExit0( CCMPLUGINBASEENG_COPYDATAL_EXIT );
       
   458     }
       
   459 
       
   460 // ---------------------------------------------------------------------------
       
   461 // CCmPluginBaseEng::CopyRecordsL
       
   462 // ---------------------------------------------------------------------------
       
   463 //
       
   464 void CCmPluginBaseEng::CopyRecordsL( CCmPluginBaseEng* aCopyInstance )
       
   465     {
       
   466     OstTraceFunctionEntry0( CCMPLUGINBASEENG_COPYRECORDSL_ENTRY );
       
   467 
       
   468     CopyRecordDataL( KIapRecordIndex, aCopyInstance );
       
   469 
       
   470     // Ensure that IAP's name is set by the rules (Naming Method).
       
   471     SetNameL(
       
   472             iIapRecord->iRecordName.GetL(),
       
   473             aCopyInstance->iIapRecord,
       
   474             aCopyInstance->iNamingMethod );
       
   475 
       
   476     CopyRecordDataL( KServiceRecordIndex, aCopyInstance );
       
   477     CopyRecordDataL( KNetworkRecordIndex, aCopyInstance );
       
   478     CopyRecordDataL( KWAPAPRecordIndex, aCopyInstance );
       
   479     CopyRecordDataL( KWAPBearerRecordIndex, aCopyInstance );
       
   480     CopyRecordDataL( KMetaDataRecordIndex, aCopyInstance );
       
   481     CopyRecordDataL( KProxyRecordIndex, aCopyInstance );
       
   482 
       
   483     CopyBearerRecordsL( aCopyInstance );
       
   484 
       
   485     OstTraceFunctionExit0( CCMPLUGINBASEENG_COPYRECORDSL_EXIT );
       
   486     }
       
   487 
       
   488 // ---------------------------------------------------------------------------
       
   489 // CCmPluginBaseEng::CopyRecordDataL
       
   490 // ---------------------------------------------------------------------------
       
   491 //
       
   492 void CCmPluginBaseEng::CopyRecordDataL(
       
   493         TUint32 aRecordIdentifier,
       
   494         CCmPluginBaseEng* aCopyInstance )
       
   495     {
       
   496     OstTraceFunctionEntry0( CCMPLUGINBASEENG_COPYRECORDDATAL_ENTRY );
       
   497 
       
   498     switch ( aRecordIdentifier )
       
   499         {
       
   500         case KIapRecordIndex:
       
   501             {
       
   502             aCopyInstance->iIapRecord = static_cast<CCDIAPRecord*>(
       
   503                     CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) );
       
   504             CopyRecordFieldsL( *iIapRecord, *aCopyInstance->iIapRecord );
       
   505             }
       
   506             break;
       
   507         case KServiceRecordIndex:
       
   508             {
       
   509             aCopyInstance->iServiceRecord = CopyServiceRecordL();
       
   510             // The name of the service record copy is changed during update
       
   511             // process, in PrepareToUpdateRecordsL()-method.
       
   512             }
       
   513             break;
       
   514         case KNetworkRecordIndex:
       
   515             {
       
   516             aCopyInstance->iNetworkRecord = static_cast<CCDNetworkRecord*>(
       
   517                     CCDRecordBase::RecordFactoryL( KCDTIdNetworkRecord ) );
       
   518             CopyRecordFieldsL( *iNetworkRecord, *aCopyInstance->iNetworkRecord );
       
   519             }
       
   520             break;
       
   521         case KWAPAPRecordIndex:
       
   522             {
       
   523             aCopyInstance->iWapAPRecord = static_cast<CCDWAPAccessPointRecord*>(
       
   524                     CCDRecordBase::RecordFactoryL( KCDTIdWAPAccessPointRecord ) );
       
   525             CopyRecordFieldsL( *iWapAPRecord, *aCopyInstance->iWapAPRecord );
       
   526             }
       
   527             break;
       
   528         case KWAPBearerRecordIndex:
       
   529             {
       
   530             aCopyInstance->iWapIPBearerRecord = static_cast<CCDWAPIPBearerRecord*>(
       
   531                     CCDRecordBase::RecordFactoryL( KCDTIdWAPIPBearerRecord ) );
       
   532             CopyRecordFieldsL( *iWapIPBearerRecord, *aCopyInstance->iWapIPBearerRecord );
       
   533             }
       
   534             break;
       
   535         case KMetaDataRecordIndex:
       
   536             {
       
   537             aCopyInstance->iMetaDataRecord = new( ELeave ) CCDIAPMetadataRecord( 
       
   538                     iMetadataTableId );
       
   539             CopyRecordFieldsL( *iMetaDataRecord, *aCopyInstance->iMetaDataRecord );
       
   540             }
       
   541             break;
       
   542         case KProxyRecordIndex:
       
   543             {
       
   544             if ( iProxyRecord )
       
   545                 {
       
   546                 aCopyInstance->iProxyRecord = static_cast<CCDProxiesRecord*>(
       
   547                         CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) );
       
   548                 CopyRecordFieldsL( *iProxyRecord, *aCopyInstance->iProxyRecord );
       
   549                 }
       
   550             }
       
   551             break;
       
   552         default:
       
   553             {
       
   554             User::Leave( KErrArgument );
       
   555             }
       
   556             break;
       
   557         }
       
   558 
       
   559     OstTraceFunctionExit0( CCMPLUGINBASEENG_COPYRECORDDATAL_EXIT );
       
   560     }
       
   561 
       
   562 // ---------------------------------------------------------------------------
       
   563 // Copies the values and attributes of all fields from aSource-record into
       
   564 // aDestination record. Does not copy the record element ID. Also, does not
       
   565 // touch any field in aDestination-record that is NULL in aSource-record.
       
   566 // ---------------------------------------------------------------------------
       
   567 //
       
   568 EXPORT_C void CCmPluginBaseEng::CopyRecordFieldsL(
       
   569         CommsDat::CMDBRecordBase& aSource,
       
   570         CommsDat::CMDBRecordBase& aDestination )
       
   571     {
       
   572     OstTraceFunctionEntry0( CCMPLUGINBASEENG_COPYRECORDFIELDSL_ENTRY );
       
   573 
       
   574     const SRecordTypeInfo* recordInfo = aSource.GetRecordInfo();
       
   575     if ( !recordInfo )
       
   576         {
       
   577         User::Leave( KErrCorrupt );
       
   578         }
       
   579 
       
   580     CMDBElement* ptrSource( NULL );
       
   581     CMDBElement* ptrDest( NULL );
       
   582 
       
   583     while ( recordInfo && recordInfo->iTypeId != 0 )
       
   584         {
       
   585         ptrSource = aSource.GetFieldByIdL( recordInfo->iTypeId );
       
   586         ptrDest = aDestination.GetFieldByIdL( recordInfo->iTypeId );
       
   587 
       
   588         if ( !( ptrSource->IsNull() ) )
       
   589             {
       
   590             // Make sure we see only basic type info. Masks out any additional info
       
   591             // on links (CommsDat internal stuff).
       
   592             switch ( recordInfo->iValType & 0x000000ff )
       
   593                 {
       
   594                 case CommsDat::EInt:
       
   595                 case CommsDat::EBool:
       
   596                     {
       
   597                     static_cast<CMDBField<TInt>&>( *ptrDest ).SetL(
       
   598                             static_cast<CMDBField<TInt>&>( *ptrSource ) );
       
   599                     }
       
   600                     break;
       
   601                 case CommsDat::EUint32:
       
   602                 case CommsDat::ELink:
       
   603                     {
       
   604                     static_cast<CMDBField<TUint32>&>( *ptrDest ).SetL(
       
   605                             static_cast<CMDBField<TUint32>&>( *ptrSource ) );
       
   606                     }
       
   607                     break;
       
   608                 case CommsDat::EDesC8:
       
   609                     {
       
   610                     static_cast<CMDBField<TDesC8>&>( *ptrDest ).SetL(
       
   611                             static_cast<CMDBField<TDesC8>&>( *ptrSource ) );
       
   612                     }
       
   613                     break;
       
   614                 case CommsDat::EText:
       
   615                 case CommsDat::EMedText:
       
   616                 case CommsDat::ELongText:
       
   617                     {
       
   618                     static_cast<CMDBField<TDesC>&>( *ptrDest ).SetL(
       
   619                             static_cast<CMDBField<TDesC>&>( *ptrSource ) );
       
   620                     }
       
   621                     break;
       
   622                 default:
       
   623                     {
       
   624                     User::Leave( KErrCorrupt );
       
   625                     }
       
   626                     break;
       
   627                 }
       
   628             ptrDest->ClearAttributes( ptrDest->Attributes() );
       
   629             ptrDest->SetAttributes( ptrSource->Attributes() );
       
   630             }
       
   631         recordInfo++;
       
   632         }
       
   633 
       
   634     OstTraceFunctionExit0( CCMPLUGINBASEENG_COPYRECORDFIELDSL_EXIT );
       
   635     }
       
   636 
       
   637 // ---------------------------------------------------------------------------
       
   638 // CCmPluginBaseEng::DoLoadL
       
   639 // ---------------------------------------------------------------------------
       
   640 //
       
   641 void CCmPluginBaseEng::DoLoadL( TUint32 aIapId )
       
   642     {
       
   643     OstTraceFunctionEntry0( CCMPLUGINBASEENG_DOLOADL_ENTRY );
       
   644 
       
   645     PrepareToLoadRecordsL();
       
   646 
       
   647     LoadIAPRecordL( aIapId );
       
   648     LoadWapRecordL();
       
   649     LoadMetadataRecordL();
       
   650     LoadNetworkRecordL();
       
   651 
       
   652     LoadServiceRecordL();
       
   653     LoadProxyRecordL();
       
   654 
       
   655     LoadBearerRecordsL();
       
   656 
       
   657     OstTraceFunctionExit0( CCMPLUGINBASEENG_DOLOADL_EXIT );
       
   658     }
       
   659 
       
   660 // ---------------------------------------------------------------------------
       
   661 // CCmPluginBaseEng::PrepareToLoadRecordsL
       
   662 // ---------------------------------------------------------------------------
       
   663 //
       
   664 void CCmPluginBaseEng::PrepareToLoadRecordsL()
       
   665     {
       
   666     OstTraceFunctionEntry0( CCMPLUGINBASEENG_PREPARETOLOADRECORDSL_ENTRY );
       
   667 
       
   668     iLocationEnabled = EFalse;
       
   669     PreparePluginToLoadRecordsL();
       
   670 
       
   671     OstTraceFunctionExit0( CCMPLUGINBASEENG_PREPARETOLOADRECORDSL_EXIT );
       
   672     }
       
   673 
       
   674 // ---------------------------------------------------------------------------
       
   675 // CCmPluginBaseEng::LoadIAPRecordL
       
   676 // ---------------------------------------------------------------------------
       
   677 //
       
   678 void CCmPluginBaseEng::LoadIAPRecordL( TUint32 aIapId )
       
   679     {
       
   680     OstTraceFunctionEntry0( CCMPLUGINBASEENG_LOADIAPRECORDL_ENTRY );
       
   681 
       
   682     iCmId = aIapId;
       
   683 
       
   684     // Load IAP record.
       
   685     CCDIAPRecord *iapRecord = static_cast<CCDIAPRecord*>(
       
   686             CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) );
       
   687 
       
   688     CleanupStack::PushL( iapRecord );
       
   689 
       
   690     iapRecord->SetRecordId( iCmId );
       
   691     iapRecord->LoadL( iSession );
       
   692 
       
   693     CleanupStack::Pop( iapRecord );
       
   694     iIapRecord = iapRecord;
       
   695 
       
   696     OstTraceFunctionExit0( CCMPLUGINBASEENG_LOADIAPRECORDL_EXIT );
       
   697     }
       
   698 
       
   699 // ---------------------------------------------------------------------------
       
   700 // CCmPluginBaseEng::LoadProxySettingL
       
   701 // ---------------------------------------------------------------------------
       
   702 //
       
   703 void CCmPluginBaseEng::LoadProxyRecordL()
       
   704     {
       
   705     OstTraceFunctionEntry0( CCMPLUGINBASEENG_LOADPROXYSETTINGL_ENTRY );
       
   706 
       
   707     // Load Proxy record.
       
   708     CMDBRecordSet<CCDProxiesRecord>* proxieRS =
       
   709             new( ELeave ) CMDBRecordSet<CCDProxiesRecord>( KCDTIdProxiesRecord );
       
   710     CleanupStack::PushL(proxieRS);
       
   711 
       
   712     // Now try to find the linked proxy record.
       
   713     // Create new record.
       
   714     CCDProxiesRecord* proxyRecord = static_cast<CCDProxiesRecord*>(
       
   715             CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) );
       
   716     CleanupStack::PushL( proxyRecord );
       
   717 
       
   718     // Prime record.
       
   719     TPtrC serviceType( iIapRecord->iServiceType );
       
   720     proxyRecord->iServiceType.SetL( serviceType );
       
   721     proxieRS->iRecords.AppendL( proxyRecord ); // Ownership transfered.
       
   722 
       
   723     CleanupStack::Pop( proxyRecord );
       
   724     proxyRecord = NULL;
       
   725 
       
   726     if ( proxieRS->FindL(iSession) )
       
   727         {
       
   728         TInt i( 0 );
       
   729         while ( i < proxieRS->iRecords.Count() )
       
   730             // Now that we have a list of services with the proper service type
       
   731             // search for our proxy record and remove it from the array,
       
   732             // then destroy the array.
       
   733             {
       
   734             CCDProxiesRecord* proxyRecord = (*proxieRS)[i];
       
   735 
       
   736             // Compare the record id of these 2 services.
       
   737             if ( TUint32( proxyRecord->iService ) == TUint32( iIapRecord->iService ) )
       
   738                 {
       
   739                 iProxyRecord = proxyRecord;
       
   740                 // Take ownership of this record.
       
   741                 proxieRS->iRecords.Remove( i );
       
   742                 break;
       
   743                 }
       
   744             ++i;
       
   745             }
       
   746         }
       
   747 
       
   748     proxieRS->iRecords.ResetAndDestroy();
       
   749 
       
   750     if ( !iProxyRecord )
       
   751         {
       
   752         // This creates a proxy record, where usage is disabled.
       
   753         EnableProxyL( EFalse );
       
   754         }
       
   755 
       
   756     CleanupStack::PopAndDestroy( proxieRS );
       
   757 
       
   758     OstTraceFunctionExit0( CCMPLUGINBASEENG_LOADPROXYSETTINGL_EXIT );
       
   759     }
       
   760 
       
   761 // ---------------------------------------------------------------------------
       
   762 // CCmPluginBaseEng::LoadNetworkSettingL
       
   763 // ---------------------------------------------------------------------------
       
   764 //
       
   765 void CCmPluginBaseEng::LoadNetworkRecordL()
       
   766     {
       
   767     OstTraceFunctionEntry0( CCMPLUGINBASEENG_LOADNETWORKSETTINGL_ENTRY );
       
   768 
       
   769     CCDNetworkRecord* networkRecord = static_cast<CCDNetworkRecord*>(
       
   770             CCDRecordBase::RecordFactoryL( KCDTIdNetworkRecord ) );
       
   771     CleanupStack::PushL( networkRecord );
       
   772 
       
   773     networkRecord->SetRecordId( iIapRecord->iNetwork );
       
   774     TRAPD( err, networkRecord->LoadL( iSession ) );
       
   775     if ( err == KErrNotFound )
       
   776         {
       
   777         CleanupStack::PopAndDestroy( networkRecord );
       
   778 
       
   779         networkRecord = static_cast<CCDNetworkRecord*>(
       
   780                 CCDRecordBase::RecordFactoryL( KCDTIdNetworkRecord ) );
       
   781         }
       
   782     else
       
   783         // KErrNotFound -> doesn't matter. We will do it UpdateL()
       
   784         {
       
   785         User::LeaveIfError( err );
       
   786 
       
   787         CleanupStack::Pop( networkRecord );
       
   788         }
       
   789 
       
   790     iNetworkRecord = networkRecord;
       
   791 
       
   792     OstTraceFunctionExit0( CCMPLUGINBASEENG_LOADNETWORKSETTINGL_EXIT );
       
   793     }
       
   794 
       
   795 // ---------------------------------------------------------------------------
       
   796 // CCmPluginBaseEng::LoadLocationSettingL
       
   797 // ---------------------------------------------------------------------------
       
   798 //
       
   799 void CCmPluginBaseEng::LoadLocationRecordL()
       
   800     {
       
   801     OstTraceFunctionEntry0( CCMPLUGINBASEENG_LOADLOCATIONSETTINGL_ENTRY );
       
   802     OstTraceFunctionExit0( CCMPLUGINBASEENG_LOADLOCATIONSETTINGL_EXIT );
       
   803     }
       
   804 
       
   805 // ---------------------------------------------------------------------------
       
   806 // CCmPluginBaseEng::PrepareToUpdateRecordsL
       
   807 // ---------------------------------------------------------------------------
       
   808 //
       
   809 void CCmPluginBaseEng::PrepareToUpdateRecordsL(
       
   810         CCmClientPluginInstance* aClientPluginInstance )
       
   811     {
       
   812     OstTraceFunctionEntry0( CCMPLUGINBASEENG_PREPARETOUPDATERECORDSL_ENTRY );
       
   813 
       
   814     //TODO, Add null checks for mandatory generic record pointers.
       
   815     //
       
   816 
       
   817     // Set the record attributes to bearer specific records.
       
   818     CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(
       
   819             aClientPluginInstance->iGenRecordArray[KIapRecordIndex] );
       
   820 
       
   821     for ( TInt i = 0; i < aClientPluginInstance->iBearerSpecRecordArray.Count(); i++ )
       
   822         {
       
   823         CCDRecordBase* record = static_cast<CCDRecordBase*>(
       
   824                 aClientPluginInstance->iBearerSpecRecordArray[i] );
       
   825 
       
   826         CopyAttributes( iapRecord, record );
       
   827         }
       
   828 
       
   829     PreparePluginToUpdateRecordsL(
       
   830             aClientPluginInstance->iGenRecordArray,
       
   831             aClientPluginInstance->iBearerSpecRecordArray );
       
   832 
       
   833     OstTraceFunctionExit0( CCMPLUGINBASEENG_PREPARETOUPDATERECORDSL_EXIT );
       
   834     }
       
   835 
       
   836 // ---------------------------------------------------------------------------
       
   837 // CCmPluginBaseEng::UpdateIAPRecordL
       
   838 // ---------------------------------------------------------------------------
       
   839 //
       
   840 void CCmPluginBaseEng::UpdateIAPRecordL(
       
   841         CCmClientPluginInstance* aClientPluginInstance )
       
   842     {
       
   843     OstTraceFunctionEntry0( CCMPLUGINBASEENG_UPDATEIAPRECORDL_ENTRY );
       
   844 
       
   845     CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(
       
   846             aClientPluginInstance->iGenRecordArray[KIapRecordIndex] );
       
   847 
       
   848     if ( iCmId == 0 )
       
   849         {
       
   850         // Otherwise predefined iapid.
       
   851         if ( !iIapRecord->RecordId() )
       
   852             {
       
   853             iIapRecord->SetRecordId( KCDNewRecordRequest );
       
   854             }
       
   855 
       
   856         TUint32 id( 0 );
       
   857         id = ServiceRecordId();
       
   858         iIapRecord->iService = id;
       
   859 
       
   860         HBufC* name( NULL );
       
   861         ServiceRecordNameLC( name );
       
   862         iIapRecord->iServiceType.SetL( *name );
       
   863         CleanupStack::PopAndDestroy( name );
       
   864 
       
   865         BearerRecordIdL( id );
       
   866         iIapRecord->iBearer = id;
       
   867         BearerRecordNameLC( name );
       
   868         iIapRecord->iBearerType.SetL( *name );
       
   869         CleanupStack::PopAndDestroy( name );
       
   870 
       
   871         iIapRecord->iNetwork = iNetworkRecord->RecordId();
       
   872 
       
   873         iIapRecord->iLocation = GetLocationIdL();
       
   874 
       
   875         CopyAttributes( iapRecord, iIapRecord );
       
   876         CheckIfNameModifiedL( iapRecord, iIapRecord );
       
   877 
       
   878         iIapRecord->StoreL( iSession );
       
   879         // Have to be "reloaded" to get possible default values 
       
   880         // from template records.
       
   881         iIapRecord->LoadL( iSession );
       
   882 
       
   883         iCmId = iIapRecord->RecordId();
       
   884         aClientPluginInstance->iIapId = iCmId;
       
   885 
       
   886         CCDIAPRecord* tempIapRecord = static_cast<CCDIAPRecord*>(
       
   887                 CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) );
       
   888         CleanupStack::PushL( tempIapRecord );
       
   889         CopyRecordFieldsL( *iIapRecord, *tempIapRecord );
       
   890         tempIapRecord->SetElementId( iIapRecord->ElementId() );
       
   891 
       
   892         aClientPluginInstance->iGenRecordArray.Remove( KIapRecordIndex );
       
   893         delete iapRecord;
       
   894         iapRecord = NULL;
       
   895 
       
   896         aClientPluginInstance->iGenRecordArray.InsertL(
       
   897                 static_cast<CommsDat::CCDRecordBase*>( tempIapRecord ),
       
   898                 KIapRecordIndex );
       
   899 
       
   900         CleanupStack::Pop( tempIapRecord );
       
   901         }
       
   902     else
       
   903         {
       
   904         delete iIapRecord;
       
   905         iIapRecord = NULL;
       
   906         iIapRecord = static_cast<CCDIAPRecord*>(
       
   907                 CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) );
       
   908         CopyRecordFieldsL( *iapRecord, *iIapRecord );
       
   909 
       
   910         iIapRecord->SetElementId( iapRecord->ElementId() );
       
   911         iIapRecord->ModifyL( iSession );
       
   912         }
       
   913 
       
   914     OstTraceFunctionExit0( CCMPLUGINBASEENG_UPDATEIAPRECORDL_EXIT );
       
   915     }
       
   916 
       
   917 // ---------------------------------------------------------------------------
       
   918 // CCmPluginBaseEng::UpdateProxyRecordL
       
   919 // ---------------------------------------------------------------------------
       
   920 //
       
   921 void CCmPluginBaseEng::UpdateProxyRecordL(
       
   922         CCmClientPluginInstance* aClientPluginInstance )
       
   923     {
       
   924     OstTraceFunctionEntry0( CCMPLUGINBASEENG_UPDATEPROXYRECORDL_ENTRY );
       
   925 
       
   926     CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(
       
   927             aClientPluginInstance->iGenRecordArray[KIapRecordIndex] );
       
   928 
       
   929     CCDProxiesRecord* proxyRecord = static_cast<CCDProxiesRecord*>(
       
   930             aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] );
       
   931 
       
   932     if ( !iapRecord || !proxyRecord )
       
   933         {
       
   934         User::Leave( KErrCorrupt );
       
   935         }
       
   936 
       
   937     CopyAttributes( iapRecord, proxyRecord );
       
   938     CheckIfNameModifiedL( iapRecord, proxyRecord );
       
   939 
       
   940     delete iProxyRecord;
       
   941     iProxyRecord = NULL;
       
   942     iProxyRecord = static_cast<CCDProxiesRecord*>(
       
   943             CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) );
       
   944     CopyRecordFieldsL( *proxyRecord, *iProxyRecord );
       
   945     iProxyRecord->SetElementId( proxyRecord->ElementId() );
       
   946 
       
   947     if ( !iProxyRecord->RecordId() )
       
   948         {
       
   949         // New proxy setting -> create new record.
       
   950         iProxyRecord->iService = iServiceRecord->RecordId();
       
   951         iProxyRecord->iServiceType.SetL( iIapRecord->iServiceType );
       
   952 
       
   953         // By default protocol is set to "http".
       
   954         if ( TPtrC( proxyRecord->iProtocolName ).Length() == 0 )
       
   955             {
       
   956             iProxyRecord->iProtocolName.SetL( KDefProxyProtocolName );
       
   957             }
       
   958 
       
   959         iProxyRecord->SetRecordId( KCDNewRecordRequest );
       
   960         iProxyRecord->StoreL( iSession );
       
   961         // Have to be "reloaded" to get possible default values from template records.
       
   962         iProxyRecord->LoadL( iSession );
       
   963 
       
   964         proxyRecord->SetElementId( iProxyRecord->ElementId() );
       
   965         }
       
   966     else
       
   967         // Already existing record -> update only.
       
   968         {
       
   969         iProxyRecord->ModifyL( iSession );
       
   970         }
       
   971     CopyRecordFieldsL( *iProxyRecord, *proxyRecord );
       
   972 
       
   973     OstTraceFunctionExit0( CCMPLUGINBASEENG_UPDATEPROXYRECORDL_EXIT );
       
   974     }
       
   975 
       
   976 // ---------------------------------------------------------------------------
       
   977 // CCmPluginBaseEng::UpdateMetadataRecordL
       
   978 // ---------------------------------------------------------------------------
       
   979 //
       
   980 void CCmPluginBaseEng::UpdateMetadataRecordL(
       
   981         CCmClientPluginInstance* aClientPluginInstance )
       
   982     {
       
   983     OstTraceFunctionEntry0( CCMPLUGINBASEENG_UPDATEMETADATARECORDL_ENTRY );
       
   984 
       
   985     CCDIAPRecord* clientIapRecord = static_cast<CCDIAPRecord*>(
       
   986             aClientPluginInstance->iGenRecordArray[KIapRecordIndex] );
       
   987 
       
   988     CCDIAPMetadataRecord* clientMetadataRecord = static_cast<CCDIAPMetadataRecord*>(
       
   989             aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] );
       
   990 
       
   991     // Adjust client side metadata record attributes and name if needed.
       
   992     CopyAttributes( clientIapRecord, clientMetadataRecord );
       
   993     CheckIfNameModifiedL( clientIapRecord, clientMetadataRecord );
       
   994 
       
   995     // Make a copy of client's metadata record and save to database.
       
   996     delete iMetaDataRecord;
       
   997     iMetaDataRecord = NULL;
       
   998     iMetaDataRecord = new( ELeave ) CCDIAPMetadataRecord( iMetadataTableId );
       
   999 
       
  1000     CopyRecordFieldsL( *clientMetadataRecord, *iMetaDataRecord );
       
  1001 
       
  1002     iMetaDataRecord->SetElementId( clientMetadataRecord->ElementId() );
       
  1003 
       
  1004     if ( !iMetaDataRecord->RecordId() )
       
  1005         {
       
  1006         iMetaDataRecord->iIAP = IAPRecordElementId();
       
  1007         iMetaDataRecord->SetRecordId( KCDNewRecordRequest );
       
  1008         iMetaDataRecord->StoreL( iSession );
       
  1009         // Have to be "reloaded" to get possible default values from template records.
       
  1010         iMetaDataRecord->LoadL( iSession );
       
  1011 
       
  1012         clientMetadataRecord->SetElementId( iMetaDataRecord->ElementId() );
       
  1013         }
       
  1014     else
       
  1015         {
       
  1016         iMetaDataRecord->ModifyL( iSession );
       
  1017         }
       
  1018     CopyRecordFieldsL( *iMetaDataRecord, *clientMetadataRecord );
       
  1019 
       
  1020     OstTraceFunctionExit0( CCMPLUGINBASEENG_UPDATEMETADATARECORDL_EXIT );
       
  1021     }
       
  1022 
       
  1023 // ---------------------------------------------------------------------------
       
  1024 // CCmPluginBaseEng::UpdateServiceRecordL
       
  1025 // ---------------------------------------------------------------------------
       
  1026 //
       
  1027 void CCmPluginBaseEng::UpdateServiceRecordL(
       
  1028     CCmClientPluginInstance* aClientPluginInstance )
       
  1029     {
       
  1030     OstTraceFunctionEntry0( CCMPLUGINBASEENG_UPDATESERVICERECORDL_ENTRY );
       
  1031 
       
  1032     CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(
       
  1033             aClientPluginInstance->iGenRecordArray[KIapRecordIndex] );
       
  1034 
       
  1035     CCDRecordBase* serviceRecord = static_cast<CCDRecordBase*>(
       
  1036             aClientPluginInstance->iGenRecordArray[KServiceRecordIndex] );
       
  1037 
       
  1038     CopyAttributes( iapRecord, serviceRecord );
       
  1039 
       
  1040     UpdateServiceRecordL(
       
  1041             aClientPluginInstance->iGenRecordArray,
       
  1042             aClientPluginInstance->iBearerSpecRecordArray );
       
  1043 
       
  1044     OstTraceFunctionExit0( CCMPLUGINBASEENG_UPDATESERVICERECORDL_EXIT );
       
  1045     }
       
  1046 
       
  1047 // ---------------------------------------------------------------------------
       
  1048 // CCmPluginBaseEng::UpdateNetworkRecordL
       
  1049 // ---------------------------------------------------------------------------
       
  1050 //
       
  1051 void CCmPluginBaseEng::UpdateNetworkRecordL(
       
  1052         CCmClientPluginInstance* aClientPluginInstance )
       
  1053     {
       
  1054     OstTraceFunctionEntry0( CCMPLUGINBASEENG_UPDATENETWORKRECORDL_ENTRY );
       
  1055 
       
  1056     CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(
       
  1057             aClientPluginInstance->iGenRecordArray[KIapRecordIndex] );
       
  1058 
       
  1059     CCDNetworkRecord* networkRecord = static_cast<CCDNetworkRecord*>(
       
  1060             aClientPluginInstance->iGenRecordArray[KNetworkRecordIndex] );
       
  1061 
       
  1062     CopyAttributes( iapRecord, networkRecord );
       
  1063 
       
  1064     delete iNetworkRecord;
       
  1065     iNetworkRecord = NULL;
       
  1066 
       
  1067     CheckIfNameModifiedL( iapRecord, networkRecord );
       
  1068 
       
  1069     iNetworkRecord = static_cast<CCDNetworkRecord*>(
       
  1070             CCDRecordBase::RecordFactoryL( KCDTIdNetworkRecord ) );
       
  1071     CopyRecordFieldsL( *networkRecord, *iNetworkRecord );
       
  1072 
       
  1073     iNetworkRecord->SetElementId( networkRecord->ElementId() );
       
  1074 
       
  1075     if ( !iNetworkRecord->RecordId() )
       
  1076         {
       
  1077         iNetworkRecord->SetRecordId( KCDNewRecordRequest );
       
  1078         iNetworkRecord->StoreL( iSession );
       
  1079         // Have to be "reloaded" to get possible default values from template records.
       
  1080         iNetworkRecord->LoadL( iSession );
       
  1081 
       
  1082         networkRecord->SetElementId( iNetworkRecord->ElementId() );
       
  1083         }
       
  1084     else
       
  1085         {
       
  1086         iNetworkRecord->ModifyL( iSession );
       
  1087         }
       
  1088     CopyRecordFieldsL( *iNetworkRecord, *networkRecord );
       
  1089 
       
  1090     OstTraceFunctionExit0( CCMPLUGINBASEENG_UPDATENETWORKRECORDL_EXIT );
       
  1091     }
       
  1092 
       
  1093 // ---------------------------------------------------------------------------
       
  1094 // CCmPluginBaseEng::UpdateLocationRecordL
       
  1095 // ---------------------------------------------------------------------------
       
  1096 //
       
  1097 void CCmPluginBaseEng::UpdateLocationRecordL(
       
  1098         CCmClientPluginInstance* /*aClientPluginInstance*/ )
       
  1099     {
       
  1100     OstTraceFunctionEntry0( CCMPLUGINBASEENG_UPDATELOCATIONRECORDL_ENTRY );
       
  1101     OstTraceFunctionExit0( CCMPLUGINBASEENG_UPDATELOCATIONRECORDL_EXIT );
       
  1102     }
       
  1103 
       
  1104 // ---------------------------------------------------------------------------
       
  1105 // CCmPluginBaseEng::UpdateConnPrefSettingL
       
  1106 // ---------------------------------------------------------------------------
       
  1107 //
       
  1108 void CCmPluginBaseEng::UpdateConnPrefSettingL()
       
  1109     {
       
  1110     OstTraceFunctionEntry0( CCMPLUGINBASEENG_UPDATECONNPREFSETTINGL_ENTRY );
       
  1111     OstTraceFunctionExit0( CCMPLUGINBASEENG_UPDATECONNPREFSETTINGL_EXIT );
       
  1112     }
       
  1113 
       
  1114 // ---------------------------------------------------------------------------
       
  1115 // CCmPluginBaseEng::EnableProxyL
       
  1116 // ---------------------------------------------------------------------------
       
  1117 //
       
  1118 void CCmPluginBaseEng::EnableProxyL( TBool aEnable )
       
  1119     {
       
  1120     OstTraceFunctionEntry0( CCMPLUGINBASEENG_ENABLEPROXYL_ENTRY );
       
  1121 
       
  1122     if ( !iServiceRecord )
       
  1123         {
       
  1124         User::Leave( KErrNotSupported );
       
  1125         }
       
  1126 
       
  1127     if ( !iProxyRecord )
       
  1128         {
       
  1129         iProxyRecord = static_cast<CCDProxiesRecord*>(
       
  1130                 CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) );
       
  1131         }
       
  1132 
       
  1133     iProxyRecord->iUseProxyServer = aEnable;
       
  1134 
       
  1135     OstTraceFunctionExit0( CCMPLUGINBASEENG_ENABLEPROXYL_EXIT );
       
  1136     }
       
  1137 
       
  1138 // ---------------------------------------------------------------------------
       
  1139 // CCmPluginBaseEng::EnableLocationL
       
  1140 // ---------------------------------------------------------------------------
       
  1141 //
       
  1142 void CCmPluginBaseEng::EnableLocationL( TBool aEnable )
       
  1143     {
       
  1144     OstTraceFunctionEntry0( CCMPLUGINBASEENG_ENABLELOCATIONL_ENTRY );
       
  1145 
       
  1146     // Not supported anymore
       
  1147     iLocationEnabled = aEnable;
       
  1148 
       
  1149     OstTraceFunctionExit0( CCMPLUGINBASEENG_ENABLELOCATIONL_EXIT );
       
  1150     }
       
  1151 
       
  1152 // ---------------------------------------------------------------------------
       
  1153 // CCmPluginBaseEng::LoadWapRecordL
       
  1154 // ---------------------------------------------------------------------------
       
  1155 //
       
  1156 void CCmPluginBaseEng::LoadWapRecordL()
       
  1157     {
       
  1158     OstTraceFunctionEntry0( CCMPLUGINBASEENG_LOADWAPRECORDL_ENTRY );
       
  1159 
       
  1160     iWapIPBearerRecord = FindWAPRecordL();
       
  1161     if ( iWapIPBearerRecord )
       
  1162         {
       
  1163         CCDWAPAccessPointRecord *wapApRecord = static_cast<CCDWAPAccessPointRecord*>(
       
  1164                 CCDRecordBase::RecordFactoryL( KCDTIdWAPAccessPointRecord ) );
       
  1165 
       
  1166         CleanupStack::PushL( wapApRecord );
       
  1167 
       
  1168         wapApRecord->SetRecordId( iWapIPBearerRecord->iWAPAccessPointId );
       
  1169         TRAPD( err, wapApRecord->LoadL( iSession ) );
       
  1170         if ( err == KErrNotFound )
       
  1171             {
       
  1172             CleanupStack::PopAndDestroy( wapApRecord );
       
  1173 
       
  1174             wapApRecord = static_cast<CCDWAPAccessPointRecord*>(
       
  1175                     CCDRecordBase::RecordFactoryL( KCDTIdWAPAccessPointRecord ) );
       
  1176             }
       
  1177         else
       
  1178             {
       
  1179             User::LeaveIfError( err );
       
  1180 
       
  1181             CleanupStack::Pop( wapApRecord );
       
  1182             }
       
  1183 
       
  1184         iWapAPRecord = wapApRecord;
       
  1185         }
       
  1186     else
       
  1187         // No WAP record found -> create a new one
       
  1188         {
       
  1189         NewWapRecordL();
       
  1190         }
       
  1191 
       
  1192     OstTraceFunctionExit0( CCMPLUGINBASEENG_LOADWAPRECORDL_EXIT );
       
  1193     }
       
  1194 
       
  1195 // ---------------------------------------------------------------------------
       
  1196 // CCmPluginBaseEng::LoadMetadataRecordL
       
  1197 // ---------------------------------------------------------------------------
       
  1198 //
       
  1199 void CCmPluginBaseEng::LoadMetadataRecordL()
       
  1200     {
       
  1201     OstTraceFunctionEntry0( CCMPLUGINBASEENG_LOADSEAMLESSNESSRECORDL_ENTRY );
       
  1202 
       
  1203     iMetaDataRecord = FindMetadataRecordL();
       
  1204 
       
  1205     OstTraceFunctionExit0( CCMPLUGINBASEENG_LOADSEAMLESSNESSRECORDL_EXIT );
       
  1206     }
       
  1207 
       
  1208 // ---------------------------------------------------------------------------
       
  1209 // CCmPluginBaseEng::UpdateWapRecordL
       
  1210 // ---------------------------------------------------------------------------
       
  1211 //
       
  1212 void CCmPluginBaseEng::UpdateWapRecordL(
       
  1213         CCmClientPluginInstance* aClientPluginInstance )
       
  1214     {
       
  1215     OstTraceFunctionEntry0( CCMPLUGINBASEENG_UPDATEWAPRECORDL_ENTRY );
       
  1216 
       
  1217     delete iWapAPRecord;
       
  1218     iWapAPRecord = NULL;
       
  1219 
       
  1220     delete iWapIPBearerRecord;
       
  1221     iWapIPBearerRecord = NULL;
       
  1222 
       
  1223     CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(
       
  1224             aClientPluginInstance->iGenRecordArray[KIapRecordIndex] );
       
  1225 
       
  1226     CCDWAPAccessPointRecord* wapAPRecord = static_cast<CCDWAPAccessPointRecord*>(
       
  1227             aClientPluginInstance->iGenRecordArray[KWAPAPRecordIndex] );
       
  1228 
       
  1229     CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast<CCDWAPIPBearerRecord*>(
       
  1230             aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] );
       
  1231 
       
  1232     CopyAttributes( iapRecord, wapAPRecord );
       
  1233     CopyAttributes( iapRecord, wapIPBearerRecord );
       
  1234 
       
  1235     CheckIfNameModifiedL( iapRecord, wapAPRecord );
       
  1236     CheckIfNameModifiedL( iapRecord, wapIPBearerRecord );
       
  1237 
       
  1238     // WAP AP record
       
  1239     iWapAPRecord = static_cast<CCDWAPAccessPointRecord*>(
       
  1240             CCDRecordBase::RecordFactoryL( KCDTIdWAPAccessPointRecord ) );
       
  1241     CopyRecordFieldsL( *wapAPRecord, *iWapAPRecord );
       
  1242     iWapAPRecord->SetElementId( wapAPRecord->ElementId() );
       
  1243 
       
  1244     // WAP IP Bearer record
       
  1245     iWapIPBearerRecord =static_cast<CCDWAPIPBearerRecord*>(
       
  1246             CCDRecordBase::RecordFactoryL( KCDTIdWAPIPBearerRecord ) );
       
  1247     CopyRecordFieldsL( *wapIPBearerRecord, *iWapIPBearerRecord );
       
  1248     iWapIPBearerRecord->SetElementId( wapIPBearerRecord->ElementId() );
       
  1249 
       
  1250     if ( !iWapAPRecord->RecordId() )
       
  1251         {
       
  1252         iWapAPRecord->SetRecordId( KCDNewRecordRequest );
       
  1253         iWapAPRecord->StoreL(iSession );
       
  1254         // Have to be "reloaded" to get possible default values from template records.
       
  1255         iWapAPRecord->LoadL(iSession );
       
  1256 
       
  1257         wapAPRecord->SetElementId( iWapAPRecord->ElementId() );
       
  1258         }
       
  1259     else
       
  1260         {
       
  1261         iWapAPRecord->ModifyL( iSession );
       
  1262         }
       
  1263     CopyRecordFieldsL( *iWapAPRecord, *wapAPRecord );
       
  1264 
       
  1265     if ( !iWapIPBearerRecord->RecordId() )
       
  1266         {
       
  1267         iWapIPBearerRecord->iWAPAccessPointId = iWapAPRecord->RecordId();
       
  1268         iWapIPBearerRecord->iWAPIAP = iapRecord->RecordId();
       
  1269 
       
  1270         iWapIPBearerRecord->SetRecordId( KCDNewRecordRequest );
       
  1271         iWapIPBearerRecord->StoreL( iSession );
       
  1272         // Have to be "reloaded" to get possible default values from template records.
       
  1273         iWapIPBearerRecord->LoadL( iSession );
       
  1274 
       
  1275         wapIPBearerRecord->SetElementId( iWapIPBearerRecord->ElementId() );
       
  1276         }
       
  1277     else
       
  1278         {
       
  1279         iWapIPBearerRecord->ModifyL( iSession );
       
  1280         }
       
  1281     CopyRecordFieldsL( *iWapIPBearerRecord, *wapIPBearerRecord );
       
  1282 
       
  1283     OstTraceFunctionExit0( DUP1_CCMPLUGINBASEENG_UPDATEWAPRECORDL_EXIT );
       
  1284     }
       
  1285 
       
  1286 // ---------------------------------------------------------------------------
       
  1287 // CCmPluginBaseEng::NewWapRecordL
       
  1288 // ---------------------------------------------------------------------------
       
  1289 //
       
  1290 void CCmPluginBaseEng::NewWapRecordL()
       
  1291     {
       
  1292     OstTraceFunctionEntry0( CCMPLUGINBASEENG_NEWWAPRECORDL_ENTRY );
       
  1293 
       
  1294     if ( !iWapIPBearerRecord )
       
  1295         {
       
  1296         iWapIPBearerRecord = static_cast<CCDWAPIPBearerRecord*>(
       
  1297                 CCDRecordBase::RecordFactoryL( KCDTIdWAPIPBearerRecord ) );
       
  1298         iWapIPBearerRecord->iWAPProxyPort = 0;
       
  1299         iWapIPBearerRecord->iWAPWSPOption = ECmWapWspOptionConnectionOriented;
       
  1300         iWapIPBearerRecord->iWAPSecurity = EFalse;
       
  1301         }
       
  1302 
       
  1303     if ( !iWapAPRecord )
       
  1304         {
       
  1305         iWapAPRecord = static_cast<CCDWAPAccessPointRecord*>(
       
  1306                 CCDRecordBase::RecordFactoryL( KCDTIdWAPAccessPointRecord ) );
       
  1307         // SMS bearer is not supported by this version.
       
  1308         iWapAPRecord->iWAPCurrentBearer.SetL( TPtrC( KCDTypeNameWAPIPBearer ) );
       
  1309         }
       
  1310 
       
  1311     OstTraceFunctionExit0( CCMPLUGINBASEENG_NEWWAPRECORDL_EXIT );
       
  1312     }
       
  1313 
       
  1314 // ---------------------------------------------------------------------------
       
  1315 // CCmPluginBaseEng::NewMetadataRecordL
       
  1316 // ---------------------------------------------------------------------------
       
  1317 //
       
  1318 CCDIAPMetadataRecord* CCmPluginBaseEng::NewMetadataRecordL( TBool aSetDef )
       
  1319     {
       
  1320     OstTraceFunctionEntry0( CCMPLUGINBASEENG_NEWSEAMLESSNESSRECORDL_ENTRY );
       
  1321 
       
  1322     CCDIAPMetadataRecord* record = new( ELeave ) CCDIAPMetadataRecord( iMetadataTableId );
       
  1323 
       
  1324     if ( aSetDef )
       
  1325         {
       
  1326         TRAPD( err, record->iSeamlessness = GetBearerInfoIntL( ECmSeamlessnessLevel ) );
       
  1327         if ( err )
       
  1328             {
       
  1329             record->iSeamlessness = ESeamlessnessConfirmFirst;
       
  1330             }
       
  1331         }
       
  1332 
       
  1333     OstTraceFunctionExit0( CCMPLUGINBASEENG_NEWSEAMLESSNESSRECORDL_EXIT );
       
  1334     return record;
       
  1335     }
       
  1336 
       
  1337 // ---------------------------------------------------------------------------
       
  1338 // CCmPluginBaseEng::SetAttribute
       
  1339 // ---------------------------------------------------------------------------
       
  1340 //
       
  1341 void CCmPluginBaseEng::SetAttribute(
       
  1342         CCDRecordBase* aRecord,
       
  1343         TUint32 aAttribute,
       
  1344         TBool aSet )
       
  1345     {
       
  1346     OstTraceFunctionEntry0( CCMPLUGINBASEENG_SETATTRIBUTE_ENTRY );
       
  1347 
       
  1348     if ( aSet )
       
  1349         {
       
  1350         aRecord->SetAttributes( aAttribute );
       
  1351         }
       
  1352     else
       
  1353         {
       
  1354         aRecord->ClearAttributes( aAttribute );
       
  1355         }
       
  1356 
       
  1357     OstTraceFunctionExit0( CCMPLUGINBASEENG_SETATTRIBUTE_EXIT );
       
  1358     }
       
  1359 
       
  1360 // ---------------------------------------------------------------------------
       
  1361 // CCmPluginBaseEng::CopyAttributes
       
  1362 // ---------------------------------------------------------------------------
       
  1363 //
       
  1364 void CCmPluginBaseEng::CopyAttributes(
       
  1365         CCDRecordBase* aSrcRecord,
       
  1366         CCDRecordBase* aDstRecord )
       
  1367     {
       
  1368     OstTraceFunctionEntry0( CCMPLUGINBASEENG_COPYATTRIBUTES_ENTRY );
       
  1369 
       
  1370     if ( !aSrcRecord || !aDstRecord )
       
  1371         {
       
  1372         OstTraceFunctionExit0( CCMPLUGINBASEENG_COPYATTRIBUTES_EXIT );
       
  1373         return;
       
  1374         }
       
  1375 
       
  1376     // Clear the target record attributes first.
       
  1377     aDstRecord->ClearAttributes( aDstRecord->Attributes() );
       
  1378     aDstRecord->SetAttributes( aSrcRecord->Attributes() );
       
  1379 
       
  1380     OstTraceFunctionExit0( DUP1_CCMPLUGINBASEENG_COPYATTRIBUTES_EXIT );
       
  1381     }
       
  1382 
       
  1383 // ---------------------------------------------------------------------------
       
  1384 // CCmPluginBaseEng::FindWAPRecordL
       
  1385 // ---------------------------------------------------------------------------
       
  1386 //
       
  1387 CCDWAPIPBearerRecord* CCmPluginBaseEng::FindWAPRecordL()
       
  1388     {
       
  1389     OstTraceFunctionEntry0( CCMPLUGINBASEENG_FINDWAPRECORDL_ENTRY );
       
  1390 
       
  1391     CMDBRecordSet<CCDWAPIPBearerRecord>* wapRS =
       
  1392             new( ELeave ) CMDBRecordSet<CCDWAPIPBearerRecord>( KCDTIdWAPIPBearerRecord );
       
  1393     CleanupStack::PushL( wapRS );
       
  1394 
       
  1395     CCDWAPIPBearerRecord* wapBearerRecord = static_cast<CCDWAPIPBearerRecord*>(
       
  1396             CCDRecordBase::RecordFactoryL( KCDTIdWAPIPBearerRecord ) );
       
  1397 
       
  1398     CleanupStack::PushL( wapBearerRecord );
       
  1399 
       
  1400     wapBearerRecord->iWAPIAP = iCmId;
       
  1401     wapRS->iRecords.AppendL( wapBearerRecord );
       
  1402 
       
  1403     CleanupStack::Pop( wapBearerRecord );
       
  1404     wapBearerRecord = NULL;
       
  1405 
       
  1406     if ( wapRS->FindL( iSession ) )
       
  1407         {
       
  1408         wapBearerRecord = static_cast<CCDWAPIPBearerRecord*>( wapRS->iRecords[0] );
       
  1409 
       
  1410         // Take over the ownership of this record.
       
  1411         wapRS->iRecords.Remove( 0 );
       
  1412         }
       
  1413 
       
  1414     CleanupStack::PopAndDestroy( wapRS );
       
  1415 
       
  1416     OstTraceFunctionExit0( CCMPLUGINBASEENG_FINDWAPRECORDL_EXIT );
       
  1417     return wapBearerRecord;
       
  1418     }
       
  1419 
       
  1420 // ---------------------------------------------------------------------------
       
  1421 // CCmPluginBaseEng::FindSeamlessnessRecordL
       
  1422 // ---------------------------------------------------------------------------
       
  1423 //
       
  1424 CCDIAPMetadataRecord* CCmPluginBaseEng::FindMetadataRecordL()
       
  1425     {
       
  1426     OstTraceFunctionEntry0( CCMPLUGINBASEENG_FINDSEAMLESSNESSRECORDL_ENTRY );
       
  1427 
       
  1428     CMDBRecordSet<CCDIAPMetadataRecord>* metadataRecordSet =
       
  1429             new( ELeave ) CMDBRecordSet<CCDIAPMetadataRecord>( iMetadataTableId );
       
  1430     CleanupStack::PushL( metadataRecordSet );
       
  1431 
       
  1432     CCDIAPMetadataRecord* metadataRecord =
       
  1433             new( ELeave ) CCDIAPMetadataRecord( iMetadataTableId );
       
  1434     CleanupStack::PushL( metadataRecord );
       
  1435 
       
  1436     metadataRecord->iIAP = IAPRecordElementId();
       
  1437     metadataRecordSet->iRecords.AppendL( metadataRecord );
       
  1438 
       
  1439     CleanupStack::Pop( metadataRecord );
       
  1440     metadataRecord = NULL;
       
  1441 
       
  1442     if ( metadataRecordSet->FindL( iSession ) )
       
  1443         {
       
  1444         CMDBRecordBase* record = metadataRecordSet->iRecords[0];
       
  1445 
       
  1446         metadataRecord = NewMetadataRecordL( EFalse );
       
  1447         metadataRecord->SetRecordId( record->RecordId() );
       
  1448 
       
  1449         // This can leave only in case of OOM.
       
  1450         metadataRecord->LoadL( iSession );
       
  1451         }
       
  1452     else
       
  1453         {
       
  1454         metadataRecord = NewMetadataRecordL( ETrue );
       
  1455         }
       
  1456 
       
  1457     CleanupStack::PopAndDestroy( metadataRecordSet );
       
  1458 
       
  1459     OstTraceFunctionExit0( CCMPLUGINBASEENG_FINDSEAMLESSNESSRECORDL_EXIT );
       
  1460     return metadataRecord;
       
  1461     }
       
  1462 
       
  1463 // ---------------------------------------------------------------------------
       
  1464 // CCmPluginBaseEng::DoMakeValidNameL
       
  1465 // ---------------------------------------------------------------------------
       
  1466 //
       
  1467 HBufC* CCmPluginBaseEng::DoMakeValidNameL(
       
  1468         const TDesC& aName,
       
  1469         const TUint32& aIapId )
       
  1470     {
       
  1471     OstTraceFunctionEntry0( CCMPLUGINBASEENG_DOMAKEVALIDNAMEL_ENTRY );
       
  1472 
       
  1473     const TInt decimalBase = 10;
       
  1474     TBool changed( EFalse );
       
  1475     HBufC* temp = HBufC::NewLC( KApMaxConnNameLength );
       
  1476     HBufC* temp2 = HBufC::NewLC( KApMaxConnNameLength );
       
  1477 
       
  1478     HBufC* corrname = EnsureMaxLengthLC( aName, changed );
       
  1479     *temp = *corrname;
       
  1480     TInt postfix( 0 );
       
  1481     TInt pf( 0 );
       
  1482     TInt i( 0 );
       
  1483     TBool valid ( EFalse );
       
  1484 
       
  1485     TPtrC prefix = GetPrefix( *corrname );
       
  1486 
       
  1487     postfix = GetPostfix( *temp, prefix );
       
  1488     postfix = -1;
       
  1489     do
       
  1490         {
       
  1491         valid = IsValidNameL( *temp, aIapId );
       
  1492         if ( !valid )
       
  1493             {
       
  1494             changed = ETrue;
       
  1495             postfix++;
       
  1496             // Check the length of postfix, check text length accordingly.
       
  1497             pf = postfix;
       
  1498             for ( i = 1; i < decimalBase; i++ )
       
  1499                 {
       
  1500                 pf /= decimalBase;
       
  1501                 if ( !pf )
       
  1502                     break;
       
  1503                 }
       
  1504             TPtr sgdptr( temp->Des() );
       
  1505             TPtr sgdptr2( temp2->Des() );
       
  1506             if ( postfix )
       
  1507                 {
       
  1508                 if ( postfix < decimalBase )
       
  1509                     {
       
  1510                     sgdptr2 = prefix.Left( KApMaxConnNameLength - i - 3 );
       
  1511                     }
       
  1512                 else
       
  1513                     {
       
  1514                     sgdptr2 = prefix.Left( KApMaxConnNameLength - i - 2 );
       
  1515                     }
       
  1516                 }
       
  1517             else
       
  1518                 {
       
  1519                 sgdptr2 = prefix.Left( KApMaxConnNameLength );
       
  1520                 }
       
  1521             if ( postfix )
       
  1522                 {
       
  1523                 TBuf<KMaxPostfixLength> postfixString;
       
  1524                 if ( postfix >= decimalBase )
       
  1525                     {
       
  1526                     postfixString.Format( KFormatLargePostfix, postfix );
       
  1527 //     TODO:               AknTextUtils::LanguageSpecificNumberConversion( postfixString );
       
  1528                     }
       
  1529                 else
       
  1530                     {
       
  1531                     postfixString.Format( KFormatPostfix, postfix );
       
  1532 //     TODO:               AknTextUtils::LanguageSpecificNumberConversion( postfixString );
       
  1533                     }
       
  1534                 sgdptr.Format( KFormatNameWithPostfix, &sgdptr2, &postfixString );
       
  1535                 }
       
  1536             else
       
  1537                 {
       
  1538                 sgdptr.Format( KFormatNoPostfix, &sgdptr2 );
       
  1539                 }
       
  1540             }
       
  1541         } while ( !valid );
       
  1542 
       
  1543     CleanupStack::PopAndDestroy( corrname );
       
  1544     CleanupStack::PopAndDestroy( temp2 );
       
  1545 
       
  1546     if ( changed )
       
  1547         {
       
  1548         CleanupStack::Pop( temp );
       
  1549         }
       
  1550     else
       
  1551         {
       
  1552         CleanupStack::PopAndDestroy( temp );
       
  1553         temp = NULL;
       
  1554         }
       
  1555 
       
  1556     OstTraceFunctionExit0( CCMPLUGINBASEENG_DOMAKEVALIDNAMEL_EXIT );
       
  1557     return temp;
       
  1558     }
       
  1559 
       
  1560 // ---------------------------------------------------------------------------
       
  1561 // CCmPluginBaseEng::EnsureMaxLengthLC
       
  1562 // ---------------------------------------------------------------------------
       
  1563 //
       
  1564 HBufC* CCmPluginBaseEng::EnsureMaxLengthLC(
       
  1565         const TDesC& aName,
       
  1566         TBool& aChanged )
       
  1567     {
       
  1568     OstTraceFunctionEntry0( CCMPLUGINBASEENG_ENSUREMAXLENGTHLC_ENTRY );
       
  1569 
       
  1570     TInt length = aName.Length();
       
  1571 
       
  1572     aChanged = EFalse;
       
  1573 
       
  1574     if ( !length )
       
  1575         {
       
  1576         // Name is required.
       
  1577         User::Leave( KErrArgument );
       
  1578         }
       
  1579 
       
  1580     HBufC* corrname;
       
  1581     if ( KApMaxConnNameLength < length )
       
  1582         {
       
  1583         // Name too long, truncate.
       
  1584         corrname = aName.Left( KApMaxConnNameLength ).AllocLC();
       
  1585         aChanged = ETrue;
       
  1586         }
       
  1587     else
       
  1588         {
       
  1589         corrname = aName.AllocLC();
       
  1590         corrname->Des().Trim();
       
  1591         if ( corrname->Length() == 0 )
       
  1592             {
       
  1593             User::Leave( KErrArgument );
       
  1594             }
       
  1595         // Comes here only if name is valid.
       
  1596         if ( corrname->Length() != aName.Length() )
       
  1597             {
       
  1598             aChanged = ETrue;
       
  1599             }
       
  1600         }
       
  1601 
       
  1602     OstTraceFunctionExit0( CCMPLUGINBASEENG_ENSUREMAXLENGTHLC_EXIT );
       
  1603     return corrname;
       
  1604     }
       
  1605 
       
  1606 // ---------------------------------------------------------------------------
       
  1607 // Given aName in the format <prefix> or <prefix><brace><integer><brace>,
       
  1608 // return a pointer to the leading part.
       
  1609 // That is, if there is trailing <space><integer>,
       
  1610 // then that is excluded; if there is no trailing part, then the original
       
  1611 // decriptor is returned.
       
  1612 // Examples:
       
  1613 //   - "Foo" returns "Foo";
       
  1614 //   - "Foo 12" returns "Foo 12";
       
  1615 //   - "Foo(12)" returns "Foo";
       
  1616 //   - "Foo 12 (34)" returns "Foo 12 ";
       
  1617 //   - "Foo bar" returns "Foo bar";
       
  1618 //   - "Foo " returns "Foo ".
       
  1619 // ---------------------------------------------------------------------------
       
  1620 TPtrC CCmPluginBaseEng::GetPrefix( const TDesC& aName )
       
  1621     {
       
  1622     OstTraceFunctionEntry0( CCMPLUGINBASEENG_GETPREFIX_ENTRY );
       
  1623 
       
  1624     TPtrC prefix = aName;
       
  1625     TInt lastBrace = aName.LocateReverse('(');
       
  1626     if ( lastBrace != KErrNotFound )
       
  1627         {
       
  1628         // aName looks like "<prefix><brace><something>".
       
  1629         // See if <something> is an integer number.
       
  1630         TPtrC num = aName.Right( aName.Length() - lastBrace - 1 );
       
  1631         TInt val;
       
  1632         TLex lex( num );
       
  1633         if ( lex.Val( val ) == KErrNone )
       
  1634             {
       
  1635             // Yes, the trailer is an integer.
       
  1636             prefix.Set( aName.Left( lastBrace ) );
       
  1637             }
       
  1638         }
       
  1639 
       
  1640     OstTraceFunctionExit0( CCMPLUGINBASEENG_GETPREFIX_EXIT );
       
  1641     return prefix;
       
  1642     }
       
  1643 
       
  1644 
       
  1645 // ---------------------------------------------------------------------------
       
  1646 // If aName is constructed from aPrefix with a postfix, get the numeric
       
  1647 // value of the postfix, e.g:
       
  1648 //   - GetPostfix( "Foo (3)", "Foo" ) == 3
       
  1649 //   - GetPostfix( "Foo 23 (45)", "Foo 23" ) == 45
       
  1650 // If aName is the same as aPrefix, return 0, e.g.:
       
  1651 //   - GetPostfix( "Foo", "Foo" ) == 0
       
  1652 // If aName is not constructed from aPrefix, return -1, e.g.:
       
  1653 //   - GetPostfix( "Foobar", "Foo" ) == -1
       
  1654 //   - GetPostfix( "Fo 23 45", "Foo" ) == -1
       
  1655 // ---------------------------------------------------------------------------
       
  1656 TInt CCmPluginBaseEng::GetPostfix( const TDesC& aName, const TDesC& aPrefix )
       
  1657     {
       
  1658     OstTraceFunctionEntry0( CCMPLUGINBASEENG_GETPOSTFIX_ENTRY );
       
  1659 
       
  1660     TInt postfix( KErrNotFound );
       
  1661     TInt nameLength = aName.Length();
       
  1662     TInt prefixLength = aPrefix.Length();
       
  1663     if ( nameLength >= prefixLength && aName.FindF( aPrefix ) == 0 )
       
  1664         {
       
  1665         // aName is longer or equal length, and
       
  1666         // aPrefix can be found in the beginning of aName.
       
  1667         if ( nameLength == prefixLength )
       
  1668             {
       
  1669             // They have the same length; they equal.
       
  1670             postfix = 0;
       
  1671             }
       
  1672         else
       
  1673             {
       
  1674             if ( prefixLength > 0 )
       
  1675                 {
       
  1676                 if ( aName[ prefixLength ] == '(' )
       
  1677                     {
       
  1678                     // (Now we know that aName is longer than aPrefix.)
       
  1679                     // aName looks like "aPrefix<brace><something>".
       
  1680                     // See if <something> is an integer number.
       
  1681                     TPtrC num = aName.Right( nameLength - prefixLength - 1 );
       
  1682                         TBuf< KApMaxConnNameLength > pf;
       
  1683                     pf = num;
       
  1684 // TODO                    AknTextUtils::ConvertDigitsTo( pf, EDigitTypeWestern );
       
  1685                     TInt val;
       
  1686                     TLex lex( pf );
       
  1687                     if ( lex.Val( val ) == KErrNone )
       
  1688                         {
       
  1689                         // Yes, the trailer is an integer.
       
  1690                         if ( val > 0 )
       
  1691                             {
       
  1692                             postfix = val;
       
  1693                             }
       
  1694                         else
       
  1695                             {
       
  1696                             // signal that it is invalid...
       
  1697                             postfix = -1;
       
  1698                             }
       
  1699                         }
       
  1700                     }
       
  1701                 }
       
  1702             else
       
  1703                 {
       
  1704                 postfix = -1;
       
  1705                 }
       
  1706             }
       
  1707         }
       
  1708 
       
  1709     OstTraceFunctionExit0( CCMPLUGINBASEENG_GETPOSTFIX_EXIT );
       
  1710     return postfix;
       
  1711     }
       
  1712 
       
  1713 // ---------------------------------------------------------------------------
       
  1714 // CCmPluginBaseEng::IsValidNameL
       
  1715 // ---------------------------------------------------------------------------
       
  1716 //
       
  1717 TBool CCmPluginBaseEng::IsValidNameL(
       
  1718         const TDesC& aNameText,
       
  1719         const TUint32& aIapId )
       
  1720     {
       
  1721     OstTraceFunctionEntry0( CCMPLUGINBASEENG_ISVALIDNAMEL_ENTRY );
       
  1722 
       
  1723     TBool retVal( ETrue );
       
  1724 
       
  1725     CMDBRecordSet<CCDIAPRecord>* iapRS =
       
  1726             new( ELeave ) CMDBRecordSet<CCDIAPRecord>(KCDTIdIAPRecord);
       
  1727     CleanupStack::PushL(iapRS);
       
  1728 
       
  1729     CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(
       
  1730             CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) );
       
  1731     CleanupStack::PushL( iapRecord );
       
  1732 
       
  1733     // Prime record.
       
  1734     iapRecord->iRecordName.SetL( aNameText );
       
  1735     iapRS->iRecords.AppendL( iapRecord );
       
  1736     CleanupStack::Pop( iapRecord );
       
  1737     iapRecord = NULL;
       
  1738 
       
  1739     if ( iapRS->FindL( iSession ) )
       
  1740         {
       
  1741         if ( iCmId )
       
  1742             {
       
  1743             // This is not a new CM.
       
  1744             for ( TInt i = 0; i < iapRS->iRecords.Count(); ++i )
       
  1745                 {
       
  1746                 if ( iapRS->iRecords[i]->RecordId() != aIapId )
       
  1747                     {
       
  1748                     // Duplication because it's not our name.
       
  1749                     retVal = EFalse;
       
  1750                     break;
       
  1751                     }
       
  1752                 }
       
  1753             }
       
  1754         else
       
  1755             {
       
  1756             // New CM -> any occurence is a duplication.
       
  1757             retVal = EFalse;
       
  1758             }
       
  1759         }
       
  1760 
       
  1761     CleanupStack::PopAndDestroy( iapRS );
       
  1762 
       
  1763     OstTraceFunctionExit0( CCMPLUGINBASEENG_ISVALIDNAMEL_EXIT );
       
  1764     return retVal;
       
  1765     }
       
  1766 
       
  1767 // ---------------------------------------------------------------------------
       
  1768 // CCmPluginBaseEng::EscapeTextLC
       
  1769 // ---------------------------------------------------------------------------
       
  1770 //
       
  1771 HBufC* CCmPluginBaseEng::EscapeTextLC( const TDesC& aLiteral )
       
  1772     {
       
  1773     OstTraceFunctionEntry0( CCMPLUGINBASEENG_ESCAPETEXTLC_ENTRY );
       
  1774 
       
  1775     TInt l( aLiteral.Length() );
       
  1776     //> 2*, to ensure correct esc. even if ALL chars are quotes...
       
  1777     HBufC* retbuf = HBufC::NewLC( 2*l );
       
  1778     TPtr ret = retbuf->Des();
       
  1779     TUint quote( '\'' );  // TChar gives warnings in THUMB & ARMI
       
  1780     TInt i( 0 );
       
  1781 
       
  1782     for ( i = 0; i < l; i++ )
       
  1783         {
       
  1784         ret.Append( aLiteral[i] );
       
  1785         if ( aLiteral[i] == quote )
       
  1786             {
       
  1787             // Duplicate quote.
       
  1788             ret.Append( quote );
       
  1789             }
       
  1790         }
       
  1791 
       
  1792     OstTraceFunctionExit0( CCMPLUGINBASEENG_ESCAPETEXTLC_EXIT );
       
  1793     return retbuf;
       
  1794     }
       
  1795 
       
  1796 // ---------------------------------------------------------------------------
       
  1797 // CCmPluginBaseEng::SetDefaultNameL
       
  1798 // ---------------------------------------------------------------------------
       
  1799 //
       
  1800 void CCmPluginBaseEng::SetDefaultNameL( const TDesC& aName )
       
  1801     {
       
  1802     OstTraceFunctionEntry0( CCMPLUGINBASEENG_SETDEFAULTNAMEL_ENTRY );
       
  1803 
       
  1804     if ( iNamingMethod == ENamingNothing )
       
  1805         {
       
  1806         iIapRecord->iRecordName.SetL( aName );
       
  1807         }
       
  1808     else if ( iNamingMethod == ENamingUnique )
       
  1809         {
       
  1810         HBufC* newName = DoMakeValidNameL( aName, iCmId );
       
  1811 
       
  1812         if ( newName )
       
  1813             // Name converted to unique.
       
  1814             {
       
  1815             CleanupStack::PushL( newName );
       
  1816             iIapRecord->iRecordName.SetL( *newName );
       
  1817             CleanupStack::PopAndDestroy( newName );
       
  1818             }
       
  1819         else
       
  1820             {
       
  1821             iIapRecord->iRecordName.SetL( aName );
       
  1822             }
       
  1823         }
       
  1824     else if ( iNamingMethod == ENamingNotAccept )
       
  1825         {
       
  1826         if ( IsValidNameL( aName, iCmId ) )
       
  1827             {
       
  1828             iIapRecord->iRecordName.SetL( aName );
       
  1829             }
       
  1830         else
       
  1831             {
       
  1832             User::Leave( KErrArgument );
       
  1833             }
       
  1834         }
       
  1835     else
       
  1836         {
       
  1837         User::Leave( KErrCorrupt );
       
  1838         }
       
  1839 
       
  1840     OstTraceFunctionExit0( CCMPLUGINBASEENG_SETDEFAULTNAMEL_EXIT );
       
  1841     }
       
  1842 
       
  1843 // ---------------------------------------------------------------------------
       
  1844 // CCmPluginBaseEng::SetNameL
       
  1845 // ---------------------------------------------------------------------------
       
  1846 //
       
  1847 void CCmPluginBaseEng::SetNameL(
       
  1848         const TDesC& aName,
       
  1849         CommsDat::CCDRecordBase* aIapRecord,
       
  1850         const CMManager::TNamingMethod aNamingMethod )
       
  1851     {
       
  1852     OstTraceFunctionEntry0( CCMPLUGINBASEENG_SETNAMEL_ENTRY );
       
  1853 
       
  1854     if ( aNamingMethod == ENamingNothing )
       
  1855         {
       
  1856         aIapRecord->iRecordName.SetL( aName );
       
  1857         }
       
  1858     else if ( aNamingMethod == ENamingUnique )
       
  1859         {
       
  1860         TUint32 iapid = aIapRecord->RecordId();
       
  1861         HBufC* newName = DoMakeValidNameL( aName, iapid );
       
  1862 
       
  1863         if ( newName )
       
  1864             // Name converted to unique.
       
  1865             {
       
  1866             CleanupStack::PushL( newName );
       
  1867             aIapRecord->iRecordName.SetL( *newName );
       
  1868             CleanupStack::PopAndDestroy( newName );
       
  1869             }
       
  1870         else
       
  1871             {
       
  1872             aIapRecord->iRecordName.SetL( aName );
       
  1873             }
       
  1874         }
       
  1875     else if ( aNamingMethod == ENamingNotAccept )
       
  1876         {
       
  1877         if ( IsValidNameL( aName, aIapRecord->RecordId() ) )
       
  1878             {
       
  1879             aIapRecord->iRecordName.SetL( aName );
       
  1880             }
       
  1881         else
       
  1882             {
       
  1883             User::Leave( KErrArgument );
       
  1884             }
       
  1885         }
       
  1886     else
       
  1887         {
       
  1888         User::Leave( KErrCorrupt );
       
  1889         }
       
  1890 
       
  1891     OstTraceFunctionExit0( CCMPLUGINBASEENG_SETNAMEL_EXIT );
       
  1892     }
       
  1893 
       
  1894 // ---------------------------------------------------------------------------
       
  1895 // CCmPluginBaseEng::CheckIfNameModifiedL
       
  1896 // ---------------------------------------------------------------------------
       
  1897 EXPORT_C void CCmPluginBaseEng::CheckIfNameModifiedL(
       
  1898         CCDRecordBase* aSrcRecord,
       
  1899         CCDRecordBase* aDestRecord ) const
       
  1900     {
       
  1901     OstTraceFunctionEntry0( CCMPLUGINBASEENG_CHECKIFNAMEMODIFIEDL_ENTRY );
       
  1902 
       
  1903     if ( !aSrcRecord || !aDestRecord )
       
  1904         {
       
  1905         User::Leave( KErrCorrupt );
       
  1906         }
       
  1907 
       
  1908     if ( !TPtrC( aSrcRecord->iRecordName ).CompareF( TPtrC( aDestRecord->iRecordName ) ) )
       
  1909         {
       
  1910         // Names match.
       
  1911         OstTraceFunctionExit0( CCMPLUGINBASEENG_CHECKIFNAMEMODIFIEDL_EXIT );
       
  1912         return;
       
  1913         }
       
  1914 
       
  1915     aDestRecord->iRecordName.SetL( TPtrC( aSrcRecord->iRecordName ) );
       
  1916 
       
  1917     OstTraceFunctionExit0( DUP1_CCMPLUGINBASEENG_CHECKIFNAMEMODIFIEDL_EXIT );
       
  1918     }
       
  1919 
       
  1920 // ---------------------------------------------------------------------------
       
  1921 // CCmPluginBaseEng::IAPRecordElementId
       
  1922 // ---------------------------------------------------------------------------
       
  1923 TMDBElementId CCmPluginBaseEng::IAPRecordElementId() const
       
  1924     {
       
  1925     return ( KCDMaskShowField & iIapRecord->ElementId() );
       
  1926     }
       
  1927 
       
  1928 // ---------------------------------------------------------------------------
       
  1929 // CCmPluginBaseEng::IsProtected
       
  1930 // ---------------------------------------------------------------------------
       
  1931 TBool CCmPluginBaseEng::IsProtected() const
       
  1932     {
       
  1933     OstTraceFunctionEntry0( CCMPLUGINBASEENG_ISPROTECTED_ENTRY );
       
  1934 
       
  1935     return ( iIapRecord->Attributes() & ECDProtectedWrite );
       
  1936     }
       
  1937 
       
  1938 // ---------------------------------------------------------------------------
       
  1939 // CCmPluginBaseEng::GetLocationIdL
       
  1940 // ---------------------------------------------------------------------------
       
  1941 TUint32 CCmPluginBaseEng::GetLocationIdL() const
       
  1942     {
       
  1943     OstTraceFunctionEntry0( CCMPLUGINBASEENG_GETLOCATIONIDL_ENTRY );
       
  1944 
       
  1945     TUint32 locId( 0 );
       
  1946     CMDBRecordSet<CCDLocationRecord>* locRS =
       
  1947             new( ELeave ) CMDBRecordSet<CCDLocationRecord>( KCDTIdLocationRecord );
       
  1948     CleanupStack::PushL( locRS );
       
  1949 
       
  1950     CCDLocationRecord* locRecord = static_cast<CCDLocationRecord*>(
       
  1951             CCDRecordBase::RecordFactoryL( KCDTIdLocationRecord ) );
       
  1952     CleanupStack::PushL( locRecord );
       
  1953 
       
  1954     locRecord->iRecordName.SetL( KLocationName );
       
  1955     locRS->iRecords.AppendL( locRecord );
       
  1956     CleanupStack::Pop( locRecord );
       
  1957 
       
  1958     if ( locRS->FindL(iSession) )
       
  1959         {
       
  1960         locRecord = static_cast<CCDLocationRecord*>( locRS->iRecords[0] );
       
  1961         locId = locRecord->RecordId();
       
  1962         }
       
  1963     else
       
  1964         {
       
  1965         User::Leave( KErrNotFound ); //TODO, what to do if not found. Can we create it? need study.
       
  1966         }
       
  1967 
       
  1968     CleanupStack::PopAndDestroy( locRS );
       
  1969 
       
  1970     OstTraceFunctionExit0( CCMPLUGINBASEENG_GETLOCATIONIDL_EXIT );
       
  1971     return locId;
       
  1972     }
       
  1973 
       
  1974 // ---------------------------------------------------------------------------
       
  1975 // CCmPluginBaseEng::SetProxyServerNameL
       
  1976 // ---------------------------------------------------------------------------
       
  1977  void CCmPluginBaseEng::SetProxyServerNameL(
       
  1978          const TDesC& aProxyServer,
       
  1979          CCDRecordBase* aProxyRecord )
       
  1980     {
       
  1981     OstTraceFunctionEntry0( CCMPLUGINBASEENG_SETPROXYSERVERNAMEL_ENTRY );
       
  1982 
       
  1983     CCDProxiesRecord* proxyRecord = static_cast<CCDProxiesRecord*>( aProxyRecord );
       
  1984 
       
  1985     proxyRecord->iServerName.SetL( aProxyServer );
       
  1986     if ( !aProxyServer.Length() )
       
  1987         {
       
  1988         proxyRecord->iUseProxyServer = EFalse;
       
  1989         }
       
  1990     else
       
  1991         {
       
  1992         proxyRecord->iUseProxyServer = ETrue;
       
  1993         }
       
  1994 
       
  1995     OstTraceFunctionExit0( CCMPLUGINBASEENG_SETPROXYSERVERNAMEL_EXIT );
       
  1996     }
       
  1997 
       
  1998 // ---------------------------------------------------------------------------
       
  1999 // CCmPluginBaseEng::CheckDNSServerAddressL
       
  2000 // ---------------------------------------------------------------------------
       
  2001 //
       
  2002 EXPORT_C void CCmPluginBaseEng::CheckDNSServerAddressL(
       
  2003         TBool aIPv6,
       
  2004         CMDBField<TDesC>& aDNS1,
       
  2005         CMDBField<TDesC>& aDNS2,
       
  2006         CMDBField<TBool>& aDNSFromServer )
       
  2007     {
       
  2008     OstTraceFunctionEntry0( CCMPLUGINBASEENG_CHECKDNSSERVERADDRESSL_ENTRY );
       
  2009 
       
  2010     if ( !aDNSFromServer )
       
  2011         {
       
  2012         if ( aIPv6 )
       
  2013             {
       
  2014             if ( ClassifyIPv6Address( aDNS1 ) == EIPv6Unspecified )
       
  2015                 {
       
  2016                 if ( ClassifyIPv6Address( aDNS2 ) != EIPv6Unspecified )
       
  2017                     {
       
  2018                     aDNS1.SetL( aDNS2 );
       
  2019                     aDNS2.SetL( KDynamicIpv6Address );
       
  2020                     }
       
  2021                 else
       
  2022                     {
       
  2023                     // Both are unspecified.
       
  2024                     aDNSFromServer = ETrue;
       
  2025                     }
       
  2026                 }
       
  2027             }
       
  2028         else // IPv4
       
  2029             {
       
  2030             if ( IsUnspecifiedIPv4Address( aDNS1 ) )
       
  2031                 {
       
  2032                 if ( !IsUnspecifiedIPv4Address( aDNS2 ) )
       
  2033                     {
       
  2034                     aDNS1.SetL( aDNS2 );
       
  2035                     aDNS2.SetL( KUnspecifiedIPv4 );
       
  2036                     }
       
  2037                 else
       
  2038                     {
       
  2039                     // Both are unspecified.
       
  2040                     aDNSFromServer = ETrue;
       
  2041                     }
       
  2042                 }
       
  2043             }
       
  2044         }
       
  2045 
       
  2046     OstTraceFunctionExit0( DUP1_CCMPLUGINBASEENG_CHECKDNSSERVERADDRESSL_EXIT );
       
  2047     }
       
  2048 
       
  2049 //-----------------------------------------------------------------------------
       
  2050 // CCmPluginBaseEng::GetGenericCmRecordsL
       
  2051 // -----------------------------------------------------------------------------
       
  2052 EXPORT_C void CCmPluginBaseEng::GetPluginDataL(
       
  2053         CCmClientPluginInstance* aClientPluginInstance )
       
  2054     {
       
  2055     OstTraceFunctionEntry0( CCMPLUGINBASEENG_GETPLUGINDATAL_ENTRY );
       
  2056 
       
  2057     if ( !aClientPluginInstance )
       
  2058         {
       
  2059         User::Leave( KErrCorrupt );
       
  2060         }
       
  2061 
       
  2062     aClientPluginInstance->iGenRecordArray.ResetAndDestroy();
       
  2063     aClientPluginInstance->iBearerSpecRecordArray.ResetAndDestroy();
       
  2064 
       
  2065     aClientPluginInstance->iNamingMethod = iNamingMethod;
       
  2066     aClientPluginInstance->iLocationEnabled = iLocationEnabled;
       
  2067 
       
  2068     if ( iIapRecord )
       
  2069         {
       
  2070         CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(
       
  2071                 CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) );
       
  2072         CleanupStack::PushL( iapRecord );
       
  2073         CopyRecordFieldsL( *iIapRecord, *iapRecord );
       
  2074         iapRecord->SetElementId( iIapRecord->ElementId() );
       
  2075         aClientPluginInstance->iGenRecordArray.AppendL(
       
  2076                 static_cast<CommsDat::CCDRecordBase*>( iapRecord ) );
       
  2077         CleanupStack::Pop( iapRecord );
       
  2078         }
       
  2079     else
       
  2080         {
       
  2081         User::Leave( KErrNotFound );
       
  2082         }
       
  2083 
       
  2084     if ( iServiceRecord )
       
  2085         {
       
  2086         CCDRecordBase* serviceRecord = CopyServiceRecordL();
       
  2087         serviceRecord->SetElementId( iServiceRecord->ElementId() );
       
  2088         CleanupStack::PushL( serviceRecord );
       
  2089         aClientPluginInstance->iGenRecordArray.AppendL( serviceRecord );
       
  2090         CleanupStack::Pop( serviceRecord );
       
  2091         }
       
  2092     else
       
  2093         {
       
  2094         User::Leave( KErrNotFound );
       
  2095         }
       
  2096 
       
  2097     if ( iNetworkRecord )
       
  2098         {
       
  2099         CCDNetworkRecord* networkRecord = static_cast<CCDNetworkRecord*>(
       
  2100                 CCDRecordBase::RecordFactoryL( KCDTIdNetworkRecord ) );
       
  2101         CleanupStack::PushL( networkRecord );
       
  2102         CopyRecordFieldsL( *iNetworkRecord, *networkRecord );
       
  2103         networkRecord->SetElementId( iNetworkRecord->ElementId() );
       
  2104         aClientPluginInstance->iGenRecordArray.AppendL(
       
  2105                 static_cast<CommsDat::CCDRecordBase*>( networkRecord ) );
       
  2106         CleanupStack::Pop( networkRecord );
       
  2107         }
       
  2108     else
       
  2109         {
       
  2110         User::Leave( KErrNotFound );
       
  2111         }
       
  2112 
       
  2113     if ( iWapAPRecord )
       
  2114         {
       
  2115         CCDWAPAccessPointRecord* wapAPRecord = static_cast<CCDWAPAccessPointRecord*>(
       
  2116                 CCDRecordBase::RecordFactoryL( KCDTIdWAPAccessPointRecord ) );
       
  2117         CleanupStack::PushL( wapAPRecord );
       
  2118         CopyRecordFieldsL( *iWapAPRecord, *wapAPRecord );
       
  2119         wapAPRecord->SetElementId( iWapAPRecord->ElementId() );
       
  2120         aClientPluginInstance->iGenRecordArray.AppendL(
       
  2121                 static_cast<CommsDat::CCDRecordBase*>( wapAPRecord ) );
       
  2122         CleanupStack::Pop( wapAPRecord );
       
  2123         }
       
  2124     else
       
  2125         {
       
  2126         User::Leave( KErrNotFound );
       
  2127         }
       
  2128 
       
  2129     if ( iWapIPBearerRecord )
       
  2130         {
       
  2131         CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast<CCDWAPIPBearerRecord*>(
       
  2132                 CCDRecordBase::RecordFactoryL( KCDTIdWAPIPBearerRecord ) );
       
  2133         CleanupStack::PushL( wapIPBearerRecord );
       
  2134         CopyRecordFieldsL( *iWapIPBearerRecord, *wapIPBearerRecord );
       
  2135         wapIPBearerRecord->SetElementId( iWapIPBearerRecord->ElementId() );
       
  2136         aClientPluginInstance->iGenRecordArray.AppendL(
       
  2137                 static_cast<CommsDat::CCDRecordBase*>( wapIPBearerRecord ) );
       
  2138         CleanupStack::Pop( wapIPBearerRecord );
       
  2139         }
       
  2140     else
       
  2141         {
       
  2142         User::Leave( KErrNotFound );
       
  2143         }
       
  2144 
       
  2145     if ( iMetaDataRecord )
       
  2146         {
       
  2147         CCDIAPMetadataRecord* metadataRecord =
       
  2148                 new( ELeave ) CCDIAPMetadataRecord( iMetadataTableId );
       
  2149         CleanupStack::PushL( metadataRecord );
       
  2150         CopyRecordFieldsL( *iMetaDataRecord, *metadataRecord );
       
  2151         metadataRecord->SetElementId( iMetaDataRecord->ElementId() );
       
  2152         // Record name is set/changed during update.
       
  2153 
       
  2154         aClientPluginInstance->iGenRecordArray.AppendL(
       
  2155                 static_cast<CommsDat::CCDRecordBase*>( metadataRecord ) );
       
  2156         CleanupStack::Pop( metadataRecord );
       
  2157         }
       
  2158     else
       
  2159         {
       
  2160         aClientPluginInstance->iGenRecordArray.AppendL( NULL );
       
  2161         }
       
  2162 
       
  2163     // Location record does not need to be loaded
       
  2164     aClientPluginInstance->iGenRecordArray.AppendL( NULL );
       
  2165 
       
  2166     if ( iProxyRecord )
       
  2167         {
       
  2168         CCDProxiesRecord* proxyRecord = static_cast<CCDProxiesRecord*>(
       
  2169                 CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) );
       
  2170         CleanupStack::PushL( proxyRecord );
       
  2171         CopyRecordFieldsL( *iProxyRecord, *proxyRecord );
       
  2172         proxyRecord->SetElementId( iProxyRecord->ElementId() );
       
  2173         aClientPluginInstance->iGenRecordArray.AppendL(
       
  2174                 static_cast<CommsDat::CCDRecordBase*>( proxyRecord ) );
       
  2175         CleanupStack::Pop( proxyRecord );
       
  2176         }
       
  2177     else
       
  2178         {
       
  2179         aClientPluginInstance->iGenRecordArray.AppendL( NULL );
       
  2180         }
       
  2181 
       
  2182     GetBearerSpecificRecordsL( aClientPluginInstance->iBearerSpecRecordArray );
       
  2183 
       
  2184     OstTraceFunctionExit0( CCMPLUGINBASEENG_GETPLUGINDATAL_EXIT );
       
  2185     }
       
  2186 
       
  2187 //-----------------------------------------------------------------------------
       
  2188 // CCmPluginBaseEng::GetIntAttributeL
       
  2189 // -----------------------------------------------------------------------------
       
  2190 EXPORT_C TUint32 CCmPluginBaseEng::GetIntAttributeL(
       
  2191         TUint32 aAttribute,
       
  2192         CCmClientPluginInstance* aClientPluginInstance )
       
  2193     {
       
  2194     OstTraceFunctionEntry0( CCMPLUGINBASEENG_GETINTATTRIBUTEL_ENTRY );
       
  2195 
       
  2196     TUint32 retVal( 0 );
       
  2197 
       
  2198     switch ( aAttribute )
       
  2199         {
       
  2200         case ECmIapId: // If the CM has an ECmIapId then the ECmIapId is the ECmId.
       
  2201         case ECmId:
       
  2202             {
       
  2203             if ( iBearerType == KUidEmbeddedDestination )
       
  2204                 {
       
  2205                 retVal = GetBearerIntAttributeL(
       
  2206                         aAttribute,
       
  2207                         aClientPluginInstance->iGenRecordArray,
       
  2208                         aClientPluginInstance->iBearerSpecRecordArray );
       
  2209                 }
       
  2210             else
       
  2211                 {
       
  2212                 retVal = static_cast<CCDIAPRecord*>(
       
  2213                         aClientPluginInstance->iGenRecordArray[KIapRecordIndex] )->RecordId();
       
  2214                 }
       
  2215             }
       
  2216             break;
       
  2217         case ECmWapId:
       
  2218             {
       
  2219             retVal = static_cast<CCDWAPIPBearerRecord*>(
       
  2220                     aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] )
       
  2221                     ->iWAPAccessPointId;
       
  2222             }
       
  2223             break;
       
  2224         case ECmIapServiceId:
       
  2225             {
       
  2226             retVal = static_cast<CCDIAPRecord*>(
       
  2227                     aClientPluginInstance->iGenRecordArray[KIapRecordIndex] )->iService;
       
  2228             }
       
  2229             break;
       
  2230         case ECmBearerType:
       
  2231             {
       
  2232             retVal = iBearerType;
       
  2233             }
       
  2234             break;
       
  2235         case ECmDefaultPriority:
       
  2236             {
       
  2237             retVal = KDataMobilitySelectionPolicyPriorityWildCard;
       
  2238             }
       
  2239             break;
       
  2240         case ECmDefaultUiPriority:
       
  2241             {
       
  2242             retVal = KDataMobilitySelectionPolicyPriorityWildCard;
       
  2243             }
       
  2244             break;
       
  2245         case ECmNamingMethod:
       
  2246             {
       
  2247             retVal = iNamingMethod;
       
  2248             }
       
  2249             break;
       
  2250         case ECmSeamlessnessLevel:
       
  2251             {
       
  2252             if ( iMetaDataRecord )
       
  2253                 {
       
  2254                 retVal = static_cast<CCDIAPMetadataRecord*>(
       
  2255                         aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] )
       
  2256                         ->iSeamlessness;
       
  2257                 }
       
  2258             else
       
  2259                 {
       
  2260                 User::Leave( KErrNotFound );
       
  2261                 }
       
  2262             }
       
  2263             break;
       
  2264         case ECmElementID:
       
  2265             {
       
  2266             if ( !iIapRecord )
       
  2267                 {
       
  2268                 User::Leave( KErrNotReady );
       
  2269                 }
       
  2270 
       
  2271             retVal = ( KCDMaskShowField & ( static_cast<CCDIAPRecord*>(
       
  2272                     aClientPluginInstance->iGenRecordArray[KIapRecordIndex] )->ElementId() ) );
       
  2273             }
       
  2274             break;
       
  2275 
       
  2276         case ECmLoadResult:
       
  2277             {
       
  2278             // This attribute has been deprecated since Symbian^4.
       
  2279             User::Leave( KErrNotSupported ); //TODO, update attribute definition comments.
       
  2280             }
       
  2281             break;
       
  2282 
       
  2283         case ECmNetworkId:
       
  2284             {
       
  2285             retVal = static_cast<CCDIAPRecord*>(
       
  2286                     aClientPluginInstance->iGenRecordArray[KIapRecordIndex] )->iNetwork;
       
  2287             }
       
  2288             break;
       
  2289         case ECmProxyPortNumber:
       
  2290             {
       
  2291             if ( !aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )
       
  2292                 {
       
  2293                 User::Leave( KErrNotFound );
       
  2294                 }
       
  2295 
       
  2296             retVal = static_cast<CCDProxiesRecord*>(
       
  2297                     aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )->iPortNumber;
       
  2298             }
       
  2299             break;
       
  2300         case ECmWapIPWSPOption:
       
  2301             {
       
  2302             retVal = static_cast<CCDWAPIPBearerRecord*>(
       
  2303                     aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] )->iWAPWSPOption;
       
  2304             }
       
  2305             break;
       
  2306         case ECmWapIPProxyPort:
       
  2307             {
       
  2308             retVal = static_cast<CCDWAPIPBearerRecord*>(
       
  2309                     aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] )->iWAPProxyPort;
       
  2310             }
       
  2311             break;
       
  2312         default:
       
  2313             {
       
  2314             retVal = GetBearerIntAttributeL(
       
  2315                     aAttribute,
       
  2316                     aClientPluginInstance->iGenRecordArray,
       
  2317                     aClientPluginInstance->iBearerSpecRecordArray );
       
  2318             }
       
  2319             break;
       
  2320         }
       
  2321 
       
  2322     OstTraceFunctionExit0( CCMPLUGINBASEENG_GETINTATTRIBUTEL_EXIT );
       
  2323     return retVal;
       
  2324     }
       
  2325 
       
  2326 //-----------------------------------------------------------------------------
       
  2327 // CCmPluginBaseEng::GetBoolAttributeL
       
  2328 // -----------------------------------------------------------------------------
       
  2329 EXPORT_C TBool CCmPluginBaseEng::GetBoolAttributeL(
       
  2330         TUint32 aAttribute,
       
  2331         CCmClientPluginInstance* aClientPluginInstance )
       
  2332     {
       
  2333     OstTraceFunctionEntry0( CCMPLUGINBASEENG_GETBOOLATTRIBUTEL_ENTRY );
       
  2334 
       
  2335     TBool retVal( EFalse );
       
  2336 
       
  2337     switch ( aAttribute )
       
  2338         {
       
  2339         case ECmProtected:
       
  2340             {
       
  2341             if ( iBearerType == KUidEmbeddedDestination )
       
  2342                 {
       
  2343                 retVal = GetBearerBoolAttributeL(
       
  2344                         aAttribute,
       
  2345                         aClientPluginInstance->iGenRecordArray,
       
  2346                         aClientPluginInstance->iBearerSpecRecordArray );
       
  2347                 }
       
  2348             else
       
  2349                 {
       
  2350                 CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(
       
  2351                         aClientPluginInstance->iGenRecordArray[KIapRecordIndex] );
       
  2352                 retVal = iapRecord->Attributes() & ECDProtectedWrite;
       
  2353                 }
       
  2354             }
       
  2355             break;
       
  2356         case ECmHidden:
       
  2357             {
       
  2358             if ( iBearerType == KUidEmbeddedDestination )
       
  2359                 {
       
  2360                 retVal = GetBearerBoolAttributeL(
       
  2361                         aAttribute,
       
  2362                         aClientPluginInstance->iGenRecordArray,
       
  2363                         aClientPluginInstance->iBearerSpecRecordArray );
       
  2364                 }
       
  2365             else
       
  2366                 {
       
  2367                 CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(
       
  2368                         aClientPluginInstance->iGenRecordArray[KIapRecordIndex] );
       
  2369                 retVal = iapRecord->Attributes() & ECDHidden;
       
  2370                 }
       
  2371             }
       
  2372             break;
       
  2373         case ECmProxyUsageEnabled:
       
  2374             {
       
  2375             if ( !aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )
       
  2376                 {
       
  2377                 retVal = EFalse;
       
  2378                 }
       
  2379             else
       
  2380                 {
       
  2381                 retVal = static_cast<CCDProxiesRecord*>(
       
  2382                         aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )
       
  2383                         ->iUseProxyServer;
       
  2384                 }
       
  2385             }
       
  2386             break;
       
  2387         case ECmDestination:
       
  2388             {
       
  2389             TRAPD( err, retVal = GetBearerBoolAttributeL(
       
  2390                     aAttribute,
       
  2391                     aClientPluginInstance->iGenRecordArray,
       
  2392                     aClientPluginInstance->iBearerSpecRecordArray ) );
       
  2393             if ( err )
       
  2394                 {
       
  2395                 retVal = EFalse;
       
  2396                 }
       
  2397             }
       
  2398             break;
       
  2399         case ECmChargeCardUsageEnabled:
       
  2400             {
       
  2401             retVal = EFalse;
       
  2402             }
       
  2403             break;
       
  2404         case ECmLocationUsageEnabled:
       
  2405             {
       
  2406             retVal = iLocationEnabled;
       
  2407             }
       
  2408             break;
       
  2409         case ECmCoverage:
       
  2410             // By default the plugin has no network coverage.
       
  2411             {
       
  2412             TRAPD( err, retVal = GetBearerBoolAttributeL(
       
  2413                     aAttribute,
       
  2414                     aClientPluginInstance->iGenRecordArray,
       
  2415                     aClientPluginInstance->iBearerSpecRecordArray ) );
       
  2416             if ( err )
       
  2417                 {
       
  2418                 if ( err == KErrNotFound )
       
  2419                     {
       
  2420                     retVal = EFalse;
       
  2421                     }
       
  2422                 else
       
  2423                     {
       
  2424                     User::Leave( err );
       
  2425                     }
       
  2426                 }
       
  2427             }
       
  2428             break;
       
  2429         case ECmMetaHighlight:
       
  2430             {
       
  2431             CCDIAPMetadataRecord* metadataRecord = static_cast<CCDIAPMetadataRecord*>(
       
  2432                     aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] );
       
  2433             retVal = metadataRecord->iMetadata & EMetaHighlight;
       
  2434             }
       
  2435             break;
       
  2436         case ECmMetaHiddenAgent:
       
  2437             {
       
  2438             CCDIAPMetadataRecord* metadataRecord = static_cast<CCDIAPMetadataRecord*>(
       
  2439                     aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] );
       
  2440             retVal = metadataRecord->iMetadata & EMetaHiddenAgent;
       
  2441             }
       
  2442             break;
       
  2443         case ECmMetaHotSpot:
       
  2444             {
       
  2445             CCDIAPMetadataRecord* metadataRecord = static_cast<CCDIAPMetadataRecord*>(
       
  2446                     aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] );
       
  2447             retVal = metadataRecord->iMetadata & EMetaHotSpot;
       
  2448             }
       
  2449             break;
       
  2450         case ECmVirtual:
       
  2451             {
       
  2452             // This is bearer specific attribute.
       
  2453             TRAPD( err, retVal = GetBearerInfoBoolL( aAttribute ) );
       
  2454             if ( err )
       
  2455                 {
       
  2456                 retVal = EFalse;
       
  2457                 }
       
  2458             }
       
  2459             break;
       
  2460         case ECmWapIPSecurity:
       
  2461             {
       
  2462             retVal = static_cast<CCDWAPIPBearerRecord*>(
       
  2463                     aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] )->iWAPSecurity;
       
  2464             }
       
  2465             break;
       
  2466         default:
       
  2467             {
       
  2468             retVal = GetBearerBoolAttributeL(
       
  2469                     aAttribute,
       
  2470                     aClientPluginInstance->iGenRecordArray,
       
  2471                     aClientPluginInstance->iBearerSpecRecordArray );
       
  2472             }
       
  2473         }
       
  2474 
       
  2475     OstTraceFunctionExit0( CCMPLUGINBASEENG_GETBOOLATTRIBUTEL_EXIT );
       
  2476     return retVal;
       
  2477     }
       
  2478 
       
  2479 // -----------------------------------------------------------------------------
       
  2480 // CCmPluginBaseEng::GetStringAttributeL()
       
  2481 // -----------------------------------------------------------------------------
       
  2482 //
       
  2483 EXPORT_C HBufC* CCmPluginBaseEng::GetStringAttributeL(
       
  2484         TUint32 aAttribute,
       
  2485         CCmClientPluginInstance* aClientPluginInstance )
       
  2486     {
       
  2487     OstTraceFunctionEntry0( CCMPLUGINBASEENG_GETSTRINGATTRIBUTEL_ENTRY );
       
  2488 
       
  2489     if ( !aClientPluginInstance )
       
  2490         {
       
  2491         User::Leave( KErrCorrupt );
       
  2492         }
       
  2493 
       
  2494     HBufC* retVal = NULL;
       
  2495 
       
  2496     switch ( aAttribute )
       
  2497         {
       
  2498         case ECmBearerIcon:
       
  2499             {
       
  2500             CCDIAPMetadataRecord* metadataRecord = static_cast<CCDIAPMetadataRecord*>(
       
  2501                     aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] );
       
  2502 
       
  2503             if ( !metadataRecord )
       
  2504                 {
       
  2505                 User::Leave( KErrCorrupt );
       
  2506                 }
       
  2507 
       
  2508             retVal = TPtrC( metadataRecord->iIconFileName ).AllocL();
       
  2509             }
       
  2510             break;
       
  2511         case ECmStartPage:
       
  2512             {
       
  2513             CCDWAPAccessPointRecord* wapAPRecord = static_cast<CCDWAPAccessPointRecord*>(
       
  2514                     aClientPluginInstance->iGenRecordArray[KWAPAPRecordIndex] );
       
  2515 
       
  2516             if ( !wapAPRecord )
       
  2517                 {
       
  2518                 User::Leave( KErrCorrupt );
       
  2519                 }
       
  2520 
       
  2521             retVal = TPtrC( wapAPRecord->iWAPStartPage ).AllocL();
       
  2522             }
       
  2523             break;
       
  2524         case ECmName:
       
  2525             {
       
  2526             CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(
       
  2527                     aClientPluginInstance->iGenRecordArray[KIapRecordIndex] );
       
  2528 
       
  2529             if ( !iapRecord )
       
  2530                 {
       
  2531                 User::Leave( KErrCorrupt );
       
  2532                 }
       
  2533 
       
  2534             retVal = TPtrC( iapRecord->iRecordName ).AllocL();
       
  2535             }
       
  2536             break;
       
  2537         case ECmProxyServerName:
       
  2538             {
       
  2539             CCDProxiesRecord* proxyRecord = static_cast<CCDProxiesRecord*>(
       
  2540                     aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] );
       
  2541 
       
  2542             if ( !proxyRecord )
       
  2543                 {
       
  2544                 User::Leave( KErrCorrupt );
       
  2545                 }
       
  2546 
       
  2547             retVal = TPtrC( proxyRecord->iServerName ).AllocL();
       
  2548             }
       
  2549             break;
       
  2550         case ECmProxyProtocolName:
       
  2551             {
       
  2552             CCDProxiesRecord* proxyRecord = static_cast<CCDProxiesRecord*>(
       
  2553                     aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] );
       
  2554 
       
  2555             if ( !proxyRecord )
       
  2556                 {
       
  2557                 User::Leave( KErrCorrupt );
       
  2558                 }
       
  2559 
       
  2560             retVal = TPtrC( proxyRecord->iExceptions ).AllocL();
       
  2561             }
       
  2562             break;
       
  2563         case ECmProxyExceptions:
       
  2564             {
       
  2565             CCDProxiesRecord* proxyRecord = static_cast<CCDProxiesRecord*>(
       
  2566                     aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] );
       
  2567 
       
  2568             if ( !proxyRecord )
       
  2569                 {
       
  2570                 User::Leave( KErrCorrupt );
       
  2571                 }
       
  2572 
       
  2573             retVal = TPtrC( proxyRecord->iProtocolName ).AllocL();
       
  2574             }
       
  2575             break;
       
  2576         case ECmWapIPGatewayAddress:
       
  2577             {
       
  2578             CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast<CCDWAPIPBearerRecord*>(
       
  2579                     aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] );
       
  2580 
       
  2581             if ( !wapIPBearerRecord )
       
  2582                 {
       
  2583                 User::Leave( KErrCorrupt );
       
  2584                 }
       
  2585 
       
  2586             retVal = TPtrC( wapIPBearerRecord->iWAPGatewayAddress ).AllocL();
       
  2587             }
       
  2588             break;
       
  2589         case ECmWapIPProxyLoginName:
       
  2590             {
       
  2591             CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast<CCDWAPIPBearerRecord*>(
       
  2592                     aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] );
       
  2593 
       
  2594             if ( !wapIPBearerRecord )
       
  2595                 {
       
  2596                 User::Leave( KErrCorrupt );
       
  2597                 }
       
  2598 
       
  2599             retVal = TPtrC( wapIPBearerRecord->iWAPProxyLoginName ).AllocL();
       
  2600             }
       
  2601             break;
       
  2602         case ECmWapIPProxyLoginPass:
       
  2603             {
       
  2604             CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast<CCDWAPIPBearerRecord*>(
       
  2605                     aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] );
       
  2606 
       
  2607             if ( !wapIPBearerRecord )
       
  2608                 {
       
  2609                 User::Leave( KErrCorrupt );
       
  2610                 }
       
  2611 
       
  2612             retVal = TPtrC( wapIPBearerRecord->iWAPProxyLoginPass ).AllocL();
       
  2613             }
       
  2614             break;
       
  2615         default:
       
  2616             {
       
  2617             retVal = GetBearerStringAttributeL(
       
  2618                     aAttribute,
       
  2619                     aClientPluginInstance->iGenRecordArray,
       
  2620                     aClientPluginInstance->iBearerSpecRecordArray );
       
  2621             }
       
  2622             break;
       
  2623         }
       
  2624 
       
  2625     OstTraceFunctionExit0( CCMPLUGINBASEENG_GETSTRINGATTRIBUTEL_EXIT );
       
  2626     return retVal;
       
  2627     }
       
  2628 
       
  2629 // -----------------------------------------------------------------------------
       
  2630 // CCmPluginBaseEng::GetString8AttributeL()
       
  2631 // -----------------------------------------------------------------------------
       
  2632 //
       
  2633 EXPORT_C HBufC8* CCmPluginBaseEng::GetString8AttributeL(
       
  2634         TUint32 aAttribute,
       
  2635         CCmClientPluginInstance* aClientPluginInstance )
       
  2636     {
       
  2637     OstTraceFunctionEntry0( CCMPLUGINBASEENG_GETSTRING8ATTRIBUTEL_ENTRY );
       
  2638 
       
  2639     HBufC8* retVal = NULL;
       
  2640 
       
  2641     switch ( aAttribute )
       
  2642         {
       
  2643         default:
       
  2644             {
       
  2645             retVal = GetBearerString8AttributeL(
       
  2646                     aAttribute,
       
  2647                     aClientPluginInstance->iGenRecordArray,
       
  2648                     aClientPluginInstance->iBearerSpecRecordArray );
       
  2649             }
       
  2650         }
       
  2651 
       
  2652     OstTraceFunctionExit0( CCMPLUGINBASEENG_GETSTRING8ATTRIBUTEL_EXIT );
       
  2653     return retVal;
       
  2654     }
       
  2655 
       
  2656 // -----------------------------------------------------------------------------
       
  2657 // CCmPluginBaseEng::GetIntAttributeL
       
  2658 // -----------------------------------------------------------------------------
       
  2659 EXPORT_C void CCmPluginBaseEng::SetIntAttributeL(
       
  2660         TUint32 aAttribute,
       
  2661         TUint32 aValue,
       
  2662         CCmClientPluginInstance* aClientPluginInstance )
       
  2663     {
       
  2664     OstTraceFunctionEntry0( CCMPLUGINBASEENG_SETINTATTRIBUTEL_ENTRY );
       
  2665 
       
  2666     switch ( aAttribute )
       
  2667         {
       
  2668         case ECmNamingMethod:
       
  2669             {
       
  2670             aClientPluginInstance->iNamingMethod = ( TNamingMethod )aValue;
       
  2671             }
       
  2672             break;
       
  2673 
       
  2674         case ECmCommsDBBearerType:
       
  2675         case ECmElementID:
       
  2676         case ECmIapId:
       
  2677         case ECmId:
       
  2678             {
       
  2679             User::Leave( KErrNotSupported );
       
  2680             }
       
  2681             break;
       
  2682 
       
  2683         case ECmSeamlessnessLevel:
       
  2684             {
       
  2685             if ( aValue == ESeamlessnessConfirmFirst || aValue == ESeamlessnessShowprogress )
       
  2686                 {
       
  2687                 static_cast<CCDIAPMetadataRecord*>(
       
  2688                         aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] )->
       
  2689                         iSeamlessness.SetL( aValue );
       
  2690                 }
       
  2691             else
       
  2692                 {
       
  2693                 User::Leave( KErrNotSupported );
       
  2694                 }
       
  2695             }
       
  2696             break;
       
  2697 
       
  2698         case ECmNetworkId:
       
  2699             {
       
  2700             User::Leave( KErrNotSupported );
       
  2701             }
       
  2702             break;
       
  2703         case ECmProxyPortNumber:
       
  2704             {
       
  2705             if ( !aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )
       
  2706                 {
       
  2707                 CCDProxiesRecord* proxyRecord = static_cast<CCDProxiesRecord*>(
       
  2708                         CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) );
       
  2709                 CleanupStack::PushL( proxyRecord );
       
  2710                 CopyRecordFieldsL( *iProxyRecord, *proxyRecord );
       
  2711                 proxyRecord->SetElementId( iProxyRecord->ElementId() );
       
  2712                 aClientPluginInstance->iGenRecordArray.InsertL(
       
  2713                         static_cast<CommsDat::CCDRecordBase*>( proxyRecord ),
       
  2714                         KProxyRecordIndex );
       
  2715                 CleanupStack::Pop( proxyRecord );
       
  2716                 }
       
  2717 
       
  2718             static_cast<CCDProxiesRecord*>(
       
  2719                     aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )->
       
  2720                     iPortNumber = aValue;
       
  2721             }
       
  2722             break;
       
  2723         case ECmWapIPWSPOption:
       
  2724             {
       
  2725             if ( aValue > KMaxTUint8 )
       
  2726                 {
       
  2727                 User::Leave( KErrArgument );
       
  2728                 }
       
  2729             else
       
  2730                 {
       
  2731                 static_cast<CCDWAPIPBearerRecord*>(
       
  2732                         aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] )->
       
  2733                         iWAPWSPOption.SetL( aValue );
       
  2734                 }
       
  2735             }
       
  2736             break;
       
  2737         case ECmWapIPProxyPort:
       
  2738             {
       
  2739             static_cast<CCDWAPIPBearerRecord*>(
       
  2740                     aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] )->
       
  2741                     iWAPProxyPort.SetL( aValue );
       
  2742             }
       
  2743             break;
       
  2744         default:
       
  2745             {
       
  2746             SetBearerIntAttributeL(
       
  2747                     aAttribute,
       
  2748                     aValue,
       
  2749                     aClientPluginInstance->iGenRecordArray,
       
  2750                     aClientPluginInstance->iBearerSpecRecordArray );
       
  2751             }
       
  2752         }
       
  2753 
       
  2754     OstTraceFunctionExit0( CCMPLUGINBASEENG_SETINTATTRIBUTEL_EXIT );
       
  2755     }
       
  2756 
       
  2757 // -----------------------------------------------------------------------------
       
  2758 // CCmPluginBaseEng::SetBoolAttributeL
       
  2759 // -----------------------------------------------------------------------------
       
  2760 EXPORT_C void CCmPluginBaseEng::SetBoolAttributeL(
       
  2761         TUint32 aAttribute,
       
  2762         TBool aValue,
       
  2763         CCmClientPluginInstance* aClientPluginInstance )
       
  2764     {
       
  2765     OstTraceFunctionEntry0( CCMPLUGINBASEENG_SETBOOLATTRIBUTEL_ENTRY );
       
  2766 
       
  2767     CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(
       
  2768             aClientPluginInstance->iGenRecordArray[KIapRecordIndex] );
       
  2769 
       
  2770     switch ( aAttribute )
       
  2771         {
       
  2772         case ECmProtected:
       
  2773             {
       
  2774             /**
       
  2775              * ECDProtectedWrite attribute is set in
       
  2776              * - iap record
       
  2777              * - network record
       
  2778              * - iapmetadata record
       
  2779              * - wap records
       
  2780              * - proxy record
       
  2781              * And depending the bearer
       
  2782              * - service record
       
  2783              * - bearer record
       
  2784              * - other bearer specific records
       
  2785              */
       
  2786             SetAttribute( iapRecord, ECDProtectedWrite, aValue );
       
  2787             }
       
  2788             break;
       
  2789         case ECmHidden:
       
  2790             {
       
  2791             /**
       
  2792              * ECDHidden attribute is set in
       
  2793              * - iap record
       
  2794              * - network record
       
  2795              * - iapmetadata record
       
  2796              * - wap records
       
  2797              * - proxy record
       
  2798              * And depending the bearer
       
  2799              * - service record
       
  2800              * - bearer record
       
  2801              * - other bearer specific records
       
  2802              */
       
  2803             SetAttribute( iapRecord, ECDHidden, aValue );
       
  2804             }
       
  2805             break;
       
  2806         case ECmProxyUsageEnabled:
       
  2807             {
       
  2808             if ( !aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )
       
  2809                 {
       
  2810                 CCDProxiesRecord* proxyRecord = static_cast<CCDProxiesRecord*>(
       
  2811                         CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) );
       
  2812                 CleanupStack::PushL( proxyRecord );
       
  2813                 CopyRecordFieldsL( *iProxyRecord, *proxyRecord );
       
  2814                 proxyRecord->SetElementId( iProxyRecord->ElementId() );
       
  2815                 aClientPluginInstance->iGenRecordArray.InsertL(
       
  2816                         static_cast<CommsDat::CCDRecordBase*>( proxyRecord ),
       
  2817                         KProxyRecordIndex );
       
  2818                 CleanupStack::Pop( proxyRecord );
       
  2819                 }
       
  2820 
       
  2821             static_cast<CCDProxiesRecord*>(
       
  2822                     aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )->iUseProxyServer =
       
  2823                             aValue;
       
  2824             }
       
  2825             break;
       
  2826         case ECmChargeCardUsageEnabled:
       
  2827             {
       
  2828             User::Leave( KErrNotSupported );
       
  2829             }
       
  2830             break;
       
  2831         case ECmLocationUsageEnabled:
       
  2832             {
       
  2833             EnableLocationL( aValue );
       
  2834             }
       
  2835             break;
       
  2836         case ECmMetaHighlight:
       
  2837             {
       
  2838             CCDIAPMetadataRecord* metadataRecord = static_cast<CCDIAPMetadataRecord*>(
       
  2839                     aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] );
       
  2840             if ( aValue )
       
  2841                 {
       
  2842                 metadataRecord->iMetadata = EMetaHighlight | metadataRecord->iMetadata;
       
  2843                 }
       
  2844             else
       
  2845                 {
       
  2846                 metadataRecord->iMetadata = ~EMetaHighlight & metadataRecord->iMetadata;
       
  2847                 }
       
  2848             }
       
  2849             break;
       
  2850         case ECmMetaHiddenAgent:
       
  2851             {
       
  2852             CCDIAPMetadataRecord* metadataRecord = static_cast<CCDIAPMetadataRecord*>(
       
  2853                     aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] );
       
  2854             if ( aValue )
       
  2855                 {
       
  2856                 metadataRecord->iMetadata = EMetaHiddenAgent | metadataRecord->iMetadata;
       
  2857                 }
       
  2858             else
       
  2859                 {
       
  2860                 metadataRecord->iMetadata = ~EMetaHiddenAgent & metadataRecord->iMetadata;
       
  2861                 }
       
  2862             }
       
  2863             break;
       
  2864         case ECmMetaHotSpot:
       
  2865             {
       
  2866             CCDIAPMetadataRecord* metadataRecord = static_cast<CCDIAPMetadataRecord*>(
       
  2867                     aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] );
       
  2868             if ( aValue )
       
  2869                 {
       
  2870                 metadataRecord->iMetadata = EMetaHotSpot | metadataRecord->iMetadata;
       
  2871                 }
       
  2872             else
       
  2873                 {
       
  2874                 metadataRecord->iMetadata = ~EMetaHotSpot & metadataRecord->iMetadata;
       
  2875                 }
       
  2876             }
       
  2877             break;
       
  2878         case ECmWapIPSecurity:
       
  2879             {
       
  2880             static_cast<CCDWAPIPBearerRecord*>(
       
  2881                     aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] )
       
  2882                     ->iWAPSecurity.SetL( aValue );
       
  2883             }
       
  2884             break;
       
  2885         default:
       
  2886             {
       
  2887             SetBearerBoolAttributeL(
       
  2888                     aAttribute,
       
  2889                     aValue,
       
  2890                     aClientPluginInstance->iGenRecordArray,
       
  2891                     aClientPluginInstance->iBearerSpecRecordArray );
       
  2892             }
       
  2893         }
       
  2894 
       
  2895     OstTraceFunctionExit0( CCMPLUGINBASEENG_SETBOOLATTRIBUTEL_EXIT );
       
  2896     }
       
  2897 
       
  2898 // -----------------------------------------------------------------------------
       
  2899 // CCmPluginBaseEng::SetStringAttributeL
       
  2900 // -----------------------------------------------------------------------------
       
  2901 EXPORT_C void CCmPluginBaseEng::SetStringAttributeL(
       
  2902         TUint32 aAttribute,
       
  2903         const TDesC16& aValue,
       
  2904         CCmClientPluginInstance* aClientPluginInstance )
       
  2905     {
       
  2906     OstTraceFunctionEntry0( CCMPLUGINBASEENG_SETSTRINGATTRIBUTEL_ENTRY );
       
  2907 
       
  2908     switch ( aAttribute )
       
  2909         {
       
  2910         case ECmBearerIcon:
       
  2911             {
       
  2912             CCDIAPMetadataRecord* metadataRecord = static_cast<CCDIAPMetadataRecord*>(
       
  2913                     aClientPluginInstance->iGenRecordArray[KMetaDataRecordIndex] );
       
  2914 
       
  2915             if ( !metadataRecord )
       
  2916                 {
       
  2917                 User::Leave( KErrCorrupt );
       
  2918                 }
       
  2919             metadataRecord->iIconFileName.SetL( aValue );
       
  2920             }
       
  2921             break;
       
  2922         case ECmStartPage:
       
  2923             {
       
  2924             CCDWAPAccessPointRecord* wapAPRecord = static_cast<CCDWAPAccessPointRecord*>(
       
  2925                     aClientPluginInstance->iGenRecordArray[KWAPAPRecordIndex] );
       
  2926 
       
  2927             if ( !wapAPRecord )
       
  2928                 {
       
  2929                 User::Leave( KErrCorrupt );
       
  2930                 }
       
  2931             wapAPRecord->iWAPStartPage.SetL( aValue );
       
  2932             }
       
  2933             break;
       
  2934         case ECmName:
       
  2935             {
       
  2936             CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(
       
  2937                     aClientPluginInstance->iGenRecordArray[KIapRecordIndex] );
       
  2938 
       
  2939             if ( !iapRecord )
       
  2940                 {
       
  2941                 User::Leave( KErrCorrupt );
       
  2942                 }
       
  2943             SetNameL( aValue, iapRecord, aClientPluginInstance->iNamingMethod );
       
  2944             }
       
  2945             break;
       
  2946         case ECmProxyServerName:
       
  2947             {
       
  2948             CCDProxiesRecord* proxyRecord = static_cast<CCDProxiesRecord*>(
       
  2949                     aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] );
       
  2950             if ( !proxyRecord )
       
  2951                 {
       
  2952                 proxyRecord = static_cast<CCDProxiesRecord*>(
       
  2953                         CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) );
       
  2954 
       
  2955                 // Map proxy record to this iap.
       
  2956                 proxyRecord->iService = static_cast<CCDProxiesRecord*>(
       
  2957                         aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )->RecordId();
       
  2958 
       
  2959                 aClientPluginInstance->iGenRecordArray.Insert( proxyRecord, KProxyRecordIndex );
       
  2960                 }
       
  2961 
       
  2962             SetProxyServerNameL( aValue, proxyRecord );
       
  2963             }
       
  2964             break;
       
  2965         case ECmProxyProtocolName:
       
  2966             {
       
  2967             CCDProxiesRecord* proxyRecord = static_cast<CCDProxiesRecord*>(
       
  2968                     aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] );
       
  2969             if ( !proxyRecord )
       
  2970                 {
       
  2971                 proxyRecord = static_cast<CCDProxiesRecord*>(
       
  2972                         CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) );
       
  2973 
       
  2974                 // Map proxy record to this iap.
       
  2975                 proxyRecord->iService = static_cast<CCDProxiesRecord*>(
       
  2976                         aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )->RecordId();
       
  2977 
       
  2978                 aClientPluginInstance->iGenRecordArray.Insert( proxyRecord, KProxyRecordIndex );
       
  2979                 }
       
  2980 
       
  2981             proxyRecord->iProtocolName.SetL( aValue );
       
  2982             }
       
  2983             break;
       
  2984         case ECmProxyExceptions:
       
  2985             {
       
  2986             CCDProxiesRecord* proxyRecord = static_cast<CCDProxiesRecord*>(
       
  2987                     aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] );
       
  2988             if ( !proxyRecord )
       
  2989                 {
       
  2990                 proxyRecord = static_cast<CCDProxiesRecord*>(
       
  2991                         CCDRecordBase::RecordFactoryL( KCDTIdProxiesRecord ) );
       
  2992 
       
  2993                 // Map proxy record to this iap.
       
  2994                 proxyRecord->iService = static_cast<CCDProxiesRecord*>(
       
  2995                         aClientPluginInstance->iGenRecordArray[KProxyRecordIndex] )->RecordId();
       
  2996 
       
  2997                 aClientPluginInstance->iGenRecordArray.Insert( proxyRecord, KProxyRecordIndex );
       
  2998                 }
       
  2999 
       
  3000             proxyRecord->iExceptions.SetL( aValue );
       
  3001             }
       
  3002             break;
       
  3003         case ECmWapIPGatewayAddress:
       
  3004             {
       
  3005             CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast<CCDWAPIPBearerRecord*>(
       
  3006                     aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] );
       
  3007 
       
  3008             if ( !wapIPBearerRecord )
       
  3009                 {
       
  3010                 User::Leave( KErrCorrupt );
       
  3011                 }
       
  3012             wapIPBearerRecord->iWAPGatewayAddress.SetL( aValue );
       
  3013             }
       
  3014             break;
       
  3015         case ECmWapIPProxyLoginName:
       
  3016             {
       
  3017             CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast<CCDWAPIPBearerRecord*>(
       
  3018                     aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] );
       
  3019 
       
  3020             if ( !wapIPBearerRecord )
       
  3021                 {
       
  3022                 User::Leave( KErrCorrupt );
       
  3023                 }
       
  3024             wapIPBearerRecord->iWAPProxyLoginName.SetL( aValue );
       
  3025             }
       
  3026             break;
       
  3027         case ECmWapIPProxyLoginPass:
       
  3028             {
       
  3029             CCDWAPIPBearerRecord* wapIPBearerRecord = static_cast<CCDWAPIPBearerRecord*>(
       
  3030                     aClientPluginInstance->iGenRecordArray[KWAPBearerRecordIndex] );
       
  3031 
       
  3032             if ( !wapIPBearerRecord )
       
  3033                 {
       
  3034                 User::Leave( KErrCorrupt );
       
  3035                 }
       
  3036             wapIPBearerRecord->iWAPProxyLoginPass.SetL( aValue );
       
  3037             }
       
  3038             break;
       
  3039         default:
       
  3040             {
       
  3041             SetBearerStringAttributeL(
       
  3042                     aAttribute,
       
  3043                     aValue,
       
  3044                     aClientPluginInstance->iGenRecordArray,
       
  3045                     aClientPluginInstance->iBearerSpecRecordArray );
       
  3046             }
       
  3047         }
       
  3048 
       
  3049     OstTraceFunctionExit0( CCMPLUGINBASEENG_SETSTRINGATTRIBUTEL_EXIT );
       
  3050     }
       
  3051 
       
  3052 // -----------------------------------------------------------------------------
       
  3053 // CCmPluginBaseEng::SetString8AttributeL
       
  3054 // -----------------------------------------------------------------------------
       
  3055 EXPORT_C void CCmPluginBaseEng::SetString8AttributeL(
       
  3056         TUint32 aAttribute,
       
  3057         const TDesC8& aValue,
       
  3058         CCmClientPluginInstance* aClientPluginInstance )
       
  3059     {
       
  3060     OstTraceFunctionEntry0( CCMPLUGINBASEENG_SETSTRING8ATTRIBUTEL_ENTRY );
       
  3061 
       
  3062     switch ( aAttribute )
       
  3063         {
       
  3064         default:
       
  3065             {
       
  3066             SetBearerString8AttributeL(
       
  3067                     aAttribute,
       
  3068                     aValue,
       
  3069                     aClientPluginInstance->iGenRecordArray,
       
  3070                     aClientPluginInstance->iBearerSpecRecordArray );
       
  3071             }
       
  3072         }
       
  3073 
       
  3074     OstTraceFunctionExit0( CCMPLUGINBASEENG_SETSTRING8ATTRIBUTEL_EXIT );
       
  3075     }
       
  3076 
       
  3077 // ---------------------------------------------------------------------------
       
  3078 // CCmPluginBaseEng::IsUnspecifiedIPv4Address
       
  3079 // ---------------------------------------------------------------------------
       
  3080 //
       
  3081 TBool CCmPluginBaseEng::IsUnspecifiedIPv4Address( const TDesC& aIpv4Address )
       
  3082     {
       
  3083     OstTraceFunctionEntry0( _ISUNSPECIFIEDIPV4ADDRESS_ENTRY );
       
  3084 
       
  3085     if ( aIpv4Address.Length() == 0 || !aIpv4Address.CompareF( KUnspecifiedIPv4 ) )
       
  3086         {
       
  3087         OstTraceFunctionExit0( _ISUNSPECIFIEDIPV4ADDRESS_EXIT );
       
  3088         return ETrue;
       
  3089         }
       
  3090 
       
  3091     OstTraceFunctionExit0( DUP1__ISUNSPECIFIEDIPV4ADDRESS_EXIT );
       
  3092     return EFalse;
       
  3093     }
       
  3094 
       
  3095 // ---------------------------------------------------------------------------
       
  3096 // CCmPluginBaseEng::ClassifyIPv6Address
       
  3097 // ---------------------------------------------------------------------------
       
  3098 //
       
  3099 TIPv6Types CCmPluginBaseEng::ClassifyIPv6Address( const TDesC& aIpv6Address )
       
  3100     {
       
  3101     OstTraceFunctionEntry0( _CLASSIFYIPV6ADDRESS_ENTRY );
       
  3102 
       
  3103     if ( aIpv6Address.Length() == 0 || !aIpv6Address.CompareF( KDynamicIpv6Address ) )
       
  3104         {
       
  3105         OstTraceFunctionExit0( _CLASSIFYIPV6ADDRESS_EXIT );
       
  3106 
       
  3107         return EIPv6Unspecified;
       
  3108         }
       
  3109     else if ( !aIpv6Address.CompareF( KKnownIp6NameServer1 ) ||
       
  3110             !aIpv6Address.CompareF( KKnownIp6NameServer2 ) )
       
  3111         {
       
  3112         OstTraceFunctionExit0( DUP1__CLASSIFYIPV6ADDRESS_EXIT );
       
  3113 
       
  3114         return EIPv6WellKnown;
       
  3115         }
       
  3116 
       
  3117     OstTraceFunctionExit0( DUP2__CLASSIFYIPV6ADDRESS_EXIT );
       
  3118     return EIPv6UserDefined;
       
  3119     }
       
  3120 
       
  3121 // End of file