applayerpluginsandutils/httpprotocolplugins/httpclient/chttpclienttransaction.cpp
--- /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;
+ }