messagingfw/wappushfw/tpush/DummyStack/dummywapstack.h
changeset 62 db3f5fa34ec7
parent 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/wappushfw/tpush/DummyStack/dummywapstack.h	Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,278 @@
+// Copyright (c) 2000-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 __DUMMYWAPSTACK_H__
+#define __DUMMYWAPSTACK_H__
+
+#include <e32base.h>
+#include <e32std.h>
+#include "Dummywapstd.h"
+#include "DummyWapClient.h"
+
+/**
+ *forward declaration
+ */
+class CDummyWapSession;
+class CDummyWSPCLConn;
+class CDummyWSPCOConn;
+class CDummyWapStack;
+class CDummyWSPCOTrans;
+class CDummyWTLS;
+typedef TUint16 TPort;
+
+
+
+/**
+ * Mixin class to allow communication between dummy stack and test harness
+ */
+class MDummyWapStackObserver
+	{
+public:
+	virtual void DWSOUnitWaitPushL(CDummyWSPCLConn& aDummyCLConn)=0;
+	virtual void DWSOCancelUnitWaitPush(CDummyWSPCLConn& aDummyCLConn)=0;
+	virtual void DWSOServerShutDown()=0;
+	virtual void DWSOError(const TDesC& aDes, TInt aLineNum)=0;
+	virtual void DWSOConnect(CDummyWSPCOConn& aDummyCOConn)=0;
+	virtual void DWSOGetEventL(CDummyWSPCOConn& aDummyCOConn)=0;
+	virtual void DWSOCancelGetEvent(CDummyWSPCOConn& aDummyCOConn)=0;
+	virtual void DWSOAckTransaction(CDummyWSPCOTrans& aDummyCOTrans)=0;
+	};
+
+
+/**
+ * This is the 'dummy' equivalent of the WAP stack server
+ * 
+ * It uses the singleton design pattern to ensure there is only one
+ * instance of this object. It is responsible for creating and managing
+ * client sessions with the server.
+ */
+class CDummyWapStack : public CBase
+	{
+public:
+	IMPORT_C static CDummyWapStack* NewL(MDummyWapStackObserver& aObserver); 
+	~CDummyWapStack();
+
+	IMPORT_C CDummyWapSession* NewSessionL();
+	IMPORT_C void CloseSession(CDummyWapSession* aDummyWapSession);
+	//
+	IMPORT_C MDummyWapStackObserver& Observer();
+private:	
+	CDummyWapStack(MDummyWapStackObserver& aObserver);
+	void ConstructL();
+	CDummyWapStack* StackInstance(){return STATIC_CAST(CDummyWapStack* , Dll::Tls());};//return unique instance
+	void FreeTls();
+private:
+	MDummyWapStackObserver& iObserver;
+	RPointerArray<CDummyWapSession> iSessionsArray;
+	CDummyWapStack* iInstance;
+	};
+ 
+
+/**
+ * This is the 'dummy' equivalent of a single client session with the server 
+ *
+ * It represents the CWAPSession class, which is reponsible for creating and
+ * managing subsessions, ie. individual connections (CWAPConn objects)
+ */
+class CDummyWapSession : public CBase
+	{
+public:
+	static CDummyWapSession* NewL();
+	~CDummyWapSession();
+
+	CDummyWSPCLConn* NewWSPCLConnL(TPort aLocalPort);
+	CDummyWSPCOConn* NewWSPCOConnL();
+	
+	void Close();
+private:
+	void ConstructL();
+private:
+	TInt iReferenceCount;
+	};
+
+
+/**
+ * Base class for all 'dummy' WSP connections. 
+ *
+ * This is required so that the RWAPConn base class can correctly close the 
+ * CDummy... classes, because the base class doesn't implement a virtual 
+ * Close method
+ */
+class CDummyWSPConn : public CBase
+	{
+public:
+	CDummyWSPConn(CDummyWapSession& aSession);
+	virtual void Close();
+	CDummyWTLS* WtlsL();
+private:
+	CDummyWapSession& iSession;
+	CDummyWTLS* iWtls;
+	};
+
+#ifndef __WAPMESSAGE_H__
+#ifndef __DUMMYWAPCLIENT_H__
+namespace Wap
+	{
+	// Bearer type definition
+	typedef enum
+		{
+		EAll,
+		EIP,
+		ESMS7,
+		ESMS,
+		EWAPSMS7,
+		EWAPSMS
+		} TBearer;
+
+	// Port number definition
+	typedef TUint16 TPort;
+ 
+	}
+#endif
+#endif
+
+/** 
+ *  Dummy connectionless connection
+ */
+class CDummyWSPCLConn : public CDummyWSPConn
+	{
+public:
+	CDummyWSPCLConn(CDummyWapSession& aSession, TPort aLocalPort);
+	~CDummyWSPCLConn();
+	virtual TInt Connect(Wap::TBearer aBearer, Wap::TPort aPort, TBool aSecure);
+	TInt AwaitPush(TDes8& aPushHeaders, TDes8& aPushBody, TPckgBuf<TUint8>& aPushIdPckg, TRequestStatus& aReqStatus);
+	void UnitWaitPushL(TDes8& aBody,TDes8& aHeaders,TPushID& aID,TRequestStatus& aStatus);
+	TInt CancelUnitWaitPush();
+	TInt CancelAwaitPush(); 
+	IMPORT_C void CompleteUnitWaitPushL(TDes8& aBody,TDes8& aHeaders);
+	TInt UnitWaitPushL(TDes8& aBody,TDes8& aHeaders,TPushID& aID);//Sync Version
+	IMPORT_C TBool HasMsgBeenCompleted();
+	inline TPort LocalPort(){return iLocalPort;}
+	IMPORT_C void SetServerAddressL(const TDesC8& aAddr);
+	const TDesC8& GetServerAddr();
+private:
+	TDes8*	 iClientBody;
+	TDes8*	 iClientHeaders;
+	TPushID* iID;
+	TRequestStatus* iStatus;
+	//
+	HBufC8* iPushHeadersData;
+	TInt iPushHeadersDataOffset;
+	HBufC8* iPushBodyData;
+	TInt iPushBodyDataOffset;
+	TPort iLocalPort; //using port we can identify this CL as either secure or unsecure 
+	HBufC8* iServerAddr;
+	};
+
+
+
+/** 
+ * Dummy connection-orientated transaction
+ */
+class CDummyWSPCOTrans : public CBase
+	{
+public:
+	IMPORT_C CDummyWSPCOTrans(CDummyWSPCOConn& aConnection);
+	IMPORT_C ~CDummyWSPCOTrans();
+	TInt Acknowledge(const TDesC8& aAckHeaders);
+	TInt GetData(TDes8& aBuffer, RWSPCOTrans::TDataType aDataType, TInt* aSizeLeft = 0) const;
+	TInt GetState(RWSPCOTrans::TState& aState) const;
+	TInt Abort(RWSPCOTrans::TAbortReason aReason);
+	TInt Release();
+	TInt Id(RWSPCOTrans::TTransID& aId);
+	//for testcode
+	IMPORT_C void SetData(const TDesC8& aBuffer,RWSPCOTrans::TDataType aDataType);
+	IMPORT_C void SetId(TInt aId);
+private:
+	CDummyWSPCOConn& iConnection;
+	RWSPCOTrans::TState iTransState;
+	TInt iId;
+
+	//TFixedArray<const TDesC8**,11> iDataArray;
+	TFixedArray<const TDesC8*,11> iDataArray;
+	TFixedArray<TInt*,11> iOffsetArray;
+	
+	const TDesC8* iClientAckHeaders;
+	};
+
+
+
+
+/**
+ *  Dummy connection-orientated connection
+ */
+class CDummyWSPCOConn : public CDummyWSPConn
+	{
+public:
+	CDummyWSPCOConn(CDummyWapSession& aSession);
+	~CDummyWSPCOConn();
+
+	TInt Connect(const TDesC8& aClientHeaders, class CCapCodec* aCap);
+	TInt Disconnect();
+	TInt GetSessionState(RWSPCOConn::TSessionState& aState);
+	TInt GetEvent(RWSPCOConn::TEvent& aEvent, RWSPCOTrans& aTrans, TRequestStatus& aStatus);
+	IMPORT_C void CancelGetEvent();
+	TInt GetNrOfEvents(TUint& aNrOfEvents);
+	//for testcode
+	IMPORT_C void CompleteGetEventL(RWSPCOConn::TEvent& aEvent,CDummyWSPCOTrans& aDummyTrans);
+	void RemoveTransaction(CDummyWSPCOTrans& aTrans);
+private:
+	const TDesC8* iClientHeaders;
+	CCapCodec* iCapCodec;
+	RWSPCOConn::TSessionState iSessionState;
+	RPointerArray<CDummyWSPCOTrans> iTransArray;
+
+	RWSPCOConn::TEvent* iEvent;
+	RWSPCOTrans* iTrans;
+	TRequestStatus* iStatus;
+	};
+
+
+
+
+
+/** 
+ * Dummy WTLS 
+ */
+class CDummyWTLS : public CBase
+	{
+public:
+	CDummyWTLS();
+	~CDummyWTLS();
+
+	TInt SetKeyExchangeSuite(RWTLS::TKeyExchangeSuite aSuite,RWTLS::TIdType IdType,const TDesC8& aKeyId);
+	TInt SetCipherSuites(const RWTLS::CipherSuiteArray& aCipherSuites);
+	TInt SetSequenceNumberMode(RWTLS::TSequenceNumberMode aMode);
+	TInt SetKeyRefreshRate(TUint8 aRate);
+	TInt SetSharedSecret(const TDesC8& aSharedSecret);
+	TInt SetRecordLengthUsage(TBool aUsage);
+	void Connect(TRequestStatus& aStatus, TBool aTwoPhaseHandshake);
+	void CancelConnect();
+	TInt ConnectPhaseTwo(TRequestStatus& aStatus);
+	void CancelConnectPhaseTwo();
+	TInt GetCipherSuite(RWTLS::TCipherSuite& aCipherSuite) const;
+	TInt GetSequenceNumberMode(RWTLS::TSequenceNumberMode& aMode) const;
+	TInt GetKeyRefreshRate(TUint8& aRate) const;
+private:
+	TRequestStatus* iConnect;
+	TRequestStatus* iConnectPhaseTwo;
+	TBool iTwoPhaseHandshake;
+	RWTLS::TSequenceNumberMode iSequenceNumMode;
+	TUint8 iKeyRefreshRate;
+	TBool iRecordLenUsage;
+	};
+
+#endif