commsfwtools/preparedefaultcommsdatabase/src/CommsDatSchema.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 07 Jan 2010 13:34:53 +0200
changeset 1 21d2ab05f085
parent 0 dfb7c4ff071f
permissions -rw-r--r--
Revision: 201001 Kit: 201001

// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
// Comms Data Schema Definitions (version 1.1)
// Definitions of Symbian OS Comms Database Schema for Version 1.1.
// This gives details of the value and value types in each field.
// This information is used to validate data entered into the database.
// The data schema is version controlled.  New versions may be introduced from time to time.
// Then older versions are marked as deprecated and given a planned removal date.
// This version (1.1) was introduced with Release 9.1
// 
//

/**
 @file
*/



// Internal headers
#include <e32def.h>
#include <metadatabase.h>
#include <commsdattypeinfov1_1.h>
#include <commsdattypesv1_1.h>

#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
#include <commsdat_internal.h>
#include <commsdat_partner.h>
#endif

#include "Commsdat_Log.h"
#include "CommsDatInternalDefs.h"

#include <comms-infras/commsdatschema.h>



using namespace CommsDat;


/********************************************************************************************
CONTENTS OF THIS FILE

  1/ Schema of field info for each table
		Linking field name, field value type and constraints for the value

  2/ Utilities to validate meaning of element ids

  3/ Type Validation Functions
		Lookup for type by id and
		Function to check container type matches data type
*/




/*********************************************************************************************
1/ Schema of type info for each field in each table
*****************************************************

See MetaDatabase.h for this definition:

enum TFieldTypeAttributes
**
To express type information for all MetaDatabase fields
@publishedAll
@released
**
	{
	ENoAttrs,
	ENotNull,
	};

typedef struct
**
To express type information for all MetaDatabase fields
@publishedAll
@released
**
	{
		const TMDBElementId	        iTypeId;
		const TInt                  iValType;
	    const TFieldTypeAttributes	iTypeAttr;
        const TText * const         iTypeName;

	} SRecordTypeInfo;


*/

#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
	const SRecordTypeInfo CommsDatSchemaV1_1::iParamsRecordBaseInfo[] = {
    	{ KCDTIdParamsSTypeId,		EInt,	ENotNull,     KCDTypeNameParamsSTypeId },
		{ 0, 0, ENoAttrs, KCDNull }
	};
#endif

	const SRecordTypeInfo CommsDatSchemaV1_1::iServiceRecordBaseInfo[] = {
    	// CCDRecordBase class
    	{ KCDTIdRecordTag,	            EInt,   ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	            EText,	ENotNull,   KCDTypeNameRecordName },
		// this class
        { KCDTIdServiceEnableLlmnr,     EBool,  ENoAttrs,   KCDTypeNameServiceEnableLlmnr },
		{ 0, 0, ENoAttrs, KCDNull }
	};


	const SRecordTypeInfo CommsDatSchemaV1_1::iBearerRecordBaseInfo[] = {
    	// CCDRecordBase class
    	{ KCDTIdRecordTag,	    EInt,	ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	    EText,	ENotNull,   KCDTypeNameRecordName },
		// this class
        {KCDTIdBearerAgent,     EText,	ENotNull,     KCDTypeNameBearerAgent },
		{ 0, 0, ENoAttrs, KCDNull }
	};


    // 02/  Connection Prefs Record
    const SRecordTypeInfo CommsDatSchemaV1_1::iConnectionPrefsRecordInfo[] =
    {
    	// CCDRecordBase class
    	{ KCDTIdRecordTag,	EInt,		        ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	EText,		        ENotNull,   KCDTypeNameRecordName },
		// this class
		{ KCDTIdRanking,	EUint32,	        ENoAttrs,   KCDTypeNameRanking },
		{ KCDTIdDirection,	EInt,		        ENoAttrs,   KCDTypeNameDirection },
		{ KCDTIdBearerSet,	EUint32,	        ENoAttrs,   KCDTypeNameBearerSet },
		{ KCDTIdDialogPref, EUint32,	        ENoAttrs,   KCDTypeNameDialogPref },
		{ KCDTIdIAPLink, 	ELinkIAPRecord,  	ENoAttrs,   KCDTypeNameIAP },
	     { 0, 0, ENoAttrs, KCDNull }
    };


    // 03  Global Settings
	const SRecordTypeInfo CommsDatSchemaV1_1::iGlobalSettingsRecordInfo[] =
    {
    	// CCDRecordBase class
    	{ KCDTIdRecordTag,	EInt,		        ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	EText,		        ENotNull,   KCDTypeNameRecordName },
		// this class
		{ KCDTIdGlobalWapAcessPoint,   		ELinkWAPAPRecord,       ENoAttrs,   KCDTypeNameWAPAccessPoint },
		{ KCDTIdMaxConnectionAttempts,	    EInt,	                ENoAttrs,   KCDTypeNameMaxConnectionAttempts },
		{ KCDTIdMaxRedialAttempts,		    EInt,	                ENoAttrs,   KCDTypeNameMaxRedialAttempts },
		{ KCDTIdSMSBearer,			        EInt,	                ENoAttrs,   KCDTypeNameSMSBearer },
		{ KCDTIdSMSReceiveMode,		        EInt,	                ENoAttrs,   KCDTypeNameSMSReceiveMode },
		{ KCDTIdGPRSAttachMode,	        	EInt,	                ENoAttrs,   KCDTypeNameGPRSAttachMode },
		{ KCDTIdAcceptIncomingGPRS,	        EInt,	                ENoAttrs,   KCDTypeNameAcceptIncomingGPRS },
		{ KCDTIdGPRSClassCBearer,	        EInt,	                ENoAttrs,   KCDTypeNameGPRSClassCBearer },
		{ KCDTIdModemDataFax,	        	ELinkModemBearerRecord,	ENoAttrs,   KCDTypeNameModemDataFax },
		{ KCDTIdModemPhoneServicesSMS,	    ELinkModemBearerRecord,	ENoAttrs,   KCDTypeNameModemPhoneServicesSMS },
		{ KCDTIdLocationDataFax,	        ELinkLocationRecord,	ENoAttrs,   KCDTypeNameLocationDataFax },
		{ KCDTIdLocationPhoneServicesSMS,	ELinkLocationRecord,	ENoAttrs,   KCDTypeNameLocationPhoneServicesSMS },
		{ KCDTIdMaxMBufHeap,	            EInt,	                ENoAttrs,   KCDTypeNameMaxMBufHeap },
		{ KCDTIdDefaultAgent,	 	        ELinkAgentLookupRecord,	ENoAttrs,   KCDTypeNameDefaultAgent },
		{ KCDTIdDefaultNetwork,	     	    ELinkNetworkRecord,	    ENoAttrs,   KCDTypeNameDefaultNetwork },
		{ KCDTIdBearerAvailabilityCheckTSY, EText,                  ENoAttrs,   KCDTypeNameBearerAvailabilityCheckTSY },
		{ KCDTIdDefaultSnap,				ELinkAPRecord,	        ENoAttrs,   KCDTypeNameDefaultSnap },
 		//Name is env dependendent... :((
		{ KCDTIdPromptForSnap,				EBool,	                ENoAttrs,   KCDTypeNamePromptForSnap },
#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
		{ KCDTIdDefaultTier,				ELinkTierRecord,	    ENoAttrs,   KCDTypeNameDefaultTier },
#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
		{ KCDTIdRegulatoryDomain,			EInt,					ENoAttrs,   KCDTypeNameRegulatoryDomain },
		{ KCDTIdWmmEnabled,					EBool,	ENoAttrs,   KCDTypeNameWmmEnabled },
		{ KCDTIdEnableCountryCode,			EBool,	ENoAttrs,   KCDTypeNameEnableCountryCode },
		{ KCDTIdDefaultRegulatoryDomain,	EInt,	ENoAttrs,   KCDTypeNameDefaultRegulatoryDomain },
        { 0, 0, ENoAttrs, KCDNull }
    };


    // 04/  Network Record
    const SRecordTypeInfo CommsDatSchemaV1_1::iNetworkRecordInfo[] =
    {
    	// CCDRecordBase class
    	{ KCDTIdRecordTag,	EInt,		        ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	EText,		        ENotNull,   KCDTypeNameRecordName },
		// this class
		{ KCDTIdHostName,	EText,	ENoAttrs,   KCDTypeNameHostName },
	    { 0, 0, ENoAttrs, KCDNull }
    };


    // 05/  Location record
    const SRecordTypeInfo CommsDatSchemaV1_1::iLocationRecordInfo[] =
    {
    	// CCDRecordBase class
		{ KCDTIdRecordTag,	            EInt,		ENoAttrs,   KCDTypeNameRecordTag },
	    { KCDTIdRecordName,	            EText,		ENotNull,   KCDTypeNameRecordName },
		// this class
		{ KCDTIdIntlPrefixCode, 		EText,		ENoAttrs,   KCDTypeNameIntlPrefixCode },
	    { KCDTIdNatPrefixCode, 			EText,		ENoAttrs,   KCDTypeNameNatPrefixCode },
    	{ KCDTIdNatCode, 				EText,		ENoAttrs,   KCDTypeNameNatCode },
    	{ KCDTIdAreaCode, 				EText,		ENoAttrs,   KCDTypeNameAreaCode },
    	{ KCDTIdDialOutCode, 			EText,		ENoAttrs,   KCDTypeNameDialOutCode },
    	{ KCDTIdDisableCallWaitingCode, EText,		ENoAttrs,   KCDTypeNameDisableCallWaitingCode },
    	{ KCDTIdMobile, 				EBool,		ENotNull,   KCDTypeNameMobile },
    	{ KCDTIdUsePulseDial, 			EBool,		ENotNull,   KCDTypeNameUsePulseDial },
    	{ KCDTIdWaitForDialTone, 		EBool,		ENotNull,   KCDTypeNameWaitForDialTone },
    	{ KCDTIdPauseAfterDialOut, 		EUint32,	ENotNull,   KCDTypeNamePauseAfterDialOut },
        { 0, 0, ENoAttrs, KCDNull }
    };


    // 06/  IAP Record
	const SRecordTypeInfo CommsDatSchemaV1_1::iIAPRecordInfo[] =
    {
    	// CCDRecordBase class
    	{ KCDTIdRecordTag,	EInt,		        ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	EText,		        ENotNull,   KCDTypeNameRecordName },
		// this class
        { KCDTIdIAPServiceType, 		EText,		        ENotNull,   KCDTypeNameServiceType },
#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
    	{ KCDTIdIAPService, 			ELink,		        ENotNull,   KCDTypeNameService },
#else
        { KCDTIdIAPService, 			EInt,		        ENotNull,   KCDTypeNameService },
#endif //SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
    	{ KCDTIdIAPBearerType, 			EText,		        ENotNull,   KCDTypeNameBearerType },
#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
    	{ KCDTIdIAPBearer, 				ELink,		        ENotNull,   KCDTypeNameBearer },
#else
        { KCDTIdIAPBearer, 				EInt,		        ENotNull,   KCDTypeNameBearer },
#endif //SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
    	{ KCDTIdIAPNetwork, 			ELinkNetworkRecord,	ENotNull,   KCDTypeNameIAPNetwork },
    	{ KCDTIdIAPNetworkWeighting,	EUint32,	        ENotNull,   KCDTypeNameNetworkWeighting },
    	{ KCDTIdIAPLocation, 			ELinkLocationRecord,ENotNull,   KCDTypeNameLocation },
#ifdef SYMBIAN_NETWORKING_UMTSR5
     	{ KCDTIdIAPAppSid,	            EUint32,	        ENotNull,   KCDTypeNameAppSid },
#endif
	    { 0, 0, ENoAttrs, KCDNull }
    };


  	const SRecordTypeInfo CommsDatSchemaV1_1::iWAPAccessPointRecordInfo[] =
  	{
    	// CCDRecordBase class
		{ KCDTIdRecordTag,	        EInt,		ENoAttrs,   KCDTypeNameRecordTag },
  		{ KCDTIdRecordName,     	EText,		ENotNull,   KCDTypeNameRecordName },
		// this class
		{ KCDTIdWAPCurrentBearer,	EText,		ENotNull,   KCDTypeNameWAPCurrentBearer },
		{ KCDTIdWAPStartPage,	    ELongText,  ENoAttrs,   KCDTypeNameWAPStartPage },
  		{ 0, 0, ENoAttrs, KCDNull }
  	};

  	const SRecordTypeInfo CommsDatSchemaV1_1::iDialOutISPRecordInfo[] =
  	{
    	// CCDRecordBase class
		{ KCDTIdRecordTag,	        	EInt,		ENoAttrs,    KCDTypeNameRecordTag },
  		{ KCDTIdRecordName,     		EText,		ENotNull,    KCDTypeNameRecordName },
		// this class
		{ KCDTIdDescription,	 		EText,		ENoAttrs,    KCDTypeNameDescription },
		{ KCDTIdType,	 				EInt,		ENoAttrs,    KCDTypeNameType },
		{ KCDTIdDefaultTelNum,	 		EText,		ENoAttrs,    KCDTypeNameDefaultTelNum },
		{ KCDTIdDialResolution,	 		EBool,		ENotNull,    KCDTypeNameDialResolution },
		{ KCDTIdChargecard,	 			ELinkChargecardRecord,		ENoAttrs,    KCDTypeNameChargecard },
		{ KCDTIdUseLoginScript,	 		EBool,		ENotNull,    KCDTypeNameUseLoginScript },
		{ KCDTIdLoginScript,	 		ELongText,  ENoAttrs,    KCDTypeNameLoginScript },
		{ KCDTIdPromptForLogin,	 		EBool,		ENotNull,    KCDTypeNamePromptForLogin },
		{ KCDTIdLoginName,	 			EMedText,		ENoAttrs,    KCDTypeNameLoginName },
		{ KCDTIdLoginPass,	       		EMedText,		ENoAttrs,    KCDTypeNameLoginPass },
		{ KCDTIdDisplayPct,	        	EBool,		ENoAttrs,    KCDTypeNameDisplayPct },
		{ KCDTIdIfParams,	 			EText,		ENoAttrs,    KCDTypeNameIfParams },
		{ KCDTIdIfNetworks,	 			EText,		ENoAttrs,    KCDTypeNameIfNetworks },
		{ KCDTIdIfPromptForAuth,		EBool,		ENotNull,    KCDTypeNameIfPromptForAuth },
		{ KCDTIdIfAuthName,	 			EMedText,		ENoAttrs,    KCDTypeNameIfAuthName },
		{ KCDTIdIfAuthPass,	 			EMedText,		ENoAttrs,    KCDTypeNameIfAuthPass },
		{ KCDTIdIfAuthRetries,	 		EInt,		ENoAttrs,    KCDTypeNameIfAuthRetries },
		{ KCDTIdIfCallbackEnabled,		EBool,		ENoAttrs,    KCDTypeNameIfCallbackEnabled },
		{ KCDTIdIfCallbackType,	 		EInt,		ENoAttrs,    KCDTypeNameIfCallbackType },
		{ KCDTIdIfCallbackInfo,	 		EDesC8,		ENoAttrs,    KCDTypeNameIfCallbackInfo },
		{ KCDTIdCallbackTimeout,		EInt,		ENoAttrs,    KCDTypeNameCallbackTimeout },
		{ KCDTIdIfServerMode,	 		EBool,		ENoAttrs,    KCDTypeNameIfServerMode },
		{ KCDTIdIpAddrFromServer,		EBool,		ENotNull,    KCDTypeNameIpAddrFromServer },
		{ KCDTIdIpAddr,	 				EText,		ENoAttrs,    KCDTypeNameIpAddr },
		{ KCDTIdIpNetMask,	 			EText,		ENoAttrs,    KCDTypeNameIpNetMask },
		{ KCDTIdIpGateway,	 			EText,		ENoAttrs,    KCDTypeNameIpGateway },
		{ KCDTIdIpDNSAddrFromServer,	EBool,		ENotNull,    KCDTypeNameIpDNSAddrFromServer },
		{ KCDTIdIpNameServer1,	 		EText,		ENoAttrs,    KCDTypeNameIpNameServer1 },
		{ KCDTIdIpNameServer2,	 		EText,		ENoAttrs,    KCDTypeNameIpNameServer2 },
		{ KCDTIdIp6DNSAddrFromServer,	EBool,		ENoAttrs,    KCDTypeNameIp6DNSAddrFromServer },
		{ KCDTIdIp6NameServer1,	 		EText,		ENoAttrs,    KCDTypeNameIp6NameServer1 },
		{ KCDTIdIp6NameServer2,	 		EText,		ENoAttrs,    KCDTypeNameIp6NameServer2 },
		{ KCDTIdIpAddrLeaseValidFrom,	EText,		ENoAttrs,    KCDTypeNameIpAddrLeaseValidFrom },
		{ KCDTIdIpAddrLeaseValidTo,	 	EText,		ENoAttrs,    KCDTypeNameIpAddrLeaseValidTo },
		{ KCDTIdConfigDaemonManagerName,EText,		ENoAttrs,    KCDTypeNameConfigDaemonManagerName },
		{ KCDTIdConfigDaemonName,	 	EText,		ENoAttrs,    KCDTypeNameConfigDaemonName },
		{ KCDTIdEnableIpHeaderComp,	 	EBool,		ENoAttrs,    KCDTypeNameEnableIpHeaderComp },
		{ KCDTIdEnableLCPExtension,		EBool,		ENoAttrs,    KCDTypeNameEnableLcpExtensions  },
		{ KCDTIdDisablePlainTextAuth,   EBool,		ENoAttrs,    KCDTypeNameDisablePlainTextAuth },
		{ KCDTIdEnableSwComp,	 		EBool,		ENoAttrs,    KCDTypeNameEnableSwComp },
		{ KCDTIdBearerName,	 			EInt,		ENoAttrs,    KCDTypeNameBearerName },
		{ KCDTIdBearerSpeed,	 		EInt,		ENoAttrs,    KCDTypeNameBearerSpeed },
		{ KCDTIdBearerCe,	 			EInt,		ENoAttrs,    KCDTypeNameBearerCe },
		{ KCDTIdInitString,	 			EDesC8,		ENoAttrs,    KCDTypeNameInitString },
		{ KCDTIdBearerType,	 			EInt,		ENoAttrs,    KCDTypeNameISPBearerType },
		{ KCDTIdChannelCoding,	 		EInt,		ENoAttrs,    KCDTypeNameChannelCoding },
		{ KCDTIdAiur,	 				EInt,		ENoAttrs,    KCDTypeNameAiur },
		{ KCDTIdRequestedTimeSlots,	 	EInt,		ENoAttrs,    KCDTypeNameRequestedTimeSlots },
		{ KCDTIdMaximumTimeSlots,	 	EInt,		ENoAttrs,    KCDTypeNameMaximumTimeSlots },
		{ KCDTIdBearerService,	 		EInt,		ENoAttrs,    KCDTypeNameBearerService },
		{ KCDTIdBearerProtocol,	 		EInt,		ENoAttrs,    KCDTypeNameBearerProtocol },
		{ KCDTIdRlpVersion,	 			EInt,		ENoAttrs,    KCDTypeNameRlpVersion },
		{ KCDTIdIwfToMs,	 			EInt,		ENoAttrs,    KCDTypeNameIwfToMs },
		{ KCDTIdMsToIwf,	 			EInt,		ENoAttrs,    KCDTypeNameMsToIwf },
		{ KCDTIdAckTimer,	 			EInt,		ENoAttrs,    KCDTypeNameAckTimer },
		{ KCDTIdRetransmissionAttempts,	EInt,		ENoAttrs,    KCDTypeNameRetransmissionAttempts },
		{ KCDTIdResequencePeriod,	 	EInt,		ENoAttrs,    KCDTypeNameResequencePeriod },
		{ KCDTIdV42Compression,	 		EInt,		ENoAttrs,    KCDTypeNameV42Compression },
		{ KCDTIdV42Codewords,	 		EInt,		ENoAttrs,    KCDTypeNameV42Codewords },
		{ KCDTIdV42MaxLength,	 		EInt,		ENoAttrs,    KCDTypeNameV42MaxLength },
		{ KCDTIdAsymmetry,	 			EInt,		ENoAttrs,    KCDTypeNameAsymmetry },
		{ KCDTIdUserInitUpgrade,	 	EBool,		ENoAttrs,    KCDTypeNameUserInitUpgrade },
		{ KCDTIdUseEdge,	 			EBool,		ENoAttrs,    KCDTypeNameUseEdge },
		/**** add new fields above this comment ****/
        // service base class
		{ KCDTIdServiceEnableLlmnr,     EBool,      ENoAttrs,    KCDTypeNameServiceEnableLlmnr },
  		{ 0, 0, ENoAttrs, KCDNull }
  	};


    // 09/  DIAL IN ISP RECORD

  	const SRecordTypeInfo CommsDatSchemaV1_1::iDialInISPRecordInfo[] =
  	{
    	// CCDRecordBase class
		{ KCDTIdRecordTag,	        	    EInt,		ENoAttrs,    KCDTypeNameRecordTag },
  		{ KCDTIdRecordName,     		    EText,		ENotNull,    KCDTypeNameRecordName },
		// this class
		{ KCDTIdDINDescription,	 		    EText,		ENoAttrs,    KCDTypeNameDescription },
		{ KCDTIdDINType,	 				EInt,		ENoAttrs,    KCDTypeNameType },
		{ KCDTIdDINUseLoginScript,	 		EBool,		ENoAttrs,    KCDTypeNameUseLoginScript },
		{ KCDTIdDINLoginScript,	 		    ELongText,	ENoAttrs,    KCDTypeNameLoginScript },
		{ KCDTIdDINAuthentication,	 		EInt,		ENoAttrs,    KCDTypeNameAuthentication },
		{ KCDTIdDINIfAuthRetries,	 		EInt,		ENoAttrs,    KCDTypeNameIfAuthRetries },
		{ KCDTIdDINIfParams,	 			EText,		ENoAttrs,    KCDTypeNameIfParams },
		{ KCDTIdDINIfNetworks,	 			EText,		ENoAttrs,    KCDTypeNameIfNetworks },
		{ KCDTIdDINIpAddrFromServer,		EBool,		ENotNull,    KCDTypeNameIpAddrFromServer },
		{ KCDTIdDINIpAddr,	 				EText,		ENoAttrs,    KCDTypeNameIpAddr },
		{ KCDTIdDINIpNetMask,				EText,		ENoAttrs,    KCDTypeNameIpNetMask },
		{ KCDTIdDINIpGateway,	 			EText,		ENoAttrs,    KCDTypeNameIpGateway },
		{ KCDTIdDINIpDNSAddrFromServer,	    EBool,		ENotNull,    KCDTypeNameIpDNSAddrFromServer },
		{ KCDTIdDINIpNameServer1,	 		EText,		ENoAttrs,    KCDTypeNameIpNameServer1 },
		{ KCDTIdDINIpNameServer2,	 		EText,		ENoAttrs,    KCDTypeNameIpNameServer2 },
		{ KCDTIdDINIp6DNSAddrFromServer,	EBool,		ENoAttrs,    KCDTypeNameIp6DNSAddrFromServer },
		{ KCDTIdDINIp6NameServer1,		 	EText,		ENoAttrs,    KCDTypeNameIp6NameServer1 },
		{ KCDTIdDINIp6NameServer2,	 		EText,		ENoAttrs,    KCDTypeNameIp6NameServer2 },
		{ KCDTIdDINEnableIpHeaderComp,	 	EBool,		ENoAttrs,    KCDTypeNameEnableIpHeaderComp },
		{ KCDTIdDINEnableLCPExtensions,		EBool,		ENoAttrs,    KCDTypeNameEnableLcpExtensions },
		{ KCDTIdDINDisablePlainTextAuth,	EBool,		ENoAttrs,    KCDTypeNameDisablePlainTextAuth },
		{ KCDTIdDINEnableSwComp,	 		EBool,		ENoAttrs,    KCDTypeNameEnableSwComp },
		{ KCDTIdDINBearerName,	 			EInt,		ENoAttrs,    KCDTypeNameBearerName },
		{ KCDTIdDINBearerSpeed,	 		    EInt,		ENoAttrs,    KCDTypeNameBearerSpeed },
		{ KCDTIdDINBearerCe,	 			EInt,		ENoAttrs,    KCDTypeNameBearerCe },
		{ KCDTIdDINInitString,	 			EDesC8,		ENoAttrs,    KCDTypeNameInitString },
		{ KCDTIdDINUseEdge,	 			    EBool,		ENoAttrs,    KCDTypeNameUseEdge },
        /**** add new fields above this comment ****/
        // service base class
        { KCDTIdServiceEnableLlmnr,         EBool,      ENoAttrs,    KCDTypeNameServiceEnableLlmnr },
  		{ 0, 0, ENoAttrs, KCDNull }
  	};


    //  0A/  LAN Service Record

  	const SRecordTypeInfo CommsDatSchemaV1_1::iLANServiceRecordInfo[] =
  	{
    	// CCDRecordBase class
		{ KCDTIdRecordTag,	        			    EInt,     ENoAttrs,    KCDTypeNameRecordTag },
  		{ KCDTIdRecordName,     				    EText,    ENotNull,    KCDTypeNameRecordName },
		// this class
		{ KCDTIdLANIfNetworks,	 					EText,    ENoAttrs,    KCDTypeNameIfNetworks },
		{ KCDTIdLANIpNetMask,	 					EText,    ENoAttrs,    KCDTypeNameIpNetMask },
		{ KCDTIdLANIpGateway,	 					EText,    ENoAttrs,    KCDTypeNameIpGateway },
		{ KCDTIdLANIpAddrFromServer,	 			EBool,    ENotNull,    KCDTypeNameIpAddrFromServer },
		{ KCDTIdLANIpAddr,	 						EText,    ENoAttrs,    KCDTypeNameIpAddr },
		{ KCDTIdLANIpDNSAddrFromServer,	 		    EBool,    ENotNull,    KCDTypeNameIpDNSAddrFromServer },
		{ KCDTIdLANIpNameServer1,	 				EText,    ENoAttrs,    KCDTypeNameIpNameServer1 },
		{ KCDTIdLANIpNameServer2,	 				EText,    ENoAttrs,    KCDTypeNameIpNameServer2 },
		{ KCDTIdLANIp6DNSAddrFromServer,	 		EBool,    ENoAttrs,    KCDTypeNameIp6DNSAddrFromServer },
		{ KCDTIdLANIp6NameServer1,	 				EText,    ENoAttrs,    KCDTypeNameIp6NameServer1 },
		{ KCDTIdLANIp6NameServer2,	 				EText,    ENoAttrs,    KCDTypeNameIp6NameServer2 },
		{ KCDTIdLANIpAddrLeaseValidFrom,	 		EText,    ENoAttrs,    KCDTypeNameIpAddrLeaseValidFrom },
		{ KCDTIdLANIpAddrLeaseValidTo,	 			EText,    ENoAttrs,    KCDTypeNameIpAddrLeaseValidTo },
		{ KCDTIdLANConfigDaemonManagerName,		    EText,    ENoAttrs,    KCDTypeNameConfigDaemonManagerName },
		{ KCDTIdLANConfigDaemonName,	 			EText,    ENoAttrs,    KCDTypeNameConfigDaemonName },
		{ KCDTIdLANServiceExtensionTableName,		EText,    ENoAttrs,    KCDTypeNameServiceExtensionTableName },
#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
		{ KCDTIdLANServiceExtensionTableRecordId,	ELink,    ENoAttrs,    KCDTypeNameServiceExtensionTableRecordId },
#else
        { KCDTIdLANServiceExtensionTableRecordId,	EInt,    ENoAttrs,    KCDTypeNameServiceExtensionTableRecordId },
#endif //SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
        /**** add new fields above this comment ****/
        // service base class
        { KCDTIdServiceEnableLlmnr,                 EBool,    ENoAttrs,    KCDTypeNameServiceEnableLlmnr },
  		{ 0, 0, ENoAttrs, KCDNull }
  	};

  	const SRecordTypeInfo CommsDatSchemaV1_1::iWLANServiceExtRecordInfo[] =
  	{
    	// CCDRecordBase class
  		{ KCDTIdRecordTag,	        		EInt,   ENoAttrs,   KCDTypeNameRecordTag },
  		{ KCDTIdRecordName,     			EText,  ENotNull,   KCDTypeNameRecordName },
		// This class
		{ KCDTIdWLANProfile, 				EText,	ENotNull,	KCDTypeNameWLANProfile },
		{ KCDTIdWLANSSID,					EText,	ENotNull,	KCDTypeNameWLANSSID },
		{ KCDTIdWLANEncryptionStatus,		EInt,	ENoAttrs,	KCDTypeNameWLANEncryptionStatus },
		{ KCDTIdWLANEncryptionType,			EInt,	ENoAttrs,	KCDTypeNameWLANEncryptionType },
		{ KCDTIdWLANDefaultWepKey ,			EInt,	ENoAttrs,	KCDTypeNameWLANDefaultWepKey   },
		{ KCDTIdWLANEncryptKey1Valid,		EInt,	ENoAttrs,	KCDTypeNameWLANEncryptKey1Valid },
		{ KCDTIdWLANWepKey1,				EText,	ENoAttrs,	KCDTypeNameWLANWepKey1 },
		{ KCDTIdWLANEncryptKey2Valid, 		EInt,	ENoAttrs,	KCDTypeNameWLANEncryptKey2Valid },
		{ KCDTIdWLANWepKey2,				EText,	ENoAttrs,	KCDTypeNameWLANWepKey2 },
		{ KCDTIdWLANEncryptKey3Valid,		EInt,	ENoAttrs,	KCDTypeNameWLANEncryptKey3Valid },
		{ KCDTIdWLANWepKey3,				EText,	ENoAttrs,	KCDTypeNameWLANWepKey3 },
		{ KCDTIdWLANEncryptKey4Valid,		EInt,	ENoAttrs,	KCDTypeNameWLANEncryptKey4Valid },
		{ KCDTIdWLANWepKey4,				EText,	ENoAttrs,	KCDTypeNameWLANWepKey4 },
		{ KCDTIdWLANRanking,				EInt,	ENoAttrs,	KCDTypeNameWLANRanking  },
		{ KCDTIdWLANDialogPref,				EInt,	ENoAttrs,	KCDTypeNameWLANDialogPref },
		{ KCDTIdWLANNetworkType,			EInt,	ENoAttrs,	KCDTypeNameWLANNetworkType },
		{ KCDTIdWLANFragThres,				EInt,	ENoAttrs,	KCDTypeNameWLANFragThres },
		{ KCDTIdWLANRTSThres, 				EInt,	ENoAttrs,	KCDTypeNameWLANRTSThres },
		{ KCDTIdWLANDesTransRate,			EInt,	ENoAttrs,	KCDTypeNameWLANDesTransRate },
		{ KCDTIdWLANBeaconInt,				EInt,	ENoAttrs,	KCDTypeNameWLANBeaconInt },
		{ KCDTIdWLANChannelId,				EInt,	ENoAttrs,	KCDTypeNameWLANChannelId },
		{ KCDTIdWLANAuthenticationMode,		EInt,	ENoAttrs,	KCDTypeNameWLANAuthenticationMode },
		{ KCDTIdWLANPowerSaveMode,			EInt,	ENoAttrs,	KCDTypeNameWLANPowerSaveMode },
		{ KCDTIdWLANAllowUnencryptMode,		EInt,	ENoAttrs,	KCDTypeNameWLANAllowUnencryptMode },
		{ KCDTIdWLANAllowShortPre,			EInt,	ENoAttrs,	KCDTypeNameWLANAllowShortPre },
		{ KCDTIdWLANPreambleType,			EInt,	ENoAttrs,	KCDTypeNameWLANPreambleType },
		{ KCDTIdWLANTxPowerLevel,			EInt,	ENoAttrs,	KCDTypeNameWLANTxPowerLevel },
		{ KCDTIdWLANEapPresharedKey,		EMedText,	ENoAttrs,	KCDTypeNameWLANEapPresharedKey },
		{ KCDTIdWLANRegDomain,				EInt,	ENoAttrs,	KCDTypeNameWLANRegDomain },
		{ KCDTIdWLANSecData,				ELinkEAPSecRecord,	ENoAttrs,	KCDTypeNameWLANSecData },
		{ 0, 0, ENoAttrs, KCDNull }
  	};

  	const SRecordTypeInfo CommsDatSchemaV1_1::iVPNServiceRecordInfo[] =
  	{
    	// CCDRecordBase class
    	{ KCDTIdRecordTag,	EInt,		        ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	EText,		        ENotNull,   KCDTypeNameRecordName },
		// This class
		{ KCDTIdVPNPolicyName,	 	EText,              ENotNull,    KCDTypeNameVPNPolicyName },
		{ KCDTIdVPNIAPRecord, 		ELinkIAPRecord,	    ENoAttrs,    KCDTypeNameVPNIAPRecord },
		{ KCDTIdVPNSNAPRecord,      ELinkAPRecord,            ENoAttrs,    KCDTypeNameVPNSNAPRecord },
		{ KCDTIdVPNNetwork,	  		ELinkNetworkRecord, ENoAttrs,    KCDTypeNameVPNNetwork },
		/**** add new fields above this comment ****/
        // service base class
		{ KCDTIdServiceEnableLlmnr,	EBool,  ENoAttrs,    KCDTypeNameServiceEnableLlmnr },
  		{ 0, 0, ENoAttrs, KCDNull }
  	};

  
  	const SRecordTypeInfo CommsDatSchemaV1_1::iUmtsR99QoSAndOnTableRecordInfo[] =
	{
    	// CCDRecordBase class
		{ KCDTIdRecordTag,						 EInt,	  ENoAttrs,     KCDTypeNameRecordTag },
		{ KCDTIdRecordName,						 EText,   ENotNull,     KCDTypeNameRecordName },
		// this class
		{ KCDTIdWCDMAReqTrafficClass, 			 EUint32, ENoAttrs,     KCDTypeNameGPRSReqTrafficClass },
		{ KCDTIdWCDMAMinTrafficClass, 			 EUint32, ENoAttrs,     KCDTypeNameGPRSMinTrafficClass },
		{ KCDTIdWCDMAReqDeliveryOrder, 			 EUint32, ENoAttrs,	    KCDTypeNameGPRSReqDeliveryOrder },
		{ KCDTIdWCDMAMinDeliveryOrder	, 		 EUint32, ENoAttrs,	    KCDTypeNameGPRSMinDeliveryOrder },
		{ KCDTIdWCDMAReqDeliverErroneousSDU,	 EUint32, ENoAttrs,	    KCDTypeNameGPRSReqDeliverErroneousSDU },
		{ KCDTIdWCDMAMinDeliverErroneousSDU,	 EUint32, ENoAttrs,	    KCDTypeNameGPRSMinDeliverErroneousSDU },
		{ KCDTIdWCDMAReqMaxSDUSize, 			 EInt,    ENoAttrs,	    KCDTypeNameGPRSReqMaxSDUSize },
		{ KCDTIdWCDMAMinAcceptableMaxSDUSize,	 EInt,    ENoAttrs,	    KCDTypeNameGPRSMinAcceptableMaxSDUSize },
		{ KCDTIdWCDMAReqMaxUplinkRate, 			 EInt,    ENoAttrs,     KCDTypeNameGPRSReqMaxUplinkRate },
		{ KCDTIdWCDMAReqMinUplinkRate, 			 EInt,    ENoAttrs,	    KCDTypeNameGPRSReqMinUplinkRate },
		{ KCDTIdWCDMAReqMaxDownlinkRate, 		 EInt,    ENoAttrs,	    KCDTypeNameGPRSReqMaxDownlinkRate },
		{ KCDTIdWCDMAReqMinDownlinkRate, 		 EInt,    ENoAttrs,	    KCDTypeNameGPRSReqMinDownlinkRate },
		{ KCDTIdWCDMAReqBER, 					 EUint32, ENoAttrs,	    KCDTypeNameGPRSReqBER },
		{ KCDTIdWCDMAMaxBER, 					 EUint32, ENoAttrs,	    KCDTypeNameGPRSMaxBER },
		{ KCDTIdWCDMAReqSDUErrorRatio, 			 EUint32, ENoAttrs,	    KCDTypeNameGPRSReqSDUErrorRatio },
		{ KCDTIdWCDMAMaxSDUErrorRatio, 			 EUint32, ENoAttrs,	    KCDTypeNameGPRSMaxSDUErrorRatio },
		{ KCDTIdWCDMAReqTrafficHandlingPriority, EUint32, ENoAttrs,	    KCDTypeNameGPRSReqTrafficHandlingPriority },
		{ KCDTIdWCDMAMinTrafficHandlingPriority, EUint32, ENoAttrs,	    KCDTypeNameGPRSMinTrafficHandlingPriority },
		{ KCDTIdWCDMAReqTransferDelay, 			 EInt,    ENoAttrs,     KCDTypeNameGPRSReqTransferDelay },
		{ KCDTIdWCDMAMaxTransferDelay, 			 EInt,    ENoAttrs,	    KCDTypeNameGPRSMaxTransferDelay },
		{ KCDTIdWCDMAReqGuaranteedUplinkRate, 	 EInt,    ENoAttrs,	    KCDTypeNameGPRSReqGuaranteedUplinkRate },
		{ KCDTIdWCDMAMinGuaranteedUplinkRate, 	 EInt,    ENoAttrs,	    KCDTypeNameGPRSMinGuaranteedUplinkRate },
		{ KCDTIdWCDMAReqGuaranteedDownlinkRate,  EInt,    ENoAttrs,	    KCDTypeNameGPRSReqGuaranteedDownlinkRate },
		{ KCDTIdWCDMAMinGuaranteedDownlinkRate,  EInt,    ENoAttrs,	    KCDTypeNameGPRSMinGuaranteedDownlinkRate },
		{ KCDTIdWCDMASignallingIndication,		 EBool,   ENoAttrs,	    KCDTypeNameGPRSSignallingIndication },
		{ KCDTIdWCDMAImCmSignallingIndication,	 EBool,   ENoAttrs,	    KCDTypeNameGPRSImCnSignallingIndication },
		{ KCDTIdWCDMASourceStatisticsDescriptor, EUint32, ENoAttrs,	    KCDTypeNameGPRSSourceStatisticsDescriptor },
		{ 0, 0, ENoAttrs, KCDNull }

	};


  	const SRecordTypeInfo CommsDatSchemaV1_1::iWCDMAPacketServiceRecordInfo[] =
    {
    	// CCDRecordBase class
		{ KCDTIdRecordTag,						EInt,		ENoAttrs,    KCDTypeNameRecordTag },
		{ KCDTIdRecordName,						EText,      ENotNull,    KCDTypeNameRecordName },
		// This class
		{ KCDTIdAPN,	 							EMedText,   ENoAttrs,    KCDTypeNameGPRSAPN },
		{ KCDTIdWCDMPDPType,					EInt,		ENoAttrs,    KCDTypeNameGPRSPDPType },
		{ KCDTIdWCDMAPDPAddress,				EText,      ENoAttrs,    KCDTypeNameGPRSPDPAddress },
		{ KCDTIdReqPrecedence,	 				EInt,		ENoAttrs,    KCDTypeNameGPRSReqPrecedence },
		{ KCDTIdReqDelay,	 						EInt,		ENoAttrs,    KCDTypeNameGPRSReqDelay },
		{ KCDTIdReqReliability,	 					EInt,		ENoAttrs,    KCDTypeNameGPRSReqReliability  },
		{ KCDTIdReqPeakThroughput,				EInt,		ENoAttrs,    KCDTypeNameGPRSReqPeakThroughput },
		{ KCDTIdReqMeanThroughput,				EInt,		ENoAttrs,    KCDTypeNameGPRSReqMeanThroughput },
		{ KCDTIdMinPrecedence,	 				EInt,		ENoAttrs,    KCDTypeNameGPRSMinPrecedence },
		{ KCDTIdMinDelay,	 						EInt,		ENoAttrs,    KCDTypeNameGPRSMinDelay },
		{ KCDTIdMinReliability,	 					EInt,		ENoAttrs,    KCDTypeNameGPRSMinReliability },
		{ KCDTIdMinPeakThroughput,  				EInt,		ENoAttrs,    KCDTypeNameGPRSMinPeakThroughput },
		{ KCDTIdMinMeanThroughput,  				EInt,		ENoAttrs,    KCDTypeNameGPRSMinMeanThroughput },
		{ KCDTIdWCDMADataCompression, 			EBool,      ENoAttrs,    KCDTypeNameGPRSDataCompression },
		{ KCDTIdWCDMAHeaderCompression,			EBool,      ENoAttrs,    KCDTypeNameGPRSHeaderCompression },
		{ KCDTIdWCDMAUseEdge,	 				EBool,      ENoAttrs,    KCDTypeNameGPRSUseEdge },
		{ KCDTIdWCDMAAnonymousAccess,			EBool,      ENoAttrs,    KCDTypeNameGPRSAnonymousAccess },
		{ KCDTIdWCDMAIfParams,					EText,      ENoAttrs,    KCDTypeNameGPRSIfParams },
		{ KCDTIdWCDMAIfNetworks,	 				EText,      ENoAttrs,    KCDTypeNameIfNetworks },
		{ KCDTIdWCDMAIfPromptForAuth,			EBool,      ENoAttrs,    KCDTypeNameGPRSIfPromptForAuth },
		{ KCDTIdWCDMAIfAuthName,	 			EText,      ENoAttrs,    KCDTypeNameGPRSIfAuthName },
		{ KCDTIdWCDMAIfAuthPass,	 			EText,      ENoAttrs,    KCDTypeNameGPRSIfAuthPass },
		{ KCDTIdWCDMAIfAuthRetries,	 			EInt,       ENoAttrs,    KCDTypeNameGPRSIfAuthRetries },
		{ KCDTIdWCDMAIPNetMask,					EText,      ENoAttrs,    KCDTypeNameGPRSIPNetMask },
		{ KCDTIdWCDMAIPGateway,	 				EText,      ENoAttrs,    KCDTypeNameGPRSIPGateway },
		{ KCDTIdWCDMAIPAddrFromServer,			EBool,      ENoAttrs,    KCDTypeNameGPRSIPAddrFromServer },
		{ KCDTIdWCDMAIPAddr,	 				EText,      ENoAttrs,    KCDTypeNameGPRSIPAddr },
		{ KCDTIdWCDMAIPDNSAddrFromServer,		EBool,      ENoAttrs,    KCDTypeNameGPRSIPDNSAddrFromServer  },
		{ KCDTIdWCDMAIPNameServer1,	 			EText,      ENoAttrs,    KCDTypeNameGPRSIPNameServer1 },
		{ KCDTIdWCDMAIPNameServer2,	 			EText,      ENoAttrs,    KCDTypeNameGPRSIPNameServer2 },
		{ KCDTIdWCDMAIP6DNSAddrFromServer,		EBool,      ENoAttrs,    KCDTypeNameGPRSIP6DNSAddrFromServer },
		{ KCDTIdWCDMAIP6NameServer1,	 		EText,      ENoAttrs,    KCDTypeNameGPRSIP6NameServer1 },
		{ KCDTIdWCDMAIP6NameServer2,	 		EText,      ENoAttrs,    KCDTypeNameGPRSIP6NameServer2 },
		{ KCDTIdWCDMAIPAddrLeaseValidFrom,		EText,      ENoAttrs,    KCDTypeNameGPRSIPAddrLeaseValidFrom },
		{ KCDTIdWCDMAIPAddrLeaseValidTo,			EText,      ENoAttrs,    KCDTypeNameGPRSIPAddrLeaseValidTo },
		{ KCDTIdWCDMAConfigDaemonManagerName,   	EText,      ENoAttrs,    KCDTypeNameGPRSConfigDaemonManagerName },
		{ KCDTIdWCDMAConfigDaemonName,		    	EText,      ENoAttrs,    KCDTypeNameGPRSConfigDaemonName },
		{ KCDTIdWCDMAEnableLCPExtensions,	    		EBool,      ENoAttrs,    KCDTypeNameGPRSEnableLCPExtensions  },
		{ KCDTIdWCDMADisablePlainTextAuth,	    		EBool,      ENoAttrs,    KCDTypeNameGPRSDisablePlainTextAuth },
		{ KCDTIdAPType,	 				        	EInt,       ENoAttrs,    KCDTypeNameGPRSAPType },
		{ KCDTIdQOSWarningTimeOut,		        	EInt,       ENoAttrs,    KCDTypeNameGPRSQOSWarningTimeOut },
		{ KCDTIdUmtsR99QoSAndOn, 				ELinkUMTSR99QoSRecord,	    ENoAttrs,    KCDTypeNameUmtsR99QoSAndOn },
        /**** add new fields above this comment ****/
        // service base class
		{ KCDTIdServiceEnableLlmnr,		        	EBool,      ENoAttrs,    KCDTypeNameServiceEnableLlmnr },
		{ KCDTIdR5DataCompression,	 		   	EInt,       ENoAttrs,    KCDTypeNameR5DataCompression },
		{ KCDTIdR5HeaderCompression,	 	   	        EInt,       ENoAttrs,    KCDTypeNameR5HeaderCompression },
		{ KCDTIdPacketFlowIdentifier,	 	   	        EInt,       ENoAttrs,    KCDTypeNamePacketFlowIdentifier },
		{ KCDTIdUmtsGprsRelease,	 		   	EInt,       ENoAttrs,    KCDTypeNameUmtsGprsRelease },


		{ 0, 0, ENoAttrs, KCDNull }
    };


    //
    const SRecordTypeInfo CommsDatSchemaV1_1::iDefaultWCDMARecordInfo[] =
    {
		// CCDRecordBase class
		{  KCDTIdRecordTag,						EInt,		ENoAttrs,    KCDTypeNameRecordTag },
    	{  KCDTIdRecordName,					EText,		ENotNull,    KCDTypeNameRecordName },
		// This class
    	{  KCDTIdDefaultGPRSUsage,     			EUint32,    ENoAttrs,    KCDTypeNameUsage },
		{  KCDTIdDefaultGPRSAPN,     			EMedText,	ENoAttrs,    KCDTypeNameAPN },
		{  KCDTIdDefaultGPRSPDPType,    		EUint32,	ENotNull,    KCDTypeNamePDPType },
		{  KCDTIdDefaultGPRSPDPAddress,    		EText,		ENoAttrs,    KCDTypeNamePDPAddress },
		{  KCDTIdDefaultGPRSPrecedence,			EUint32,	ENoAttrs,    KCDTypeNamePrecedence },
		{  KCDTIdDefaultGPRSDelay,     			EUint32,	ENoAttrs,    KCDTypeNameDelay },
		{  KCDTIdDefaultGPRSReliability, 		EUint32,	ENoAttrs,    KCDTypeNameReliability },
		{  KCDTIdDefaultGPRSPeakThroughput,		EUint32,	ENoAttrs,    KCDTypeNamePeakThroughput },
		{  KCDTIdDefaultGPRSMeanThroughput,		EUint32,	ENoAttrs,    KCDTypeNameMeanThroughput },
		{  KCDTIdDefaultGPRSMinPrecedence,		EUint32,	ENoAttrs,    KCDTypeNameMinPrecedence },
		{  KCDTIdDefaultGPRSMinDelay,     		EUint32,	ENoAttrs,    KCDTypeNameMinDelay },
		{  KCDTIdDefaultGPRSMinReliability,		EUint32,	ENoAttrs,    KCDTypeNameMinReliability },
		{  KCDTIdDefaultGPRSMinPeakThroughput,	EUint32,	ENoAttrs,    KCDTypeNameMinPeakThroughput },
		{  KCDTIdDefaultGPRSMinMeanThroughput,	EUint32,	ENoAttrs,    KCDTypeNameMinMeanThroughput },
		{  KCDTIdDefaultGPRSDataCompression,	EBool,		ENoAttrs,    KCDTypeNameDataCompression },
		{  KCDTIdDefaultGPRSHeaderCompression,	EBool,		ENoAttrs,    KCDTypeNameHeaderCompression },
		{  KCDTIdDefaultGPRSUseEdge,            EBool,      ENoAttrs,    KCDTypeNameGPRSUseEdge },
		{  KCDTIdDefaultGPRSAnonymousAccess,	EBool,		ENoAttrs,    KCDTypeNameAnonymousAccess },
		{ 0, 0, ENoAttrs, KCDNull }
    };

	
	const SRecordTypeInfo CommsDatSchemaV1_1::iModemBearerRecordInfo[] = {
		// CCDRecordBase class
		{ KCDTIdRecordTag,					EInt,	ENoAttrs,    KCDTypeNameRecordTag },
		{ KCDTIdRecordName,					EText,  ENotNull,    KCDTypeNameRecordName },
		// This class
		{ KCDTIdNifName,					EText,  ENoAttrs,    KCDTypeNameNifName },
		{ KCDTIdPortName,					EText,  ENoAttrs,    KCDTypeNamePortName },
		{ KCDTIdTsyName,					EText,  ENoAttrs,    KCDTypeNameTsyName },
		{ KCDTIdCsyName,					EText,  ENoAttrs,    KCDTypeNameCsyName },
		{ KCDTIdLastSocketActivityTimeout,	EInt,	ENoAttrs,    KCDTypeNameLastSocketActivityTimeout },
		{ KCDTIdLastSessionClosedTimeout,	EInt,	ENoAttrs,    KCDTypeNameLastSessionClosedTimeout },
		{ KCDTIdLastSocketClosedTimeout,	EInt,	ENoAttrs,    KCDTypeNameLastSocketClosedTimeout },
		{ KCDTIdDataBits,					EInt,	ENoAttrs,    KCDTypeNameDataBits },
		{ KCDTIdStopBits,					EInt,	ENoAttrs,    KCDTypeNameStopBits },
		{ KCDTIdParity,						EInt,	ENoAttrs,    KCDTypeNameParity },
		{ KCDTIdRate,						EInt,	ENoAttrs,    KCDTypeNameRate },
		{ KCDTIdHandshaking,				EInt,	ENoAttrs,    KCDTypeNameHandShaking },
		{ KCDTIdSpecialRate,				EInt,	ENoAttrs,    KCDTypeNameSpecialRate },
		{ KCDTIdXonChar,					EInt,	ENoAttrs,    KCDTypeNameXonChar },
		{ KCDTIdXoffChar,					EInt,	ENoAttrs,    KCDTypeNameXoffChar },
		{ KCDTIdFaxClassPref,				EInt,	ENoAttrs,    KCDTypeNameFaxClassPref },
		{ KCDTIdSpeakerPref,				EInt,	ENoAttrs,    KCDTypeNameSpeakerPref },
		{ KCDTIdSpeakerVolPref,				EInt,	ENoAttrs,    KCDTypeNameSpeakerVolPref },
		{ KCDTIdModemInitString,			EDesC8,  ENoAttrs,    KCDTypeNameModemInitString },
		{ KCDTIdDataInitString,				EDesC8,  ENoAttrs,    KCDTypeNameDataInitString },
		{ KCDTIdFaxInitString,				EDesC8,  ENoAttrs,    KCDTypeNameFaxInitString },
		{ KCDTIdIspInitString,				EDesC8,  ENoAttrs,    KCDTypeNameIspInitString },
		{ KCDTIdDialPauseLength,			EText,  ENoAttrs,    KCDTypeNameDialPauseLength },
		{ KCDTIdCarrierTimeOut,				EText,  ENoAttrs,    KCDTypeNameCarrierTimeout },
		{ KCDTIdAutoAnswerRingCount,		EText,  ENoAttrs,    KCDTypeNameAutoAnswerRingCount },
		{ KCDTIdSpeakerVolControlLow,		EText,  ENoAttrs,    KCDTypeNameSpeakerVolControlLow },
		{ KCDTIdSpeakerVolControlMedium,	EText,  ENoAttrs,    KCDTypeNameSpeakerVolControlMedium },
		{ KCDTIdSpeakerVolControlHigh,		EText,  ENoAttrs,    KCDTypeNameSpeakerVolControlHigh },
		{ KCDTIdSpeakerAlwaysOff,			EText,  ENoAttrs,    KCDTypeNameSpeakerAlwaysOff },
		{ KCDTIdSpeakerOnUntilCarrier,		EText,  ENoAttrs,    KCDTypeNameSpeakerOnUntilCarrier },
		{ KCDTIdSpeakerAlwaysOn,			EText,  ENoAttrs,    KCDTypeNameSpeakerAlwaysOn },
		{ KCDTIdSpeakerOnAfterUntilCarrier,	 EText,  ENoAttrs,    KCDTypeNameSpeakerOnAfterUntilCarrier },
		{ KCDTIdDialToneWaitModifier,		EText,  ENoAttrs,    KCDTypeNameDialToneWaitModifier },
		{ KCDTIdCallProgress1,				EText,  ENoAttrs,    KCDTypeNameCallProgress1 },
		{ KCDTIdCallProgress2,				EText,  ENoAttrs,    KCDTypeNameCallProgress2 },
		{ KCDTIdCallProgress3,				EText,  ENoAttrs,    KCDTypeNameCallProgress3 },
		{ KCDTIdCallProgress4,				EText,  ENoAttrs,    KCDTypeNameCallProgress4 },
		{ KCDTIdEchoOff,					EText,  ENoAttrs,    KCDTypeNameEchoOff },
		{ KCDTIdVerboseText,				EText,  ENoAttrs,    KCDTypeNameVerboseText },
		{ KCDTIdQuietOff,					EText,  ENoAttrs,    KCDTypeNameQuietOff },
		{ KCDTIdQuietOn,					EText,  ENoAttrs,    KCDTypeNameQuietOn },
		{ KCDTIdDialCommandStateModifier,	EText,  ENoAttrs,    KCDTypeNameDialCommandStateModifier },
		{ KCDTIdOnLine,						EText,  ENoAttrs,    KCDTypeNameOnLine },
		{ KCDTIdResetConfiguration,			EText,  ENoAttrs,    KCDTypeNameResetConfiguration },
		{ KCDTIdReturnToFactoryDefs,		EText,  ENoAttrs,    KCDTypeNameReturnToFactoryDefs },
		{ KCDTIdDcdOnDuringLink,			EText,  ENoAttrs,    KCDTypeNameDcdOnDuringLink },
		{ KCDTIdDtrHangUp,					EText,  ENoAttrs,    KCDTypeNameDtrHangUp },
		{ KCDTIdDsrAlwaysOn,				EText,  ENoAttrs,    KCDTypeNameDsrAlwaysOn },
		{ KCDTIdRtsCtsHandshake,			EText,  ENoAttrs,    KCDTypeNameRtsCtsHandshake },
		{ KCDTIdXonXoffHandshake,			EText,  ENoAttrs,    KCDTypeNameXonXoffHandshake },
		{ KCDTIdEscapeCharacter,			EText,  ENoAttrs,    KCDTypeNameEscapeCharacter },
		{ KCDTIdEscapeGuardPeriod,			EText,  ENoAttrs,    KCDTypeNameEscapeGuardPeriod },
		{ KCDTIdFaxClassInterrogate,		EText,  ENoAttrs,    KCDTypeNameFaxClassInterrogate },
		{ KCDTIdFaxClass,					EText,  ENoAttrs,    KCDTypeNameFaxClass },
		{ KCDTIdNoDialTone,					EText,  ENoAttrs,    KCDTypeNameNoDialTone },
		{ KCDTIdBusy,						EText,  ENoAttrs,    KCDTypeNameBusy },
		{ KCDTIdNoAnswer,					EText,  ENoAttrs,    KCDTypeNameNoAnswer },
		{ KCDTIdCarrier,					EText,  ENoAttrs,    KCDTypeNameCarrier },
		{ KCDTIdConnect,					EText,  ENoAttrs,    KCDTypeNameConnect },
		{ KCDTIdCompressionClass5,			EText,  ENoAttrs,    KCDTypeNameCompressionClass5 },
		{ KCDTIdCompressionV42bis,			EText,  ENoAttrs,    KCDTypeNameCompressionClassV42bis },
		{ KCDTIdCompressionNone,			EText,  ENoAttrs,    KCDTypeNameCompressionNone },
		{ KCDTIdProtocolLapd,				EText,	ENoAttrs,    KCDTypeNameProtocolLapd  },
		{ KCDTIdProtocolAlt,				EText,	ENoAttrs,    KCDTypeNameProtocolAlt },
		{ KCDTIdProtocolAltcellular,		EText,	ENoAttrs,    KCDTypeNameProtocolAltcellular },
		{ KCDTIdProtocolNone,				EText,	ENoAttrs,    KCDTypeNameProtocolNone },
		{ KCDTIdMessageCentreNumber,		EText,	ENoAttrs,    KCDTypeNameMessageCentreNumber },
		{ KCDTIdMessageValidityPeriod,		EInt,	ENoAttrs,    KCDTypeNameMessageValidityPeriod },
		{ KCDTIdMessageDeliveryReport,		EBool,	ENoAttrs,    KCDTypeNameMessageDeliveryReport },
		{ KCDTIdMinSignalLevel,				EInt,	ENoAttrs,    KCDTypeNameMinSignalLevel },
		{ KCDTIdCommRole,					EInt,	ENoAttrs,    KCDTypeNameCommRole },
		{ KCDTIdControlChannelPortName,		EText,	ENoAttrs,    KCDTypeNameControlChannelPortName  },
		{ KCDTIdSirSettings,				EInt,	ENoAttrs,    KCDTypeNameSirSettings },
		{ KCDTIdBCAStack,					EText,  ENoAttrs,    KCDTypeNameBCAStack },
		{ KCDTIdBearerTechnology,			EInt,	ENoAttrs,    KCDTypeNameBearerTechnology	},
		/**** add new fields above this comment ****/
        // bearer base class
        { KCDTIdBearerAgent,				EText,  ENoAttrs,    KCDTypeNameBearerAgent },
		{ 0, 0, ENoAttrs, KCDNull }

	};


    const SRecordTypeInfo CommsDatSchemaV1_1::iLANBearerRecordInfo[] = {
		// CCDRecordBase class
    	{ KCDTIdRecordTag,					    EInt,	ENoAttrs,    KCDTypeNameRecordTag },
		{ KCDTIdRecordName,					    EText,	ENotNull,    KCDTypeNameRecordName },
		// This class
		{ KCDTIdLANBearerNifName,			    EText,	ENotNull,    KCDTypeNameNifName },
		{ KCDTIdLANBearerLddFilename,		    EText,	ENoAttrs,    KCDTypeNameLanBearerLddFilename },
		{ KCDTIdLANBearerLddName,			    EText,	ENotNull,    KCDTypeNameLanBearerLddName },
		{ KCDTIdLANBearerPddFilename,		    EText,	ENoAttrs,    KCDTypeNameLanBearerPddFilename },
		{ KCDTIdLANBearerPddName,			    EText,	ENotNull,    KCDTypeNameLanBearerPddName },
		{ KCDTIdLANBearerPacketDriverName,	    EText,	ENoAttrs,    KCDTypeNameLanBearerPacketDriverName },
		{ KCDTIdLANLastSocketActivityTimeout,	EInt,	ENoAttrs,    KCDTypeNameLastSocketActivityTimeout },
		{ KCDTIdLANLastSessionClosedTimeout,	EInt,	ENoAttrs,    KCDTypeNameLastSessionClosedTimeout },
		{ KCDTIdLANLastSocketClosedTimeout,	    EInt,	ENoAttrs,    KCDTypeNameLastSocketClosedTimeout },
		{ KCDTIdBearerTechnology,				EInt,	ENoAttrs,    KCDTypeNameBearerTechnology	},
        /**** add new fields above this comment ****/
        // bearer base class
        { KCDTIdBearerAgent,				    EText,	ENotNull,    KCDTypeNameBearerAgent },
	    { 0, 0, ENoAttrs, KCDNull }
	};


    const SRecordTypeInfo CommsDatSchemaV1_1::iVirtualBearerRecordInfo[] = {
		// CCDRecordBase class
    	{KCDTIdRecordTag,	                EInt,	ENoAttrs,    KCDTypeNameRecordTag },
		{KCDTIdRecordName,	                EText,	ENotNull,    KCDTypeNameRecordName },
		// This class
		{KCDTIdVirtualBearerNifName,        EText,	ENotNull,    KCDTypeNameNifName },
    	{KCDTIdVBLastSocketActivityTimeout, EInt,	ENoAttrs,    KCDTypeNameLastSocketActivityTimeout },
     	{KCDTIdVBLastSessionClosedTimeout,  EInt,	ENoAttrs,    KCDTypeNameLastSessionClosedTimeout },
        {KCDTIdVBLastSocketClosedTimeout,	EInt,	ENoAttrs,    KCDTypeNameLastSocketClosedTimeout },
        {KCDTIdBearerTechnology,			EInt,	ENoAttrs,    KCDTypeNameBearerTechnology	},
    	/**** add new fields above this comment ****/
        // bearer base class
        {KCDTIdBearerAgent,                 EText,	ENotNull,    KCDTypeNameBearerAgent },
    	{ 0, 0, ENoAttrs, KCDNull }
	};


	const SRecordTypeInfo CommsDatSchemaV1_1::iWAPSMSBearerRecordInfo[] =
    {
		// CCDRecordBase class
		{ KCDTIdRecordTag,	                EInt,	ENoAttrs,    KCDTypeNameRecordTag },
		{ KCDTIdRecordName,         	    EText,	ENotNull,    KCDTypeNameRecordName },
		// This class
		{ KCDTIdWAPSMSAccessPointId,	    ELinkWAPAPRecord,	ENotNull,    KCDTypeNameWAPAccessPointId },
		{ KCDTIdWAPSMSGatewayAddress,	    EText,  ENoAttrs,    KCDTypeNameWAPGatewayAddress },
		{ KCDTIdWAPSMSServiceCentreAddress,	EText,	ENoAttrs,    KCDTypeNameWAPServiceCentreAddress },
		{ KCDTIdWAPSMSWSPOption,	        EInt,	ENoAttrs,    KCDTypeNameWAPWSPOption },
		{ KCDTIdWAPSMSSecurity,	            EBool,	ENoAttrs,    KCDTypeNameWAPSecurity },
		{ 0, 0, ENoAttrs, KCDNull }
    };

    const SRecordTypeInfo CommsDatSchemaV1_1::iWAPIPBearerRecordInfo[] = {
		// CCDRecordBase class
    	{ KCDTIdRecordTag,	         EInt,  ENoAttrs,    KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	         EText, ENotNull,    KCDTypeNameRecordName },
		// This class
    	{ KCDTIdWAPAccessPointId,	 ELinkWAPAPRecord,	ENotNull,    KCDTypeNameWAPAccessPointId },
		{ KCDTIdWAPGatewayAddress,	 EText,             ENoAttrs,    KCDTypeNameWAPGatewayAddress },
		{ KCDTIdWAPIAP,	 			 ELinkIAPRecord,	ENoAttrs,    KCDTypeNameWAPIAP },
		{ KCDTIdWAPWSPOption,	     EInt,	            ENoAttrs,    KCDTypeNameWAPWSPOption },
		{ KCDTIdWAPSecurity,	     EBool,             ENoAttrs,    KCDTypeNameWAPSecurity },
		{ KCDTIdWAPProxyPort,	 	 EInt,	            ENotNull,    KCDTypeNameWAPProxyPort },
		{ KCDTIdWAPProxyLoginName,	 EText,	            ENoAttrs,    KCDTypeNameWAPProxyLoginName },
		{ KCDTIdWAPProxyLoginPass,	 EText,             ENoAttrs,    KCDTypeNameWAPProxyLoginPass },
		{ 0, 0, ENoAttrs, KCDNull }
	};


    const SRecordTypeInfo CommsDatSchemaV1_1::iChargecardRecordInfo[] = {
		// CCDRecordBase class
		{ KCDTIdRecordTag,		EInt,	ENoAttrs,    KCDTypeNameRecordTag },
		{ KCDTIdRecordName,		EText,	ENotNull,    KCDTypeNameRecordName },
		// This class
		{ KCDTIdAccountNo,		EText,	ENoAttrs,    KCDTypeNameAccountNo },
		{ KCDTIdPin,			EText,	ENoAttrs,    KCDTypeNamePin },
		{ KCDTIdLocalRule,		EText,	ENoAttrs,    KCDTypeNameLocalRule },
		{ KCDTIdNatRule,		EText,  ENoAttrs,    KCDTypeNameNatRule },
		{ KCDTIdIntlRule,		EText,  ENoAttrs,    KCDTypeNameIntlRule },
        { 0, 0, ENoAttrs, KCDNull }
	};

    const SRecordTypeInfo CommsDatSchemaV1_1::iProxiesRecordInfo[] = {
		// CCDRecordBase class
    	{ KCDTIdRecordTag,	EInt,		        ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	EText,		        ENotNull,   KCDTypeNameRecordName },
		// This class
#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
    	{ KCDTIdISP,				ELink,		ENoAttrs,    KCDTypeNameProxyISP },
#else
        { KCDTIdISP,				EInt,		ENoAttrs,    KCDTypeNameProxyISP },
#endif //SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
		{ KCDTIdProxyServiceType,	EText,		ENoAttrs,    KCDTypeNameProxyServiceType },
		{ KCDTIdUseProxyServer,		EBool,		ENotNull,    KCDTypeNameUseProxyServer },
		{ KCDTIdServerName,			ELongText,	ENoAttrs,    KCDTypeNameServerName },
		{ KCDTIdProtocolName,		EText,		ENotNull,    KCDTypeNameProtocolName },
		{ KCDTIdPortNumber,			EInt,		ENoAttrs,    KCDTypeNamePortNumber },
		{ KCDTIdExceptions,			ELongText,  ENoAttrs,    KCDTypeNameExceptions },
	    { 0, 0, ENoAttrs, KCDNull }
	};

	const SRecordTypeInfo CommsDatSchemaV1_1::iSecureSocketRecordInfo[] = {
		// CCDRecordBase class
    	{ KCDTIdRecordTag,	     EInt,	    ENoAttrs,    KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	     EText,	    ENotNull,    KCDTypeNameRecordName },
		// This class
		{ KCDTIdSSProtoName,     EText,	    ENotNull,    KCDTypeNameSSProtoName },
	    { KCDTIdSSProtoLibrary,  EText,	    ENotNull,    KCDTypeNameSSProtoLibrary },
	    { 0, 0, ENoAttrs, KCDNull }
	};


    const SRecordTypeInfo CommsDatSchemaV1_1::iAgentLookupRecordInfo[] = {
		// CCDRecordBase class
    	{ KCDTIdRecordTag,	        EInt,		ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	        EText,		ENotNull,   KCDTypeNameRecordName },
		// This class
		{ KCDTIdAgentFriendlyName,  EText,		ENotNull,   KCDTypeNameAgentFriendlyName },
    	{ KCDTIdAgentFileName,      EText,		ENotNull,   KCDTypeNameAgentFileName },
		{ 0, 0, ENoAttrs, KCDNull }
	};

    const SRecordTypeInfo CommsDatSchemaV1_1::iPANServiceExtRecordInfo[] = {
		// CCDRecordBase class
    	{ KCDTIdRecordTag,	        	EInt,		ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	        	EText,		ENotNull,   KCDTypeNameRecordName },
		// This class
    	{ KCDTIdLocalRole,	        	EInt,		ENotNull,   KCDTypeNameLocalRole },
		{ KCDTIdPeerRole,	        	EInt,		ENotNull,   KCDTypeNamePeerRole },
		{ KCDTIdPeerMACAddresses,  		EText,		ENotNull,   KCDTypeNamePeerMACAddresses },
    	{ KCDTIdPromptForRemoteDevices,	EBool,		ENotNull,   KCDTypeNamePromptForRemoteDevices },
    	{ KCDTIdDisableSdpQuery,		EBool,		ENotNull,   KCDTypeNameDisableSdpQuery },
		{ KCDTIdAllowIncoming,			EBool,		ENotNull,   KCDTypeNameAllowIncoming },
    	{ KCDTIdPromptIfMACListFails,	EBool,		ENotNull,   KCDTypeNamePromptIfMACListFails },
#ifdef SYMBIAN_NETWORKING_DHCPSERVER
		{ KCDTIdNapServiceEnabled,			EBool,		ENotNull,   KCDTypeNameNapServiceEnabled },
#endif // SYMBIAN_NETWORKING_DHCPSERVER    	
		/**** add new fields above this comment ****/
        // service base class [BTW it is not correct that this inherits from Service Record base]
        { KCDTIdServiceEnableLlmnr,		        EBool,      ENoAttrs,    KCDTypeNameServiceEnableLlmnr },
		{ 0, 0, ENoAttrs, KCDNull }
	};

    const SRecordTypeInfo CommsDatSchemaV1_1::iAccessPointRecordInfo[] = {
		// CCDRecordBase class
    	{ KCDTIdRecordTag,	EInt,		        ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	EText,		        ENotNull,   KCDTypeNameRecordName },
		// This class
   		{ KCDTIdAccessPointGID,	    EInt,		            ENotNull,   KCDTypeNameAccessPointGID },
		{ KCDTIdSelectionPolicy,    ELink,		            ENotNull,   KCDTypeNameSelectionPolicy },
#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
    	{ KCDTIdTier,                   ELinkTierRecord,		ENotNull,   KCDTypeNameTier },
		{ KCDTIdMCpr,                   ELinkMCprRecord,		ENotNull,   KCDTypeNameMCpr },
		{ KCDTIdCpr,                    ELinkCprRecord,		    ENotNull,   KCDTypeNameCpr },
		{ KCDTIdSCpr,                   ELinkSCprRecord,		ENotNull,   KCDTypeNameSCpr },
		{ KCDTIdProtocol,               ELinkProtocolRecord,    ENotNull,   KCDTypeNameProtocol },
		{ KCDTIdCprConfig,              EInt,		            ENotNull,   KCDTypeNameCprConfig },
		{ KCDTIdAppSID,                 EInt,		            ENoAttrs,   KCDTypeNameAppSID },
		{ KCDTIdConfigAPIdList,         EText,                  ENoAttrs,   KCDTypeNameConfigAPIdList },
		{ KCDTIdCustomSelectionPolicy,  EInt,		            ENoAttrs,   KCDTypeNameCustomSelectionPolicy },
		{ KCDTIdAccessPointPriority,    EUint32,		ENoAttrs,	KCDTypeNameAccessPointPriority },
#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
	    { 0, 0, ENoAttrs, KCDNull }
	};

	const SRecordTypeInfo CommsDatSchemaV1_1::iIAPPrioritySelectionPolicyRecordInfo[] = {
		// CCDRecordBase class
   		{ KCDTIdRecordTag,	EInt,		ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	EText,		ENotNull,   KCDTypeNameRecordName },
		// This class
   		{ KCDTIdIap1,       ELinkIAPRecord,		ENoAttrs,   KCDTypeNameIap1Name },
		{ KCDTIdIap2,       ELinkIAPRecord,		ENoAttrs,   KCDTypeNameIap2Name },
		{ KCDTIdIap3,       ELinkIAPRecord,		ENoAttrs,   KCDTypeNameIap3Name },
		{ KCDTIdIap4,       ELinkIAPRecord,		ENoAttrs,   KCDTypeNameIap4Name },
		{ KCDTIdIap5,       ELinkIAPRecord,		ENoAttrs,   KCDTypeNameIap5Name },
		{ KCDTIdIap6,       ELinkIAPRecord,		ENoAttrs,   KCDTypeNameIap6Name },
		{ KCDTIdIap7,       ELinkIAPRecord,		ENoAttrs,   KCDTypeNameIap7Name },
		{ KCDTIdIap8,       ELinkIAPRecord,		ENoAttrs,   KCDTypeNameIap8Name },
		{ KCDTIdIap9,       ELinkIAPRecord,		ENoAttrs,   KCDTypeNameIap9Name },
		{ KCDTIdIap10,      ELinkIAPRecord,		ENoAttrs,   KCDTypeNameIap10Name },
		{ KCDTIdIap11,      ELinkIAPRecord,		ENoAttrs,   KCDTypeNameIap11Name },
		{ KCDTIdIap12,      ELinkIAPRecord,		ENoAttrs,   KCDTypeNameIap12Name },
		{ KCDTIdIap13,      ELinkIAPRecord,		ENoAttrs,   KCDTypeNameIap13Name },
		{ KCDTIdIap14,      ELinkIAPRecord,		ENoAttrs,   KCDTypeNameIap14Name },
		{ KCDTIdIap15,      ELinkIAPRecord,		ENoAttrs,   KCDTypeNameIap15Name },
		{ KCDTIdIapCount,   EInt,		ENoAttrs,   KCDTypeNameIapCountName },
		{ 0, 0, ENoAttrs, KCDNull }
	};
    
    
	const SRecordTypeInfo CommsDatSchemaV1_1::iEAPSecRecordInfo[] = {
		// CCDRecordBase class
	  	{ KCDTIdRecordTag,	        	EInt,   ENoAttrs,   KCDTypeNameRecordTag },
  		{ KCDTIdRecordName,     		EText,  ENotNull,   KCDTypeNameRecordName },
		// This class
		{ KCDTIdEAPSecOuterEAPType,		EInt,	ENoAttrs,	KCDTypeNameEAPSecOuterEAPType },
		{ KCDTIdEAPSecId,				EMedText,	ENoAttrs,	KCDTypeNameEapId },
		{ KCDTIdEAPSecPassword,			EMedText,	ENoAttrs,	KCDTypeNameEAPSecPassword },	
		{ KCDTIdEAPSecConfigId,			EUint32,ENoAttrs,	KCDTypeNameEAPSecConfigId },
		{ KCDTIdEAPSecData,				EInt,	ENoAttrs,	KCDTypeNameEAPSecData },
        { KCDTIdEAPSecVendorId,			EText,  ENoAttrs,	KCDTypeNameEAPSecVendorId },
        { KCDTIdEAPSecVendorType,		EUint32,ENoAttrs,	KCDTypeNameEAPSecVendorType },
		{ 0, 0, ENoAttrs, KCDNull }
  	};

	const SRecordTypeInfo CommsDatSchemaV1_1::iTunEAPRecordInfo[] = {
		// CCDRecordBase class
	  	{ KCDTIdRecordTag,	       		EInt,   ENoAttrs,   KCDTypeNameRecordTag },
  		{ KCDTIdRecordName,    			EText,  ENotNull,   KCDTypeNameRecordName },
		// This class
		{ KCDTIdTUNEAPInnerType,		EInt,	ENoAttrs,	KCDTypeNameTUNEAPInnerType },
		{ KCDTIdTUNEAPData,				EInt,	ENoAttrs,	KCDTypeNameTUNEAPData },
		{ 0, 0, ENoAttrs, KCDNull }
  	};

	const SRecordTypeInfo CommsDatSchemaV1_1::iEAPTLSRecordInfo[] = {
		// CCDRecordBase class
	  	{ KCDTIdRecordTag,	       		EInt,   ENoAttrs,   KCDTypeNameRecordTag },
  		{ KCDTIdRecordName,    			EText,  ENotNull,   KCDTypeNameRecordName },
		// This class
		{ KCDTIdEAPTLSClientCertName,	EText,	ENotNull,	KCDTypeNameEAPTLSClientCertName },
		{ 0, 0, ENoAttrs, KCDNull }
  	};

	const SRecordTypeInfo CommsDatSchemaV1_1::iLEAPRecordInfo[] = {
		// CCDRecordBase class
	  	{ KCDTIdRecordTag,	       		EInt,   ENoAttrs,   KCDTypeNameRecordTag },
  		{ KCDTIdRecordName,    			EText,  ENotNull,   KCDTypeNameRecordName },
		// This class
		{ KCDTIdLEAPTimeout,			EInt,	ENoAttrs,	KCDTypeNameLEAPTimeout },
		{ 0, 0, ENoAttrs, KCDNull }
  	};

	 const SRecordTypeInfo CommsDatSchemaV1_1::iEAPSIMRecordInfo[] = {
 		// CCDRecordBase class
 		{ KCDTIdRecordTag, EInt, ENoAttrs, KCDTypeNameRecordTag },
   		{ KCDTIdRecordName, EText, ENotNull, KCDTypeNameRecordName },
		// This class
   		{ KCDTIdEapSimProtocolId, EInt, ENotNull, KCDTypeNameEapSimProtocolId },
   		{ KCDTIdEapSimPseudonym, EDesC8, ENotNull, KCDTypeNameEapSimPseudonym },
		{ KCDTIdEapSimUseNaiRealm, EBool, ENotNull, KCDTypeNameEapSimUseNaiRealm },
		{ KCDTIdEapSimNaiRealm, EDesC8, ENotNull, KCDTypeNameEapSimNaiRealm },
		{ KCDTIdEapSimMinRands, EInt, ENotNull, KCDTypeNameEapSimMinRands },
		{ 0, 0, ENoAttrs, KCDNull }
	};
	
    const SRecordTypeInfo CommsDatSchemaV1_1::iEAPAKARecordInfo[] = {
		// CCDRecordBase class
    	{ KCDTIdRecordTag,	EInt,		        ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	EText,		        ENotNull,   KCDTypeNameRecordName },
		// This class
 		{ KCDTIdEapAkaProtocolId,           EInt,   ENotNull, KCDTypeNameEapAkaProtocolId },
   		{ KCDTIdEapAkaPseudonym,            EDesC8, ENotNull, KCDTypeNameEapAkaPseudonym },
		{ KCDTIdEapAkaUseNaiRealm,          EBool,  ENotNull, KCDTypeNameEapAkaUseNaiRealm },
		{ KCDTIdEapAkaNaiRealm,             EDesC8, ENotNull, KCDTypeNameEapAkaNaiRealm },
	    { 0, 0, ENoAttrs, KCDNull }
    };
#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
    const SRecordTypeInfo CommsDatSchemaV1_1::iAPPrioritySelectionPolicyRecordInfo[] = {
		// CCDRecordBase class
    	{ KCDTIdRecordTag,	EInt,		        ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	EText,		        ENotNull,   KCDTypeNameRecordName },
		// This class
   		{ KCDTIdAp1,        ELinkAPRecord,	    ENoAttrs,   KCDTypeNameAp1Name },
		{ KCDTIdAp2,        ELinkAPRecord,	    ENoAttrs,   KCDTypeNameAp2Name },
		{ KCDTIdAp3,        ELinkAPRecord,	    ENoAttrs,   KCDTypeNameAp3Name },
		{ KCDTIdAp4,        ELinkAPRecord,	    ENoAttrs,   KCDTypeNameAp4Name },
		{ KCDTIdAp5,        ELinkAPRecord,	    ENoAttrs,   KCDTypeNameAp5Name },
		{ KCDTIdAp6,        ELinkAPRecord,	    ENoAttrs,   KCDTypeNameAp6Name },
		{ KCDTIdAp7,        ELinkAPRecord,	    ENoAttrs,   KCDTypeNameAp7Name },
		{ KCDTIdAp8,        ELinkAPRecord,	    ENoAttrs,   KCDTypeNameAp8Name },
		{ KCDTIdAp9,        ELinkAPRecord,	    ENoAttrs,   KCDTypeNameAp9Name },
		{ KCDTIdAp10,       ELinkAPRecord,	    ENoAttrs,   KCDTypeNameAp10Name },
		{ KCDTIdAp11,       ELinkAPRecord,	    ENoAttrs,   KCDTypeNameAp11Name },
		{ KCDTIdAp12,       ELinkAPRecord,	    ENoAttrs,   KCDTypeNameAp12Name },
		{ KCDTIdAp13,       ELinkAPRecord,	    ENoAttrs,   KCDTypeNameAp13Name },
		{ KCDTIdAp14,       ELinkAPRecord,	    ENoAttrs,   KCDTypeNameAp14Name },
		{ KCDTIdAp15,       ELinkAPRecord,		ENoAttrs,   KCDTypeNameAp15Name },
		{ KCDTIdApCount,   EInt,		ENoAttrs,   KCDTypeNameApCountName },
		{ 0, 0, ENoAttrs, KCDNull }
	};

    const SRecordTypeInfo CommsDatSchemaV1_1::iTierRecordInfo[] = {
		// CCDRecordBase class
   		{ KCDTIdRecordTag,	        EInt,		ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	        EText,		ENotNull,   KCDTypeNameRecordName },
		// This class
		{ KCDTIdTierImplUid,		EInt,		ENotNull,   KCDTypeNameTierImplUid },
    	{ KCDTIdTierThreadName,     EText,		ENotNull,   KCDTypeNameTierThreadName },
    	{ KCDTIdTierManagerName,    EText,		ENotNull,   KCDTypeNameTierManagerName },
    	{ KCDTIdDefaultAccessPoint, ELinkAPRecord,	ENotNull,   KCDTypeNameDefaultAccessPoint },
    	{ KCDTIdPromptUser,         EInt,		ENotNull,   KCDTypeNamePromptUser },
		{ 0, 0, ENoAttrs, KCDNull }
	};

    const SRecordTypeInfo CommsDatSchemaV1_1::iMCprRecordInfo[] = {
		// CCDRecordBase class
   		{ KCDTIdRecordTag,	        EInt,		ENoAttrs,   KCDTypeNameRecordTag },
   		{ KCDTIdRecordName,	        EText,		ENotNull,   KCDTypeNameRecordName },
		// This class
   		{ KCDTIdMCprUid,            EInt,		ENotNull,   KCDTypeNameMCprUid },
		{ 0, 0, ENoAttrs, KCDNull }
	};

    const SRecordTypeInfo CommsDatSchemaV1_1::iCprRecordInfo[] = {
		// CCDRecordBase class
   		{ KCDTIdRecordTag,	        EInt,		ENoAttrs,   KCDTypeNameRecordTag },
   		{ KCDTIdRecordName,	        EText,		ENotNull,   KCDTypeNameRecordName },
		// This class
   		{ KCDTIdCprUid,             EInt,		ENotNull,   KCDTypeNameCprUid },
		{ 0, 0, ENoAttrs, KCDNull }
	};

    const SRecordTypeInfo CommsDatSchemaV1_1::iSCprRecordInfo[] = {
		// CCDRecordBase class
   		{ KCDTIdRecordTag,	        EInt,		ENoAttrs,   KCDTypeNameRecordTag },
   		{ KCDTIdRecordName,	        EText,		ENotNull,   KCDTypeNameRecordName },
		// This class
   		{ KCDTIdSCprUid,            EInt,		ENotNull,   KCDTypeNameSCprUid },
		{ 0, 0, ENoAttrs, KCDNull }
	};

    const SRecordTypeInfo CommsDatSchemaV1_1::iProtocolRecordInfo[] = {
		// CCDRecordBase class
   		{ KCDTIdRecordTag,	        EInt,		ENoAttrs,   KCDTypeNameRecordTag },
   		{ KCDTIdRecordName,	        EText,		ENotNull,   KCDTypeNameRecordName },
		// This class
   		{ KCDTIdProtocolUid,        EInt,		ENotNull,   KCDTypeNameProtocolUid },
   		{ KCDTIdProtocolConfigLoaderUid, EInt,          ENoAttrs,   KCDTypeNameProtocolConfigLoaderUid },
		{ 0, 0, ENoAttrs, KCDNull }
	};

    const SRecordTypeInfo CommsDatSchemaV1_1::iBearerTypeRecordInfo[] = {
		// CCDRecordBase class
    	{ KCDTIdRecordTag,	EInt,		        ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	EText,		        ENotNull,   KCDTypeNameRecordName },
		// This class
   		{ KCDTIdBearerTypeTier,     ELinkTierRecord,	    ENotNull,   KCDTypeNameTier },
		{ KCDTIdBearerTypeMCpr,     ELinkMCprRecord,        ENotNull,   KCDTypeNameMCpr },
		{ KCDTIdBearerTypeCpr,      ELinkCprRecord,         ENotNull,   KCDTypeNameCpr  },
		{ KCDTIdBearerTypeSCpr,     ELinkSCprRecord,	    ENotNull,   KCDTypeNameSCpr },
		{ KCDTIdBearerTypeProtocol, ELinkProtocolRecord,    ENotNull,   KCDTypeNameProtocol },
	    { 0, 0, ENoAttrs, KCDNull }
	};
		
	const SRecordTypeInfo CommsDatSchemaV1_1::iConfigAccessPointRecordInfo[] = {
		// CCDRecordBase class
        { KCDTIdRecordTag,	        EInt,		ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	        EText,		ENotNull,   KCDTypeNameRecordName },
		// This class
        { KCDTIdConfigAccessPointSCpr,              ELinkSCprRecord,    ENotNull,   KCDTypeNameConfigAccessPointSCpr },
		{ KCDTIdConfigAccessPointProtocol,          ELinkProtocolRecord,ENotNull,   KCDTypeNameConfigAccessPointProtocol },
		{ KCDTIdConfigAccessPointProtocolConfig,    EInt,               ENotNull,   KCDTypeNameConfigAccessPointProtocolConfig },
		{ KCDTIdConfigAccessPointLayerBelow,        ELinkCAPRecord,     ENoAttrs,   KCDTypeNameConfigAccessPointLayerBelow },
		{ 0, 0, ENoAttrs, KCDNull }
     };

 	const SRecordTypeInfo CommsDatSchemaV1_1::iPolicySelectorRecordInfo[] = {
 		{ KCDTIdRecordTag,	  		EInt,		ENoAttrs,	KCDTypeNameRecordTag },
 		{ KCDTIdRecordName,	  		EText,		ENotNull,	KCDTypeNameRecordName },
 		{ KCDTIdPolicyId,			EInt,		ENotNull,	KCDTypeNamePolicyId },
 		{ KCDTIdAppUid,				EInt,		ENotNull,	KCDTypeNameAppUid },
 		{ KCDTIdSrcAddress,			EText,		ENotNull,	KCDTypeNameSrcAddress },
 		{ KCDTIdSrcMask,			EText,		ENotNull,	KCDTypeNameSrcMask },
 		{ KCDTIdDstAddress,			EText,		ENotNull,	KCDTypeNameDstAddress },
 		{ KCDTIdDstMask,			EText,		ENotNull,	KCDTypeNameDstMask },
 		{ KCDTIdSrcPort,			EInt,		ENotNull,	KCDTypeNameSrcPort },
 		{ KCDTIdDstPort,			EInt,		ENotNull,	KCDTypeNameDstPort },
 		{ KCDTIdSrcPortMax,			EInt,		ENotNull,	KCDTypeNameSrcPortMax },
 		{ KCDTIdDstPortMax,			EInt,		ENotNull,	KCDTypeNameDstPortMax },
 		{ KCDTIdProtocolId,			EUint32,	ENotNull,	KCDTypeNameProtocolId },
 		{ KCDTIdIAPid,				EUint32,	ENotNull,	KCDTypeNameIAPid },
 		{ KCDTIdPriority,			EInt,		ENotNull,	KCDTypeNamePriority },
 		{ 0, 0, ENoAttrs, KCDNull }
     };
 
 	const SRecordTypeInfo CommsDatSchemaV1_1::iPolicySelector2ParamsRecordInfo[] = {
		{ KCDTIdRecordTag,	        		EInt,		ENoAttrs,   KCDTypeNameRecordTag },
 		{ KCDTIdRecordName,	        		EText,		ENotNull,   KCDTypeNameRecordName },
   		{ KCDTIdPolicySelectorId,	  		EInt,		ENotNull,	KCDTypeNamePolicySelectorId },
 		{ KCDTIdParamsId,			EInt,		ENotNull,	KCDTypeNameParamsId },
 		{ 0, 0, ENoAttrs, KCDNull }
     };

 	const SRecordTypeInfo CommsDatSchemaV1_1::iGenericQosRecordInfo[] = {
    		{ KCDTIdRecordTag,	        		EInt,		ENoAttrs,   KCDTypeNameRecordTag },
 		{ KCDTIdRecordName,	        		EText,		ENotNull,   KCDTypeNameRecordName },
     	{ KCDTIdUplinkBandwidth,     		EInt,		ENotNull,   KCDTypeNameUplinkBandwidth},
     	{ KCDTIdDownLinkMaximumBurstSize,   EInt,		ENotNull,   KCDTypeNameDownLinkMaximumBurstSize},
     	{ KCDTIdUpLinkMaximumBurstSize,     EInt,		ENotNull,   KCDTypeNameUpLinkMaximumBurstSize},
     	{ KCDTIdDownLinkAveragePacketSize,  EInt,		ENotNull,   KCDTypeNameDownLinkAveragePacketSize},
     	{ KCDTIdUpLinkAveragePacketSize,    EInt,		ENotNull,   KCDTypeNameUpLinkAveragePacketSize},
     	{ KCDTIdDownLinkMaximumPacketSize,  EInt,		ENotNull,   KCDTypeNameDownLinkMaximumPacketSize},
     	{ KCDTIdUpLinkMaximumPacketSize,    EInt,		ENotNull,   KCDTypeNameUpLinkMaximumPacketSize},
     	{ KCDTIdDownLinkDelay,     			EInt,		ENotNull,   KCDTypeNameDownLinkDelay},
     	{ KCDTIdUpLinkDelay,     			EInt,		ENotNull,   KCDTypeNameUpLinkDelay},
     	{ KCDTIdDownLinkDelayVariation,     EInt,		ENotNull,   KCDTypeNameDownLinkDelayVariation},
     	{ KCDTIdUpLinkDelayVariation,     	EInt,		ENotNull,   KCDTypeNameUpLinkDelayVariation},
     	{ KCDTIdDownLinkPriority,     		EInt,		ENotNull,   KCDTypeNameDownLinkPriority},
     	{ KCDTIdUpLinkPriority,     		EInt,		ENotNull,   KCDTypeNameUpLinkPriority},
     	{ KCDTIdHeaderMode, 				EBool,	    ENotNull,   KCDTypeNameHeaderMode },
 //    	{ KCDTIdQosName,         			EText,		ENotNull,   KCDTypeNameQosName },
 		{ 0, 0, ENoAttrs, KCDNull }
 	};	
#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY

    //
    // Lookup table to associate table name with Table Id
    //  

	const SRecordTypeInfo CommsDatSchemaV1_1::iWifiScanEngineRecordInfo[] = {
   		{ KCDTIdRecordTag,	        		EInt,		ENoAttrs,   KCDTypeNameRecordTag },
		{ KCDTIdRecordName,	        		EText,		ENotNull,   KCDTypeNameRecordName },
		{ KCDTIdScanPeriodMs,  				EInt,		ENotNull,	KCDTypeNameScanPeriodMs },
		{ KCDTIdRSSIMin,					EInt,		ENotNull,	KCDTypeNameRSSIMin },
		{ KCDTIdRSSIMax,					EInt,		ENotNull,	KCDTypeNameRSSIMax },
		{ 0, 0, ENoAttrs, KCDNull }
    };

    const STableLookup CommsDatSchemaV1_1::iTableLookup[] = {
	{KCDTIdConnectionPrefsRecord,				KCDTypeNameConnectionPrefs,				CommsDatSchemaV1_1::iConnectionPrefsRecordInfo },
	{KCDTIdNetworkRecord,						KCDTypeNameNetwork,						CommsDatSchemaV1_1::iNetworkRecordInfo },
	{KCDTIdIAPRecord,							KCDTypeNameIAP,							CommsDatSchemaV1_1::iIAPRecordInfo },
	{KCDTIdWAPAccessPointRecord,				KCDTypeNameWAPAccessPoint,				CommsDatSchemaV1_1::iWAPAccessPointRecordInfo },
	{KCDTIdDialOutISPRecord,					KCDTypeNameDialOutISP,					CommsDatSchemaV1_1::iDialOutISPRecordInfo },
	{KCDTIdDialInISPRecord,						KCDTypeNameDialInISP,					CommsDatSchemaV1_1::iDialInISPRecordInfo },
	{KCDTIdLANServiceRecord,					KCDTypeNameLANService,					CommsDatSchemaV1_1::iLANServiceRecordInfo },
	{KCDTIdWLANServiceExtRecord,				KCDTypeNameWLANServiceExt,				CommsDatSchemaV1_1::iWLANServiceExtRecordInfo },
	{KCDTIdVPNServiceRecord,					KCDTypeNameVPNService,					CommsDatSchemaV1_1::iVPNServiceRecordInfo },
	{KCDTIdWCDMAPacketServiceRecord,			KCDTypeNameWCDMAPacketService,			CommsDatSchemaV1_1::iWCDMAPacketServiceRecordInfo },
	{KCDTIdOutgoingGprsRecord,					KCDTypeNameOutgoingWCDMA,				CommsDatSchemaV1_1::iWCDMAPacketServiceRecordInfo },
	{KCDTIdIncomingGprsRecord,					KCDTypeNameIncomingWCDMA,				CommsDatSchemaV1_1::iWCDMAPacketServiceRecordInfo },
	{KCDTIdDefaultWCDMARecord,					KCDTypeNameDefaultWCDMA,				CommsDatSchemaV1_1::iDefaultWCDMARecordInfo },
	{KCDTIdModemBearerRecord,					KCDTypeNameModemBearer,					CommsDatSchemaV1_1::iModemBearerRecordInfo },
	{KCDTIdLANBearerRecord,						KCDTypeNameLANBearer,					CommsDatSchemaV1_1::iLANBearerRecordInfo },
	{KCDTIdVirtualBearerRecord,					KCDTypeNameVirtualBearer,				CommsDatSchemaV1_1::iVirtualBearerRecordInfo },
	{KCDTIdWAPSMSBearerRecord,					KCDTypeNameWAPSMSBearer,				CommsDatSchemaV1_1::iWAPSMSBearerRecordInfo },
	{KCDTIdWAPIPBearerRecord,					KCDTypeNameWAPIPBearer,					CommsDatSchemaV1_1::iWAPIPBearerRecordInfo },
	{KCDTIdChargecardRecord,					KCDTypeNameChargecard,					CommsDatSchemaV1_1::iChargecardRecordInfo },
	{KCDTIdProxiesRecord,						KCDTypeNameProxies,						CommsDatSchemaV1_1::iProxiesRecordInfo },
	{KCDTIdSSProtoRecord,						KCDTypeNameSSProto,						CommsDatSchemaV1_1::iSecureSocketRecordInfo},
	{KCDTIdAgentLookupRecord,					KCDTypeNameAgentLookup,					CommsDatSchemaV1_1::iAgentLookupRecordInfo },
	{KCDTIdPANServiceExtRecord,					KCDTypeNamePANServiceExt,				CommsDatSchemaV1_1::iPANServiceExtRecordInfo },
	{KCDTIdGlobalSettingsRecord,				KCDTypeNameGlobalSettings,				CommsDatSchemaV1_1::iGlobalSettingsRecordInfo },
	{KCDTIdLocationRecord,						KCDTypeNameLocation,					CommsDatSchemaV1_1::iLocationRecordInfo },
    {KCDTIdAccessPointRecord,	        	    KCDTypeNameAccessPoint,					CommsDatSchemaV1_1::iAccessPointRecordInfo },
    {KCDTIdIapPrioritySelectionPolicyRecord,    KCDTypeNameIapPrioritySelectionPolicy,	CommsDatSchemaV1_1::iIAPPrioritySelectionPolicyRecordInfo },
    {KCDTIdUmtsR99QoSAndOnTableRecord,          KCDTypeNameUmtsR99QoSAndOnTable,		CommsDatSchemaV1_1::iUmtsR99QoSAndOnTableRecordInfo },
#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
    {KCDTIdTierRecord,        	                KCDTypeNameTierRecord,					CommsDatSchemaV1_1::iTierRecordInfo },
    {KCDTIdMCprRecord,        			        KCDTypeNameMCprRecord,					CommsDatSchemaV1_1::iMCprRecordInfo },
    {KCDTIdCprRecord,        	                KCDTypeNameCprRecord,					CommsDatSchemaV1_1::iCprRecordInfo },
    {KCDTIdSCprRecord,                          KCDTypeNameSCprRecord,					CommsDatSchemaV1_1::iSCprRecordInfo },
    {KCDTIdProtocolRecord,                      KCDTypeNameProtocolRecord,				CommsDatSchemaV1_1::iProtocolRecordInfo },
    {KCDTIdBearerTypeRecord,                    KCDTypeNameBearerTypeRecord,			CommsDatSchemaV1_1::iBearerTypeRecordInfo },
    {KCDTIdConfigAccessPointRecord,             KCDTypeNameConfigAccessPointRecord,		CommsDatSchemaV1_1::iConfigAccessPointRecordInfo },
    {KCDTIdApPrioritySelectionPolicyRecord,     KCDTypeNameApPrioritySelectionPolicy,	CommsDatSchemaV1_1::iAPPrioritySelectionPolicyRecordInfo },
#endif //SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
    {KCDTIdEapSimProtocolRecord,                KCDTypeNameEapSimProtocol,				CommsDatSchemaV1_1::iEAPSIMRecordInfo },
    {KCDTIdEapAkaProtocolRecord,                KCDTypeNameEapAkaProtocol,				CommsDatSchemaV1_1::iEAPAKARecordInfo },
	{KCDTIdEAPSecRecord,						KCDTTypeNameEAPSec,			            CommsDatSchemaV1_1::iEAPSecRecordInfo },
	{KCDTIdTunEAPRecord,						KCDTTypeNameTunEAP,			            CommsDatSchemaV1_1::iTunEAPRecordInfo },
	{KCDTIdEAPTLSRecord,						KCDTTypeNameEAPTLS,			            CommsDatSchemaV1_1::iEAPTLSRecordInfo },
	{KCDTIdLEAPRecord,							KCDTTypeNameLEAP,			            CommsDatSchemaV1_1::iLEAPRecordInfo },
	{0,											NULL,			NULL } // stop marker
	};

/*****************************************************************************************
2/ Static functions to interpret element ids
**********************************************/


TBool CommsDatSchema::IsNode(TMDBElementId aElementId)
/*
[ C == 7f ]
[ R == ff ]
Identifies Node as opposed to Field
Understands new table, column or record request to mean Node too
*/
    {
    return ( (aElementId & KCDMaskShowRecordId) == KCDMaskShowRecordId ||
			 (aElementId & KCDMaskShowFieldType) == KCDMaskShowFieldType  );
    }

TBool CommsDatSchema::IsTable(TMDBElementId aElementId)
/*
[ 0 < T < ff ][ C == 7f ][ R == ff ]
*/
    {
    return ( (aElementId & KCDMaskShowColumnTypeAndRecordId) == KCDMaskShowColumnTypeAndRecordId &&
			 HasValidTableId(aElementId) );
    }


TBool CommsDatSchema::IsColumn(TMDBElementId aElementId)
/*
[ 0 < T <= 7f8 ][ 0 < C < ff][ R == ff]
*/
    {
    return ( (aElementId & KCDMaskShowRecordId) == KCDMaskShowRecordId &&
			 HasValidColumnId(aElementId) &&
			 HasValidTableId(aElementId) );
    }


TBool CommsDatSchema::IsRecord(TMDBElementId aElementId)
/*
[ 0 < T <= 7f8 ][ C == 7f ][ R < ff ]
*/
    {
    return ( (aElementId & KCDMaskShowFieldType) == KCDMaskShowFieldType &&
			 HasValidRecordId(aElementId) &&
			 HasValidTableId(aElementId) );
    }


TBool CommsDatSchema::IsGenericRecord(TMDBElementId aElementId)
/*
[ 5F8 < T <= 7f8 ][ C == ff][ R == ff ]
*/
    {
    const TMDBElementId tableType = (aElementId & KCDMaskShowRecordType);
    return ( ( tableType >= KCDInitialUDefRecordType || tableType == 0 ) ||
			 IsNewTableRequest(aElementId) ); // But don't support new table request currently
    }


TBool CommsDatSchema::IsTemplate(TMDBElementId aElementId)
/*
0 record id in real table
[ 0 < T < 7f8 ][ 0 < C < ff ][ R == 0 ]
*/
    {
    return ( (aElementId & KCDMaskShowRecordId) == KCDDefaultRecord &&
			 HasValidTableId(aElementId) );
    }


TBool CommsDatSchema::HasValidTableId(TMDBElementId aElementId)
	{
	const TMDBElementId recordType = (aElementId & KCDMaskShowRecordType);
	return ( recordType > 0  &&
		     recordType <= KCDMaskShowRecordType );
	}


TBool CommsDatSchema::HasValidColumnId(TMDBElementId aElementId)
/*
[ 0 <= C < ff ]
*/
	{
	const TMDBElementId fieldType = (aElementId & KCDMaskShowFieldType);
	return ( fieldType > 0  &&
			 fieldType < KCDMaskShowFieldType );
	}


TBool CommsDatSchema::HasValidRecordId(TMDBElementId aElementId)
/*
[ 0 <= R < ff ]
*/
	{
	return (aElementId & KCDMaskShowRecordId) < KCDMaskShowRecordId;
	}


TBool CommsDatSchema::IsNewTableRequest(TMDBElementId aElementId)
/*
<T==0><C==7f><R==ff>
*/
	{
	return (aElementId & KCDMaskHideAttrAndRes) == KCDNewTableRequest;
	}


TBool CommsDatSchema::IsNewColumnRequest(TMDBElementId aElementId)
/*
0xnn00ff01
[ 0 < T < ff ][ C == 0 ][ R == ff ][ LSB == 1 ]
*/	{
    return ( ( aElementId & ~( KCDMaskShowAttributes | KCDUtilityFlag ) ) ==
             ( KCDNewColumnRequest | (aElementId & KCDMaskShowFieldType) ) );
	}


TBool CommsDatSchema::IsNewRecordRequest(TMDBElementId aElementId)
/*
0x8n7f0001
[ U == 1 ][ 0 < T < ff ][ C == 7f ][ R == 00 ][ LSB == 1 ]
*/
	{
	return (aElementId & KCDMaskHideAttrAndRes) ==
              ( (KCDNewRecordRequest & KCDMaskHideAttrAndRes) | (aElementId & KCDMaskShowRecordType) );

	}


TBool CommsDatSchema::IsDeprecatedRecord(
#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
                                         TMDBElementId aElementId
#endif //SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
                                        )
/*
Doesn't matter what version of the data schema is in use.  If a 
record has been deprecated it is never stored in the database
*/
    {
#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
    switch (aElementId)
        {
        case KCDTIdIapPrioritySelectionPolicyRecord :
            {
            return ETrue;
            }
        }
#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY

    return EFalse;
    }




/*****************************************************************************************
* 3/ Functions to check validity of container being used to store or modify data
*/



const SRecordTypeInfo* CommsDatSchemaV1_1::GetRecordTypeInfo(TMDBElementId aId)
/*
Retrieve the schema for this table
Will Return NULL if someone looks up a table that doesn'exist
@internalComponent
*/
    {
    const TMDBElementId recordTypeId = aId & KCDMaskShowRecordType;

    const STableLookup* tableInfoPtr = iTableLookup;

    while( tableInfoPtr && tableInfoPtr->iTableId != 0)
       {
        if (tableInfoPtr->iTableId == recordTypeId)
            {
            return tableInfoPtr->iFields;
            }
        
        ++tableInfoPtr;
        }

	__FLOG_STATIC1(KLogComponent, KCDErrLog, _L("CommsDatSchema::GetRecordTypeInfo failed to find type info for Element %08x"), aId);

	// CHECK - Don't leave or panic as client may have meant to search for generic record?

	ASSERT(0);

	return NULL;
	}


EXPORT_C TInt CommsDatSchemaV1_1::GetFieldTypeInfoL(TMDBElementId aId) 
/*
Return the value type of a field that is known to be in this record
@internalcomponent
*/
    {
    const SRecordTypeInfo* recordInfo = GetRecordTypeInfo(aId);
   
    if (recordInfo)
        {
        while( recordInfo->iTypeId != 0)
            {
            TMDBElementId temp = aId & KCDMaskShowFieldType;
            if ((recordInfo->iTypeId & KCDMaskShowFieldType) == temp)//(aId & KCDMaskShowFieldType))
               {
               return recordInfo->iValType; // return the full val type info here (not just the basic type)
               }
            ++recordInfo;
            }
        }
          
    User::Leave(KErrNotFound);
    
    return KErrNone; // never get here
    }

#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
EXPORT_C const STableLookup* CommsDatSchemaV1_1::GetTableInfoL(TMDBElementId aId)
/*
Return a full tableinfo based on a tableId
@internalcomponent
*/
    {
    TInt tableID = aId & KCDMaskShowRecordType;
    
    for (TInt i = 0; 
         ( 0 != CommsDat::CommsDatSchemaV1_1::iTableLookup[i].iTableId );
         ++i)
        {
        if ( tableID == CommsDat::CommsDatSchemaV1_1::iTableLookup[i].iTableId )
            {
            //OK, got the tableId
            return &CommsDat::CommsDatSchemaV1_1::iTableLookup[i];
            }
        }
    
    User::Leave(KErrNotFound);
    
    //this is dummy return statement here - never reached
    return NULL;
    }
#endif

TBool CommsDatSchemaV1_1::IsEnabledForcedLinkedTypeResolving(TMDBElementId aId)
    {
    /**
    Forced link resolving is enabled for the:
    - AccessPointRecord
    - IAPRecord
    - ProxiesRecord
    - LANServiceRecord
    */
    return ( KCDTIdAccessPointRecord == aId );
    }
    
    
TMDBElementId CommsDatSchemaV1_1::ForcedFindLinkedIdL(TMDBElementId aTableId, TMDBElementId aLinkingFieldId)
    {
    const SRecordTypeInfo* recordInfo = GetRecordTypeInfo(aTableId);

    if (recordInfo)
    {
    while( recordInfo->iTypeId != 0)
        {
        if (recordInfo->iTypeId == aLinkingFieldId)
           {
           return recordInfo->iValType;
           }
        ++recordInfo;
        }
    }
          
    User::Leave(KErrNotFound);
    
    return 0; // never get here
    }


TMDBElementId CommsDatSchemaV1_1::LookupTableId(TDesC& tableName)
    {
    const STableLookup* tableInfoPtr = iTableLookup;
   
    while( tableInfoPtr && tableInfoPtr->iTableId != 0)
        {
        TPtrC tableNameFromId(tableInfoPtr->iTableName);

        if (tableNameFromId.CompareF(tableName) == 0)
            {
            return tableInfoPtr->iTableId;
            }
            
        ++tableInfoPtr;
        }
    
    return 0;     
    }



//
//  CommsDatSchema Functions
//

TMDBElementId CommsDatSchema::GetLegacyLinkTableIdL(CMDBSession& aSession, TMDBElementId aLinkingFieldId, CMDBElement* aLinkingRecord)
    {
    // for some legacy fields validate that the link is correct wrt another field

    CMDBField<TDesC>* tableNameField = NULL;
    TInt tmp = (aLinkingFieldId & KCDMaskShowType);
    
    switch (tmp)
        {
        case KCDTIdIAPService :
            {         
            if (aLinkingRecord)
                {
                CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(aLinkingRecord);
                tableNameField = &iapRecord->iServiceType;
                if (! tableNameField->IsNull())
                    {
                    return CommsDatSchemaV1_1::LookupTableId(tableNameField->GetL());
                    }
                }
            // create new field if linkingRecord is NULL or has no data in the qualifying field
            tableNameField = new (ELeave) CMDBField<TDesC>(KCDTIdIAPServiceType);
            break;
            }
        case KCDTIdIAPBearer :
            {
            if (aLinkingRecord)
                {
                tableNameField = &(static_cast<CCDIAPRecord&>(*aLinkingRecord)).iBearerType;
                if (! tableNameField->IsNull())
                    {
                    return CommsDatSchemaV1_1::LookupTableId(tableNameField->GetL());
                    }
                }
           
            // create new field if linkingRecord is NULL or has no data in the qualifying field
            tableNameField = new (ELeave) CMDBField<TDesC>(KCDTIdIAPBearerType);
            break;
            }
        case KCDTIdISP :
            {
            if (aLinkingRecord)
                {
                tableNameField = &(static_cast<CCDProxiesRecord&>(*aLinkingRecord)).iServiceType;
                if (! tableNameField->IsNull())
                    {
                    return CommsDatSchemaV1_1::LookupTableId(tableNameField->GetL());
                    }
                }
           
            // create new field if linkingRecord is NULL or has no data in the qualifying field
            tableNameField = new (ELeave) CMDBField<TDesC>(KCDTIdProxyServiceType);
            break;
            }
        case KCDTIdLANServiceExtensionTableRecordId :
            {
            if (aLinkingRecord)
                {
                tableNameField = &(static_cast<CCDLANServiceRecord&>(*aLinkingRecord)).iServiceExtensionTableName;
                if (! tableNameField->IsNull())
                    {
                    return CommsDatSchemaV1_1::LookupTableId(tableNameField->GetL());
                    }
                }

            // create new field if linkingRecord is NULL or has no data in the qualifying field            
            tableNameField = new (ELeave) CMDBField<TDesC>(KCDTIdLANServiceExtensionTableName);
            break;
            }
#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
        case KCDTIdSelectionPolicy :
            {
            return KCDTIdApPrioritySelectionPolicyRecord;
            }
#endif //SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
        default :
            {
            //all other linking records should be identified by full element ids so
            __FLOG_STATIC1(KLogComponent, KCDErrLog, 
                _L("CommsDatSchema::GetLegacyLinkTableIdL() - Don't have algorithm to find table id for Field <%08x>"), aLinkingFieldId);

            return 0; // shouldn't be in this function in the first place
            }
        }


    CleanupStack::PushL(tableNameField);
    
    
    if (aLinkingFieldId & KCDMaskShowRecordId)
    	{ //if the linkingField has a valid reocrdID...
    	tableNameField->SetRecordId((aLinkingFieldId & KCDMaskShowRecordId) >> 8);
    
	    tableNameField->LoadL(aSession);
	            
	    if ( ! tableNameField->IsNull() )
	        {
	        tmp = CommsDatSchemaV1_1::LookupTableId(tableNameField->GetL());
	        }
    	}
    else
    	{
    	/* Notifying the caller code that the resolving of the legacy link field was not successful.
    	 * Some other actions need to be taken...
    	 */
    	
    	tmp = 0;
    	}
    
    CleanupStack::PopAndDestroy(tableNameField);
    
    return tmp;
    }


TMDBElementId CommsDatSchema::ConstructLinkFromLegacyValueL(CMDBSession& aSession, CMDBElement* aLegacyField, TInt aLegacyValue)
    {
    TMDBElementId linkedTableId = 0;
    TMDBElementId serviceFieldId = 0;
    TInt temp = aLegacyField->ElementId() & KCDMaskShowType;
        
    switch (temp)
    {
    case KCDTIdIAPService :
        {         
        serviceFieldId = KCDTIdIAPServiceType;
        break;
        }
    case KCDTIdIAPBearer :
        {
        serviceFieldId = KCDTIdIAPBearerType;
        break;
        }
    case KCDTIdISP :
        {
        serviceFieldId = KCDTIdProxyServiceType;
        break;
        }
    case KCDTIdLANServiceExtensionTableRecordId :
        {
        serviceFieldId = KCDTIdLANServiceExtensionTableName;
        break;
        }
    default :
        {
        //all other linking records should be identified by full element ids so
        __FLOG_STATIC1(KLogComponent, KCDErrLog, 
            _L("CommsDatSchema::GetLegacyLinkTableIdL() - Don't have algorithm to find table id for Field <%08x>"), aLegacyField);

        return 0; // shouldn't be in this function in the first place
        }
    }
    
    //create an empty filed for loading the serviceType field for the given service...
    CMDBField<TDesC>* serviceField = new(ELeave) CMDBField<TDesC>(serviceFieldId);
    CleanupStack::PushL(serviceField);
    
    serviceField->SetRecordId(aLegacyValue);
    
    serviceField->LoadL(aSession);
    
    linkedTableId = CommsDatSchemaV1_1::LookupTableId(serviceField->GetL());
    
    if (linkedTableId !=0)
        {
        linkedTableId |= (aLegacyValue << 8);
        }
    
    CleanupStack::PopAndDestroy(serviceField);
    
    return linkedTableId;
    }
        


TMDBElementId CommsDatSchema::IdTagResolverL(CMDBSession& aSession, TMDBElementId aLinkedTypeId, TMDBElementId aTargetValue)
    {
    TMDBElementId linkedElementId = 0;
    
    CMDBField<TUint32>* tagField = new (ELeave) CMDBField<TUint32>(aLinkedTypeId | KCDTIdRecordTag);
    CleanupStack::PushL(tagField);

    *tagField = (aTargetValue & ~KLinkableTag);

    if (tagField->FindL(aSession))
        {
        linkedElementId = (tagField->ElementId() & KCDMaskShowRecordTypeAndId);
        }
    else
        {        
        User::Leave(KErrArgument);
        }
    
    CleanupStack::PopAndDestroy(tagField);
    
    return linkedElementId;
    }

TMDBElementId CommsDatSchema::GetLinkIdL(CMDBSession& aSession, TMDBElementId aLinkingFieldId, TMDBElementId aLinkingFieldValue, TMDBElementId aLinkedTableId, CMDBElement* aLinkingRecord)
/**
    Get or calculate the id of the linked record if enough information is available

    @param  aSession the session to use if need to lookup in the database
    @param  The id of the table that is linked to.  This can be NULL, but must be given
            if the link type is a base class and link field value does not specify the table being linked to.

    @leave  KErrArgument if aKnownLinkType does not match current field value
    @leave  System wide error codes if database action fails unexpectedly for some reason.

    @pre    The linking field value must be set correctly for this operation to succeed.
            
    @post   The value of this field may be updated to reflect the correct location of the linked record in the database
            The caller will have enough information to create the linked record if they need to
                
	@internal component
    @prototype
*/
    {
    __FLOG_STATIC2(KLogComponent, KCDInfoLog, 
       	                        _L("CommsDatSchema::GetLinkIdL() - aLinkingFieldId: <%08x>, aLinkingFieldValue: <%08x>."), aLinkingFieldId, aLinkingFieldValue);
    
    TMDBElementId linkedElementId(0);
    TMDBElementId linkedTypeId(aLinkedTableId & KCDMaskShowRecordType);
    TMDBElementId targetValue(aLinkingFieldValue);


    if ( (linkedTypeId & KCDMaskShowRecordType) == 0 )
        {
        if ( (targetValue & KLinkableTag) != 0          ||   // Linkable tag is set
             (targetValue & KCDMaskShowRecordType) == 0   )  // target value does not contain table type info
            {
            // lookup the record type in the value of this field
            linkedTypeId = CommsDatSchemaV1_1::GetFieldTypeInfoL(aLinkingFieldId) & KCDMaskShowRecordType;
        
            if ((linkedTypeId & KCDMaskShowRecordType) == 0)
                {
                // This is the 3rd stage of the legacy link resolver - the BRUTE FORCE...
               linkedTypeId = ForcedLegacyLinkFindL(aSession, aLinkingFieldId, aLinkingFieldValue, aLinkingRecord);

               if ((linkedTypeId & KCDMaskShowRecordType) == 0)
            	   {
                  	// Can't establish the table id for this link. Link is not valid
                   __FLOG_STATIC2(KLogComponent, KCDErrLog, 
                		   _L("CommsDatSchema::GetLinkIdL() - Can't identify the table linked to by field <%08x>, value <%08x>.  Link not usable"), aLinkingFieldId, targetValue);

                   User::Leave(KErrArgument);
                 	}
                }
            }
        else 
            {
            linkedTypeId = (targetValue & KCDMaskShowRecordType);
            }
        }
    
    // At this point the target table is known

    if (KLinkableTag & targetValue)
        {
        // this is a link by tag so need to do a find for the iTag field in the linked table
        
        linkedElementId = IdTagResolverL(aSession, linkedTypeId, targetValue);
        
        }
    else if (targetValue <= KCDMaxRecords)
        {
        // targetValue is just a simple record ID not in elementId form
        //the record id is greater than 0. It's still not sure that the link is correct...
        linkedElementId = linkedTypeId | (targetValue << 8); 
        }
   	else 
        {
        // targetValue should be an element id
        if ( (targetValue & KCDMaskShowRecordType) == (linkedTypeId & KCDMaskShowRecordType) ||
             (linkedTypeId & KCDMaskShowRecordType) == 0 )
            {   
            //tableid and recordid both set explicitly in targetValue;
            linkedElementId = targetValue & KCDMaskShowRecordTypeAndId;
            }
        else if( (targetValue & KCDMaskShowRecordType) == 0 )
            {
            // hmmm quite unusual. linkValue does not specify a table but looks like 
            // an element id.  So just add in the table id from aTargetTableId 
            linkedElementId = (linkedTypeId | (targetValue & KCDMaskShowRecordId));
            }
        else
            {
            __FLOG_STATIC3(KLogComponent, KCDErrLog, 
                _L("TMDBRecordLinkVisitor GetLinkIdL() - value <%08x> given in link field <%08x> and type of link <%08x> do not match. Link not usable"), (targetValue & KCDMaskShowRecordType), aLinkingFieldId & KCDMaskHideAttrAndRes, linkedTypeId);
            
            User::Leave(KErrArgument);
            }      
        }

    __FLOG_STATIC3(KLogComponent, KCDInfoLog, 
    _L("TMDBRecordLinkVisitor GetLinkIdL() - resolved link field <%08x> with value <%08x> to link value <%08x>"), aLinkingFieldId & KCDMaskHideAttrAndRes, aLinkingFieldValue, linkedElementId);
 
    return linkedElementId;
    }

//We are here because the client entered a number (possibly record id) for a linked field. CommsDat has to resolve
//in this case the linked elementId.
TMDBElementId CommsDatSchema::ForcedLegacyLinkFindL(CMDBSession& aSession, TMDBElementId aLinkingFieldId, TMDBElementId aLinkingFieldValue, CMDBElement* aElement)
	{
	TMDBElementId tableId = aLinkingFieldId & KCDMaskShowRecordType;
	TMDBElementId linkedId = 0;
	switch (tableId)
		{
		case KCDTIdIAPRecord:
			{
			linkedId = ForcedIAPFindL(aSession, aLinkingFieldId, aLinkingFieldValue, aElement);
			__FLOG_STATIC0(KLogComponent, KCDInfoLog, 
			   	                        _L("CommsDatSchema::ForcedLegacyLinkFindL() - IAP"));
			break;
			}
		case KCDTIdProxiesRecord:
			{
			linkedId = ForcedProxiesFindL(aSession, aLinkingFieldId, aLinkingFieldValue, aElement);
			__FLOG_STATIC0(KLogComponent, KCDInfoLog, 
			   	                        _L("CommsDatSchema::ForcedLegacyLinkFindL() - Proxies"));
			break;
			}
		case KCDTIdLANServiceRecord:
			{
			linkedId = ForcedLanServiceFindL(aSession, aLinkingFieldId, aLinkingFieldValue, aElement);
			__FLOG_STATIC0(KLogComponent, KCDInfoLog, 
			   	                        _L("CommsDatSchema::ForcedLegacyLinkFindL() - LanService"));
			break;
			}
		default:
			__FLOG_STATIC2(KLogComponent, KCDErrLog, 
			                        _L("CommsDatSchema::ForcedLegacyLinkFindL() - Can't identify the table linked to by field <%08x>, value <%08x>.  Link not usable"), aLinkingFieldId, aLinkingFieldValue);

			User::Leave(KErrArgument);
			break;
		}
	return linkedId;
	}

TMDBElementId CommsDatSchema::ForcedLanServiceFindL(CMDBSession& aSession, TMDBElementId aLinkingFieldId, TMDBElementId aLinkingFieldValue, CMDBElement* aElement)
	{

	/*CMDBField<TDesC>* serviceExtension = NULL;
	TMDBElementId linkedTableId = 0;*/
	
	TBuf<50> serviceExtension;
	TMDBElementId linkedTableId = 0;
	TBool isRecord = EFalse;
	
	if ((NULL!=aElement) && (CommsDat::CommsDatSchema::IsRecord(aElement->ElementId())))
		{
		isRecord = ETrue;
		}
	
	if (0 != (aLinkingFieldId & KCDMaskShowRecordId))
		{
		//there is a record id set on the container. Let's try to resolve the link from this
		CCDLANServiceRecord* lanServiceRec = static_cast<CCDLANServiceRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdLANServiceRecord));
		CleanupStack::PushL(lanServiceRec);
		lanServiceRec->SetRecordId((aLinkingFieldId & KCDMaskShowRecordId) >> 8);
		lanServiceRec->LoadL(aSession);
		
		serviceExtension = lanServiceRec->iServiceExtensionTableName.GetL();
		
		linkedTableId = CommsDatSchemaV1_1::LookupTableId(serviceExtension);
		CleanupStack::PopAndDestroy(lanServiceRec);
		}
	else if (isRecord)
		{
		RArray<TUint32> ids;
		
		CleanupClosePushL(ids);
			    
        TUint32 mask = KCDMaskShowRecordType | KCDMaskShowFieldType | aSession.iMDBSessionImpl->GetReadAttributeMask() | KCDUtilityFlag;
        TUint32 id = aElement->ElementId() & KCDMaskHideAttrAndRes;
        
        aSession.iMDBSessionImpl->StorageL()->FindL(id, mask, ids);
		
		TBool found = EFalse;
		TInt i = 0;
		TUint fieldValue = 0;
		
		CCDLANServiceRecord* lanServiceRec = NULL;
		lanServiceRec = static_cast<CCDLANServiceRecord*>(aElement);
		
		TInt fieldExists = KErrNotFound;
		
		while (!found && i<ids.Count())	
			{
			fieldValue = 0;
			
			if ( (IsRecord(ids[i])) && (KCDTIdLANServiceRecord == (ids[i] & KCDMaskShowRecordType)) )
				{
				//check whether the lanserviceext field is filled/changed...
				if (KCDChangedFlag == (lanServiceRec->iServiceExtensionTableName.ElementId() & KCDChangedFlag))
					{
					//the given field has changed, let's check it
					TInt cleanID = ((ids[i] & KCDMaskShowRecordType) | KCDTIdLANServiceExtensionTableName) | (ids[i] & KCDMaskShowRecordId);
					CMDBField<TDesC>* lanServiceExtName = new(ELeave) CMDBField<TDesC>(cleanID);
					CleanupStack::PushL(lanServiceExtName);
					//This field is not mandatory so it's possible that the given record doesn't contain it...
					TRAP(fieldExists, lanServiceExtName->LoadL(aSession));
					if (KErrNone == fieldExists)
						{
					    TPtrC serviceTypeFromCurrRec(*lanServiceExtName);
					    TPtrC serviceTypeFromOrigRec(lanServiceRec->iServiceExtensionTableName);
					    if (serviceTypeFromCurrRec == serviceTypeFromOrigRec)
					        {
					        //ok, found the primed record
							cleanID = ((ids[i] & KCDMaskShowRecordType) | KCDTIdLANServiceExtensionTableRecordId) | (ids[i] & KCDMaskShowRecordId);
							CMDBRecordLink<CCDServiceRecordBase>* lanServiceExtRecId = new(ELeave) CMDBRecordLink<CCDServiceRecordBase>(cleanID);
							CleanupStack::PushL(lanServiceExtRecId);
							
							TRAP(fieldExists, lanServiceExtRecId->LoadL(aSession));
							if (KErrNone == fieldExists)
								{
								fieldValue = *lanServiceExtRecId;
								serviceExtension = (*lanServiceExtName);
								}
							
							CleanupStack::PopAndDestroy(lanServiceExtRecId);
					        }
						}
						CleanupStack::PopAndDestroy(lanServiceExtName);
					}
				else
					{
					TInt cleanID = ((ids[i] & KCDMaskShowRecordType) | KCDTIdLANServiceExtensionTableRecordId) | (ids[i] & KCDMaskShowRecordId);
					CMDBRecordLink<CCDServiceRecordBase>* lanServiceExtRecId = new(ELeave) CMDBRecordLink<CCDServiceRecordBase>(cleanID);
					CleanupStack::PushL(lanServiceExtRecId);
					
					TRAPD(fieldExists, lanServiceExtRecId->LoadL(aSession));
					if (KErrNone == fieldExists)
						{
						cleanID = ((ids[i] & KCDMaskShowRecordType) | KCDTIdLANServiceExtensionTableName) | (ids[i] & KCDMaskShowRecordId);
						CMDBField<TDesC>* lanServiceExtName = new(ELeave) CMDBField<TDesC>(cleanID);
						CleanupStack::PushL(lanServiceExtName);
						
						TRAP(fieldExists, lanServiceExtName->LoadL(aSession));
						if (KErrNone == fieldExists)
							{
							fieldValue = *lanServiceExtRecId;
							serviceExtension = (*lanServiceExtName);
							}
						
						CleanupStack::PopAndDestroy(lanServiceExtName);
						}
					
					CleanupStack::PopAndDestroy(lanServiceExtRecId);
					}
				
				//Note: the legacy link values are already in the expected decimal recordID format. So no need to shift
				//the value to left...
				if ( fieldValue == aLinkingFieldValue )
					{
				    linkedTableId = CommsDatSchemaV1_1::LookupTableId(serviceExtension);
					found = true;
					}
				++i;
				}
			}
		
		CleanupStack::PopAndDestroy(&ids);
		}
	
	__FLOG_STATIC1(KLogComponent, KCDInfoLog, 
	   	                        _L("CommsDatSchema::ForcedLanServiceFindL() - linkedTableId: <%08x>."), linkedTableId);
	
	return linkedTableId;
	}

TMDBElementId CommsDatSchema::ForcedProxiesFindL(CMDBSession& aSession, TMDBElementId aLinkingFieldId, TMDBElementId aLinkingFieldValue, CMDBElement* aElement)
	{
	TBuf<50> serviceType;
	TMDBElementId linkedTableId = 0;
	TBool isRecord = EFalse;
	
	if ((NULL!=aElement) && (CommsDat::CommsDatSchema::IsRecord(aElement->ElementId())))
		{
		isRecord = ETrue;
		}
	
	if (0 != (aLinkingFieldId & KCDMaskShowRecordId))
		{
		//there is a record id set on the container. Let's true to resolve the link from this
		CCDProxiesRecord* proxiesRec = static_cast<CCDProxiesRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdProxiesRecord));
		CleanupStack::PushL(proxiesRec);
		proxiesRec->SetRecordId((aLinkingFieldId & KCDMaskShowRecordId) >> 8);
		proxiesRec->LoadL(aSession);
		
		serviceType = proxiesRec->iServiceType.GetL();
		
		linkedTableId = CommsDatSchemaV1_1::LookupTableId(serviceType);
		CleanupStack::PopAndDestroy(proxiesRec);		
		}
	else if (isRecord)
		{
		RArray<TUint32> ids;
		
		CleanupClosePushL(ids);
			    
        TUint32 mask = KCDMaskShowRecordType | KCDMaskShowFieldType | aSession.iMDBSessionImpl->GetReadAttributeMask() | KCDUtilityFlag;
        TUint32 id = aElement->ElementId() & KCDMaskHideAttrAndRes;
        
        aSession.iMDBSessionImpl->StorageL()->FindL(id, mask, ids);
		
		TBool found = EFalse;
		TInt i = 0;
		TUint fieldValue = 0;
		
		CCDProxiesRecord* proxiesRec = NULL;
		proxiesRec = static_cast<CCDProxiesRecord*>(aElement);
		
		while (!found && i<ids.Count())	
			{
			fieldValue = 0;
			
			if ( (IsRecord(ids[i])) && (KCDTIdProxiesRecord == (ids[i] & KCDMaskShowRecordType)) )
				{
				//check whether the proxyServiceType field is filled/changed...
				if (KCDChangedFlag == (proxiesRec->iServiceType.ElementId() & KCDChangedFlag))
					{
					//the given field has changed, let's check it
					TInt cleanID = ((ids[i] & KCDMaskShowRecordType) | KCDTIdProxyServiceType) | (ids[i] & KCDMaskShowRecordId);
					CMDBField<TDesC>* proxyServiceType = new(ELeave) CMDBField<TDesC>(cleanID);
					CleanupStack::PushL(proxyServiceType);
					proxyServiceType->LoadL(aSession);
					
				    TPtrC serviceTypeFromCurrRec(*proxyServiceType);
				    TPtrC serviceTypeFromOrigRec(proxiesRec->iServiceType);
				    if (serviceTypeFromCurrRec == serviceTypeFromOrigRec)
				        {
				        //ok, found the primed record
						cleanID = ((ids[i] & KCDMaskShowRecordType) | KCDTIdISP) | (ids[i] & KCDMaskShowRecordId);
						CMDBRecordLink<CCDServiceRecordBase>* proxyISP = new(ELeave) CMDBRecordLink<CCDServiceRecordBase>(cleanID);
						CleanupStack::PushL(proxyISP);
						proxyISP->LoadL(aSession);
						
						fieldValue = *proxyISP;
						serviceType = (*proxyServiceType);
						
						CleanupStack::PopAndDestroy(proxyISP);
				        }
				    
				    CleanupStack::PopAndDestroy(proxyServiceType);
					}
				else
					{
					//the IAPService/BearerType field is not filled which means that were searcing for the 1st IAP
					//record with the given service/bearer value.
					TInt cleanID = ((ids[i] & KCDMaskShowRecordType) | KCDTIdISP) | (ids[i] & KCDMaskShowRecordId);
					CMDBRecordLink<CCDServiceRecordBase>* proxyISP = new(ELeave) CMDBRecordLink<CCDServiceRecordBase>(cleanID);
					CleanupStack::PushL(proxyISP);
					
					cleanID = ((ids[i] & KCDMaskShowRecordType) | KCDTIdProxyServiceType) | (ids[i] & KCDMaskShowRecordId);
					CMDBField<TDesC>* proxyServiceType = new(ELeave) CMDBField<TDesC>(cleanID);
					CleanupStack::PushL(proxyServiceType);
					
					proxyServiceType->LoadL(aSession);
					
					proxyISP->LoadL(aSession);
					
					fieldValue = *proxyISP;
					
					serviceType = (*proxyServiceType);
					
					CleanupStack::PopAndDestroy(proxyServiceType);
					
					CleanupStack::PopAndDestroy(proxyISP);
					}
				}

				//Note: the legacy link values are already in the expected decimal recordID format. So no need to shift
				//the value to left...
				if ( fieldValue == aLinkingFieldValue )
					{
				    linkedTableId = CommsDatSchemaV1_1::LookupTableId(serviceType);
					found = true;
					}
			++i;
			}
		
		CleanupStack::PopAndDestroy(&ids);
		}
	
	__FLOG_STATIC1(KLogComponent, KCDInfoLog, 
	   	                        _L("CommsDatSchema::ForcedProxiesFindL() - linkedTableId: <%08x>."), linkedTableId);
	
	return linkedTableId;
	}

TMDBElementId CommsDatSchema::ForcedIAPFindL(CMDBSession& aSession, TMDBElementId aLinkingFieldId, TMDBElementId aLinkingFieldValue, CMDBElement* aElement)
	{
	//According to the schema definition the IAP service/bearer type cannot be longer than 50 character
	TBuf<50> serviceOrBearerType;
	TMDBElementId linkedTableId = 0;
	TMDBElementId tempField = 0;
	TBool isRecord = EFalse;
	
	if ((NULL!=aElement) && (CommsDat::CommsDatSchema::IsRecord(aElement->ElementId())))
		{
		isRecord = ETrue;
		}
	
	if (0 != (aLinkingFieldId & KCDMaskShowRecordId))
		{
		//there is a record id set on the container. Let's try to resolve the link from this
		CCDIAPRecord* iapRec = static_cast<CCDIAPRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord));
		CleanupStack::PushL(iapRec);
		iapRec->SetRecordId((aLinkingFieldId & KCDMaskShowRecordId) >> 8);
		iapRec->LoadL(aSession);
		
		tempField = aLinkingFieldId & (KCDMaskShowRecordType | KCDMaskShowFieldType);
			
		if (KCDTIdIAPService == tempField)
			{ //searcing for the service...
			//serviceOrBearerType.Set(iapRec->iServiceType.GetL()); 
			serviceOrBearerType = (iapRec->iServiceType.GetL());
			}
		else
			{ //searching for the bearer...
			serviceOrBearerType = (iapRec->iBearerType.GetL());
			}
		
		linkedTableId = CommsDatSchemaV1_1::LookupTableId(serviceOrBearerType);
		
		CleanupStack::PopAndDestroy(iapRec);
		}
	else if (isRecord)
		{
		RArray<TUint32> ids;
		CleanupClosePushL(ids);
			    
        TUint32 mask = KCDMaskShowRecordType | KCDMaskShowFieldType | aSession.iMDBSessionImpl->GetReadAttributeMask() | KCDUtilityFlag;
        TUint32 id = aElement->ElementId() & KCDMaskHideAttrAndRes;
        
        aSession.iMDBSessionImpl->StorageL()->FindL(id, mask, ids);
		
		TBool found = EFalse;
		TInt i = 0;
		TUint fieldValue = 0;
		
		CCDIAPRecord* iapRec = NULL;
		iapRec = static_cast<CCDIAPRecord*>(aElement);
		
		tempField = aLinkingFieldId & (KCDMaskShowRecordType | KCDMaskShowFieldType);
		
		TInt iapServiceOrBearerTypeId = 0;
		TInt iapServiceOrBearerId = 0;
		TInt origIapServiceOrBearerType = 0;
		TBuf<50> serviceOrbearerTypeFromOrigRec(iapRec->iServiceType);
		
		if (KCDTIdIAPService == tempField)
			{ //searcing for the service...
			iapServiceOrBearerTypeId = KCDTIdIAPServiceType;
			iapServiceOrBearerId = KCDTIdIAPService;
			origIapServiceOrBearerType = iapRec->iServiceType.ElementId();
			serviceOrbearerTypeFromOrigRec = iapRec->iServiceType;
			}
		else
			{ //searching for the bearer...
			iapServiceOrBearerTypeId = KCDTIdIAPBearerType;
			iapServiceOrBearerId = KCDTIdIAPBearer;
			origIapServiceOrBearerType = iapRec->iBearerType.ElementId();
			serviceOrbearerTypeFromOrigRec = iapRec->iBearerType;
			}
		
		while (!found && i<ids.Count())	
			{
			fieldValue = 0;
			
			if ( (IsRecord(ids[i])) && (KCDTIdIAPRecord == (ids[i] & KCDMaskShowRecordType)) )
				{
				//check whether the IAPService/BearerType field is filled/changed...
				if (KCDChangedFlag == (origIapServiceOrBearerType & KCDChangedFlag))
					{
					//the given field has changed, let's check it
					TInt cleanID = ((ids[i] & KCDMaskShowRecordType) | iapServiceOrBearerTypeId) | (ids[i] & KCDMaskShowRecordId);
					CMDBField<TDesC>* serviceOrbearerType = new(ELeave) CMDBField<TDesC>(cleanID);
					CleanupStack::PushL(serviceOrbearerType);
					serviceOrbearerType->LoadL(aSession);
					
				    TPtrC serviceTypeFromCurrRec(*serviceOrbearerType);
				    //TPtrC serviceTypeFromOrigRec(iapRec->iServiceType);
				    //if (serviceTypeFromCurrRec == serviceTypeFromOrigRec)
				    if (serviceTypeFromCurrRec == serviceOrbearerTypeFromOrigRec)
				        {
				        //ok, found the primed record
						cleanID = ((ids[i] & KCDMaskShowRecordType) | iapServiceOrBearerId) | (ids[i] & KCDMaskShowRecordId);
						CMDBRecordLink<CCDServiceRecordBase>* serviceOrbearer = new(ELeave) CMDBRecordLink<CCDServiceRecordBase>(cleanID);
						CleanupStack::PushL(serviceOrbearer);
						serviceOrbearer->LoadL(aSession);
						
						fieldValue = *serviceOrbearer;
						serviceOrBearerType = (*serviceOrbearerType);
						
						CleanupStack::PopAndDestroy(serviceOrbearer);
				        }
				    
				    CleanupStack::PopAndDestroy(serviceOrbearerType);
					}
				else
					{
					//the IAPService/BearerType field is not filled which means that were searcing for the 1st IAP
					//record with the given service/bearer value.
					TInt cleanID = ((ids[i] & KCDMaskShowRecordType) | iapServiceOrBearerId) | (ids[i] & KCDMaskShowRecordId);
					CMDBRecordLink<CCDServiceRecordBase>* serviceOrbearer = new(ELeave) CMDBRecordLink<CCDServiceRecordBase>(cleanID);
					CleanupStack::PushL(serviceOrbearer);
					
					cleanID = ((ids[i] & KCDMaskShowRecordType) | iapServiceOrBearerTypeId) | (ids[i] & KCDMaskShowRecordId);
					CMDBField<TDesC>* serviceOrbearerType = new(ELeave) CMDBField<TDesC>(cleanID);
					CleanupStack::PushL(serviceOrbearerType);
					
					serviceOrbearerType->LoadL(aSession);
					
					serviceOrbearer->LoadL(aSession);
					
					fieldValue = *serviceOrbearer;
					
					serviceOrBearerType = (*serviceOrbearerType);
					
					CleanupStack::PopAndDestroy(serviceOrbearerType);
					
					CleanupStack::PopAndDestroy(serviceOrbearer);
					}
					}

				//Note: the legacy link values are already in the expected decimal recordID format. So no need to shift
				//the value to left...
				if ( fieldValue == aLinkingFieldValue )
					{
				    linkedTableId = CommsDatSchemaV1_1::LookupTableId(serviceOrBearerType);
					found = true;
					}
			++i;
			}
		
		CleanupStack::PopAndDestroy(&ids);
		}
	
	__FLOG_STATIC1(KLogComponent, KCDInfoLog, 
	   	                        _L("CommsDatSchema::ForcedIAPFindL() - linkedTableId: <%08x>."), linkedTableId);
	
	return linkedTableId;
	}

void CommsDatSchema::ChangeLegacyLinkFieldValues(CMDBElement*& aLegacyField)
 	{
 	//only do the check if there is a legacy table...
     if( ( (aLegacyField->ElementId() & KCDMaskShowRecordType ) < KCDTIdAccessPointRecord    &&
           (aLegacyField->ElementId() & KCDMaskShowRecordType ) != KCDTIdWLANServiceExtRecord  ) )
     	{
     	//this is why we accept only fields in this function...
 		//CMDBNumFieldBase* field = static_cast<CMDBNumFieldBase*>(aLegacyField);
 		
 		CMDBField<TInt>* field = static_cast<CMDBField<TInt>* >(aLegacyField);
 		
 		TMDBElementId tableId = field->ElementId() & KCDMaskShowRecordType;
 		
 	    const STableLookup* tableInfoPtr = CommsDatSchemaV1_1::iTableLookup;
 	    TInt i = 0;
 	    
 	    while( tableInfoPtr && tableInfoPtr->iTableId != 0 && (tableInfoPtr->iTableId) != tableId )
 	        {
 	        ++i;        
 	        ++tableInfoPtr;
 	        }
 	        
 	    /* At this point we know that what is the table of the field.
 	       Now we should search for the field in the table and get the position of it.
 	       it is important because as the mapping here is 1:1 this position will be the 
 	       position of the mapped field either.
 	       */
 	    const CommsDat::SRecordTypeInfo* fieldInfoPtr = CommsDatSchemaV1_1::iTableLookup[i].iFields;
 	    TMDBElementId fieldId = field->ElementId() & KCDMaskShowType;
 	    TInt fieldPosition = 0;
 	    
 	    //Skip the tagId and the name fields...
 	    ++fieldInfoPtr;
 	    ++fieldInfoPtr;
 	    
 	    while( fieldInfoPtr && fieldInfoPtr->iTypeId != 0 && (fieldInfoPtr->iTypeId) != fieldId)
 		    {
 		    ++fieldPosition;        
 		    ++fieldInfoPtr;
 		    }
 	    
 	    if (fieldInfoPtr->iTypeId != 0)
 	    //The field is found...
 	    	{
 	    	if ( (fieldInfoPtr->iValType & ELink) == ELink )
 	    	//Found a link. Remember that this function is called if the input container is a field and
 	    	//the type of the field is integer... So if we are here this means that somebody tries to read 
 	    	//linked field with a CMDBField<TInt>. Conclusion is that this can be a legacy field where the
 	    	//value of the field needs to be chenged to contain only the record number...
 	    		{
 	    		//field->iValue = ((field->iValue & KCDMaskShowRecordId) >> 8);
 	    		*field = (*field & KCDMaskShowRecordId) >> 8;
 	    		}
 	    	}	    	
     	}
 	}


using namespace CommsDat;

void CommsDatSchema::ValidateFieldTypeL(CMDBSession& aSession, CMDBElement& aElement)
/* checks the validity of the container being used for this element id
 *
 	EText,          // 50 length
	EDesC8,         // binary
	EUint32,
	EInt,
	EBool,
	EMedText,       // 256 length
	ELongText,		// 1024 length
    ELink			// an integer field that is a link

  only looks up field types, not node types
 */
	{
	TMDBElementId elementId = aElement.ElementId();

	/*
	Don't try to validate nodes or user defined fields here  (CHECK - perhaps would be a good idea though??)
	*/
	if ( IsNode(elementId) || IsGenericRecord(elementId | KCDMaskShowColumnTypeAndRecordId) )
		{
		return;
		}

	// Lookup type of element in the database
	const SRecordTypeInfo* pRecordTypeInfo = CommsDatSchemaV1_1::GetRecordTypeInfo(elementId);

	while ( pRecordTypeInfo &&
		    (pRecordTypeInfo->iTypeId & KCDMaskShowFieldType) != (elementId & KCDMaskShowFieldType ) )
		{
		++pRecordTypeInfo;
		}

	if (pRecordTypeInfo == 0)
		{
		// CHECK - how about looking for generic record info too?
		__FLOG_STATIC1(KLogComponent, KCDErrLog, _L("MMetaDatabase::ValidateFieldTypeL failed for unexpectedly for Element <%08x> because the type info for this element was not found"), aElement.ElementId());                        
		User::Leave(KErrArgument);
		}

	TInt correctType = pRecordTypeInfo->iValType;

	// read the type of the element stored with NetMeta
	TInt containerType = aElement.Type();

	switch (containerType)
		{
		// note - cases ordered with most common types first
		case EInt :
			{
			switch (correctType & KCDShowBasicTypeInfo)
                {
                case EInt :
                case EUint32 :
                    {
                    // everything ok
                    return; 
                    }
                case EBool :
				    {
				    CMDBField<TInt>& boolField = static_cast<CMDBField<TInt>&>(aElement);
				    TInt value = boolField;

				    if ( value == FALSE || value == TRUE)
					    {
                        // everything ok
                        return;
                        }
           
                    break;
					}
                case ELink : 
                    {
                    CMDBNumFieldBase& numElement = static_cast<CMDBNumFieldBase&>(aElement);
                    numElement = GetLinkIdL(aSession, numElement.ElementId(), numElement.GetL(), 0/*, NULL*/);
                    
                    return; // everything ok
                    }
                }
            break;
            }
        case ELink : 
            {
            if ( (correctType & KCDShowBasicTypeInfo) == ELink )
                {
                CMDBNumFieldBase& numElement = static_cast<CMDBNumFieldBase&>(aElement);
                numElement = GetLinkIdL(aSession, numElement.ElementId(), numElement.GetL(), 0/*, NULL*/);
                return;
                }
            else
                {
                break;
                }
            }
		case EText :
			{
			CMDBField<TDesC>& textField = static_cast<CMDBField<TDesC>&>(aElement);
			TDesC value = textField;

			// Note - Checking the real length of the data not the max length in the container
			if (correctType == EText)
				{
				if ( value.Length() <= KMaxTextLength)
					{
					return;
					}
				}
			else if (correctType == EMedText)
				{
				if ( value.Length() <= KMaxMedTextLength)
					{
					return;
					}
				}
			else if (correctType == ELongText)
				{
				if ( value.Length() <= KMaxLongTextLength)
					{
					return;
					}
				}

			break; // The string in the container is too long to be correct or the correct type is not text
			}
		case EDesC8 :
			{
			if (correctType == EDesC8)
				{
				return;
				}
			break;
			}
		default :
			{
			// don't need to check any other types so just return
			// useful to log an error though as really should not get here
			__FLOG_STATIC3(KLogComponent, KCDErrLog, _L("CommsDatSchema::ValidateTypeL.  Unexpectedly, the container type is %d.  ElementId is %d.  Correct type is %d. No validation attempted."), containerType, elementId, correctType);

			ASSERT(0);

			return;
			}
		}


	// The types are not compatible so log and leave

    __FLOG_STATIC3(KLogComponent, KCDErrLog, _L("CommsDatSchema::ValidateTypeL.  Container of type %d cannot be used to access element id %08x that has type %d"), containerType, elementId, correctType);

	User::Leave(KErrArgument);
	}



//EOF