diff -r 3785f754ee62 -r 5360b7ddc251 upnpavcontroller/upnpavcontrollerserver/inc/upnpplaybacksession.h --- a/upnpavcontroller/upnpavcontrollerserver/inc/upnpplaybacksession.h Fri Sep 17 08:31:21 2010 +0300 +++ b/upnpavcontroller/upnpavcontrollerserver/inc/upnpplaybacksession.h Mon Nov 01 12:37:49 2010 +0200 @@ -1,1233 +1,628 @@ -/* -* 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: implements playback state machinery for media renderer -* -*/ - - - - - - - -#ifndef C_UPNPPLAYBACKSESSION_H -#define C_UPNPPLAYBACKSESSION_H - -// INCLUDE FILES -// System -#include - -// upnp stack api -#include - -// upnpframework / avcontroller api -#include "upnpavcontroller.h" -#include "upnpavrenderingsessionobserver.h" - -// FORWARD DECLARATIONS -class MUPnPAVMediaObserver; -class CUpnpItem; -class CUpnpObject; -class CUPnPFileSharingActive; -class RUpnpMediaServerClient; -class CUpnpAVRequest; -class CUpnpAVDeviceExtended; -class TUnsolicitedEventC; -class CUPnPXMLEventParser; -class CUpnpAVControllerServer; -class CUpnpAttribute; -class CUpnpAVControlPoint; -class CUPnPPeriodic; - -/** - * Implements the server side playback session. Provides functionality to - * Set URI/Next URI, control playback and to get position info. - * - * @since S60 v3.1 - */ -class CUPnPPlaybackSession : public CBase, - public MUpnpAVControlPointObserver - { - -private: - - /** - * Defines current playback state. - */ - enum TPlaybackState - { - EUninitialized = 0, - EStopped, - EPlaying, - EPaused, - EPlaySent - }; - - enum TMuteState - { - EUnknown = -1, - ENotMuted = 0, - EMuted = 1 - }; - -public: - - /** - * Static 1st phase constructor. - * - * @param aControlPoint AV Control Point reference - * @param aClient S60 Media Server session reference - * @param aDispatcher observer callback disparcher reference - * @param aRepository device repository - * @param aSessionId session id - * @param aUuid device Uuid - * @return new instance - */ - static CUPnPPlaybackSession* NewL - ( - RUpnpMediaServerClient& aClient, - CUpnpAVControllerServer& aServer, - TInt aSessionId, - const TDesC8& aUuid - ); - - /** - * Destructor - */ - virtual ~CUPnPPlaybackSession(); - -private: - - /** - * Private constructor. - * - * @param aControlPoint AV Control Point reference - * @param aClient S60 Media Server session reference - * @param aDispatcher observer callback disparcher reference - * @param aRepository device repository - * @param aSessionId session id - * @param aUuid device Uuid - */ - CUPnPPlaybackSession - ( - RUpnpMediaServerClient& aClient, - CUpnpAVControllerServer& aServer, - TInt aSessionId - ); - - /** - * 2nd phase construct - * - * @param aUuid device Uuid - */ - void ConstructL( const TDesC8& aUuid ); - -protected: // From MUpnpAVControlPointObserver - - /** - * Observer callback for rendering control Set Volume. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aInstance rendering instance. - * @param aChannel audio channel. - * @param aDesiredVolume - */ - void RcSetVolumeResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstance, - const TDesC8& aChannel, - const TDesC8& aDesiredVolume); - - /** - * Observer callback for rendering control Get Volume. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aInstance rendering instance. - * @param aChannel audio channel. - * @param aCurrentVolume - */ - void RcVolumeResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstance, - const TDesC8& aChannel, - const TDesC8& aCurrentVolume); - - /** - * Observer callback for rendering control Set Mute. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aInstance rendering instance. - * @param aChannel audio channel. - * @param aDesiredMute - */ - void RcSetMuteResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstance, - const TDesC8& aChannel, - const TDesC8& aDesiredMute); - - /** - * Observer callback for rendering control Get Mute. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aInstance rendering instance. - * @param aChannel audio channel. - * @param aCurrentMute - */ - void RcMuteResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstance, - const TDesC8& aChannel, - const TDesC8& aCurrentMute); - - - /** - * Observer callback for rendering control AV set transport uri. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aInstance rendering instance. - * @param aCurrentUri Current transport URI. - * @param Current transport URI Metadata. - */ - void AvtSetTransportUriResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstanceId, - const TDesC8& aCurrentUri, - const TDesC8& aCurrentUriMetaData); - - /** - * Observer callback for rendering control AV set next transport uri. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aInstance rendering instance. - * @param aCurrentUri Current transport URI. - * @param Current transport URI Metadata. - */ - virtual void AvtSetNextTransportUriResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstanceId, - const TDesC8& aNextUri, - const TDesC8& aNextUriMetaData); - - /** - * Observer callback for rendering control AV get media info response. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aInstance rendering instance. - * @param aNrTracks Number of tracks. - * @param aMediaDuration - * @param aCurrentUri Current transport URI. - * @param aCurrentUriMetaData Metadata of current trransport uri. - * @param aNextUri Next transport URI. - * @param aNextUriMetaData Metadata of next trransport uri. - * @param aPlayMedium - * @param aRecordMedium - * @param aWriteStatus - */ - void 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); - - /** - * Observer callback for rendering control AV get transport info response. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aInstance rendering instance. - * @param aCurrenTransportState - * @param aCurrentTransportStatus - * @param aCurrentUri aCurrentSpeed - */ - void AvtGetTransportInfoResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstanceId, - const TDesC8& aCurrenTransportState, - const TDesC8& aCurrentTransportStatus, - const TDesC8& aCurrentSpeed); - - /** - * Observer callback for rendering control AV get position info response. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aTrack rendering instance. - * @param aTrackDuration - * @param aTrackMetaData - * @param aTrackURI - * @param aRelTime - * @param aAbsTime - * @param aRelCount - * @param aAbsCount - */ - void 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); - - /** - * Observer callback for rendering control AV get device - * capabilities response. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aPlayMedia - * @param aRecMedia - * @param aRecQualityModes - */ - void AvtDeviceCapabilitiesResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstanceId, - const TDesC8& aPlayMedia, - const TDesC8& aRecMedia, - const TDesC8& aRecQualityMode); - - /** - * Observer callback for rendering control AV get transport - * settings response. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aInstanceId - * @param aErr UPnP error code. - * @param aPlayMode - * @param aRecQualityMode - */ - void AvtTransportSettingsResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstanceId, - const TDesC8& aPlayMode, - const TDesC8& aRecQualityMode); - - /** - * Observer callback for rendering control AV Stop response. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - */ - void AvtStopResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstanceId); - - /** - * Observer callback for rendering control AV Play response. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aSpeed - */ - void AvtPlayResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstanceId, - const TDesC8& aSpeed); - - /** - * Observer callback for rendering control AV Pause response. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - */ - void AvtPauseResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstanceId); - - /** - * Observer callback for rendering control AV Record response. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - */ - void AvtRecordResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstanceId); - - /** - * Observer callback for rendering control AV Seek response. - * @since Series 60 2.6 - * @param aSessionId - * @param aErr UPnP error code. - * @param aUnit - * @param aTarget - */ - void AvtSeekResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstanceId, - const TDesC8& aUnit, - const TDesC8& aTarget); - - /** - * Observer callback for rendering control AV Next response. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - */ - void AvtNextResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstanceId); - - /** - * Observer callback for rendering control AV Previous response. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - */ - void AvtPreviousResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstanceId); - - /** - * Observer callback for rendering control AV setplay mode response. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aNewPlayMode - */ - void AvtSetPlayModeResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstanceId, - const TDesC8& aNewPlayMode); - - /** - * Observer callback for rendering control AV set record qualityresponse. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aNewRecordQuality - */ - void AvtSetRecordModeResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aInstanceId, - const TDesC8& aNewRecordQuality); - - /** - * Observer callback for Content Directory GetSearchCapabilities function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aSearchCaps - */ - void CdsSearchCapabilitiesResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aSearchCaps); - - /** - * Observer callback for Content Directory GetSortCapabilities function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aSortCaps - */ - void CdsSortCapabilitiesResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aSortCaps); - - /** - * Observer callback for Content Directory GetSystemUpdateID function. - * @since Series 60 2.6 - * @param aSessionId - * @param aErr UPnP error code. - * @param aSystemUpdateId - */ - void CdsSystemUpdateIdResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - TInt aSystemUpdateId); - /** - * Observer callback for Content Directory Browse function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aObjectID - * @param aBrowseFlag - * @param aFilter - * @param aIndex - * @param arequest - * @param aSortCriteria - * @param aResult - * @param aReturned - * @param aMatches - * @param aUpdateID - */ - - void 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); - - /** - * Observer callback for Content Directory Search function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aContainerId - * @param aSearchCriteria - * @param aFilter - * @param aIndex - * @param arequest - * @param aSortCriteria - * @param aResult - * @param aReturned - * @param aMatches - * @param aUpdateID - */ - - void 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); - - /** - * Observer callback for Content Directory DestroyObject function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aObjectId - */ - void CdsDestroyObjectResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aObjectId ); - - /** - * Observer callback for Content Directory UpdateObject function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aObjectId - * @param aCurrentTagValue - * @param aNewTagValue - */ - void CdsUpdateObjectResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aObjectId, - const TDesC8& aCurrentTagValue, - const TDesC8& aNewTagValue ); - - /** - * Observer callback for Content Directory ImportResource function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aSourceURI - * @param aDestinationURI - * @param aTransferId - */ - void CdsImportResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aSourceURI, - const TDesC8& aDestinationURI, - const TDesC8& aTransferId ); - - /** - * Observer callback for Content Directory ExportResource function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aSourceURI - * @param aDestinationURI - * @param aTransferId - */ - void CdsExportResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aSourceURI, - const TDesC8& aDestinationURI, - const TDesC8& aTransferId ); - - /** - * Observer callback for Content Directory StopTransfer function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aSourceURI - * @param aDestinationURI - * @param aTransferId - */ - void CdsStopTransferResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aTransferId ); - - /** - * Observer callback for Content Directory GetTransferProgress function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aTransferId - * @param aTransferStatus - * @param aTransferTotal - */ - virtual void CdsCTransferProgressResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aTransferId, - const TDesC8& aTransferStatus, - const TDesC8& aTransferLength, - const TDesC8& aTransferTotal ); - - /** - * Observer callback for Content Directory DeleteResource function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aResourceUri Resource to be deleted. - */ - void CdsDeleteResourceResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aResourceUri ); - - /** - * Observer callback for Content Directory CreateReference function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aContainerId Destination folder. - * @param aObjectId Source object. - * @param aNewId Created reference. - */ - void CdsCreateReferenceResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aContainerId, - const TDesC8& aObjectId, - const TDesC8& aNewId ); - - /** - * Observer callback for Content Directory CreateReference function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aContainerID Container in which new object is created. - * @param aElements Elements for item creation. - * @param aObjectID New objects ID. - * @param aResult Result of the action. - */ - void CdsCreateObjectResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aContainerID, - const TDesC8& aElements, - const TDesC8& aObjectID, - const TDesC8& aResult ); - - - /** - * Observer callback for Connection Manager GetProtocolInfo function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aSource - * @param aSink - */ - void CmProtocolInfoResponse( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aSource, - const TDesC8& aSink ); - - /** - * Observer callback for Connection Manager PrepareForConnection - * function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aRemoteProtocolInfo - * @param aPeerConnectionManager - * @param aPeerConnectionId - * @param aDirection - * @param aConnection - * @param aTransport - * @param aRsc - */ - void 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 ); - - /** - * Observer callback for Connection Manager ConnectionComplete - * function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aConnection - */ - void CmComplete( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - TInt aConnection ); - - /** - * Observer callback for Connection Manager GetCurrentConnectionIDs - * function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param aConnection - */ - void CmCurrentConnections( - const TDesC8& aUuid, - TInt aSessionId, - TInt aErr, - const TDesC8& aConnections); - - /** - * Observer callback for Connection Manager GetCurrentConnectionInfo - * function. - * @since Series 60 2.6 - * @param aUuid Source device UUID. - * @param aSessionId - * @param aErr UPnP error code. - * @param rscId - * @param aProtocolInfo - * @param aPeerConnectionManager - * @param peerId - * @param aStatus - */ - void 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 ); - - //***************************************************************** - //Functions for UPnP event handling - //***************************************************************** - /** - * Content Directory SystemUpdateId event handler. - * @since Series 60 2.6 - * @param aUuid Device UUID. - * @param aSystemUpdateId Device systemUpdateId. - */ - void CdsUpdateEvent( - const TDesC8& aUuid, - TInt aSystemUpdateId - ); - - /** - * Content Directory ContainerUpdateIDs event handler. - * @since Series 60 2.6 - * @param aUuid Device UUID. - * @param aConteinerIds Device container update ids. - */ - void CdsContainerEvent( - const TDesC8& aUuid, - const TDesC8& aConteinerIds - ); - - /** - * Content Directory TransferIDs event handler. - * @since Series 60 2.6 - * @param aUuid Device UUID. - * @param aTransferIds Device transfer ids. - */ - void CdsTransferEvent( - const TDesC8& aUuid, - const TDesC8& aTransferIds - ); - - /** - * Rendering Control LastChange event handler. - * @since Series 60 2.6 - * @param aUuid Device UUID. - * @param aLastChange Device LastChange statevariable. - */ - void RcLastChangeEvent( - const TDesC8& aUuid, - const TDesC8& aLastChange - ); - - /** - * AV Transport LastChange event handler. - * @since Series 60 2.6 - * @param aUuid Device UUID. - * @param aLastChange Device LastChange statevariable. - */ - void AvtLastChangeEvent( - const TDesC8& aUuid, - const TDesC8& aLastChange - ); - /** - * Connection Manager SourceEvent event handler. - * @since Series 60 2.6 - * @param aUuid Device UUID. - * @param aSource Device's source info. - */ - void CmSourceEvent( - const TDesC8& aUuid, - const TDesC8& aSource - ); - - /** - * Connection Manager SinkEvent event handler. - * @since Series 60 2.6 - * @param aUuid Device UUID. - * @param aSink Device's sink info. - */ - void CmSinkEvent( - const TDesC8& aUuid, - const TDesC8& aSink - ); - - /** - * Connection Manager ConnectionsEvent event handler. - * @since Series 60 2.6 - * @param aUuid Device UUID. - * @param aConnections Devices connections. - */ - void CmConnectionsEvent( - const TDesC8& aUuid, - const TDesC8& aConnections - ); - //***************************************************************** - // Device and http functions. - //***************************************************************** - /** - * Handles HTTP messages. - * @since Series 60 2.6 - * @param aMessage Incoming HTTP message. - */ - void HttpResponseL( CUpnpHttpMessage* aMessage ); - -public: - - /** - * Handles UPnP device discoveries. - * @since Series 60 2.6 - * @param aDevice Device that is discovered. - */ - void DeviceDiscoveredL( CUpnpDevice* aDevice ); - - /** - * Handles UPnP device disappears. - * @since Series 60 2.6 - * @param aDevice Device that disappeared. - */ - void DeviceDisappearedL( CUpnpDevice* aDevice ); - -public: // New functions - - /** - * Device disappeared callback - * - * @param aDevice disappeared device - */ - void DeviceDisappearedL( CUpnpAVDeviceExtended& aDevice ); - - /** - * Sets Uuid of the local Media Server - * - * @param aUuid device Uuid - */ - void SetLocalMSUuidL( const TDesC8& aUuid ); - - /** - * Returns session id - * - * @return session id - */ - TInt SessionId() const; - - /** - * See upnpavcontrollerimpl.h - */ - void EventRequestL( const RMessage2& aMessage ); - - /** - * See upnpavcontrollerimpl.h - */ - void CancelEventRequestL(); - - /** - * See upnpavcontrollerimpl.h - */ - void SetURIL( const RMessage2& aMessage ); - - /** - * See upnpavcontrollerimpl.h - */ - void CancelSetURIL(); - - /** - * See upnpavcontrollerimpl.h - */ - void SetNextURIL( const RMessage2& aMessage ); - - /** - * See upnpavcontrollerimpl.h - */ - void CancelSetNextURIL(); - - /** - * See upnpavcontrollerimpl.h - */ - void PlayL( const RMessage2& aMessage ); - - /** - * See upnpavcontrollerimpl.h - */ - void CancelPlayL(); - - /** - * See upnpavcontrollerimpl.h - */ - void StopL( const RMessage2& aMessage ); - - /** - * See upnpavcontrollerimpl.h - */ - void CancelStopL(); - - /** - * See upnpavcontrollerimpl.h - */ - void PauseL( const RMessage2& aMessage ); - - /** - * See upnpavcontrollerimpl.h - */ - void CancelPauseL(); - - /** - * See upnpavcontrollerimpl.h - */ - void SetVolumeL( const RMessage2& aMessage ); - - /** - * See upnpavcontrollerimpl.h - */ - void CancelSetVolumeL(); - - /** - * See upnpavcontrollerimpl.h - */ - void GetVolumeL( const RMessage2& aMessage ); - - /** - * See upnpavcontrollerimpl.h - */ - void CancelGetVolumeL(); - - /** - * See upnpavcontrollerimpl.h - */ - void SetMuteL( const RMessage2& aMessage ); - - /** - * See upnpavcontrollerimpl.h - */ - void CancelSetMuteL(); - - /** - * See upnpavcontrollerimpl.h - */ - void GetMuteL( const RMessage2& aMessage ); - - /** - * See upnpavcontrollerimpl.h - */ - void CancelGetMuteL(); - - /** - * See upnpavcontrollerimpl.h - */ - void GetPositionInfoL( const RMessage2& aMessage ); - - /** - * See upnpavcontrollerimpl.h - */ - void CancelGetPositionInfoL(); - - /** - * See upnpavcontrollerimpl.h - */ - void DeviceDisappearedRequestL( const RMessage2& aMessage ); - - /** - * See upnpavcontrollerimpl.h - */ - void CancelDeviceDisappearedRequestL(); - - /** - * Returns device Uuid - */ - const TDesC8& Uuid() const; - -private: - - /** - * Parses a browse response and returns the importuri - * - * @param aResponse browse response - * @return importuri (ownership is transferred) - */ - HBufC8* ParseBrowseResponseL( const TDesC8& aResponse ); - - /** - * Encodes given xml-document - * - * @param aResult xml-document - * @return encoded xml-document - */ - HBufC8* EncodeXmlL( const TDesC8& aResult ); - - /** - * Reset function - */ - void ResetL(); - - /** - * Reads object from a message - * - * @param aMessage message from client - * @param aSlot message slot numer - * @param aObj object pointer - */ - void ReadObjFromMessageL( const RMessage2& aMessage, TInt aSlot, - CUpnpObject* aObj ); - - /** - * Reads request from a message - * - * @param aMessage message from client - * @param aSlot message slot numer - * @param aReq request pointer - */ - void ReadReqFromMessageL( const RMessage2& aMessage, TInt aSlot, - CUpnpAVRequest* aReq ); - - void ValidateProtocolInfoL( const CUpnpAttribute& aProtocolInfo ); - - /** - * Send Play action if it has been requested. - */ - void SendPlayIfNeededL(); - - /** - * Play delay timer callback - * - * @param TAny* aPtr this pointer for callback - * @return TInt - */ - static TInt PlayDelayTimeExpired( TAny* aPtr ); - - -private: - - CUpnpAVControllerServer& iServer; - - RUpnpMediaServerClient& iMediaServer; // Not own - - CUPnPFileSharingActive* iFileSharing; // Own - - TInt iSessionId; - - TInt iInstanceId; - - TInt iIPSessionIdCommand; - - TInt iIPSessionIdSetting; - - TBool iEventingActive; - - RMessage2* iCommandMessage; // Own - - RMessage2* iSettingMessage; // Own - - RMessage2* iDeviceMessage; // Own - - CUpnpAVDeviceExtended* iDevice; - - HBufC8* iLocalMediaServerUuid; // Own - - CUpnpItem* iSharedItem; // Own - - TBool iItemShared; - - CUpnpItem* iNextSharedItem; // Own - - TBool iNextItemShared; - - RMessage2* iEventMessage; // Own - - TPlaybackState iPlaybackState; - - CUPnPXMLEventParser* iEventParser; - - RArray iEventQue; // Own - - TMuteState iMuteState; - - TInt iVolume; - - // iPlayDelayTimer is started when we set transporturi. - // The meaning of the timer is to delay the sending of play action in - // order to achieve better IOP with some HW renderers like Kiss DP1600. - CUPnPPeriodic* iPlayDelayTimer; // Own - - // iPlayRequested will be set to ETrue if the playdelay timer is running - // and somebody requests play action in the meantime - TBool iPlayRequested; - }; - -#endif // C_UPNPPLAYBACKSESSION_H +/* +* Copyright (c) 2006-2009 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: implements playback state machinery for media renderer +* +*/ + +#ifndef C_UPNPPLAYBACKSESSION_H +#define C_UPNPPLAYBACKSESSION_H + +// INCLUDE FILES +// System +#include + +// dlnasrv / avcontroller api +#include "upnpavcontroller.h" +#include "upnpavrenderingsessionobserver.h" +#include "upnpavtevent.h" + +// dlnasrv / avcontroller server internal +#include "upnpavtimer.h" +#include "upnpavcontrolpointobserver.h" + +// FORWARD DECLARATIONS +class CUpnpItem; +class CUpnpObject; +class CUpnpDevice; +class CUpnpAVRequest; +class CUpnpAVDeviceExtended; +class TUnsolicitedEventC; +class CUPnPXMLEventParser; +class CUpnpAVControllerServer; +class CUpnpAttribute; + +/** + * Implements the server side playback session. Provides functionality to + * Set URI, control playback and to get position info. + * + * @since S60 v3.1 + */ +class CUPnPPlaybackSession : public CBase, + private MUpnpAVControlPointObserver, + private MUPnPAVTimerCallback + { + +private: + + /** + * Defines current playback state. + */ + enum TPlaybackState + { + EUninitialized = -1, + ENoMedia, + EStopped, + EPlaying, + EPaused, + EHalted // Go to this state if rendering is interrupted by another CP + }; + + /** + * Defines the event we are expecting to get. + */ + enum TExpectedEvent + { + EEventNone = 0, + EEventStopped, + EEventAVTransportUri, + EEventPlaying, + EEventPaused + }; + + /** + * Defines current mute state. + */ + enum TMuteState + { + EUnknown = -1, + ENotMuted = 0, + EMuted = 1 + }; + +public: + + /** + * Static 1st phase constructor. + * + * @param aControlPoint AV Control Point reference + * @param aDispatcher observer callback disparcher reference + * @param aRepository device repository + * @param aSessionId session id + * @param aUuid device Uuid + * @return new instance + */ + static CUPnPPlaybackSession* NewL + ( + CUpnpAVControllerServer& aServer, + TInt aSessionId, + const TDesC8& aUuid + ); + + /** + * Destructor + */ + virtual ~CUPnPPlaybackSession(); + +private: + + /** + * Private constructor. + * + * @param aControlPoint AV Control Point reference + * @param aDispatcher observer callback disparcher reference + * @param aRepository device repository + * @param aSessionId session id + * @param aUuid device Uuid + */ + CUPnPPlaybackSession + ( + CUpnpAVControllerServer& aServer, + TInt aSessionId + ); + + /** + * 2nd phase construct + * + * @param aUuid device Uuid + */ + void ConstructL( const TDesC8& aUuid ); + +private: // From MUpnpAVControlPointObserver + + void ActionResponseL(CUpnpAction* aAction ); + void StateUpdatedL(CUpnpService* aService); + void HttpResponseL(CUpnpHttpMessage* aMessage); + void DeviceDiscoveredL(CUpnpDevice* aDevice); + void DeviceDisappearedL(CUpnpDevice* aDevice); + +private: // network event handling + + /** + * Handles response for RenderingControl SetVolume command + */ + void RcSetVolumeResponse( + TInt aErr, + const TDesC8& aDesiredVolume ); + + /** + * Handles response for RenderingControl GetVolume command + */ + void RcVolumeResponse( + TInt aErr, + const TDesC8& aCurrentVolume); + + /** + * Handles response for RenderingControl SetMute command + */ + void RcSetMuteResponse( + TInt aErr, + const TDesC8& aDesiredMute ); + + /** + * Handles response for RenderingControl GetMute command + */ + void RcMuteResponse( + TInt aErr, + const TDesC8& aCurrentMute ); + + /** + * Handles response for AVTransport SetTransportURI command + */ + void AvtSetTransportUriResponse( + TInt aErr ); + + /** + * Handles response for AVTransport GetMediaInfo command + */ + void AvtGetMediaInfoResponse( + TInt aErr, + const TDesC8& aCurrentURI ); + + /** + * Handles response for AVTransport GetTransportInfo command + */ + void AvtGetTransportInfoResponse( + TInt aErr, + const TDesC8& aCurrenTransportState ); + + /** + * Handles response for AVTransport GetPositionInfo command + */ + void AvtPositionInfoResponse( + TInt aErr, + const TDesC8& aTrackDuration, + const TDesC8& aRelTime ); + + /** + * Handles response for AVTransport Stop command + */ + void AvtStopResponse( + TInt aErr ); + + /** + * Handles response for AVTransport Play command + */ + void AvtPlayResponse( + TInt aErr ); + + /** + * Handles response for AVTransport Pause command + */ + void AvtPauseResponse( + TInt aErr ); + + /** + * Handles response for AVTransport Seek command + */ + void AvtSeekResponse( + TInt aErr ); + + /** + * Handles response for ConnectionManager Prepare command + */ + void CmPrepareResponse( + TInt aErr, + TInt aConnection, + TInt aTransport, + TInt aRsc ); + + /** + * Processes a state change in RenderingControl + */ + void RcLastChangeEvent( + const TDesC8& aLastChange ); + + /** + * Processes a state change in AVTransport + */ + void AvtLastChangeEvent( + const TDesC8& aLastChange ); + + +private: // From MUPnPAVTimerCallback + + // see upnpavtimer.h + void UPnPAVTimerCallback( CUPnPAVTimer::TAVTimerType aType ); + + +public: // New functions + + /** + * Device disappeared callback + * + * @param aDevice disappeared device + */ + void DeviceDisappearedL( CUpnpAVDeviceExtended& aDevice ); + + /** + * Sets Uuid of the local Media Server + * + * @param aUuid device Uuid + */ + void SetLocalMSUuidL( const TDesC8& aUuid ); + + /** + * Returns session id + * + * @return session id + */ + TInt SessionId() const; + + /** + * See upnpavcontrollerimpl.h + */ + void EventRequestL( const RMessage2& aMessage ); + + /** + * See upnpavcontrollerimpl.h + */ + void CancelEventRequestL(); + + /** + * See upnpavcontrollerimpl.h + */ + void SetURIL( const RMessage2& aMessage ); + + /** + * See upnpavcontrollerimpl.h + */ + void CancelSetURIL(); + + /** + * See upnpavcontrollerimpl.h + */ + void SetNextURIL( const RMessage2& aMessage ); + + /** + * See upnpavcontrollerimpl.h + */ + void CancelSetNextURIL(); + + /** + * See upnpavcontrollerimpl.h + */ + void PlayL( const RMessage2& aMessage ); + + /** + * See upnpavcontrollerimpl.h + */ + void CancelPlayL(); + + /** + * See upnpavcontrollerimpl.h + */ + void StopL( const RMessage2& aMessage ); + + /** + * See upnpavcontrollerimpl.h + */ + void CancelStopL(); + + /** + * See upnpavcontrollerimpl.h + */ + void PauseL( const RMessage2& aMessage ); + + /** + * See upnpavcontrollerimpl.h + */ + void CancelPauseL(); + + /** + * See upnpavcontrollerimpl.h + */ + void SetVolumeL( const RMessage2& aMessage ); + + /** + * See upnpavcontrollerimpl.h + */ + void CancelSetVolumeL(); + + /** + * See upnpavcontrollerimpl.h + */ + void GetVolumeL( const RMessage2& aMessage ); + + /** + * See upnpavcontrollerimpl.h + */ + void CancelGetVolumeL(); + + /** + * See upnpavcontrollerimpl.h + */ + void SetMuteL( const RMessage2& aMessage ); + + /** + * See upnpavcontrollerimpl.h + */ + void CancelSetMuteL(); + + /** + * See upnpavcontrollerimpl.h + */ + void GetMuteL( const RMessage2& aMessage ); + + /** + * See upnpavcontrollerimpl.h + */ + void CancelGetMuteL(); + + /** + * See upnpavcontrollerimpl.h + */ + void GetPositionInfoL( const RMessage2& aMessage ); + + /** + * See upnpavcontrollerimpl.h + */ + void CancelGetPositionInfoL(); + + /** + * See upnpavcontrollerimpl.h + */ + void SeekRelTimeL( const RMessage2& aMessage ); + + /** + * See upnpavcontrollerimpl.h + */ + void CancelSeekRelTimeL(); + + /** + * See upnpavcontrollerimpl.h + */ + void GetRendererStateL( const RMessage2& aMessage ); + + /** + * See upnpavcontrollerimpl.h + */ + void DeviceDisappearedRequestL( const RMessage2& aMessage ); + + /** + * See upnpavcontrollerimpl.h + */ + void CancelDeviceDisappearedRequestL(); + + /** + * Returns device Uuid + */ + const TDesC8& Uuid() const; + +private: + + /** + * Encodes given xml-document + * + * @param aResult xml-document + * @return encoded xml-document + */ + HBufC8* EncodeXmlL( const TDesC8& aResult ); + + /** + * Reset function + */ + void ResetL(); + + /** + * Reads object from a message + * + * @param aMessage message from client + * @param aSlot message slot numer + * @param aObj object pointer + */ + void ReadObjFromMessageL( const RMessage2& aMessage, TInt aSlot, + CUpnpObject* aObj ); + + /** + * Reads request from a message + * + * @param aMessage message from client + * @param aSlot message slot numer + * @param aReq request pointer + */ + void ReadReqFromMessageL( const RMessage2& aMessage, TInt aSlot, + CUpnpAVRequest* aReq ); + + /** + * Validates protocolinfo. + * + * @param aProtocolInfo + */ + void ValidateProtocolInfoL( const CUpnpAttribute& aProtocolInfo ); + + /** + * Checks if we have a valid connection with Media Renderer + * + * @param aProtocolInfo items protocolinfo + * @return ETrue if we have a valid connection + */ + TBool CheckConnectionL( const TDesC8& aProtocolInfo ); + + /** + * Sends AVTransportUri-action + */ + void SendAVTransportUriActionL(); + + /** + * removes DNLA.ORG* flags profile id etc. from protocol info of + * res element + */ + void RemoveDlnaFlagsFromResElementsL(); + + /** + * removes dlna profile id (DLNA.ORG_PN=*) from protocol info of + * res element + */ + void RemoveDlnaProfileFromResElementsL(); + + /** + * Sends GetMediaInfo-action + */ + void SendGetMediaInfoActionL(); + + /** + * Sends GetAVTransportUri-action + */ + void SendGetTransportInfoActionL(); + + /** + * Handles "PLAYING" event + */ + void PlayingEventReceived(); + + /** + * Handles "STOPPED" event + */ + void StoppedEventReceived(); + + /** + * Handles "PAUSED" event + */ + void PausedEventReceived(); + + /** + * Handles "NO_MEDIA_PRESENT" event + */ + void NoMediaEventReceived(); + + /** + * Handles AVTransportUri event + */ + void AVTransportUriEventReceived( const TDesC8& aUri, + CUPnPAVTEvent::TTransportState aTransportState ); + + /** + * Propagates an event to the client (complete or queu). + */ + void PropagateEvent( TUnsolicitedEventC event ); + + /** + * Stops possible playback. + */ + void EmergencyStopL(); + + /** + * Returns CUpnpDevice from control point. + */ + const CUpnpDevice* CpDeviceL(); + + /** + * Propagates (transition) state to clients. + */ + void PropagateState( CUPnPAVTEvent::TTransportState aTransportState ); + + /** + * Responds to requested stop command. + */ + void RespondToStopRequest(); + +private: + + CUpnpAVControllerServer& iServer; + + TInt iSessionId; + + TInt iAVTInstanceId; + + TInt iRCInstanceId; + + TInt iConnectionId; + + TInt iIPSessionIdCommand; + + TInt iIPSessionIdSetting; + + TBool iEventingActive; + + RMessage2* iCommandMessage; // Own + + RMessage2* iSettingMessage; // Own + + RMessage2* iDeviceMessage; // Own + + CUpnpAVDeviceExtended* iDevice; + + HBufC8* iLocalMediaServerUuid; // Own + + RMessage2* iEventMessage; // Own + + RMessage2* iInitialEventMsg; // Own + + TPlaybackState iPlaybackState; + + CUPnPXMLEventParser* iEventParser; + + RArray iEventQue; // Own + + TMuteState iMuteState; + + TInt iVolume; + + /** + * Protocol info for currently played item. + * Own. + */ + CUpnpDlnaProtocolInfo* iPInfoForPrevious; + + /** + * Uri for currently played item. + * Own. + */ + HBufC8* iCurrentUri; + + TBool iCheckForHijackedRenderer; + + /** + * Currently played item. + * Own. + */ + CUpnpItem* iCurrentItem; + + /** + * Fail safe timer. + * Own. + */ + CUPnPAVTimer* iTimer; + + TExpectedEvent iExpectedEvent; + + TBool iInitialEventReceived; + + HBufC8* iUuid; + + CUPnPAVTEvent::TTransportState iPreviousTransportState; + + }; + +#endif // C_UPNPPLAYBACKSESSION_H