--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpmediaserver/contentdirectoryservice/inc/upnpcontentdirectory.h Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,922 @@
+/** @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: Declares ContentDirectory class.
+*
+*/
+
+
+#ifndef C_CUPNPCONTENTDIRECTORY_H
+#define C_CUPNPCONTENTDIRECTORY_H
+
+
+// INCLUDES
+#include "upnpserviceimplementation.h"
+#include "upnpelementfactory.h"
+
+// new xml
+#include <xmlengdom.h>
+
+#include "upnpfiletransfer.h"
+#include "upnpcontentdirectorydatafinder.h"
+#include "upnpthumbnailcreator.h"
+#include "upnpcdsettings.h"
+#include "upnptransferobserver.h"
+#include "upnphttpservertransactioncreator.h"
+#include "upnphttpserverobserver.h"
+
+// FORWARD DECLARATIONS
+
+class CUpnpElementFactory;
+class TUpnpContainerUpdateId;
+class CUpnpFileTransferTimerObserver;
+class CUpnpObject;
+class CUpnpItem;
+class CUpnpContentDirectoryDb;
+class CProtocolInfo;
+class CUpnpMetadataStorage;
+class CUpnpAutoDestroyObjectList;
+class MUpnpContentDirectoryEventObserver;
+class CUpnpFileTransferEvent;
+class MUpnpCdsSender;
+class CUpnpStateHandler;
+class CUpnpTransferUploader;
+class CUpnpMimeMapper;
+class CUpnpTransferController;
+class MUpnpTransferInterface;
+class CUpnpDlnaFilter;
+class CUpnpHttpServerSession;
+class CUpnpSecurityManager;
+
+// CONSTANTS
+static const TInt KMaxImportExportTransfers = 3;
+_LIT8( KContentDirectoryType, "ContentDirectory:1" );
+
+// CLASS DECLARATION
+
+/**
+* @brief Main Content Directory Service Class
+*
+* @lib ServiceFramework.lib
+* @since Series60 2.6
+*/
+class CUpnpContentDirectory :
+ public CUpnpServiceImplementation,
+ public MUpnpContentDirectoryDataFinder,
+ public MUpnpThumbnailCreatorObserver,
+ public MUpnpTransferObserver,
+ public MUpnpHttpServerTransactionCreator,
+ public MUpnpHttpServerObserver
+{
+public: // Constructors and destructors
+
+ /**
+ * Two-phased constructor for creating Content Directory Service (CDS).
+ * @since Series60 2.6
+ * @param aService Parent service
+ */
+ static CUpnpContentDirectory* NewL( TUpnpCdSettings aSettings,
+ CUpnpMetadataStorage* aMetadataStorage,
+ MUpnpTransferInterface* aTransfer );
+
+ /**
+ * Destructor function; called automatically from the destructor of a
+ * derived class
+ **/
+ virtual ~CUpnpContentDirectory();
+ IMPORT_C void SetSender(MUpnpCdsSender* aSender);
+
+
+public: //from CUpnpServiceImplementation
+
+ CUpnpStateHandler* CUpnpContentDirectory::StateHandler();
+ /**
+ * Handles auto destroy events.
+ * @since Series 60 2.6
+ * @param aObjIdn id of evented upnp object
+ */
+ void AutoDestroyEventL(TInt aObjId, TBool aDeleteObj);
+
+ /**
+ * This functions is a entry point for actions. See coments in base class
+ * @since Series 60 2.6
+ * @param aAction Action received by CDS.
+ */
+ void ActionReceivedLD( CUpnpAction* aAction );
+
+ /**
+ * Hnadle unknown http event
+ * Export for interneal use only
+ */
+ IMPORT_C void UnknownHttpEventReceivedL( CUpnpHttpMessage& aHttpMsg );
+
+ /**
+ * Handles address change event
+ */
+ void AddressChangeL();
+
+ /**
+ * This function is for informing service from evented statevariables.
+ * @since Series 60 2.6
+ * @param aVariableName Name of the evented statevariable.
+ */
+ void StateVariableEvented(const TDesC8& aVariableName);
+
+ /**
+ * Checks if specified importUri is in database still active.
+ * @param aImportUri uri to be searched in databse.
+ * @return objId if successful
+ */
+ TInt CheckImportUriL(const TDesC8& aImportUri);
+
+ /**
+ * Inserts Ip and Port
+ * @since Series S60 3.1
+ * @param aString
+ */
+ void InsertRealIpAndPortL(TDes8& aString);
+
+ /**
+ *
+ * @since Series S60 3.1
+ * @param aString
+ * @return descriptor pointer
+ */
+ HBufC8* InsertIpAndPortPlaceholderL(const TDesC8& aString);
+
+ /**
+ * Find protocolInfo by importUri (Not by importUri).
+ * @param aImportUri uri to be searched in database (Value of resource).
+ * @return aProtocolInfo related to resorce which has been founded
+ */
+ CUpnpDlnaProtocolInfo* GetProtocolInfoByImportUriL(const TDesC8& aImportUri);
+
+ /**
+ * Gets infomation about protocol
+ * @since Series S60 3.1
+ * @param aContentUri
+ * @parma aProtocolInfo
+ * @return
+ */
+ TInt GetProtocolInfoL(const TDesC8& aContentUri, CUpnpDlnaProtocolInfo*& aProtocolInfo);
+
+ /**
+ * Gets title of the object with given id from ContentDirectory service.
+ * @since Series60 2.6
+ * @param aObjectId id of the object.
+ * @param aValue pointer to buffer in which the tilte of the object will be returned.
+ * Buffer for aValue has to allocated first.
+ **/
+ void GetTitleForUriL( TInt aObjectId, TPtr& aValue );
+
+ /**
+ *
+ * @since Series S60 3.1
+ * @param aUrlPath
+ * @param aFileName
+ * @param aSystemPath
+ */
+ TInt FindSharedFolderL( const TDesC& aUrlPath, const TDesC& aFileName, HBufC*& aSystemPath);
+
+ /**
+ *
+ * @since Series S60 3.1
+ * @return TPtrC
+ */
+ const TPtrC MediaRealDir();
+
+
+ /**
+ * Sets download directory
+ * @since Series S60 3.1
+ * @param aDownloadDir this directory is going to be set as download directory
+ * @return TInt
+ */
+ void SetDownloadDirectoryL(const TDesC& aDownloadDir);
+
+ /**
+ * Sets thumbnail directory
+ * @since Series S60 3.1
+ * @param aDownloadDir this directory is going to be set as thumbnail directory
+ * @return TInt
+ */
+ void SetThumbnailDirectoryL(const TDesC& aDownloadDir);
+
+ TInetAddr GetAddress();
+ IMPORT_C void SendActionL(CUpnpAction* aAction, TUpnpErrorCode aError);
+ IMPORT_C void SendMessageL( CUpnpHttpMessage* aMessage );
+ CUpnpAutoDestroyObjectList* GetAutoDestroyObjectList();
+
+ // For internal use only
+ IMPORT_C void HttpTransferEventReceivedL(CUpnpHttpMessage& aHttpMsg);
+
+ /**
+ * Sends transfer failed event to Media Server
+ * @param aSessionId transaction identifier
+ * @param aStatusCode HTTP Status code
+ */
+ void NotifyTransferFailL(TInt aSessionId, TInt aStatusCode);
+
+ /**
+ * Sends transfer stopped event to Media Server
+ * @param aSessionId transaction identifier
+ * @param aType import/export
+ */
+ void NotifyTransferStoppedL( TInt aSessionId, CUpnpFileTransfer::TTransferType aType);
+
+ // new functions for httptransfer.dll intergration
+ void HttpGetStartedSoapNotifyL(TInt aSessionId);
+ void HttpPostStartedL(TInt aSessionId);
+
+
+ // helper functions
+ TCurrentAction ExecutedAction();
+ void SetExecutedAction(TCurrentAction aAction);
+
+
+ /**
+ * This function is a entry point for http messages.
+ * received from Symbian HTTP Stack
+ * @since Series 60 3.2
+ * @param aSessionId identifier of the HTTP request.
+ * @param aHttpStatusCode HTTP error code.
+ */
+ void HttpResponseReceivedL( TInt aSessionId,
+ TInt aStatusCode);
+
+ /**
+ * Getter
+ * @since Series 60 3.2
+ * @return Event Observer
+ */
+ MUpnpContentDirectoryEventObserver* EventObserver();
+
+public://temporary public methods
+
+ void TransferCompleteL(TInt aResId, TInt aObjId);
+
+ void TransferProgress( TInt aId, TInt aBytes, TInt aTotalBytes );
+
+ void TransferStartL(const TDesC8& aImpUri);
+
+ /**
+ * This fuction removes a TransferID from the TransferIDs Statevariable
+ * @since Series 60 2.6
+ * @param aTransferID a id of file transfer
+ **/
+ void RemoveFileTransferFromTransferIDsStateVariableL(TInt aTransferID);
+
+ /**
+ * This fuction adds a TransferID to the TransferIDs Statevariable
+ * @since Series 60 2.6
+ * @param aTransferID a id of file transfer
+ **/
+ void AddFileTransferToTransferIDsStateVariableL( TInt aTransferID );
+
+ /**
+ *
+ * @since Series S60 3.1
+ * @param aFileName
+ * @return boolean whether given file is drmfile
+ */
+ TBool IsDrmFileL(const TDesC& aFileName);
+
+ /**
+ *
+ * @since Series S60 3.1
+ * @param aFileName
+ * @return boolean whether given file is drmfile
+ */
+ TBool IsDrmFileL(const TDesC8& aFileName);
+
+
+ /**
+ * This functions is used for generating correct res tags for finished downloads.
+ * @param aOnlyThumbnail this method is used during two action - ImportResource and CreateObject.
+ * In CreateObject case res can be created by passed argument so we only thumbail has to be created
+ * @since Series 60 2.6
+ * @return error code. KErrNone if no errors.
+ **/
+ TInt CreateResTagL( TInt aSessionId,
+ TDesC8& aFilePath,
+ TInt aImportNumber,
+ TBool aOnlyThumbnail = EFalse );
+
+
+ /**
+ * Notify transfer
+ * @param aSessionId HTTP transaction identifier
+ */
+ void NotifyOutgoingTransferL (TInt aSessionId);
+
+
+ CUpnpContentDirectoryDb* ContentDirectoryDb();
+
+ MUpnpTransferInterface* TransferHandler();
+
+public: //from MUpnpTransferObserver
+
+ virtual void TransferCompletedL( TInt akey, TInt aResultCode );
+
+public: //from MUpnpHttpServerTransactionCreator
+
+ IMPORT_C virtual void NewTransactionL(
+ const TDesC8& aMethod, const TDesC8& aUri,
+ const TInetAddr& aSender, CUpnpHttpServerTransaction*& aResultTrans );
+
+private: //form MUpnpHttpServerObserver
+ virtual void HttpEventLD( CUpnpHttpMessage* aMessage );
+
+private://private methods
+
+
+ void PrepareAutoDestroyObjectL(TXmlEngElement aObject, TInt aObjId);
+
+ /**
+ * Gets ip and port number
+ * @since Series S60 3.1
+ * @return descriptor pointer
+ */
+ HBufC8* GetIpAndPortDes8L();
+
+ /**
+ * Sets size
+ * @since Series S60 3.1
+ * @parma aSize
+ * @parma aFilePath
+ */
+ void SetResSizeL(TXmlEngAttr aSize, const TDesC& aFilePath);
+
+ /**
+ * Adds Import URI to Element
+ * @since Series S60 3.1
+ * @param aElement
+ */
+ void AddImportUriToElL(TXmlEngElement aElement);
+
+ /**
+ *
+ * @since Series S60 3.1
+ * @return descriptor pointer
+ */
+ HBufC8* BuildImportUriLC();
+ HBufC8* BuildImportUriShorterLC();
+
+ /**
+ * Checking whether thumbnail is available
+ * @since Series S60 3.1
+ * @param aFile
+ * @return
+ **/
+ TBool IsThumbnailAvailableL(const TDesC& aFile);
+
+ /**
+ * Checking whether thumbnail is available
+ * @since Series S60 3.1
+ * @param aFile
+ * @return
+ */
+ TBool IsThumbnailAvailableL(const TDesC8& aFile);
+
+ /**
+ * Creates thumbnail
+ * @since Series S60 3.1
+ * @param a SrcFile
+ * @param aObjId
+ */
+ void CreateThumbnailL(const TDesC& aSrcFile, TInt aObjId);
+
+ /**
+ * Adds new res tag
+ * @since Series S60 3.1
+ * @param aObjEl
+ */
+ void AddNewResTagL(TXmlEngElement aObjEl);
+
+ /**
+ * Creates a name for thumbnail
+ * @since Series S60 3.1
+ * @param aFileName
+ * @return descriptor pointer
+ */
+ HBufC* CreateNameForThumbnailL(const TDesC& aFileName);
+
+ /**
+ *
+ * @since Series S60 3.1
+ * @param aRes
+ */
+ void HandleLocalResourcesL(TXmlEngElement aRes, TInt aObjectId);
+
+ /**
+ *
+ * @since Series S60 3.1
+ * @parma aFileName
+ * @return descriptor pointer
+ */
+ HBufC8* BuildContentUriL(const TDesC& aFileExt, TInt aObjectId);
+
+ /**
+ *
+ * @since Series S60 3.1
+ * @param aAction
+ * @param aSenAndDestroy
+ * @return
+ */
+ TInt DoActionReceivedL( CUpnpAction* aAction );
+
+ /**
+ *
+ * since Series S60 3.1
+ * @param aObjs
+ * return descriptor pointer
+ */
+ HBufC8* SerializeObjectsListL(const RArray<RXmlEngDocument>& aObjs);
+
+ /**
+ *
+ * @since Series S60 3.1
+ * @param aObj
+ * @param aImportUri
+ * @param ANewFile
+ */
+ void DeleteOldResourcesL( RXmlEngDocument& aObj, const TDesC8& aImportUri,
+ const TDesC& aNewFile );
+
+ /**
+ *
+ * @since Series S60 3.1
+ * @parma aMessage
+ * return descriptor pointer
+ */
+ HBufC8* GetImportUriLC(CUpnpHttpMessage* aMessage);
+
+ /**
+ *
+ * @since Series S60 3.1
+ * @param aFileName
+ * @param aNextKey
+ * @return descriptor pointer
+ */
+ HBufC* BuildThumbnailUrlPathL(const TDesC& aFilename, const TDesC& aNextKey);
+
+ /**
+ * This function gets mime type for specified file.
+ * @since Series 60 3.1
+ * @param aFilename - filename, for which mimeType will be taken.
+ * @return pointer to variable storing mimeType.
+ */
+ HBufC8* GetMimeTypeLC(const TDesC8& aFilename);
+
+ /**
+ * Removes thumbnail creator and corresponding objectId from lists.
+ * @since Series 60 3.1
+ * @param aThCreator - thumbnail creator for which the information will be deleted.
+ */
+ void RemoveThCreatorAndObjectIdLD( CUpnpThumbnailCreator* aThCreator);
+
+ /**
+ * Gives object id for specified thumbnail creator.
+ * @since Series 60 3.1
+ * @param aThCreator - thumbnail creator for which object id will be searched for.
+ * @return object id for specified thumbnail creator.
+ */
+ TInt GetObjectIdFromThCreator( CUpnpThumbnailCreator* aThCreator);
+
+ /**
+ * Gives this server address in predefined format.
+ * @since Series 60 3.1
+ * @return pointer to address.
+ */
+ HBufC8* CreateAddressValueLC();
+
+ /**
+ * This function creates ProtocolInfo object for further use.
+ * @since Series 60 3.1
+ * @param aMimeType - mime type, for which ProtocolInfo will be created.
+ * @param aAddInfo - additional information which can be choosen according to mime type and image size.
+ * @return pointer to CProtocolInfo object, which describes all protocolInfo values for this element.
+ */
+ CUpnpDlnaProtocolInfo* CreateProtocolInfoFromMimeL(const TDesC8& aMimeType, TInt aAddInfo );
+
+ /**
+ * This function retrieves title from object description.
+ * @since Series 60 3.1
+ * @param aObjId - objecty id for which title will be retrieved.
+ * @return pointer to HBufC, with specified value.
+ */
+ HBufC* GetFileNameL( TInt aObjId );
+ HBufC* GetFileNameWithoutPathL( TInt aObjId );
+
+ /**
+ * This function add underscore and number to existing filename.
+ * @since Series 60 3.2
+ * @param aFileName - file that probably exist.
+ * @return pointer to HBufC, with specified value.
+ */
+ HBufC* CreateFileNameL( const TDesC16& aFileName );
+
+ /**
+ * This function puts on stack upnp:class value for specific mime type.
+ * @since Series 60 3.1
+ * @param aMimeType - mime type from which additional information will be retrieved.
+ * @return pointer to HBufC8 object with new value, if the type is unknown there is null returned.
+ * Mapping:
+ * image/* - object.item.imageItem
+ * video/* - object.item.videoItem
+ * audio/* - object.item.audioItem
+ * text/* - object.item.textItem
+ */
+ HBufC8* GetItemTypeFromMimeTypeLC(const TDesC8& aMimeType);
+
+ /**
+ * This function compares upnp:class tag value, with value denoted by aMimeType.
+ * @since Series 60 3.1
+ * @param obj - object for which needed changes will be applied.
+ * @param aMimeType - mime type from which additional information will be retrieved.
+ */
+ void CheckItemTypeForObjectL( RXmlEngDocument& obj, const TDesC8& aMimeType );
+
+
+ /**
+ * This function returns a XML fragment containing the XML in the parameter
+ * @since Series 60 2.6
+ * @param aBuffer the XML is in this buffer
+ * @return A new CSenDomFragment that is on the cleanup stack
+ */
+ RXmlEngDocument XmlFragmentL(const TDesC8& aBuffer);
+
+ /**
+ * This fuctions converts one XML element to a string
+ * @since Series 60 2.6
+ * @param aResp XML string
+ * @param aSen an Sen element to be converted to string
+ */
+ void BrowseElementL( HBufC8*& aResp, TXmlEngElement& aSen );
+
+ /**
+ * This fuctions is a getter for container updateID.
+ * @since Series 60 2.6
+ * @param aID ID of the container which updateID is returned
+ * @return a updateId of container
+ */
+ TInt ContainerUpdateId( const TDesC8& aContainerID );
+
+
+ /**
+ * Function to add data to metadb
+ * @param aFragment fragment to add to db
+ * @param aContainer container where to add data
+ * @param aId parameter returned by AddToMetaDbL method, stands for item id
+ * @return upnperrorcode descriping situation
+ */
+ TUpnpErrorCode AddToMetaDbL( RXmlEngDocument& aFragment, TInt aContainer, TInt* aId,
+ TBool aIsLocal );
+
+ /*
+ *
+ * @since Series S60 3.1
+ * @param aFragment
+ * @param aImportUris
+ * @param aRess
+ * @param aLocal
+ * @param aCreateThumbnailRes
+ * @param aNextKey
+ * @return upnperrorcode descriping situation
+ */
+ TUpnpErrorCode PrepareCreateOperationL( RXmlEngDocument& aFragment,
+ RArray<TXmlEngAttr>& aImportUris, RArray<TXmlEngElement>& aRess, TBool& aLocal,
+ TBool& aCreateThumbnailRes, TInt& aNextKey );
+
+ /**
+ * Related to CreateObject, resultset of create is created here
+ * @since Series 60 2.6
+ * @param aAction action data structure is needed here
+ * @param aElement element added to db
+ * @param aId element's id
+ **/
+ void ConstructCreateResultsetL( CUpnpAction*& aAction,
+ RXmlEngDocument aElement,
+ TInt aId );
+
+
+ /**
+ * Function for creating a new object
+ * @since Series 60 2.6
+ * @param aAction received action
+ * @return upnperrorcode descriping situation
+ **/
+ TUpnpErrorCode CreateObjectL( CUpnpAction*& aAction );
+ /**
+ * Function for browsing values of objects
+ * @since Series 60 2.6
+ * @param aAction received action
+ * @return upnperrorcode descriping situation
+ **/
+ TUpnpErrorCode BrowseL( CUpnpAction*& aAction );
+
+ /**
+ * Function for destroying objects
+ * @since Series 60 2.6
+ * @param aAction received action
+ * @return upnperrorcode descriping situation
+ **/
+ TUpnpErrorCode DestroyObjectL( CUpnpAction*& aAction );
+
+ /**
+ * Function for creating refense items
+ * @since Series 60 2.6
+ * @param aAction received action
+ * @return upnperrorcode descriping situation
+ **/
+ TUpnpErrorCode CreateReferenceL( CUpnpAction*& aAction );
+
+ /**
+ * Function to solve CDS's search capabilities
+ * @since Series 60 2.6
+ * @param aAction received action
+ * @retrun upnperrorcode descriping situation
+ **/
+ TUpnpErrorCode GetSearchCapabilitiesL( CUpnpAction*& aAction );
+
+ /**
+ * Function to solve CDS's sort capabilities
+ * @since Series 60 2.6
+ * @param aAction received action
+ * @return upnperrorcode descriping situation
+ **/
+ TUpnpErrorCode GetSortCapabilitiesL( CUpnpAction*& aAction );
+
+ /**
+ * Getter for CDS's SystemUpdateID
+ * @since Series 60 2.6
+ * @param aAction received action
+ * @return upnperrorcode descriping situation
+ **/
+ TUpnpErrorCode GetSystemUpdateIdL( CUpnpAction*& aAction );
+
+ /**
+ * Function for importing resources
+ * @since Series 60 2.6
+ * @param aAction received action
+ * @return upnperrorcode descriping situation
+ **/
+ TUpnpErrorCode ImportResourceL( CUpnpAction*& aAction );
+
+ /**
+ * Function for exporting resources
+ * @since Series 60 2.6
+ * @param aAction received action
+ * @return upnperrorcode descriping situation
+ */
+ TUpnpErrorCode ExportResourceL( CUpnpAction*& aAction );
+
+ /**
+ * Function for stopping ongoing file transfer (import / export)
+ * @since Series 60 2.6
+ * @param aAction received action
+ * @retrun upnperrorcode descriping situation
+ **/
+ TUpnpErrorCode StopTransferResourceL( CUpnpAction*& aAction );
+
+ /**
+ * Function for getting information about ongoing file transfer
+ * @since Series 60 2.6
+ * @param aAction received action
+ * @return upnperrorcode descriping situation
+ **/
+ TUpnpErrorCode GetTransferProgressL( CUpnpAction*& aAction );
+
+ /**
+ * This functions removes a "res" tag from a object
+ * @since Series 60 2.6
+ * @param aAction received action
+ * @return upnperrorcode descriping situation
+ **/
+ TUpnpErrorCode DeleteResourceL( CUpnpAction*& aAction );
+
+ /**
+ * This function changes file name and its extension.
+ * @since Series 60 3.1
+ * @param aFilePath - the target file.
+ * @param aMimeType - mime type, for which file extension will be choosen.
+ */
+ HBufC8* ChangeFileNameWithExtensionL(TDesC8& aFilePath, const TDesC8& aMimeType );
+
+
+
+ /**
+ * @param aOnlyThumbnail this method is used during two action - ImportResource and CreateObject.
+ * In CreateObject case res can be created by passed argument so we only thumbail has to be created
+ */
+ TInt CreateResTagInternalL( TInt aSessionId,
+ TDesC8& aFilePath,
+ HBufC8* aImportUri,
+ TBool aOnlyThumbnail );
+
+ /**
+ * calls CreateResTagInternalL but KErrCorrupted is TRAPed in order to invoke recovery on DB
+ */
+ TInt CreateResTagInternalWithDBRecoveryL( TInt aSessionId,
+ TDesC8& aFilePath,
+ HBufC8* aImportUri,
+ TBool aOnlyThumbnail = EFalse );
+
+private: // New functions
+
+
+ void DoSendActionL(CUpnpAction* aAction, TUpnpErrorCode aError);
+ void DoSendMessageL(CUpnpHttpMessage* aMessage);
+ TBool IsValidUrlPath(const TDesC& aUrlPath);
+
+ /**
+ * Gets protocolInfo from mimeType.
+ * @param aMimeType mime type for which protocolInfo will be created.
+ * @return string with protocolInfo
+ */
+ HBufC8* ProtocolInfoFromMimeL( const TDesC8& aMimeType, TInt aAddInfo, TBool aOpRangeParam,
+ TBool aCiParam = EFalse );
+
+ HBufC8* ProtocolInfoFromMimeL(const TDesC8& aMimeType, TXmlEngElement& aResEl);
+
+ /**
+ * Notify message when the thumbnail creation has been finished.
+ * From MUpnpThumbnailCreatorObserver interface.
+ * @param aThCreator this is a thumbnail creator.
+ * @param aResult result from thumbnail creation.
+ */
+ void NotifyThumbnailResultL( CUpnpThumbnailCreator* aThCreator, TInt aResult );
+
+ /**
+ * Notify message when the thumbnail creation has been finished.
+ * From MUpnpThumbnailCreatorObserver interface.
+ * @param aThCreator this is a thumbnail creator.
+ * @param aResult result from thumbnail creation.
+ */
+ CUpnpThumbnailCreator* CreateThumbnailCreatorL(TInt aObjectId);
+
+ /**
+ * Cheks if object exists.
+ * @param aObjectId
+ */
+ TBool IsObjectExistL( TInt aObjectId );
+
+ /**
+ * Cheks if object is valid.
+ * if object doesn't exist or has no parent
+ * object is removed from autodestoy table and EFalse is returned
+ * @param aObjectId
+ */
+ TBool ValidateObjectL( TInt aObjectId );
+
+ /**
+ * Handles DB error
+ * Tries to recover, if fails tries to recreate
+ * @since Series S60 3.2
+ * @return TInt - KErrNone if succeed
+ */
+ TInt HandleDbError( TInt aError );
+
+ /**
+ * Checks DB and disk Space
+ * Tries to recover DB, if fails tries to recreate
+ * @since Series S60 3.2
+ * @param aAction received action
+ * @return EFalse if succeed
+ */
+ TBool IsDbOrDiskProblemL( CUpnpAction* aAction );
+
+ /**
+ * Determines if DB has benn recovered successfully
+ * returns ETrue if yes
+ * @param a Error - DB is revovered only if aError equal KErrCorrupted
+ * @since Series S60 3.2
+ * @returns ETrue if succeed
+ */
+ TBool DataBaseHasBeenRecoveredL( TInt aError );
+
+ /**
+ * Returns DB creation status
+ * @since Series S60 3.2
+ * @return TBool
+ */
+ TBool IsDbCreated();
+
+ /**
+ * Updates import URI
+ * @since Series S60 3.2
+ * @return TPtrC8
+ */
+ TPtrC8 UpdateImportUriL( const TDesC8& aImportUri );
+
+private: // Constructors
+
+ /**
+ * C++ default constructor.
+ */
+ CUpnpContentDirectory( CUpnpDevice& aDevice,
+ MUpnpThumbnailCreatorObserver* aThmbObs,
+ MUpnpTransferInterface* aTransfer
+ );
+
+ /**
+ * Second phase of the constructor.
+ * Initialises a DOM tree.
+ * By default Symbian 2nd phase constructor is private.
+ * @param service Parent service
+ */
+ void ConstructL( TUpnpCdSettings aSettings,
+ CUpnpMetadataStorage* aMetadataStorage
+ );
+
+ void ConstructHttpL();
+
+private:
+
+ //Array containing objects ids, which will be updated after Thumbnail creation.
+ RArray<TInt> iThObjectIds;
+
+ // Array of thumbnail creators in which creators can be searched for.
+ RPointerArray<CUpnpThumbnailCreator> iThumbnailCreators;
+
+ // Next free object ID, owned
+ TInt iNextFreeID;
+
+ // Pointerarray for pending actions (used in Import and Export), owned
+ //RPointerArray<CUpnpAction> iPendingActions;
+
+ // Elementfactory, owned
+ CUpnpElementFactory* iElementdb;
+
+
+ // Database
+ CUpnpContentDirectoryDb* iContentDirectoryDb;
+
+ // file session
+ RFs iFs;
+
+ // Download directory
+ HBufC* iDownloadDir;
+
+ // Thumbnail directory
+ HBufC* iThumbDir;
+ // connection try to bitmap and font server.
+ // if there is no such connection there will be no thumbcreated.
+ TInt iBitmapServerConnection;
+
+ TBool iEcomUsed;
+
+ // Thumbnail creator observer
+ MUpnpThumbnailCreatorObserver* iThmbObs;
+
+ // auto-destroy object list
+ CUpnpAutoDestroyObjectList* iAutoDestroyObjects;
+
+
+ // Event observer
+ MUpnpContentDirectoryEventObserver* iEventObserver;
+
+ // Thumbnail creation flag
+ TBool iCreateThumbnails;
+
+ // Max number of browsed object
+ TInt iMaxRequestCount;
+
+ TCurrentAction iCurrentAction;
+
+ RXmlEngDOMImplementation iDOMImpl;
+
+ MUpnpCdsSender* iSender; // not owned
+
+ CUpnpMimeMapper* iMimeToExtMap;
+
+ HBufC* iObjectsXmlPath;
+
+ CUpnpStateHandler* iStateHandler;
+
+
+ CUpnpTransferController* iTransferController;
+
+ MUpnpTransferInterface* iTransferHandler;
+
+ CUpnpDlnaFilter* iDlnaFilter;
+
+ CUpnpHttpServerSession* iHttpServerSession;
+
+ CUpnpSecurityManager* iSecurityManager;
+
+ };
+
+#endif // C_CUPNPCONTENTDIRECTORY_H
+
+// End Of File