--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imap4mtm/imaptransporthandler/inc/csocketwriter.h Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,103 @@
+// Copyright (c) 2006-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 "moutputstream.h"
+#include "cimapobservabletimer.h"
+
+// Forward declarations
+class CSocket;
+class MOutputSocketObserver;
+class MSocketController;
+
+/**
+The CSocketWriter class encapsulates the writing functionality and behaviour
+for a connected socket. It implements the MOutputStream API.
+
+@see MOutputStream
+@internalTechnology
+@prototype
+*/
+class CSocketWriter : public CActive, public MOutputStream, public MImapTimerObserver
+ {
+public:
+ static CSocketWriter* NewL(CSocket& aSocket, MSocketController& aController);
+ virtual ~CSocketWriter();
+
+ void SocketClosed(TInt aError);
+ virtual void SecureClientReq(const TDesC8& aSSLDomainName);
+
+private:
+ CSocketWriter(CSocket& aSocket, MSocketController& aController);
+ void ConstructL();
+ void CompleteSelf();
+
+ // from MOutputStream
+ virtual void Bind(MOutputStreamObserver& aObserver, TInt aLogId);
+ virtual void BindSecure(MOutputStreamSecureObserver& aObserver);
+ virtual void SendDataReq(const TDesC8& aBuffer, TInt aIdleTime = 0);
+ virtual void Close();
+
+ // from CActive
+ virtual void RunL();
+ virtual void DoCancel();
+ virtual TInt RunError(TInt aError);
+ void CloseStreams(TInt aError);
+ // from MImapTimerObserver
+ void OnTimerL(const CImapObservableTimer& aSourceTimer);
+
+private:
+ /** The state machine for the output stream. */
+ 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,
+ /** Start the secure handshake procedure. */
+ EStartSecureHandshake,
+ /** Secure handshake has completed. */
+ 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:
+ /** 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;
+ /** The observer for the output stream for secure socket notifications. */
+ MOutputStreamSecureObserver* iSecureObserver;
+ /** SSL domain name to use for certificate validation. */
+ TPtrC8 iSSLDomainName;
+ /** Log file identifier */
+ TInt iLogId;
+ CImapObservableTimer* iTimer;
+ };
+
+#endif // __CSOCKETWRITER_H__
\ No newline at end of file