diff -r 159fc2f68139 -r d59c248c9d36 ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/inc/cbtsoapcodec.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/inc/cbtsoapcodec.h Wed Sep 01 12:30:38 2010 +0100 @@ -0,0 +1,347 @@ +/* +* Copyright (c) 2004-2007 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: Defines the CBtSoapCodec class to create and read SOAP-encoded messages. +* +*/ + + +#ifndef CBTSOAPCODEC_H +#define CBTSOAPCODEC_H + +#include +#include +#include + +#include "cxmlhandler.h" +#include "tprintcapability.h" +#include "btprotocolconsts.h" + +/** @name Constants */ +/** Template file to use to create the XML soap-encoded messages */ + _LIT( KBtXmlTemplate, "z:\\resource\\imageprintdata\\protocols\\btxmltemplate.txt" ); + + +/** general tags */ +_LIT8(KBtEnvelopeStartTag, ""); +_LIT8(KBtBodyStartTag, ""); +_LIT8(KBtBodyEndTag, ""); + +_LIT8(KBtAction, "[Action]"); +_LIT8(KBtActionData, "[ActionData]"); +_LIT8(KBtBytesInBody, "[BytesInBody]"); + +/** Create job tags */ +_LIT8(KBtCreateJobStart, "[CreateJobStart]"); +_LIT8(KBtCreateJobEnd, "[CreateJobEnd]"); + +/** Get printer attributes tags */ +_LIT8(KBtGetPrinterAttributesAllStart, "[GetPrinterAttributesAllStart]"); +_LIT8(KBtGetPrinterAttributesAllEnd, "[GetPrinterAttributesAllEnd]"); +_LIT8(KBtGetPrinterAttributesStart, "[GetPrinterAttributesStart]"); +_LIT8(KBtGetPrinterAttributesEnd, "[GetPrinterAttributesEnd]"); +_LIT8(KBtGetPrinterCapabilitiesStart, "[GetPrinterCapabilitiesStart]"); +_LIT8(KBtGetPrinterCapabilitiesEnd, "[GetPrinterCapabilitiesEnd]"); +_LIT8(KBtGetPrinterStateStart, "[GetPrinterStateStart]"); +_LIT8(KBtGetPrinterStateEnd, "[GetPrinterStateEnd]"); + + +/** Get printer attributes tags */ +_LIT8(KBtGetJobAttributesStart, "[GetJobAttributesStart]"); +_LIT8(KBtGetJobAttributesEnd, "[GetJobAttributesEnd]"); + +/** Get margins tags */ +_LIT8(KBtGetMarginsStart, "[GetMarginsStart]"); +_LIT8(KBtGetMarginsEnd, "[GetMarginsEnd]"); +_LIT8(KBtMediaSizeData, "[MediaSizeData]"); +_LIT8(KBtMediaTypeData, "[MediaTypeData]"); + +/** Job related */ +_LIT8(KBtJobIdStart, "[JobIdStart]"); +_LIT8(KBtJobIdEnd, "[JobIdEnd]"); + +/** Actions */ +enum TBtSoapActions +{ + EBtUnknownAction = -1, + EBtCreateJob, + EBtCreateJobResponse, + EBtGetPrinterAttributes, + EBtGetPrinterAttributesResponse, + EBtGetJobAttributes, + EBtGetJobAttributesResponse, + EBtCancelJob, + EBtCancelJobResponse, + EBtGetEvent, + EBtGetEventResponse, + EBtGetMargins, + EBtGetMarginsResponse, + // Not actual actions but identifiers as sub for EBtGetPrinterAttributes + EBtGetPrinterCapabilities, + EBtGetPrinterState +}; + +_LIT8(KBtCreateJob, "CreateJob"); +_LIT8(KBtCreateJobResponse, "CreateJobResponse"); +_LIT8(KBtGetPrinterAttributes, "GetPrinterAttributes"); +_LIT8(KBtGetPrinterAttributesResponse, "GetPrinterAttributesResponse"); +_LIT8(KBtGetJobAttributes, "GetJobAttributes"); +_LIT8(KBtGetJobAttributesResponse, "GetJobAttributesResponse"); +_LIT8(KBtCancelJob, "CancelJob"); +_LIT8(KBtCancelJobResponse, "CancelJobResponse"); +_LIT8(KBtGetEvent, "GetEvent"); +_LIT8(KBtGetEventResponse, "GetEventResponse"); +_LIT8(KBtGetMargins, "GetMargins"); +_LIT8(KBtGetMarginsResponse, "GetMarginsResponse"); + +_LIT8(KBtNumberUpSupported, "NumberUpSupported"); +_LIT8(KBtMediaTypesSupported, "MediaTypesSupported"); +_LIT8(KBtMediaSizesSupported, "MediaSizesSupported"); +_LIT8(KBtPrintQualitySupported, "PrintQualitySupported"); +_LIT8(KBtMediaLoaded, "MediaLoaded"); +_LIT8(KBtLoadedMediumDetails, "LoadedMediumDetails"); + +/** Attributes */ +_LIT8(KBtOperationStatus, "OperationStatus"); +_LIT8(KBtJobId, "JobId"); +_LIT8(KBtJobName, "JobName"); +_LIT8(KBtJobState, "JobState"); +_LIT8(KBtJobOriginatingUserName, "JobOriginatingUserName"); +_LIT8(KBtJobMediaSheetsCompleted, "JobMediaSheetsCompleted"); +_LIT8(KBtJobPending, "NumberOfInterveningJobs"); + +_LIT8(KBtPrinterName, "PrinterName"); +_LIT8(KBtPrinterState, "PrinterState"); +_LIT8(KBtPrinterStateReasons, "PrinterStateReasons"); + +_LIT8(KBtDocumentFormat, "DocumentFormat"); +_LIT8(KBtCopies, "Copies"); +_LIT8(KBtSides, "Sides"); +_LIT8(KBtNumberUp, "NumberUp"); +_LIT8(KBtOrientationRequest, "OrientationRequest"); +_LIT8(KBtMediaSize, "MediaSize"); +_LIT8(KBtMediaType, "MediaType"); +_LIT8(KBtPrintQuality, "PrintQuality"); +_LIT8(KBtLoadedMediumSize, "LoadedMediumSize"); +_LIT8(KBtLoadedMediumType, "LoadedMediumType"); + +_LIT8(KBtStartTag, "<%S>"); +_LIT8(KBtEndTag, ""); +_LIT8(KBtValueTemplate, "[%S]"); + +static const TInt KAttrStrLen = 0x100; +typedef TBuf8 TBtAttrString8; +typedef TBuf8 TBtIntString8; + +/** +* @class CBtSoapCodec +* @brief Class to create and read SOAP-encoded messages. +* +* Class defines methods to encode and decode BPP actions to SOAP-encoded messages. +* @n +* @b Usage: +* @n +* @b Creating a message: +*
    +* 1. Create an instance of the class +* 2. Create an encoded message by CreateSoapL +*
+* @n +* After a message is created, it must be added in OBEX message body. +* @n +* @b Reading a message: +* After a OBEX message is received, a body from it can be given to +* CBtSoapCodec to decode the SOAP-encoded message. +*
    +* 1. Decode and the message by ReadSoapL +* 2. Get the attributes(s) of the message by GetAttributeL +*
+* +*/ +NONSHARABLE_CLASS( CBtSoapCodec ) : public CBase + { + public: + + /** NewL + * @brief Creates a new instance of SOAP codec class. + * @return Pointer to the instance. + */ + static CBtSoapCodec* NewL(); + + /** NewLC + * @brief Creates a new instance of SOAP codec class and leaves it in the cleanup stack. + * @return Pointer to the instance. + */ + static CBtSoapCodec* NewLC(); + + /** ~CBtSoapCodec + * @brief Destructor. + */ + ~CBtSoapCodec(); + + + /** Reset + * @brief Resets the member variables. + */ + void Reset(); + + /** CreateSoapL + * @brief Creates the SOAP-encoded message. + * According to the action parameter given, the method reads + * the xml template for a named action from file @ref KBtXmlTemplate + * and decodes it with the data concerning. + * @param aAction Name of the action for the message to create. + * @param aJobId Jod identifier for the actions required. + * NOTE: for CreateJob operation the job id is the cumulative number + * of the created jobs during the session. + * @return Pointer to the SOAP-encoded message for the action + */ + TPtrC8 CreateSoapL(const TInt aAction, const TInt aJobId = KErrNotFound); + + /** SoapAction + * @brief Returns for the action of the SOAP-encoded message + * @return TBtSoapActions type action identifier + */ + TInt SoapAction(); + + /** ReadSoapL + * @brief Reads the SOAP-encoded message. + * The message is read and the class is initialized with the data of the message. + * @param aAction Returns the name of the action of the SOAP-encoded data + * @param aSoapBuffer The buffer to read + */ + void ReadSoapL(TInt& aAction, const TDesC8& aSoapBuffer); + + /** @overload void ReadSoapL(TInt& aAction, const TDesC8& aSoapBuffer) */ + void ReadSoapL(TInt& aAction, const CBufBase& aSoapBuffer); + + /** @overload void ReadSoapL(TInt& aAction, const TDesC8& aSoapBuffer) */ + void ReadSoapL(const TDesC8& aSoapBuffer); + + /** @overload void ReadSoapL(TInt& aAction, const TDesC8& aSoapBuffer) */ + void ReadSoapL(const CBufBase& aSoapBuffer); + + public: + void CreateJobResponseL(TInt& aJobId, TInt& aErrorCode); + + void GetPrinterAttributesResponseL(TInt& aState, TInt& aStateReasons, + RArray& aCapabilities, + TInt& aOperationStatus); + + void GetPrinterStateResponseL(TInt& aState, TInt& aStateReasons, TInt& aOperationStatus); + + void GetPrinterCapabilitiesResponseL(RArray& aCapabilities, + TInt& aOperationStatus); + + void GetJobAttributesResponseL(const TInt aJobId, + TInt& aJobState, + TBtAttrString8& aJobName, + TBtAttrString8& aOriginator, + TInt& aSheetsCompleted, + TInt& aPendingJobs, + TInt& aOperationStatus ); + + void CancelJobResponseL(const TInt aJobId, TInt& aOperationStatus); + + void GetEventResponseL(const TInt aJobId, + TInt& aJobState, + TInt& aPrinterState, + TInt& aStateReasons, + TInt& aOperationStatus); + TInt OperationStatusL(); + + public: + /** GetAttributeL + * @brief Reads the requested attributes's value. + * @param aName Name of the attribute + * @param aValue Returns the value of the attribute + * @param aError Returns the code for the occurred error or KErrNone + */ + void GetAttributeL(const TDesC8& aName, TDes8& aValue, TInt& aError); + + void GetAttributeListL(const TDesC8& aName, CDesC8ArrayFlat& aList, TInt& aError); + + public: + /** TestMeL - Static test method + * @brief Static method to test this class' public interface. + */ + static void TestMeL(); + static TPtrC8 CreateJobResponseTestSoap(); + static TPtrC8 CancelJobResponseTestSoap(); + static TPtrC8 GetPrinterAttributesResponseTestSoap(); + static TPtrC8 GetJobAttributesResponseTestSoap(); + static TPtrC8 GetEventsResponseTestSoap(); + static TPtrC8 GetMarginsResponseTestSoap(); + + protected: + + /** ConstructL + * @brief Symbian second phase constructor. + */ + void ConstructL(); + + private: + + /** CBtSoapCodec + * @brief C++ constructor + */ + CBtSoapCodec(); + + /** CreateSoapTemplateL + * @brief Constructs a correct type message template. + * According to the given parameters method composes a template + * for the message with general headers and action specific data block. + * @param aStartTag Start tag for the action + * @param aEndTag End tag for the action + */ + void CreateSoapTemplateL(const TDesC8& aStartTag, const TDesC8& aEndTag); + + /** CreateJobSoapL + * @brief Composes the CreateJob action specific data in template. + */ + void CreateJobSoapL(const TInt aJobId); + + /** GetPrinterAttributesSoapL + * @brief Composes the GetPrinterAttributes action specific data in template. + */ + void GetPrinterAttributesSoapL(); + void GetCapabilitiesSoapL(); + void GetPrinterStateSoapL(); + + void GetJobAttributesSoapL(const TDesC8& aJobId); + void CancelJobSoapL(const TDesC8& aJobId); + void GetEventSoapL(const TDesC8& aJobId); + void GetMarginsSoapL(); + + TPrintCapability ParseLayoutL(); + TPrintCapability ParseQualityL(); + TPrintCapability ParsePaperSizeL(); + void ParseDefaultSizeL(TPrintCapability& aSize, TInt& aPos); + TInt ValuePosition(TPrintCapability aCapab, TInt aValue); + + private: + + /** @var HBufC8* iActionBuffer + * Buffer to store the action data */ + HBufC8* iActionBuffer; + + /** @var CXmlHandler* iXmlHandler + * XML handler */ + CXmlHandler* iXmlHandler; + + }; + +#endif // CBTSOAPCODEC_H + +// End of File