diff -r 6369bfd1b60d -r 08b5eae9f9ff upnpharvester/mdhserver/src/server/mdhmediaservercontainer.cpp --- a/upnpharvester/mdhserver/src/server/mdhmediaservercontainer.cpp Mon Nov 01 13:44:24 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,967 +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 mediaserver container component -* -*/ - - - - - - - -// INCLUDE FILES -#include -#include - -#include "cmsettingsfactory.h" -#include "cmsettings.h" -#include "cmdmmain.h" -#include "cmmediaserverfull.h" -#include "cmsearchresponsehash.h" -#include "cmsettings.h" -#include -#include -#include "mdhconnectionmonitor.h" -#include "mdhmediaservercontainer.h" -#include "mdhmetadatacollector.h" -#include "mdhserver.h" -#include "msdebug.h" - - -// CONSTANTS -#ifdef __SERIES60_31__ -_LIT8( KAVControlPointFriendlyName, "AVDevice" ); -#endif //__SERIES60_31__ -_LIT8( KMediaServer, "MediaServer" ); -#ifdef _DEBUG -_LIT8( KFriendlyNameTag, "friendlyName" ); -#endif - -const TInt KDefaultCaculateSize = 100; -const TInt KDefaultChunkSize = 150; -const TInt KDefaultAddGranularity = 500; - -// amount of microseconds in one second -const TInt KMicrosecondsInSecond = 1000000; -// --------------------------------------------------------------------------- -// Two-phase API constructor -// --------------------------------------------------------------------------- -// -CCmMdhMediaserverInfo* CCmMdhMediaserverInfo::NewL( ) - { - CCmMdhMediaserverInfo* self = CCmMdhMediaserverInfo::NewLC( ); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// Two-phase API constructor -// --------------------------------------------------------------------------- -// -CCmMdhMediaserverInfo* CCmMdhMediaserverInfo::NewLC() - { - CCmMdhMediaserverInfo* self = new ( ELeave ) CCmMdhMediaserverInfo( ); - CleanupStack::PushL( self ); - self->ConstructL( ); - return self; - } - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -CCmMdhMediaserverInfo::~CCmMdhMediaserverInfo() - { - delete iUuid; - } - -// --------------------------------------------------------------------------- -// C++ default constructor -// --------------------------------------------------------------------------- -// -CCmMdhMediaserverInfo::CCmMdhMediaserverInfo( ) - { - } - -// --------------------------------------------------------------------------- -// ConstructL -// --------------------------------------------------------------------------- -// -void CCmMdhMediaserverInfo::ConstructL( ) - { - - } - -// --------------------------------------------------------------------------- -// Two-phased constructor. -// --------------------------------------------------------------------------- -CCmMdhMediaserverContainer* CCmMdhMediaserverContainer::NewL( - CCmMdhServer& aMdhServer) - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::NewL")); - - CCmMdhMediaserverContainer* self = - new (ELeave) CCmMdhMediaserverContainer(aMdhServer); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// Constructor. -// --------------------------------------------------------------------------- -CCmMdhMediaserverContainer::CCmMdhMediaserverContainer( - CCmMdhServer& aMdhServer) - :iMdhServer( aMdhServer ) - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - CCmMdhMediaserverContainer")); - iAvControlPoint = NULL; - iMetadataCollector = NULL; - iTimer = NULL; - iMediaserverIndex = 0; - iResponsesPending = 0; - iTotalItemCount = 0; - iHarvestErrCode = KErrNone; - iHarvestActive = EFalse; - iPropertyItemIndex = 0; - iProgressInfo.iService = ECmServiceHarvest; - } - -// --------------------------------------------------------------------------- -// 2nd phase constructor. -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::ConstructL() - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::ConstructL")); - iDbManager = CCmDmMain::NewL(); - iSettings = CCmSettingsFactory::NewCmSettingsEngineL(); - iSettings->GetIapL( iIap ); - TRACE( Print( _L("[CmMdh Server]\t Monitoring iap %d"), iIap )); - iMdHConMon = CMdHConnectionMonitor::NewL( *this, iIap ); - } - -// --------------------------------------------------------------------------- -// Destructor. -// --------------------------------------------------------------------------- -CCmMdhMediaserverContainer::~CCmMdhMediaserverContainer() - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - ~CCmMdhMediaserverContainer")); - - TRACE( Print( _L("[CmMdh Server]\t deleting %d media servers"), - iMediaservers.Count())); - - iMediaservers.ResetAndDestroy(); - iOldMediaServers.ResetAndDestroy(); - - LOG(_L("[CmMdh Server]\t deleting settings engine..")); - if ( iSettings ) - { - iSettings->Close(); - } - - LOG(_L("[CmMdh Server]\t deleting db manager..")); - if ( iDbManager ) - { - delete iDbManager; - } - - LOG(_L("[CmMdh Server]\t deleting metadata collector..")); - if ( iMetadataCollector ) - { - delete iMetadataCollector; - } - - LOG(_L("[CmMdh Server]\t deleting av control point..")); - if ( iAvControlPoint ) - { - delete iAvControlPoint; - } - - LOG(_L("[CmMdh Server]\t deleting timer..")); - if ( iTimer ) - { - delete iTimer; - } - - LOG(_L("[CmMdh Server]\t deleting connection monitor..")); - if ( iMdHConMon ) - { - delete iMdHConMon; - } - - LOG(_L("[CmMdh Server]\t All deleted..")); - } - -// --------------------------------------------------------------------------- -// Harvest a media server -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::DoHarvestMediaserverL( - TInt aMediaserverIndex ) - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - DoHarvestMediaserverL")); - iMdhServer.SetServerStateL(ECmMdhServerStateHarvesting); - if ( iMediaservers[aMediaserverIndex]->iMediaserverState - == ECmMdhMediaserverNotSynchronized) - { - iMetadataCollector->HarvestMediaserverL( - *iMediaservers[aMediaserverIndex]->iUuid ); - iHarvestActive = ETrue; - } - else - { - LOG(_L("[CmMdh Server]\t No search caps or \ - no sync needed, skipping..")); - HarvestCompleteL( KErrNone ); - } - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - DoHarvestMediaserverL end")); - } - -// --------------------------------------------------------------------------- -// Adds a media server to database if it doesn't exist there -// --------------------------------------------------------------------------- -TBool CCmMdhMediaserverContainer::AddToDbIfNewL( CUpnpDevice& aMediaserver ) - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::AddToDbIfNewL")); - - CCmMediaServerFull* tempServer = CCmMediaServerFull::NewLC(); - tempServer->SetUDNL( aMediaserver.Uuid() ); - iDbManager->PrepareQueryCmdL( EMediaServerInfoQyery ); - TInt errCode = iDbManager->QueryMediaServerL( tempServer ); - TBool ret = EFalse; - - if ( errCode != KErrNotFound ) - { - TRACE( Print( _L("[CmMdh Server]\t FillUsage: %d"), - tempServer->FillUsage())); - ret = (TBool)tempServer->FillUsage(); - iAllFound = ETrue; - for( TInt i = 0 ; i < iOldMediaServers.Count(); i++ ) - { - if( KErrNotFound != aMediaserver.Uuid().Match( - iOldMediaServers[i]->MediaServer() ) ) - { - TRACE( Print( _L("[CmMdh Server]\t In db..."))); - iOldMediaServers[i]->SetFillUsage( EFalse ); - } - if( iOldMediaServers[i]->FillUsage()) - { - TRACE( Print( _L("[CmMdh Server]\t All not found"))); - iAllFound = EFalse; - } - } - } - CleanupStack::PopAndDestroy( tempServer ); - return ret; - } - -// --------------------------------------------------------------------------- -// Decreases pending responses counter and finishes search if ready -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::DecResponsesAndFinishIfReadyL() - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - DecResponsesAndFinishIfReadyL")); - if ( !(--iResponsesPending ) ) - { - if( iAllFound ) - { - DoSearchTimerCompletedL(); - } - } - } - -// --------------------------------------------------------------------------- -// Static timer callback function. -// --------------------------------------------------------------------------- -TInt CCmMdhMediaserverContainer::SearchTimerCompletedL( TAny* aInstance ) - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - SearchTimerCompleted")); - return ((CCmMdhMediaserverContainer*)aInstance) - ->DoSearchTimerCompletedL(); - } - -// --------------------------------------------------------------------------- -// Timer callback function. -// --------------------------------------------------------------------------- -TInt CCmMdhMediaserverContainer::DoSearchTimerCompletedL() - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - DoSearchTimerCompleted")); - delete iTimer; - iTimer = NULL; - TRACE( Print( _L("[CmMdh Server]\t Found %d media servers"), - iMediaservers.Count())); - - if ( !iResponsesPending ) - { - iOldMediaServers.ResetAndDestroy(); - iMdhServer.SetServerStateL(ECmMdhServerStateIdle); - } - return KErrNone; - } - -// --------------------------------------------------------------------------- -// Handles UPnP device discoveries. -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::DeviceDiscoveredL( CUpnpDevice* aDevice ) - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::DeviceDiscoveredL")); - -#ifdef _DEBUG - - HBufC* uuid = UpnpString::ToUnicodeL( aDevice->Uuid() ); - HBufC* name = UpnpString::ToUnicodeL( - aDevice->DescriptionProperty( KFriendlyNameTag() )); - HBufC* type = UpnpString::ToUnicodeL( aDevice->DeviceType() ); - TRACE( Print(_L("[CmMdh Server]\t type: %S uuid: %S, name %S"), - type, uuid, name )); - delete uuid; - delete name; - delete type; - -#endif - - - if (!iTimer) // search is no more active - { - LOG(_L("[CmMdh Server]\t Search no more active, returning..")); - return; - } - - if( aDevice->DeviceType().Find(KMediaServer) != KErrNotFound && - !iAllFound ) - { - LOG(_L("[CmMdh Server]\t Found a media server")); - - if ( AddToDbIfNewL( *aDevice ) ) - { - ++iResponsesPending; - iAvControlPoint->CdsSearchCapabilitiesActionL( aDevice->Uuid() ); - } -#ifdef _DEBUG - - else - { - LOG(_L("[CmMdh Server]\t not active, skipping..")); - } -#endif - - } - - } - -// --------------------------------------------------------------------------- -// Handles UPnP device disappears. -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::DeviceDisappearedL( - CUpnpDevice* /* aDevice */ ) - { - LOG( _L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - DeviceDisappearedL") ); - } - -// --------------------------------------------------------------------------- -// Searches UPnP Media servers. -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::SearchMediaserversL() - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - SearchMediaServersL")); - - iResponsesPending = 0; - iProgressInfo.iTotalItems = 0; - iProgressInfo.iProcessedItems = 0; - - if ( !iAvControlPoint ) - { - iSettings->GetIapL( iIap ); - // Create and start (automatic) the AV control point - TRACE( Print( _L("[CmMdh Server]\t IAP to use is %d"), iIap)); - LOG( _L("[CmMdh Server]\t Creating AV control point..." ) ); - - iAvControlPoint = CUpnpAVControlPoint::NewL( *this ); - } - - LOG( _L("[CmMdh Server]\t Creating CPeriodic timer..." ) ); - iTimer = CPeriodic::NewL(EPriorityHigh); - - TInt deviceDiscoveryDelay; - iSettings->GetDiscoveryDelay( deviceDiscoveryDelay ); - TRACE(Print(_L("[CmMdh Server]\t using device discovery delay %d\n"), - deviceDiscoveryDelay)); - - iTimer->Start(deviceDiscoveryDelay * KMicrosecondsInSecond, - 0, - TCallBack(SearchTimerCompletedL, this)); - - iMdhServer.SetServerStateL(ECmMdhServerStateSearching); - - iOldMediaServers.ResetAndDestroy(); - iDbManager->GetMediaServersL( iOldMediaServers ); - - for ( TInt i = 0; i < iOldMediaServers.Count(); i++ ) - { - if ( !iOldMediaServers[i]->FillUsage() && - iOldMediaServers[i]->SystemUpdateID() != KErrNotFound ) - { - iOldMediaServers[i]->SetSystemUpdateID( KErrNotFound ); - iDbManager->UpdateMediaServerInfo( iOldMediaServers[i] ); - } - } - - iAllFound = EFalse; - SendProgressInfo ( 0 ); - } - -// --------------------------------------------------------------------------- -// Harvests media servers -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::HarvestMediaserversL() - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - HarvestMediaserversL")); - - if ( !iAvControlPoint ) - { - User::Leave( KErrNotReady ); - } - - if ( !iMediaservers.Count() ) - { - User::Leave( KErrNotFound ); - } - - TBool harvestNeeded = EFalse; - for ( TInt i = 0; i < iMediaservers.Count(); i++ ) - { - if (iMediaservers[i]->iMediaserverState - == ECmMdhMediaserverNotSynchronized ) - { - harvestNeeded = ETrue; - i = iMediaservers.Count(); // break from the loop - } - } - - if ( !harvestNeeded ) - { - User::Leave( KErrAlreadyExists ); - } - - if ( !iMetadataCollector ) - { - LOG( _L("[CmMdh Server]\t Creating metadata collector.." ) ); - - TInt searchCount = KDefaultChunkSize; - TInt addGranularity = KDefaultAddGranularity; - iSettings->GetSearchCount( searchCount ); - iSettings->GetAddCount( addGranularity ); - TRACE( Print( - _L("[CmMdh Server]\t using chunk size %d and addgran %d"), - searchCount, addGranularity)); - iMetadataCollector = - CCmMdhMetadataCollector::NewL( - *this, *iAvControlPoint, searchCount, addGranularity ); - - } - iMediaserverIndex = 0; - iHarvestErrCode = KErrNone; - DoHarvestMediaserverL( iMediaserverIndex ); - - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - HarvestMediaserversL end")); - - } - -// --------------------------------------------------------------------------- -// Harvest completion callback function -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::HarvestCompleteL( TInt aErr ) - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::HarvestComplete")); - iHarvestActive = EFalse; - if ( aErr != KErrNone ) - { - iHarvestErrCode = aErr; - } - else - { - TInt newUpdateId = - iMediaservers[iMediaserverIndex]->iSystemUpdateId; - if ( newUpdateId ) // was set to 0 if no update needed - { - // store changed systemupdateid - CCmMediaServerFull* tempServer = CCmMediaServerFull::NewLC(); - tempServer->SetUDNL( - *(iMediaservers[iMediaserverIndex]->iUuid) ); - iDbManager->PrepareQueryCmdL( EMediaServerInfoQyery ); - TInt errCode = iDbManager->QueryMediaServerL( tempServer ); - if ( errCode != KErrNotFound ) - { - TRACE( Print( _L - ("[CmMdh Server]\t Updating systemupdateid to %d.."), - newUpdateId )); - - tempServer->SetSystemUpdateID( newUpdateId ); - iDbManager->UpdateMediaServerInfo( tempServer ); - } - CleanupStack::PopAndDestroy( tempServer ); - } - } - - if ( ++iMediaserverIndex < iMediaservers.Count() ) - { - // harvest next - DoHarvestMediaserverL( iMediaserverIndex ); - } - else - { - // no more media servers - iMdhServer.SetServerStateL(ECmMdhServerStateIdle, iHarvestErrCode); - } - } - - -// --------------------------------------------------------------------------- -// Cancels search -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::CancelSearchL() - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::CancelSearchL")); - if (!iTimer) // no search is active - { - User::Leave( KErrNotReady ); - } - - iTimer->Cancel(); - iMediaservers.ResetAndDestroy(); - delete iTimer; - iTimer = NULL; - iMdhServer.SetServerStateL(ECmMdhServerStateIdle, KErrCancel); - } - -// --------------------------------------------------------------------------- -// Cancels harvest -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::CancelHarvestL() - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::CancelHarvestL")); - iHarvestActive = EFalse; - iMetadataCollector->CancelHarvest(); - iMdhServer.SetServerStateL(ECmMdhServerStateIdle, KErrCancel); - } - -// --------------------------------------------------------------------------- -// Gets media server id from database -// --------------------------------------------------------------------------- -TInt CCmMdhMediaserverContainer::IdForMediaServerL( TDesC8& aUuid ) - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::IdForMediaServerL")); - - iDbManager->PrepareQueryCmdL( EMediaServerIdQuery ); - - TInt id = iDbManager->QueryMediaServerId( aUuid ); - TRACE( Print( _L("[CmMdh Server]\t returning id %d"), id)); - - return id; - } - -// --------------------------------------------------------------------------- -// Sends progress info -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::SendProgressInfo( TInt aProgress ) - { - TRACE( Print( _L( - "[CmMdh Server]\t CCmMdhMediaserverContainer::\ - SendProgressInfo( %d )"), - aProgress)); - -#ifdef _DEBUG - - TInt alloc; - TInt cells = User::Heap().AllocSize( alloc ); - TInt size = User::Heap().Size(); - TRACE(Print(_L("[CmMdh Server]\t heap allocsize %d, size %d, cells %d"), - alloc, size, cells )); - -#endif - - - if ( iProgressInfo.iTotalItems > iProgressInfo.iProcessedItems ) - { - iProgressInfo.iProcessedItems += aProgress; - TCmProgressInfoPckg progressPckg( iProgressInfo ); - TRACE( Print( _L("[CmMdh Server]\t processed: %d total %d"), - iProgressInfo.iProcessedItems, iProgressInfo.iTotalItems) ); - - if ( ( iProgressInfo.iTotalItems <= iProgressInfo.iProcessedItems ) || - ( iProgressInfo.iTotalItems > iProgressInfo.iProcessedItems && - iProgressInfo.iProcessedItems > 0 && - ( iProgressInfo.iProcessedItems - iPropertyItemIndex ) >= - iProgressInfo.iTotalItems / KDefaultCaculateSize ) - ) - { - iPropertyItemIndex = iProgressInfo.iProcessedItems; - TInt err = RProperty::Set( KCmPropertyCat, KCmProperty, - progressPckg ); - TRACE( Print( _L("[CmMdh Server]\t RProperty::Set returned %d"), - err)); - } - else - { - LOG(_L("[CmMdh Server]\t progress small no need to pub&sub")); - } - } - - else - { - iProgressInfo.iProcessedItems += aProgress; - LOG(_L("[CmMdh Server]\t Bigger than 100%% or not beginning")); - } - - } - - -// Responses - -// --------------------------------------------------------------------------- -// Observer callback for Content Directory Search function. -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::CdsSearchResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& /*aContainerId*/, - const TDesC8& /*aSearchCriteria*/, - const TDesC8& /*aFilter*/, - TInt /*aIndex*/, - TInt /*aRequest*/, - const TDesC8& /*aSortCriteria*/, - const TDesC8& aResult, - TInt aReturned, - TInt aMatches, - const TDesC8& /*aUpdateID*/) - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - CdsSearchResponse")); - - TRAPD( err, CdsSearchResponseL( aUuid, - aSessionId, - aErr, - aResult, - aReturned, - aMatches ) ); - if ( err ) - { - TRACE( Print(_L("[CmMdh Server]\t CdsSearchResponseL leaved with err:\ - %d"), err ) ); - } - } - -// --------------------------------------------------------------------------- -// Leaving version of CdsSearchResponseL callback. -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::CdsSearchResponseL( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aResult, - TInt aReturned, - TInt aMatches - ) - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - CdsSearchResponseL")); - if ( iHarvestActive ) - { - iMetadataCollector->CdsSearchResponse( - aSessionId, aErr, aResult, aReturned, aMatches ); - } - else if ( iTimer || iResponsesPending ) // media server search active - { - if ( aErr != EHttpOk ) - { - for( TInt i = 0; i < iMediaservers.Count(); i++ ) - { - if ( *(iMediaservers[i]->iUuid) == aUuid ) - { - LOG(_L("[CmMdh Server]\t search error, \ - will not sync this..")); - iMediaservers[i]->iMediaserverState = - ECmMdhMediaserverNoSearchCaps; - iMediaservers[i]->iSystemUpdateId = 0; - } - } - } - else - { - iProgressInfo.iTotalItems += aMatches; - TRACE( Print( _L("[CmMdh Server]\t total item count \ - increased to %d"), - iProgressInfo.iTotalItems)); - if( iAllFound ) - { - // when all servers are discovered,1 percentage is - // set. - SendProgressInfo( iProgressInfo.iTotalItems / - KDefaultCaculateSize ); - iProgressInfo.iProcessedItems = 0; - delete iTimer; - iTimer = NULL; - iOldMediaServers.ResetAndDestroy(); - TRACE( Print( _L("[CmMdh Server]\t All servers found!!!"))); - } - } - DecResponsesAndFinishIfReadyL(); - } - } - -// --------------------------------------------------------------------------- -// Observer callback for Content Directory SearchCapabilities function. -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::CdsSearchCapabilitiesResponse( - const TDesC8& aUuid, - TInt /* aSessionId */, - TInt aErr, - const TDesC8& aSearchCaps ) - { - - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - CdsSearchCapabilitiesResponse")); - - TRAPD( err, CdsSearchCapabilitiesResponseL( aUuid, - aErr, - aSearchCaps ) ); - if ( err ) - { - TRACE( Print(_L("[CmMdh Server]\t CdsSearchCapabilitiesResponseL \ - leaved with err: %d"), err ) ); - } - } - -// --------------------------------------------------------------------------- -// Leaving version of CdsSystemUpdateIdResponse callback. -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::CdsSearchCapabilitiesResponseL( - const TDesC8& aUuid, - TInt aErr, - const TDesC8& aSearchCaps ) - { - - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - CdsSearchCapabilitiesResponseL")); - -#ifdef _DEBUG - - HBufC* sc = UpnpString::ToUnicodeL( aSearchCaps ); - TRACE( Print(_L("[CmMdh Server]\t err: %d caps: %S"), - aErr, sc )); - delete sc; - -#endif - - - HBufC8* uuid = HBufC8::NewL( aUuid.Length() ); - uuid->Des().Copy( aUuid ); - CleanupStack::PushL( uuid ); - CCmMdhMediaserverInfo* info = CCmMdhMediaserverInfo::NewL( ); - CleanupStack::PushL( info ); - info->iUuid = uuid; - iMediaservers.AppendL( info ); - - if ( aErr == EHttpOk && aSearchCaps.Length() ) // has search capabilities - { - info->iMediaserverState = ECmMdhMediaserverNotSynchronized; - iAvControlPoint->CdsSystemUpdateIdActionL( aUuid ); - } - else - { - DecResponsesAndFinishIfReadyL(); - info->iSystemUpdateId = 0; - info->iMediaserverState = ECmMdhMediaserverNoSearchCaps; - } - - CleanupStack::Pop( info ); - CleanupStack::Pop( uuid ); - } - - -// --------------------------------------------------------------------------- -// Observer callback for Content Directory GetSystemUpdateID function. -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::CdsSystemUpdateIdResponse( - const TDesC8& aUuid, - TInt /* aSessionId */, - TInt aErr, - TInt aSystemUpdateId ) - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - CdsSystemUpdateIdResponse")); - - TRACE( Print(_L("[CmMdh Server]\t err: %d suid: %d"), - aErr, aSystemUpdateId )); - - TRAPD( err, CdsSystemUpdateIdResponseL( aUuid, - aErr, - aSystemUpdateId ) ); - if ( err ) - { - TRACE( Print(_L("[CmMdh Server]\t CdsSystemUpdateIdResponseL leaved \ - with err: %d"), err ) ); - } - } - -// --------------------------------------------------------------------------- -// Leaving version of CdsSystemUpdateIdResponse callback. -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::CdsSystemUpdateIdResponseL( - const TDesC8& aUuid, - TInt aErr, - TInt aSystemUpdateId ) - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - CdsSystemUpdateIdResponseL")); - - TRACE( Print(_L("[CmMdh Server]\t err: %d suid: %d"), - aErr, aSystemUpdateId )); - for( TInt i = 0; i < iMediaservers.Count(); i++ ) - { - if ( *(iMediaservers[i]->iUuid) == aUuid ) - - { - LOG(_L("[CmMdh Server]\t checking \ - media server's systemupdateid..")); - - TInt errCode = KErrNotFound; - if ( aErr == EHttpOk ) - { - CCmMediaServerFull* tempServer = CCmMediaServerFull::NewLC(); - tempServer->SetUDNL( aUuid ); - iDbManager->PrepareQueryCmdL( EMediaServerInfoQyery ); - errCode = iDbManager->QueryMediaServerL( tempServer ); - if ( errCode != KErrNotFound ) - { - TRACE( Print( _L - ("[CmMdh Server]\t returned id %d, old id %d"), - aSystemUpdateId, tempServer->SystemUpdateID() )); - - - if ( aSystemUpdateId == tempServer->SystemUpdateID() ) - { - LOG(_L("[CmMdh Server]\t systemupdateid \ - match, no sync needed..")); - iMediaservers[i]->iMediaserverState = - ECmMdhMediaserverSynchronized; - iMediaservers[i]->iSystemUpdateId = 0; - DecResponsesAndFinishIfReadyL(); - } - else - { - iMediaservers[i]->iSystemUpdateId = aSystemUpdateId; - errCode = iAvControlPoint->CdsSearchActionL( aUuid, - KRootContainerId, - KSearchCriteria, - KSearchFilter, - 0, - 1, - KSortCriteria ); - TRACE( Print( _L("[CmMdh Server]\t search \ - request returned %d"), errCode)); - } - } - CleanupStack::PopAndDestroy( tempServer ); - } - if ( aErr != EHttpOk || errCode < 0 ) - { - LOG(_L("[CmMdh Server]\t error with systemupdate \ - id response, not syncing this..")); - iMediaservers[i]->iMediaserverState = - ECmMdhMediaserverSynchronized; - iMediaservers[i]->iSystemUpdateId = 0; - DecResponsesAndFinishIfReadyL(); - } - } - } - } - - -// --------------------------------------------------------------------------- -// Observer callback for upnp utilities -// Called when wlan connection is lost -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::ConnectionLost() - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::\ - ConnectionLost")); - iHarvestActive = EFalse; - if( iMetadataCollector ) - { - iMetadataCollector->CancelHarvest(); - } - TRAP_IGNORE( iMdhServer.SetServerStateL( ECmMdhServerStateIdle, - KErrDisconnected ) ); - } - -// --------------------------------------------------------------------------- -// CCmMdhMediaserverContainer::AddHashValueForResponseL -// --------------------------------------------------------------------------- -TInt CCmMdhMediaserverContainer::AddHashValueForResponseL( - TInt aMediaServerId, - TInt aSearchIndex, - TInt aItemCount, - const TDesC8& aHash ) - { - CCmSearchResponseHash* newHash = CCmSearchResponseHash::NewL( aSearchIndex, - aItemCount, - aHash ); - CleanupStack::PushL( newHash ); - TInt errCode = iDbManager->AddHashValue( aMediaServerId, newHash ); - CleanupStack::PopAndDestroy( newHash ); - return errCode; - } - -// --------------------------------------------------------------------------- -// Gets media server hash values -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::HashValuesForMediaServerL( TInt aMediaServerId, - RPointerArray& aHashValues ) - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::HashValuesForMediaServerL")); - - iDbManager->PrepareQueryCmdL( EHashValueQuery ); - - TInt err = iDbManager->QueryHashValuesL( aMediaServerId, aHashValues ); - - return; - } - -// --------------------------------------------------------------------------- -// Deletes old hash values -// --------------------------------------------------------------------------- -void CCmMdhMediaserverContainer::DeleteOldHashValuesL( const TInt aMediaserverId, - const TInt aSearchIndex ) - { - LOG(_L("[CmMdh Server]\t CCmMdhMediaserverContainer::DeleteOldHashValuesL")); - iDbManager->DeleteHashValuesL( aMediaserverId, aSearchIndex ); - } - -// End of file - -