email/imap4mtm/imaptransporthandler/inc/ctcptransportlayer.h
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imap4mtm/imaptransporthandler/inc/ctcptransportlayer.h	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,109 @@
+// 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 __CTCPTRANSPORTLAYER_H__
+#define __CTCPTRANSPORTLAYER_H__
+
+#include <e32base.h>
+#include <in_sock.h>
+
+#include "msocketfactory.h"
+#include "msocketcontrollerfactory.h"
+#include "msocketconnectorstore.h"
+#include "msocketcontrollerstore.h"
+#include "mcommsinfoprovider.h"
+
+// Forward declarations
+class CSocket;
+class CSocketConnector;
+class CSocketController;
+class MConnectionPrefsProvider;
+
+/**
+The CTcpTransportLayer class provides an implementation of the TCP transport 
+layer. This implementation uses a TCP/IP transport to provide input and output 
+streams to connected remote hosts.
+
+The CTcpTransportLayer class also provides the MSocketFactory, MSocketControllerFactory,
+MSocketConnectorStore, MSocketControllerStore, MCommsInfoProvider API's. These API's are
+used to supply input and output streams to remote hosts.
+
+@see MSocketFactory
+@see MSocketControllerFactory
+@see MSocketConnectorStore
+@see MSocketControllerStore
+@see MCommsInfoProvider
+@internalTechnology
+@prototype
+*/
+class CTcpTransportLayer : public CBase,
+						   public MSocketFactory,
+						   public MSocketControllerFactory,
+						   public MSocketConnectorStore,
+						   public MSocketControllerStore,
+						   public MCommsInfoProvider
+	{						 
+public:
+	static CTcpTransportLayer* NewL(MConnectionPrefsProvider& aConnectionPrefsProvider);
+	virtual ~CTcpTransportLayer();
+	
+private:
+	
+	CTcpTransportLayer(MConnectionPrefsProvider& aConnectionPrefsProvider);
+	void ConstructL();
+	
+	MSocketControllerFactory& SocketControllerFactory();
+	MSocketConnectorStore& SocketConnectorStore();
+	MSocketControllerStore& SocketControllerStore();
+	MCommsInfoProvider& CommsInfoProvider();
+
+	// from MSocketFactory
+	virtual MSocketConnector& ConnectL(MSocketConnectObserver& aObserver, const TDesC8& aRemoteHost, TUint16 aRemotePort);
+
+	// from MSocketControllerFactory
+	virtual CSocketController* CreateSocketControllerLC(CSocket* aConnectedSocket);
+	virtual void AddToStoreL(CSocketController* aSocketController);
+
+	// from MSocketConnectorStore
+	virtual void ConnectionCompleted(CSocketConnector& aOrphanedSocketConnector);
+
+	// from MSocketControllerStore
+	virtual void SocketControllerShutdown(CSocketController& aOrphanedSocketController);
+
+	// from MCommsInfoProvider
+	virtual RSocketServ& SocketServer();
+	virtual TProtocolDesc& ProtocolDescription();
+	virtual RConnection& Connection();
+	virtual void SecurityPreferences(TBool& aDialogPrompt);
+	virtual TBool OwnsConnection();
+
+private:
+	/** The connection prefs provider */
+	MConnectionPrefsProvider&			iConnectionPrefsProvider;
+	/** The socket server session. */	
+	RSocketServ							iSocketServer;
+	/** The protocol description. */
+	TProtocolDesc						iProtocolDescription;
+	/** The network connection. */
+	RConnection*						iConnection;
+	/** Does transport layer own SockServ session. */
+	TBool								iOwnsConnection;
+	/** The socket connector store. */
+	RPointerArray<CSocketConnector>		iConnectorStore;
+	/** The socket controller store. */
+	RPointerArray<CSocketController>	iControllerStore;
+	};
+
+#endif //	__CTCPTRANSPORTLAYER_H__
\ No newline at end of file