diff -r 000000000000 -r 7f85d04be362 upnpmediaserver/mediaserverengine/inc/upnpmediaserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upnpmediaserver/mediaserverengine/inc/upnpmediaserver.h Thu Dec 17 08:52:00 2009 +0200 @@ -0,0 +1,437 @@ +/** @file +* Copyright (c) 2005-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: Media server device + * +*/ + + +#ifndef C_CUPNPMEDIASERVER_H +#define C_CUPNPMEDIASERVER_H + +// INCLUDES +#include +#include +#include "upnpmediaserver.pan" +#include "upnpmediaserversettings.h" +#include "upnpmediaservereventhandler.h" +#include "upnpnotifytimer.h" +#include "upnpsymbianserverbase.h" +#include "upnpmediaserverclient.h" + + +// CONSTANTS +_LIT(KMSPublicAccessedDir,"public"); +_LIT(KMSMediaDir,"Media"); +_LIT(KMSDeviceXmlDescDir,"MediaServer1"); +_LIT(KMSDeviceXmlDescFile,"MediaServer1.xml"); +_LIT(KCDXmlDescFile,"ContentDirectory1.xml"); +_LIT(KCMXmlDescFile,"ConnectionManager1.xml"); +_LIT(KIconDirectory, "icon"); +_LIT(KBackupSuffix,".bak"); +_LIT(KDescTemplateDrive,"Z:"); +// +const TUint KMSDescriptionMaxSize = 204800; + +//note that this value should be less than upnp server process shutdown timeout value +const TInt KStopAVMediaServerDelay = 1500000; + +// FORWARD DECLARATIONS +class CUpnpContentDirectoryService; +class CUpnpContainerList; +class CUpnpItem; +class CUpnpContainer; +class CUpnpCM; +class CUpnpSecurityManager; +class CUpnpDeviceImplementation; +class CUpnpIconManager; +class CUpnpDiskRemoveDetector; +class CUpnpDeviceDescriptionStore; + +class CUpnpConnectionManagerNetworkEventProvider; +class CUpnpMediaServerDescriptionProvider; + + + +// CLASS DECLARATION + +/** + * UPnP Media Server container. + * Provides interface for Media Server maintanace purposes. + * + * @since Series 60 3.1 + */ +class CUpnpMediaServer : public CUpnpSymbianServerBase, MUpnpSettingObserver, + MUpnpContentDirectoryEventObserver, MUpnpNetworkEventObserver + { +public: + // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CUpnpSymbianServerBase* NewLC(); + + /** + * Destructor. + */ + virtual ~CUpnpMediaServer(); + +public: + // New functions + void GetSharedItemListL( TInt aContId, + CUpnpBrowseCriteria* aBrowseCriteria, TInt* TotalMatches, + CUpnpItemList* aItemList ); + void GetSharedContainerListL( TInt aContId, + CUpnpBrowseCriteria* aBrowseCriteria, TInt* TotalMatches, + CUpnpContainerList* aContainerList ); + void UnshareItemListL( RArray& aItemList, TInt* aExecutionStatus ); + CUpnpItem* GetSharedItemL( TInt aItem ); + CUpnpContainer* GetSingleContainerL( TInt aContainerId ); + void UnshareRootL(); + void UnshareItemL( TInt aId ); + void UnshareContainerL( TInt aId ); + + /** + * Shares new item + */ + void ShareObjectL( CUpnpObject* aItem ); + + /** + * Shares new items + */ + void ShareItemListL( CUpnpItemList* aItemList, TInt* aStatus ); + + /** + * Creates a new reference + */ + void ShareReferenceL( CUpnpItem* aItem ); + + /** + * Shares new 'reference item' list + */ + void ShareReferenceListL( CUpnpItemList* aItemList, TInt* aStatus ); + + /** + * Starts AV Media Server - Device, Service, ContentDirecory, ConnectionManager + */ + void StartAVMediaServerL(); + + /** + * Starts AV Media Server in offline mode + */ + void StartAVMediaServerOfflineL(); + + /** + * Stops AV Media Server - Device, ContentDirecory, ConnectionManager + * Starts timeout timer + */ + void StopAVMediaServer( TBool aSilent ); + + /** + * Restarts AV Media Server - Device, ContentDirecory, ConnectionManager + */ + void RestartAVMediaServerL(); + + /** + * Check status of AV Media Server + */ + RUpnpMediaServerClient::TServerStatus Status() const; + + /** + * Sets description properties for device, changes are available after restarting + * the server. + * Values are read from Central Repository + * @param aDevice device to change + */ + void SetDescriptionSettingsL( CUpnpDeviceImplementation* aDevice ); + + /** + * Adds icon to public\MediaServer1\icon and adds icon element + * to device description xml + * @param aProperty device to change + */ + void AddIconL( const TDesC8& aProperty ); + + /** + * Updates icon in public\MediaServer1\icon and updates icon element + * in device description xml + * @param aProperty + * @param aUrl icon url + */ + void UpdateIconL( const TDesC8& aProperty, const TDesC8& aUrl ); + + /** + * Removes icon from public\MediaServer1\icon and removes icon element + * from device description xml + * @param aUrl icon url + */ + void RemoveIconL( const TDesC8& aUrl ); + + /** + * Removes all icons from public\MediaServer1\icon and removes icon elements + * from device description xml + */ + void RemoveIconsL(); + + /** + * Sets description property for device, changes are available after restarting + * the server. + * Value is read from Central Repository + * @param aDevice device to change + * @param aKey Central Repository property key + * @param aName property name (XML) + */ + void SetDescriptionPropertyL( CUpnpDeviceImplementation* aDevice, + TInt aKey, const TDesC8& aName ); + + /** + * Sets description required property for device, changes are available after restarting + * the server. + * Value is read from Central Repository + * @param aDevice device to change + * @param aKey Central Repository required property key + * @param aName property name (XML) + */ + void SetDescriptionRequiredPropertyL( CUpnpDeviceImplementation* aDevice, + TInt aKey, const TDesC8& aName ); + + /** + * Removes white characters from input descriptor + * @param aString to change + */ + void RemoveWhiteSpaces( TDes8& aString ); + + /** + * Initialize Media Server files in private directory. + * @param aOverwrite indicate whether files should be overwrite if exist + */ + void InitializeL( TBool aOverwrite ); + + /** + * Reset Content Directory DB + * It means that it rename original file adding suffix KBackupSuffix, + * s during next running Content Directory will create new DB file. + */ + void ResetDbL(); + + /** + * Delete Content Directory DB + * It means that it deletes database file + */ + void DeleteDbL(); + + /** + * Subscribe events, adds observer to the list + * @param aObserver event observer + */ + void SubscribeEvents( MUpnpContentDirectoryEventObserver* aObserver ); + + /** + * Unsubscribe events, removes observer from list + * @param aObserver event observer + */ + void UnsubscribeEvents( MUpnpContentDirectoryEventObserver* aObserver ); + + TInetAddr GetAddress(); + + /** + * Set the download and thumbnail path in CD according to the value of the upload directory. + * @param aContentDirectory + * @return full name of description file + */ + void SetUploadDirToCDL( const TDesC& aPath ); + + /** + * Cancels scheduled shutdown of MS + */ + void CancelAVMediaServerStop(); + + /** + * Set the upload and thumbnail path in CD and in central repository. + * @param aPath new path + */ + void SetUploadDirL( const TDesC& aPath ); + +public: + // From MUpnpContentDirectoryEventObserver + /** + * Called when transfer event happens + * @param aTransferEvent transfer event + */ + virtual void FileTransferEvent( CUpnpFileTransferEvent *aTransferEvent ); + + /** + * Checks if interface is up + * @result return ETrue if started in online mode + */ + TBool IsInterfaceUp(); + + // From MUpnpSettingObserver + /** + * Function notify when setting will change + */ + virtual void SettingChangedL(); + +private: + // New methods + + /** + * Constructor + */ + CUpnpMediaServer(); + + /** + * Perform the second phase construction of a CUpnpMessageHandler object + */ + void ConstructL(); + + /** + * Init Media Server directory structure in private directory. + * @param aFs handle to RFs + * @return a updateId of container + */ + void InitPrivateDirL( RFs &aFs ); + + /** + * Checks is description file exists. If not creates it from teplate stored on Z: + * If parameter aOverwrite + * @param aFs handle to RFs + * @param aTempleteDescFile xml description file name + * @param aOverwrite indicate whether file should be overwrite if exists + * @return full name of description file + */ + HBufC* InitDescFileL( RFs &aFs, const TDesC& aTempleteDescFile, + TBool aOverwrite ); + + /** + * Create full name using drive MS directory structure and file name. + * @param aFs handle to RFs + * @param aDrive drive + * @param aName file name + * @return full name of description file + */ + HBufC* CreateFullNameL( RFs &aFs, const TDesC& aDrive, + const TDesC& aName ); + +private: + /** + * Stops MS immediatly + */ + void StopAVMediaServerImmediately( TBool aSilent, TBool aWlanLost ); + +private://from CUpnpSymbianServerBase + + /** + * Create a time server session, and return a pointer to the created object + * @param aMessage client message + * @result pointer to new session + */ + CSession2* NewSessionL( const RMessage2& aMessage ) const; + + /** + * @return ETrue when media server is in state that it can be stopped + */ + TBool CanBeStopped() const; + + /** + * Returns version that is supported by this server. + */ + TVersion SupportedVersion() const; + + /** + * Returns server name + */ + const TDesC& ServerName() const; + + /** + * Change media server status + */ + void SetStatus( RUpnpMediaServerClient::TServerStatus aStatus ); + + /** + * Method should be invoked to notify all subscribed clients about + * media server change. It is invoked if after RunL method status + * is changed, and in every case that server change its status + * without user request (eq. wlan lost) + */ + void NotifyStatusChanged(); + +private: // from MUpnpNetworkEventObserver + + /** + * It is called from bottom layer when network event occurs [callback method] + * @result None + */ + void NetworkEvent( CUpnpNetworkEventBase* aEvent ); + +private: // from CUpnpSymbianServerBase + virtual void RunL(); + +private: + /** + * Callback if timer expires + */ + void TimerEventL( CUpnpNotifyTimer* aTimer ); + +private: + + /*! @var iDevice Media Server Device */ + CUpnpDeviceImplementation* iDevice; + /*! @var iContentDirecory Content Directory */ + CUpnpContentDirectoryService* iContentDirecory; + /*! @var iCm Connection Manager */ + CUpnpCM* iCm; + /*! @var iIconManager Icon Manager */ + CUpnpIconManager* iIconManager; + + /*! @var iMsName Media Server Device description file full name */ + HBufC* iMsName; + /*! @var iCdName Content Directory Service description file full name */ + HBufC* iCdName; + /*! @var iCmName Connection Manager Service description file full name */ + HBufC* iCmName; + + /*! @var iMsStatus Media Server operational status - started/started offline/stopped */ + RUpnpMediaServerClient::TServerStatus iMsStatus; + + /*! @var interface for reading and setting Media Server settings */ + CUpnpMediaServerSettings* iSettings; + + /*! @var security manager pointer */ + CUpnpSecurityManager* iManager; + + /*! @var list of event observers (subscribed sessions) */ + RPointerArray iObserverList; + + // memory card remove watcher + CUpnpDiskRemoveDetector* iDiskDetector; + + // flag that stores shut down type + TBool iIsSilentShutdown; + + //please note that it only stops media server as UPnP entity (sends bye bye etc.) + //not symbian server object + CUpnpNotifyTimer* iStopAVMediaServerTimer; + + // Network events provider used for WLAN lost and address change + CUpnpConnectionManagerNetworkEventProvider* iConnectionManagerNetworkEventProvider; + + // Provides files for description part + CUpnpMediaServerDescriptionProvider* iDescriptionProvider; + + // Services device description + CUpnpDeviceDescriptionStore* iDescriptionStore; + }; + +#endif // C_CUPNPMEDIASERVER_H