upnpmediaserver/mediaserverengine/inc/upnpmediaserverdescriptionprovider.h
author hgs
Tue, 23 Mar 2010 22:18:56 +0200
changeset 19 51421a92e4d5
parent 0 7f85d04be362
permissions -rw-r--r--
201011

/** @file
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies  this distribution, and is available 
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  CUpnpMediaServerDescriptionProvider declaration
*
*/

#ifndef CUPNPMEDIASERVERDESCRIPTIONPROVIDER_H
#define CUPNPMEDIASERVERDESCRIPTIONPROVIDER_H

// INCLUDES
#include <e32std.h>
#include <e32base.h>
#include <e32hashtab.h> 
#include "upnpdevicedescriptionprovider.h"

// FORWARD DECLARATION

class CUpnpSecurityManager;
class TInetAddr;

const TInt KMaxUriLength = 256;

// CLASS DECLARATION

/**
 * CUpnpMediaServerDescriptionProvider
 * Provides description of device and its services, and icons. 
 *
 * @lib avmediaserver.exe
 * @since S60 MCL 
 */
class CUpnpMediaServerDescriptionProvider : public CBase,
        public MUpnpDeviceDescriptionProvider
    {
public:

    /**
     * Destructor.
     */
    ~CUpnpMediaServerDescriptionProvider();

    /**
     * Two-phased constructor.
     */
    static CUpnpMediaServerDescriptionProvider* NewL();

    /**
     * Two-phased constructor.
     */
    static CUpnpMediaServerDescriptionProvider* NewLC();
    
    /**
     * Adds new map uri to file.
     * 
     * @since S60 MCL
     * @param aUri uri
     * @param aFile file for aUri
     */    
    void AddUriToFileMapL( const TDesC8& aUri, const TDesC16& aFile );
    
    /**
     * Removes map uri to file.
     * 
     * @since S60 MCL
     * @param aUri uri
     */    
    void RemoveUriToFileMapL( const TDesC8& aUri );
    
private:    // from MUpnpDeviceDescriptionProvider
    
    virtual TInt OnDeviceDescription( CUpnpDeviceDescriptionRequest& aRequest );
    
    virtual TInt OnServiceDescription( CUpnpDeviceDescriptionRequest& aRequest );    
    
    virtual TInt OnIcon( CUpnpDeviceDescriptionRequest& aRequest );            
    
    virtual TInt GetFile( const TDesC8& aUri, RFile& aFile ); 

private:

    /**
     * Constructor for performing 1st stage construction
     */
    CUpnpMediaServerDescriptionProvider();

    /**
     * EPOC default constructor for performing 2nd stage construction
     */
    void ConstructL();

    /**
     * Main function to service requests.
     * 
     * @since S60 MCL
     * @param aRequest request to service
     * @return error code
     */
    TInt OnRequest( CUpnpDeviceDescriptionRequest& aRequest );

    /**
     * Check if resource is accessible.
     * Leaves with -EHttpNotFound when filename 
     * is not authorized for specific IP.
     * May leave with other system error code. 
     * 
     * @since S60 MCL
     * @param aFileName data source file name
     * @param aSender sender IP address
     */
    void AuthorizeRequestL( const TDesC& aFileName, const TInetAddr& aSender );
   
    /**
     * Gets a folder with device description.
     * Leave with KErrNotFound when aUri is not found.
     * 
     * @since S60 MCL
     * @param aUri uri to get file for
     * @param aPath on return contains path of file related to aUri
     */
    void GetFileFromUriL( const TDesC8& aUri, TDes& aPath );

    /**
     * Gets a path from uri. Removed IP and port.
     *  
     * @since S60 MCL
     * @param aUri uri to extract
     * @return allocated buffer with extracted uri lower case
     */
    HBufC8* ExtractPathAndFileFromUriL( const TDesC8& aUri );

private:
    
    // Security manager
    // Own
    CUpnpSecurityManager* iSecurityManager;
    
    // File server session used to open file
    RFs iFs;

    // Hash map uri to file
    RHashMap< TBufC8<KMaxUriLength>, TFileName > iUriMap;
    
    // Used for file name to aviod use this type on stack
    TFileName iFileName;
    };

#endif // CUPNPMEDIASERVERDESCRIPTIONPROVIDER_H