webservices/wshttpchanneltransportplugin/inc/senhttpchannelimpl.h
changeset 0 62f9d29f7211
child 3 b5a195438f6a
child 28 0802db42e4e9
--- /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 <badesca.h>
+#include <http/mhttpauthenticationcallback.h>
+#include <flogger.h>
+#include <es_sock.h>
+#include <commdbconnpref.h>
+
+#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<CSenTxnState>* 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