upnp/upnpstack/controlpointbase/inc/upnpcpbdevicedescription.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:  Base class - declares device description process.
*
*/


#ifndef C_CUPNPCPBDEVICEDESCRIPTION_H
#define C_CUPNPCPBDEVICEDESCRIPTION_H

// INCLUDES
#include <e32base.h>

// FORWARD DECLARATIONS
class CUpnpDevice;
class CUpnpControlPoint;
class CUpnpContentHandlersController;
class CUpnpCPBDiscovery;
class MUpnpCpbHttpMessageController;
class CUpnpCpbDeviceRepository;

// CONST
const TInt KDisscoveryFinished = 0;
const TInt KDisscoveryIncorrect = 1;
const TInt KDisscoveryInProgress = 2;

/**
 * Class handling discovery process of simple device.
 * It is checking only services of device. Subdevices are not processed.
 *
 * @lib controlpointbase.lib
 * @since S60 v5.0
 */
NONSHARABLE_CLASS( CUpnpCpbDeviceDescription ) : public CBase
    {
    public:
    /**
     * Destructor
     * @since S60 v5.0
     */
    virtual ~CUpnpCpbDeviceDescription();

    /**
     * Start processing device.
     *
     * @since S60 v5.0
     * @param aDevice Device that should be discovered
     * @return One of symbian errors or
     *                 0 - if discovery process is finished correctly
     *                 1 - if discovery was not finished correctly
     *                 2 - if discovery is in progress
     */
    virtual TInt DiscoverDeviceL( CUpnpDevice* aDevice ) = 0;

    /**
     * Function processing service description.
     *
     * @since S60 v5.0
     * @param aMsg Service message
     * @return One of symbian errors or
     *                 0 - if discovery process is finished correctly
     *                 1 - if discovery was not finished correctly
     *                 2 - if discovery is in progress
     */
    virtual TInt ServiceDescriptionL( CUpnpHttpMessage* aMsg ) = 0;

    /**
     * Get currently processed device.
     *
     * @since S60 v5.0
     * @return Pointer to processed device
     */
    CUpnpDevice* GetTargetDevice();

    /**
     * Get currently processed device, if it is inclomplete one.
     *
     * @since S60 v5.0
     * @return Pointer to processed device
     */
    virtual CUpnpDevice* GetIncompliteRootDevice() = 0;

    /**
     * Set target device as null.
     *
     * @since S60 v5.0
     */
    virtual void NullTargetDevice();

    /**
     * Delete target device.
     *
     * @since S60 v5.0
     */
    virtual void DeleteTargetDevice();

    /**
     * Return incorect uuids
     *
     * @since S60 v5.0
     * @return Uuids pointer
     */
    const TPtrC8 FailedUuidsL();

    /**
     * Append discovered devices to array
     *
     * @since S60 v5.0
     * @param aArray array where devices should be appended
     * @param aRemove determines if already discovered devices should be deleted from iAllDevicesInRoot array
     */
    virtual void GetDiscoveredDeviceL(
        RPointerArray<CUpnpDevice>& aArray, TBool aRemove = EFalse ) = 0;

    /**
     * Append not discovered (does not match the type) devices to array
     *
     * @since S60 v5.0
     * @param aArray array where devices should be appended
     * @param aRemove determines if already discovered devices should be deleted from iNotNeededDevices array
     */
    virtual void GetUnnededDeviceL(
        RPointerArray<CUpnpDevice>& aArray, TBool aRemove = EFalse ) = 0;

    /**
     * Append discovered but not metching target types devices to array
     *
     * @since S60 v5.0
     * @param aArray array where devices should be appended
     * @param aRemove determines if already discovered devices should be deleted from iDiscoveredDevices array
     */
    virtual void GetUninterestingDeviceL(
        RPointerArray<CUpnpDevice>& aArray, TBool aRemove = EFalse ) = 0;

    protected:
    /**
     * Constructor
     * @since S60 v5.0
     */
    CUpnpCpbDeviceDescription( MUpnpCpbHttpMessageController& aMessanger,
                              CUpnpCpbDeviceRepository& aRepository );

    /**
     * Second phase constructor
     * @since S60 v5.0
     */
    virtual void ConstructL();

    /**
     * Add next uuid to uuid list
     * @since S60 v5.0
     * @param aUuid Uuid that should be added
     */
    void AddToUuidsL( const TDesC8& aUuid );

    /**
     * Get next service that should be discovered
     * @param aDevice
     * @return service description url
     */
    const TPtrC8 GetNextServiceType( CUpnpDevice* aDevice );

    protected:
    // incorrect uuids
    RBuf8 iUuids;
    // Current processed root device. NOT OWNED
    CUpnpDevice* iRootDevice;
    // Sax parsers for service description
    CUpnpContentHandlersController* iSaxController;
    // Current state of discovery engine
    TInt iResult;
    // Massenger handling HTTP messages. NOT OWNED
    MUpnpCpbHttpMessageController& iMessanger;
    // device repository, not owned
    CUpnpCpbDeviceRepository& iRepository;
    };

#endif // C_CUPNPCPBDEVICEDESCRIPTION_H