Fixed AVController, it was accidentally set to search only for renderers. Now also servers are added to device list. Also some minor changes in package definition xml and platform API xml definition files.
/*
* 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 <e32base.h>
// 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<TUnsolicitedEventC> 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