applayerpluginsandutils/httpprotocolplugins/httpclient/chttpclienthandler.h
changeset 0 b16258d2340f
child 18 5f1cd966e0d9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/httpprotocolplugins/httpclient/chttpclienthandler.h	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,133 @@
+// 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:
+//
+
+#ifndef __CHTTPCLIENTHANDLER_H__
+#define __CHTTPCLIENTHANDLER_H__
+
+#include <e32base.h>
+#include <http/framework/cprotocolhandler.h>
+#include <http/framework/mrxdataobserver.h>
+#include <http/framework/logging.h>
+
+#include "mconnectionprefsprovider.h"
+#include "mhttpbatchingpropertiescallback.h"
+#include "timerlogger.h"
+
+class CHttpTransportLayer;
+class CHttpConnectionInfo;
+class CHttpConnectionManager;
+class CX509Certificate;
+class CX500DistinguishedName;
+class TCertInfo;
+class TDNInfo;
+class CHttpPipelineFallback;
+
+class CHttpClientHandler : public CProtocolHandler, 
+						   public MConnectionPrefsProvider,
+						   public MRxDataObserver,
+						   public MHttpBatchingPropertiesCallback,
+						   public MProtHandlerInterface
+
+	{
+public:
+
+	static CHttpClientHandler* NewL(TAny* aSession);
+	virtual ~CHttpClientHandler();
+
+private:	// methods from CProtocolHandler
+	virtual void MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
+	virtual TInt SessionServerCert(TCertInfo& aServerCert);
+	virtual TInt TransactionServerCert(TCertInfo& aServerCert, RHTTPTransaction aTransaction);
+	virtual void CreateCodecL();
+	virtual CProtTransaction* CreateProtTransactionL(RHTTPTransaction aTransaction) ;
+	virtual TBool ServiceL(CProtTransaction& aTrans);
+	virtual void ClosedTransactionHook(CProtTransaction* aTrans);
+	virtual void CancelTransactionHook(CProtTransaction& aTransaction);
+	virtual void NotifyNewRequestBodyPart(CProtTransaction& aTransaction);
+	virtual void GetInterfaceL(TUid aInterfaceId, MProtHandlerInterface*& aInterfacePtr);
+	
+private:	// methods from MConnectionPrefsProvider
+
+	virtual TBool SupplyCommsConnection( RConnection*& aConnectionPtr );
+	virtual TBool SupplySocketServerHandle ( TInt& aSocketServerHandle );
+	virtual void SetCommsConnectionL( RConnection* aConnectionPtr );
+	virtual void SetSocketServerHandleL ( TInt aSocketServerHandle );
+	virtual void GetSecurityPrefs( TBool& aDialogPrompt, MSecurityPolicy*& aSecurityPolicy );
+	virtual TBool ImmediateSocketShutdown();
+	virtual TInt SessionId();
+	virtual TInt GetRecvBufferSize();
+
+private:	// methods from MRxDataObserver
+	
+	virtual void SetStatusL(CRxData& aRxData, TInt aStatus);	
+
+private:	// methods from MHttpBatchingPropertiesCallback
+
+	virtual TInt GetMaxBatchingBufferSize();
+	
+private:	// methods from MProtHandlerInterface
+
+	virtual const CCertificate* TransactionServerCert(RHTTPTransaction aTransaction);
+	virtual const CCertificate*  SessionServerCert();
+
+private:
+
+	CHttpClientHandler(RHTTPSession aSession);
+	void ConstructL();	
+	
+	CHttpConnectionInfo* PrepareTransactionL(RHTTPTransaction aTrans, TBool& aNeedTunnel, TBool& aCanPipeline);
+	void CreateRequestUriL(TInt aMethodIndex, RHTTPTransaction aTrans, TPtrC8& aHost, TInt& aPort);
+	TBool SetHostHeaderL(RHTTPTransaction aTrans, const TDesC8& aHost, TInt aPort);
+	void AddTunnelInfoL(RHTTPTransaction aTrans, const TDesC8& aHost, TInt aPort);
+	TBool SelectConnectionManagerL(const CHttpConnectionInfo& aConnectionInfo, RHTTPTransaction aTrans, TBool aCanPipeline, CHttpConnectionManager *&aManager);
+	CHttpConnectionManager* SelectTunnelConnectionL(const CHttpConnectionInfo& aConnectionInfo, RHTTPTransaction aTrans, TBool aCanPipeline);
+	TInt MaxNumConnectionManagers() const;
+	void SetupProxyInformation(RHTTPTransaction aTrans);
+	TBool CheckPipelineSupport(RHTTPTransaction aTrans);
+	
+	void GetCipherSuiteL(RHTTPTransaction aTransaction);
+	
+	TInt MaxNumTransactionsToPipeline() const;
+	
+	void __RecordConnectionManagerCreationL();
+	void EnsureStrictConnectMethodHeaders(RHTTPTransaction aTransaction);
+	TInt SetStatus(CRxData& aRxData, TInt aStatus);
+	
+#if defined (_DEBUG)
+	TInt GetConnectionID(const CHttpConnectionManager* aConnectionManager);
+	TInt GetConnectionID(const RHTTPTransaction &aTrans);
+#endif
+
+	static void GetCertInfoL(const CX509Certificate& aSource, TCertInfo& aDest);
+	static void GetDNInfo(const CX500DistinguishedName& aSource, TDNInfo& aDest);
+	
+private:
+	TBool                       iEnableOptimalPipeline;
+	TBool						iUseProxy;
+	TInt 						iRecvBufferSize;
+	mutable TInt 				iMaxNumConnectionManagers;
+	mutable TInt				iMaxNumTransactionsToPipeline;
+	CHttpTransportLayer*		iTransportLayer;
+	CHttpPipelineFallback*      iPipelineFallback;
+	TBool*						iSessionClosingPtr; // Not owned, set in ConstructL
+	const TStringTable&            iStringTable;
+	RStringF					iProxyAddress;
+	RPointerArray<CHttpConnectionManager>	iConnectionManagers;
+	__FLOG_DECLARATION_MEMBER2
+	
+	};
+	
+#endif	// __CHTTPCLIENTHANDLER_H__
+