diff -r 000000000000 -r 62f9d29f7211 webservices/wshttpchanneltransportplugin/inc/senhttpchannelimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webservices/wshttpchanneltransportplugin/inc/senhttpchannelimpl.h Thu Jan 07 16:19:19 2010 +0200 @@ -0,0 +1,217 @@ +/* +* Copyright (c) 2002-2005 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: Header description +* +*/ + + + + + + + + + + + +#ifndef SEN_HTTP_CHANNEL_IMPL_H +#define SEN_HTTP_CHANNEL_IMPL_H + +// INCLUDES +#include +#include +#include +#include +#include + +#include "senhttpchannel.h" +#include "MSenElement.h" +#include "SenIdentityProvider.h" +#include "senpointermap.h" +#include "senmtomtxnstate.h" + +_LIT(KColon, ":"); + +// Multipart message +_LIT8(KMimeAccept, "*/*"); + +// Panics +_LIT(KUnrecognisedValueTypeOfContentTypePanicText, "ContentType has unrecognised value"); + +// FORWARD DECLARATIONS +class CSenHttpEventHandler; +class CSenTxnState; +class CSenAtomEntry; +//class CSenMtomTxnState; +class MSenIdentityManager; +//class CSenElement; +class CSenLayeredHttpTransportProperties; + +// CLASS DECLARATION +class CSenHttpChannelImpl : public CSenHttpChannel, + public MHTTPAuthenticationCallback + { +public: + static CSenHttpChannelImpl* NewL(MSenIdentityManager& aManager); + static CSenHttpChannelImpl* NewLC(MSenIdentityManager& aManager); + static CSenHttpChannelImpl* NewL(MSenIdentityManager& aManager, TUint32 aIapId); + static CSenHttpChannelImpl* NewLC(MSenIdentityManager& aManager, TUint32 aIapId); + + virtual ~CSenHttpChannelImpl(); + + void HandleResponseHeadersL(RHTTPTransaction aTransaction); + void HandleResponseBodyDataL(RHTTPTransaction aTransaction); + void HandleResponseL(RHTTPTransaction aTransaction); + void HandleRunErrorL(RHTTPTransaction aTransaction, TInt aError); + void HandleRedirectRequiresConfirmationL(RHTTPTransaction aTransaction); + + // Functions from base classes + virtual TInt SendL(MSenResponseObserver& aObserver, + const TDesC8& aUri, + const TDesC8& aContent, + CSenLayeredHttpTransportProperties& aProps); + + virtual TInt SendL(MSenResponseObserver& aObserver, + const TDesC8& aUri, + CSenSoapEnvelope2& aContent, + CSenLayeredHttpTransportProperties& aProps); + virtual TInt SendL(MSenResponseObserver& aObserver, + const TDesC8& aUri, + CSenAtomEntry& aContent, + CSenLayeredHttpTransportProperties& aProps); + + virtual TInt SendL(MSenResponseObserver& aObserver, + const TDesC8& aUri, + const RFile& aFile, + CSenLayeredHttpTransportProperties& aProps); + + + virtual void SetProxyL(const TDesC8& aProxyHostBaseAddr, + TInt aProxyPort); + virtual void SetProxyL(const TDesC8& aProxyAddrStr); + virtual void SetHttpVersionL(TInt aVersion); + virtual void SetProxyUsageL(TBool aProxyUsage); + virtual void SetSecureDialogL(TBool aSecureDialog); + + TInt CancelTransaction(const TInt aTxnId); + void CancelAllTransactions(); + + void SetExplicitIapDefined(TBool aExplicitIapDefined); + /* + * Getter for currently effective IAP ID + * @param aIapId will be assigned to hold + * the value of that Internet Access Point + * identifier (an unsigned integer utilized + * by CommsDB API). + * @return EFalse, if IAP ID has not been + * specified. Otherwise, returns ETrue. + */ + virtual TBool EffectiveIapId(TUint32 &aIapId); + + // Helper, for file logging. + //RFileLogger* Log() const; + void NotifyMoreBodyL(); + + // Functions from MHTTPAuthenticationCallback + virtual TBool GetCredentialsL(const TUriC8& aURI, RString aRealm, + RStringF aAuthenticationType, + RString& aUsername, + RString& aPassword); + void EnableTimeOutL(TInt aTxnId, TInt aTimeOutSec); + void DisableTimeOutL(TInt aTxnId); + virtual TInt32 UsedIap(); + +protected: + CSenHttpChannelImpl(MSenIdentityManager& aManager); + + void AddRequestHeadersL(RHTTPHeaders& aHeaders, CSenLayeredHttpTransportProperties& aProps); + void AppendNewTxnStateL(CSenTxnState* aTxnState); + void DeleteTxnState(TInt aTxnId); + CSenTxnState* FindTxnState(TInt aTxnId, TInt* aIndex = NULL); + /** + * Applies new IAP preferencies to current HTTP Session (RHTTPSession) + * @param aIapId new IAP ID + * @param aDialogPref shows is IAPDialog allowed or not + * @param aConnection is the connection to be attached to HTTP session + * @param aSocketServer is the socket server to be attached to HTTP session + * Leaves with system-wide error code if preferences cannot be set. + */ + TInt SetIapPrefsL( TUint32 aIapId, TBool aDialogPref, RConnection& aConnection, RSocketServ& aSocketServer ); + TInt SetSnapPrefsL( TUint32 aSnapId, TBool aDialogPref, RConnection& aConnection, RSocketServ& aSocketServer ); + + //void SetupConnectionWithIapPrefsL( TUint32 aIapId, RConnection& aConnection, RSocketServ& aSocketServer ); + //void AttachSocketServerAndConnectionWithHttpSession( TUint32 aIapId, RConnection& aConnection, RSocketServ& aSocketServer ); + + void ConstructL(); + void ConstructL( TUint32 aIapId ); + + +private: + + // New functions + + + TPtrC8 SoapActionL(MSenElement& aSoapEnvelope); + TInt SubmitRequestL(MSenResponseObserver& aObserver, + const TDesC8& aUri, + const TDesC8* aContentType = NULL, + const TDesC8* aContent = NULL); + + TInt SubmitRequestL(MSenResponseObserver& aObserver, + const TDesC8& aUri, + MSenElement& aMessage, + const TDesC8* aContentType = NULL); + + TInt InvokeHttpMethodL(CSenTxnState* aTxnState, + CSenLayeredHttpTransportProperties& aProps); + + void ListFilters(); + void DumpRespHeadersL(RHTTPTransaction& aTrans); + void DumpBodyData(const TDesC8& aData); + TInt ContentTypeParamValueL(const RHTTPHeaders& aResponseHeaders, + const RStringF& aContent, + const TPtrC8& aParamName, + SenMultiPartUtils::TMultiPartContentType& aMultiPartContentType); + +protected: + RSocketServ iSockServ; + RConnection iConnection; + TUint32 iIapId; + TUint32 iUsedIapId; + TUint32 iSnapId; + RStringPool iStringPool; + RHTTPSession iSess; + CSenHttpEventHandler* iTransObs; + //RFileLogger iLog; + +private: + + CArrayPtrFlat* iTxnStates; + MSenIdentityManager& iManager; + TInt iBasicConnectionTries; + CSenIdentityProvider* iSessionAuthentication; // NOT owned + TBool iPasswordFromUser; // Is ETrue if data from identitymanager is + TPtrC8 iContentType; // content type of usual response + TBool iExplicitIapDefined; + HBufC8* iProxyHostPort; + TBool iXopResponse; + TBool iDeflateFilter;//Is true if deflate filter loaded for a session + TBool iHasHttpContentType; + SenMultiPartUtils::TMultiPartContentType iMultiPartContentType; // content type of MultiPart response + RHTTPTransaction iHttpTransaction ; + }; + +#endif //SEN_HTTP_CHANNEL_IMPL_H + +// End of file