omaprovisioning/provisioning/ProvisioningEngine/Src/CWPValidator.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 15 Jul 2010 19:36:11 +0300
branchRCL_3
changeset 23 4af31167ea77
parent 0 b497e44ab2fc
permissions -rw-r--r--
Revision: 201024 Kit: 2010127

/*
* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  Document structure validator.
*
*/


//  INCLUDE FILES
#include "CWPValidator.h"
#include "MWPElement.h"
#include "CWPParameter.h"
#include "CWPCharacteristic.h"
#include "WPEngineDebug.h"

// DATA TYPES
// Element in the validating table.
struct TMapping 
    {
    // The contained element type 
    TInt iTo;

    // Pointer to the validating table for the contained element
    const TMapping* iMapping;
    };

// CONSTANTS

// Validating table for unknown characteristics
const TMapping KMappingArrayNamedCharacteristic[] =
    {
        { KWPParameter, NULL },
        { KWPNamedCharacteristic, KMappingArrayNamedCharacteristic },
        { KWPElement, NULL }
    };

// Validating table for parameters only characteristics
const TMapping KMappingArrayParametersOnly[] =
    {
        { KWPParameter, NULL },
        { KWPNamedCharacteristic, KMappingArrayNamedCharacteristic },
        { KWPElement, NULL }
    };

// Validating table for PXPHYSICAL
const TMapping KMappingArrayPxPhysical[] =
    {
        { KWPParameter, NULL },
        { KWPPort, KMappingArrayParametersOnly },
        { KWPNamedCharacteristic, KMappingArrayNamedCharacteristic },
        { KWPElement, NULL }
    };

// Validating table for PXLOGICAL
const TMapping KMappingArrayPxLogical[] =
    {
        { KWPParameter, NULL },
        { KWPPxPhysical, KMappingArrayPxPhysical },
        { KWPPort, KMappingArrayParametersOnly },
        { KWPPxAuthInfo, KMappingArrayParametersOnly },
        { KWPNamedCharacteristic, KMappingArrayNamedCharacteristic },
        { KWPElement, NULL }
    };

// Validating table for WLAN
const TMapping KMappingArrayWLAN[] =
    {
        { KWPParameter, NULL },
        { KWPWepKey, KMappingArrayParametersOnly },
        { KWPElement, NULL }
    };

// Validating table for NAPDEF
const TMapping KMappingArrayNapDef[] =
    {
        { KWPParameter, NULL },
        { KWPValidity, KMappingArrayParametersOnly },
        { KWPNapAuthInfo, KMappingArrayParametersOnly },
        { KWPBearerInfo, KMappingArrayParametersOnly },
        { KWPDNSAddrInfo, KMappingArrayParametersOnly },
        { KWPWLAN, KMappingArrayWLAN },
        { KWPNamedCharacteristic, KMappingArrayNamedCharacteristic },
        { KWPElement, NULL }
    };

// Validating table for APPADDR
const TMapping KMappingArrayAppAddr[] =
    {
        { KWPParameter, NULL },
        { KWPPort, KMappingArrayParametersOnly },
        { KWPNamedCharacteristic, KMappingArrayNamedCharacteristic },
        { KWPElement, NULL }
    };

// Validating table for APPLICATION
const TMapping KMappingArrayApplication[] =
    {
        { KWPParameter, NULL },
        { KWPAppAddr, KMappingArrayAppAddr },
        { KWPAppAuth, KMappingArrayParametersOnly },
        { KWPResource, KMappingArrayParametersOnly },
        { KWPNamedCharacteristic, KMappingArrayNamedCharacteristic },
        { KWPElement, NULL }
    };

// Validating table for the document root
const TMapping KMappingArrayRoot[] =
    {
        { KWPPxLogical, KMappingArrayPxLogical },
        { KWPNapDef, KMappingArrayNapDef },
        { KWPBootstrap, KMappingArrayParametersOnly },
        { KWPVendorConfig, KMappingArrayParametersOnly },
        { KWPClientIdentity, KMappingArrayParametersOnly },
        { KWPAccess, KMappingArrayParametersOnly },
        { KWPApplication, KMappingArrayApplication },
        { KWPBearerInfo, KMappingArrayParametersOnly },
        { KWPWLAN, KMappingArrayParametersOnly },
        { KWPDNSAddrInfo, KMappingArrayParametersOnly },
        { KWPLoginScript, KMappingArrayParametersOnly },
        { KWPNamedCharacteristic, KMappingArrayNamedCharacteristic },
        { KWPElement, NULL }
    };

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CWPValidator::CWPValidator
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CWPValidator::CWPValidator()
    {
    iCurrentMapping = KMappingArrayRoot;
    iFlag = ETrue;
    }

// -----------------------------------------------------------------------------
// CWPValidator::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CWPValidator::ConstructL()
    {
    }

// -----------------------------------------------------------------------------
// CWPValidator::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CWPValidator* CWPValidator::NewL()
    {
    CWPValidator* self = NewLC();
    CleanupStack::Pop();
    
    return self;
    }

// -----------------------------------------------------------------------------
// CWPValidator::NewLC
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CWPValidator* CWPValidator::NewLC()
    {
    CWPValidator* self = new( ELeave ) CWPValidator;
    
    CleanupStack::PushL( self );
    self->ConstructL();
    
    return self;
    }

// Destructor
CWPValidator::~CWPValidator()
    {
    iCurrentMapping = NULL;
    iCurrentElement = NULL;
    }

// -----------------------------------------------------------------------------
// CWPValidator::Visit
// -----------------------------------------------------------------------------
//
void CWPValidator::VisitL( CWPParameter& aParameter )
    {
    // Store the current mapping and element
    const TMapping* currentMapping = iCurrentMapping;
    const MWPElement* currentElement = iCurrentElement;

    DVA( "Validator: Mapping to parameter %d", aParameter.ID() );
    // Check if the mapping is valid
    MapToL( aParameter );
    DEBUG( "Validator: Exit" );

    // Restore the current mapping and element
    iCurrentMapping = currentMapping;
    iCurrentElement = currentElement;
    }

// -----------------------------------------------------------------------------
// CWPValidator::Visit
// -----------------------------------------------------------------------------
//
void CWPValidator::VisitL( CWPCharacteristic& aCharacteristic )
    {
    // Store the current mapping and element
    const TMapping* currentMapping = iCurrentMapping;
    const MWPElement* currentElement = iCurrentElement;

    DVA( "Validator: Mapping to characteristic %d", aCharacteristic.Type() );
    // Check if the mapping is valid
    MapToL( aCharacteristic );

    // Mapping is valid, so enter the characteristic
    if(iFlag)
    {
    aCharacteristic.AcceptL( *this );
    }
    DEBUG( "Validator: Exit" );

    // Restore the current mapping and element
    iCurrentMapping = currentMapping;
    iCurrentElement = currentElement;
    iFlag = ETrue;
    }

// -----------------------------------------------------------------------------
// CWPValidator::VisitLink
// -----------------------------------------------------------------------------
//
void CWPValidator::VisitLinkL( CWPCharacteristic& /*aLink*/ )
    {
    }

// -----------------------------------------------------------------------------
// CWPValidator::MapToL
// -----------------------------------------------------------------------------
//

void CWPValidator::MapToL( MWPElement& aTo )
    {
    TInt toType( aTo.Type() );

    for( TInt i( 0 ); iCurrentMapping[i].iTo != KWPElement; i++ )
        {
        if( iCurrentMapping[i].iTo == toType )
            {
            iCurrentMapping = iCurrentMapping[i].iMapping;
            iCurrentElement = &aTo;
            return;
            }
        }
    if ( Rangecheck( toType ) )
    {
    	iFlag = EFalse;
    	return;
    }

    DEBUG( "Validator: Error" );
    User::Leave( KErrCorrupt );
    }

TBool CWPValidator::Rangecheck(const TInt toType )
{
	if((toType != KWPElement) || (toType != KWPParameter) ||
	   (toType != KWPPxLogical ) || (toType != KWPPxPhysical) ||
	   (toType != KWPPort) || (toType != KWPValidity) ||
	   (toType != KWPNapDef) || (toType != KWPBootstrap) ||
	   (toType != KWPVendorConfig) || (toType != KWPClientIdentity) ||
	   (toType != KWPPxAuthInfo) || (toType != KWPNapAuthInfo) ||
	   (toType != KWPAccess) || (toType != KWPBearerInfo) ||
	   (toType != KWPDNSAddrInfo) || (toType != KWPWLAN) ||
	   (toType != KWPWepKey) || (toType != KWPPort1) ||
	   (toType != KWPApplication) || (toType != KWPAppAddr) ||
	   (toType != KWPAppAuth) || (toType != KWPClientIdentity1) ||
	   (toType != KWPResource) || (toType != KWPLoginScript) ||
	   (toType != KWPNamedCharacteristic))
	   return ETrue;
	else
	   return EFalse;
}

//  End of File