diff -r 000000000000 -r f5a58ecadc66 upnp/upnpstack/messagehandler/inc/upnpmessagehandlerengine.h --- /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 +#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& 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