applayerpluginsandutils/httptransportplugins/httptransporthandler/csocketwriter.h
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/httptransportplugins/httptransporthandler/csocketwriter.h	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,155 @@
+// 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 __CSOCKETWRITER_H__
+#define __CSOCKETWRITER_H__
+
+#include <e32base.h>
+#include <http/framework/logging.h>
+
+#include "moutputstream.h"
+#include "mhttptimerobserver.h"
+#include "chttptimer.h"
+
+class CSocket;
+class MOutputSocketObserver;
+class MSocketController;
+
+class CSocketWriter : public CActive,
+					  public MOutputStream,
+					  public MHttpTimerObserver
+/**	
+	The CSocketWriter class encapsulates the writing functionality and behaviour
+	for a connected socket. It implements the MOutputStream API.
+	@see		MOutputStream
+	@internalComponent
+*/
+	{
+public:	// methods
+
+	static CSocketWriter* NewL(CSocket& aSocket, MSocketController& aController, TBool aPriority);
+
+	virtual ~CSocketWriter();
+
+	void SocketClosed(TInt aError);
+
+	virtual void SecureClientReq(const TDesC8& aHostName);
+
+private:	// methods from MOutputStream
+
+	virtual void Bind(MOutputStreamObserver& aObserver);
+
+	virtual void SendDataReqL(const TDesC8& aBuffer);
+
+	virtual void ShutdownReq();
+
+	virtual void Close();
+
+	virtual const CX509Certificate* ServerCert();
+	
+	virtual TInt CipherSuite(TDes8& aCipherSuite);
+
+	virtual void MOutputStream_Reserved();
+
+	virtual void Reset();
+	
+	virtual void SetTCPCorking(TBool aValue);
+	
+	void CompleteSelf();
+
+private:	// methods from CActive
+
+
+	virtual void RunL();
+	
+	virtual void DoCancel();
+	
+	virtual TInt RunError(TInt aError);
+
+private:	// methods from MHttpTimerObserver
+	
+	virtual void TimeOut();
+
+private:	// methods
+
+	CSocketWriter(CSocket& aSocket, MSocketController& aController, TBool aPriority);
+
+private:	// enums
+
+/**	
+	The state machine for the output stream.
+	@internalComponent		
+*/
+	enum TOutputState
+		{
+		/** The output stream is waiting for an observer to bind itself to it.
+		*/
+		EIdle			= 0,
+		/** The output stream is ready to send data to the socket. It is waiting
+			for the observer to request a data send.
+		*/
+		EPendingSend,
+		/** Data has been sent to the socket. The output stream is waiting for 
+			the socket to notify it that the write was successful.
+		*/
+		ESentData,
+		/**	The observer has requested that the connection be upgraded to secure.
+			Need to start the secure handshake.
+		*/
+		EStartSecureHandshake,
+		/** The secure handshake has completed successfully. Inform the observer
+			that the connection is now secure.
+		*/
+		ESecureHandshakeComplete,
+		/**	The observer has asked the output stream to close the socket.
+		*/
+		EClosing,
+		/**	The socket has been closed - data can no longer be sent to it.
+		*/
+		EClosed
+		};
+
+private:	// attributes
+
+/** The connected socket.
+*/
+	CSocket&					iSocket;
+
+/** The socket controller that owns the socket.
+*/
+	MSocketController&			iController;
+
+/**	The state of the output stream.
+*/
+	TOutputState				iState;
+
+/**	The observer for the output stream.
+*/
+	MOutputStreamObserver*		iObserver;
+ 
+//CHttpTimer Object
+	CHttpTimer*					iSendTimer;
+
+	TPtrC8						iHostName;
+
+public:	// attributes
+
+/** Logger handle
+*/
+	__FLOG_DECLARATION_MEMBER2
+
+	};
+
+#endif	// __CSOCKETWRITER_H__