datacommsserver/esockserver/inc/ss_flowbinders.h
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/inc/ss_flowbinders.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,276 @@
+// Copyright (c) 1997-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:
+//
+
+#if !defined(__SS_FLOWBINDERS_H__)
+#define __SS_FLOWBINDERS_H__
+
+#include <comms-infras/ss_common.h>
+#include <es_enum.h>
+#include <e32base.h>
+#include <comms-infras/es_protbinder.h>
+
+#include <comms-infras/ss_flowbinders_internal.h>
+
+class RMBufChain;
+class MProvdSecurityChecker;
+
+namespace ESock
+{
+
+class MUpperDataReceiver;
+class MUpperControl;
+class MLowerDataSender;
+class MLowerControl;
+
+class MSessionDataNotify;
+class MSessionControlNotify;
+class MSessionData;
+class MSessionControl;
+
+class CSubConnectionFlowBase;
+
+const TInt KErrBindersInvalid = -17205;	//The recepient of this error must abandoned its binders
+                                        //as they have become invalid
+
+// =========================================================================================
+
+class MSessionDataNotify
+/** Abstract base class used by a CSubConnectionFlowBase to support session binders, through its 
+iSocket member, to notify the socket server that various events have occurred. 
+
+The class provides several up-call member functions.
+
+All up-calls on an MSocketNotify should be made in the context of the socket 
+server's thread - i.e. the thread which called NewSAPL() on the protocol. 
+
+@publishedPartner
+@released Since v9.3 */
+	{
+public:
+	
+	/**
+	Indicates that new data is available on a service access point
+
+	For a stream-oriented protocol aCount should be a byte count; for datagram-oriented 
+	sockets aCount should be a datagram count.
+	
+	@note aCount is the amount of new data, not the total amount of data waiting 
+	to be read.
+	
+	@param aCount The amount of new data. A value of KNewDataEndofData indicates 
+	that the socket is in a half-closed state and will receive no more data. Any subsequent 
+	reads will complete with KErrEof and a length of 0. */
+	virtual void NewData(TUint aCount) = 0;
+	/** Indicates that new buffer space is available on a service. */
+	virtual void CanSend() = 0;
+	};
+
+class MSessionControlNotify
+/** Abstract base class used by a CSubConnectionFlowBase to support session binders, through its 
+iSocket member, to notify the socket server that various events have occurred. 
+
+The class provides several up-call member functions.
+
+All up-calls on an MSocketNotify should be made in the context of the socket 
+server's thread - i.e. the thread which called NewSAPL() on the protocol. 
+
+@publishedPartner
+@released Since v9.3 */
+	{
+public:
+	enum TDelete 
+		{
+		/** Delete SAP */	
+		EDelete,
+		/** Don't delete SAP */
+		EDetach
+		};
+	enum TOperationBitmasks
+		{
+		/** An error has occurred which affects Send() operations */
+		EErrorSend=0x0000001,  
+
+		/** An error has occurred which affects Receive() operations. */
+		EErrorRecv=0x0000002,
+
+		/** An error has occurred which affects Connect() operations */
+		EErrorConnect=0x0000004,
+
+		/** An error has occurred which affects Close() operations */
+		EErrorClose=0x00000008,
+
+		/** An error has occurred which affects Ioctl() operations */
+		EErrorIoctl=0x00000010,
+
+		/** An error has occurred which only requires to CompleteConnect beeing called **/
+		EErrorCompleteConnect=0x00000020,
+			/** An error has occurred which affects SetLocalName() operations */
+		EErrorCompleteSetLocalName=0x00000040,
+
+		/** A fatal error has occurred */
+		EErrorFatal=0x10000000,
+		
+		/** An error has occurred which affects all operations */
+		EErrorAllOperations=0x7fffffff,
+
+#if defined(SYMBIAN_NETWORKING_LEGACY_COMPATIBILITY_SUPPORT)
+		/** A pseudo-error: the SAP is requesting a legacy compatibility feature as specified
+		by the error code. This flag cannot be combined with any others
+		*/
+		EErrorLegacySupportRequest = 0x40000000,
+#endif
+		};
+	/** Indicates that a connection attempt has completed successfully (for active opens).
+	 
+	There are four versions of this up-call: two are for active opens and two are for passive 
+	opens. Both active and passive versions support a variant carrying user connection 
+	data for protocols which support it.
+	
+	@note A connection-less protocol should never call the ConnectComplete() up-calls.
+	@note A protocol should keep a count of sockets which have called ConnectComplete() 
+	but have not had Start() called. Sockets in this state have their Error() 
+	and NewData() calls deferred until Start() is called.*/
+	virtual void ConnectComplete() = 0;
+	/** Indicates that a connection attempt has completed successfully (for active opens).
+	 
+	There are four versions of this up-call: two are for active opens and two are for passive 
+	opens. Both active and passive versions support a variant carrying user connection 
+	data for protocols which support it.
+	
+	@note A connection-less protocol should never call the ConnectComplete() up-calls.
+	@note A protocol should keep a count of sockets which have called ConnectComplete() 
+	but have not had Start() called. Sockets in this state have their Error() 
+	and NewData() calls deferred until Start() is called.
+	
+	@param aConnectData Connect data (if supported).
+	*/
+	virtual void ConnectComplete(const TDesC8& aConnectData) = 0;
+	/** Indicates that a connection attempt has completed successfully (for passive opens). 
+	
+	There are four versions of this up-call: two are for active opens and two are for passive 
+	opens. Both active and passive versions support a variant carrying user connection 
+	data for protocols which support it.
+	
+	The versions of ConnectComplete() for passive opens carry a new SSP (socket service 
+	provider, or SAP) for the newly created socket. A new socket will then be linked up to 
+	the SSP and data transfer can take place. The original socket stays listening.
+	
+	@note A connection-less protocol should never call the ConnectComplete() up-calls.
+	@note A protocol should keep a count of sockets which have called ConnectComplete() 
+	but have not had Start() called. Sockets in this state have their Error() 
+	and NewData() calls deferred until Start() is called.
+	
+	@param aSSP The new SSP for passive opens. 
+	*/
+    virtual void ConnectComplete(CSubConnectionFlowBase& aSSP) = 0;
+	/** Indicates that a connection attempt has completed successfully (for passive opens). 
+	
+	There are four versions of this up-call: two are for active opens and two are for passive 
+	opens. Both active and passive versions support a variant carrying user connection 
+	data for protocols which support it.
+	
+	The versions of ConnectComplete() for passive opens carry a new SSP (socket service 
+	provider, or SAP) for the newly created socket. A new socket will then be linked up to 
+	the SSP and data transfer can take place. The original socket stays listening.
+	
+	@note A connection-less protocol should never call the ConnectComplete() up-calls.
+	@note A protocol should keep a count of sockets which have called ConnectComplete() 
+	but have not had Start() called. Sockets in this state have their Error() 
+	and NewData() calls deferred until Start() is called.
+	
+	@param aSSP The new SSP for passive opens. 
+	@param aConnectData Connect data (if supported). */
+	virtual void ConnectComplete(CSubConnectionFlowBase& aSSP,const TDesC8& aConnectData) = 0;
+	/** Indicates that the SAP has finished closing down. 
+	
+	This up-call is the response to a Shutdown(). A connection-oriented protocol should call 
+	CanClose() when it has terminated communications with the remote host. Protocols can call 
+	CanClose() from within their Shutdown() code. After CanClose() has been called, an SAP may 
+	be deleted by the socket server.
+	
+	@note The protocol must not access the CSubConnectionFlowBase object after calling CanClose().
+	@param aDelete Delete SAP. 
+	*/
+	virtual void CanClose(MSessionControlNotify::TDelete aDelete=MSessionControlNotify::EDelete) = 0;
+	/** Indicates that the SAP has finished closing down. 
+	
+	This up-call is the response to a Shutdown(). A connection-oriented protocol should call 
+	CanClose() when it has terminated communications with the remote host. Protocols can call 
+	CanClose() from within their Shutdown() code. After CanClose() has been called, an SAP may 
+	be deleted by the socket server.
+	
+	@note The protocol must not access the CSubConnectionFlowBase object after calling CanClose().
+	@param aDisconnectData Any user data carried on the disconnect frame.
+	@param aDelete Delete SAP. 
+	*/
+	virtual void CanClose(const TDesC8& aDisconnectData,MSessionControlNotify::TDelete aDelete=MSessionControlNotify::EDelete) = 0;
+	/** Tells the socket server that an error state has arisen within the protocol. 
+	
+	It should not be used to report programmatic errors, either in the protocol 
+	itself or the socket server (a panic should be used in these cases). When 
+	Error() is called on a connection-oriented socket, the socket is moved into 
+	a dead state which denies user access to it.
+	
+	@param anError KErrNone or another of the system-wide error codes. 
+	@param anOperationMask A bitmask of TOperationBitmasks values specifying which 
+	@return error code translated by the object
+	pending operations are affected by the Error up-call. */
+	virtual TInt Error(TInt anError,TUint anOperationMask=MSessionControlNotify::EErrorAllOperations) = 0;
+	/** Indicates that the other end of a connection has disconnected.
+	
+	This is analogous to CanClose(), but in this case the other end initiated it. 
+	
+	Once the client has called Shutdown() it is	illegal to call Disconnect(). Instead, 
+	CanClose() or Error(KErrDisconnected) should be called.
+	*/
+	virtual void Disconnect(void) = 0;
+	/** Indicates that the other end of a connection has disconnected.
+	
+	This is analogous to CanClose(), but in this case the other end initiated it. 
+	
+	Once the client has called Shutdown() it is	illegal to call Disconnect(). Instead, 
+	CanClose() or Error(KErrDisconnected) should be called. 
+	
+	@param aConnectData User data in the disconnect frame.
+	*/
+	virtual void Disconnect(TDesC8& aDisconnectData) = 0;
+	/** Indicates that the currently pending Ioctl has completed.
+	
+	The parameter aBuf is protocol defined - in fact it is defined by the specific 
+	Ioctl.
+	
+	@param aBuf Any data requested by the Ioctl operation. */
+	virtual void IoctlComplete(TDesC8* aBuf) = 0;
+	/** Indicates that the other end of a passively opened connection which has not been
+	accepted yet and is waiting in the accept queue has been disconnected.
+	
+	This is analogous to Disconnect(), but is directed towards the listening socket
+	so that it can remove the SAP from the accept queue. 
+	
+	It is illegal to call DisconnectFromListener twice.
+	*/
+	virtual void DisconnectFromListener(CSubConnectionFlowBase& aSSP) = 0;
+
+	/**
+	Indicates that the set local name sequence is complete. 
+	*/
+    virtual void SetLocalNameComplete() = 0;
+
+
+	};
+} //namespace ESock
+
+#endif //__SS_FLOWBINDERS_H__
+