webservices/wshttpchanneltransportplugin/inc/senhttpchanneltransportplugin.h
changeset 0 62f9d29f7211
child 19 9e96e2676219
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wshttpchanneltransportplugin/inc/senhttpchanneltransportplugin.h	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,310 @@
+/*
+* 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 declaration
+*
+*/
+
+
+
+
+
+
+
+
+
+
+
+#ifndef SEN_HTTP_CHANNEL_TRANSPORT_PLUGIN_H
+#define SEN_HTTP_CHANNEL_TRANSPORT_PLUGIN_H
+
+// INCLUDES
+#include <e32base.h>
+#include <s32strm.h>
+#include <s32file.h>    // filestream
+
+#include <flogger.h>
+#include "sendebug.h"
+#include "sentransport.h"
+#include "msencoreservicemanager.h"
+#include "msenremoteserviceconsumer.h"
+#include "msenservicesession.h"
+#include "senpointermap.h"
+#include "senresponseobserver.h"
+#include "SenHttpTransportProperties.h"
+#include <SenServiceConnection.h>
+// CONSTANTS
+_LIT8(KSenHttpChannelTransportUriScheme,        "http");
+_LIT8(KSenHttpChannelUserAgentHeaderDefault,    "Serene");
+_LIT8(KSenHttpChannelAcceptHeaderDefault,       "text/xml");
+
+
+// FORWARD DECLARE
+class CSenHttpChannel;
+class CSenHttpSyncRequester;
+class CSenLayeredHttpTransportProperties;
+class CSenIdentityProvider;
+
+class CSenSoapEnvelope2;
+
+// TYPE DEF
+typedef RSenPointerMap<MSenRemoteServiceConsumer, TInt> RConsumerMap;
+typedef RSenPointerMap<MSenServiceSession, TInt> RSessionMap;
+
+/**********************************************************************
+ Here is the full list of HTTP error codes
+ (taken from: \src\common\generic\application-protocols\http\inc\httperr.h)
+
+       KErrHttpEncodeDefault                     -7200 
+       KErrHttpEncodeAccept                      -7201 
+       KErrHttpEncodeAcceptCharset               -7202 
+       KErrHttpEncodeQValue                      -7203 
+       KErrHttpEncodeAuthorization               -7204 
+       KErrHttpEncodeBasicAuth                   -7205 
+       KErrHttpEncodeDigestAuth                  -7206 
+       KErrHttpEncodeConnection                  -7207 
+       KErrHttpEncodeContentLength               -7208 
+       KErrHttpEncodeContentType                 -7209 
+       KErrHttpEncodeHost                        -7210 
+       KErrHttpEncodeHostPort                    -7211 
+       KErrHttpEncodeTransferEncoding            -7212 
+       KErrHttpEncodeUserAgent                   -7213 
+       KErrHttpEncodeDate                        -7214 
+       KErrHttpEncodeCookie                      -7215 
+       KErrHttpEncodeCacheControl                -7216 
+       KErrHttpEncodePragma                      -7217 
+       KErrHttpEncodeIfMatch                     -7218 
+       KErrHttpEncodeIfNoneMatch                 -7219 
+       KErrHttpEncodeIfModifiedSince             -7220 
+       KErrHttpEncodeIfUnmodifiedSince           -7221 
+       KErrHttpEncodeCookie2                     -7222 
+       KErrHttpEncodeContentLanguage             -7223 
+       KErrHttpEncodeDoWWWAuthenticate           -7224 
+       KErrHttpEncodeDoAge                       -7225 
+       KErrHttpEncodeDoVary                      -7226 
+       KErrHttpEncodeDoContentLanguage           -7227 
+       KErrHttpEncodeContentEncoding             -7228 
+       KErrHttpEncodeContentLocation             -7229 
+       KErrHttpEncodeContentMD5                  -7230 
+       KErrHttpEncodeAcceptLanguage              -7231 
+       KErrHttpEncodeAcceptEncoding              -7232 
+       KErrHttpEncodeTE                          -7233 
+                                                       
+       KErrHttpDecodeMalformedDate               -7260 
+       KErrHttpDecodeMalformedYear               -7261 
+       KErrHttpDecodeMalformedMonth              -7262 
+       KErrHttpDecodeMalformedDay                -7263 
+       KErrHttpDecodeMalformedWkDay              -7264 
+       KErrHttpDecodeMalformedWeekDay            -7265 
+       KErrHttpDecodeMalformedInteger            -7266 
+       KErrHttpDecodeMalformedQuotedStr          -7267 
+                                                       
+       KErrHttpDecodeAccept                      -7270 
+       KErrHttpDecodeConnection                  -7271 
+       KErrHttpDecodeContentLength               -7272 
+       KErrHttpDecodeContentType                 -7273 
+       KErrHttpDecodeTransferEncoding            -7274 
+       KErrHttpDecodeWWWAuthenticate             -7275 
+       KErrHttpDecodeUnknownAuthScheme           -7276 
+       KErrHttpDecodeBasicAuth                   -7277 
+       KErrHttpDecodeDigestAuth                  -7278 
+       KErrHttpDecodeCookie                      -7279 
+       KErrHttpDecodeAuthorization               -7280 
+       KErrHttpDecodeAcceptCharset               -7281 
+       KErrHttpDecodeAcceptLanguage              -7282 
+       KErrHttpDecodeAcceptEncoding              -7283 
+       KErrHttpDecodeTE                          -7284 
+       KErrHttpDecodeExpect                      -7285 
+                                                       
+       KErrHttpRedirectExceededLimit             -7300 
+       KErrHttpRedirectUseProxy                  -7301 
+       KErrHttpRedirectNoLocationField           -7302 
+       KErrHttpUnknownParseState                 -7303 
+                                                       
+       KErrHttpRequestHasBody                    -7330 
+       KErrHttpRequestBodyMissing                -7331 
+       KErrHttpTraceReqWithoutMaxForwardHeader   -7332 
+       KErrHttpPostReqBodyWithoutSizeOnHTTP10    -7333 
+       KErrHttpInvalidHeaderInRequest            -7334 
+                                                       
+       KErrHttpEntityHeaderMissingContentType    -7360 
+       KErrHttpGeneralHeaderMissingHost          -7361 
+                                                       
+       KErrHttpCantResetRequestBody              -7370 
+       KErrHttpProtTransactionNotInitialised     -7371 
+       KErrHttpCannotEstablishTunnel             -7372 
+       KErrHttpInvalidUri                        -7373 
+       KErrHttpNonPipeliningError                -7374 
+       KErrHttpPipeliningError                   -7375 
+
+ ***********************************************************************/
+
+// CLASS DECLARATION
+class CSenHttpChannelTransportPlugin : public CSenTransport,
+                                       public MSenResponseObserver
+    {
+    public: // Constructors and destructor
+    
+        static CSenHttpChannelTransportPlugin* NewL(CSenTransportContext* apCtx);
+        static CSenHttpChannelTransportPlugin* NewLC(CSenTransportContext* apCtx);
+
+        //static CSenHttpChannelTransportPlugin* NewL(MSenCoreServiceManager& aServiceManager);
+        //static CSenHttpChannelTransportPlugin* NewLC(MSenCoreServiceManager& aServiceManager);
+
+        /*        
+        // @depracated: remove when Transport Properties is used as initializer:
+        static CSenHttpChannelTransportPlugin* NewL(MSenCoreServiceManager& aManager,
+                                                    TInt aProxyPort,
+                                                    TPtrC8 aProxyHost);
+
+        // @depracated: remove when Transport Properties is used as initializer:
+        static CSenHttpChannelTransportPlugin* NewLC(MSenCoreServiceManager& aManager,
+                                                     TInt aProxyPort,
+                                                     TPtrC8 aProxyHost);
+
+        // @depracated: remove when Transport Properties is used as initializer:
+        static CSenHttpChannelTransportPlugin* NewL(MSenCoreServiceManager& aManager,
+                                                    TUint32 aIapId);
+
+        // @depracated: remove when Transport Properties is used as initializer:
+        static CSenHttpChannelTransportPlugin* NewLC(MSenCoreServiceManager& aManager,
+                                                     TUint32 aIapId);
+    
+        // @depracated: remove when Transport Properties is used as initializer:
+        static CSenHttpChannelTransportPlugin* NewL(MSenCoreServiceManager& aManager, 
+                                                    TInt aProxyPort, 
+                                                    TPtrC8 aProxyHost,
+                                                    TUint32 aIapId);
+
+        // @depracated: remove when Transport Properties is used as initializer:
+        static CSenHttpChannelTransportPlugin* NewLC(MSenCoreServiceManager& aManager, 
+                                                     TInt aProxyPort, 
+                                                     TPtrC8 aProxyHost,
+                                                     TUint32 aIapId);
+        */
+
+        virtual ~CSenHttpChannelTransportPlugin();
+
+        // from MSenResponseObserver
+
+        /**
+        * Receive response to a request submitted. This method
+        * takes the ownership of the heap buffer aContent.
+        *
+        * @param aRequestId submit id which identifies the request.
+        * @param aContentType incoming response content type.
+        * @param aContent incoming response content, or NULL.
+        * @param aHttpProperties - properies of response(e.g.such as file names where BLOBs are saved) or NULL
+        */
+        virtual void ResponseReceivedL(TInt aRequestId,
+                                       const TAny* aContentType, 
+                                       HBufC8* aContent,
+                                       CSenHttpTransportProperties* aHttpProperties = NULL);
+
+        /**
+        * Error occured while receiving response. Error code
+        * is either system error code or own error code. Own
+        * error codes start from -20000
+        *
+        * @param aRequestId submit id which identifies the request.
+        * @param aErrorCode  error code of the response.
+        * @param aErrorBody is the received error response. Might
+        *       be zero-lenght, if nothing was received.
+        */
+        virtual void ResponseErrorL(TInt aRequestId, TInt aError, HBufC8* aErrorBody,
+                                    CSenHttpTransportProperties* aHttpProperties = NULL);
+
+        // from MSenTransport
+
+        virtual TInt SubmitL(const TDesC8& aEndpoint,
+                             const TDesC8& aMessage,
+                             const TDesC8& aTransportProperties,
+                             HBufC8*& aResponse,
+                             MSenRemoteServiceConsumer& aConsumer);
+
+        virtual TInt SendL(const TDesC8& aEndpoint,
+                           const TDesC8& aMessage,
+                           const TDesC8& aTransportProperties,
+                           MSenServiceSession& aReplyTo,
+                           MSenRemoteServiceConsumer& aConsumer, // "adressee", could be CSenIdentifier
+                           TInt& aTxnId);
+
+        virtual TInt SetPropertiesL(const TDesC8& aProperties, 
+                                    MSenLayeredProperties::TSenPropertiesLayer aTargetLayer,
+                                    MSenRemoteServiceConsumer* aConsumer);
+        virtual TInt PropertiesL(HBufC8*& aProperties);
+        virtual TInt CompleteTransaction(const TInt aTxnId, const TInt aStatus);
+        virtual TInt CancelTransaction(const TInt aTxnId);
+        virtual TPtrC8 UriSchemeL();
+        
+        virtual MSenProperties& PropertiesL();
+        
+        virtual void StateChanged(TInt aId, TInt aState); // in order to propagate http status codes
+        virtual void FileProgress(TInt aTxnId, TBool aIncoming, TBool aIsSoap,
+            const TDesC8& aSoapOrCid, TInt aProgress);
+		virtual void SetTrafficDetails(TSenDataTrafficDetails& aDetails);
+        void DataTrafficDetails(TSenDataTrafficDetails& aDetails); 	
+    protected:
+    
+        /**
+        * C++ default constructor.
+        * @param apCtx - ownership is taken to this instance(!)
+        */
+
+        CSenHttpChannelTransportPlugin(CSenTransportContext* apCtx,
+                                       MSenCoreServiceManager& aCore);
+        //CSenHttpChannelTransportPlugin(MSenCoreServiceManager& aServiceManager);
+
+    private:
+        /**
+        * 2nd phase constructor
+        */
+        void ConstructL();
+
+        // @depracated: remove when Transport Properties is used as initializer:
+        //void ConstructL(TInt aProxyPort, TPtrC8 aProxyHost);
+        // @depracated: remove when Transport Properties is used as initializer:
+        //void ConstructL(TUint32 aIapId);
+        // @depracated: remove when Transport Properties is used as initializer:
+        //void ConstructL(TInt aProxyPort, TPtrC8 aProxyHost, TUint32 aIapId);
+
+        /**
+        * Helper, which resets HTTP transport properties
+        */
+        TInt ApplyPropertiesL();
+
+        TInt ResetHttpChannelByIapIdL(TUint32 aIapId);
+
+        CSenLayeredHttpTransportProperties& LayeredPropertiesL();
+        
+
+        /**
+        * Logging 
+        */
+        //RFileLogger* Log() const;
+        
+    private: // data
+        MSenCoreServiceManager& iServiceManager; // not owned
+        CSenHttpSyncRequester* iRequester;
+        CSenHttpChannel *iHttpChannel;
+        CSenLayeredHttpTransportProperties* iProperties;
+        RConsumerMap iConsumerMap; // values owned (TxnIds), keys not (consumers)
+        RSessionMap iSessionMap;   // values NOT owned (TxnIds), neither keys (sessions)
+        //RFileLogger iLogger;
+        TInt iStatusCode; // containts latest error or zero
+		TSenDataTrafficDetails iDetails;
+    };
+
+#endif // SEN_HTTP_CHANNEL_TRANSPORT_PLUGIN_H
+
+// End of File