--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnp/upnpstack/serviceframework/inc/upnpeventcontroller.h Tue Feb 02 01:12:20 2010 +0200
@@ -0,0 +1,239 @@
+/** @file
+* Copyright (c) 2008-2008 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: Encapsulates http client for eventing
+*
+*/
+
+
+
+#ifndef C_CUPNPEVENTCONTROLLER_H
+#define C_CUPNPEVENTCONTROLLER_H
+
+// INCLUDES
+#include <e32cmn.h>
+#include <e32std.h>
+#include <e32base.h>
+
+#include "upnphttpclientengine.h"
+#include "upnphttptransaction.h"
+#include "upnpsubscriberlibraryelement.h"
+#include "upnpserviceimplementation.h"
+#include "upnpsubscriberlibraryobserver.h"
+
+
+// FORWARD DECLARATION
+class CUpnpEventQueueManagerBase;
+class CUpnpStateVariable;
+class CUpnpSubscriberLibrary;
+
+_LIT8(KGenaPropertyStart,
+ "<e:property><");
+_LIT8(KGenaPropertyEnd,
+ "></e:property>");
+_LIT8(KGenaPropertysetEnd,
+ "</e:propertyset>");
+_LIT8(KOpenBracket, "<");
+_LIT8(KCloseBracket, ">");
+_LIT8(KGenaXml,
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+_LIT8(KGenaPropertysetStart,
+ "<e:propertyset xmlns:e=\"urn:schemas-upnp-org:event-1-0\">");
+_LIT8( KYes, "yes" );
+
+
+static const TInt KMessageTimeout = 5000000;//5 sec
+const TInt KMaxEventRate = 5000000;
+
+
+// CLASS DECLARATION
+/**
+* An interface to Subscriber Library.
+*
+* @since Series60 2.6
+*/
+class MTransactionObserver
+ {
+
+public:
+ /**
+ * A virtual function to be implemented in derived classes.
+ * It is called after completed transaction
+ * @param aComletedTransaction just completed transaction
+ * @since Series60 3.2
+ */
+ virtual void TransactionCompletedL( CUpnpHttpTransaction* aCompletedTranscation ) = 0;
+
+ };
+
+
+
+/**
+* This class handles event releated issues
+*
+*
+* @since Series60 3.2
+*/
+NONSHARABLE_CLASS( CUpnpEventController ): public CBase,
+ public MUpnpHttpClientObserver,
+ public MUpnpSubscriberLibraryObserver
+ {
+public:
+ // Constructors and destructor
+
+ /**
+ * Destructor.
+ */
+ ~CUpnpEventController();
+
+ /**
+ * Two-phased constructor.
+ */
+ static CUpnpEventController* NewL( CUpnpServiceImplementation& aServiceImpl );
+
+ /**
+ * Two-phased constructor.
+ */
+ static CUpnpEventController* NewLC( CUpnpServiceImplementation& aServiceImpl );
+
+public:
+ /**
+ * Sends inital event
+ */
+ void SendInitialNotification( );
+
+ /**
+ * Sends non-modereted event
+ */
+ void SendNonModeratedNotification( );
+
+ /**
+ * Sends moderated event
+ */
+ void SendModeratedNotification();
+
+ /**
+ * Sends message using httpclient
+ * @param aTransaction encapsulated httpmessage with event
+ */
+ void SendTransactionL( CUpnpHttpTransaction* aTranscation );
+
+ /**
+ * Handle subscribe/resubscribe messages
+ * @param aMessage http request
+ */
+ void SubscribeL( CUpnpGenaMessage* aMessage );
+
+ /**
+ * Handle unsubscribe messages
+ * @param aMessage http request
+ */
+ void UnSubscribeL( CUpnpGenaMessage* aMessage );
+
+ /**
+ * Handle unsubscribe messages
+ * @return TInt number of subscribers
+ */
+ TInt SubscribersAmount();
+
+
+/*from MUpnpHttpClientObserver*/
+public:
+ /**
+ * Imlements completed transaction handling
+ * @param comleted transaction
+ */
+ void ClientResponseRecivedLD( CUpnpHttpTransaction& aEndedTransaction );
+
+/*from MUpnpSubscriberLibraryObserver*/
+public:
+
+ /**
+ *
+ * @return all evented state variables
+ */
+ RPointerArray<CUpnpStateVariable>& EventedStateVariables();
+
+ /**
+ * Resume processing after removing subscriber
+ * @param aSubscriber just removed subscriber
+ * @param removed subscriber position in SubscriberLibrary
+ */
+ void SubscriberRemoved( CUpnpSubscriberLibraryElement* aSubscriber ,TInt aPos );
+
+private:
+
+ /**
+ * Constructor for performing 1st stage construction
+ */
+ CUpnpEventController( CUpnpServiceImplementation& aServiceImpl );
+
+ /**
+ * Constructor for performing 2nd stage construction
+ */
+ void ConstructL();
+
+
+private:
+ /*
+ * Cancel all pending transaction related wih particular subscriber
+ * @param aSid SID uniqe subscriber id
+ */
+ void CancelInvalidSessions( const TDesC8& aSid );
+
+ /*
+ * Checks if unsubscribe message has all header
+ * @param aMessage message to be checked
+ * return validation status
+ */
+ TUpnpErrorCode CheckHeaders( CUpnpGenaMessage* aMessage );
+
+ /*
+ * Generates a SID number for given, new subscriber
+ * @param aSubscriber new subscriber
+ */
+ void GenerateSidL( CUpnpSubscriberLibraryElement* aSubscriber );
+
+ /*
+ * Creates timeout header
+ * @param aTimeout timeout value
+ * @return header descriptor "Second-'aTimeout'"
+ */
+ HBufC8* TimerHeaderLC( const TDesC8& aTimeout );
+
+private:
+
+ /** Http engine*/
+ CUpnpHttpClientEngine* iHttpEngine; //owned
+
+ /** Store all pending transaction*/
+ RPointerArray<CUpnpHttpTransaction> iPendingTransactions; //owned
+
+
+ CUpnpServiceImplementation& iServiceImpl; //not owned
+
+ /**Non-moderated event queue manager */
+ CUpnpEventQueueManagerBase* iNonModQueue; //owned
+
+ /**Moderated event queue manager */
+ CUpnpEventQueueManagerBase* iModQueue; //owned
+
+ /**Initial event queue manager */
+ CUpnpEventQueueManagerBase* iInitialEventQueue; //owned
+
+ /**Store information about subscribers*/
+ CUpnpSubscriberLibrary* iSubscriberLibrary; //owned
+ };
+
+#endif // C_CUPNPEVENTCONTROLLER_H
+//end of file
\ No newline at end of file