--- a/upnpavcontroller/upnpavcontrollerserver/src/upnpbrowsingsession.cpp Fri Sep 17 08:31:21 2010 +0300
+++ b/upnpavcontroller/upnpavcontrollerserver/src/upnpbrowsingsession.cpp Mon Nov 01 12:37:49 2010 +0200
@@ -1,2618 +1,1297 @@
-/*
-* Copyright (c) 2006 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: server impl. of session against media server
-*
-*/
-
-
-
-
-
-
-// INCLUDE FILES
-// System
-#include <utf.h>
-#include <mmf/common/mmfcontrollerpluginresolver.h>
-#include <centralrepository.h>
-
-// upnp stack api
-#include <upnpstring.h>
-#include <upnpdevice.h>
-#include <upnpcontainer.h>
-#include <upnpservice.h>
-#include <upnpitem.h>
-#include <upnpelement.h>
-#include <upnpmediaserversettings.h>
-#include <upnpmediaserverclient.h>
-#include <upnpmediaservernotifier.h>
-#include <upnpfiletransferevent.h>
-
-#include <upnpavcontrolpoint.h>
-
-// upnpframework / avcontroller api
-#include "upnpavrenderingsessionobserver.h"
-
-// upnpframework / avcontroller helper api
-#include "upnpconstantdefs.h" // for upnp-specific stuff
-#include "upnpfileutility.h"
-#include "upnpitemutility.h"
-
-// upnpframework / xml parser api
-#include "upnpxmlparser.h"
-
-// upnpframework / internal api's
-#include "upnpcontentservercrkeys.h"
-#include "upnpcommonutils.h"
-#include "upnpcdsreselementutility.h"
-#include "upnpmetadatafetcher.h"
-
-// avcontroller internal
-#include "upnpfilesharingactive.h"
-#include "upnpavdispatcher.h"
-#include "upnpavbrowserequest.h"
-#include "upnpavrequest.h"
-#include "upnpaverrorhandler.h"
-#include "upnpavdeviceextended.h"
-#include "upnpdevicerepository.h"
-#include "upnpavbrowserespparams.h"
-#include "upnpavcontrollerserver.h"
-#include "upnpbrowsingsession.h"
-
-// CONSTANTS
-_LIT8( KDirectChildren, "BrowseDirectChildren" );
-_LIT8( KMetaData, "BrowseMetadata" );
-_LIT8( KImportUri, "importUri" );
-_LIT8( KCreateClass, "upnp:createClass" );
-_LIT8( KBrowseMetadata, "BrowseMetadata" );
-const TInt KDefaultInstanceId = 0;
-const TInt KExpectedCount = 1;
-
-_LIT( KComponentLogfile, "upnpavcontrollerserver.txt");
-#include "upnplog.h"
-
-
-// ======== MEMBER FUNCTIONS ========
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::NewL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-CUPnPBrowsingSession* CUPnPBrowsingSession::NewL
- (
- RUpnpMediaServerClient& aClient,
- CUpnpAVControllerServer& aServer,
- TInt aSessionId,
- const TDesC8& aUuid
- )
- {
- CUPnPBrowsingSession* self = new (ELeave) CUPnPBrowsingSession(
- aClient, aServer, aSessionId );
- CleanupStack::PushL( self );
-
- self->ConstructL( aUuid );
- CleanupStack::Pop( self );
- return self;
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CUPnPBrowsingSession
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-CUPnPBrowsingSession::CUPnPBrowsingSession
- (
- RUpnpMediaServerClient& aClient,
- CUpnpAVControllerServer& aServer,
- TInt aSessionId
- ):
- iMediaServer( aClient ),
- iServer( aServer ),
- iSessionId( aSessionId ),
-
- iInstanceId( KDefaultInstanceId ),
- iIPSessionId( KErrNotFound ),
-
- iTransferId( KErrNotFound ),
-
- iTransferEventReceived( EFalse ),
- iInternalState( ENone ),
- iCopyState( EIdle )
- {
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::~CUPnPBrowsingSession
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-CUPnPBrowsingSession::~CUPnPBrowsingSession()
- {
- iIPSessionId = KErrNotFound;
-
- delete iDevice;
- delete iRespBuf;
- delete iRespBuf2;
-
- delete iImportURI;
- delete iSourceURI;
-
- delete iItemId;
-
- delete iContainerId;
-
- delete iSharedItem;
-
- delete iMediaServerNotifier;
-
- delete iFileSharing;
-
- delete iLocalMediaServerUuid;
-
- delete iOriginalLocation;
-
- delete iFilePath;
-
- delete iMSSettings;
- delete iAppSettings;
-
- delete iActionMessage;
- delete iDeviceMessage;
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::ConstructL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::ConstructL( const TDesC8& aUuid )
- {
- __LOG( "CUPnPBrowsingSession::ConstructL" );
-
- iMediaServerNotifier = CUpnpMediaServerNotifier::NewL( this );
- iFileSharing = CUPnPFileSharingActive::NewL();
-
- // Get the local Media Server Uuid, if available
- const RPointerArray<CUpnpAVDeviceExtended>& devList =
- iServer.DeviceRepository().DeviceList();
- TInt count = devList.Count();
- TInt i;
- for( i = 0; i < count; i++ )
- {
- if( devList[ i ]->Local() )
- {
- __ASSERTD( !iLocalMediaServerUuid, __FILE__, __LINE__ );
- iLocalMediaServerUuid = devList[i]->Uuid().AllocL();
- }
- if( devList[ i ]->Uuid() == aUuid )
- {
- __ASSERTD( !iDevice, __FILE__, __LINE__ );
- iDevice = CUpnpAVDeviceExtended::NewL( *devList[ i ] );
- }
- }
- if( !iDevice )
- {
- if( aUuid == KNullDesC8 ) // Fix to enable AV Controller helper usage
- {
- iDevice = CUpnpAVDeviceExtended::NewL();
- }
- else
- {
- User::Leave( KErrNotFound );
- }
- }
-
- iMSSettings = CUpnpMediaServerSettings::NewL();
- iAppSettings = CRepository::NewL( KCrUidUpnpContentserver );
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::RcSetVolumeResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::RcSetVolumeResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstance*/,
- const TDesC8& /*aChannel*/,
- const TDesC8& /*aDesiredVolume*/ )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::RcVolumeResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::RcVolumeResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstance*/,
- const TDesC8& /*aChannel*/,
- const TDesC8& /*aCurrentVolume*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::RcSetMuteResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::RcSetMuteResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstance*/,
- const TDesC8& /*aChannel*/,
- const TDesC8& /*aDesiredMute*/ )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::RcMuteResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::RcMuteResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstance*/,
- const TDesC8& /*aChannel*/,
- const TDesC8& /*aCurrentMute*/ )
- {
- // No implementation required
- }
-
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtSetTransportUriResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtSetTransportUriResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/,
- const TDesC8& /*aCurrentUri*/,
- const TDesC8& /*aCurrentUriMetaData*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtSetNextTransportUriResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtSetNextTransportUriResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/,
- const TDesC8& /*aNextUri*/,
- const TDesC8& /*aNextUriMetaData*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtMediaInfoResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtMediaInfoResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/,
- const TDesC8& /*aNrTracks*/,
- const TDesC8& /*aMediaDuration*/,
- const TDesC8& /*aCurrentUri*/,
- const TDesC8& /*aCurrentUriMetaData*/,
- const TDesC8& /*aNextUri*/,
- const TDesC8& /*aNextUriMetaData*/,
- const TDesC8& /*aPlayMedium*/,
- const TDesC8& /*aRecordMedium*/,
- const TDesC8& /*aWriteStatus*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtGetTransportInfoResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtGetTransportInfoResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/,
- const TDesC8& /*aCurrenTransportState*/,
- const TDesC8& /*aCurrentTransportStatus*/,
- const TDesC8& /*aCurrentSpeed*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtPositionInfoResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtPositionInfoResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/,
- const TDesC8& /*aTrack*/,
- const TDesC8& /*aTrackDuration*/,
- const TDesC8& /*aTrackMetaData*/,
- const TDesC8& /*aTrackURI*/,
- const TDesC8& /*aRelTime*/,
- const TDesC8& /*aAbsTime*/,
- const TDesC8& /*aRelCount*/,
- const TDesC8& /*aAbsCount*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtDeviceCapabilitiesResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtDeviceCapabilitiesResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/,
- const TDesC8& /*aPlayMedia*/,
- const TDesC8& /*aRecMedia*/,
- const TDesC8& /*aRecQualityMode*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtTransportSettingsResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtTransportSettingsResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/,
- const TDesC8& /*aPlayMode*/,
- const TDesC8& /*aRecQualityMode*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtStopResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtStopResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtPlayResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtPlayResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/,
- const TDesC8& /*aSpeed*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtPauseResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtPauseResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtRecordResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtRecordResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtSeekResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtSeekResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/,
- const TDesC8& /*aUnit*/,
- const TDesC8& /*aTarget*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtNextResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtNextResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtPreviousResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtPreviousResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtSetPlayModeResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtSetPlayModeResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/,
- const TDesC8& /*aNewPlayMode*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtSetRecordModeResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtSetRecordModeResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aInstanceId*/,
- const TDesC8& /*aNewRecordQuality*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsSearchCapabilitiesResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsSearchCapabilitiesResponse(
- const TDesC8& /*aUuid*/,
- TInt aSessionId,
- TInt aErr,
- const TDesC8& aSearchCaps)
- {
- __LOG1( "CUPnPBrowsingSession::CdsSearchCapabilitiesResponse: %d",
- aErr );
-
- __ASSERTD( iIPSessionId == aSessionId, __FILE__, __LINE__ );
-
- iServer.Dispatcher().UnRegister( iIPSessionId );
- iIPSessionId = KErrNotFound;
- //iActionPending = EFalse;
-
- if( iActionMessage )
- {
- aErr = UPnPAVErrorHandler::ConvertToSymbianErrorCode( aErr,
- EUPnPContentDirectoryError );
-
- if( aErr == KErrNone )
- {
- if( aSearchCaps != KNullDesC8 )
- {
- delete iRespBuf; iRespBuf = NULL;
- iRespBuf = aSearchCaps.Alloc();
- if( iRespBuf )
- {
- TPckg<TInt> resp1( aSearchCaps.Length() );
- iActionMessage->Write( 1, resp1 );
- }
- else
- {
- TPckg<TInt> resp1( 0 );
- iActionMessage->Write( 1, resp1 );
- }
-
- iActionMessage->Complete(
- EAVControllerGetSearchCapabilitiesSizeCompleted );
- delete iActionMessage; iActionMessage = NULL;
- }
- else
- {
- TPckg<TInt> resp1( 0 );
- iActionMessage->Write( 1, resp1 );
-
- iActionMessage->Complete(
- EAVControllerGetSearchCapabilitiesSizeCompleted );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- else
- {
- iActionMessage->Complete( aErr );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- else
- {
- __LOG( "CdsSearchCapabilitiesResponse - no msg" );
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsSortCapabilitiesResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsSortCapabilitiesResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aSortCaps*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsSystemUpdateIdResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsSystemUpdateIdResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- TInt /*aSystemUpdateId*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsBrowseResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsBrowseResponse(
- const TDesC8& aUuid,
- TInt aSessionId,
- TInt aErr,
- const TDesC8& /*aObjectID*/,
- const TDesC8& aBrowseFlag,
- const TDesC8& /*aFilter*/,
- TInt /*aIndex*/,
- TInt /*aRequest*/,
- const TDesC8& /*aSortCriteria*/,
- const TDesC8& aResult,
- TInt aReturned,
- TInt aMatches,
- const TDesC8& aUpdateID )
- {
- __LOG1( "CUPnPBrowsingSession::CdsBrowseResponse: %d", aErr );
-
- __ASSERTD( iIPSessionId == aSessionId, __FILE__, __LINE__ );
-
- iServer.Dispatcher().UnRegister( iIPSessionId );
- iIPSessionId = KErrNotFound;
-
- if( iActionMessage )
- {
- if ( aBrowseFlag.CompareF( KBrowseMetadata ) == 0 && aReturned == 0
- && aErr != KErrCouldNotConnect && aErr != KErrHostUnreach )
- {
- aErr = ENoSuchObject; //the file not exist;
- }
-
- if ( aErr != KErrCouldNotConnect && aErr != KErrHostUnreach )
- {
- aErr = UPnPAVErrorHandler::ConvertToSymbianErrorCode( aErr,
- EUPnPContentDirectoryError );
- __LOG1( "CUPnPBrowsingSession::CdsBrowseResponse:001 %d", aErr );
- }
-
- if( aErr == KErrNone )
- {
- if( aResult != KNullDesC8 )
- {
-
- if( iInternalState == ECopyToPhone )
- {
- TRAP( aErr, SendCreateObjectActionL(
- *iLocalMediaServerUuid, KContainerIdAny, aResult ) );
- if( aErr )
- {
- iInternalState = ENone;
- iActionMessage->Complete( aErr );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- else if( iInternalState == ECopyLocal )
- {
- TRAP( aErr, CheckAndSendCreateObjectActionL( aResult ) );
- if( aErr )
- {
- iInternalState = ENone;
- iActionMessage->Complete( aErr );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- else if( iInternalState == EDestroyObject )
- {
- TRAP( aErr, CheckAndSendDestroyObjectActionL( aResult) );
- if( aErr )
- {
- iInternalState = ENone;
- iActionMessage->Complete( aErr );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- else // Browse
- {
- delete iRespBuf; iRespBuf = NULL;
- delete iRespBuf2; iRespBuf2 = NULL;
- iRespBuf = aResult.Alloc();
- iRespBuf2 = aUpdateID.Alloc();
-
- if( iRespBuf && iRespBuf2 )
- {
- TUpnpAVBrowseRespParams params;
- TPckg<TUpnpAVBrowseRespParams> resp2( params );
- params.iMatches = aReturned ;
- params.iTotalCount = aMatches;
- params.iResponseSize = aResult.Length();
- params.iUpdateIdSize = aUpdateID.Length();
- iActionMessage->Write( 2, resp2 );
- iActionMessage->Complete(
- EAVControllerGetBrowseResponseSizeCompleted );
- }
- else
- {
- delete iRespBuf; iRespBuf = NULL;
- delete iRespBuf2; iRespBuf2 = NULL;
- iActionMessage->Complete( KErrNoMemory );
- }
- iInternalState = ENone;
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- else
- {
- if( iInternalState == EBrowse )
- {
- TUpnpAVBrowseRespParams params;
- TPckg<TUpnpAVBrowseRespParams> resp2( params );
- params.iMatches = 0;
- params.iTotalCount = 0;
- params.iResponseSize = 0;
- params.iUpdateIdSize = 0;
- iActionMessage->Write( 2, resp2 );
-
- iInternalState = ENone;
- iActionMessage->Complete(
- EAVControllerGetBrowseResponseSizeCompleted );
- delete iActionMessage; iActionMessage = NULL;
- }
- else
- {
- iInternalState = ENone;
- iActionMessage->Complete( aErr );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- }
- else
- {
- iInternalState = ENone;
- iActionMessage->Complete( aErr );
- delete iActionMessage; iActionMessage = NULL;
- if ( KErrCouldNotConnect == aErr || KErrHostUnreach == aErr )
- {
- iServer.DeviceDisappearedL( aUuid );
- }
- }
- }
- else
- {
- __LOG( "CdsBrowseResponse - no msg" );
- }
-
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsSearchResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::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 )
- {
- __LOG1( "CUPnPBrowsingSession::CdsSearchResponse: %d", aErr );
-
- __ASSERTD( iIPSessionId == aSessionId, __FILE__, __LINE__ );
-
- iServer.Dispatcher().UnRegister( iIPSessionId );
- //iActionPending = EFalse;
- iIPSessionId = KErrNotFound;
-
- if( iActionMessage )
- {
- aErr = UPnPAVErrorHandler::ConvertToSymbianErrorCode( aErr,
- EUPnPContentDirectoryError );
-
- if( aErr == KErrNone )
- {
- if( aResult != KNullDesC8 )
- {
- delete iRespBuf; iRespBuf = NULL;
- delete iRespBuf2; iRespBuf2 = NULL;
- iRespBuf = aResult.Alloc();
- iRespBuf2 = aUpdateID.Alloc();
-
- if( iRespBuf && iRespBuf2 )
- {
- TUpnpAVBrowseRespParams params;
- TPckg<TUpnpAVBrowseRespParams> resp2( params );
- params.iMatches = aReturned ;
- params.iTotalCount = aMatches;
- params.iResponseSize = aResult.Length();
- params.iUpdateIdSize = aUpdateID.Length();
- iActionMessage->Write( 2, resp2 );
- iActionMessage->Complete(
- EAVControllerGetSearchResponseSizeCompleted );
- }
- else
- {
- delete iRespBuf; iRespBuf = NULL;
- delete iRespBuf2; iRespBuf2 = NULL;
- iActionMessage->Complete( KErrNoMemory );
- }
- delete iActionMessage; iActionMessage = NULL;
- }
- else
- {
- TUpnpAVBrowseRespParams params;
- TPckg<TUpnpAVBrowseRespParams> resp2( params );
- params.iMatches = 0;
- params.iTotalCount = 0;
- params.iResponseSize = 0;
- params.iUpdateIdSize = 0;
- iActionMessage->Write( 2, resp2 );
-
- iActionMessage->Complete(
- EAVControllerGetSearchResponseSizeCompleted );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- else
- {
- iActionMessage->Complete( aErr );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- else
- {
- __LOG( "CdsSearchResponse - no msg" );
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsDestroyObjectResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsDestroyObjectResponse(
- const TDesC8& /*aUuid*/,
- TInt aSessionId,
- TInt aErr,
- const TDesC8& /*aObjectId*/ )
- {
- __LOG1( "CUPnPBrowsingSession::CdsDestroyObjectResponse: %d", aErr );
-
- __ASSERTD( iIPSessionId == aSessionId, __FILE__, __LINE__ );
-
- iServer.Dispatcher().UnRegister( iIPSessionId );
- iIPSessionId = KErrNotFound;
-
- iInternalState = ENone;
-
- if( iActionMessage )
- {
- aErr = UPnPAVErrorHandler::ConvertToSymbianErrorCode( aErr,
- EUPnPContentDirectoryError );
-
- if( aErr == KErrNone )
- {
- iActionMessage->Complete( EAVControllerDeleteObjectCompleted );
- delete iActionMessage; iActionMessage = NULL;
- }
- else
- {
- iActionMessage->Complete( aErr );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- else
- {
- __LOG( "CdsDestroyObjectResponse - no msg" );
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsUpdateObjectResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsUpdateObjectResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aObjectId*/,
- const TDesC8& /*aCurrentTagValue*/,
- const TDesC8& /*aNewTagValue*/ )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsImportResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsImportResponse(
- const TDesC8& /*aUuid*/,
- TInt aSessionId,
- TInt aErr,
- const TDesC8& /*aSourceURI*/,
- const TDesC8& /*aDestinationURI*/,
- const TDesC8& aTransferId )
- {
- __LOG1( "CUPnPBrowsingSession::CdsImportResponse: %d", aErr );
-
- __ASSERTD( iIPSessionId == aSessionId, __FILE__, __LINE__ );
-
- iServer.Dispatcher().UnRegister( iIPSessionId );
- iIPSessionId = KErrNotFound;
-
- aErr = UPnPAVErrorHandler::ConvertToSymbianErrorCode( aErr,
- EUPnPContentDirectoryError );
-
- if( aErr == KErrNone )
- {
-
- TLex8 lex( aTransferId );
- aErr = lex.Val( iTransferId );
-
- CopyFinished( aErr, EFalse );
- }
- else
- {
- CopyFinished( aErr, EFalse );
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsExportResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsExportResponse(
- const TDesC8& /*aUuid*/,
- TInt aSessionId,
- TInt aErr,
- const TDesC8& /*aSourceURI*/,
- const TDesC8& /*aDestinationURI*/,
- const TDesC8& aTransferId )
- {
- __LOG1( "CUPnPBrowsingSession::CdsExportResponse: %d", aErr );
-
- __ASSERTD( iIPSessionId == aSessionId, __FILE__, __LINE__ );
-
- iServer.Dispatcher().UnRegister( iIPSessionId );
- iIPSessionId = KErrNotFound;
-
- aErr = UPnPAVErrorHandler::ConvertToSymbianErrorCode( aErr,
- EUPnPContentDirectoryError );
-
- if( aErr == KErrNone )
- {
- TLex8 lex( aTransferId );
- aErr = lex.Val( iTransferId );
-
- CopyFinished( aErr, EFalse );
- }
- else
- {
-
- CopyFinished( aErr, EFalse );
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsStopTransferResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsStopTransferResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aTransferId*/ )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsCTransferProgressResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsCTransferProgressResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aTransferId*/,
- const TDesC8& /*aTransferStatus*/,
- const TDesC8& /*aTransferLength*/,
- const TDesC8& /*aTransferTotal*/ )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsDeleteResourceResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsDeleteResourceResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aResourceUri*/ )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsCreateReferenceResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsCreateReferenceResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aContainerId*/,
- const TDesC8& /*aObjectId*/,
- const TDesC8& /*aNewId*/ )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsCreateObjectResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsCreateObjectResponse(
- const TDesC8& /*aUuid*/,
- TInt aSessionId,
- TInt aErr,
- const TDesC8& /*aContainerID*/,
- const TDesC8& /*aElements*/,
- const TDesC8& aObjectID,
- const TDesC8& aResult )
- {
- __LOG1( "CUPnPBrowsingSession::CdsCreateObjectResponse: %d" , aErr );
-
- __ASSERTD( iIPSessionId == aSessionId, __FILE__, __LINE__ );
-
- iServer.Dispatcher().UnRegister( iIPSessionId );
- //iActionPending = EFalse;
- iIPSessionId = KErrNotFound;
-
- aErr = UPnPAVErrorHandler::ConvertToSymbianErrorCode( aErr,
- EUPnPContentDirectoryError );
-
- if( aErr == KErrNone )
- {
- if( iInternalState == ECopyLocal ||
- iInternalState == ECopyToPhone )
- {
- delete iImportURI; iImportURI = NULL;
- TRAP( aErr, iImportURI = ParseCreateObjectResponseL( aResult ) );
- if( aErr == KErrNone )
- {
- if( iSourceURI )
- {
- if( iInternalState == ECopyLocal )
- {
- // Export from the local Media Server to the
- // Remote Media Server
- delete iItemId;
- iItemId = aObjectID.Alloc(); // Null ok at this point
-
- TRAP( aErr, SendExportActionL() );
- if( aErr )
- {
- CopyFinished( aErr, EFalse );
- }
- }
- else // iInternalState == ECopyToPhone
- {
- TRAP( aErr, SendImportActionL() );
- if( aErr )
- {
- CopyFinished( aErr, EFalse );
- }
- }
- }
- else
- {
- CopyFinished( KErrGeneral, EFalse );
- }
- }
- else
- {
- CopyFinished( aErr, EFalse );
- }
- }
- else // Create container
- {
- if( iActionMessage )
- {
- HBufC8* objectID = HBufC8::New( aObjectID.Length() );
- if( objectID )
- {
- objectID->Des().Copy( aObjectID );
- iActionMessage->Write( 1, *objectID );
- iActionMessage->Complete(
- EAVControllerCreateContainerCompleted );
- delete objectID;
- }
- else
- {
- iActionMessage->Write( 1, KNullDesC8 );
- iActionMessage->Complete( KErrNoMemory );
- }
- delete iActionMessage; iActionMessage = NULL;
- }
- iInternalState = ENone;
- }
- }
- else
- {
- if( iInternalState == ECopyLocal ||
- iInternalState == ECopyToPhone )
- {
- CopyFinished( aErr, EFalse );
- }
- else
- {
- // Create container failed
- iInternalState = ENone;
- iActionMessage->Complete( aErr );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CmProtocolInfoResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CmProtocolInfoResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aSource*/,
- const TDesC8& /*aSink*/ )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CmPrepareResponse
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CmPrepareResponse(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aRemoteProtocolInfo*/,
- const TDesC8& /*aPeerConnectionManager*/,
- const TDesC8& /*aPeerConnectionId*/,
- const TDesC8& /*aDirection*/,
- TInt /*aConnection*/,
- TInt /*aTransport*/,
- TInt /*aRsc*/ )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CmComplete
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CmComplete(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- TInt /*aConnection*/ )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CmCurrentConnections
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CmCurrentConnections(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- const TDesC8& /*aConnections*/)
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CmCurrentInfo
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CmCurrentInfo(
- const TDesC8& /*aUuid*/,
- TInt /*aSessionId*/,
- TInt /*aErr*/,
- TInt /*rscId*/,
- TInt /*transportId*/,
- const TDesC8& /*aProtocolInfo*/,
- const TDesC8& /*aPeerConnectionManager*/,
- TInt /*peerId*/,
- const TDesC8& /*aDirection*/,
- const TDesC8& /*aStatus*/ )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsUpdateEvent
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsUpdateEvent(
- const TDesC8& /*aUuid*/,
- TInt /*aSystemUpdateId*/
- )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsContainerEvent
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsContainerEvent(
- const TDesC8& /*aUuid*/,
- const TDesC8& /*aConteinerIds*/
- )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CdsTransferEvent
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CdsTransferEvent(
- const TDesC8& /*aUuid*/,
- const TDesC8& /*aTransferIds*/
- )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::RcLastChangeEvent
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::RcLastChangeEvent(
- const TDesC8& /*aUuid*/,
- const TDesC8& /*aLastChange*/
- )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::AvtLastChangeEvent
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::AvtLastChangeEvent(
- const TDesC8& /*aUuid*/,
- const TDesC8& /*aLastChange*/
- )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CmSourceEvent
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CmSourceEvent(
- const TDesC8& /*aUuid*/,
- const TDesC8& /*aSource*/
- )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CmSinkEvent
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CmSinkEvent(
- const TDesC8& /*aUuid*/,
- const TDesC8& /*aSink*/
- )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CmConnectionsEvent
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CmConnectionsEvent(
- const TDesC8& /*aUuid*/,
- const TDesC8& /*aConnections*/
- )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::HttpResponseL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::HttpResponseL( CUpnpHttpMessage* /*aMessage*/ )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::DeviceDiscoveredL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::DeviceDiscoveredL( CUpnpDevice* /*aDevice*/ )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::DeviceDisappearedL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::DeviceDisappearedL( CUpnpDevice* /*aDevice*/ )
- {
- // No implementation required
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::FileTransferEvent
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::FileTransferEvent(
- CUpnpFileTransferEvent *aEvent )
- {
- __ASSERTD( aEvent, __FILE__, __LINE__ );
-
- __LOG1( "CUPnPBrowsingSession::FileTransferEvent, %d",
- aEvent->ErrorCode() );
-
- TInt err = UPnPAVErrorHandler::ConvertToSymbianErrorCode(
- aEvent->ErrorCode(), EUPnPContentDirectoryError );
-
- if( aEvent->TransferId() == iTransferId )
- {
- iTransferId = KErrNotFound;
- if( iInternalState == ECopyLocal )
- {
- if( iActionMessage )
- {
- CopyFinished( err, ETrue );
- }
- else
- {
- // Msg not received, set the flag instead
- iAsyncErr = err;
- iTransferEventReceived = ETrue;
- }
- }
- else if( iInternalState == ECopyToPhone )
- {
- TRAPD( err, HandleCopyToPhoneEventL( *aEvent, err ) );
- if ( err )
- {
- __LOG1( "CUPnPBrowsingSession::FileTransferEvent, %d",
- err );
- }
- }
- }
-
- delete aEvent;
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::HandleCopyToPhoneEventL
-// Handle CopyToPhoneEvent,and all leave function will move
-// to this function
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::HandleCopyToPhoneEventL(
- CUpnpFileTransferEvent& aEvent,
- TInt aError )
- {
- HBufC8* filepath = HBufC8::NewL( KMaxPath );
- CleanupStack::PushL( filepath );
-
- HBufC8* eventpath = CnvUtfConverter::ConvertFromUnicodeToUtf8L(
- aEvent.FilePath() );
- filepath->Des().Copy( *eventpath );
- delete eventpath;
- eventpath = NULL;
-
- if ( iActionMessage )
- {
- TInt res = iActionMessage->Write( 1, *filepath );
- if ( res )
- {
- __LOG1( "CUPnPBrowsingSession::HandleCopyToPhoneEventL, %d",
- res );
- }
- // clean up
- CleanupStack::PopAndDestroy( filepath );
- }
- else
- {
- iFilePath = filepath;
-
- // clean up
- CleanupStack::Pop( filepath );
- }
-
- if ( iActionMessage )
- {
- CopyFinished( aError, ETrue );
- }
- else
- {
- // Msg not received yet, set the flag instead
- iAsyncErr = aError;
- iTransferEventReceived = ETrue;
- }
-
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::NotifierError
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::NotifierError( TInt aError )
- {
- __LOG( "CUPnPBrowsingSession::NotifierError" );
-
- if( iActionMessage )
- {
- if( iInternalState == ECopyLocal ||
- iInternalState == ECopyToPhone )
- {
- CopyFinished( aError, ETrue );
- }
- }
- else
- {
- // Msg not received yet, set the flag instead
- iAsyncErr = aError;
- iTransferEventReceived = ETrue;
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::DeviceDisappearedL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::DeviceDisappearedL(
- CUpnpAVDeviceExtended& aDevice )
- {
- __LOG( "CUPnPBrowsingSession::DeviceDisappearedL" );
-
- if( aDevice.Local() )
- {
- delete iLocalMediaServerUuid; iLocalMediaServerUuid = NULL;
- }
- else if( iDeviceMessage ) // Target device
- {
- iDeviceMessage->Complete( KErrNone );
- delete iDeviceMessage; iDeviceMessage = NULL;
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::SetLocalMSUuidL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::SetLocalMSUuidL( const TDesC8& aUuid )
- {
- HBufC8* tmp = aUuid.AllocL();
- delete iLocalMediaServerUuid;
- iLocalMediaServerUuid = tmp;
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::SessionId
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-TInt CUPnPBrowsingSession::SessionId() const
- {
- return iSessionId;
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::Uuid
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-const TDesC8& CUPnPBrowsingSession::Uuid() const
- {
- if( iDevice )
- {
- return iDevice->Uuid();
- }
- else
- {
- return KNullDesC8;
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::GetBrowseResponseSizeL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::GetBrowseResponseSizeL(
- const RMessage2& aMessage )
- {
- __LOG( "CUPnPBrowsingSession::GetBrowseResponseSizeL" );
-
- __ASSERTD( !iActionMessage, __FILE__, __LINE__ );
-
- ResetL();
-
- CUpnpAVBrowseRequest* tmpRequest = CUpnpAVBrowseRequest::NewLC();
-
- ReadBrowseReqFromMessageL( aMessage, 1, tmpRequest );
-
- if( tmpRequest->BrowseFlag() == MUPnPAVBrowsingSession::EDirectChildren )
- {
- iIPSessionId = iServer.ControlPoint().CdsBrowseActionL(
- iDevice->Uuid(),
- tmpRequest->Id(),
- KDirectChildren,
- tmpRequest->Filter(),
- tmpRequest->StartIndex(),
- tmpRequest->RequestedCount(),
- tmpRequest->SortCriteria() );
- }
- else
- {
- iIPSessionId = iServer.ControlPoint().CdsBrowseActionL(
- iDevice->Uuid(),
- tmpRequest->Id(),
- KMetaData,
- tmpRequest->Filter(),
- tmpRequest->StartIndex(),
- tmpRequest->RequestedCount(),
- tmpRequest->SortCriteria() );
- }
-
-
- CleanupStack::PopAndDestroy( tmpRequest );
-
- if( iIPSessionId > 0 )
- {
- // Register
- iInternalState = EBrowse;
- iServer.Dispatcher().RegisterL( iIPSessionId, *this );
- }
- else
- {
- User::Leave( iIPSessionId );
- }
-
- iActionMessage = new (ELeave) RMessage2( aMessage );
- }
-
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CancelGetBrowseResponseSizeL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CancelGetBrowseResponseSizeL()
- {
- __LOG( "CUPnPBrowsingSession::CancelGetBrowseResponseSizeL" );
-
- if( iActionMessage )
- {
- iServer.Dispatcher().UnRegister( iIPSessionId );
- iActionMessage->Complete( KErrCancel );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
-
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::GetBrowseResponseL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::GetBrowseResponseL( const RMessage2& aMessage )
- {
- __LOG( "CUPnPBrowsingSession::GetBrowseResponseL" );
-
- __ASSERTD( !iActionMessage, __FILE__, __LINE__ );
-
- iIPSessionId = KErrNotFound;
- if( iRespBuf && iRespBuf2 )
- {
- aMessage.WriteL( 1, *iRespBuf );
- aMessage.WriteL( 2, *iRespBuf2 );
- delete iRespBuf; iRespBuf = NULL;
- delete iRespBuf2; iRespBuf2 = NULL;
- aMessage.Complete( EAVControllerGetBrowseResponseCompleted );
- }
- else
- {
- //Memory allocaton failed
- delete iRespBuf; iRespBuf = NULL;
- delete iRespBuf2; iRespBuf2 = NULL;
- User::Leave( KErrNoMemory );
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::GetSearchResponseSizeL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::GetSearchResponseSizeL(
- const RMessage2& aMessage )
- {
- __LOG( "CUPnPBrowsingSession::GetSearchResponseSizeL" );
-
- __ASSERTD( !iActionMessage, __FILE__, __LINE__ );
-
- ResetL();
-
-
- CUpnpAVBrowseRequest* tmpRequest = CUpnpAVBrowseRequest::NewLC();
-
- ReadBrowseReqFromMessageL( aMessage, 1, tmpRequest );
-
- iIPSessionId = iServer.ControlPoint().CdsSearchActionL(
- iDevice->Uuid(),
- tmpRequest->Id(),
- tmpRequest->SearchCriteria(),
- tmpRequest->Filter(),
- tmpRequest->StartIndex(),
- tmpRequest->RequestedCount(),
- tmpRequest->SortCriteria() );
-
- CleanupStack::PopAndDestroy( tmpRequest );
-
- if( iIPSessionId > 0 )
- {
- // Register
- iServer.Dispatcher().RegisterL( iIPSessionId, *this );
- }
- else
- {
- User::Leave( iIPSessionId );
- }
- iActionMessage = new (ELeave) RMessage2( aMessage );
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CancelGetSearchResponseSizeL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CancelGetSearchResponseSizeL()
- {
- __LOG( "CUPnPBrowsingSession::CancelGetSearchResponseSizeL" );
-
- if( iActionMessage )
- {
- iServer.Dispatcher().UnRegister( iIPSessionId );
- iActionMessage->Complete( KErrCancel );
- delete iActionMessage; iActionMessage = NULL;
- }
-
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::GetSearchResponseL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::GetSearchResponseL( const RMessage2& aMessage )
- {
- __LOG( "CUPnPBrowsingSession::GetSearchResponseL" );
-
- __ASSERTD( !iActionMessage, __FILE__, __LINE__ );
-
- iIPSessionId = KErrNotFound;
- if( iRespBuf && iRespBuf2 )
- {
- aMessage.WriteL( 1, *iRespBuf );
- aMessage.WriteL( 2, *iRespBuf2 );
- delete iRespBuf; iRespBuf = NULL;
- delete iRespBuf2; iRespBuf2 = NULL;
- aMessage.Complete( EAVControllerGetSearchResponseCompleted );
- }
- else
- {
- //Memory allocaton failed
- delete iRespBuf; iRespBuf = NULL;
- delete iRespBuf2; iRespBuf2 = NULL;
- User::Leave( KErrNoMemory );
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::GetSearchCapabitiesSizeL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::GetSearchCapabitiesSizeL(
- const RMessage2& aMessage )
- {
- __LOG( "CUPnPBrowsingSession::GetSearchCapabitiesSizeL" );
-
- __ASSERTD( !iActionMessage, __FILE__, __LINE__ );
-
- ResetL();
-
- iIPSessionId = iServer.ControlPoint().CdsSearchCapabilitiesActionL(
- iDevice->Uuid() );
-
- if( iIPSessionId > 0 )
- {
- // Register
- iServer.Dispatcher().RegisterL( iIPSessionId, *this );
- }
- else
- {
- User::Leave( iIPSessionId );
- }
- iActionMessage = new (ELeave) RMessage2( aMessage );
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CancelGetSearchCapabitiesSizeL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CancelGetSearchCapabitiesSizeL()
- {
- __LOG( "CUPnPBrowsingSession::CancelGetSearchCapabitiesSizeL" );
-
- if( iActionMessage )
- {
- iServer.Dispatcher().UnRegister( iIPSessionId );
- iActionMessage->Complete( KErrCancel );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::GetSearchCapabitiesL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::GetSearchCapabitiesL( const RMessage2& aMessage )
- {
- __LOG( "CUPnPBrowsingSession::GetSearchCapabitiesL" );
-
- iIPSessionId = KErrNotFound;
-
- aMessage.WriteL( 1, *iRespBuf );
- aMessage.Complete( EAVControllerGetSearchCapabilitiesCompleted );
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CreateContainerL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CreateContainerL( const RMessage2& aMessage )
- {
- __LOG( "CUPnPBrowsingSession::CreateContainerL" );
-
- __ASSERTD( !iActionMessage, __FILE__, __LINE__ );
-
- ResetL();
-
- // Title
- TInt len = aMessage.GetDesMaxLength( 1 );
- HBufC8* tempTitle = HBufC8::NewLC( len );
- TPtr8 ptr( tempTitle->Des() );
- aMessage.ReadL( 1, ptr );
-
- // Container ID
- len = aMessage.GetDesMaxLength( 2 );
- HBufC8* tempId = HBufC8::NewLC( len );
- ptr.Set( tempId->Des() );
- aMessage.ReadL( 2, ptr );
-
- if( iDevice->DlnaCompatible() && !iDevice->CreateChildContainer()
- && *tempId != KContainerIdAny )
- {
- // The device is DLNA compatible and does not support creation
- // of a child container
- User::Leave( KErrNotSupported );
- }
-
- // Container type
- MUPnPAVBrowsingSession::TContainerType type =
- (MUPnPAVBrowsingSession::TContainerType)aMessage.Int3();
-
- // Create a container object
- CUpnpContainer* tmpContainer = CUpnpContainer::NewL();
- CleanupStack::PushL( tmpContainer );
-
- // Set the title and the parent ID
- tmpContainer->SetTitleL( *tempTitle );
- tmpContainer->SetParentIdL( *tempId );
-
- // Set the object type
- if( type == MUPnPAVBrowsingSession::EPlaylistContainer )
- {
- tmpContainer->SetObjectClassL( KClassPlaylist() );
- }
- else
- {
- tmpContainer->SetObjectClassL( KClassStorage() );
- }
-
- HBufC8* xmlDoc = CUPnPXMLParser::ContainerToXmlLC( *tmpContainer );
-
- iIPSessionId = iServer.ControlPoint().CdsCreateObjectActionL(
- iDevice->Uuid(), *tempId, *xmlDoc );
-
-
- CleanupStack::PopAndDestroy( xmlDoc );
- CleanupStack::PopAndDestroy( tmpContainer );
- CleanupStack::PopAndDestroy( tempId );
- CleanupStack::PopAndDestroy( tempTitle );
-
- if( iIPSessionId > 0 )
- {
- // Register
- iServer.Dispatcher().RegisterL( iIPSessionId, *this );
- iInternalState = ECreateContainer;
- }
- else
- {
- User::Leave( iIPSessionId );
- }
- iActionMessage = new (ELeave) RMessage2( aMessage );
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CancelCreateContainerL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CancelCreateContainerL()
- {
- __LOG( "CUPnPBrowsingSession::CancelCreateContainerL" );
-
- if( iActionMessage )
- {
- iServer.Dispatcher().UnRegister( iIPSessionId );
- iActionMessage->Complete( KErrCancel );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::DeleteObjectL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::DeleteObjectL( const RMessage2& aMessage )
- {
- __LOG( "CUPnPBrowsingSession::DeleteObjectL" );
-
- __ASSERTD( !iActionMessage, __FILE__, __LINE__ );
-
- ResetL();
-
- TInt len = aMessage.GetDesMaxLength( 1 );
- HBufC8* tempId = HBufC8::NewLC( len );
- TPtr8 ptr( tempId->Des() );
- aMessage.ReadL( 1, ptr );
-
- CleanupStack::Pop( tempId );
- delete iItemId;
- iItemId = tempId;
-
-
- iIPSessionId = iServer.ControlPoint().CdsBrowseActionL(
- iDevice->Uuid(), *iItemId, KMetaData, KFilterCommon, 0, 1,
- KNullDesC8 );
-
- if( iIPSessionId > 0 )
- {
- // Register
- iInternalState = EDestroyObject;
- iServer.Dispatcher().RegisterL( iIPSessionId, *this );
- }
- else
- {
- User::Leave( iIPSessionId );
- }
- iActionMessage = new (ELeave) RMessage2( aMessage );
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CancelDeleteObjectL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CancelDeleteObjectL()
- {
- __LOG( "CUPnPBrowsingSession::CancelDeleteObjectL" );
-
- if( iActionMessage )
- {
- iServer.Dispatcher().UnRegister( iIPSessionId );
- iActionMessage->Complete( KErrCancel );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::DeviceDisappearedRequestL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::DeviceDisappearedRequestL(
- const RMessage2& aMessage )
- {
- __LOG( "CUPnPBrowsingSession::DeviceDisappearedRequestL" );
-
- __ASSERTD( !iDeviceMessage, __FILE__, __LINE__ );
-
- iDeviceMessage = new (ELeave) RMessage2( aMessage );
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CancelDeviceDisappearedRequestL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CancelDeviceDisappearedRequestL()
- {
- __LOG( "CUPnPBrowsingSession::CancelDeviceDisappearedRequestL" );
-
- if( iDeviceMessage )
- {
- iDeviceMessage->Complete( KErrCancel );
- delete iDeviceMessage; iDeviceMessage = NULL;
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::ParseCreateObjectResponseL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-HBufC8* CUPnPBrowsingSession::ParseCreateObjectResponseL(
- const TDesC8& aResponse )
- {
- __LOG( "CUPnPBrowsingSession::ParseCreateObjectResponseL" );
-
- HBufC8* importURI = NULL;
-
- CUPnPXMLParser* parser = CUPnPXMLParser::NewL();
- CleanupStack::PushL( parser );
-
- RPointerArray<CUpnpObject> array;
- CleanupResetAndDestroyPushL( array );
-
- parser->ParseResultDataL( array, aResponse );
-
- if( array.Count() == KExpectedCount )
- {
- if( array[ 0 ]->ObjectType() == EUPnPItem )
- {
- HBufC8* tmp = array[ 0 ]->Id().AllocL();
- delete iItemId;
- iItemId = tmp;
-
- if( array[ 0 ]->ObjectClass().Find( KClassAudio )
- != KErrNotFound )
- {
- iMusic = ETrue;
- }
-
- // Get the res-elements
- RUPnPElementsArray elArray;
- CleanupClosePushL( elArray );
- UPnPItemUtility::GetResElements( *array[ 0 ], elArray );
-
- // Find the import uri
- for( TInt i = 0; i < elArray.Count(); i++ )
- {
- const CUpnpAttribute* attribute = NULL;
- TRAPD( err, attribute =
- &UPnPItemUtility::FindAttributeByNameL(
- *elArray[ i ], KImportUri ) );
- if( err == KErrNone )
- {
- // import uri found!
- i = elArray.Count();
- importURI = attribute->Value().AllocL();
- }
- }
-
- CleanupStack::PopAndDestroy( &elArray );
- }
- else
- {
- User::Leave( KErrGeneral );
- }
- }
- else
- {
- User::Leave( KErrGeneral );
- }
-
- CleanupStack::PopAndDestroy( &array );
- CleanupStack::PopAndDestroy( parser );
-
- if( !importURI )
- {
- User::Leave( KErrGeneral );
- }
-
- if( !UpnpCdsResElementUtility::IsUriAbsolute( *importURI ) )
- {
- // Import uri is not absolute
- delete importURI; importURI = NULL;
- User::Leave( KErrGeneral );
- }
-
- return importURI;
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CheckIsCreateObjectSupportedL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CheckIsCreateObjectSupportedL(
- const TDesC8& aResponse )
- {
- __LOG( "CUPnPBrowsingSession::CheckIsCreateObjectSupportedL" );
-
- CUPnPXMLParser* parser = CUPnPXMLParser::NewL();
- CleanupStack::PushL( parser );
-
- RPointerArray<CUpnpObject> array;
- CleanupResetAndDestroyPushL( array );
-
- parser->ParseResultDataL( array, aResponse );
-
- if( array.Count() == KExpectedCount )
- {
- if( array[ 0 ]->ObjectType() == EUPnPContainer )
- {
- // Try to get upnp:createClass elements
- const CUpnpElement* elem = UPnPItemUtility::FindElementByName(
- *array[ 0 ], KCreateClass );
-
- if ( !elem )
- {
- // No createClass elements, copy not supported
- User::Leave( KErrNotSupported );
- }
-
- RUPnPElementsArray resultArray;
- CleanupClosePushL( resultArray );
- UPnPItemUtility::GetResElements( *array[ 0 ], resultArray );
- TInt count = resultArray.Count();
-
- for( TInt i = 0; i < count; i++ )
- {
- if( iSharedItem->ObjectClass().Find( KClassAudio ) !=
- KErrNotFound )
- {
- // We are going to create a music item, check that the
- // target container supports that
- if( resultArray[ i ]->Value().Find( KClassAudio ) ==
- KErrNotFound )
- {
- User::Leave( KErrNotSupported );
- }
- }
- else if( iSharedItem->ObjectClass().Find( KClassImage ) !=
- KErrNotFound )
- {
- // We are going to create an image item, check that the
- // target container supports that
- if( resultArray[ i ]->Value().Find( KClassImage ) ==
- KErrNotFound )
- {
- User::Leave( KErrNotSupported );
- }
- }
- else if( iSharedItem->ObjectClass().Find( KClassVideo ) !=
- KErrNotFound )
- {
- // We are going to create a video item, check that the
- // target container supports that
- if( resultArray[ i ]->Value().Find( KClassVideo ) ==
- KErrNotFound )
- {
- User::Leave( KErrNotSupported );
- }
- }
- else
- {
- // Unknown object class, leave
- User::Leave( KErrNotSupported );
- }
- }
- CleanupStack::PopAndDestroy( &resultArray );
- }
- else
- {
- User::Leave( KErrNotSupported );
- }
- }
- else
- {
- User::Leave( KErrGeneral );
- }
- CleanupStack::PopAndDestroy( &array );
- CleanupStack::PopAndDestroy( parser );
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CheckAndSendDestroyObjectActionL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CheckAndSendDestroyObjectActionL(
- const TDesC8& aResponse )
- {
- __LOG( "CUPnPBrowsingSession::CheckAndSendDestroyObjectActionL" );
-
- CUPnPXMLParser* parser = CUPnPXMLParser::NewL();
- CleanupStack::PushL( parser );
-
- RPointerArray<CUpnpObject> array;
- CleanupResetAndDestroyPushL( array );
-
- parser->ParseResultDataL( array, aResponse );
-
- if( array.Count() == KExpectedCount )
- {
- if( array[ 0 ]->Restricted() )
- {
- User::Leave( KErrArgument );
- }
- else
- {
- // Not restricted, ok to destroy
- TInt sessionId = iServer.ControlPoint().CdsDestroyObjectActionL(
- iDevice->Uuid(), *iItemId );
- if( sessionId > 0 )
- {
- iServer.Dispatcher().RegisterL( sessionId, *this );
- iIPSessionId = sessionId;
- }
- else
- {
- User::Leave( sessionId );
- }
- }
- }
- else
- {
- User::Leave( KErrGeneral );
- }
- CleanupStack::PopAndDestroy( &array );
- CleanupStack::PopAndDestroy( parser );
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CheckAndSendCreateObjectActionL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CheckAndSendCreateObjectActionL(
- const TDesC8& aResponse )
- {
- __LOG( "CUPnPBrowsingSession::CheckAndSendCreateObjectActionL" );
-
- CheckIsCreateObjectSupportedL( aResponse );
-
- HBufC8* xmlDoc = CUPnPXMLParser::XmlForCreateObjectLC( *iSharedItem );
- SendCreateObjectActionL( iDevice->Uuid(), *iContainerId, *xmlDoc );
- CleanupStack::PopAndDestroy( xmlDoc );
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::SendCreateObjectActionL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::SendCreateObjectActionL( const TDesC8& aUUid,
- const TDesC8& aContainerId, const TDesC8& aResponse )
- {
- __LOG( "CUPnPBrowsingSession::SendCreateObjectActionL" );
-
- TInt sessionId = iServer.ControlPoint().CdsCreateObjectActionL( aUUid,
- aContainerId, aResponse );
-
- if( sessionId > 0 )
- {
- iServer.Dispatcher().RegisterL( sessionId, *this );
- iIPSessionId = sessionId;
- }
- else
- {
- User::Leave( sessionId );
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::SendExportActionL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::SendExportActionL()
- {
- __LOG( "CUPnPBrowsingSession::SendExportActionL" );
- //__LOG8( *iSourceURI );
- //__LOG8( *iImportURI );
-
- HBufC8* tempSourceUri = UpnpString::EncodeXmlStringL(
- iSourceURI );
- delete iSourceURI;
- iSourceURI = tempSourceUri;
- tempSourceUri = NULL;
-
- TInt sessionId = iServer.ControlPoint().CdsExportResourceActionL(
- *iLocalMediaServerUuid, *iSourceURI, *iImportURI );
- if( sessionId > 0 )
- {
- iServer.Dispatcher().RegisterL( sessionId, *this );
- iIPSessionId = sessionId;
- }
- else
- {
- User::Leave( sessionId );
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::SendImportActionL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::SendImportActionL()
- {
- __LOG( "CUPnPBrowsingSession::SendImportActionL" );
- //__LOG8( *iSourceURI );
- //__LOG8( *iImportURI );
-
- HBufC8* tempSourceUri = UpnpString::EncodeXmlStringL(
- iSourceURI );
- delete iSourceURI;
- iSourceURI = tempSourceUri;
- tempSourceUri = NULL;
-
- TInt sessionId = iServer.ControlPoint().CdsImportResourceActionL(
- *iLocalMediaServerUuid, *iSourceURI, *iImportURI );
- if( sessionId > 0 )
- {
- iServer.Dispatcher().RegisterL( sessionId, *this );
- iIPSessionId = sessionId;
- }
- else
- {
- User::Leave( sessionId );
- }
- }
-
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CopyFinished
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::CopyFinished( TInt aError, TBool aFinished )
- {
- __LOG( "CUPnPBrowsingSession::CopyFinished" );
-
- if( iInternalState == ECopyLocal ) // Local to remote copy
- {
- if( aError == KErrNone )
- {
- if( aFinished )
- {
- // Local to remote copy completed successfully!
-
- if( iSharedItem )
- {
- // Remove shared item
- TRAP_IGNORE( iFileSharing->UnShareItemL(
- iSharedItem->Id() ) );
- delete iSharedItem; iSharedItem = NULL;
- }
-
- iInternalState = ENone;
- if( iActionMessage )
- {
- iActionMessage->Complete(
- EAVControllerCopyLocalItemFinishCompleted );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- else
- {
- // First phase of copy completed (export action succeeded)
- if( iActionMessage )
- {
- iActionMessage->Complete(
- EAVControllerCopyLocalItemStartCompleted );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- }
- else // Error occured, cleanup.
- {
- if( iSharedItem )
- {
- // Remove shared item
- TRAP_IGNORE( iFileSharing->UnShareItemL(
- iSharedItem->Id() ) );
- }
- delete iSharedItem; iSharedItem = NULL;
- if( iItemId )
- {
- // Destroy object from the remote media server
- TRAP_IGNORE( iServer.ControlPoint().CdsDestroyObjectActionL(
- iDevice->Uuid(), *iItemId ) );
- delete iItemId; iItemId = NULL;
- }
-
- iInternalState = ENone;
- if( iActionMessage )
- {
- iActionMessage->Complete( aError );
- delete iActionMessage; iActionMessage = NULL;
- }
-
- }
- }
- else if( iInternalState == ECopyToPhone ) // Remote to local copy
- {
- if( aError == KErrNone )
- {
- if( aFinished )
- {
- // Remote to local copy successful, check sharing status
- CheckSharingStatus();
-
- // Restore original download settings
- RestoreDownloadSettings(); // ignore error
-
- iInternalState = ENone;
- if( iActionMessage )
- {
- iActionMessage->Complete(
- EAVControllerCopyToPhoneFinishCompleted );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- else
- {
- // First phase of copy completed (import action succeeded)
- if( iActionMessage )
- {
- iActionMessage->Complete(
- EAVControllerCopyToPhoneStartCompleted );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- }
- else // Error occured, cleanup.
- {
- // Restore original download settings
- RestoreDownloadSettings(); // ignore error
-
- if( iItemId )
- {
- // Destroy object from the local media server
- TRAP_IGNORE( iServer.ControlPoint().CdsDestroyObjectActionL(
- *iLocalMediaServerUuid, *iItemId ) );
- delete iItemId; iItemId = NULL;
- }
-
- iInternalState = ENone;
- if( iActionMessage )
- {
- iActionMessage->Complete( aError );
- delete iActionMessage; iActionMessage = NULL;
- }
- }
- }
- else
- {
- __PANICD( __FILE__, __LINE__ );
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::ResetL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::ResetL()
- {
- __LOG( "CUPnPBrowsingSession::ResetL" );
-
- iIPSessionId = KErrNotFound;
-
- if( !iServer.DeviceRepository().IsWlanActive() )
- {
- __LOG( "Reset - disconnected" );
- User::Leave( KErrDisconnected );
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::ReadObjFromMessageL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::ReadObjFromMessageL( const RMessage2& aMessage,
- TInt aSlot, CUpnpObject* aObj )
- {
- // create buffer
- TInt len = aMessage.GetDesMaxLength( aSlot );
- HBufC8* buf = HBufC8::NewLC( len );
- TPtr8 ptr( buf->Des() );
- User::LeaveIfError( aMessage.Read( aSlot, ptr ) );
-
- // read stream
- RDesReadStream stream( *buf );
- CleanupClosePushL( stream );
-
- // internalize object
- stream >> *aObj;
-
- // clean up
- CleanupStack::PopAndDestroy( &stream );
- CleanupStack::PopAndDestroy( buf );
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::ReadReqFromMessageL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::ReadReqFromMessageL( const RMessage2& aMessage,
- TInt aSlot, CUpnpAVRequest* aReq )
- {
- // create buffer
- TInt len = aMessage.GetDesMaxLength( aSlot );
- HBufC8* buf = HBufC8::NewLC( len );
- TPtr8 ptr( buf->Des() );
- User::LeaveIfError( aMessage.Read( aSlot, ptr ) );
-
- // read stream
- RDesReadStream stream( *buf );
- CleanupClosePushL( stream );
-
- // internalize object
- stream >> *aReq;
-
- // clean up
- CleanupStack::PopAndDestroy( &stream );
- CleanupStack::PopAndDestroy( buf );
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::ReadBrowseReqFromMessageL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::ReadBrowseReqFromMessageL(
- const RMessage2& aMessage, TInt aSlot, CUpnpAVBrowseRequest* aReq )
- {
- // create buffer
- TInt len = aMessage.GetDesMaxLength( aSlot );
- HBufC8* buf = HBufC8::NewLC( len );
- TPtr8 ptr( buf->Des() );
- User::LeaveIfError( aMessage.Read( aSlot, ptr ) );
-
- // read stream
- RDesReadStream stream( *buf );
- CleanupClosePushL( stream );
-
- // internalize object
- stream >> *aReq;
-
- // clean up
- CleanupStack::PopAndDestroy( &stream );
- CleanupStack::PopAndDestroy( buf );
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::ReadBufFromMessageLC
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-HBufC8* CUPnPBrowsingSession::ReadBufFromMessageLC(
- const RMessage2& aMessage, TInt aSlot )
- {
- // create buffer
- TInt len = aMessage.GetDesMaxLength( aSlot );
- HBufC8* buf = HBufC8::NewLC( len );
- TPtr8 ptr( buf->Des() );
- User::LeaveIfError( aMessage.Read( aSlot, ptr ) );
- return buf;
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::SetDownloadSettingsL
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-void CUPnPBrowsingSession::SetDownloadSettingsL(
- MUPnPAVBrowsingSession::TMemoryType aType )
- {
- if( aType == MUPnPAVBrowsingSession::EDefault )
- {
- // Downloading to default location is the only supported target
- }
- else
- {
- User::Leave( KErrNotSupported );
- }
-
- // EMemoryCard, ERAMDrive or EPhone are not supported, but the code is
- // left in place for possible future use
- /*
- // Read the original download location and store it
- HBufC8* buf = iMSSettings->GetL(
- UpnpMediaServerSettings::EUploadDirectory );
- delete iOriginalLocation;
- iOriginalLocation = buf;
-
- // Set the new download location
- if( aType == MUPnPAVBrowsingSession::EMemoryCard )
- {
- User::LeaveIfError( iMSSettings->SetL(
- UpnpMediaServerSettings::EUploadDirectory,
- KDownloadMemoryCard ) );
- }
- else if( aType == MUPnPAVBrowsingSession::ERAMDrive )
- {
- User::LeaveIfError( iMSSettings->SetL(
- UpnpMediaServerSettings::EUploadDirectory,
- KDownloadRAMDrive ) );
- }
- else if( aType == MUPnPAVBrowsingSession::EPhone )
- {
- User::LeaveIfError( iMSSettings->SetL(
- UpnpMediaServerSettings::EUploadDirectory,
- KDownloadPhoneMemory ) );
- }
- else
- {
- // Default, no change needed
- }
- */
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::RestoreDownloadSettings
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-TInt CUPnPBrowsingSession::RestoreDownloadSettings()
- {
- // Restore the download settings
- TInt err = KErrNone;
-
- if( iOriginalLocation && iShareFlag !=
- MUPnPAVBrowsingSession::EDefault )
- {
- TRAP( err, err = iMSSettings->SetL(
- UpnpMediaServerSettings::EUploadDirectory,
- *iOriginalLocation ) );
- }
- else
- {
- err = KErrGeneral;
- }
-
- return err;
- }
-
-// --------------------------------------------------------------------------
-// CUPnPBrowsingSession::CheckSharingStatus
-// See upnpbrowsingsession.h
-// --------------------------------------------------------------------------
-TInt CUPnPBrowsingSession::CheckSharingStatus()
- {
- TInt err = KErrNone;
-
- if( iShareFlag == MUPnPAVBrowsingSession::EFileIsNotShared )
- {
- // Unshare the item
- if( iItemId )
- {
- TRAP( err, iFileSharing->UnShareItemL( *iItemId ) );
- delete iItemId; iItemId = NULL;
- }
- }
- else if( MUPnPAVBrowsingSession::EShareBySettings )
- {
- // Check settings to determine should we keep the item shared or not
- TInt share = 0;
- if( iMusic ) // It's a music item
- {
- err = iAppSettings->Get( KUPnPAppShareAllMusicFiles, share );
- }
- else // Image or video item
- {
- err = iAppSettings->Get( KUPnPAppShareAllVisualFiles, share );
- }
-
- if( err == KErrNone && !share )
- {
- if( iItemId )
- {
- TRAP( err, iFileSharing->UnShareItemL( *iItemId ) );
- delete iItemId; iItemId = NULL;
- }
- }
- }
- else
- {
- // File is shared already, do nothing
- }
-
- return err;
- }
-
-// End of file
+/*
+* Copyright (c) 2006 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: server impl. of session against media server
+*
+*/
+
+
+// INCLUDE FILES
+// System
+#include <utf.h>
+#include <mmf/common/mmfcontrollerpluginresolver.h>
+#include <centralrepository.h>
+
+// upnp stack api
+#include <upnpstring.h>
+#include <upnpdevice.h>
+#include <upnpservice.h>
+
+// dlnasrv / mediaserver api
+#include <upnpcontainer.h>
+#include <upnpitem.h>
+#include <upnpelement.h>
+#include <upnpmediaserversettings.h>
+#include <upnpmediaserverclient.h>
+#include <upnpmediaservernotifier.h>
+#include <upnpfiletransferevent.h>
+
+// dlnasrv / avcontroller api
+#include "upnpavrenderingsessionobserver.h"
+
+// dlnasrv / avcontroller helper api
+#include "upnpconstantdefs.h" // for upnp-specific stuff
+#include "upnpfileutility.h"
+#include "upnpitemutility.h"
+
+// dlnasrv / xmlparser api
+#include "upnpxmlparser.h"
+
+// dlnasrv / internal api's
+#include "upnpcdsreselementutility.h"
+#include "upnpmetadatafetcher.h"
+
+// dlnasrv / avcontroller internal
+#include "upnpavdispatcher.h"
+#include "upnpavbrowserequest.h"
+#include "upnpavrequest.h"
+#include "upnpaverrorhandler.h"
+#include "upnpavdeviceextended.h"
+#include "upnpdevicerepository.h"
+#include "upnpavbrowserespparams.h"
+#include "upnpavcontrollerserver.h"
+#include "upnpavcpstrings.h"
+#include "upnpbrowsingsession.h"
+#include "upnpavcontrolpoint.h"
+
+using namespace UpnpAVCPStrings;
+
+
+// CONSTANTS
+_LIT8( KDirectChildren, "BrowseDirectChildren" );
+_LIT8( KMetaData, "BrowseMetadata" );
+_LIT8( KBrowseMetadata, "BrowseMetadata" );
+_LIT8( KDefaultStartingIndex, "0" );
+_LIT8( KDefaultRequestedCount, "1" );
+
+const TInt KDefaultInstanceId = 0;
+const TInt KExpectedCount = 1;
+const TInt KMaxIntLength = 10;
+
+_LIT( KComponentLogfile, "upnpavcontrollerserver.txt");
+#include "upnplog.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::NewL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+CUPnPBrowsingSession* CUPnPBrowsingSession::NewL
+ (
+ CUpnpAVControllerServer& aServer,
+ TInt aSessionId,
+ const TDesC8& aUuid
+ )
+ {
+ CUPnPBrowsingSession* self = new (ELeave) CUPnPBrowsingSession(
+ aServer, aSessionId );
+ CleanupStack::PushL( self );
+
+ self->ConstructL( aUuid );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::CUPnPBrowsingSession
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+CUPnPBrowsingSession::CUPnPBrowsingSession
+ (
+ CUpnpAVControllerServer& aServer,
+ TInt aSessionId
+ ):
+ iServer( aServer ),
+ iSessionId( aSessionId ),
+
+ iInstanceId( KDefaultInstanceId ),
+ iIPSessionId( KErrNotFound ),
+
+ iInternalState( ENone )
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::~CUPnPBrowsingSession
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+CUPnPBrowsingSession::~CUPnPBrowsingSession()
+ {
+ iIPSessionId = KErrNotFound;
+
+ delete iDevice;
+ delete iRespBuf;
+ delete iRespBuf2;
+
+ delete iItemId;
+
+ delete iLocalMediaServerUuid;
+
+ delete iActionMessage;
+ delete iDeviceMessage;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::ConstructL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::ConstructL( const TDesC8& aUuid )
+ {
+ __LOG( "CUPnPBrowsingSession::ConstructL" );
+
+ // Get the local Media Server Uuid, if available
+ const RPointerArray<CUpnpAVDeviceExtended>& devList =
+ iServer.DeviceRepository().DeviceList();
+ TInt count = devList.Count();
+ TInt i;
+ for( i = 0; i < count; i++ )
+ {
+ if( devList[ i ]->Local() )
+ {
+ __ASSERT( !iLocalMediaServerUuid, __FILE__, __LINE__ );
+ iLocalMediaServerUuid = devList[i]->Uuid().AllocL();
+ }
+ if( devList[ i ]->Uuid() == aUuid )
+ {
+ __ASSERT( !iDevice, __FILE__, __LINE__ );
+ iDevice = CUpnpAVDeviceExtended::NewL( *devList[ i ] );
+ }
+ }
+ if( !iDevice )
+ {
+ if( aUuid == KNullDesC8 ) // Fix to enable AV Controller helper usage
+ {
+ iDevice = CUpnpAVDeviceExtended::NewL();
+ }
+ else
+ {
+ User::Leave( KErrNotFound );
+ }
+ }
+ else
+ {
+ //
+ // Gets related control point device (CUpnpDevice) only if aUuid
+ // is provided. It is needed when CUpnpAVControlPoint is really
+ // used.
+ //
+ // In some cases CUPnPBrowsingSession is be instantiated with dummy
+ // device uuid (KNullDesC8). In these cases we shouldn't leave nor
+ // get the control point device.
+ iCpDevice = iServer.ControlPoint().Device( aUuid );
+ if ( !iCpDevice )
+ {
+ User::Leave( KErrNotFound );
+ }
+ }
+ }
+
+
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::ActionResponseL
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::ActionResponseL(CUpnpAction* aAction)
+ {
+ __ASSERT( aAction->SessionId()==iIPSessionId, __FILE__, __LINE__ );
+
+ if (aAction->Name().Compare(KGetSearchCapabilities) == 0)
+ {
+ CdsSearchCapabilitiesResponse(
+ aAction->Error(),
+ aAction->ArgumentValue( KSearchCaps ) );
+ }
+ else if (aAction->Name().Compare(KBrowse) == 0)
+ {
+ const TDesC8& numberReturned = aAction->ArgumentValue(
+ KNumberReturned );
+ TLex8 returnedLex( numberReturned );
+ TInt numberReturnedInt;
+ User::LeaveIfError( returnedLex.Val( numberReturnedInt ) );
+
+ const TDesC8& totalmatches = aAction->ArgumentValue( KTotalMatches );
+ TLex8 matchesLex( totalmatches );
+ TInt totalMatchesInt;
+ User::LeaveIfError( matchesLex.Val( totalMatchesInt ) );
+
+ CdsBrowseResponseL(
+ aAction->Error(),
+ aAction->ArgumentValue( KBrowseFlag ),
+ aAction->ArgumentValue( KResult ),
+ numberReturnedInt,
+ totalMatchesInt,
+ aAction->ArgumentValue( KUpdateID ) );
+ }
+ else if (aAction->Name().Compare(KSearch) == 0)
+ {
+ const TDesC8& numberReturned = aAction->ArgumentValue(
+ KNumberReturned );
+ TLex8 returnedLex( numberReturned );
+ TInt numberReturnedInt;
+ User::LeaveIfError( returnedLex.Val( numberReturnedInt ) );
+
+ const TDesC8& totalmatches = aAction->ArgumentValue( KTotalMatches );
+ TLex8 matchesLex( totalmatches );
+ TInt totalMatchesInt;
+ User::LeaveIfError( matchesLex.Val( totalMatchesInt ) );
+
+ CdsSearchResponse(
+ aAction->Error(),
+ aAction->ArgumentValue( KResult ),
+ numberReturnedInt,
+ totalMatchesInt,
+ aAction->ArgumentValue( KUpdateID )
+ );
+ }
+ else if (aAction->Name().Compare(KDestroyObject) == 0)
+ {
+ CdsDestroyObjectResponse(
+ aAction->Error() );
+ }
+ else if (aAction->Name().Compare(KCreateObject) == 0)
+ {
+ CdsCreateObjectResponse(
+ aAction->Error(),
+ aAction->ArgumentValue(KObjectID),
+ aAction->ArgumentValue(KResult)
+ );
+ }
+ else
+ {
+ __LOG( "response not expected, ignore" );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::StateUpdatedL
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::StateUpdatedL(CUpnpService* /*aService*/)
+ {
+ // No implementation required
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::HttpResponseL
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::HttpResponseL(CUpnpHttpMessage* /*aMessage*/)
+ {
+ // No implementation required
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::DeviceDiscoveredL
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::DeviceDiscoveredL(CUpnpDevice* /*aDevice*/)
+ {
+ // No implementation required
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::DeviceDisappearedL
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::DeviceDisappearedL(CUpnpDevice* /*aDevice*/)
+ {
+ // No implementation required
+ }
+
+
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::CdsSearchCapabilitiesResponse
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::CdsSearchCapabilitiesResponse(
+ TInt aErr,
+ const TDesC8& aSearchCaps)
+ {
+ __LOG1( "CUPnPBrowsingSession::CdsSearchCapabilitiesResponse: %d",
+ aErr );
+
+ iServer.Dispatcher().UnRegister( iIPSessionId );
+ iIPSessionId = KErrNotFound;
+
+ if( iActionMessage )
+ {
+ aErr = UPnPAVErrorHandler::ConvertToSymbianErrorCode( aErr,
+ EUPnPContentDirectoryError );
+
+ if( aErr == KErrNone )
+ {
+ if( aSearchCaps != KNullDesC8 )
+ {
+ delete iRespBuf; iRespBuf = NULL;
+ iRespBuf = aSearchCaps.Alloc();
+ if( iRespBuf )
+ {
+ TPckgBuf<TInt> resp1( aSearchCaps.Length() );
+ iActionMessage->Write( 1, resp1 );
+ }
+ else
+ {
+ TPckgBuf<TInt> resp1( 0 );
+ iActionMessage->Write( 1, resp1 );
+ }
+
+ iActionMessage->Complete(
+ EAVControllerGetSearchCapabilitiesSizeCompleted );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ else
+ {
+ TPckgBuf<TInt> resp1( 0 );
+ iActionMessage->Write( 1, resp1 );
+
+ iActionMessage->Complete(
+ EAVControllerGetSearchCapabilitiesSizeCompleted );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ }
+ else
+ {
+ iActionMessage->Complete( aErr );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ }
+ else
+ {
+ __LOG( "CdsSearchCapabilitiesResponse - no msg" );
+ }
+ }
+
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::CdsBrowseResponseL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::CdsBrowseResponseL(
+ TInt aErr,
+ const TDesC8& aBrowseFlag,
+ const TDesC8& aResult,
+ TInt aReturned,
+ TInt aMatches,
+ const TDesC8& aUpdateID )
+ {
+ __LOG1( "CUPnPBrowsingSession::CdsBrowseResponseL: %d", aErr );
+
+ iServer.Dispatcher().UnRegister( iIPSessionId );
+ iIPSessionId = KErrNotFound;
+
+ if( iActionMessage )
+ {
+ if ( aBrowseFlag.CompareF( KBrowseMetadata ) == 0 && aReturned == 0
+ && aErr != KErrCouldNotConnect && aErr != KErrHostUnreach )
+ {
+ aErr = ENoSuchObject; //the file not exist;
+ }
+
+ if ( aErr != KErrCouldNotConnect && aErr != KErrHostUnreach )
+ {
+ aErr = UPnPAVErrorHandler::ConvertToSymbianErrorCode( aErr,
+ EUPnPContentDirectoryError );
+ __LOG1( "CUPnPBrowsingSession::CdsBrowseResponseL:001 %d",
+ aErr );
+ }
+
+ if( aErr == KErrNone )
+ {
+ if( aResult != KNullDesC8 )
+ {
+ if( iInternalState == EDestroyObject )
+ {
+ TRAP( aErr, CheckAndSendDestroyObjectActionL( aResult) );
+ if( aErr )
+ {
+ iInternalState = ENone;
+ iActionMessage->Complete( aErr );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ }
+ else // Browse
+ {
+ delete iRespBuf; iRespBuf = NULL;
+ delete iRespBuf2; iRespBuf2 = NULL;
+ iRespBuf = aResult.Alloc();
+ iRespBuf2 = aUpdateID.Alloc();
+
+ if( iRespBuf && iRespBuf2 )
+ {
+ TUpnpAVBrowseRespParams params;
+ TPckg<TUpnpAVBrowseRespParams> resp2( params );
+ params.iMatches = aReturned ;
+ params.iTotalCount = aMatches;
+ params.iResponseSize = aResult.Length();
+ params.iUpdateIdSize = aUpdateID.Length();
+ iActionMessage->Write( 2, resp2 );
+ iActionMessage->Complete(
+ EAVControllerGetBrowseResponseSizeCompleted );
+ }
+ else
+ {
+ delete iRespBuf; iRespBuf = NULL;
+ delete iRespBuf2; iRespBuf2 = NULL;
+ iActionMessage->Complete( KErrNoMemory );
+ }
+ iInternalState = ENone;
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ }
+ else
+ {
+ if( iInternalState == EBrowse )
+ {
+ TUpnpAVBrowseRespParams params;
+ TPckg<TUpnpAVBrowseRespParams> resp2( params );
+ params.iMatches = 0;
+ params.iTotalCount = 0;
+ params.iResponseSize = 0;
+ params.iUpdateIdSize = 0;
+ iActionMessage->Write( 2, resp2 );
+
+ iInternalState = ENone;
+ iActionMessage->Complete(
+ EAVControllerGetBrowseResponseSizeCompleted );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ else
+ {
+ iInternalState = ENone;
+ iActionMessage->Complete( aErr );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ }
+ }
+ else
+ {
+ iInternalState = ENone;
+ iActionMessage->Complete( aErr );
+ delete iActionMessage; iActionMessage = NULL;
+ if ( KErrCouldNotConnect == aErr || KErrHostUnreach == aErr )
+ {
+ iServer.DeviceDisappearedL( iDevice->Uuid() );
+ }
+ }
+ }
+ else
+ {
+ __LOG( "CdsBrowseResponseL - no msg" );
+ }
+
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::CdsSearchResponse
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::CdsSearchResponse(
+ TInt aErr,
+ const TDesC8& aResult,
+ TInt aReturned,
+ TInt aMatches,
+ const TDesC8& aUpdateID )
+ {
+ __LOG1( "CUPnPBrowsingSession::CdsSearchResponse: %d", aErr );
+
+ iServer.Dispatcher().UnRegister( iIPSessionId );
+ iIPSessionId = KErrNotFound;
+
+ if( iActionMessage )
+ {
+ aErr = UPnPAVErrorHandler::ConvertToSymbianErrorCode( aErr,
+ EUPnPContentDirectoryError );
+
+ if( aErr == KErrNone )
+ {
+ if( aResult != KNullDesC8 )
+ {
+ delete iRespBuf; iRespBuf = NULL;
+ delete iRespBuf2; iRespBuf2 = NULL;
+ iRespBuf = aResult.Alloc();
+ iRespBuf2 = aUpdateID.Alloc();
+
+ if( iRespBuf && iRespBuf2 )
+ {
+ TUpnpAVBrowseRespParams params;
+ TPckg<TUpnpAVBrowseRespParams> resp2( params );
+ params.iMatches = aReturned ;
+ params.iTotalCount = aMatches;
+ params.iResponseSize = aResult.Length();
+ params.iUpdateIdSize = aUpdateID.Length();
+ iActionMessage->Write( 2, resp2 );
+ iActionMessage->Complete(
+ EAVControllerGetSearchResponseSizeCompleted );
+ }
+ else
+ {
+ delete iRespBuf; iRespBuf = NULL;
+ delete iRespBuf2; iRespBuf2 = NULL;
+ iActionMessage->Complete( KErrNoMemory );
+ }
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ else
+ {
+ TUpnpAVBrowseRespParams params;
+ TPckg<TUpnpAVBrowseRespParams> resp2( params );
+ params.iMatches = 0;
+ params.iTotalCount = 0;
+ params.iResponseSize = 0;
+ params.iUpdateIdSize = 0;
+ iActionMessage->Write( 2, resp2 );
+
+ iActionMessage->Complete(
+ EAVControllerGetSearchResponseSizeCompleted );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ }
+ else
+ {
+ iActionMessage->Complete( aErr );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ }
+ else
+ {
+ __LOG( "CdsSearchResponse - no msg" );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::CdsDestroyObjectResponse
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::CdsDestroyObjectResponse(
+ TInt aErr )
+ {
+ __LOG1( "CUPnPBrowsingSession::CdsDestroyObjectResponse: %d", aErr );
+
+ iServer.Dispatcher().UnRegister( iIPSessionId );
+ iIPSessionId = KErrNotFound;
+
+ iInternalState = ENone;
+
+ if( iActionMessage )
+ {
+ aErr = UPnPAVErrorHandler::ConvertToSymbianErrorCode( aErr,
+ EUPnPContentDirectoryError );
+
+ if( aErr == KErrNone )
+ {
+ iActionMessage->Complete( EAVControllerDeleteObjectCompleted );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ else
+ {
+ iActionMessage->Complete( aErr );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ }
+ else
+ {
+ __LOG( "CdsDestroyObjectResponse - no msg" );
+ }
+ }
+
+
+
+
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::CdsCreateObjectResponse
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::CdsCreateObjectResponse(
+ TInt aErr,
+ const TDesC8& aObjectID,
+ const TDesC8& /*aResult*/ )
+ {
+ __LOG1( "CUPnPBrowsingSession::CdsCreateObjectResponse: %d" , aErr );
+
+ iServer.Dispatcher().UnRegister( iIPSessionId );
+ iIPSessionId = KErrNotFound;
+
+ aErr = UPnPAVErrorHandler::ConvertToSymbianErrorCode( aErr,
+ EUPnPContentDirectoryError );
+
+ if( aErr == KErrNone )
+ {
+ if( iActionMessage )
+ {
+ HBufC8* objectID = HBufC8::New( aObjectID.Length() );
+ if( objectID )
+ {
+ objectID->Des().Copy( aObjectID );
+ iActionMessage->Write( 1, *objectID );
+ iActionMessage->Complete(
+ EAVControllerCreateContainerCompleted );
+ delete objectID;
+ }
+ else
+ {
+ iActionMessage->Write( 1, KNullDesC8 );
+ iActionMessage->Complete( KErrNoMemory );
+ }
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ iInternalState = ENone;
+ }
+ else
+ {
+ // Create container failed
+ iInternalState = ENone;
+ iActionMessage->Complete( aErr );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ }
+
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::DeviceDisappearedL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::DeviceDisappearedL(
+ CUpnpAVDeviceExtended& aDevice )
+ {
+ __LOG( "CUPnPBrowsingSession::DeviceDisappearedL" );
+
+ if( aDevice.Local() )
+ {
+ delete iLocalMediaServerUuid; iLocalMediaServerUuid = NULL;
+ }
+ else if( iDeviceMessage ) // Target device
+ {
+ iDeviceMessage->Complete( KErrNone );
+ delete iDeviceMessage; iDeviceMessage = NULL;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::SetLocalMSUuidL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::SetLocalMSUuidL( const TDesC8& aUuid )
+ {
+ HBufC8* tmp = aUuid.AllocL();
+ delete iLocalMediaServerUuid;
+ iLocalMediaServerUuid = tmp;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::SessionId
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+TInt CUPnPBrowsingSession::SessionId() const
+ {
+ return iSessionId;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::Uuid
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+const TDesC8& CUPnPBrowsingSession::Uuid() const
+ {
+ if( iDevice )
+ {
+ return iDevice->Uuid();
+ }
+ else
+ {
+ return KNullDesC8;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::GetBrowseResponseSizeL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::GetBrowseResponseSizeL(
+ const RMessage2& aMessage )
+ {
+ __LOG( "CUPnPBrowsingSession::GetBrowseResponseSizeL" );
+
+ __ASSERTD( !iActionMessage, __FILE__, __LINE__ );
+
+ ResetL();
+
+ CUpnpAVBrowseRequest* tmpRequest = CUpnpAVBrowseRequest::NewLC();
+
+ ReadBrowseReqFromMessageL( aMessage, 1, tmpRequest );
+
+ CUpnpAction* action = iServer.ControlPoint().CreateActionLC(
+ iCpDevice, KContentDirectory, KBrowse );
+
+ TBuf8<KMaxIntLength> startingIndexStr;
+ startingIndexStr.Num(tmpRequest->StartIndex());
+ TBuf8<KMaxIntLength> requestedCountStr;
+ requestedCountStr.Num(tmpRequest->RequestedCount());
+ action->SetArgumentL( KObjectID, tmpRequest->Id() );
+ if( tmpRequest->BrowseFlag() == MUPnPAVBrowsingSession::EDirectChildren )
+ {
+ action->SetArgumentL( KBrowseFlag, KDirectChildren );
+ }
+ else
+ {
+ action->SetArgumentL( KBrowseFlag, KMetaData );
+ }
+ action->SetArgumentL( KFilter, tmpRequest->Filter() );
+ action->SetArgumentL( KStartingIndex, startingIndexStr );
+ action->SetArgumentL( KRequestedCount, requestedCountStr );
+ action->SetArgumentL(
+ UpnpAVCPStrings::KSortCriteria,
+ tmpRequest->SortCriteria() );
+
+ iServer.ControlPoint().SendL( action );
+ CleanupStack::Pop( action );
+ if (action->SessionId() < 0) User::Leave( action->SessionId() );
+ iIPSessionId = action->SessionId();
+ CleanupStack::PopAndDestroy( tmpRequest );
+
+ // Register
+ iInternalState = EBrowse;
+ iServer.Dispatcher().RegisterL( iIPSessionId, *this );
+ iActionMessage = new (ELeave) RMessage2( aMessage );
+ }
+
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::CancelGetBrowseResponseSizeL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::CancelGetBrowseResponseSizeL()
+ {
+ __LOG( "CUPnPBrowsingSession::CancelGetBrowseResponseSizeL" );
+
+ if( iActionMessage )
+ {
+ iServer.Dispatcher().UnRegister( iIPSessionId );
+ iActionMessage->Complete( KErrCancel );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ }
+
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::GetBrowseResponseL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::GetBrowseResponseL( const RMessage2& aMessage )
+ {
+ __LOG( "CUPnPBrowsingSession::GetBrowseResponseL" );
+
+ __ASSERTD( !iActionMessage, __FILE__, __LINE__ );
+
+ iIPSessionId = KErrNotFound;
+ if( iRespBuf && iRespBuf2 )
+ {
+ aMessage.WriteL( 1, *iRespBuf );
+ aMessage.WriteL( 2, *iRespBuf2 );
+ delete iRespBuf; iRespBuf = NULL;
+ delete iRespBuf2; iRespBuf2 = NULL;
+ aMessage.Complete( EAVControllerGetBrowseResponseCompleted );
+ }
+ else
+ {
+ //Memory allocaton failed
+ delete iRespBuf; iRespBuf = NULL;
+ delete iRespBuf2; iRespBuf2 = NULL;
+ User::Leave( KErrNoMemory );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::GetSearchResponseSizeL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::GetSearchResponseSizeL(
+ const RMessage2& aMessage )
+ {
+ __LOG( "CUPnPBrowsingSession::GetSearchResponseSizeL" );
+
+ __ASSERTD( !iActionMessage, __FILE__, __LINE__ );
+
+ ResetL();
+
+ CUpnpAVBrowseRequest* tmpRequest = CUpnpAVBrowseRequest::NewLC();
+
+ ReadBrowseReqFromMessageL( aMessage, 1, tmpRequest );
+
+ CUpnpAction* action = iServer.ControlPoint().CreateActionLC(
+ iCpDevice, KContentDirectory, KSearch );
+
+ TBuf8<KMaxIntLength> startingIndexStr;
+ startingIndexStr.Num(tmpRequest->StartIndex());
+ TBuf8<KMaxIntLength> requestedCountStr;
+ requestedCountStr.Num(tmpRequest->RequestedCount());
+ action->SetArgumentL( KContainerID, tmpRequest->Id() );
+ action->SetArgumentL( KSearchCriteria, tmpRequest->SearchCriteria() );
+ action->SetArgumentL( KFilter, tmpRequest->Filter() );
+ action->SetArgumentL( KStartingIndex, startingIndexStr );
+ action->SetArgumentL( KRequestedCount, requestedCountStr );
+ action->SetArgumentL(
+ UpnpAVCPStrings::KSortCriteria,
+ tmpRequest->SortCriteria() );
+
+ iServer.ControlPoint().SendL( action );
+ CleanupStack::Pop( action );
+ if (action->SessionId() < 0) User::Leave( action->SessionId() );
+ iIPSessionId = action->SessionId();
+ CleanupStack::PopAndDestroy( tmpRequest );
+
+ // Register
+ iServer.Dispatcher().RegisterL( iIPSessionId, *this );
+ iActionMessage = new (ELeave) RMessage2( aMessage );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::CancelGetSearchResponseSizeL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::CancelGetSearchResponseSizeL()
+ {
+ __LOG( "CUPnPBrowsingSession::CancelGetSearchResponseSizeL" );
+
+ if( iActionMessage )
+ {
+ iServer.Dispatcher().UnRegister( iIPSessionId );
+ iActionMessage->Complete( KErrCancel );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::GetSearchResponseL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::GetSearchResponseL( const RMessage2& aMessage )
+ {
+ __LOG( "CUPnPBrowsingSession::GetSearchResponseL" );
+
+ __ASSERTD( !iActionMessage, __FILE__, __LINE__ );
+
+ iIPSessionId = KErrNotFound;
+ if( iRespBuf && iRespBuf2 )
+ {
+ aMessage.WriteL( 1, *iRespBuf );
+ aMessage.WriteL( 2, *iRespBuf2 );
+ delete iRespBuf; iRespBuf = NULL;
+ delete iRespBuf2; iRespBuf2 = NULL;
+ aMessage.Complete( EAVControllerGetSearchResponseCompleted );
+ }
+ else
+ {
+ //Memory allocaton failed
+ delete iRespBuf; iRespBuf = NULL;
+ delete iRespBuf2; iRespBuf2 = NULL;
+ User::Leave( KErrNoMemory );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::GetSearchCapabitiesSizeL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::GetSearchCapabitiesSizeL(
+ const RMessage2& aMessage )
+ {
+ __LOG( "CUPnPBrowsingSession::GetSearchCapabitiesSizeL" );
+
+ __ASSERTD( !iActionMessage, __FILE__, __LINE__ );
+
+ ResetL();
+
+ CUpnpAction* action = iServer.ControlPoint().CreateActionLC(
+ iCpDevice, KContentDirectory, KGetSearchCapabilities );
+
+ iServer.ControlPoint().SendL( action );
+ CleanupStack::Pop( action );
+ if (action->SessionId() < 0) User::Leave( action->SessionId() );
+ iIPSessionId = action->SessionId();
+
+ // Register
+ iServer.Dispatcher().RegisterL( iIPSessionId, *this );
+ iActionMessage = new (ELeave) RMessage2( aMessage );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::CancelGetSearchCapabitiesSizeL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::CancelGetSearchCapabitiesSizeL()
+ {
+ __LOG( "CUPnPBrowsingSession::CancelGetSearchCapabitiesSizeL" );
+
+ if( iActionMessage )
+ {
+ iServer.Dispatcher().UnRegister( iIPSessionId );
+ iActionMessage->Complete( KErrCancel );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::GetSearchCapabitiesL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::GetSearchCapabitiesL( const RMessage2& aMessage )
+ {
+ __LOG( "CUPnPBrowsingSession::GetSearchCapabitiesL" );
+
+ iIPSessionId = KErrNotFound;
+
+ aMessage.WriteL( 1, *iRespBuf );
+ aMessage.Complete( EAVControllerGetSearchCapabilitiesCompleted );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::CreateContainerL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::CreateContainerL( const RMessage2& aMessage )
+ {
+ __LOG( "CUPnPBrowsingSession::CreateContainerL" );
+
+ __ASSERTD( !iActionMessage, __FILE__, __LINE__ );
+
+ ResetL();
+
+ // Title
+ TInt len = aMessage.GetDesMaxLength( 1 );
+ HBufC8* tempTitle = HBufC8::NewLC( len );
+ TPtr8 ptr( tempTitle->Des() );
+ aMessage.ReadL( 1, ptr );
+
+ // Container ID
+ len = aMessage.GetDesMaxLength( 2 );
+ HBufC8* tempId = HBufC8::NewLC( len );
+ ptr.Set( tempId->Des() );
+ aMessage.ReadL( 2, ptr );
+
+ if( iDevice->DlnaCompatible() && !iDevice->CreateChildContainer()
+ && *tempId != KContainerIdAny )
+ {
+ // The device is DLNA compatible and does not support creation
+ // of a child container
+ User::Leave( KErrNotSupported );
+ }
+
+ // Container type
+ MUPnPAVBrowsingSession::TContainerType type =
+ (MUPnPAVBrowsingSession::TContainerType)aMessage.Int3();
+
+ // Create a container object
+ CUpnpContainer* tmpContainer = CUpnpContainer::NewL();
+ CleanupStack::PushL( tmpContainer );
+
+ // Set the title and the parent ID
+ tmpContainer->SetTitleL( *tempTitle );
+ tmpContainer->SetParentIdL( *tempId );
+
+ // Set the object type
+ if( type == MUPnPAVBrowsingSession::EPlaylistContainer )
+ {
+ tmpContainer->SetObjectClassL( KClassPlaylist() );
+ }
+ else
+ {
+ tmpContainer->SetObjectClassL( KClassStorage() );
+ }
+
+ HBufC8* xmlDoc = CUPnPXMLParser::ContainerToXmlLC( *tmpContainer );
+
+ CUpnpAction* action = iServer.ControlPoint().CreateActionLC(
+ iCpDevice, KContentDirectory, KCreateObject );
+
+ action->SetArgumentL( KContainerID, *tempId );
+ action->SetArgumentL( KElements, *xmlDoc );
+
+ iServer.ControlPoint().SendL( action );
+ CleanupStack::Pop( action );
+ if (action->SessionId() < 0) User::Leave( action->SessionId() );
+ iIPSessionId = action->SessionId();
+
+ CleanupStack::PopAndDestroy( xmlDoc );
+ CleanupStack::PopAndDestroy( tmpContainer );
+ CleanupStack::PopAndDestroy( tempId );
+ CleanupStack::PopAndDestroy( tempTitle );
+
+ // Register
+ iServer.Dispatcher().RegisterL( iIPSessionId, *this );
+ iInternalState = ECreateContainer;
+ iActionMessage = new (ELeave) RMessage2( aMessage );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::CancelCreateContainerL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::CancelCreateContainerL()
+ {
+ __LOG( "CUPnPBrowsingSession::CancelCreateContainerL" );
+
+ if( iActionMessage )
+ {
+ iServer.Dispatcher().UnRegister( iIPSessionId );
+ iActionMessage->Complete( KErrCancel );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::DeleteObjectL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::DeleteObjectL( const RMessage2& aMessage )
+ {
+ __LOG( "CUPnPBrowsingSession::DeleteObjectL" );
+
+ __ASSERTD( !iActionMessage, __FILE__, __LINE__ );
+
+ ResetL();
+
+ TInt len = aMessage.GetDesMaxLength( 1 );
+ HBufC8* tempId = HBufC8::NewLC( len );
+ TPtr8 ptr( tempId->Des() );
+ aMessage.ReadL( 1, ptr );
+
+ CleanupStack::Pop( tempId );
+ delete iItemId;
+ iItemId = tempId;
+
+ CUpnpAction* action = iServer.ControlPoint().CreateActionLC(
+ iCpDevice, KContentDirectory, KBrowse );
+
+ action->SetArgumentL( KObjectID, *iItemId );
+ action->SetArgumentL( KBrowseFlag, KMetaData );
+ action->SetArgumentL( KFilter, KFilterCommon );
+ action->SetArgumentL( KStartingIndex, KDefaultStartingIndex );
+ action->SetArgumentL( KRequestedCount, KDefaultRequestedCount );
+
+ iServer.ControlPoint().SendL( action );
+ CleanupStack::Pop( action );
+ if (action->SessionId() < 0) User::Leave( action->SessionId() );
+ iIPSessionId = action->SessionId();
+
+ // Register
+ iInternalState = EDestroyObject;
+ iServer.Dispatcher().RegisterL( iIPSessionId, *this );
+ iActionMessage = new (ELeave) RMessage2( aMessage );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::CancelDeleteObjectL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::CancelDeleteObjectL()
+ {
+ __LOG( "CUPnPBrowsingSession::CancelDeleteObjectL" );
+
+ if( iActionMessage )
+ {
+ iServer.Dispatcher().UnRegister( iIPSessionId );
+ iActionMessage->Complete( KErrCancel );
+ delete iActionMessage; iActionMessage = NULL;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::DeviceDisappearedRequestL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::DeviceDisappearedRequestL(
+ const RMessage2& aMessage )
+ {
+ __LOG( "CUPnPBrowsingSession::DeviceDisappearedRequestL" );
+
+ __ASSERTD( !iDeviceMessage, __FILE__, __LINE__ );
+
+ iDeviceMessage = new (ELeave) RMessage2( aMessage );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::CancelDeviceDisappearedRequestL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::CancelDeviceDisappearedRequestL()
+ {
+ __LOG( "CUPnPBrowsingSession::CancelDeviceDisappearedRequestL" );
+
+ if( iDeviceMessage )
+ {
+ iDeviceMessage->Complete( KErrCancel );
+ delete iDeviceMessage; iDeviceMessage = NULL;
+ }
+ }
+
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::CheckAndSendDestroyObjectActionL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::CheckAndSendDestroyObjectActionL(
+ const TDesC8& aResponse )
+ {
+ __LOG( "CUPnPBrowsingSession::CheckAndSendDestroyObjectActionL" );
+
+ CUPnPXMLParser* parser = CUPnPXMLParser::NewL();
+ CleanupStack::PushL( parser );
+
+ RPointerArray<CUpnpObject> array;
+ CleanupResetAndDestroyPushL( array );
+
+ parser->ParseResultDataL( array, aResponse );
+
+ if( array.Count() == KExpectedCount )
+ {
+ if( array[ 0 ]->Restricted() )
+ {
+ User::Leave( KErrArgument );
+ }
+ else
+ {
+ // Not restricted, ok to destroy
+ CUpnpAction* action = iServer.ControlPoint().CreateActionLC(
+ iCpDevice, KContentDirectory, KDestroyObject );
+
+ action->SetArgumentL( KObjectID, *iItemId );
+
+ iServer.ControlPoint().SendL( action );
+ CleanupStack::Pop( action );
+ if (action->SessionId() < 0)
+ {
+ User::Leave( action->SessionId() );
+ }
+ iIPSessionId = action->SessionId();
+ iServer.Dispatcher().RegisterL( iIPSessionId, *this );
+ }
+ }
+ else
+ {
+ User::Leave( KErrGeneral );
+ }
+ CleanupStack::PopAndDestroy( &array );
+ CleanupStack::PopAndDestroy( parser );
+ }
+
+
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::ResetL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::ResetL()
+ {
+ __LOG( "CUPnPBrowsingSession::ResetL" );
+
+ iIPSessionId = KErrNotFound;
+
+ if( !iServer.DeviceRepository().IsWlanActive() )
+ {
+ __LOG( "Reset - disconnected" );
+ User::Leave( KErrDisconnected );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::ReadObjFromMessageL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::ReadObjFromMessageL( const RMessage2& aMessage,
+ TInt aSlot, CUpnpObject* aObj )
+ {
+ // create buffer
+ TInt len = aMessage.GetDesMaxLength( aSlot );
+ HBufC8* buf = HBufC8::NewLC( len );
+ TPtr8 ptr( buf->Des() );
+ User::LeaveIfError( aMessage.Read( aSlot, ptr ) );
+
+ // read stream
+ RDesReadStream stream( *buf );
+ CleanupClosePushL( stream );
+
+ // internalize object
+ stream >> *aObj;
+
+ // clean up
+ CleanupStack::PopAndDestroy( &stream );
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::ReadReqFromMessageL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::ReadReqFromMessageL( const RMessage2& aMessage,
+ TInt aSlot, CUpnpAVRequest* aReq )
+ {
+ // create buffer
+ TInt len = aMessage.GetDesMaxLength( aSlot );
+ HBufC8* buf = HBufC8::NewLC( len );
+ TPtr8 ptr( buf->Des() );
+ User::LeaveIfError( aMessage.Read( aSlot, ptr ) );
+
+ // read stream
+ RDesReadStream stream( *buf );
+ CleanupClosePushL( stream );
+
+ // internalize object
+ stream >> *aReq;
+
+ // clean up
+ CleanupStack::PopAndDestroy( &stream );
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::ReadBrowseReqFromMessageL
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+void CUPnPBrowsingSession::ReadBrowseReqFromMessageL(
+ const RMessage2& aMessage, TInt aSlot, CUpnpAVBrowseRequest* aReq )
+ {
+ // create buffer
+ TInt len = aMessage.GetDesMaxLength( aSlot );
+ HBufC8* buf = HBufC8::NewLC( len );
+ TPtr8 ptr( buf->Des() );
+ User::LeaveIfError( aMessage.Read( aSlot, ptr ) );
+
+ // read stream
+ RDesReadStream stream( *buf );
+ CleanupClosePushL( stream );
+
+ // internalize object
+ stream >> *aReq;
+
+ // clean up
+ CleanupStack::PopAndDestroy( &stream );
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowsingSession::ReadBufFromMessageLC
+// See upnpbrowsingsession.h
+// --------------------------------------------------------------------------
+HBufC8* CUPnPBrowsingSession::ReadBufFromMessageLC(
+ const RMessage2& aMessage, TInt aSlot )
+ {
+ // create buffer
+ TInt len = aMessage.GetDesMaxLength( aSlot );
+ HBufC8* buf = HBufC8::NewLC( len );
+ TPtr8 ptr( buf->Des() );
+ User::LeaveIfError( aMessage.Read( aSlot, ptr ) );
+ return buf;
+ }
+
+// End of file