applayerpluginsandutils/httpprotocolplugins/WspProtocolHandler/CWspProxyInfoProvider.h
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/httpprotocolplugins/WspProtocolHandler/CWspProxyInfoProvider.h	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,387 @@
+// Copyright (c) 2001-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 __CWSPPROXYINFOPROVIDER_H__
+#define __CWSPPROXYINFOPROVIDER_H__
+
+// System includes
+#include <e32base.h>
+#include <wsp/mwspproxyinfoprovider.h>
+#include <wsp/wsptypes.h>
+#include <http/rhttpsession.h>
+
+// User includes
+#include "tproxyinfo.h"
+
+/** The CWspProxyInfoProvider class implements the MWspProxyInfoProvider API. 
+	The proxy information that is provided is obtained either from the HTTP
+	session properties or from the Symbian OS Comms Database.
+
+	The EWspProxyAddress property must be set in the HTTP session for the proxy
+	info not to be taken from the Comms Database. The other properties 
+	(described below) are optional. If these have been not set then the 
+	following defaults will bw applied; the session will be unsecured CO over IP.
+
+	The following HTTP properties define the proxy info;
+
+	1) EWspProxyAddress	- a property of type RStringF that contains a bearer
+	independent address.
+
+	2) EWspBearer		- a property of type RStringF which should have a value
+	of EWspIp for an IP (v4) bearer or a value of EWspSMS for an 8-bit WAP SMS
+	bearer
+
+	3) EWspSecurity		- a property of type RStringF which should contain the
+	values EWspUseWtls, for a WTLS secured WSP session, or EWspDoNotUseWtls, for
+	a non-secured WSP session.
+
+	4) EWspSessionType	- a property of type RStringF that can have either the
+	value EWspConnectionOriented for a CO session and a value of 
+	EWspConnectionless for a CL session.
+
+	For the case of an IP bearer, the following additional properties are 
+	required to be defined;
+
+	a) EWspLocalPort	- a property of type TInt that contains the local port
+	number. Defaulted at 0, which means that the transport handler will allocate
+	an appropriate value.
+
+	b) EWspRemotePort	- a property of type TInt that contains the remote port
+	number. Default value depends of the security status of the session.
+
+	For the case of an SMS bearer, the following additional property is 
+	required to be defined;
+
+	a) EWspServiceNumber	- a property of type RStringF that should contain 
+	the service centre number for the SMS bearer.
+*/
+//##ModelId=3BBDAFC80354
+class CWspProxyInfoProvider : public CBase, public MWspProxyInfoProvider
+	{
+public:	// Methods
+
+/**	
+	Static factory constructor.
+	@since			7.0
+	@param			aSession	The HTTP session in use.
+	@return			A pointer to a fully initialised object.
+*/
+	//##ModelId=3C4C419D0014
+	static CWspProxyInfoProvider* NewL(RHTTPSession aSession);
+
+/**Standard destructor.
+	@since	7.0
+*/
+	//##ModelId=3C4C419D0000
+	~CWspProxyInfoProvider();
+
+/**Updates the proxy info. If the client has specified 
+						proxy info in the session properties then that is the 
+						proxy info that is used. If no proxy info has been 
+						defined in the session properties, then the default WAP
+						proxy in the Comms Database is used.
+	@since			7.0
+	@leave		The function will leave if the proxy info cannot be obtained
+					from either the Comms DB or from the HTTP session properties.
+	@post			The proxy info has been updated.
+*/
+	//##ModelId=3C4C419C03CA
+	void UpdateProxyInfoL();
+
+/**Updates the proxy info to use the redirected proxy
+						address. If more than one address is given in 
+						aRedirectedAddresses, then only the first one is used.
+						A flag is set indicating that the proxy info should not
+						be updated on the next call to UpdateProxyInfoL.
+	@since			7.0
+	@leave		The function will leave if the redirected address info cannot
+					be extracted from the supplied data.
+	@param			aRedirectedAddresses	A reference to a structure containing
+											the parsed alternate addresses for the 
+											redirected proxy.
+	@post			The proxy information has been updated to use the redirected
+					proxy address. The next call to UpdateProxyInfoL will not 
+					cause the proxy info to be updated.
+*/									
+	//##ModelId=3C4C419C0384
+	void SetTemporaryRedirectedProxyL(TWspRedirectedAddress& aRedirectAddress);
+
+/**Updates the proxy info to use the redirected proxy
+						address. If more than one address is given in 
+						aRedirectedAddresses, then only the first one is used.
+						A flag is set indicating that the proxy info should not
+						be updated on the next call to UpdateProxyInfoL. Also,
+						the session properties are updated with the new proxy 
+						info.
+	@since			7.0
+	@leave		The function will leave if the redirected address info cannot
+					be extracted from the supplied data. It will also leave if
+					the redirected proxy info cannot be set in the HTTP session
+					properties.
+	@param			aRedirectedAddresses	A reference to a structure containing
+											the parsed alternate address for the 
+											redirected proxy.
+	@post			The proxy information has been updated to use the redirected
+					proxy address. The next call to UpdateProxyInfoL will not 
+					cause the proxy info to be updated. The session properties 
+					are updated with the new proxy info.
+*/									
+	//##ModelId=3C4C419C0348
+	void SetPermanentRedirectedProxyL(TWspRedirectedAddress& aRedirectAddress);
+
+/**Checks the current proxy info against the proxy info 
+						specified by the client either through the HTTP session
+						properties or the Comms Database. Also updates the 
+						current proxy info if there has been a change. A flag is
+						set indicating that the proxy info should not be updated
+						on the next call to UpdateProxyInfoL.
+	@since			7.0
+	@leave		The function will leave if the proxy info cannot be obtained
+					from either the Comms DB or from the HTTP session properties.
+	@return			A boolean value of ETrue if the current proxy info defers 
+					from the client specified proxy info.
+	@post			The proxy info has been updated. The next call to 
+					UpdateProxyInfoL will not cause the proxy info to be updated.
+*/
+	//##ModelId=3C4C419C032A
+	TBool ProxyInfoChangedAndUpdateL();
+
+/**Ensures that the next call to UpdateProxiInfoL actually 
+						does an update.
+	@since			7.0
+	@post			The proxy info is unlocked so that the next call to 
+					UpdateProxiInfoL actually does an update.
+*/
+	//##ModelId=3C4C419C0316
+	void UnlockProxyInfo();
+
+/**Removes all proxy information and closes the related resources.
+	@since			7.0
+	@post			The proxy info is removed; strings associated with it are closed.
+*/
+	//##ModelId=3C4C419C0302
+	void ResetProxyInfo();
+
+private:	// Methods from MWspProxyInfoProvider
+
+/**@see			MWspProxyInfoProvider
+*/
+	//##ModelId=3C4C419C02D0
+	virtual const TDesC8& ProxyAddress() const;
+
+/**@see			MWspProxyInfoProvider
+*/
+	//##ModelId=3C4C419C028A
+	virtual TUint16 RemotePort() const;
+
+/**@see			MWspProxyInfoProvider
+*/
+	//##ModelId=3C4C419C0262
+	virtual TUint16 LocalPort() const;
+
+/**@see			MWspProxyInfoProvider
+*/
+	//##ModelId=3C4C419C0230
+	virtual TWspBearer Bearer() const;
+
+/**@see			MWspProxyInfoProvider
+*/
+	//##ModelId=3C4C419C0207
+	virtual const TDesC8& ServiceCentreNumber() const;
+
+/**@see			MWspProxyInfoProvider
+*/
+	//##ModelId=3C4C419C01DF
+	virtual TWspSession WspSessionService() const;
+
+/**@see			MWspProxyInfoProvider
+*/
+	//##ModelId=3C4C419C01C1
+	virtual TBool SecureConnection() const;
+
+private:	// Methods
+
+/**First phase constructor.
+	@since			7.0
+*/
+	//##ModelId=3C4C419C018F
+	CWspProxyInfoProvider(RHTTPSession aSession);
+
+/**Sets the currect proxy info to be that given the redirected
+						address. Any fields that are not set in the redirected
+						address are kept from the current proxy info.
+	@since			7.0
+	@leave		The function will leave if the redirected address info cannot
+					be extracted from the supplied data.
+	@param			aRedirectedAddress		A structure containing a single parsed
+											alternate address for the redirected proxy.
+	@post			The current proxy info contains the redirected proxt info.
+*/
+	//##ModelId=3C4C419C015D
+	void ChangeToRedirectedProxyInfoL(TWspRedirectedAddress& aRedirectAddress);
+	
+/**Extracts the specified proxy info. Checks the HTTP 
+						session properties for proxy info. If the proxy info has
+						not been completely specified in the properties then the
+						default WAP proxy in the Comms Database is used.
+	@since			7.0
+	@leave		The function will leave with KErrNotSupported if the
+					Connectionless session service has been specified. It will 
+					also leave with KWspErrServiceNumberNotDefined if an SMS 
+					bearer has been specified and there is no Service Centre
+					number defined. The function will leave if the proxy info
+					cannot be extracted from the Comms DB.
+	@return			A TProxyInfo object that contains the proxy info.
+*/
+	//##ModelId=3C4C419C013F
+	TProxyInfo GetProxyInfoL() const;
+
+private:	// Static methods
+
+/**Extracts the WSP session type from the HTTP session properties set. A default
+	value of EWspConnectionOriented is given if the connection type property is 
+	not given.
+	@since			7.0
+	@param			aConnInfo		The session properties for the current HTTP 
+									session.
+	@param			aStringPool		The current string pool.
+	@return			The WSP session type specified in the properties set.
+*/
+	//##ModelId=3C4C419C00F9
+	static TWspSession ExtractSessionTypeFromSession(RHTTPConnectionInfo aConnInfo, RStringPool aStringPool);
+
+/**Extracts the bearer type from the HTTP session properties set. A default 
+	value of EIP is given if the bearer property is not present.
+	@since			7.0
+	@param			aConnInfo		The session properties for the current HTTP 
+									session.
+	@param			aStringPool		The current string pool.
+	@return			The bearer type specified in the properties set.
+*/
+	//##ModelId=3C4C419C00B3
+	static TWspBearer ExtractBearerInfoFromSession(RHTTPConnectionInfo aConnInfo, RStringPool aStringPool);
+
+/**Extracts the security info from the HTTP session properties set. A default 
+	value of EFalse is given if the security info property is not present.
+	@since			7.0
+	@param			aConnInfo		The session properties for the current HTTP 
+									session.
+	@param			aStringPool		The current string pool.
+	@return			A boolean value of ETrue of a security has been specified 
+					in the properties set.
+*/
+	//##ModelId=3C4C419C0077
+	static TBool ExtractSecurityInfoFromSession(RHTTPConnectionInfo aConnInfo, RStringPool aStringPool);
+
+/**Extracts the specified port number from the HTTP session properties set. Can
+	be either HTTP::ELocalPort or HTTP::ERemotePort. The default value of zero is
+	given if the specified port property is not present.
+	@since			7.0
+	@param			aPortType		The specified port. 
+	@param			aConnInfo		The session properties for the current HTTP 
+									session.
+	@param			aStringPool		The current string pool.
+	@return			A 16-bit unsigned integer with the port number extracted 
+					from the properties set.
+*/
+	//##ModelId=3C4C419C0031
+	static TUint16 ExtractPortInfoFromSession(TInt aPortType, RHTTPConnectionInfo aConnInfo, RStringPool aStringPool);
+
+/**Gives the default remote port number given the security status and connection
+	type, as specified by the WAP specs.
+	@since			7.0
+	@param			aConnInfo		The session properties for the current HTTP 
+									session.
+	@param			aStringPool		The current string pool.
+	@return			A 16-bit unsigned integer with the default remote port 
+					number.
+*/
+	//##ModelId=3C4C419C0009
+	static TUint16 DefaultRemotePort(TBool aSecureConnection, TBool aCOConnection);
+
+/**Reads the connection information from the comms database file. Gives the 
+	bearer type, proxy address, security info, service centre number and 
+	connection type through the output arguments.
+	@since			7.0
+	@param			aStringPool				The current string pool.
+	@param			aBearer					An output argument for the bearer 
+											type.
+	@param			aProxyAddress			An output argument for the proxy
+											address.
+	@param			aSecureConnection		An output argument for the security
+											info.
+	@param			aServiceCentreNumber	An output argument for the service
+											centre number.
+	@param			aSessionServiceType		An output argument for the		
+											connection type.
+*/
+	//##ModelId=3C4C419B038D
+	static void ReadWapAccessPointInfoL(
+									   RStringPool		aStringPool,
+									   TWspBearer&		aBearer, 
+									   RStringF&		aProxyAddress, 
+									   TBool&			aSecureConnection, 
+									   RStringF&		aServiceCentreNumber,
+									   TWspSession&		aSessionServiceType
+									   );
+
+/**Extracts a redirected address data structure from the given data. The 
+	redirected address data structure is defined by the WSP Specification, July
+	2001. The extracted information is returned in the TWspRedirectedAddress 
+	object. If there is more than one address in the data, then only the first
+	redirected address is extracted. The remaining data is ignored.
+	@since			7.0
+	@leave		The function will leave with KWspErrBadRedirectedAddressData
+					if the data is not correctly formed. If an unsupported bearer
+					has been specified then the function will leave with
+					KWspErrBearerNotSupported. The function will also leave if 
+					the RStringF for the proxy address fails to open.
+	@param			aStringPool				The current string pool.
+	@param			aRedirectedAddresses	A reference to the buffer containing 
+											the redirected addresses data.
+*/
+	//##ModelId=3C4C419B036F
+	static TWspRedirectedAddress ExtractRedirectedProxyInfoL(RStringPool aStringPool, const TDesC8& aRedirectedAddresses);
+
+/**Extracts the (SMS) service centre number from the comms database.
+	@since			7.0
+	@param			aStringPool				The current string pool.
+	@param			aServiceCentreNumber	An output argument for the service
+											centre number.
+*/
+	//##ModelId=3C4C419B0351
+	static void ReadServiceCentreNumberL(RStringPool aStringPool, RStringF& aServiceCentreNumber);
+
+private:	// Attributes
+
+	/** The HTTP sessiom in use. This is not owned.
+	*/
+	//##ModelId=3C4C419B0346
+	RHTTPSession		iSession;
+
+	/** The proxy info.
+	*/
+	//##ModelId=3C4C419B033C
+	TProxyInfo			iProxyInfo;
+
+	/** A flag to indicate that the proxy info has already been updated and 
+		should not be changed on the next UpdateProcyInfoL call.
+	*/
+	//##ModelId=3C4C419B032A
+	TBool				iProxyInfoLocked;
+
+	};
+
+#endif	// __CWSPPROXYINFOPROVIDER_H__