--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/inc/cbtsoapcodec.h Thu Dec 17 08:45:53 2009 +0200
@@ -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 <e32base.h>
+#include <f32file.h>
+#include <e32math.h>
+
+#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, "<s:Envelope");
+_LIT8(KBtEnvelopeEndTag, "</s:Envelope>");
+_LIT8(KBtBodyStartTag, "<s:Body>");
+_LIT8(KBtBodyEndTag, "</s:Body>");
+
+_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, "</%S>");
+_LIT8(KBtValueTemplate, "[%S]");
+
+static const TInt KAttrStrLen = 0x100;
+typedef TBuf8<KAttrStrLen> TBtAttrString8;
+typedef TBuf8<KDefaultRealWidth> 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:
+* <OL>
+* 1. Create an instance of the class
+* 2. Create an encoded message by CreateSoapL
+* </OL>
+* @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.
+* <OL>
+* 1. Decode and the message by ReadSoapL
+* 2. Get the attributes(s) of the message by GetAttributeL
+* </OL>
+*
+*/
+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<TPrintCapability>& aCapabilities,
+ TInt& aOperationStatus);
+
+ void GetPrinterStateResponseL(TInt& aState, TInt& aStateReasons, TInt& aOperationStatus);
+
+ void GetPrinterCapabilitiesResponseL(RArray<TPrintCapability>& 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