upnpavcontroller/upnpavcontrollerserver/inc/upnpavcontrollerimpl.h
changeset 0 7f85d04be362
child 38 5360b7ddc251
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpavcontroller/upnpavcontrollerserver/inc/upnpavcontrollerimpl.h	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,547 @@
+/*
+* 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:      AV Controller Implementation
+*
+*/
+
+
+
+
+
+
+
+#ifndef C_UPNPAVCONTROLLERIMPL_H
+#define C_UPNPAVCONTROLLERIMPL_H
+
+// INDLUDE FILES
+#include <e32base.h>
+#include <upnpavcontrolpointobserver.h>
+#include <upnpmediaserverclient.h>
+#include "upnpavcontrollerglobals.h"
+#include "upnpconnectionmonitorobserver.h"
+
+// FORWARD DECLARATIONS
+class MUPnPAVDeviceObserver;
+class MUPnPAVMediaObserver;
+class MUPnPAVFileObserver;
+class CUPnPPlaybackSession;
+class CUpnpAVControllerServer;
+class CUpnpAVDevice;
+class CUpnpHttpMessage;
+class CUpnpDevice;
+class CUpnpAVDeviceExtended;
+class CUPnPBrowsingSession;
+class CUpnpDeviceDiscoveryMessage;
+
+class CUPnPUploadSession;
+class CUPnPDownloadSession;
+
+/**
+ *  AV Controller server side implementation. Impmements the base session. 
+ *  Rendering and browsing sessions are created from this session.
+ *  Handles device discovery and fetching of device listst.
+ *
+ *  @lib upnpavcontrollerclient.lib
+ *  @since S60 v3.1
+ */
+class CUPnPAVControllerImpl :   public CBase,
+                                public MUPnPConnectionMonitorObserver
+                                
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param aControlPoint control point reference
+     * @param aClient media server client reference
+     * @param aDispatcher callback dispatcher reference
+     * @param aServer server class reference
+     */
+    static CUPnPAVControllerImpl* NewL
+        (
+        RUpnpMediaServerClient& aClient,
+        CUpnpAVControllerServer& aServer
+        );
+    
+    /**
+     * Destructor
+     */
+    virtual ~CUPnPAVControllerImpl();
+    
+private:
+
+    /**
+     * Private constructor
+     *
+     * @param aControlPoint control point reference
+     * @param aClient media server client reference
+     * @param aDispatcher callback dispatcher reference
+     * @param aServer server class reference          
+     */
+    CUPnPAVControllerImpl
+    (
+    RUpnpMediaServerClient& aClient,
+    CUpnpAVControllerServer& aServer
+    );    
+    
+    /**
+     * Destructor
+     */
+    void ConstructL();    
+
+public: // From MUPnPConnectionMonitorObserver
+    
+    /**
+     * See upnpconnectionmonitorobserver.h
+     */
+    void ConnectionLost();
+    
+public: // New functions
+
+    /**
+     * Handles UPnP device discoveries.
+     * @since Series 60 2.6
+     * @param aDevice Device that is discovered.
+     */
+    void DeviceDiscoveredL( CUpnpAVDeviceExtended& aDevice );
+
+    /**
+     * Handles UPnP device disappears.
+     * @since Series 60 2.6
+     * @param aDevice Device that disappeared.
+     */
+    void DeviceDisappearedL( CUpnpAVDeviceExtended& aDevice );
+    
+
+    /**
+     * Enables device discovery by storing a message to server side, which
+     * is completed when a device has been discovered.
+     *
+     * @param aMessage message
+     */
+    void EnableDeviceDiscoveryL( const RMessage2& aMessage );
+        
+    /**
+     * Disables (cancels) device discovery (and message).
+     */
+    void DisableDeviceDiscoveryL();
+    
+    /**
+     * Returns a discovered/disappeared device to client side.
+     *
+     * @param aMessage message
+     */
+    void GetDeviceL( const RMessage2& aMessage );
+    
+    /**
+     * Returns the size of device list to client side.
+     *
+     * @param aMessage message
+     */
+    void GetDeviceListSizeL( const RMessage2& aMessage );
+    
+    /**
+     * Returns the device list to client side.
+     *
+     * @param aMessage message
+     */
+    void GetDeviceListL( const RMessage2& aMessage );
+    
+    /**
+     * Creates a rendering session.
+     *
+     * @param aMessage message
+     */
+    void CreateRenderingSessionL( const RMessage2& aMessage );
+    
+    /**
+     * Destroys a rendering session
+     *
+     * @param aMessage message
+     */
+    void DestroyRenderingSessionL( const RMessage2& aMessage );
+    
+    /**
+     * Enables (unsolicited) eventing from a remote device. Stores
+     * the message in to redering session to return an event.
+     *
+     * @param aMessage message
+     */
+    void EventRequestL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels eventing message.
+     *
+     * @param aMessage message
+     */
+    void CancelEventRequestL( const RMessage2& aMessage );
+    
+    /**
+     * Sets URI
+     *
+     * @param aMessage message
+     */
+    void SetURIL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels SetURI (basically just ignores the result)
+     *
+     * @param aMessage message
+     */
+    void CancelSetURIL( const RMessage2& aMessage );
+    
+    /**
+     * Sets Next URI
+     *
+     * @param aMessage message
+     */
+    void SetNextURIL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels SetNextURI (basically just ignores the result)
+     *
+     * @param aMessage message
+     */
+    void CancelSetNextURIL( const RMessage2& aMessage );
+    
+    /**
+     * Send the play-action
+     *
+     * @param aMessage message
+     */
+    void PlayL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels the play-action (basically just ignores the result)
+     *
+     * @param aMessage message
+     */
+    void CancelPlayL( const RMessage2& aMessage );
+
+    /**
+     * Send the stop-action
+     *
+     * @param aMessage message
+     */
+    void StopL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels stop (basically just ignores the result)
+     *
+     * @param aMessage message
+     */
+    void CancelStopL( const RMessage2& aMessage );
+
+    /**
+     * Send the pause-action
+     *
+     * @param aMessage message
+     */
+    void PauseL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels pause (basically just ignores the result)
+     *
+     * @param aMessage message
+     */
+    void CancelPauseL( const RMessage2& aMessage );
+
+    /**
+     * Send the setvolume-action
+     *
+     * @param aMessage message
+     */
+    void SetVolumeL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels setvolume (basically just ignores the result)
+     *
+     * @param aMessage message
+     */
+    void CancelSetVolumeL( const RMessage2& aMessage );
+    
+    /**
+     * Send the getvolume-action
+     *
+     * @param aMessage message
+     */
+    void GetVolumeL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels getvolume (basically just ignores the result)
+     *
+     * @param aMessage message
+     */
+    void CancelGetVolumeL( const RMessage2& aMessage );
+    
+    /**
+     * Send the setmute-action
+     *
+     * @param aMessage message
+     */
+    void SetMuteL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels setmute (basically just ignores the result)
+     *
+     * @param aMessage message
+     */
+    void CancelSetMuteL( const RMessage2& aMessage );
+    
+    /**
+     * Send the getmute-action
+     *
+     * @param aMessage message
+     */
+    void GetMuteL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels getmute (basically just ignores the result)
+     *
+     * @param aMessage message
+     */
+    void CancelGetMuteL( const RMessage2& aMessage );
+    
+    /**
+     * Send the getpositioninfo-action
+     *
+     * @param aMessage message
+     */
+    void GetPositionInfoL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels getpositioninfo (basically just ignores the result)
+     *
+     * @param aMessage message
+     */
+    void CancelGetPositionInfoL( const RMessage2& aMessage );
+    
+    /**
+     * Create a browsing session
+     *
+     * @param aMessage message
+     */
+    void CreateBrowsingSessionL( const RMessage2& aMessage );
+    
+    /**
+     * Destroy a browsing session
+     *
+     * @param aMessage message
+     */
+    void DestroyBrowsingSessionL( const RMessage2& aMessage );
+    
+    /**
+     * Get browse response (return the size of it to client side)
+     *
+     * @param aMessage message
+     */
+    void GetBrowseResponseSizeL( const RMessage2& aMessage );  
+
+    /**
+     * Cancel get browse response (ignore result)
+     *
+     * @param aMessage message
+     */
+    void CancelGetBrowseResponseSizeL( const RMessage2& aMessage );
+
+    /**
+     * Return browse response to client side
+     *
+     * @param aMessage message
+     */
+    void GetBrowseResponseL( const RMessage2& aMessage );
+
+    /**
+     * Get search response (return the size of it to client side)
+     *
+     * @param aMessage message
+     */
+    void GetSearchResponseSizeL( const RMessage2& aMessage );
+
+    /**
+     * Cancel search response (ignore result)
+     *
+     * @param aMessage message
+     */
+    void CancelGetSearchResponseSizeL( const RMessage2& aMessage );
+
+    /**
+     * Return search response to client side
+     *
+     * @param aMessage message
+     */
+    void GetSearchResponseL( const RMessage2& aMessage );
+    
+    /**
+     * Get search capabilities (return the size of it to client side)
+     *
+     * @param aMessage message
+     */
+    void GetSearchCapabitiesSizeL( const RMessage2& aMessage );
+    
+    /**
+     * Cancel get search capabilities (ignore result)
+     *
+     * @param aMessage message
+     */
+    void CancelGetSearchCapabitiesSizeL( const RMessage2& aMessage );
+    
+    /**
+     * Return search capabilities to client side
+     *
+     * @param aMessage message
+     */
+    void GetSearchCapabitiesL( const RMessage2& aMessage );
+
+    /**
+     * Create container action.
+     *
+     * @param aMessage message
+     */
+    void CreateContainerL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels create container.
+     *
+     * @param aMessage message
+     */
+    void CancelCreateContainerL( const RMessage2& aMessage );
+    
+    /**
+     * Delete object action
+     *
+     * @param aMessage message
+     */
+    void DeleteObjectL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels delete object
+     *
+     * @param aMessage message
+     */
+    void CancelDeleteObjectL( const RMessage2& aMessage );
+
+    /**
+     * Stores a message in to rendering or browsing session, which is
+     * completed when the session specific device has disappeared. As a
+     * result the client knows that the device is no longer available and
+     * the session has became absolete.
+     *
+     * @param aMessage message
+     */
+    void DeviceDisappearedRequestL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels the msg.
+     *
+     * @param aMessage message
+     */
+    void CancelDeviceDisappearedRequestL( const RMessage2& aMessage );
+    
+    /**
+     * Stores a message in to base session, which is completed when the
+     * WLAN is disconnected.
+     *
+     * @param aMessage message
+     */
+    void MonitorConnectionL( const RMessage2& aMessage );
+    
+    /**
+     * Cancels the msg.
+     *
+     * @param aMessage message
+     */
+    void CancelMonitorConnectionL( const RMessage2& aMessage );
+
+    void CreateDownloadSessionL( const RMessage2& aMessage );
+    
+    void DestroyDownloadSessionL( const RMessage2& aMessage );
+
+    void StartDownloadL( const RMessage2& aMessage );
+    
+    void StartDownloadFHL( const RMessage2& aMessage );
+    
+    void CancelDownloadL( const RMessage2& aMessage );
+
+    void CancelAllDownloadsL( const RMessage2& aMessage );
+    
+    void StartTrackingDownloadProgressL( const RMessage2& aMessage );
+
+    void StopTrackingDownloadProgressL( const RMessage2& aMessage );
+
+    void GetDownloadEventL( const RMessage2& aMessage );
+    
+    void CancelGetDownloadEventL( const RMessage2& aMessage );
+
+    void CreateUploadSessionL( const RMessage2& aMessage );
+    
+    void DestroyUploadSessionL( const RMessage2& aMessage );    
+
+    void StartUploadL( const RMessage2& aMessage );
+    
+    void CancelUploadL( const RMessage2& aMessage );
+
+    void CancelAllUploadsL( const RMessage2& aMessage );
+    
+    void StartTrackingUploadProgressL( const RMessage2& aMessage );
+
+    void StopTrackingUploadProgressL( const RMessage2& aMessage );
+
+    void GetUploadEventL( const RMessage2& aMessage );
+    
+    void CancelGetUploadEventL( const RMessage2& aMessage );
+
+private:
+
+    /**
+     * Device queu handling. Checks the queu and dequeus it if needed.
+     *
+     * @param aDevice av device
+     * @param aType discovered/disappeared
+     */
+    void DequeDeviceL( const CUpnpAVDevice& aDevice,
+        TAVControllerDeviceDiscovery aType );
+
+private:
+    
+    RUpnpMediaServerClient&     iMediaServer; // Not own       
+    
+    CUpnpAVControllerServer&    iServer; // Not own       
+    
+    RMessage2*                  iDeviceDiscoveryMsg; // Own
+    
+    TBool                       iDeviceDiscoveryEnabled;
+    
+    RMessage2*                  iConnectionMsg; // Own
+    
+    HBufC8*                     iDeviceRespBuf; // Own
+    
+    HBufC8*                     iDeviceListRespBuf; // Own
+    
+    RPointerArray<CUPnPPlaybackSession> iPlaybackSessions; // Own
+    
+    RPointerArray<CUPnPBrowsingSession> iBrowsingSessions; // Own
+    
+    RPointerArray<CUPnPUploadSession>   iUploadSessions; // Own
+    
+    RPointerArray<CUPnPDownloadSession> iDownloadSessions; // Own
+    
+    
+    TSglQue<CUpnpDeviceDiscoveryMessage>        iDeviceMsgQue; // Own
+    TSglQueIter<CUpnpDeviceDiscoveryMessage>    iDeviceMsgQueIter;
+    };
+
+#endif // C_UPNPAVCONTROLLERIMPL_H