upnp/upnpstack/serviceframework/inc/upnpsubscriberlibraryelement.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) 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 the CUpnpSubscriberLibraryElement class
*
*/


#ifndef C_CUPNPSUBSCRIBERLIBRARYELEMENT_H
#define C_CUPNPSUBSCRIBERLIBRARYELEMENT_H

// INCLUDES

//#include <e32std.h>
#include <in_sock.h>
#include "upnptimeoutelement.h"
#include "upnperrors.h"

// FORWARD DECLARATIONS

class CUpnpGenaMessage;

// CONSTANTS

_LIT8( KDefaultTimeout, "300" );
const TUint KMaxRenewTimeout = 2100;
const TUint KDefaultTimeoutValue = 300;
// 2^31-1 // to avoid warning!
const TUint32 KMaxSeq = 2146583647; 
const TUint32 KMinSeq = 1;

// CLASS DECLARATION

/**
*  A class which is used to hold subscriber information.
*  This class is used by CUpnpSubscriberLibrary to keep a list 
*  of service subscribers.
*
*  @since Series60 2.6
*/
class CUpnpSubscriberLibraryElement : public CUpnpTimeoutElement
{
public: // Constructors and destructor
    
    /** 
    * Two-phased constructor.
    * @param aParent
    * @return The new instance.
    */
    static CUpnpSubscriberLibraryElement* NewL( MUpnpTimeoutElementParent& aParent );
    
    /** 
    * Destructor.
    */
    virtual ~CUpnpSubscriberLibraryElement();
        
public: // New functions

    /**
    * Adds a new subscriber. For a new subscriber, SEQ defaults to zero.
    * @since Series60 2.6
    * @param aMessage A valid subscribe message.
    * @return EHttpOk or error.
    */
    TUpnpErrorCode AddSubscriberL(CUpnpGenaMessage* aMessage);

    /**
    * Renews subscription.
    * @since Series60 2.6
    * @param aMessage A valid subscription renewal message.
    * @return EHttpOk or error.
    */
    TUpnpErrorCode RenewSubscriberL(CUpnpGenaMessage* aMessage);
        
public: // New functions

    /**
    * Get SID header
    * @since Series60 2.6
    * @return Subscriber ID
    */
    TDesC8& Sid();

    /**
    * Get callback address
    * @since Series60 2.6
    * @return Callback Address
    */
    TInetAddr& CallbackAddress();
        
    /**
    * Get callback path
    * @since Series60 2.6
    * @return Callback path
    */
    TDesC8& CallbackPath();

    /**
    * Get SEQ header
    * @since Series60 2.6
    * @return Sequence key
    */
    TUint32 Seq() const;

    /**
    * Get timeout
    * @since Series60 2.6
    * @return Subscription expiring timeout
    */
    TDesC8& Timeout();
    
    /**
    * Icreases SEQ by 1. If maximum is reached, resets to 1.
    * @since Series60 2.6
    */
    void IncreaseSeq();
     
    /**
    * Set Subscriber ID.
    * @since Series60 2.6
    * @param aSid UUID.
    */
    void SetSidL( const TDesC8& aSid );

    /**
    * Setter for Callback Address.
    * @since Series60 2.6
    * @param aIp IPv4
    * @param aPort Port
    */
    void SetCallbackAddress( const TDesC8& aIp, 
                                      const TDesC8& aPort );

    /**
    * Set Callback path.
    * @since Series60 2.6
    * @param aCallbackPath Callback path
    */
    void SetCallbackPathL( const TDesC8& aCallbackPath );

    /**
    * Set Sequence key.
    * @since Series60 2.6
    * @param aSeq
    */
    void SetSeq( TUint32 aSeq );

    /**
    * Set Subscription expiring timeout.
    * @since Series60 2.6
    * @param aTimeout
    */
    void SetTimeoutL( const TDesC8& aTimeout );
    
    void SetSessId(TInt aSessId);
    
    TInt SessId();
        
private: // Constructors

    /**
    * C++ default constructor.
    */
    CUpnpSubscriberLibraryElement( MUpnpTimeoutElementParent& aParent );
       
    /**
    * By default Symbian 2nd phase constructor is private.
    */
    void ConstructL();
        
private: // New functions

    /**
    * Sets subscription info.
    * @since Series60 2.6
    * @param aSid
    * @param aCallbackIp
    * @param aCallbackPort
    * @param aCallbackPath
    * @param aTimeout
    */
    void AddInfoL( const TDesC8& aSid, 
                            const TDesC8& aCallbackIp, 
                            const TDesC8& aCallbackPort, 
                            const TDesC8& aCallbackPath, 
                            const TDesC8& aTimeout );
        
private: 

    // SID buffer, owned
    HBufC8* iSid;

    // Callback address, owned
    TInetAddr iCallbackAddress;

    // Callbck path, owned
    HBufC8* iCallbackPath;

    // SEQ buffer, owned
    TUint32 iSeq;

    // Timeout buffer, owned
    HBufC8* iTimeout;
    
    //SessionId
    TInt iSessId;
};

#endif //   C_CUPNPSUBSCRIBERLIBRARYELEMENT_H

//  End of File