diff -r 000000000000 -r b16258d2340f applayerpluginsandutils/httpprotocolplugins/WspProtocolHandler/CWspCOProtocolHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerpluginsandutils/httpprotocolplugins/WspProtocolHandler/CWspCOProtocolHandler.h Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,559 @@ +// 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 __CWSPCOPROTOCOLHANDLER_H__ +#define __CWSPCOPROTOCOLHANDLER_H__ + +// System includes +#include +#include +#include +#include +#include + +// User includes +#include "mconnectiontimercallback.h" +#include "mwspprimitivesendercallback.h" +#include "mwspcomethodobserver.h" + +// Forward declarations +class CWspCapabilityInfo; +class CWspProxyInfoProvider; +class CWspTransportHandler; +class MWspCOSessionInvoker; +class MWspCOMethodInvoker; +class CConnectionTimer; +class CWspPrimitiveSender; +class CRxData; +class CWspHeaderUtils; + +// @todo docing +//##ModelId=3BBD7DB402C4 +class CWspCOProtocolHandler : public CProtocolHandler, public MWspCOSessionCallback, + public MWspCapabilityProvider, + public MWspSessionHeadersProvider, + public MConnectionTimerCallback, + public MWspPrimitiveSenderCallback, + public MWspCOMethodObserver, + public MProtHandlerInterface + { +public: // Methods + +/** Static factory constructor. + @since 7.0 + @leave Leaves with KErrNoMemory if there was not enough memory to + create the object. + @param aSession A pointer to an RHTTPSession object. + @return A pointer to newly created object. +*/ + //##ModelId=3C4C439101F4 + static CWspCOProtocolHandler* NewL(TAny* aSession); + +/** Standard destructor. + @since 7.0 +*/ + //##ModelId=3C4C439101D6 + ~CWspCOProtocolHandler(); + +private: // Methods from CProtocolHandler + +/** + @see CProtocolHandler +*/ + //##ModelId=3C4C43910172 + virtual void CreateCodecL(); + +/** + @see CProtocolHandler +*/ + //##ModelId=3C4C439100BD + virtual CProtTransaction* CreateProtTransactionL(RHTTPTransaction aTransaction); + +/** + @see CProtocolHandler +*/ + //##ModelId=3C4C43910009 + virtual TBool ServiceL(CProtTransaction& aTrans); + +/** + @see CProtocolHandler +*/ + //##ModelId=3C4C4390033D + virtual void ClosedTransactionHook(CProtTransaction* aTrans); + +/** + @see CProtocolHandler +*/ + //##ModelId=3C4C4390029D + virtual void CancelTransactionHook(CProtTransaction& aTransaction); + +/** + @see CProtocolHandler +*/ + //##ModelId=3C4C439001F2 + virtual void NotifyNewRequestBodyPart(CProtTransaction& aTransaction); + + virtual void GetInterfaceL(TUid aInterfaceId, MProtHandlerInterface*& aInterfacePtr); + + /** Get the Server Certificate for the current session. + @param aServerCert A TCertInfo which will be filled with the certificate information + @return An error code. KErrNone if aServerCert has been completed, otherwise one of + the system wide error codes + */ + TInt SessionServerCert(TCertInfo& aServerCert); + + /** Get the Server Certificate for the specified transaction. This function returns + KErrNotSupported because for WSP the certificate applies to the whole session. + @param aServerCert A TCertInfo which will be filled with the certificate information + @param aTransaction The transaction for which the certificate info is requested + @return KErrNotSupported + */ + TInt TransactionServerCert(TCertInfo& aServerCert, RHTTPTransaction aTransaction); + + +private: // Methods from MHTTPFilterBase + +/** + @see MHTTPFilterBase +*/ + //##ModelId=3C4C43900152 + virtual void MHFSessionRunL(const THTTPSessionEvent& aEvent); + +/** + @see MHTTPFilterBase +*/ + //##ModelId=3C4C43900076 + virtual TInt MHFSessionRunError(TInt aError, const THTTPSessionEvent& aEvent); + +private: // Methods from MWspCOSessionCallback + +/** + @see MWspCOSessionCallback +*/ + //##ModelId=3C4C43900026 + virtual void ConnectCnf(); + +/** + @see MWspCOSessionCallback +*/ + //##ModelId=3C4C438F03B4 + virtual void ResumeCnf(); + +/** + @see MWspCOSessionCallback +*/ + //##ModelId=3C4C438F0223 + virtual void DisconnectInd( + TWspReason aReason, + TBool aRedirectSecurity, + TWspRedirectedAddress& aRedirectAddress, + const TDesC8& aErrorHeader, + const TDesC8& aErrorBody + ); + +/** + @see MWspCOSessionCallback +*/ + //##ModelId=3C4C438F0197 + virtual void SuspendInd(TWspReason aReason); + +/** + @see MWspCOSessionCallback +*/ + //##ModelId=3C4C438F0115 + virtual void ExceptionInd(const TDesC8& aExceptionData); + +private: // Methods from MWspCapabilityProvider + +/** + @see MWspCapabilityProvider +*/ + //##ModelId=3C4C438F00CF + virtual const MWspCapabilityViewer& ClientCapabilities() const; + +/** + @see MWspCapabilityProvider +*/ + //##ModelId=3C4C438F0092 + virtual MWspCapabilitySetter& ServerCapabilities() const; + +private: // Methods from MWspSessionHeadersProvider + +/** + @see MWspSessionHeadersProvider +*/ + //##ModelId=3C4C438F004C + virtual const TDesC8& ClientHeaders() const; + +/** + @see MWspSessionHeadersProvider +*/ + //##ModelId=3C4C438E03C6 + virtual void SetServerHeadersL(const TDesC8& aBuffer); + +private: // Methods from MConnectionTimerCallback + +/** + @see MConnectionTimerCallback +*/ + //##ModelId=3C4C438E038A + virtual void HandleConnectionTimedOut(); + +private: // Methods from MWspPrimitiveSenderCallback + +/** + @see MWspPrimitiveSenderCallback +*/ + //##ModelId=3C4C438E0326 + virtual void SendPrimitiveL(TWspPrimitive aPrimitive); + +/** + @see MWspPrimitiveSenderCallback +*/ + //##ModelId=3C4C438E02C2 + virtual TInt WspPrimitiveSenderCallbackError(TInt aError); + +private: // Methods from MWspCOMethodObserver + +/** + @see MWspCOMethodObserver +*/ + //##ModelId=3C4C438E025E + virtual void HandleMethodAbort(CWspCOTransaction& aTransaction); + +/** + @see MWspCOMethodObserver +*/ + virtual void NotifyPendingCompletingMethod(); + +/** + @see MWspCOMethodObserver +*/ + virtual void NotifyMethodComplete(); + +private: // Methods from MRxDataObserver, inherited via MWspCOMethodObserver + +/** + @see MRxDataObserver +*/ + //##ModelId=3C4C438E01DC + virtual void SetStatusL(CRxData& aRecv, TInt aStatus); + +private: // Methods from MProtHandlerInterface + + /** Get the Server Certificate for the specified transaction. This function returns + NULL because for WSP the certificate applies to the whole session. + @return NULL + */ + const CCertificate* SessionServerCert(); + + + /** Get the Server Certificate for the current session. + @param aTransaction The transaction for which the certificate is requested + @return A pointer to CCertificate, or NULL if not found. + */ + const CCertificate* TransactionServerCert(RHTTPTransaction aTransaction); + + +private: // Methods + +/** + @since 7.0 + @param aSession The HTTP session. +*/ + //##ModelId=3C4C438E013B + CWspCOProtocolHandler(RHTTPSession aSession); + +/** + @since 7.0 + @todo leaves + @pre First phase construction has been done. + @post The object is fully initialised. +*/ + //##ModelId=3C4C438E0127 + void ConstructL(); + +/**Initiates a session connection. + @since 7.0 + @warning This function will panic with KWspPanicSessionNotInValidState + if the WSP session cannot be connected. + @todo leaves + @pre The WSP session is in the Null state. + @post The WSP session is in the Connecting state. The connection + timer has been started. +*/ + //##ModelId=3C4C438E0109 + void SessionConnectL(); + +/**Initiates a session resume. + @since 7.0 + @warning This function will panic with KWspPanicSessionNotInValidState + if the WSP session cannot be resumed. + @todo leaves + @pre The WSP session is in the Connected, Suspending or + Suspended state. The Suspend Resume facility is supported + in this WSP session. + @post The WSP session is in the Resuming state. The connection + timer has been started. +*/ + //##ModelId=3C4C438E00EB + void SessionResumeL(); + +/**The session should be disconnected. + @since 7.0 + @warning This function will panic with KWspPanicSessionNotInValidState + if the WSP session cannot be disconnected. + @todo leaves + @pre The WSP session is in the Connecting, Connected, Suspending, + Suspended, or Resuming state. + @post The WSP session is in the Closing state. The connection + timer has been cancelled. +*/ + //##ModelId=3C4C438E00A5 + void SessionDisconnect(TWspReason aReason); + +/**The session should be suspended. + @since 7.0 + @warning This function will panic with KWspPanicSessionNotInValidState + if the WSP session cannot be suspended. + @todo leaves + @pre The WSP session is in the Connected or Resuming state. The + Suspend Resume facility is supported in this WSP session. + @post The WSP session is in the Closing state. The connection + timer has been cancelled. +*/ + //##ModelId=3C4C438E0087 + void SessionSuspend(); + +/**Processes the session connected event. + @since 7.0 + @pre + @post +*/ + //##ModelId=3C4C438E0073 + void DoSessionConnectedL(); + +/**Processes the session connected event, this is a non-leaving + method of DoSessionConnectedL() + @since 7.0 + @pre + @post +*/ + void DoSessionConnected(); + +/** @since 7.0 + @todo docing + @param aEvent The session event to send. + @pre + @post +*/ + //##ModelId=3C4C438E0037 + void SendSessionEvent(THTTPSessionEvent aEvent); + +/**@since 7.0 + @todo docing + @leave Leaves with KErrNotFound if the WSP transport handler cannot + be found. Leaves with KErrNotSupported if the loaded WSP + transport handler does not support Connection-Orientated + Session Management facility and Method Invocation facility. + @post The +*/ + //##ModelId=3C4C438D03BB + void CreateWspTransportHandlerL(); + +/**Updates the client session headers that is supplied to + the transport handler + @since 7.0 + @leave Leaves with KErrNoMemory if the header buffer cannot be + created. + @post The client session headers buffer is upto date. +*/ + //##ModelId=3C4C438D039D + void UpdateClientSessionHeadersL(); + +/**Checks the properties in the HTTP session for any client + proposed capablities and a specified connection time-out + value. + @since 7.0 + @post The client proposed capabilities and the connection time-out + value have been updated. +*/ + //##ModelId=3C4C438D0389 + void CheckClientCapabilities(); + +/**Checks the client-requested capabilities against the + corresponding negotiated capabilities to see if they + have been reduced or denied. + @since 7.0 + @todo leaves + @return A boolean value of ETrue if one or more of the client- + requested capabilities have been reduced or denied. + @pre The negotiated capabilities have been passed up from the + transport handler. The S-Connect.cnf primitive has been + received. + @post If any of the client-requested capabilities have been + reduced or rejected, the session property representing that + capabililty is set the appropriate negotiated value. +*/ + //##ModelId=3C4C438D0375 + TBool UpdateNegotiatedCapabilitiesL(); + +/** + Handles the receipt of a EConnect session event. Will inform the client if + the WSP session is not in the appropriate state to receive this event. + @since 7.0 + @leave This function will leave if the session connect/resume fails. +*/ + //##ModelId=3C4C438D0361 + void HandleConnectRequestL(); + +/** + Handles the receipt of a EDisconnect session event. Will inform the client if + the WSP session is not in the appropriate state to receive this event. + @since 7.0 +*/ + //##ModelId=3C4C438D034D + void HandleDisconnectRequest(); + +/** + Checks to see if a method is waiting. If so it sets the base class active + so that the next pending transaction gets serviced. + @since 7.0 +*/ + //##ModelId=3C4C438D0339 + void CheckWaitingMethod(); + +/** + Indicates if the Suspend Resume facility is supported by + the WSP session. + @since 7.0 + @return A boolean value of ETrue if the WSP session can support the + Suspend Resume facility. +*/ + //##ModelId=3C4C438D0325 + TBool SupportSuspendResume() const; + +/**Indicates whether the WSP session can be resumed. The + Suspend Resume facility must be supported and the WSP + session must in the Connected, Suspending or Suspended + state. + @since 7.0 + @return A boolean value of ETrue if the WSP session can be resumed. +*/ + //##ModelId=3C4C438D0311 + TBool CanResume() const; + +/**Indicates whether the WSP session can be suspended. The + Suspend Resume facility must be supported and the WSP + session must in the Connected or Resuming state. + @since 7.0 + @return A boolean value of ETrue if the WSP session can be suspended. +*/ + //##ModelId=3C4C438D02F2 + TBool CanSuspend() const; + +/**Resets the state of the protocol handler to that upon + initial construction, without changing the transport + handler. This is NOT a published mechanism! + @since 7.0 +*/ + //##ModelId=3C4C438D02E8 + void ResetAll(); + +private: // Attributes + + /** A pointer to the Wsp Transport Handler. + */ + //##ModelId=3C4C438D02CA + CWspTransportHandler* iTransportHandler; + + /** A pointer to the CO Session Invoker object. Owned by the transport + handler. + */ + //##ModelId=3C4C438D02B6 + MWspCOSessionInvoker* iSessionInvoker; + + /** An object that holds the negotiated capabilties for the current Wsp + session. + */ + //##ModelId=3C4C438D02A2 + CWspCapabilityInfo* iNegotiatedCapInfo; + + /** An object that holds the proposed client capabilities. + */ + //##ModelId=3C4C438D0284 + CWspCapabilityInfo* iClientCapInfo; + + /** A pointer to the proxy info provider. + */ + //##ModelId=3C4C438D0272 + CWspProxyInfoProvider* iProxyInfoProvider; + + /** The state of the WSP session. + */ + //##ModelId=3C4C438D0266 + TWspSessionState iSessionState; + + /** The connection timed-out value in microseconds. The protocol handler + will abort a session connect after this time if a connection has not + been established. + */ + //##ModelId=3C4C438D0252 + TInt iTimedOutValue; + + /** A pointer to the connection timed-out timer. + */ + //##ModelId=3C4C438D023E + CConnectionTimer* iConnectionTimer; + + /** An active object that is used to invoke the sending of certain WSP + primitives. + */ + //##ModelId=3C4C438D022A + CWspPrimitiveSender* iPrimitiveSender; + + /** A buffer holding the encoded client session headers. + */ + //##ModelId=3C4C438D0218 + HBufC8* iClientSessionHeaders; + + /** A flag indicating that a session connect or resume has timed-out. + */ + //##ModelId=3C4C438D020C + TBool iConnectTimedOut; + + /** A flag indicating that there is a method transaction waiting to be + serviced. + */ + //##ModelId=3C4C438D01F8 + TBool iWaitingMethod; + + /** A pointer to the WSP header utils + */ + //##ModelId=3C4C438D01E4 + CWspHeaderUtils* iHdrUtils; + + /** The number of methods in Completing state waiting to send the final .res + primitive. + */ + TInt iPendingCompletingMethods; + + /** A flag indicating that the client has requested a disconnect. + */ + TBool iDisconnectRequested; + + }; + +#endif // __CWSPCOPROTOCOLHANDLER_H__