cmmanager/cmmgr/cmmplugins/cmpluginvpn/src/cmpluginvpn.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 VPN CmManager Plugin interface implementation 
       
    16 *      
       
    17 *
       
    18 */
       
    19 
       
    20  
       
    21 // INCLUDE FILES
       
    22 #include <commsdattypesv1_1.h>
       
    23 #include <datamobilitycommsdattypes.h>
       
    24 #include <cmconnectionmethoddef.h>
       
    25 #include <cmpluginvpndef.h>
       
    26 #include <featmgr.h>
       
    27 #include <publicruntimeids.hrh>
       
    28 
       
    29 #include "cmpluginvpn.h"
       
    30 #include "cmmserverdefs.h"
       
    31 #include "OstTraceDefinitions.h"
       
    32 #ifdef OST_TRACE_COMPILER_IN_USE
       
    33 #include "cmpluginvpnTraces.h"
       
    34 #endif
       
    35 
       
    36 using namespace CommsDat;
       
    37 using namespace CMManager;
       
    38 
       
    39 
       
    40 
       
    41 _LIT( KVpnVirtualBearerName, "vpnbearer" );
       
    42 _LIT( KVpnVirtualBearerAgent, "vpnconnagt.agt" );
       
    43 _LIT( KVpnVirtualBearerNif, "tunnelnif" );
       
    44 
       
    45 static const TInt KVirtualIAPNextLayerRecordIndex = 0;
       
    46 
       
    47 // constants needed for the virtualbearer table
       
    48 static const TInt KNoTimeout = -1;
       
    49 static const TUint32 KLastSessionTimeout = 3;
       
    50 
       
    51 // ---------------------------------------------------------------------------
       
    52 // CCmPluginVpn::NewL
       
    53 // ---------------------------------------------------------------------------
       
    54 //
       
    55 CCmPluginVpn* CCmPluginVpn::NewL( TCmPluginInitParam* aInitParam )
       
    56 	{	
       
    57     OstTraceFunctionEntry0( CCMPLUGINVPN_NEWL_ENTRY );
       
    58     
       
    59 	CCmPluginVpn* self = new( ELeave ) CCmPluginVpn( aInitParam );
       
    60 	CleanupStack::PushL( self );
       
    61 	self->ConstructL();
       
    62 	CleanupStack::Pop( self );
       
    63 	
       
    64 	OstTraceFunctionExit0( CCMPLUGINVPN_NEWL_EXIT );
       
    65 	return self;		
       
    66 	}
       
    67 
       
    68 // ---------------------------------------------------------------------------
       
    69 // CCmPluginVpn::CreateInstanceL
       
    70 // ---------------------------------------------------------------------------
       
    71 //
       
    72 CCmPluginBaseEng* CCmPluginVpn::CreateInstanceL( TCmPluginInitParam& aInitParam ) const
       
    73 	{
       
    74     OstTraceFunctionEntry0( CCMPLUGINVPN_CREATEINSTANCEL_ENTRY );
       
    75 
       
    76     CCmPluginVpn* self = new( ELeave ) CCmPluginVpn( &aInitParam );
       
    77 	CleanupStack::PushL( self );
       
    78 	self->ConstructL();
       
    79 	CleanupStack::Pop( self );
       
    80 
       
    81 	OstTraceFunctionExit0( CCMPLUGINVPN_CREATEINSTANCEL_EXIT );
       
    82 	return self;				
       
    83 	}
       
    84 
       
    85 // ---------------------------------------------------------------------------
       
    86 // CCmPluginVpn::~CCmPluginVpn
       
    87 // ---------------------------------------------------------------------------
       
    88 //
       
    89 CCmPluginVpn::~CCmPluginVpn()
       
    90 	{
       
    91     OstTraceFunctionEntry0( CCMPLUGINVPN_CCMPLUGINVPN_ENTRY );
       
    92     
       
    93     ResetBearerRecords();
       
    94     
       
    95 	OstTraceFunctionExit0( CCMPLUGINVPN_CCMPLUGINVPN_EXIT );
       
    96 	}
       
    97 
       
    98 // ---------------------------------------------------------------------------
       
    99 // CCmPluginVpn::CCmPluginVpn
       
   100 // ---------------------------------------------------------------------------
       
   101 //
       
   102 CCmPluginVpn::CCmPluginVpn( TCmPluginInitParam* aInitParam )
       
   103 	: CCmPluginBaseEng( aInitParam ), iVirtualTableId(0), 
       
   104 	  iBearerPriorityTableId(0), iVirtualIapNextLayerRecord(NULL)
       
   105 	{
       
   106     OstTraceFunctionEntry0( DUP1_CCMPLUGINVPN_CCMPLUGINVPN_ENTRY );
       
   107     
       
   108     iBearerType = KPluginVPNBearerTypeUid;
       
   109 	
       
   110     OstTraceFunctionExit0( DUP1_CCMPLUGINVPN_CCMPLUGINVPN_EXIT );
       
   111 	}
       
   112 
       
   113 // ---------------------------------------------------------------------------
       
   114 // CCmPluginVpn::ConstructL
       
   115 // ---------------------------------------------------------------------------
       
   116 //
       
   117 void CCmPluginVpn::ConstructL()
       
   118 	{    
       
   119     OstTraceFunctionEntry0( CCMPLUGINVPN_CONSTRUCTL_ENTRY );
       
   120     
       
   121     if (!FeatureManager::FeatureSupported( KFeatureIdFfVpnClient ) )
       
   122         {   
       
   123         User::Leave( KErrNotSupported );
       
   124         }
       
   125     
       
   126     TRAP_IGNORE( iVirtualTableId = 
       
   127                         CCDVirtualIAPNextLayerRecord::TableIdL( iSession ) );       
       
   128     
       
   129     if( !iVirtualTableId )
       
   130         {
       
   131         iVirtualTableId = CCDVirtualIAPNextLayerRecord::CreateTableL( iSession );
       
   132         }
       
   133             
       
   134     TRAP_IGNORE( iBearerPriorityTableId =
       
   135             CCDGlobalBearerTypePriorizationRecord::TableIdL( iSession ) );
       
   136 
       
   137     if ( !iBearerPriorityTableId )
       
   138         {
       
   139         iBearerPriorityTableId =
       
   140                 CCDGlobalBearerTypePriorizationRecord::CreateTableL( iSession );
       
   141         }
       
   142     
       
   143 	CCmPluginBaseEng::ConstructL();
       
   144 	    
       
   145 	OstTraceFunctionExit0( CCMPLUGINVPN_CONSTRUCTL_EXIT );
       
   146 	}
       
   147 
       
   148 // ---------------------------------------------------------------------------
       
   149 // CCmPluginVpn::GetBearerInfoIntL
       
   150 // ---------------------------------------------------------------------------
       
   151 //
       
   152 TUint32 CCmPluginVpn::GetBearerInfoIntL( TUint32 aAttribute ) const
       
   153     {
       
   154     OstTraceFunctionEntry0( CCMPLUGINVPN_GETBEARERINFOINTL_ENTRY );
       
   155 
       
   156     TUint32 retVal( 0 );
       
   157     switch ( aAttribute )
       
   158         {
       
   159         case ECmSeamlessnessLevel:
       
   160             {
       
   161             retVal = ESeamlessnessShowprogress;
       
   162             }
       
   163             break;
       
   164         case ECmBearerType:
       
   165             {             
       
   166             retVal = iBearerType;
       
   167             }
       
   168             break;
       
   169         case ECmCommsDBBearerType:
       
   170             {                         
       
   171             retVal = KCommDbBearerVirtual;
       
   172             }
       
   173             break;
       
   174         case ECmExtensionLevel:
       
   175             {
       
   176             retVal = KExtensionBaseLevel;
       
   177             }
       
   178             break;
       
   179         case ECmDefaultUiPriority: //falls through
       
   180         case ECmDefaultPriority:
       
   181             {
       
   182             retVal = GetDefPriorityL( aAttribute );
       
   183             }
       
   184             break;
       
   185             
       
   186         default:
       
   187             {
       
   188             User::Leave( KErrNotSupported );
       
   189             }
       
   190             break;
       
   191         }
       
   192     
       
   193     OstTraceFunctionExit0( CCMPLUGINVPN_GETBEARERINFOINTL_EXIT );
       
   194     return retVal;
       
   195     }
       
   196 
       
   197 // ---------------------------------------------------------------------------
       
   198 // CCmPluginVpn::GetBearerInfoBoolL
       
   199 // ---------------------------------------------------------------------------
       
   200 //
       
   201 TBool CCmPluginVpn::GetBearerInfoBoolL( TUint32 aAttribute ) const
       
   202     {
       
   203     OstTraceFunctionEntry0( CCMPLUGINVPN_GETBEARERINFOBOOLL_ENTRY );
       
   204     
       
   205     TBool retVal( EFalse );
       
   206 
       
   207     switch ( aAttribute )
       
   208         {
       
   209         case ECmCoverage:
       
   210             {
       
   211             //This parameter is not actually in use for the VPN.
       
   212             //ConnMon component can make a proper coverage discovery for the VPN,
       
   213             //but CmManager just returns the default value.
       
   214             retVal = EFalse;
       
   215             }
       
   216             break;
       
   217         case ECmDestination:
       
   218             {
       
   219             retVal = EFalse;
       
   220             }
       
   221             break;
       
   222         case ECmBearerHasUi:
       
   223             {                
       
   224             retVal = EFalse;
       
   225             }
       
   226             break;
       
   227         case ECmIPv6Supported:
       
   228             {            
       
   229             retVal = EFalse;
       
   230             }
       
   231             break;
       
   232         case ECmVirtual:
       
   233             {
       
   234             retVal = ETrue;
       
   235             }
       
   236             break;
       
   237         default:
       
   238             {
       
   239             User::Leave( KErrNotSupported );
       
   240             }
       
   241             break;
       
   242         }    
       
   243     
       
   244     OstTraceFunctionExit0( CCMPLUGINVPN_GETBEARERINFOBOOLL_EXIT );
       
   245     return retVal;
       
   246     }
       
   247 
       
   248 // ---------------------------------------------------------------------------
       
   249 // CCmPluginVpn::GetBearerInfoStringL
       
   250 // ---------------------------------------------------------------------------
       
   251 //
       
   252 HBufC* CCmPluginVpn::GetBearerInfoStringL( TUint32 /*aAttribute*/ ) const
       
   253     {
       
   254     OstTraceFunctionEntry0( CCMPLUGINVPN_GETBEARERINFOSTRINGL_ENTRY );
       
   255     
       
   256     User::Leave( KErrNotSupported );
       
   257      
       
   258     OstTraceFunctionExit0( CCMPLUGINVPN_GETBEARERINFOSTRINGL_EXIT );
       
   259     
       
   260     return NULL;
       
   261     }
       
   262 
       
   263 // ---------------------------------------------------------------------------
       
   264 // CCmPluginVpn::GetBearerInfoString8L
       
   265 // ---------------------------------------------------------------------------
       
   266 //
       
   267 HBufC8* CCmPluginVpn::GetBearerInfoString8L( TUint32 /*aAttribute*/ ) const
       
   268     {
       
   269     OstTraceFunctionEntry0( CCMPLUGINVPN_GETBEARERINFOSTRING8L_ENTRY );
       
   270 
       
   271     User::Leave( KErrNotSupported );
       
   272 
       
   273     OstTraceFunctionExit0( CCMPLUGINVPN_GETBEARERINFOSTRING8L_EXIT );
       
   274  
       
   275     return NULL;
       
   276     }
       
   277 
       
   278 // ---------------------------------------------------------------------------
       
   279 // CCmPluginVpn::CanHandleIapIdL
       
   280 // ---------------------------------------------------------------------------
       
   281 //
       
   282 TBool CCmPluginVpn::CanHandleIapIdL( TUint32 aIapId ) const
       
   283     {
       
   284     OstTraceFunctionEntry0( CCMPLUGINVPN_CANHANDLEIAPIDL_ENTRY );
       
   285 
       
   286     TBool retVal( EFalse );
       
   287     
       
   288     CCDIAPRecord *iapRecord = static_cast<CCDIAPRecord *>
       
   289                             ( CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) );
       
   290         
       
   291     CleanupStack::PushL( iapRecord );
       
   292     iapRecord->SetRecordId( aIapId );
       
   293     
       
   294     iapRecord->LoadL( iSession );
       
   295     retVal = CanHandleIapIdL( iapRecord );
       
   296     
       
   297     CleanupStack::PopAndDestroy( iapRecord );
       
   298     
       
   299     OstTraceFunctionExit0( CCMPLUGINVPN_CANHANDLEIAPIDL_EXIT );
       
   300     return retVal;
       
   301     }
       
   302  
       
   303 // ---------------------------------------------------------------------------
       
   304 // CCmPluginVpn::CanHandleIapIdL
       
   305 // ---------------------------------------------------------------------------
       
   306 //
       
   307 TBool CCmPluginVpn::CanHandleIapIdL( CommsDat::CCDIAPRecord* aIapRecord ) const
       
   308     {
       
   309     OstTraceFunctionEntry0( DUP1_CCMPLUGINVPN_CANHANDLEIAPIDL_ENTRY );
       
   310     TBool retVal( EFalse );
       
   311         
       
   312     if( TPtrC(aIapRecord->iServiceType) == TPtrC(KCDTypeNameVPNService) ||
       
   313         TPtrC(aIapRecord->iBearerType) == TPtrC(KCDTypeNameVirtualBearer) )
       
   314         {
       
   315         // Further comparision is to find exact info that the IAP can handle by this plugin
       
   316         CMDBRecordSet<CCDVirtualBearerRecord>* bearersRS = 
       
   317                 new(ELeave) CMDBRecordSet<CCDVirtualBearerRecord>
       
   318                                                    (KCDTIdVirtualBearerRecord);
       
   319         CleanupStack::PushL( bearersRS );
       
   320 
       
   321         CCDVirtualBearerRecord* bearerRecord = 
       
   322                 static_cast<CCDVirtualBearerRecord *>
       
   323                     (CCDRecordBase::RecordFactoryL(KCDTIdVirtualBearerRecord));
       
   324 
       
   325         CleanupStack::PushL( bearerRecord );
       
   326     
       
   327         // Find entries used "vpnconnagt.agt" as agent from Table VirtualBearer
       
   328         bearerRecord->iBearerAgent.SetL( KVpnVirtualBearerAgent );
       
   329     
       
   330         bearersRS->iRecords.AppendL( bearerRecord );
       
   331 
       
   332         CleanupStack::Pop( bearerRecord );
       
   333         bearerRecord = NULL;
       
   334         
       
   335         if ( bearersRS->FindL( iSession ) )
       
   336             {
       
   337             TUint32 recordId = (*bearersRS)[0]->RecordId();
       
   338             TPtrC bearerName( (*bearersRS)[0]->iRecordName.GetL() );
       
   339         
       
   340             // Further comparing record ID referred to by this VPN IAP with entry ID in table VirtualBearer
       
   341             // And also comparing bear name with our expected one "vpnbearer"
       
   342             if( recordId == aIapRecord->iBearer && 
       
   343                 bearerName == TPtrC( KVpnVirtualBearerName ) )
       
   344                 {
       
   345                 retVal = ETrue;
       
   346                 }
       
   347             }        
       
   348         CleanupStack::PopAndDestroy( bearersRS );
       
   349         }
       
   350     
       
   351     OstTraceFunctionExit0( DUP1_CCMPLUGINVPN_CANHANDLEIAPIDL_EXIT );
       
   352     return retVal;
       
   353     }
       
   354 
       
   355 // ---------------------------------------------------------------------------
       
   356 // CCmPluginVpn::GetBearerTableIdsToBeObservedL
       
   357 // ---------------------------------------------------------------------------
       
   358 //
       
   359 void CCmPluginVpn::GetBearerTableIdsToBeObservedL( RArray<TUint32>& aTableIdArray ) const
       
   360     {
       
   361     OstTraceFunctionEntry0( CCMPLUGINVPN_GETBEARERTABLEIDSTOBEOBSERVEDL_ENTRY );
       
   362     
       
   363     aTableIdArray.AppendL( KCDTIdVirtualBearerRecord );
       
   364     aTableIdArray.AppendL( iVirtualTableId );
       
   365     
       
   366     OstTraceFunctionExit0( CCMPLUGINVPN_GETBEARERTABLEIDSTOBEOBSERVEDL_EXIT );
       
   367     }
       
   368 
       
   369 // ---------------------------------------------------------------------------
       
   370 // CCmPluginVpn::GetBearerSpecificRecordsL
       
   371 // ---------------------------------------------------------------------------
       
   372 //
       
   373 void CCmPluginVpn::GetBearerSpecificRecordsL(RPointerArray<CommsDat::CCDRecordBase>& aRecordArray )
       
   374     {
       
   375     OstTraceFunctionEntry0( CCMPLUGINVPN_GETBEARERSPECIFICRECORDSL_ENTRY );
       
   376        
       
   377     __ASSERT_DEBUG( iVirtualIapNextLayerRecord != NULL, User::Invariant() );  
       
   378             
       
   379     CCDVirtualIAPNextLayerRecord* virtualIapNextLayerRecordCopy = 
       
   380                 new (ELeave) CCDVirtualIAPNextLayerRecord( iVirtualTableId );
       
   381     CleanupStack::PushL( virtualIapNextLayerRecordCopy );
       
   382     
       
   383     TUint value = iVirtualIapNextLayerRecord->iIAP;
       
   384     virtualIapNextLayerRecordCopy->iIAP = value;
       
   385     
       
   386     value = iVirtualIapNextLayerRecord->iNextLayerSNAP;
       
   387     virtualIapNextLayerRecordCopy->iNextLayerSNAP = value;
       
   388     
       
   389     value = iVirtualIapNextLayerRecord->iNextLayerIAP;
       
   390     virtualIapNextLayerRecordCopy->iNextLayerIAP = value;
       
   391     
       
   392     virtualIapNextLayerRecordCopy->SetElementId( iVirtualIapNextLayerRecord->ElementId() );
       
   393     User::LeaveIfError( aRecordArray.Append( virtualIapNextLayerRecordCopy ) );
       
   394     CleanupStack::Pop( virtualIapNextLayerRecordCopy );    
       
   395     OstTraceFunctionExit0( CCMPLUGINVPN_GETBEARERSPECIFICRECORDSL_EXIT );
       
   396     }
       
   397 
       
   398 // ---------------------------------------------------------------------------
       
   399 // CCmPluginVpn::GetBearerIntAttributeL
       
   400 // ---------------------------------------------------------------------------
       
   401 //
       
   402 TUint32 CCmPluginVpn::GetBearerIntAttributeL( 
       
   403         TUint32 aAttribute, 
       
   404         RPointerArray<CommsDat::CCDRecordBase>& aGenRecordArray,
       
   405         RPointerArray<CommsDat::CCDRecordBase>& /*aBearerSpecRecordArray*/ )
       
   406     {
       
   407     OstTraceFunctionEntry0( CCMPLUGINVPN_GETBEARERINTATTRIBUTEL_ENTRY );
       
   408     
       
   409     CCDVPNServiceRecord* serviceRecord = static_cast<CCDVPNServiceRecord *>                
       
   410                                                         ( aGenRecordArray[KServiceRecordIndex] );
       
   411         
       
   412     TUint32 retVal( 0 );
       
   413     switch( aAttribute )
       
   414         {
       
   415         case ECmExtensionLevel:   
       
   416             {
       
   417             retVal = KExtensionBaseLevel;
       
   418             }
       
   419             break;
       
   420         case ECmCommsDBBearerType:
       
   421             {
       
   422             TCommsDBBearerTechnology bearer = KCommDbBearerVirtual; 
       
   423             retVal = bearer;
       
   424             }
       
   425             break;
       
   426         case ECmNextLayerIapId:
       
   427         case EVpnIapId:
       
   428             {            
       
   429             TUint recordId = serviceRecord->iServiceIAP;//TODO, can't use this straight? link containd the ID.
       
   430             if (recordId != 0)
       
   431                 {
       
   432                 CCDIAPRecord *iapRecord = static_cast<CCDIAPRecord *>
       
   433                                         ( CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) );
       
   434                 
       
   435                 CleanupStack::PushL( iapRecord );
       
   436                 iapRecord->SetRecordId( recordId );
       
   437                 iapRecord->LoadL( iSession );
       
   438                 retVal = iapRecord->RecordId();
       
   439                 CleanupStack::PopAndDestroy( iapRecord );                             
       
   440                 }
       
   441             }
       
   442             break;
       
   443         case EVpnNetworkId:
       
   444         case ECmNextLayerSNAPId:
       
   445             {
       
   446             TUint recordId = serviceRecord->iServiceSNAP;
       
   447             if ( recordId != 0 )
       
   448                 {
       
   449                 CCDAccessPointRecord* accessPointRecord = static_cast<CCDAccessPointRecord*>(
       
   450                         CCDRecordBase::RecordFactoryL( KCDTIdAccessPointRecord ) );
       
   451                 CleanupStack::PushL( accessPointRecord );
       
   452                 accessPointRecord->SetRecordId( recordId );
       
   453                 accessPointRecord->LoadL( iSession );
       
   454                 retVal = accessPointRecord->iRecordTag;
       
   455                 CleanupStack::PopAndDestroy( accessPointRecord );
       
   456 
       
   457                 if ( aAttribute == EVpnNetworkId )
       
   458                     {
       
   459                     __ASSERT_DEBUG( retVal >= KCmmDestIdIntervalMin, User::Invariant() );//TODO, replace with iCustomSelectionPolicy
       
   460                     retVal -= KCmmDestIdIntervalMin;
       
   461                     }
       
   462                 }
       
   463             }
       
   464             break;
       
   465         default:
       
   466             {
       
   467             retVal = GetBearerInfoIntL( aAttribute );
       
   468             }
       
   469             break;
       
   470         }
       
   471     
       
   472     
       
   473     OstTraceFunctionExit0( CCMPLUGINVPN_GETBEARERINTATTRIBUTEL_EXIT );
       
   474     return retVal;
       
   475     }
       
   476 
       
   477 // ---------------------------------------------------------------------------
       
   478 // CCmPluginVpn::GetBearerBoolAttributeL
       
   479 // ---------------------------------------------------------------------------
       
   480 //
       
   481 TBool CCmPluginVpn::GetBearerBoolAttributeL( 
       
   482         TUint32 aAttribute, 
       
   483         RPointerArray<CommsDat::CCDRecordBase>& /*aGenRecordArray*/,
       
   484         RPointerArray<CommsDat::CCDRecordBase>& /*aBearerSpecRecordArray*/ )
       
   485     {
       
   486     OstTraceFunctionEntry0( CCMPLUGINVPN_GETBEARERBOOLATTRIBUTEL_ENTRY );
       
   487     //We don't have IAP specific bool attributes, but the bearer specific
       
   488     //attributes may also be asked this way...
       
   489     TBool retVal = GetBearerInfoBoolL( aAttribute );              
       
   490     OstTraceFunctionExit0( CCMPLUGINVPN_GETBEARERBOOLATTRIBUTEL_EXIT );
       
   491     return retVal;
       
   492     }
       
   493   
       
   494 // ---------------------------------------------------------------------------
       
   495 // CCmPluginVpn::GetBearerStringAttributeL
       
   496 // ---------------------------------------------------------------------------
       
   497 //
       
   498 HBufC* CCmPluginVpn::GetBearerStringAttributeL( 
       
   499         TUint32 aAttribute, 
       
   500         RPointerArray<CommsDat::CCDRecordBase>& aGenRecordArray,
       
   501         RPointerArray<CommsDat::CCDRecordBase>& /*aBearerSpecRecordArray*/ )
       
   502     {
       
   503     OstTraceFunctionEntry0( CCMPLUGINVPN_GETBEARERSTRINGATTRIBUTEL_ENTRY );
       
   504     
       
   505     CCDVPNServiceRecord* serviceRecord = static_cast<CCDVPNServiceRecord *>                
       
   506                                                         ( aGenRecordArray[KServiceRecordIndex] );
       
   507 
       
   508     HBufC* retVal =  NULL;
       
   509     switch( aAttribute )
       
   510         {
       
   511         case EVpnServicePolicy:
       
   512             {
       
   513             retVal = TPtrC( serviceRecord->iServicePolicy ).AllocL();
       
   514             }
       
   515             break;
       
   516         default:
       
   517             {
       
   518             retVal = GetBearerInfoStringL( aAttribute );
       
   519             }
       
   520             break;
       
   521         }
       
   522     OstTraceFunctionExit0( CCMPLUGINVPN_GETBEARERSTRINGATTRIBUTEL_EXIT );
       
   523     return retVal;
       
   524     }
       
   525 
       
   526 // ---------------------------------------------------------------------------
       
   527 // CCmPluginVpn::GetBearerString8AttributeL
       
   528 // ---------------------------------------------------------------------------
       
   529 //
       
   530 HBufC8* CCmPluginVpn::GetBearerString8AttributeL( 
       
   531         TUint32 aAttribute, 
       
   532         RPointerArray<CommsDat::CCDRecordBase>& /*aGenRecordArray*/,
       
   533         RPointerArray<CommsDat::CCDRecordBase>& /*aBearerSpecRecordArray*/ )
       
   534     {    
       
   535     OstTraceFunctionEntry0( CCMPLUGINVPN_GETBEARERSTRING8ATTRIBUTEL_ENTRY );
       
   536     
       
   537     HBufC8* retVal = GetBearerInfoString8L( aAttribute );
       
   538     
       
   539     OstTraceFunctionExit0( CCMPLUGINVPN_GETBEARERSTRING8ATTRIBUTEL_EXIT );
       
   540     return retVal;
       
   541     }
       
   542 
       
   543 // ---------------------------------------------------------------------------
       
   544 // CCmPluginVpn::SetBearerIntAttributeL
       
   545 // ---------------------------------------------------------------------------
       
   546 //
       
   547 void CCmPluginVpn::SetBearerIntAttributeL( 
       
   548         TUint32 aAttribute, 
       
   549         TUint32 aValue, 
       
   550         RPointerArray<CommsDat::CCDRecordBase>& aGenRecordArray,
       
   551         RPointerArray<CommsDat::CCDRecordBase>& aBearerSpecRecordArray )
       
   552     {    
       
   553     OstTraceFunctionEntry0( CCMPLUGINVPN_SETBEARERINTATTRIBUTEL_ENTRY );
       
   554 
       
   555     CCDVPNServiceRecord* serviceRecord = static_cast<CCDVPNServiceRecord *>                
       
   556                                                     (aGenRecordArray[KServiceRecordIndex]);
       
   557 
       
   558     CCDVirtualIAPNextLayerRecord* virtualIapNextLayerRecord = static_cast<CCDVirtualIAPNextLayerRecord*>
       
   559                                                         (aBearerSpecRecordArray[KVirtualIAPNextLayerRecordIndex]);
       
   560 
       
   561     
       
   562     switch(aAttribute)
       
   563         {
       
   564         case ECmNextLayerIapId: //falls through
       
   565         case EVpnIapId:
       
   566             {
       
   567             if( aValue == 0 || aValue >= (KCmmConnMethodIdIntervalMax - 2) )
       
   568                 {
       
   569                 User::Leave( KErrArgument );
       
   570                 }            
       
   571             
       
   572             //Tries to find corresponding IAP record.
       
   573             CCDIAPRecord *iapRecord = static_cast<CCDIAPRecord *>
       
   574                                     ( CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) );
       
   575                 
       
   576             CleanupStack::PushL( iapRecord );
       
   577             iapRecord->SetRecordId( aValue );            
       
   578             TRAPD(err, iapRecord->LoadL( iSession ));
       
   579             if ( err == KErrNotFound )
       
   580                 {
       
   581                 User::Leave( KErrArgument );
       
   582                 }
       
   583             User::LeaveIfError( err );
       
   584             
       
   585             serviceRecord->iServiceIAP = iapRecord->RecordId();
       
   586             serviceRecord->iServiceNetwork = 0;
       
   587             serviceRecord->iServiceSNAP = 0;
       
   588             virtualIapNextLayerRecord->iNextLayerIAP.SetL( aValue );
       
   589             virtualIapNextLayerRecord->iNextLayerSNAP = 0;
       
   590             CleanupStack::PopAndDestroy( iapRecord );
       
   591             }
       
   592             break;
       
   593         case EVpnNetworkId: //falls through
       
   594             {
       
   595             if ( aValue == 0 || aValue > (KCmmDestIdIntervalLegacyMax - 2) )
       
   596                 {
       
   597                 User::Leave( KErrArgument );
       
   598                 }
       
   599             }
       
   600             // Fallthrough intended.
       
   601         case ECmNextLayerSNAPId:
       
   602             {
       
   603             if ( aValue <= ( KCmmDestIdIntervalLegacyMax - 2 ) )
       
   604                 {
       
   605                 aValue += KCmmDestIdIntervalMin;
       
   606                 }
       
   607 
       
   608             if ( aValue <= KCmmDestIdIntervalMin ||
       
   609                     aValue > KCmmDestIdIntervalMax - 2 )
       
   610                 {
       
   611                 User::Leave( KErrArgument );
       
   612                 }
       
   613 
       
   614             CCDAccessPointRecord* accessPointRecord = static_cast<CCDAccessPointRecord*>(
       
   615                     CCDRecordBase::RecordFactoryL( KCDTIdAccessPointRecord ) );
       
   616             CleanupStack::PushL( accessPointRecord );
       
   617             accessPointRecord->iRecordTag = aValue;
       
   618             if ( accessPointRecord->FindL( iSession ) )
       
   619                 {
       
   620                 serviceRecord->iServiceIAP = 0;
       
   621                 serviceRecord->iServiceNetwork = 0;
       
   622                 serviceRecord->iServiceSNAP = accessPointRecord->RecordId();
       
   623                 virtualIapNextLayerRecord->iNextLayerIAP = 0;
       
   624                 virtualIapNextLayerRecord->iNextLayerSNAP.SetL( aValue );
       
   625                 }
       
   626             else
       
   627                 {
       
   628                 User::Leave( KErrArgument );
       
   629                 }
       
   630             CleanupStack::PopAndDestroy( accessPointRecord );
       
   631             }
       
   632             break;
       
   633         default:
       
   634             {
       
   635             User::Leave( KErrNotSupported );
       
   636             }
       
   637             break;
       
   638         }
       
   639     
       
   640     OstTraceFunctionExit0( CCMPLUGINVPN_SETBEARERINTATTRIBUTEL_EXIT );
       
   641     }
       
   642 
       
   643 // ---------------------------------------------------------------------------
       
   644 // CCmPluginVpn::SetBearerBoolAttributeL
       
   645 // ---------------------------------------------------------------------------
       
   646 //
       
   647 void CCmPluginVpn::SetBearerBoolAttributeL( 
       
   648         TUint32 /*aAttribute*/, 
       
   649         TBool /*aValue*/,
       
   650         RPointerArray<CommsDat::CCDRecordBase>& /*aGenRecordArray*/,
       
   651         RPointerArray<CommsDat::CCDRecordBase>& /*aBearerSpecRecordArray*/ )
       
   652     {    
       
   653     OstTraceFunctionEntry0( CCMPLUGINVPN_SETBEARERBOOLATTRIBUTEL_ENTRY );
       
   654     
       
   655     User::Leave( KErrNotSupported );
       
   656     
       
   657     OstTraceFunctionExit0( CCMPLUGINVPN_SETBEARERBOOLATTRIBUTEL_EXIT );
       
   658     }
       
   659   
       
   660 // ---------------------------------------------------------------------------
       
   661 // CCmPluginVpn::SetBearerStringAttributeL
       
   662 // ---------------------------------------------------------------------------
       
   663 //
       
   664 void CCmPluginVpn::SetBearerStringAttributeL( 
       
   665         TUint32 aAttribute, 
       
   666         const TDesC16& aValue,
       
   667         RPointerArray<CommsDat::CCDRecordBase>& aGenRecordArray,
       
   668         RPointerArray<CommsDat::CCDRecordBase>& /*aBearerSpecRecordArray*/ )
       
   669     {    
       
   670     OstTraceFunctionEntry0( CCMPLUGINVPN_SETBEARERSTRINGATTRIBUTEL_ENTRY );
       
   671 
       
   672     CCDVPNServiceRecord* serviceRecord = static_cast<CCDVPNServiceRecord *>                
       
   673                                                     ( aGenRecordArray[KServiceRecordIndex] );
       
   674 
       
   675     switch(aAttribute)
       
   676         {
       
   677         case EVpnServicePolicyName:
       
   678             {
       
   679             User::Leave( KErrNotSupported );
       
   680             }
       
   681             break;
       
   682         case EVpnServicePolicy:
       
   683             {
       
   684             serviceRecord->iServicePolicy.SetL( aValue );
       
   685             }
       
   686             break;
       
   687         default:
       
   688             {
       
   689             User::Leave( KErrNotSupported );
       
   690             }
       
   691             break;
       
   692         }    
       
   693     
       
   694     OstTraceFunctionExit0( CCMPLUGINVPN_SETBEARERSTRINGATTRIBUTEL_EXIT );
       
   695     }
       
   696 
       
   697 // ---------------------------------------------------------------------------
       
   698 // CCmPluginVpn::SetBearerString8AttributeL
       
   699 // ---------------------------------------------------------------------------
       
   700 //
       
   701 void CCmPluginVpn::SetBearerString8AttributeL( 
       
   702         TUint32 /*aAttribute*/, 
       
   703         const TDesC8& /*aValue*/,                                                    
       
   704         RPointerArray<CommsDat::CCDRecordBase>& /*aGenRecordArray*/,
       
   705         RPointerArray<CommsDat::CCDRecordBase>& /*aBearerSpecRecordArray*/ )
       
   706     {    
       
   707     OstTraceFunctionEntry0( CCMPLUGINVPN_SETBEARERSTRING8ATTRIBUTEL_ENTRY );
       
   708 
       
   709     User::Leave( KErrNotSupported );
       
   710     
       
   711     OstTraceFunctionExit0( CCMPLUGINVPN_SETBEARERSTRING8ATTRIBUTEL_EXIT );
       
   712     }
       
   713 
       
   714 // ---------------------------------------------------------------------------
       
   715 // CCmPluginVpn::PreparePluginToLoadRecordsL
       
   716 // ---------------------------------------------------------------------------
       
   717 //
       
   718 void CCmPluginVpn::PreparePluginToLoadRecordsL()
       
   719     {    
       
   720     }
       
   721 
       
   722 // ---------------------------------------------------------------------------
       
   723 // CCmPluginVpn::PrepareToCopyDataL
       
   724 // ---------------------------------------------------------------------------
       
   725 //
       
   726 void CCmPluginVpn::PrepareToCopyDataL( CCmPluginBaseEng* /*aCopyInstance*/ )
       
   727     {    
       
   728     }
       
   729 
       
   730 // ---------------------------------------------------------------------------
       
   731 // CCmPluginVpn::PreparePluginToUpdateRecordsL
       
   732 // ---------------------------------------------------------------------------
       
   733 //
       
   734 void CCmPluginVpn::PreparePluginToUpdateRecordsL(
       
   735         RPointerArray<CommsDat::CCDRecordBase>& /*aGenRecordArray*/,
       
   736         RPointerArray<CommsDat::CCDRecordBase>& /*aBearerSpecRecordArray*/ )
       
   737     {    
       
   738     }
       
   739 
       
   740 // ---------------------------------------------------------------------------
       
   741 // CCmPluginVpn::PrepareToDeleteRecordsL
       
   742 // ---------------------------------------------------------------------------
       
   743 //
       
   744 void CCmPluginVpn::PrepareToDeleteRecordsL()
       
   745     {    
       
   746     }
       
   747 
       
   748 // ---------------------------------------------------------------------------
       
   749 // CCmPluginVpn::LoadServiceRecordL
       
   750 // ---------------------------------------------------------------------------
       
   751 //
       
   752 void CCmPluginVpn::LoadServiceRecordL()
       
   753     {
       
   754     OstTraceFunctionEntry0( CCMPLUGINVPN_LOADSERVICERECORDL_ENTRY );
       
   755     
       
   756     __ASSERT_DEBUG( iServiceRecord == NULL, User::Invariant() );
       
   757     
       
   758     if( TPtrC( KCDTypeNameVPNService ) == iIapRecord->iServiceType )
       
   759         {
       
   760         iServiceRecord = static_cast<CCDVPNServiceRecord *>
       
   761                     ( CCDRecordBase::RecordFactoryL(KCDTIdVPNServiceRecord) );
       
   762         iServiceRecord->SetRecordId( iIapRecord->iService );
       
   763         iServiceRecord->LoadL( iSession );        
       
   764         }
       
   765     else
       
   766         // this IAP service is not supported by this plugin.
       
   767         {
       
   768         User::Leave( KErrNotSupported );
       
   769         }    
       
   770     OstTraceFunctionExit0( CCMPLUGINVPN_LOADSERVICERECORDL_EXIT );
       
   771     }
       
   772 
       
   773 // ---------------------------------------------------------------------------
       
   774 // CCmPluginVpn::CreateServiceRecordL
       
   775 // ---------------------------------------------------------------------------
       
   776 //
       
   777 void CCmPluginVpn::CreateServiceRecordL()
       
   778     {
       
   779     OstTraceFunctionEntry0( CCMPLUGINVPN_CREATESERVICERECORDL_ENTRY );
       
   780     
       
   781     delete iServiceRecord; 
       
   782     iServiceRecord = NULL;
       
   783     
       
   784     iServiceRecord = static_cast<CCDVPNServiceRecord *>
       
   785                     ( CCDRecordBase::RecordFactoryL( KCDTIdVPNServiceRecord ) );
       
   786     
       
   787     ServiceRecord().iServicePolicy.SetL( KNullDesC );
       
   788     ServiceRecord().iServiceIAP = 0;
       
   789     ServiceRecord().iServiceNetwork = 0;
       
   790     ServiceRecord().iServiceSNAP = 0;
       
   791     
       
   792     OstTraceFunctionExit0( CCMPLUGINVPN_CREATESERVICERECORDL_EXIT );
       
   793     }
       
   794 
       
   795 // ---------------------------------------------------------------------------
       
   796 // CCmPluginVpn::UpdateServiceRecordL
       
   797 // ---------------------------------------------------------------------------
       
   798 //
       
   799 void CCmPluginVpn::UpdateServiceRecordL( 
       
   800         RPointerArray<CommsDat::CCDRecordBase>& aGenRecordArray,
       
   801         RPointerArray<CommsDat::CCDRecordBase>& /*aBearerSpecRecordArray*/ )
       
   802     {
       
   803     OstTraceFunctionEntry0( CCMPLUGINVPN_UPDATESERVICERECORDL_ENTRY );
       
   804         
       
   805     // Delete the original record and create a copy from the parameter
       
   806     delete iServiceRecord;
       
   807     iServiceRecord = NULL;
       
   808 
       
   809     CCDVPNServiceRecord* vpnServiceRecordFrom =
       
   810             static_cast<CCDVPNServiceRecord *>( aGenRecordArray[KServiceRecordIndex] );
       
   811 
       
   812     
       
   813     iServiceRecord = static_cast<CCDVPNServiceRecord*>
       
   814                                   ( CCDRecordBase::CreateCopyRecordL( *vpnServiceRecordFrom ) );
       
   815     iServiceRecord->SetElementId( vpnServiceRecordFrom->ElementId() );
       
   816     
       
   817     if ( !iServiceRecord->RecordId() )
       
   818         {
       
   819         iServiceRecord->SetRecordId( KCDNewRecordRequest );
       
   820         iServiceRecord->StoreL( iSession );
       
   821         
       
   822         vpnServiceRecordFrom->SetElementId( ServiceRecord().ElementId() );
       
   823         }
       
   824     else
       
   825         {
       
   826         iServiceRecord->ModifyL( iSession );
       
   827         }    
       
   828     
       
   829     OstTraceFunctionExit0( CCMPLUGINVPN_UPDATESERVICERECORDL_EXIT );
       
   830     }
       
   831 
       
   832 // ---------------------------------------------------------------------------
       
   833 // CCmPluginVpn::CopyServiceRecordL
       
   834 // ---------------------------------------------------------------------------
       
   835 //
       
   836 CommsDat::CCDRecordBase* CCmPluginVpn::CopyServiceRecordL()
       
   837     {
       
   838     OstTraceFunctionEntry0( CCMPLUGINVPN_COPYSERVICERECORDL_ENTRY );
       
   839     
       
   840     __ASSERT_DEBUG( iServiceRecord != NULL, User::Invariant());    
       
   841     CCDRecordBase* serviceRecord = static_cast<CCDVPNServiceRecord*>
       
   842                                   ( CCDRecordBase::CreateCopyRecordL( *iServiceRecord ) );     
       
   843     OstTraceFunctionExit0( CCMPLUGINVPN_COPYSERVICERECORDL_EXIT );
       
   844     return serviceRecord;    
       
   845     }
       
   846 
       
   847 // ---------------------------------------------------------------------------
       
   848 // CCmPluginVpn::ServiceRecordId
       
   849 // ---------------------------------------------------------------------------
       
   850 //
       
   851 TUint32 CCmPluginVpn::ServiceRecordId() const
       
   852     {
       
   853     OstTraceFunctionEntry0( CCMPLUGINVPN_SERVICERECORDID_ENTRY );
       
   854     
       
   855     TUint32 retVal = ServiceRecord().RecordId();
       
   856     
       
   857     OstTraceFunctionExit0( CCMPLUGINVPN_SERVICERECORDID_EXIT );
       
   858     return retVal;
       
   859     }
       
   860 
       
   861 // ---------------------------------------------------------------------------
       
   862 // CCmPluginVpn::ServiceRecordNameLC
       
   863 // ---------------------------------------------------------------------------
       
   864 //
       
   865 void CCmPluginVpn::ServiceRecordNameLC( HBufC* &aServiceName )
       
   866     {
       
   867     OstTraceFunctionEntry0( CCMPLUGINVPN_SERVICERECORDNAMELC_ENTRY );    
       
   868     aServiceName = TPtrC( KCDTypeNameVPNService ).AllocLC();      
       
   869     OstTraceFunctionExit0( CCMPLUGINVPN_SERVICERECORDNAMELC_EXIT );
       
   870     }
       
   871 
       
   872 // ---------------------------------------------------------------------------
       
   873 // CCmPluginVpn::LoadBearerRecordsL
       
   874 // ---------------------------------------------------------------------------
       
   875 //
       
   876 void CCmPluginVpn::LoadBearerRecordsL()
       
   877     {
       
   878     OstTraceFunctionEntry0( CCMPLUGINVPN_LOADBEARERRECORDSL_ENTRY );
       
   879     
       
   880     delete iVirtualIapNextLayerRecord;
       
   881     iVirtualIapNextLayerRecord = NULL;
       
   882             
       
   883     CMDBRecordSet<CCDVirtualIAPNextLayerRecord>* virtualRS = 
       
   884               new(ELeave) CMDBRecordSet<CCDVirtualIAPNextLayerRecord>( iVirtualTableId );
       
   885     CleanupStack::PushL( virtualRS );
       
   886     
       
   887     CCDVirtualIAPNextLayerRecord* record = 
       
   888                             new (ELeave) CCDVirtualIAPNextLayerRecord( iVirtualTableId );
       
   889     
       
   890     record->iIAP = iIapRecord->RecordId();
       
   891     CleanupStack::PushL( record );
       
   892     virtualRS->iRecords.AppendL( record );
       
   893     CleanupStack::Pop( record );
       
   894     record = NULL;
       
   895     
       
   896     if( virtualRS->FindL( iSession ) )
       
   897         {
       
   898         iVirtualIapNextLayerRecord = new (ELeave) CCDVirtualIAPNextLayerRecord( iVirtualTableId );
       
   899         iVirtualIapNextLayerRecord->SetRecordId( (*virtualRS)[0]->RecordId() );        
       
   900         iVirtualIapNextLayerRecord->LoadL( iSession );        
       
   901         }
       
   902     else
       
   903         {        
       
   904         User::Leave( KErrNotFound );
       
   905         }
       
   906     
       
   907     CleanupStack::PopAndDestroy( virtualRS );
       
   908     
       
   909     OstTraceFunctionExit0( CCMPLUGINVPN_LOADBEARERRECORDSL_EXIT );
       
   910     }
       
   911 
       
   912 // ---------------------------------------------------------------------------
       
   913 // CCmPluginVpn::CreateBearerRecordsL
       
   914 // ---------------------------------------------------------------------------
       
   915 //
       
   916 void CCmPluginVpn::CreateBearerRecordsL()
       
   917     {
       
   918     OstTraceFunctionEntry0( CCMPLUGINVPN_CREATEBEARERRECORDSL_ENTRY );
       
   919 
       
   920     delete iVirtualIapNextLayerRecord;
       
   921     iVirtualIapNextLayerRecord = NULL;
       
   922     
       
   923     iVirtualIapNextLayerRecord = new (ELeave) CCDVirtualIAPNextLayerRecord( iVirtualTableId );
       
   924 
       
   925     OstTraceFunctionExit0( CCMPLUGINVPN_CREATEBEARERRECORDSL_EXIT );
       
   926     }
       
   927 
       
   928 // ---------------------------------------------------------------------------
       
   929 // CCmPluginVpn::UpdateBearerRecordsL
       
   930 // ---------------------------------------------------------------------------
       
   931 //
       
   932 void CCmPluginVpn::UpdateBearerRecordsL( 
       
   933         RPointerArray<CommsDat::CCDRecordBase>& aGenRecordArray,
       
   934         RPointerArray<CommsDat::CCDRecordBase>& aBearerSpecRecordArray )
       
   935     {
       
   936     OstTraceFunctionEntry0( CCMPLUGINVPN_UPDATEBEARERRECORDSL_ENTRY );
       
   937         
       
   938     delete iVirtualIapNextLayerRecord;
       
   939     iVirtualIapNextLayerRecord = NULL;
       
   940     
       
   941     iVirtualIapNextLayerRecord = new (ELeave) CCDVirtualIAPNextLayerRecord( iVirtualTableId );
       
   942     
       
   943     CCDVirtualIAPNextLayerRecord* virtualIAPNextLayerRecordFrom = 
       
   944             static_cast<CCDVirtualIAPNextLayerRecord*>(aBearerSpecRecordArray[KVirtualIAPNextLayerRecordIndex]);
       
   945     
       
   946     CCDIAPRecord *iapRecord = static_cast<CCDIAPRecord *>
       
   947                             ( aGenRecordArray[KIapRecordIndex] );
       
   948 
       
   949     
       
   950     TUint value = iapRecord->RecordId();
       
   951     iVirtualIapNextLayerRecord->iIAP = value;
       
   952     value = virtualIAPNextLayerRecordFrom->iNextLayerSNAP;
       
   953     iVirtualIapNextLayerRecord->iNextLayerSNAP = value;
       
   954     value = virtualIAPNextLayerRecordFrom->iNextLayerIAP;
       
   955     iVirtualIapNextLayerRecord->iNextLayerIAP = value;    
       
   956     iVirtualIapNextLayerRecord->SetElementId(virtualIAPNextLayerRecordFrom->ElementId());
       
   957     
       
   958     if ( !iVirtualIapNextLayerRecord->RecordId() )
       
   959         {
       
   960         iVirtualIapNextLayerRecord->SetRecordId( KCDNewRecordRequest );
       
   961         iVirtualIapNextLayerRecord->StoreL( iSession );
       
   962         virtualIAPNextLayerRecordFrom->SetElementId( iVirtualIapNextLayerRecord->ElementId() );
       
   963         }
       
   964     else
       
   965         {
       
   966         iVirtualIapNextLayerRecord->ModifyL( iSession );
       
   967         }
       
   968 
       
   969     OstTraceFunctionExit0( CCMPLUGINVPN_UPDATEBEARERRECORDSL_EXIT );
       
   970     }
       
   971 
       
   972 // ---------------------------------------------------------------------------
       
   973 // CCmPluginVpn::DeleteBearerRecordsL
       
   974 // ---------------------------------------------------------------------------
       
   975 //
       
   976 void CCmPluginVpn::DeleteBearerRecordsL()
       
   977     {
       
   978     OstTraceFunctionEntry0( CCMPLUGINVPN_DELETEBEARERRECORDSL_ENTRY );    
       
   979     iVirtualIapNextLayerRecord->DeleteL( iSession );
       
   980     OstTraceFunctionExit0( CCMPLUGINVPN_DELETEBEARERRECORDSL_EXIT );
       
   981     }
       
   982 
       
   983 // ---------------------------------------------------------------------------
       
   984 // CCmPluginVpn::ResetBearerRecords
       
   985 // ---------------------------------------------------------------------------
       
   986 //
       
   987 void CCmPluginVpn::ResetBearerRecords()
       
   988     {
       
   989     OstTraceFunctionEntry0( CCMPLUGINVPN_RESETBEARERRECORDS_ENTRY );
       
   990     
       
   991     delete iVirtualIapNextLayerRecord;
       
   992     iVirtualIapNextLayerRecord = NULL;    
       
   993     OstTraceFunctionExit0( CCMPLUGINVPN_RESETBEARERRECORDS_EXIT );
       
   994     }
       
   995 
       
   996 // ---------------------------------------------------------------------------
       
   997 // CCmPluginVpn::CopyBearerRecordsL
       
   998 // ---------------------------------------------------------------------------
       
   999 //
       
  1000 void CCmPluginVpn::CopyBearerRecordsL( CCmPluginBaseEng* aCopyInstance ) 
       
  1001     {
       
  1002     OstTraceFunctionEntry0( CCMPLUGINVPN_COPYBEARERRECORDSL_ENTRY );
       
  1003     
       
  1004     __ASSERT_DEBUG(iVirtualIapNextLayerRecord != NULL, User::Invariant());
       
  1005            
       
  1006     CCmPluginVpn* plugin = static_cast<CCmPluginVpn*>( aCopyInstance );
       
  1007 
       
  1008     __ASSERT_DEBUG(plugin->iVirtualIapNextLayerRecord == NULL, User::Invariant());
       
  1009         
       
  1010     plugin->iVirtualIapNextLayerRecord = new (ELeave) CCDVirtualIAPNextLayerRecord( iVirtualTableId );
       
  1011     TUint value = iVirtualIapNextLayerRecord->iIAP;
       
  1012     plugin->iVirtualIapNextLayerRecord->iIAP = value;
       
  1013     value = iVirtualIapNextLayerRecord->iNextLayerSNAP;
       
  1014     plugin->iVirtualIapNextLayerRecord->iNextLayerSNAP = value;
       
  1015     value = iVirtualIapNextLayerRecord->iNextLayerIAP;
       
  1016     plugin->iVirtualIapNextLayerRecord->iNextLayerIAP = value;    
       
  1017 
       
  1018     OstTraceFunctionExit0( CCMPLUGINVPN_COPYBEARERRECORDSL_EXIT );
       
  1019     }
       
  1020 
       
  1021 // ---------------------------------------------------------------------------
       
  1022 // CCmPluginVpn::BearerRecordIdL
       
  1023 // ---------------------------------------------------------------------------
       
  1024 //
       
  1025 void CCmPluginVpn::BearerRecordIdL( TUint32& aRecordId )
       
  1026     {
       
  1027     OstTraceFunctionEntry0( CCMPLUGINVPN_BEARERRECORDIDL_ENTRY );
       
  1028     
       
  1029     CCDVirtualBearerRecord* bearerRecord = GetVirtualBearerRecordLC();
       
  1030     aRecordId = bearerRecord->RecordId();
       
  1031     CleanupStack::PopAndDestroy(bearerRecord);
       
  1032 
       
  1033     OstTraceFunctionExit0( CCMPLUGINVPN_BEARERRECORDIDL_EXIT );
       
  1034     }
       
  1035 
       
  1036 // ---------------------------------------------------------------------------
       
  1037 // CCmPluginVpn::BearerRecordNameLC
       
  1038 // ---------------------------------------------------------------------------
       
  1039 //
       
  1040 void CCmPluginVpn::BearerRecordNameLC( HBufC* &aBearerName )
       
  1041     {   
       
  1042     OstTraceFunctionEntry0( CCMPLUGINVPN_BEARERRECORDNAMELC_ENTRY );
       
  1043     
       
  1044     aBearerName = TPtrC( KCDTypeNameVirtualBearer ).AllocLC();
       
  1045     
       
  1046     OstTraceFunctionExit0( CCMPLUGINVPN_BEARERRECORDNAMELC_EXIT );
       
  1047     }
       
  1048 
       
  1049 // ---------------------------------------------------------------------------
       
  1050 // CCmPluginVpn::ServiceRecord
       
  1051 // ---------------------------------------------------------------------------
       
  1052 //
       
  1053 CCDVPNServiceRecord& CCmPluginVpn::ServiceRecord() const
       
  1054     {    
       
  1055     OstTraceFunctionEntry0( CCMPLUGINVPN_SERVICERECORD_ENTRY );
       
  1056     
       
  1057     CCDVPNServiceRecord& serviceRecord = *static_cast<CCDVPNServiceRecord*>( iServiceRecord );
       
  1058     
       
  1059     OstTraceFunctionExit0( CCMPLUGINVPN_SERVICERECORD_EXIT );
       
  1060     return serviceRecord;
       
  1061     }
       
  1062 
       
  1063 // ---------------------------------------------------------------------------
       
  1064 // CCmPluginVpn::GetVirtualBearerRecordLC
       
  1065 // ---------------------------------------------------------------------------
       
  1066 //
       
  1067 CCDVirtualBearerRecord* CCmPluginVpn::GetVirtualBearerRecordLC() const
       
  1068     {
       
  1069     OstTraceFunctionEntry0( CCMPLUGINVPN_GETVIRTUALBEARERRECORDLC_ENTRY );
       
  1070         
       
  1071     //First tries to load the virtual bearer record.
       
  1072     //If the loading fails creates a new one.
       
  1073     CMDBRecordSet<CCDVirtualBearerRecord>* bearersRS = 
       
  1074             new(ELeave) CMDBRecordSet<CCDVirtualBearerRecord>
       
  1075                                                (KCDTIdVirtualBearerRecord);
       
  1076     CleanupStack::PushL( bearersRS );
       
  1077 
       
  1078     CCDVirtualBearerRecord* bearerRecord = 
       
  1079             static_cast<CCDVirtualBearerRecord *>
       
  1080                 (CCDRecordBase::RecordFactoryL(KCDTIdVirtualBearerRecord));
       
  1081 
       
  1082     CleanupStack::PushL( bearerRecord );
       
  1083 
       
  1084     // Find entries used "vpnconnagt.agt" as agent from Table VirtualBearer
       
  1085     bearerRecord->iBearerAgent.SetL( KVpnVirtualBearerAgent );
       
  1086     bearersRS->iRecords.AppendL( bearerRecord );
       
  1087 
       
  1088     CleanupStack::Pop( bearerRecord );
       
  1089     bearerRecord = NULL;
       
  1090     
       
  1091     CCDVirtualBearerRecord* retVal = NULL;
       
  1092     if ( bearersRS->FindL( iSession ) )
       
  1093         {
       
  1094         for (TInt i = 0; i < bearersRS->iRecords.Count(); ++i)
       
  1095             {            
       
  1096             TPtrC bearerName( (*bearersRS)[i]->iRecordName.GetL() );
       
  1097     
       
  1098             // Further comparing record ID referred to by this VPN IAP with entry ID in table VirtualBearer
       
  1099             // And also comparing bear name with our expected one "vpnbearer"
       
  1100             if( bearerName == TPtrC( KVpnVirtualBearerName ) )
       
  1101                 {
       
  1102                 TUint32 recordId = (*bearersRS)[i]->RecordId();
       
  1103                 retVal = static_cast<CCDVirtualBearerRecord *>
       
  1104                                             (CCDRecordBase::RecordFactoryL(KCDTIdVirtualBearerRecord));
       
  1105                 CleanupStack::PushL(retVal);
       
  1106                 retVal->SetRecordId( recordId );
       
  1107                 retVal->LoadL( iSession );
       
  1108                 CleanupStack::Pop(retVal);
       
  1109                 break;
       
  1110                 }
       
  1111             }
       
  1112         }         
       
  1113     CleanupStack::PopAndDestroy( bearersRS );
       
  1114 
       
  1115     //If iVirtualBearerRecord is still NULL the loading has failed we try to create a new 
       
  1116     //entry to the table.
       
  1117     if (retVal == NULL)
       
  1118         {
       
  1119         retVal = static_cast<CCDVirtualBearerRecord *>
       
  1120                                     (CCDRecordBase::RecordFactoryL(KCDTIdVirtualBearerRecord));
       
  1121         CleanupStack::PushL(retVal);
       
  1122         retVal->iRecordName.SetL( KVpnVirtualBearerName );
       
  1123         retVal->iBearerAgent.SetL( KVpnVirtualBearerAgent );
       
  1124         retVal->iVirtualBearerNifName.SetL(KVpnVirtualBearerNif);
       
  1125         retVal->iLastSocketActivityTimeout = (TUint32)KNoTimeout;
       
  1126         retVal->iLastSessionClosedTimeout = KLastSessionTimeout;
       
  1127         retVal->iLastSocketClosedTimeout = (TUint32)KNoTimeout;
       
  1128         retVal->iBearerTechnology = KCommDbBearerVirtual;
       
  1129         retVal->SetRecordId( KCDNewRecordRequest );
       
  1130         
       
  1131         retVal->StoreL( iSession );
       
  1132         }
       
  1133     else
       
  1134         {
       
  1135         CleanupStack::PushL(retVal);
       
  1136         }
       
  1137     
       
  1138     OstTraceFunctionExit0( CCMPLUGINVPN_GETVIRTUALBEARERRECORDLC_EXIT );
       
  1139     return retVal;
       
  1140     }
       
  1141 
       
  1142 // ---------------------------------------------------------------------------
       
  1143 // CCmPluginVpn::GetDefPriorityL
       
  1144 // ---------------------------------------------------------------------------
       
  1145 //
       
  1146 TUint32 CCmPluginVpn::GetDefPriorityL( const TUint32 aAttribute ) const
       
  1147     {
       
  1148     OstTraceFunctionEntry0( CCMPLUGINVPN_GETDEFPRIORITYL_ENTRY );
       
  1149     
       
  1150     TUint32 retVal( KDataMobilitySelectionPolicyPriorityWildCard );
       
  1151 
       
  1152     CCDGlobalBearerTypePriorizationRecord* priorityRecord =
       
  1153             new( ELeave ) CCDGlobalBearerTypePriorizationRecord( iBearerPriorityTableId );
       
  1154     CleanupStack::PushL( priorityRecord );
       
  1155 
       
  1156     priorityRecord->iServiceType.SetL( TPtrC( KCDTypeNameVPNService ) );
       
  1157 
       
  1158     if ( priorityRecord->FindL( iSession ) )
       
  1159         {
       
  1160         priorityRecord->LoadL( iSession );
       
  1161 
       
  1162         switch ( aAttribute )
       
  1163             {
       
  1164             case ECmDefaultPriority:
       
  1165                 {
       
  1166                 retVal = priorityRecord->iPriority;
       
  1167                 }
       
  1168                 break;
       
  1169             case ECmDefaultUiPriority:
       
  1170                 {
       
  1171                 retVal = priorityRecord->iUIPriority;
       
  1172                 }
       
  1173                 break;
       
  1174             default:
       
  1175                 break;
       
  1176             }
       
  1177         }
       
  1178     CleanupStack::PopAndDestroy( priorityRecord );
       
  1179 
       
  1180     OstTraceFunctionExit0( CCMPLUGINVPN_GETDEFPRIORITYL_EXIT );
       
  1181     return retVal;
       
  1182     }