upnp/upnpstack/serviceframework/inc/upnpbasecontenthandler.h
author Stefan Karlsson <stefan.karlsson@nokia.com>
Sun, 28 Mar 2010 16:38:08 +0100
branchCompilerCompatibility
changeset 8 92b4d337bbaf
parent 0 f5a58ecadc66
permissions -rw-r--r--
Fixed "extra qualification" syntax errors.

/** @file
* Copyright (c) 2005-2006 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:  Declares the CUpnpBaseContentHandler class
*
*/


#ifndef __UPNPBASECONTENTHANDLER_H__
#define __UPNPBASECONTENTHANDLER_H__

#include "upnperrors.h"
#include "upnpcommonupnplits.h"

#include <Xml/ContentHandler.h>
#include <Xml/DocumentParameters.h>
#include <f32file.h>
#include <CStack.h>

#include <Xml/Parser.h>
#include <Xml/ParserFeature.h>
#include <Xml/MatchData.h>

// CLASS DECLARATION

/**
*  This class implements the interface MContentHandler required by a client of the xml framework
*  It is designed to be used by xml parser that generates events using callback methods   
*
*  @since Series60 2.6
*/

// for upnpcontenthandlers
_LIT8(KUpnpRoot,                    "root");
_LIT8(KUpnpIconList,                "iconList");
_LIT8(KUpnpUpc,                     "UPC");
_LIT8(KUpnpInmpro3,                 "INMPR03");
_LIT8(KUpnpScpd,                    "scpd");
_LIT8(KUpnpActionList,              "actionList");
_LIT8(KUpnpArgument,                "argument");
_LIT8(KUpnpArgumentList,            "argumentList");
_LIT8(KUpnpServiceStateTable,       "serviceStateTable");
_LIT8(KUpnpName,                    "name");
_LIT8(KUpnpIn,                      "in");
_LIT8(KUpnpDirection,               "direction");
_LIT8(KUpnpRelatedStateVariable,    "relatedStateVariable");
_LIT8(KUpnpDataType,                "dataType");
_LIT8(KUpnpAllowedValue,            "allowedValue");
_LIT8(KUpnpDefaultValue,            "defaultValue");
_LIT8(KUpnpValue,                   "value");
_LIT8(KUpnpMinimum,                 "minimum");
_LIT8(KUpnpMaximum,                 "maximum");
_LIT8(KUpnpStep,                    "step");

using namespace Xml;


class CUpnpBaseContentHandler : public CBase, public MContentHandler
{        
public:
   	/**    
   	* Destructor    
    */	
	virtual ~CUpnpBaseContentHandler();
	
	/**    
   	* Removes all elements from the stack   
    */	
    void ClearResultsL();

public:	// from MContentHandler

    /**
    * This method is a callback to indicate the start of the document.
    * @param				aDocParam Specifies the various parameters of the document.
    * @arg				aDocParam.iCharacterSetName The character encoding of the document.
    * @param				aErrorCode is the error code. 
    * 					If this is not KErrNone then special action may be required.
    */
	virtual void OnStartDocumentL(const RDocumentParameters& aDocParam, TInt aErrorCode);

    /**
    * This method is a callback to indicate the end of the document.
    * @param				aErrorCode is the error code. 
    * 				If this is not KErrNone then special action may be required.
    */
    virtual void OnEndDocumentL(TInt aErrorCode);
       
    /**
    * This method is a notification of the beginning of the scope of a prefix-URI Namespace mapping.
    * This method is always called before the corresponding OnStartElementL method.
    * @param				aPrefix is the Namespace prefix being declared.
    * @param				aUri is the Namespace URI the prefix is mapped to.
    * @param				aErrorCode is the error code.
    * 				If this is not KErrNone then special action may be required.
    */
    virtual void OnStartPrefixMappingL(const RString& aPrefix, const RString& aUri, 
    								   TInt aErrorCode);
    /**
    * This method is a notification of the end of the scope of a prefix-URI mapping.
    * This method is called after the corresponding DoEndElementL method.
    * @param				aPrefix is the Namespace prefix that was mapped.
    * @param				aErrorCode is the error code.
    * 				If this is not KErrNone then special action may be required.
    */
    virtual void OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode);

    /**
    * This method is a notification of ignorable whitespace in element content.
    * @param				aBytes are the ignored bytes from the document being parsed.
    * @param				aErrorCode is the error code.
    * 				If this is not KErrNone then special action may be required.
    */
    virtual void OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt aErrorCode);

    /**
    * This method is a notification of a skipped entity. If the parser encounters an 
    * external entity it does not need to expand it - it can return the entity as aName 
    * for the client to deal with.
    * @param				aName is the name of the skipped entity.
    * @param				aErrorCode is the error code.
    * 				If this is not KErrNone then special action may be required.
    */
    virtual void OnSkippedEntityL(const RString& aName, TInt aErrorCode);

    /**
    This method is a receive notification of a processing instruction.
    * @param				aTarget is the processing instruction target.
    * @param				aData is the processing instruction data. If empty none was supplied.
    * @param				aErrorCode is the error code.
    * 				If this is not KErrNone then special action may be required.
    */
    virtual void OnProcessingInstructionL(const TDesC8& aTarget, const TDesC8& aData, 
    									  TInt aErrorCode);
    /**
    * This method indicates an error has occurred.
    * @param				aError is the error code
    */
    virtual void OnError(TInt aErrorCode);

    /**
    * This method obtains the interface matching the specified uid.
    * @return				0 if no interface matching the uid is found.
    * 				Otherwise, the this pointer cast to that interface.
    * @param				aUid the uid identifying the required interface.
    */
    virtual TAny* GetExtendedInterface(const TInt32 aUid);
    
        /**    
   	* Removes all elements from the stack if parsing failed
    */
	virtual void ClearStack();
	    
protected:
    
    /**    
   	* Default C++ constructor    
    */
    CUpnpBaseContentHandler();    
    
    /**    
   	* 2nd phase constructor dedicated to future, inherited class      
    */
    void BaseConstructL();    
    
    /**    
   	* Gets an object most recently pushed onto the stack   
    * @return    		
    */
    CBase* GetElementL();	
    
    /**
    * This method shows whether parsing of a xml document is finished
    * @since Series60 3.2 
    * @return TBool    
    */	
    virtual TBool IsReady() = 0;        
    
    /**
    * Sets a flag to indicate that parsing of the xml document has thrown an error
    * @since Series60 3.2     
    */	
    virtual void SetError() = 0; 
    
    /**
    * Sets a flag to indicate that parsing of the xml document has finished
    * @since Series60 3.2     
    */	   
    virtual void SetFinish() = 0;
   
   /**
    * Get content value.
    * @since Series60 3.2
    */
    HBufC8* GetContentL();

protected:
			
	CStack<CBase, EFalse> *iStack;
	HBufC8* iContent;	
	CParser* iParser;
	TBuf8<KMaxInfoSize> iInfo;
	HBufC8* iBodyTag1;
	HBufC8* iBodyTag2;
	TBool iChunk;			

};

#endif //__UPNPBASECONTENTHANDLER_H__