upnp/upnpstack/dlnawebserver/inc/upnpretrywrite.h
changeset 0 f5a58ecadc66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upnp/upnpstack/dlnawebserver/inc/upnpretrywrite.h	Tue Feb 02 01:12:20 2010 +0200
@@ -0,0 +1,189 @@
+/** @file
+* Copyright (c) 2005-2006 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 C_CUPNPRETRYWRITE_H
+#define C_CUPNPRETRYWRITE_H
+
+// INCLUDES
+
+#include <e32base.h>
+#include <in_sock.h>
+
+
+static const TInt KWriteErrorsMax = 5;
+static const TInt KWaitWithSocketWrite = 1000000;
+
+
+// CLASS DECLARATION
+/**
+* An interface for retry write
+*
+*  @since Series60 3.1
+*/
+class MUpnpRetryWriteObserver
+{
+	public:
+
+        /**
+        * RetryWriteSucceed
+        * A callback function for succeed writing.
+        * @since Series60 3.1
+        */
+		virtual void RetryWriteSucceed() = 0;
+
+        /**
+        * RetryWriteFailL
+        * A callback function for failed writing.
+        * @since Series60 3.1
+		* @param aError Error code
+        */
+		virtual void RetryWriteFailL( TInt aError ) = 0;
+};
+
+
+NONSHARABLE_CLASS (CUpnpRetryWrite) : CActive
+{
+	public:
+		
+	    /**
+	    * Constructor function.
+	    * @since Series60 3.1
+	    * @return A new CUpnpRetryWrite instance.
+	    **/
+		static CUpnpRetryWrite* NewL( CUpnpTcpSession&, RSocket&, MUpnpRetryWriteObserver*, TThreadPriority );
+
+        /**
+        * Destructor.
+        */
+		~CUpnpRetryWrite();
+
+        /**
+        * IssueWriteRetry
+        * Starts retry procedure
+        * @since Series60 3.1
+        */
+		void IssueWriteRetry();
+		
+        /**
+        * IsStarted
+        * Checks if the retrying procedure is started
+        * @since Series60 3.1
+        * @return ETrue when retrying procedure is started, else return EFalse
+        */
+		TBool IsStarted();
+		
+	private:
+        /**
+        * Constructor
+        */
+		CUpnpRetryWrite(CUpnpTcpSession&, RSocket&, MUpnpRetryWriteObserver*, TThreadPriority );
+
+        /**
+        * ConstructL
+        */
+		void ConstructL();
+	
+        /**
+        * WriteToSocket
+        * Starts writing null descriptor to the socket
+        * @since Series60 3.1
+        */
+		void WriteToSocket();
+
+        /**
+        * PassErrorToObserverL
+        * Retruns the error code to the observer
+        * @since Series60 3.1
+		* @param aError Returned error code
+        */
+		void PassErrorToObserverL( TInt aError );
+	
+        /**
+        * RunL
+        * Active object state machine.
+        * @since Series60 2.0
+        */
+		void RunL();
+
+        /**
+        * DoCancel
+        * Cancel outstanding request(s) and reset the iActive flag.
+        * @since Series60 2.0
+        */
+		void DoCancel();
+
+        /**
+        * RunError
+        * RunError in case RunL leaves.
+        * @since Series60 2.0
+        */
+		TInt RunError( TInt aError );
+			
+	
+        /**
+        * TInternalState
+        * Internal states.
+        * @since Series60 3.1
+        */
+    enum TInternalState
+        {
+        EUnknown,
+        EWaiting,
+        EWriting
+        };
+	
+	private:
+
+	    /**
+	    * Reference to session that owns the writer.
+	    * Session is request writing and is notified when it's finished or
+	    * errors occure, not owned.
+	    */
+		CUpnpTcpSession& iSession;
+
+	    /**
+	    * Socket used for writing data, not owned.
+	    */
+		RSocket& iSocket;
+	
+	    /**
+	    * Interface observer object.
+	    */
+		MUpnpRetryWriteObserver* iObserver;
+
+	    /**
+	    * Internal state variable.
+	    */
+		TInternalState iInternalState;
+	
+	    /**
+	    * Internal timer.
+	    */
+		RTimer iWriteTimer;
+
+	    /**
+	    * Errors coumter.
+	    */
+		TInt iWriteErrorsCount;
+		
+};
+
+
+
+#endif
+