xdmprotocols/XcapProtocol/XcapOperations/src/XcapRetrieval.cpp
branchRCL_3
changeset 34 2669f8761a99
parent 31 2580314736af
child 35 fbd2e7cec7ef
--- a/xdmprotocols/XcapProtocol/XcapOperations/src/XcapRetrieval.cpp	Thu Aug 19 10:19:02 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,320 +0,0 @@
-/*
-* Copyright (c) 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:   CXcapRetrieval
-*
-*/
-
-
-
-
-// INCLUDES
-#include "XcapCache.h"
-#include "XcapAppUsage.h"
-#include "XcapDocument.h"
-#include "XcapProtocol.h"
-#include "XcapRetrieval.h"
-#include "XcapUriParser.h"
-#include "XdmXmlParser.h"
-#include "XcapHttpReqGet.h"
-#include "XcapHttpTransport.h"
-#include "XcapOperationFactory.h"
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// C++ constructor can NOT contain any code, that
-// might leave.
-// ---------------------------------------------------------
-//
-CXcapRetrieval::CXcapRetrieval( CXcapDocument& aParentDoc,
-                                CXcapDocumentNode* aTargetNode,
-                                CXcapOperationFactory& aOperationFactory ) :
-                                CXcapHttpOperation( aParentDoc, aTargetNode, aOperationFactory ),
-                                iCacheOperation( EFalse ),
-                                iOperationType( aTargetNode == NULL ?
-                                EXdmDocument : EXdmPartialDocument )                                  
-    {
-    }
-
-// ---------------------------------------------------------
-// CXcapRetrieval::NewL
-//
-// ---------------------------------------------------------
-//
-CXcapRetrieval* CXcapRetrieval::NewL( CXcapDocument& aParentDoc,
-                                      CXcapDocumentNode* aTargetNode,
-                                      CXcapOperationFactory& aOperationFactory )
-    {
-    CXcapRetrieval* self = new ( ELeave ) CXcapRetrieval( aParentDoc, aTargetNode, aOperationFactory );
-    CleanupStack::PushL( self );
-    self->BaseConstructL();
-    self->ConstructL();
-    CleanupStack::Pop();
-    return self;
-    }
-
-// ---------------------------------------------------------
-// CXcapRetrieval::ConstructL
-//
-// ---------------------------------------------------------
-//
-void CXcapRetrieval::ConstructL()
-    {
-#ifdef _DEBUG
-    iOperationFactory.WriteToLog( _L8( "-> CXcapRetrieval::ConstructL" ) );  
-#endif
-    CXcapHttpReqGet* request = Transport().GetL( iTargetDoc.Name() );
-    CleanupStack::PushL( request );
-    User::LeaveIfError( iRequestQueue.Append( request ) );
-    request->SetExpiryTimeL( NULL, KDefaultHttpRequestTimeout * 1000000 );
-    CleanupStack::Pop();  //request
-    if( iOperationType != EXdmDocument && iDocumentSubset != NULL )
-        {
-        iUriParser->SetDocumentSubset( iDocumentSubset );
-        //Add namespace mappings
-        User::LeaveIfError( iTargetDoc.ApplicationUsage().Validate(
-                            *iDocumentSubset, iUriParser, ETrue ) );
-        }
-#ifdef _DEBUG
-    iOperationFactory.WriteToLog( _L8( "<- CXcapRetrieval::ConstructL" ) );  
-#endif
-    }
-
-// ---------------------------------------------------------
-// CXcapRetrieval::ExecuteL
-//
-// ---------------------------------------------------------
-//
-void CXcapRetrieval::ExecuteL()
-    {
-    #ifdef _DEBUG
-        iOperationFactory.WriteToLog( _L8( "CXcapRetrieval::ExecuteL()" ) );  
-    #endif
-    TPtrC8 eTag = iTargetDoc.ETag();
-    if( eTag.Length() > 0 )
-        {
-        #ifdef _DEBUG
-            iOperationFactory.WriteToLog( _L8( " Using ETag \"%S\" - Length: %d" ),
-                                               &eTag, eTag.Length() );  
-        #endif
-        //iActiveRequest->SetHeaderL( KHttpHeaderIfNoneMatch, eTag );
-        }
-    TRAPD( error, iUriParser->ParseL( iActiveRequest->RequestUriL() ) );
-    if( error == KErrNone )
-        {
-        TPtrC8 uri = iUriParser->DesC8();
-        HBufC8* escape = CXcapHttpOperation::EscapeLC( uri );
-        iActiveRequest->UpdateRequestUriL( escape->Des() );
-        CleanupStack::PopAndDestroy();  //escape
-        #ifdef _DEBUG
-            iOperationFactory.WriteToLog( _L8( " New URI: %S" ), &uri );  
-        #endif
-        }
-    }
-        
-// ---------------------------------------------------------
-// CXcapRetrieval::OperationCompleteL
-//
-/* const TDesC8& aETag, 
-   const TDesC& aDocumentName,
-   const TDesC8& aRootLocation,
-   const TDesC8& aResponseData*/
-// ---------------------------------------------------------
-//
-void CXcapRetrieval::OperationCompleteL()
-    {
-    #ifdef _DEBUG
-        iOperationFactory.WriteToLog( _L8( "CXcapRetrieval::OperationCompleteL()" ) );  
-    #endif
-    TInt generalErr = ReinterpretStatus( iRequestData->iHttpStatus );
-    if( generalErr == KErrNone )
-        {
-        #ifdef _DEBUG
-            iOperationFactory.WriteToLog( _L8( " No general errors found" ) );  
-        #endif
-        iCacheOperation ? HandleCacheOperationL() : HandleNetworkOperationL();
-        }
-    else
-        {
-        #ifdef _DEBUG
-            iOperationFactory.WriteToLog( _L8( " General errors found - Status: %d  Error: %d" ),
-                                                   iRequestData->iHttpStatus, generalErr );  
-        #endif
-        iCompleted = ETrue;
-        iResult = generalErr;
-        }
-    }
-
-// ---------------------------------------------------------
-// CXcapRetrieval::HandleCacheOperationL
-//
-// ---------------------------------------------------------
-//
-void CXcapRetrieval::HandleCacheOperationL()
-    {
-    #ifdef _DEBUG
-        iOperationFactory.WriteToLog( _L8( "CXcapRetrieval::HandleCacheOperationL() - Operation type: %d  Target node: %x" ),
-                                           iOperationType, iDocumentSubset );  
-    #endif
-    TPtrC8 responseData = Descriptor( iRequestData->iResponseData );
-    iOperationType == EXdmDocument && iDocumentSubset == NULL ? 
-        iXmlParser->ParseDocumentL( &iTargetDoc, responseData ) :
-        iXmlParser->ParseDocumentL( &iTargetDoc, responseData, iDocumentSubset );
-    iCompleted = ETrue;
-    }
-    
-// ---------------------------------------------------------
-// CXcapRetrieval::HandleNetworkOperationL
-//
-// ---------------------------------------------------------
-//
-void CXcapRetrieval::HandleNetworkOperationL()
-    {
-    #ifdef _DEBUG
-        iOperationFactory.WriteToLog( _L8( "CXcapRetrieval::HandleNetworkOperationL()" ) );  
-    #endif
-    TPtrC name = iTargetDoc.Name();
-    TPtrC8 root = Transport().RootUri();
-    switch( iRequestData->iHttpStatus )
-        {
-        case 200:           //ETag was stale
-            {
-            #ifdef _DEBUG
-                iOperationFactory.WriteToLog( _L8( " Status 200 - ETag was stale" ) );  
-            #endif
-            TPtrC8 responseData = Descriptor( iRequestData->iResponseData );
-            if( responseData.Length() <= 0 )
-                break;
-            if( iOperationType == EXdmDocument )
-                {
-                TPtrC8 eTag = Descriptor( iRequestData->iETag );
-                //If the ETag has not changed, server should return
-                //304 (Not modified), but just in case, let's check the 
-                //ETag value, anyway.
-                if( eTag.Length() > 0 && eTag.Compare( iTargetDoc.ETag() ) != 0 )
-                    {
-                    iTargetDoc.SetETag( eTag );
-                    RXcapCache* cache = iTargetDoc.Protocol().Cache();
-                    if( cache && !( iOptionFlags & KNoCache ) )
-                        cache->Store( iTargetDoc.ETag(), name, root, responseData  );
-                    }
-                else
-                    {
-                    #ifdef _DEBUG
-                        iOperationFactory.WriteToLog( _L8( " ETag values match, do not update cache" ) );  
-                    #endif
-                    }
-                iXmlParser->ParseDocumentL( &iTargetDoc, responseData );
-                }
-            else if( iOperationType == EXdmPartialDocument )
-                {
-                #ifdef _DEBUG  
-                    iOperationFactory.WriteToLog( _L8( " Parse a partial document" ) );  
-                #endif
-                //The target node must be emptied before inserting new content
-                iDocumentSubset->SetEmptyNode( ETrue );
-                iDocumentSubset->SetEmptyNode( EFalse );
-                iXmlParser->ParseDocumentL( responseData, iDocumentSubset );
-               	}
-            iCompleted = ETrue;
-            }
-            break;
-        case 304:
-            {
-            RXcapCache* cache = iTargetDoc.Protocol().Cache();
-            if( cache )
-                {
-                #ifdef _DEBUG   //ETag is up to date - cache still valid
-                    iOperationFactory.WriteToLog( _L8( " Status 304 - Cached version is valid" ) );  
-                #endif
-                TInt length = iTargetDoc.DataLength();
-                __ASSERT_DEBUG( length > 0, User::Panic( _L( "CXcapRetrieval" ), 1 ) );
-                delete iRequestData->iResponseData;
-                iRequestData->iResponseData = NULL;
-                iRequestData->iResponseData = HBufC8::NewL( length );
-                TPtr8 desc( iRequestData->iResponseData->Des() );
-                cache->FetchDocumentContent( desc, name, root );
-                if( iOperationType == EXdmDocument && !iTargetDoc.DocumentRoot() )
-                	{
-                	#ifdef _DEBUG  
-                    	iOperationFactory.WriteToLog( _L8( " No content => parse cached document" ) );  
-                	#endif
-					iXmlParser->ParseDocumentL( &iTargetDoc, desc );
-                	}
-               	else if( iOperationType == EXdmPartialDocument )
-               		{
-               		#ifdef _DEBUG  
-                    	iOperationFactory.WriteToLog( _L8( " Parse a partial document" ) );  
-                	#endif
-					iXmlParser->ParseDocumentL( &iTargetDoc, desc, iDocumentSubset );
-               		}
-                }
-            iCompleted = ETrue;
-            }
-            break;
-        default:
-            #ifdef _DEBUG
-                iOperationFactory.WriteToLog( _L8( " Default case - Status: %d" ),
-                                                   iRequestData->iHttpStatus );  
-            #endif
-            iCompleted = ETrue;
-            break;
-        }
-    }
-  
-// ---------------------------------------------------------
-// CXcapRetrieval::OperationFailedL
-//
-// ---------------------------------------------------------
-//
-void CXcapRetrieval::OperationFailedL()
-    {
-    #ifdef _DEBUG
-        iOperationFactory.WriteToLog( _L8( "CXcapRetrieval::OperationFailedL() - Error: %d" ),
-                                        iStatus.Int() );  
-    #endif
-    if( iStatus.Int() >= KErrNone )
-        {
-        TInt status = iActiveRequest->ResponseData()->iHttpStatus;
-        TInt completion = iActiveRequest->ResponseData()->iCompletion;
-        iResult = status < KErrNone || completion < KErrNone ? status : ReinterpretStatus( status );
-        }
-    else iResult = iStatus.Int();
-    iCompleted = ETrue;
-    }
-    
-// ---------------------------------------------------------
-// CXcapRetrieval::Result
-//
-// ---------------------------------------------------------
-//
-TInt CXcapRetrieval::Result() const
-    {
-    return iRequestData->iCompletion;
-    }
-
-// ---------------------------------------------------------
-// CXcapRetrieval::~CXcapRetrieval
-//
-// ---------------------------------------------------------
-//
-CXcapRetrieval::~CXcapRetrieval()
-    {
-    #ifdef _DEBUG
-        iOperationFactory.WriteToLog( _L8( "CXcapRetrieval::~CXcapRetrieval()" ) );  
-    #endif
-    }
-
-//  End of File  
-