applayerpluginsandutils/httpprotocolplugins/WspProtocolHandler/CWspProxyInfoProvider.h
--- /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__