xdmprotocols/XcapProtocol/XcapHttpTransport/inc/XcapHttpRequest.h
branchRCL_3
changeset 35 fbd2e7cec7ef
parent 0 c8caa15ef882
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xdmprotocols/XcapProtocol/XcapHttpTransport/inc/XcapHttpRequest.h	Wed Sep 01 12:23:14 2010 +0100
@@ -0,0 +1,312 @@
+/*
+* Copyright (c) 2003 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:   CXcapHttpRequest
+*
+*/
+
+
+
+
+#ifndef __XCAPHTTPREQUEST__
+#define __XCAPHTTPREQUEST__
+
+// INCLUDES
+#include <http.h>
+#include "XdmOperation.h"
+#include "XcapHttpRequestTimerCallback.h"
+
+//CONSTANTS
+//const TInt KMaxNumberOfRetries                    = 3;
+const TInt KAuthTypeProxy                           = 407;
+const TInt KAuthTypeNormal                          = 401;
+
+_LIT8( KXcapRequestPost,                            "POST" );
+_LIT8( KXcapRequestGet,                             "GET" );
+_LIT8( KXcapRequestPut,                             "PUT" );
+_LIT8( KXcapRequestDelete,                          "DELETE" );
+		
+_LIT8( KHttpHeaderAccept,                           "Accept" );
+_LIT8( KHttpHeaderIfMatch,                          "If-Match" );
+_LIT8( KHttpHeaderIfNoneMatch,                      "If-None-Match" );
+_LIT8( KHttpHeaderContentType,                      "Content-Type" );
+_LIT8( KHttpHeaderIntIdentity,                      "X-3GPP-Intended-Identity" );
+
+//FORWARD DECLARATIONS
+class TXdmCredentials;
+class CXcapHttpResponse;
+class CXcapHttpTransport;
+class CXcapHttpHeaderModel;
+class CXcapHttpAuthManager;
+class CXcapHttpRequestTimer;
+
+// CLASS DECLARATION
+class CXcapHttpRequest : public CBase,
+                         public MXcapHttpRequestTimerCallback
+
+    {
+    public:
+        
+        /**
+        * C++ default constructor is private.
+        */     
+        IMPORT_C void SetHeaderL( const TDesC8& aHeaderName,
+                                  const TDesC8& aHeaderValue );
+
+        /**
+        * Sets the expiry time of this transaction
+        * @param aExpiryTime Time period after which this transaction expires
+        * @param aCallback Handle to the receiver of the expiry event
+        */
+        IMPORT_C void SetExpiryTimeL( MXcapHttpRequestTimerCallback* aCallback,
+                                      const TTimeIntervalMicroSeconds32 aExpiryTime );
+        
+        /**
+        * Cancel this transaction
+        */
+        IMPORT_C void CancelRequest();
+        
+        /**
+        * C++ default constructor is private.
+        */     
+        IMPORT_C void DispatchRequestL( TRequestStatus& aClientStatus );
+        
+        /**
+        * Sets the expiry time of this transaction
+        * @param aExpiryTime Time period after which this transaction expires
+        * @param aCallback Handle to the receiver of the expiry event
+        */
+        IMPORT_C void ResetUriL( const TDesC& aNewUri );
+        
+        /**
+        * Sets the expiry time of this transaction
+        * @param aExpiryTime Time period after which this transaction expires
+        * @param aCallback Handle to the receiver of the expiry event
+        */
+        IMPORT_C void UpdateRequestUriL( const TDesC8& aUpdatedUri );
+        
+        /**
+        * Sets the expiry time of this transaction
+        * @param aExpiryTime Time period after which this transaction expires
+        * @param aCallback Handle to the receiver of the expiry event
+        */
+        IMPORT_C TPtrC8 RequestUriL() const;
+        
+        /**
+        * Sets the expiry time of this transaction
+        * @param aExpiryTime Time period after which this transaction expires
+        * @param aCallback Handle to the receiver of the expiry event
+        */
+        IMPORT_C TPtrC8 HeaderValue( const HTTP::TStrings aHeaderName ) const;
+
+        /**
+        * C++ default constructor is private.
+        */   
+        IMPORT_C TXdmCompletionData* ResponseData();
+        
+        /**
+        * C++ default constructor is private.
+        */   
+        IMPORT_C void ReleaseResponseData();
+        
+        /**
+        * Destructor.
+        */      
+        IMPORT_C virtual ~CXcapHttpRequest();
+
+    public:
+        
+        /**
+        * Try to resend this request
+        * @return TBool Resent or not
+        */
+        TPtrC8 RelativeUri() const;
+        
+        /**
+        * Try to resend this request
+        * @return TBool Resent or not
+        */
+        void ResendWithAuthL( TInt aAuthtype );
+                
+        /**
+        * Has this transaction been cancelled.
+        * @return TBool
+        */
+        CXcapHttpAuthManager& AuthManager();
+        
+        /**
+        * C++ default constructor is private.
+        */      
+        RHTTPSession& Session();
+
+        /**
+        * Return the HTTP transaction associated with this transaction
+        * @return RHTTPTransaction
+        */
+        RHTTPTransaction& Transaction();
+        
+        /**
+        * C++ default constructor is private.
+        */     
+        void AppendDataL( const TPtrC8& aBodyPart );
+
+        /**
+        * Complete this request
+        * @param aErrorCode The completion code
+        */
+        void FinaliseRequestL( TInt aErrorCode );
+
+
+    protected:  // Constructors and destructor
+        
+        /**
+        * C++ default constructor is private.
+        */      
+        CXcapHttpRequest( RHTTPSession& aHttpSession,
+                          CXcapHttpAuthManager& aAuthManager,
+                          CXcapHttpTransport& aTransportMain );
+
+        /**
+        * Copies the request data
+        * @param aRequestData Data to be sent
+        */
+        void BaseConstructL( const TDesC& aRequestUri );
+
+        /**
+        * Copies the request data
+        * @param aRequestData Data to be sent
+        */
+        virtual void ConstructRequestL();
+
+        /**
+        * Append data to the response buffer.
+        */
+        virtual RStringF ConstructMethodStringL() = 0;
+        
+        /**
+        * Sets the status of this transaction
+        * @param aSent Has this transaction been sent or not
+        */
+        void SetStatus( const TBool aSent );
+
+        /**
+        * Has this transaction been cancelled.
+        * @return TBool
+        */
+        TBool IsCancelled();
+
+        /**
+        * Has this transaction been sent
+        * @return TBool
+        */
+        TBool Status() const;
+
+        /**
+        * Return the time stamp of this transaction
+        * @return TInt 
+        */
+        const TInt SendTime() const;
+
+        /**
+        * Get the current time (System tick count)
+        */
+        TInt TimeL() const;
+
+    private:
+        
+        /**
+        * Second-phase constructor.
+        */ 
+        void ConstructL( const TDesC8& aRequestBody );
+        
+        /**
+        * Second-phase constructor.
+        */ 
+        void DoSetHeadersL();
+        
+        /**
+        * Second-phase constructor.
+        */ 
+        void RemoveDuplicateAuth();
+        
+        /**
+        * Append authorization header
+        */ 
+        void AppendAuthorizationHeaderL( RHTTPHeaders& aHeaderCollection, TInt aAuthType );
+        
+        /**
+        * Second-phase constructor.
+        */ 
+        void SetRequestUriL( const TDesC& aRequestUri );
+        
+        /**
+        * Second-phase constructor.
+        */ 
+        void PrepareResponseBodyL();
+    
+    #ifdef _DEBUG
+       
+        /**
+        * Second-phase constructor.
+        */ 
+        void DumpResponseL( const TDesC8& aRespData, const TDesC& aDumpName );
+        
+    #endif
+    
+        /**
+        * Second-phase constructor.
+        */ 
+        void CompileResponseDataL( TInt aErrorCode );
+        
+        /**
+        * Second-phase constructor.
+        */ 
+        TInt ReinterpretErrorCode( const TInt aHttpStatus ) const;
+        
+        /**
+        * Second-phase constructor.
+        */ 
+        virtual void HandleTimerEventL();
+    
+    protected: //Data
+        
+        RHTTPSession&                           iHttpSession;
+        RHTTPTransaction                        iHttpTransaction;
+        CXcapHttpTransport&                     iTransportMain;
+
+    private: //Data
+        
+        HBufC8*                                 iFlatResponse;
+        HBufC8*                                 iRequestUriBuf;
+        HBufC8*                                 iWholeUri;
+        CXcapHttpResponse*                      iHttpResponse;
+        CBufSeg*                                iResponseBuffer;
+        TRequestStatus*                         iClientStatus;
+        CXcapHttpRequestTimer*                  iExpiryTimer;
+        TUriParser8                             iRequestUri;
+        TInt                                    iCurrentDataLength;
+        TInt                                    iNumberOfRetries;
+        TInt                                    iSendTime;
+        TBool                                   iSent;
+        TBool                                   iActive;
+        TBool                                   iCancelled;
+        TBool                                   iConstructed;
+        TXdmCompletionData                      iRespData;
+        CXcapHttpAuthManager&                   iAuthManager;
+        TTimeIntervalMicroSeconds32             iExpiryTime;
+        RPointerArray<CXcapHttpHeaderModel>     iHeaderCollection;
+    };
+
+#endif
+
+// End of File