upnpsharing/upnpsecurity/inc/upnpsecaccesscontroller.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:00 +0200
changeset 0 7f85d04be362
permissions -rw-r--r--
Revision: 200947 Kit: 200951

/** @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 : Access control interface
 *
 */

#ifndef UPNPSECACCESSCONTROLLER_H
#define UPNPSECACCESSCONTROLLER_H

// INCLUDES
#include <e32base.h>

// FORWARD DECLARATIONS
class RUpnpSecurityManagerClientSession;
class TInetAddr;

// ENUMS
enum TAccessType
    {
    ENoneAllowed,
    EAddressAllowed,
    EFileAllowed,
    EFileAndAddressAllowed
    };

/**
 *  Access controller class
 *
 *  @lib upnpsecurity.lib
 *  @since S60 3.0
 */
class CUpnpSecAccessController : public CBase
    {

public:
    // Constructors and destructor.

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

    /**
     * Destructor.
     */
    IMPORT_C virtual ~CUpnpSecAccessController();

public:
    // S60 UpnpMediaServer security manager activation methods.

    /**
     * Enables the security plugin in Media Server.
     *
     * @since S60 3.1
     */
    IMPORT_C static void EnableMediaServerSecurityL();

    /**
     * Disables the security plugin in Media Server.
     *
     * @since S60 3.1
     */
    IMPORT_C static void DisableMediaServerSecurityL();

    /**
     * Returns the status of the Media Server security plugin.
     *
     * @since S60 3.1
     * @return TBool indicating the current status of the MS security
     */
    IMPORT_C static TBool IsMediaServerSecurityEnabledL();

public:
    // Business logic methods for handling the whitelists.

    /**
     * Adds allowed file, so that no authorization is requested when
     * client gets this file.
     * @since S60 3.0
     * @param aFileName reference to allowed file
     * @return TInt indicating the status of operation
     */
    IMPORT_C TInt AddAllowedFile( const TDesC& aFileName );

    /**
     * Removes file from white list.
     * @since S60 3.0
     * @param aFileName reference to file to be removed
     * @return TInt indicating the status of operation
     */
    IMPORT_C TInt RemoveAllowedFile( const TDesC& aFileName );

    /**
     * Adds allowed IP address, so that no authorization is requested 
     * when client with that IP address makes connection request.
     * @since S60 3.0
     * @param aIpAddress reference to allowed IP address
     * @return TInt indicating the status of operation
     */
    IMPORT_C TInt AddAllowedAddress( const TInetAddr& aIpAddress );

    /**
     * Removes allowed IP address.
     * @since S60 3.0
     * @param aIpAddress reference to IP address to be removed
     * @return TInt indicating the status of operation
     */
    IMPORT_C TInt RemoveAllowedAddress( const TInetAddr& aIpAddress );

    /**
     * Removes all allowed files from white list.
     * @since S60 3.0
     * @return TInt indicating the status of operation
     */
    IMPORT_C TInt ResetFileList();

    /**
     * Removes all allowed IP Addresses from white list.
     * @since S60 3.0
     * @return TInt indicating the status of operation
     */
    IMPORT_C TInt ResetAddressList();

public:
    // Business logic methods.

    /**
     * Checks if the given IP-address/action/file is authorized. Null
     * parameters (filename and/or action name) are allowed.
     *
     * Leaves with standard e32err error code in case of an error, or
     * with KErrAccessDenied if access is not authorized.
     *
     * @since S60 3.1
     * @param aIpAddress (const TInetAddr&) IP address
     * @param aFileName (const TDesC&) filename
     * @param aActionName (const TDesC8&) action name
     */
    IMPORT_C void CheckAuthorizationL( const TInetAddr& aIpAddress,
            const TDesC& aFileName,
            const TDesC8& aActionName );

    /**
     * Query user to authorize connection from an IP-address.
     *
     * Leaves with standard e32err error code in case of an error, or
     * with KErrAccessDenied if access is not authorized. 
     *
     * @since S60 3.1
     * @param aIpAddress (const TInetAddr&) reference to IP Address
     */
    IMPORT_C void QueryAuthorizationL( const TInetAddr& aIpAddress );

private:
    // Business logic methods.

    /**
     * Set securitymanagersetting to given value
     * 
     * @param aSettingToSet value to set
     */
    static void SetSecurityManagerSettingL( const TDesC8& aSettingToSet );    
    
    /**
     * Checks if the requested file is automatically allowed.
     *
     * @since S60 3.1
     * @param aFileName (const TDesC&) the file that request concerns
     * @return TBool access request status
     */
    TBool IsAllowedFile( const TDesC& aFileName );

    /**
     * Checks if the requested action is automatically allowed.
     *
     * @since S60 3.1
     * @param aActionName (const TDesC8&) action name that request concerns
     * @return TBool access request status
     */
    TBool IsAllowedAction( const TDesC8& aActionName );

private:
    // Constructors

    /**
     * Second-phase constructor.
     */
    void ConstructL();

    /**
     * C++ default constructor.
     */
    CUpnpSecAccessController();

private:
    // Member variables
    RUpnpSecurityManagerClientSession* iSecurityManagerClientSession;
    };

#endif // UPNPSECACCESSCONTROLLER_H
// End of File