diff -r 75a71fdb4c92 -r 7d11f9a6646f pnpmobileservices/pnpms/PnpPaosFilter/src/PnpPaosXml.h --- a/pnpmobileservices/pnpms/PnpPaosFilter/src/PnpPaosXml.h Tue Feb 02 00:03:17 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,343 +0,0 @@ -/* -* 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: For checking a PAOS XML document -* -*/ - - - -#ifndef PNP_PAOS_XML_H -#define PNP_PAOS_XML_H - -#include -#include -#include // for XML parser -#include // for MContentHandler -#include -#include - - -using namespace Xml; - -class CPnpUtil; - - -/** -For checking a PAOS XML document. Checks that the XML is of right format. -Currently only a request for "SetOfKeys" is allowed. -*/ - -class CPnpPaosXml : - public CBase, - public MContentHandler, - public MHTTPDataSupplier /* to set the body of a http request*/ - { -public: - /** - Possible PAOS request states, currently only ERequestingKeys is available. - */ - enum TPaosStates - { - EPaosStatusUnknown = 0, - EPaosStatusRequestingPnPKeys, /* Received a PAOS request for PnP-MS parameters */ - EPaosStatusRequestingHdcKeys /* Received a PAOS request for HelpDeskConnect parameters */ - }; - - static CPnpPaosXml* NewL(); - ~CPnpPaosXml(); - - /** - Construct a response to the PnP PAOS request received, - the response is put into iPaosResponse buffer. - */ - void ConstructPnPPaosResponseL(); - - /** - Construct a response to the HelpDeskConnect PAOS request received, - the response is put into iPaosResponse buffer. - */ - void ConstructHdcPaosResponseL(); - - /** - Construct a response to a PAOS request. The response is put into - iPaosResponse buffer. - @param aResponse The literal used in formatting the response. It is assumed - to have %S directives to be replaced by the given parameter values. Maximum - number of the directives is 8 as the first occurrence is always replaced by - XML that contains PAOS message ids. - @param aParameter1 Descriptor that replaces the second occurrence of %S directive in aResponse. - The default value is an empty descriptor. - @param aParameter2 Descriptor that replaces the third occurrence of %S directive in aResponse. - The default value is an empty descriptor. - @param aParameter3 And so on... - */ - void ConstructPaosResponseL( - const TDesC8& aResponse, - const TDesC8& aParameter1 = KNullDesC8, - const TDesC8& aParameter2 = KNullDesC8, - const TDesC8& aParameter3 = KNullDesC8, - const TDesC8& aParameter4 = KNullDesC8, - const TDesC8& aParameter5 = KNullDesC8, - const TDesC8& aParameter6 = KNullDesC8, - const TDesC8& aParameter7 = KNullDesC8, - const TDesC8& aParameter8 = KNullDesC8 - ); - - /** - Goes through the PAOS request received from the server. Leaves with - KErrArgument if the XML document was not correctly formatted. - */ - void ParseL( TPaosStates& aPaosRequest ); - - /** - For storing the PAOS request piece by piece. - @return ETrue if this was the last data part from MHTTPDataSupplier. - */ - TBool CollectResponseBodyL( MHTTPDataSupplier& aBody ); - -//#ifndef __SERIES60_ - /** - @return A pointer to a descriptor containing response body. - */ -// TPtrC8 ResponseBodyL(); -//#endif - - /** - Returns the parameter responseConsumerUrl of the previous PAOS request parsed. - */ - const TDesC8& GetPaosPostUrlL(){ return *iPaosPostUrlPath; }; - - /** - Returns the parameter referenceMessageId for the constructed PAOS response message - */ - const TDesC8& GetReferenceMessageId(){ return *iReferenceMessageId; }; - - /** - Resets the PAOS request. - */ - void ResetPaosRequest(); - -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. - */ - 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. - */ - void OnEndDocumentL( TInt aErrorCode ); - - /** - This method is a callback to indicate an element has been parsed. - @param aElement is a handle to the element's details. - @param aAttributes contains the attributes for the element. - @param aErrorCode is the error code. - If this is not KErrNone then special action may be required. - */ - void OnStartElementL( const RTagInfo& aElement, - const RAttributeArray& aAttributes, TInt aErrorCode ); - - /** - This method is a callback to indicate the end of the element has been reached. - @param aElement is a handle to the element's details. - @param aErrorCode is the error code. - If this is not KErrNone then special action may be required. - */ - void OnEndElementL( const RTagInfo& aElement, TInt aErrorCode ); - - - /** - This method is a callback that sends the content of the element. - Not all the content may be returned in one go. The data may be sent in chunks. - When an OnEndElementL is received this means there is no more content to be sent. - @param aBytes is the raw content data for the element. - The client is responsible for converting the data to the - required character set if necessary. - In some instances the content may be binary and must not be converted. - @param aErrorCode is the error code. - If this is not KErrNone then special action may be required. - */ - void OnContentL( const TDesC8& aBytes, 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. - */ - 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. - */ - 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. - */ - 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. - */ - 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. - */ - void OnProcessingInstructionL( const TDesC8& aTarget, const TDesC8& aData, - TInt aErrorCode ); - - /** - This method indicates an error has occurred. - @param aError is the error code - */ - 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. - */ - TAny* GetExtendedInterface( const TInt32 aUid ); - - /** - This method is indicates there is no more data in the data supplier to parse. - If there is more data to parse the Start method should be called once there - is more data in the supplier to continue parsing. - */ - virtual void OnOutOfData(); - -public: // From MHTTPDataSupplier - /** - From MHTTPDataSupplier. - - Obtains a data part from the supplier. - The data is guaranteed to survive until a call is made to ReleaseData(). - - @param aDataPart The data part - @return ETrue if this is the last part, EFalse otherwise - */ - virtual TBool GetNextDataPart( TPtrC8& aDataPart ); - - /** - From MHTTPDataSupplier. - - Releases the current data part being held at the data supplier. - This call indicates to the supplier that the part is no longer needed, - and another one can be supplied, if appropriate. - */ - virtual void ReleaseData(); - - /** - From MHTTPDataSupplier. - - Obtains the overall size of the data being supplied, if known to the - supplier. Where a body of data is supplied in several parts, this size is - the sum of all the part sizes. If the size is not known, KErrNotFound is - returned; in this case the caller must use the return code of - GetNextDataPart() to find out when the data is complete. - @return A size in bytes, or KErrNotFound if the size is not known. - */ - virtual TInt OverallDataSize(); - - /** - From MHTTPDataSupplier. - Resets the data supplier. - - This indicates to the data supplier that it should return to the first part - of the data. This could be used in a situation where the data consumer has - encountered an error and needs the data to be supplied afresh. Even if the - last part has been supplied (i.e. GetNextDataPart() has returned ETrue), - the data supplier should reset to the first part. - - @return If the supplier cannot reset, it should return an error code, - otherwise it should return KErrNone, where the reset will be - assumed to have succeeded. - */ - virtual TInt Reset(); - -private: - CPnpPaosXml(); - void ConstructL(); - - /** - Generates a random character string. The original descriptor contents is lost. - */ - void GenerateNonceString( TDes8& aString ); - - /** - * Fetch product model - * @since 2.0 - * @return void - */ - void FetchProductModelL( TDes8& aModel ); - - /** For parsing XML */ - CParser* iParser; - - /** Buffer for storing a http response (PAOS request) */ - HBufC8* iPaosRequest; - /** Buffer for storing a http request (PAOS response) */ - HBufC8* iPaosResponse; - /** The path for posting PAOS response to (responseConsumerURL) */ - HBufC8* iPaosPostUrlPath; - /** messageID parameter PAOS spec: - "RECOMMENDED that the value of this attribute have nonce characteristic" */ - HBufC8* iMessageId; - /** refToMessageID parameter; references to the messageID of the PAOS query received. - PAOS spec: "RECOMMENDED that the value of this attribute have nonce characteristic" */ - HBufC8* iReferenceMessageId; - TPaosStates iPaosStatus; - /** ETrue if there was the parameter responseConsumerURL in the xml, - EFalse otherwise */ - TBool iResponseConsumerUrlFound; - /** Set to ETrue if parsing the XML caused a call to MContentHandler::OnError */ - TBool iErrorFound; - /** An enum value for storing the current xml element */ - TInt iCurrentElement; -}; - -#endif // PNP_PAOS_XML_H