upnpharvester/mdhserver/src/server/mdhmetadatacollector.cpp
branchIOP_Improvements
changeset 40 08b5eae9f9ff
parent 39 6369bfd1b60d
child 41 b4d83ea1d6e2
--- a/upnpharvester/mdhserver/src/server/mdhmetadatacollector.cpp	Mon Nov 01 13:44:24 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,490 +0,0 @@
-/*
-* Copyright (c) 2007 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:      Metadata Harvester server's metadata collector component
-*
-*/
-
-
-
-
-
-
-
-// INCLUDE FILES
-#include <upnpstring.h>
-#include <upnpavcontrolpoint.h>
-#include <upnperrors.h> // HTTP error codes
-#include <hash.h>
-#include "cmsearchresponsehash.h"
-#include "mdhmetadatacollector.h"
-#include "msdebug.h"
-#include "mdhmediaservercontainer.h"
-
-// CONSTANTS
-
-const TInt KSearchTimeout = 120000000;
-const TInt KMaxSearchRetries = 3;
-const TInt KSearchCountLimit = 1;
-
-// ---------------------------------------------------------------------------
-// Two-phased constructor
-// ---------------------------------------------------------------------------
-CCmMdhMetadataCollector* CCmMdhMetadataCollector::NewL( 
-        CCmMdhMediaserverContainer& aMediaserverContainer,
-        CUpnpAVControlPoint& aControlPoint,
-        TInt aSearchChunkSize, 
-        TInt aAddGranularity )
-    {
-    LOG(_L("[CmMdh Server]\t CCmMdhMetadataCollector::NewL"));
-    
-    CCmMdhMetadataCollector* self = new (ELeave) CCmMdhMetadataCollector ( 
-        aMediaserverContainer, aControlPoint, 
-        aSearchChunkSize, aAddGranularity );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// Constructor
-// ---------------------------------------------------------------------------
-CCmMdhMetadataCollector::CCmMdhMetadataCollector( 
-        CCmMdhMediaserverContainer& aMediaserverContainer,
-        CUpnpAVControlPoint& aAvControlPoint,
-        TInt aSearchChunkSize,
-        TInt aAddGranularity ) :
-    iMediaserverContainer( aMediaserverContainer ), 
-    iAvControlPoint ( aAvControlPoint ),
-    iSearchChunkSize( aSearchChunkSize ), 
-    iAddGranularity( aAddGranularity )
-     
-    {
-    iCdsSync = NULL;
-    iXmlToParse = NULL;
-    iUuid = NULL;
-    iTimer = NULL;
-    iSearchRetryCount = 0;
-    iSessionId = 0;
-    iTempStartIndex = -1;
-    }
-
-
-// ---------------------------------------------------------------------------
-// 2nd phase constructor
-// ---------------------------------------------------------------------------
-void CCmMdhMetadataCollector::ConstructL()
-    {
-    iHashGenerator = CSHA1::NewL();
-    }
-        
-// ---------------------------------------------------------------------------
-// Destructor
-// ---------------------------------------------------------------------------
-CCmMdhMetadataCollector::~CCmMdhMetadataCollector()
-    {
-    LOG(_L("[CmMdh Server]\t CCmMdhMetadataCollector::\
-                             ~CCmMdhMetadataCollector"));
-    delete iCdsSync;
-    delete iXmlToParse;
-    delete iTimer;
-    iSourceDataArray.ResetAndDestroy();
-    delete iHashGenerator;
-    delete iUuid;
-    iHashValues.ResetAndDestroy();  
-    }
-    
-// ---------------------------------------------------------------------------
-// Harvests a media server
-// ---------------------------------------------------------------------------
-void CCmMdhMetadataCollector::DoHarvestMediaserverL()
-    {
-    LOG(_L("[CmMdh Server]\t CCmMdhMetadataCollector::DoHarvestMediaserver"));
-    
-    // iUuid must be set before calling this method.
-    if ( !iUuid ) 
-        {
-        User::Leave( KErrNotReady );
-        }
-        
-#ifdef _DEBUG
-    
-    HBufC* uuid = UpnpString::ToUnicodeL( *iUuid );
-    TRACE( Print(_L("[CmMdh Server]\t search request, uuid: %S, \
-        searchIndex %d, chunk size %d"), 
-        uuid, iSearchIndex, iSearchChunkSize ));
-    delete uuid;
-    uuid = NULL;
-    iDebugTime.HomeTime();
-    
-#endif
-
-    TInt err = iAvControlPoint.CdsSearchActionL( *iUuid,
-                                      KRootContainerId,
-                                      KSearchCriteria,
-                                      KMdhSearchFilter,
-                                      iSearchIndex,
-                                      iSearchChunkSize,
-                                      KSortCriteria );
-    TRACE( Print( _L("[CmMdh Server]\t search request returned %d"), err));
-    if ( err > 0 ) 
-        {
-        iSessionId = err;
-        }
-    LOG( _L("[CmMdh Server]\t creating CPeriodic \
-        timer for search timeout..." ) );
-    iTimer = CPeriodic::NewL(EPriorityHigh);
-    iTimer->Start(KSearchTimeout, 0, TCallBack(TimeoutTimerCompletedL, this));
-    
-    LOG(_L("[CmMdh Server]\t CCmMdhMetadataCollector::\
-        DoHarvestMediaserver end"));
-    
-    }  
-    
-// ---------------------------------------------------------------------------
-// Harvests a media server
-// ---------------------------------------------------------------------------
-void CCmMdhMetadataCollector::HarvestMediaserverL( TDesC8& aUuid )
-    {
-    LOG(_L("[CmMdh Server]\t CCmMdhMetadataCollector::HarvestMediaserver"));
-    iSearchIndex = 0;
-    delete iUuid; iUuid = NULL;
-    iUuid = aUuid.AllocL();
-    iItemsToParse = 0;
-    
-#ifdef _DEBUG
-    
-    HBufC* uuid = UpnpString::ToUnicodeL( aUuid );
-    
-    TRACE( Print( _L("[CmMdh Server]\t starting \
-            to harvest, uuid: %S"), uuid));
-    delete uuid;
-    
-#endif
-    
-    if ( !iCdsSync )
-        {
-        iCdsSync = CCdsSync::NewL();
-        }    
-    iResultIncomplete = ETrue;
-    iCanceled = EFalse;
-    iSearchRetryCount = 0;
-    iSourceDataArray.ResetAndDestroy();
-    iHashValues.ResetAndDestroy();
-    
-    iMediaServerId = iMediaserverContainer.IdForMediaServerL( aUuid );
-    iMediaserverContainer.HashValuesForMediaServerL( iMediaServerId, iHashValues );
-    
-    iCdsSync->InitL( iSourceDataArray,
-                     iMediaServerId, 
-                     *this,
-                     iAddGranularity );
-                     
-    DoHarvestMediaserverL();
-   
-    LOG(_L("[CmMdh Server]\t CCmMdhMetadataCollector::\
-        HarvestMediaserver end"));
-    }
-
-// ---------------------------------------------------------------------------
-// Cancels harvest
-// ---------------------------------------------------------------------------
-void CCmMdhMetadataCollector::CancelHarvest()
-    {
-    LOG(_L("[CmMdh Server]\t CCmMdhMetadataCollector::CancelHarvestL"));
-    if( iCdsSync )
-        {
-        // cancel parsing and mde operations
-        TRAP_IGNORE( iCdsSync->ResetL() ); 
-        }
-    if ( iTimer )
-        {
-        iTimer->Cancel();
-        delete iTimer; iTimer = NULL;
-        }
-
-    // Remove old hash values
-    TRAP_IGNORE(iMediaserverContainer.DeleteOldHashValuesL(
-                                              iMediaServerId,
-                                              iTempStartIndex ) );
-
-    iTempStartIndex = -1;
-    iSourceDataArray.ResetAndDestroy();
-    iCanceled = ETrue;
-    }
-
-
-// ---------------------------------------------------------------------------
-// Static timer callback function
-// ---------------------------------------------------------------------------
-TInt CCmMdhMetadataCollector::TimeoutTimerCompletedL(TAny* aInstance)
-    {
-    LOG(_L("[CmMdh Server]\t CCmMdhMetadataCollector::\
-                             TimeoutTimerCompletedL"));
-    return static_cast<CCmMdhMetadataCollector*>
-        ( aInstance )->DoTimeoutTimerCompletedL();
-    }
-   
-// ---------------------------------------------------------------------------
-// Timer callback function
-// ---------------------------------------------------------------------------
-TInt CCmMdhMetadataCollector::DoTimeoutTimerCompletedL()
-    {
-    LOG(_L("[CmMdh Server]\t CCmMdhMetadataCollector::\
-                             DoTimeoutTimerCompletedL"));
-    
-    delete iTimer; iTimer = NULL;
-    
-    iMediaserverContainer.HarvestCompleteL( KErrTimedOut );
-    
-    return KErrNone;
-   }
-
-
-   
-// ---------------------------------------------------------------------------
-// Observer callback for Content Directory Search function.
-// ---------------------------------------------------------------------------
-void CCmMdhMetadataCollector::CdsSearchResponse( TInt aSessionId, 
-                                                 TInt aErr, 
-                                                 const TDesC8& aResult, 
-                                                 TInt aReturned, 
-                                                 TInt aMatches )
-    { 
-    LOG(_L("[CmMdh Server]\t CCmMdhMetadataCollector::CdsSearchResponse")); 
-    TRACE( Print( _L("[CmMdh Server]\t session %d err %d \
-        returned:%d matches %d"), 
-        aSessionId, aErr, aReturned, aMatches) );
-
-
-    TRAPD( err, HandleSearchResponseL( aSessionId, 
-                                       aErr,
-                                       aResult, 
-                                       aReturned, 
-                                       aMatches ) );
-                                      
-    if ( err ) 
-        {
-        TRACE( Print( _L("[CmMdh Server]\t HandleSearchResponse leaved with \
-                          error %d"), err ) );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Handles search response.
-// ---------------------------------------------------------------------------
-void CCmMdhMetadataCollector::HandleSearchResponseL( TInt aSessionId, 
-                                                     TInt aErr, 
-                                                     const TDesC8& aResult, 
-                                                     TInt aReturned, 
-                                                     TInt aMatches )
-    { 
-    LOG(_L(
-        "[CmMdh Server]\t CCmMdhMetadataCollector::HandleSearchResponseL") );
-
-    if ( iSessionId != aSessionId ) 
-        {
-        LOG( _L("[CmMdh Server]\t session id mismatch, returning.."));
-        return;
-        }
-    else 
-        {
-        iSessionId = 0;
-        }
-
-#ifdef _DEBUG
-    TTime tempTime;
-    tempTime.HomeTime();
-    
-    TRACE( Print( _L("[CmMdh Server]\t search request took %ld microsec"), 
-        tempTime.MicroSecondsFrom( iDebugTime ).Int64() ));
-#endif
-    
-    if ( iTimer )
-        {
-        iTimer->Cancel();
-        delete iTimer;
-        iTimer = NULL;
-        }
-    
-    if ( iXmlToParse )
-        {
-        LOG( _L("[CmMdh Server]\t deleting old xml buffer.."));
-    
-        delete iXmlToParse;
-        iXmlToParse = NULL;
-        }
-    
-    if ( iCanceled )
-        {
-        LOG(_L("[CmMdh Server]\t harvest canceled, returning..")); 
-        return;
-        }
-        
-    if ( aErr && aErr != EHttpOk )
-        {
-        if ( aErr == EActionFailed && 
-             iSearchRetryCount++ < KMaxSearchRetries ) 
-            // 501 = EActionFailed, retrying 
-            {
-            TRACE( Print( _L("[CmMdh Server]\t retrying search, retry #%d"), 
-                    iSearchRetryCount ));
-            DoHarvestMediaserverL();
-            }
-        else 
-            {
-            LOG(_L("[CmMdh Server]\t Unrecoverable response \
-                error, aborting.. ")); 
-            delete iTimer; iTimer = NULL;    
-            iMediaserverContainer.HarvestCompleteL( aErr );
-            }
-        return;
-        }
-        
-    // Check the hash value (or should it be checked in the cdssync side...?)
-    iHashGenerator->Reset();
-    iHashGenerator->Update( aResult );
-    TPtrC8 hashValue = iHashGenerator->Final();
-
-    TBool foundMatch( EFalse );
-    for ( TInt index(0); index < iHashValues.Count() && !foundMatch; index++ )
-        {
-        CCmSearchResponseHash* hashInstance = iHashValues[index];
-        if ( hashInstance->StartIndex() == iSearchIndex 
-             && hashInstance->ItemCount() == aReturned 
-             && hashInstance->Hash() == hashValue )
-                {
-                LOG( _L("[CmMdh Server]\t FOUND HASH MATCH!!"));
-                foundMatch = ETrue;
-                // Update last matching search chuck to cds sync component
-                iCdsSync->SetSearchIndex( iSearchIndex + aReturned );
-                }
-        }
-
-    if ( !foundMatch )
-        {
-        // Before updating hash values, remove all changed hash values
-        iMediaserverContainer.DeleteOldHashValuesL( iMediaServerId, 
-                                                  iSearchIndex );
-        
-        iMediaserverContainer.AddHashValueForResponseL( iMediaServerId,
-                                                        iSearchIndex,
-                                                        aReturned,
-                                                        hashValue );
-
-        // Save information about hash value in database in order to delete it
-        iTempStartIndex = iSearchIndex;
-
-        TRACE( Print( _L("[CmMdh Server]\t HASH= Index:%d\tCount:%d\tHash:%S"),
-            iSearchIndex, aReturned, &hashValue ));    
-        
-        iSearchIndex += aReturned;
-        iResultIncomplete = iSearchIndex < aMatches;
-        iSearchRetryCount = 0;
-        iItemsToParse = aReturned;        
-        HBufC8* xmlToParse = aResult.AllocL();
-        iSourceDataArray.Append( xmlToParse );
-        TRACE( Print( _L("[CmMdh Server]\t source data array has %d items"), 
-            iSourceDataArray.Count() ));
-         
-        iCdsSync->NotifySourceDataAddedL( !iResultIncomplete );
-        
-        if ( iResultIncomplete && iCdsSync->ChunkCount() < KSearchCountLimit )
-            {
-            DoHarvestMediaserverL();
-            } 
-        }
-    else    // Found matching parsed search response
-        {
-        iSearchIndex += aReturned;
-        iResultIncomplete = iSearchIndex < aMatches;
-        iSearchRetryCount = 0;
-        iItemsToParse = aReturned;
-        // Send progress
-        iMediaserverContainer.SendProgressInfo( aReturned );
-        
-        if ( iResultIncomplete && iCdsSync->ChunkCount() < KSearchCountLimit )
-            {
-            DoHarvestMediaserverL();
-            }
-        else
-            {
-            iMediaserverContainer.HarvestCompleteL( KErrNone );
-            }             
-        }
-    }
-
-    
-// ---------------------------------------------------------------------------
-// Sends progress data
-// ---------------------------------------------------------------------------
-void CCmMdhMetadataCollector::ProgressL( TInt aItemCount ) 
-    {
-    LOG(_L("[CmMdh Server]\t CCmMdhMetadataCollector::ProgressL")); 
-    
-    iMediaserverContainer.SendProgressInfo( aItemCount );
-
-    }
-
-// ---------------------------------------------------------------------------
-// Cds Sync chunk completion callback function
-// ---------------------------------------------------------------------------
-void CCmMdhMetadataCollector::ChunkCompleteL() 
-    {
-    LOG(_L("[CmMdh Server]\t CCmMdhMetadataCollector::ChunkCompleteL")); 
-    
-    // to check if all of the items have been processed successfully
-    // If it is not, the percentage need to be increased for those
-    // items that are not processed successfully
-    TInt processedItems = iCdsSync->ProcessedItemCount();
-    if ( iItemsToParse > processedItems )
-    	{
-    	ProgressL( iItemsToParse - processedItems );
-    	}
-    if ( iResultIncomplete && iCdsSync->ChunkCount() < KSearchCountLimit )
-        {
-        DoHarvestMediaserverL();
-        }
-    }
-    
-// ---------------------------------------------------------------------------
-// Cds Sync completion callback function
-// ---------------------------------------------------------------------------
-void CCmMdhMetadataCollector::SyncCompleteL() 
-    {
-    LOG(_L("[CmMdh Server]\t CCmMdhMetadataCollector::SyncCompleteL")); 
-    if ( iCanceled )
-        {
-        LOG(_L("[CmMdh Server]\t harvest canceled, returning..")); 
-        return;
-        }
-    
-    iMediaserverContainer.HarvestCompleteL( KErrNone );
-    }
-
-// ---------------------------------------------------------------------------
-// Cds Sync error callback function
-// ---------------------------------------------------------------------------
-#ifdef _DEBUG
-void CCmMdhMetadataCollector::SyncErrorL( TInt aError ) 
-#else // _DEBUG
-void CCmMdhMetadataCollector::SyncErrorL( TInt /*aError*/ ) 
-#endif // _DEBUG
-    {
-    LOG(_L("[CmMdh Server]\t CCmMdhMetadataCollector::SyncErrorL")); 
-    TRACE( Print( _L("[CmMdh Server]\t error is %d"), aError ));
-    }
-    
-
-