upnp/upnpstack/controlpointbase/inc/upnpcpbdevicerepository.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:12:20 +0200
changeset 0 f5a58ecadc66
permissions -rw-r--r--
Revision: 201003

/** @file
* Copyright (c) 2007-2007 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 storage for devices known by control point.
*
*/


#ifndef C_CUPNPCPBDEVICEREPOSITORY_H
#define C_CUPNPCPBDEVICEREPOSITORY_H

// INCLUDES
#include <e32base.h>

// FORWARD DECLARATIONS
class CUpnpDevice;

/**
 * Storage for devices known by control point
 *
 * @lib controlpointbase.lib
 * @since S60 v5.0
 */
NONSHARABLE_CLASS( CUpnpCpbDeviceRepository ) : public CBase
    {
    public:
    /**
     * Two-phased constructor
     * @since S60 v5.0
     */
    static CUpnpCpbDeviceRepository* CUpnpCpbDeviceRepository::NewL(
        const CDesC8Array& aTargetDeviceTypes );

    /**
     * Destructor
     * @since S60 v5.0
     */
    ~CUpnpCpbDeviceRepository();

    /**
     * Check if device type is interesting for control point
     *
     * @since S60 v5.0
     * @param aDevice Device type that should be match
     * @return ETrue if type is correct one, EFalse if not
     */
    TBool MatchTargetDevice(const TDesC8& aDeviceType);

    /**
     * Check if device is in repository
     *
     * @since S60 v5.0
     * @param aDevice Device uuid that should be match
     * @return ETrue if device is know, EFalse if not
     */
    TBool IsKnownDevice(const TDesC8& aDeviceUuid);

    /**
     * Check if device is discovered already
     *
     * @since S60 v5.0
     * @param aDevice Device uuid that should be match
     * @return ETrue if device is know, EFalse if not
     */
    TBool IsDiscoveredDevice(const TDesC8& aDeviceUuid);

    /**
     * Check if device is discovered but type is not matching
     * needed devices types
     *
     * @since S60 v5.0
     * @param aDevice Device uuid that should be match
     * @return ETrue if device is know, EFalse if not
     */
    TBool IsUninterestingDevice(const TDesC8& aDeviceUuid);

    /**
     * Check if device is unneded (type is different then needed).
     *
     * @since S60 v5.0
     * @param aDevice Device uuid that should be match
     * @return ETrue if device is know, FALSE if not
     */
    TBool IsUnneededDevice(const TDesC8& aDeviceUuid);

    /**
     * Add device to discovered device list
     *
     * @since S60 v5.0
     * @param aDevice Target device
     * @return ETrue if device was added
     */
    TBool AddDiscoveredDeviceL(CUpnpDevice* aDevice);

    /**
     * Add device to unneded device list
     *
     * @since S60 v5.0
     * @param aDevice Target device
     * @return ETrue if device was added
     */
    TBool AddUnneddedDeviceL(CUpnpDevice* aDevice);

    /**
     * Add device to incomlite root device list
     *
     * @since S60 v5.0
     * @param aDevice Target device
     * @return ETrue if device was added
     */
    TBool AddIncompliteDeviceL(CUpnpDevice* aDevice);

    /**
     * Add device to discovered device list
     *
     * @since S60 v5.0
     * @param aDevices Target device
     */
    void AddDiscoveredDevicesL(RPointerArray<CUpnpDevice>& aDevices);

    /**
     * Add device to unneded device list
     *
     * @since S60 v5.0
     * @param aDevices Target device
     */
    void AddUninterestingDevicesL(RPointerArray<CUpnpDevice>& aDevices);

    /**
     * Add device to unneded device list
     *
     * @since S60 v5.0
     * @param aDevices Target device
     */
    void AddUnneddedDevicesL(RPointerArray<CUpnpDevice>& aDevices);

    /**
     * Getter. Returns discovered device list.
     *
     * @since S60 v5.0
     * @return List with discovered devices.
     */
    const RPointerArray<CUpnpDevice>& DiscoveredDeviceList() const;

    /**
     * Getter. Returns unnedded device list.
     *
     * @since S60 v5.0
     * @return List with unnedded devices.
     */
    const RPointerArray<CUpnpDevice>& UnneddedDeviceList() const;

    /**
     * Getter. Returns uninteresting device list.
     *
     * @since S60 v5.0
     * @return List with uninteresting devices.
     */
    const RPointerArray<CUpnpDevice>& UninterestingDeviceList() const;

    /**
     * Getter. Returns incomplite root device list.
     *
     * @since S60 v5.0
     * @return List with incomplite root devices.
     */
    const RPointerArray<CUpnpDevice>& IncompliteDeviceList() const;

    /**
     * Getter. Find device in repository.
     *
     * @since S60 v5.0
     * @return Device pointer if found.
     */
    CUpnpDevice* FindDevice( const TDesC8& aDeviceUuid );

    /**
     * Getter. Find incomplite device in repository.
     *
     * @since S60 v5.0
     * @return Device pointer if found.
     */
    CUpnpDevice* FindIncompliteDevice(const TDesC8& aDeviceUuid);

    /**
     * Remove device from all list
     *
     * @since S60 v5.0
     * @param aDevice Target device
     */
    void RemoveDevice( CUpnpDevice* aDevice );

    /**
     * Add device incoming from SSDP layer
     * final device built from device description is synchronized with that
     *
     * @since S60 v5.0
     * @param aDevice Target device
     */
    TBool AddIncomingDeviceL( CUpnpDevice* aDevice );

    /**
     * Remove device from incoming list
     *
     * @since S60 v5.0
     * @param aDevice Target device
     */
    CUpnpDevice* RemoveIncomingDevice( const TDesC8& aUuid  );

    /**
      * Finds root of given device among dicovered and being discovered devices
      * @since Series60 3.2
      * @param aDeviceUuid UUID of device
      * @return Device if found or NULL
      */
    CUpnpDevice* FindRoot( const TDesC8& aDeviceUuid );


private:
    /**
     * Constructor
     * @since S60 v5.0
     */
    CUpnpCpbDeviceRepository();

    /**
     * Second phase constructor
     * @since S60 v5.0
     */
    void ConstructL(const CDesC8Array& aTargetDeviceTypes);

private:

    // Target device types
    CDesC8ArrayFlat* iTargetDeviceTypes;
    // List with discovered devices (only device that match target types)
    RPointerArray<CUpnpDevice> iDiscoveredDevices;
    // List with discovered devices but not metching target types
    // As subdevices of interesting devices needs to be discovered
    RPointerArray<CUpnpDevice> iUninterestingDevices;
    // List with devices that was not discovered as type
    // is not interesting
    RPointerArray<CUpnpDevice> iUnneededDevices;
    // List with inclomplite root devices (some sub devices are
    // discovered so we need to remember also root device)
    RPointerArray<CUpnpDevice> iIncomliteRootDevices;
    // List with inclomplite root devices (some sub devices are
    // discovered so we need to remember also root device)
    RPointerArray<CUpnpDevice> iIncomingDevices;
    };


#endif // C_CUPNPCPBDEVICEREPOSITORY_H