testexecfw/statsrv/device/source/statapi/inc/stat_packetisation.h
changeset 0 3e07fef1e154
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecfw/statsrv/device/source/statapi/inc/stat_packetisation.h	Mon Mar 08 15:03:44 2010 +0800
@@ -0,0 +1,134 @@
+/*
+* Copyright (c) 2005-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: 
+*
+*/
+
+
+
+/********************************************************************************
+ *
+ * Stat Packetisation Transport
+ *
+ *******************************************************************************/
+#ifndef __STATPACKETISATION_H__
+#define __STATPACKETISATION_H__
+
+/********************************************************************************
+ *
+ * System Includes
+ *
+ *******************************************************************************/
+
+/********************************************************************************
+ *
+ * Local Includes
+ *
+ *******************************************************************************/
+#include "stat_interfaces.h"
+
+/********************************************************************************
+ *
+ * Definitions
+ *
+ *******************************************************************************/
+#define KIDSize				4
+#define KLengthSize			4
+#define KHeaderSize			(KIDSize + KLengthSize)
+
+/********************************************************************************
+ *
+ * Classes
+ *
+ *******************************************************************************/
+class CStatTransportPacketisation : public CBase, public MStatApiTransport, public MNotifyStatTransport
+{
+public:
+	// construction
+	static CStatTransportPacketisation *NewL( MNotifyStatEngine *aStatEngine, MStatNetwork *aStatNetwork, TUint aPacketSize );
+	CStatTransportPacketisation();
+	virtual ~CStatTransportPacketisation();
+
+	// from MStatApiTransport
+	TInt InitialiseL( void );
+	TInt ConnectL( TDesC *aRemoteHost );
+	TInt RequestSend( const TUint aCommand, MDataSupplier *const aDataSupplier);
+	TInt RequestReceive( void );
+	TInt Disconnect( void );
+	TInt Release( void );
+	TText8 *Error( void );
+
+	// from MNotifyStatTransport
+	void HandleInitialise( TInt aResult );
+	void HandleConnect( TInt aResult );
+	void HandleSend( TInt aResult );
+	void HandleReceive( TInt aResult, TDesC8 *aData, TUint aDataLength );
+	void HandleDisconnect( TInt aResult );
+	void HandleRelease( TInt aResult );
+	void HandleError( TInt aError, void *aErrorData );
+	void HandleInfo( const TDesC *aInfo );
+
+private:
+	// private helper functions
+	void ConstructL( MNotifyStatEngine *aStatEngine, MStatNetwork *aStatNetwork, TUint aPacketSize );
+	void SendHeaderPacket( TUint aCommand, TUint aDataLength );
+	void SendAckPacket( TUint aCommand );
+	void BuildHeader( TUint aCommand, TUint aDataLength );
+	void NotifyEngineSend( TUint aResult );
+	void NotifyEngineReceive( TUint aResult );
+
+private:
+	// status enums
+	enum TSendStatus { ESendIdle, ESendingInitialHeader, ESendingFragmentHeader, ESendingFragmentData, ESendingFragmentAck };
+	enum TReceiveStatus { EReceiveIdle, EReceivingInitialHeader, EReceivingFragmentHeader, EReceivingData, EReceivingFragmentAck };
+
+private:	
+	// general members
+	MNotifyStatEngine *iStatEngine;
+	MStatNetwork *iStatNetwork;
+	TCommStatus iTransportStatus;
+	TSendStatus iSendStatus;
+	TReceiveStatus iRecvStatus;
+	TUint iDataPacketSize;
+
+	// send buffers
+	TBuf8<KHeaderSize> iSendHeader;
+	HBufC8 *iSendFragment;
+	TUint iSendCommand;
+	TUint iSendDataLength;
+	TUint iSendDataWritten;
+	TUint iSendDataAcknowledged;
+
+	// receive buffers
+	TUint iRecvCommand;
+	TUint iRecvDataLength;
+	TUint iRecvDataReceived;
+	TUint iRecvDataAcknowledged;
+
+	MDataConsumer *iDataConsumer;	// The data consumer is 
+									// use to pass data from the
+									// transport layer to the 
+									// command decoder.
+									// Each specific object is
+									// valid for the context of a 
+									// single command (and 
+									// destroyed).
+
+	MDataSupplier *iDataSupplier;	// This is owned by other
+									// objects and we are passed
+									// a pointer for our own use
+									// but we do not maintain this.
+};
+
+#endif // __STATTCPIP_H__