applayerpluginsandutils/httpprotocolplugins/httpclient/chttpclienttransaction.cpp
changeset 0 b16258d2340f
child 18 5f1cd966e0d9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/httpprotocolplugins/httpclient/chttpclienttransaction.cpp	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,112 @@
+// 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:
+//
+
+#include <http.h>
+#include "chttpclienttransaction.h"
+#include "chttprequestcomposer.h"
+#include "chttpresponseparser.h"
+#include "chttpconnectionmanager.h"
+
+CHttpClientTransaction* CHttpClientTransaction::NewL(RHTTPTransaction aTransaction)
+	{
+	CHttpClientTransaction* self = new (ELeave) CHttpClientTransaction(aTransaction);
+	return self;	
+	}
+	
+CHttpClientTransaction::~CHttpClientTransaction()
+	{
+	}
+
+CHttpClientTransaction::CHttpClientTransaction(RHTTPTransaction aTransaction)
+: CProtTransaction(aTransaction), iStringTable(RHTTPSession::GetTable())
+	{
+	}
+	
+void CHttpClientTransaction::SetConnectionManager(CHttpConnectionManager& aConnectionManager)
+	{
+	__ASSERT_DEBUG( iConnectionManager == NULL, User::Invariant() );
+	
+	// A connection manager has been supplied - add this object to it.	
+	iConnectionManager = &aConnectionManager;
+	}
+
+CHttpConnectionManager* CHttpClientTransaction::ConnectionManager() const
+	{
+	return iConnectionManager;
+	}
+
+void CHttpClientTransaction::RemoveConnectionManager()
+	{
+	iConnectionManager = NULL;
+	}
+	
+/*
+ *	Methods from CProtTransaction
+ */
+
+void CHttpClientTransaction::CreateTxDataL()
+	{
+	__ASSERT_DEBUG( iConnectionManager != NULL, User::Invariant() );
+
+	delete iTxData;
+	iTxData = NULL;
+	iTxData = CHttpRequestComposer::NewL(*this, *iConnectionManager);
+	}
+	
+void CHttpClientTransaction::CreateRxDataL(MRxDataObserver& aObserver)
+	{
+	__ASSERT_DEBUG( iConnectionManager != NULL, User::Invariant() );
+
+	delete iRxData;
+	iRxData = NULL;
+	iRxData = CHttpResponseParser::NewL(*this, aObserver, *iConnectionManager);
+	}
+	
+void CHttpClientTransaction::IncRetryCount ()
+	{
+	++iRetryCount;		
+	}
+
+TBool CHttpClientTransaction::RetryNeeded ()
+	{
+	const TInt KMaxRetryCount = 3;	
+	return ( ( iTransactionState != ECancelled ) && 
+			( iTransactionState != ECompleted ) && 
+			( iRetryCount < KMaxRetryCount) );
+	}
+	
+TBool CHttpClientTransaction::NeedDisconnectNotification () const
+    {
+    TBool needDisconnectNotification = EFalse;
+	RHTTPTransaction myTransaction = Transaction (); 
+	RHTTPSession mySession = myTransaction.Session ();
+	RStringPool myStringPool ( mySession.StringPool () );
+	RStringF notifyOnDisconnect = myStringPool.StringF( HTTP::ENotifyOnDisconnect, iStringTable );
+
+	RHTTPPropertySet transactionProperties = myTransaction.PropertySet();
+	RHTTPPropertySet sessionProperties = mySession.ConnectionInfo();
+    
+	THTTPHdrVal hdrVal;
+	
+	// Check the transaction properties for the disconnect notification
+	// If it is set then it should be used.
+	if ( transactionProperties.Property ( notifyOnDisconnect, hdrVal ) || sessionProperties.Property ( notifyOnDisconnect, hdrVal ) )	
+		{
+		__ASSERT_DEBUG( hdrVal.Type() == THTTPHdrVal::KStrFVal, User::Invariant() );
+		
+		needDisconnectNotification = ( hdrVal.StrF().Index(iStringTable) == HTTP::EEnableDisconnectNotification );
+		}
+	return needDisconnectNotification;	
+	}