upnpmediaserver/contentdirectoryservice/inc/upnpcontentdirectory.h
branchnew development branch with rendering state machine and other goodies
changeset 38 5360b7ddc251
parent 27 03808033c9a2
--- a/upnpmediaserver/contentdirectoryservice/inc/upnpcontentdirectory.h	Fri Sep 17 08:31:21 2010 +0300
+++ b/upnpmediaserver/contentdirectoryservice/inc/upnpcontentdirectory.h	Mon Nov 01 12:37:49 2010 +0200
@@ -1,922 +1,923 @@
-/** @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 <xml/dom/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
+/** @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* GetCopyFileNameL( 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