--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnp/upnpstack/messagehandler/inc/upnpmessagehandlerengine.h Tue Feb 02 01:12:20 2010 +0200
@@ -0,0 +1,271 @@
+/** @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: Defines MessageHandlerEngine class
+ *
+ */
+
+#ifndef C_CUPNPMESSAGEHANDLERENGINE_H
+#define C_CUPNPMESSAGEHANDLERENGINE_H
+
+// INCLUDES
+#include <upnpnetworkeventobserver.h>
+#include "upnpdevicelibrary.h"
+#include "upnphttpmessage.h"
+#include "upnphttpserverobserver.h"
+#include "upnpssdpserverobserver.h"
+#include "upnpmessagehandlersession.h"
+#include "upnpmessagehandlerengineobserver.h"
+#include "upnpcompvariant.hrh"
+
+// LITERALS
+
+static const TInt KSSDPAddressLength=40;
+_LIT( KMessagehandlerPanic, "UPnP messagehandler Panic" );
+_LIT8( KEmptyMessage, " " );
+_LIT8( KMulticastPacket, " " );
+
+// FORWARD DECLARATIONS
+class CUpnpHttpServer;
+class CUpnpSsdpServer;
+class MMessageHandlerEngineObserver;
+class CUpnpMSearchTimer;
+class CUpnpConnectionManagerProxy;
+class CUpnpSsdpHandlerBase;
+class CUpnpSsdpHandlerUp;
+class CUpnpSsdpHandlerDown;
+
+#ifdef RD_UPNP_REMOTE_ACCESS
+class CUpnpIPFiltering;
+#endif
+
+// CLASS DECLARATION
+
+/*!
+ \brief The UPnP engine of Message Handler
+
+ The message handler is divided into three modules:
+ CUpnpMessageHandler (having the server functionality),
+ CUpnpMessageHandlerSession (having the session functionality) and
+ CUpnpMessageHandlerEngine (having the actual message handling engine).
+
+ Thus, this class represents the engine of the message handling.
+
+ */
+class CUpnpMessageHandlerEngine : public CBase,
+ public MUpnpDeviceLibraryObserver, public MUpnpSsdpServerObserver,
+ public MUpnpNetworkEventObserver
+ {
+private:
+ enum TMessagehandlerPanics
+ {
+ ENullDeviceLibrary,
+ ENullSsdpServer,
+ };
+public:
+
+ /**
+ A two-phased constructor function
+ @param aObserver to observe engine
+ @result A new instance of CUpnpMessageHandlerEngine
+ */
+ static CUpnpMessageHandlerEngine* NewL(
+ MMessageHandlerEngineObserver& aObserver );
+
+ /**
+ Destructor function
+ */
+ virtual ~CUpnpMessageHandlerEngine();
+
+public:
+
+ /**
+ Starts ssdp
+ @result error
+ */
+ TInt StartSsdpL();
+
+ /**
+ This function is called from SSDP server after receiving a SSDP message
+ @param aMessage The SSDP message that is just received
+ @result None.
+ */
+ void SsdpEventL( CUpnpSsdpMessage* aMessage );
+
+ /**
+ * Returns device library
+ */
+ CUpnpDeviceLibrary* DeviceLibrary();
+
+ /**
+ Adds a new local device to the device library
+ @param aDevice A structure containing indexes to the data buffer
+ @param aBuffer A data buffer containing the actual information
+ @result KErrNone or one of the system-wide error codes
+ */
+ TInt AddLocalDeviceL( TUpnpAddLocalDevice& aDevice, TDesC8& aBuffer );
+
+ /**
+ Removes a local device from the device library
+ @param aUuid UUID of the target device
+ @result None.
+ */
+ void RemoveLocalDeviceL( const TDesC8& aUuid, TBool aSilent );
+
+ /**
+ Adds a new local control point client
+ */
+ TInt AddLocalControlPoint();
+
+ /**
+ Removes a local control point client
+ */
+ TInt RemoveLocalControlPoint();
+
+ /**
+ It stops using filtering for a target device
+ @param aUuid UUID of the target device
+ @result None.
+ */
+ void StopFilteringDeviceL( const TDesC8& aUuid );
+
+ /**
+ Returns the device library elements in a pointer array
+ @result A pointer to an array containing pointers to the device library
+ elements
+ */
+ RPointerArray<CUpnpDeviceLibraryElement>& DeviceList();
+
+ /**
+ callback method
+ */
+ void InterfaceDown();
+
+public:
+ // From MUpnpDeviceLibraryObserver
+
+ /**
+ Implementation of MUpnpDeviceLibraryObserver::AdvertiseDevice).
+
+ Advertises a device using SSDP server to
+ send SSDP advertisements to the network.
+ @param aLive Tells whether to use ssdp:alive or ssdp:byebye
+ @param anElement The device to advertise
+ @result None.
+ */
+ void AdvertiseDeviceL( TInt aLive, CUpnpDeviceLibraryElement& aElement );
+
+ /**
+ Returns the id of the active IAP.
+ @result The id of the IAP
+ */
+ TInt ActiveIap() const;
+
+ /**
+ Makes a SSDP search.
+ @param aSearchString The SSDP search string, that is placed to the
+ ST header of the SSDP message.
+ @result None.
+ */
+ void SsdpSearchL( TDesC8& aSearchString, TDesC8& aMX );
+
+ /**
+ Inform observer that device list changed.
+ @result None.
+ */
+ void DeviceListChangedL();
+
+#ifdef RD_UPNP_REMOTE_ACCESS
+ void AddAddressL( const TInetAddr& aAddress );
+ void AddAddressL( const RMessage2& aMessage, const TDesC8& aRemoteName );
+ void RemoveAddressL( const TInetAddr& aAddress );
+ void RemoveAddressL( const RMessage2& aMessage, const TDesC8& aRemoteName );
+ void RemoveAll();
+ void StartIPFiltering();
+ void StopIPFiltering();
+ TBool IsIPFilteringStarted() const;
+ TBool IsIPAllowed( const TInetAddr& aAddress ) const;
+ void IPFilteringStatus( TInt& aListSize ) const;
+ const TDesC8& GetIPFilterList();
+#endif
+
+private: // from MUpnpNetworkEventObserver
+
+ /**
+ * It is called from bottom layer when network event occurs [callback method]
+ * @result None
+ */
+ void NetworkEvent( CUpnpNetworkEventBase* aEvent );
+
+private:
+
+ /**
+ Default constructor.
+ @param aObserver to observe engine
+ @param aHandle the message handler thread log handle
+ */
+ CUpnpMessageHandlerEngine( MMessageHandlerEngineObserver& aObserver );
+
+ /**
+ Default (leaving) constructor.
+ */
+ void ConstructL();
+
+ /**
+ Create session id property and signal id semaphore.
+ */
+ void CreateSessionIdPropertyL();
+
+ /**
+ * Callback function used to inform about the timer events
+ */
+ void TimerEventL( CUpnpNotifyTimer* aTimer );
+
+private:
+ // current state of ssdp servers
+ CUpnpSsdpHandlerBase* iCurrentSsdpHandler;
+
+ // ssdp up and runnig state handler
+ CUpnpSsdpHandlerUp* iSsdpHandlerUp;
+
+ // ssdp stopped state handler
+ CUpnpSsdpHandlerDown* iSsdpHandlerDown;
+
+ // The device library
+ CUpnpDeviceLibrary* iDeviceLibrary;
+
+ // The active socket server connection
+ RSocketServ iSocketServ;
+
+ // The MessageHandler observer
+ MMessageHandlerEngineObserver& iObserver;
+
+ // True if SSDP server is ready for shutdown
+ TBool iSsdpReadyForShutdown;
+
+ //Local control points counter
+ TInt iCPCounter;
+
+ // Object used for WLAN lost and address change events and getting local address
+ CUpnpConnectionManagerProxy *iConnectionManagerProxy;
+
+ // session id access semaphore
+ RSemaphore iAccessSemaphore;
+
+#ifdef RD_UPNP_REMOTE_ACCESS
+ //Local control points counter
+ CUpnpIPFiltering* iIPFilterRepository;
+#endif
+ };
+
+#endif // C_CUPNPMESSAGEHANDLERENGINE_H