wapstack/wapmessageapi/sws/CLWSPPduHandler.h
author Nithin Vijay <nithin.vjay@nokia.com>
Tue, 20 Apr 2010 17:00:49 +0100
branchRCL_3
changeset 18 50bae5c5c85f
permissions -rw-r--r--
Add wapstack/wapmessageapi component, to fix Bug 1398

// Copyright (c) 2003-2009 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:
//

#ifndef __CLWSPPDUHANDLER_H__
#define __CLWSPPDUHANDLER_H__
#include <e32std.h>
#include <wapmessage.h>


/** 
The connectionless WSP PDU type definition.
@internalComponent
*/
enum TWSPPduType
	{
	/** the Reply PDU type assignment 
	*/
	EReply			=0x04,
	/** the Push PDU type assignment 
	*/
	EPush			=0x06,
	/** the Get PDU type assignment 
	*/
	EGet			=0x40,
	/** the GetOption PDU type assignment 
	*/
	EGetOptions		=0x41,
	/** the Gethead PDU type assignment 
	*/
	EGetHead		=0x42,
	/** the GetDelete PDU type assignment 
	*/
	EGetDelete		=0x43,
	/** the GetTrace PDU type assignment 
	*/
	EGetTrace		=0x44,
	/** the Post PDU type assignment 
	*/
	EPost			=0x60,
	/** the PostPut PDU type assignment 
	*/
	EPostPut		=0x61
	};


	/** 
	The offset of the transactionID field in WSP PDU.
	@internalComponent
	 */
	const TUint KPDUHeaderTransactionIDOffSet	=0;
	/** 
	The offset of the WSP PDU type field in WSP PDU.
	@internalComponent
	 */
	const TUint KPDUHeaderWSPPDUTypeOffSet		=1;
	/** 
	The offset of WSP field.
	@internalComponent
	*/
	const TUint KPDUFieldOffset					=2;

	/** 
	The length of transactionID+PDUType
	@internalComponent
	*/
	const TUint8 KPDUTransactionIDAndPDUTypeLength	=2;
	/** 
	The length of WSP status
	@internalComponent
	*/
	const TUint8 KWSPStatusLength					=1;

	/**
	The mask of top 3 bits in varible length Unsigned integer
	@internalComponent
	*/
	const TUint8 KTop3BitSet		= 0x70;

	/**
	The mask to valide each byte in varible length Unsigned integer
	@internalComponent
	*/
	const TUint8 KWapQuote			= 0x7F;

	/**
	The mask of carry bit in each byte in varible length Unsigned integer
	@internalComponent
	*/
	const TUint8 KCarryBitMask		= 0x80;

	/**
	Maximum length for varible length Unsigned integer
	@internalComponent
	*/
	const TUint8 KMaxUintVarLength	= 5;

	/**
	shift 7 bits for each byte in Uint32
	@internalComponent
	*/
	const TUint8 KUIntVarOctetShift	= 7;



class CCLWSPPduHandler
/** 
The Connectionless WSP PDU Handler. This class provides a set of static interfaces 
for WAP message APIs to pack and unpack the WSP PDU.   
For error codes returned by methods in this class, see <wapmsgerr.h>.  Most methods can 
return a set of general errors, with some returning additional specific errors.
*/
	{
public: 



public: // Public Interfaces
	static void UnpackWSPPduL(HBufC8* aWSPPdu, TWSPPduType& aType, HBufC8*& aWSPHeader, HBufC8*& aBody, TUint8& aId, TWSPStatus& aStatus);
	static void PackWSPPduL(HBufC8*& aWSPPdu, TWSPPduType aType, const TDesC& aURI, const TDesC8& aWSPHeader, const TDesC8& aBody, const TUint8 aId);

private: // private methods
	static void UnpackPushPduL(HBufC8* aWSPPdu, HBufC8*& aWSPHeader, HBufC8*& aBody);
	static void UnpackReplyPduL(HBufC8* aWSPPdu, HBufC8*& aWSPHeader, HBufC8*& aBody, TWSPStatus& aStatus);
	static void PackPostPduL(HBufC8*& aWSPPdu, TWSPPduType aType, const TDesC& aURI, const TDesC8& aWSPHeader, const TDesC8& aBody, const TUint8 aId);
	static void PackGetPduL(HBufC8*& aWSPPdu, TWSPPduType aType, const TDesC& aURI, const TDesC8& aWSPHeader, const TUint8 aId);
	static TInt UintVar(TUint32& aVal, TPtrC8& aBuffer, TUint aOffset);
	static HBufC8* UintVarL(const TUint32 aInt);
	};
#endif // __CLWSPPDUHANDLER_H__