diff -r 000000000000 -r f5a58ecadc66 upnp/upnpstack/messagehandler/inc/upnpmessagehandlersession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upnp/upnpstack/messagehandler/inc/upnpmessagehandlersession.h Tue Feb 02 01:12:20 2010 +0200 @@ -0,0 +1,261 @@ +/** @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 MessageHandlerSession class + * + */ + +#ifndef C_CUPNPMESSAGEHANDLERSESSION_H +#define C_CUPNPMESSAGEHANDLERSESSION_H + +// INCLUDES + +#include + +#include "upnpmessagehandler.h" +#include "upnpcommonstructs.h" +#include "upnpmhcommon.h" +#include "upnpmessagehandlerobserver.h" + +static const TInt KMaxUuidLength=43; +// FORWARD DECLARATIONS + +class CUpnpHttpMessage; +class MMessageHandlerObserver; +class CUpnpMessageHandler; +class CUpnpMessageHandlerEngine; + +#ifdef RD_UPNP_REMOTE_ACCESS +class CUpnpIPFiltering; +#endif + +// CLASS DECLARATION + +/** + An instance of class CUpnpMessageHandlerSession is created for each client + */ + +class CUpnpMessageHandlerSession : public CSession2, + public MMessageHandlerObserver + { + +public: + // New methods + + /** + Create a CUpnpMessageHandlerSession object using two phase construction, + and return a pointer to the created object + @param aClient client's thread + @param aServer the message handler server + @param aEngine the message handler engine + @param aHandle the message handler thread log handle + @result pointer to new session + */ + static CUpnpMessageHandlerSession* NewL( CUpnpMessageHandler& aServer, + CUpnpMessageHandlerEngine& aEngine ); + + /** + Create a CUpnpMessageHandlerSession object using two phase construction, + and return a pointer to the created object + (leaving a pointer to the object on the cleanup stack) + @param aClient client's thread + @param aServer the message handler server + @param anEngine the message handler engine + @param aHandle the message handler thread log handle + @result pointer to new session + */ + static CUpnpMessageHandlerSession* NewLC( CUpnpMessageHandler& aServer, + CUpnpMessageHandlerEngine& anEngine ); + + /** + Destroy the object and release all memory objects + */ + virtual ~CUpnpMessageHandlerSession(); + + /** + Callback method + @result None + */ + void DeviceListChangeL(); + + /** + Cancells outstanding requests + @result None + */ + void CancelPendingRequests(); + +public: + // From CSession + TInt EventStartSsdpL(); + + /** + Called after a service request from client; from class CSession + @param aMessage message from client (containing requested operation and any data) + @result None. + */ + void ServiceL( const RMessage2& aMessage ); + +private: + // New methods + + /** + Is Ssdp stateted ? + */ + void EventCheckErrorL( const RMessage2& aMessage ); + + /** + Perform the first phase of two phase construction + @param aServer the message handler server + @param aEngine the message handler engine + @param aHandle the message handler thread log handle + @result None. + */ + CUpnpMessageHandlerSession( CUpnpMessageHandler& aServer, + CUpnpMessageHandlerEngine& anEngine ); + + /** + Perform the second phase construction of a CUpnpMessageHandlerSession object + @result None. + */ + void ConstructL(); + + /** + Causes the client thread to panic + @param panic code + */ + void PanicClient( const RMessage2& aMessage, TInt aPanic ) const; + +private: + + // functions for various events from client + + /** + This function is called when a dispatcher has requested that a local device + should be added to the device library. + @param aMessage The inter-process message we've got + @result None. + */ + void EventAddLocalDeviceL( const RMessage2& aMessage ); + + /** + This function is called when a dispatcher has requested that a local device + should be removed from the device library. + @param aMessage The inter-process message we've got + @result None. + */ + void EventRemoveLocalDeviceL( const RMessage2& aMessage, TBool aSilent ); + + /** + This function is called when a dispatcher has requested that a local control point + should be added. + */ + void EventAddLocalControlPoint( const RMessage2& aMessage ); + + /** + This function is called when a dispatcher has requested that a local control point + should be removed. + */ + void EventRemoveLocalControlPoint( const RMessage2& aMessage ); + + /** + This function is called when a dispatcher has requested that device notifications + should not be filtered by ssdp server. + */ + void EventStopFilteringDeviceL( const RMessage2& aMessage ); + + /** + This function is called when a dispatcher has requested that it would like + to get a list of updated devices. This is the second phase of device list update. + @param aMessage The inter-process message we've got + @result None. + */ + void EventGetDeviceListL( const RMessage2& aMessage ); + + /** + This function is called when a dispatcher has requested that it would like + to get the actual list of updated devices; this is the first phase of device + list update. + @param aMessage The inter-process message we've got + @result None. + */ + void EventGetDeviceListSizeL( const RMessage2& aMessage ); + + /** + This function is called when a dispatcher has requested that it would like + to get the id of the active iap. + @param aMessage The inter-process message we've got + @result None. + */ + void EventActiveIapL( const RMessage2& aMessage ) const; + + /** + This function is called when a dispatcher has requested that a ssdp search should be done. + @param aMessage The inter-process message we've got + @result None. + */ + void EventSsdpSearchL( const RMessage2& aMessage ); + + void CompletePendingRequest(); + + void CopyMessage( RMessage2& aMessage ); + + void EventAddFilterAddrByIpL( const RMessage2& aMessage ); + void EventAddFilterAddrByHostnameL( const RMessage2& aMessage ); + void EventRemoveFilterAddrByIpL( const RMessage2& aMessage ); + void EventRemoveFilterAddrByHostnameL( const RMessage2& aMessage ); + void EventRemoveAllIPsAddressesL( const RMessage2& aMessage ); + TBool EventIsIPAddressAllowedL( const RMessage2& aMessage ); + void EventSubscriveIPListChanges( RMessage2& aMessage ); + void EventCancelIPListSubscription( const RMessage2& aMessage ); + void EventGetIPFilterListL( const RMessage2& aMessage ); + void IPListChange();//from observer + +private: + + /* @var iAwaitingUpdateDevices This pointer is used temporarily during device list updates */ + TUpnpDevice* iAwaitingUpdateDevices; + + /* @var iAwaitingUpdateServices This pointer is used temporarily during device list updates */ + TUpnpService* iAwaitingUpdateServices; + + /* @var iSize A variable that is used temporarily during device list updates */ + TUpnpGetDeviceListSize iSize; + + /* @var iServer Reference to the server (message handler) */ + CUpnpMessageHandler& iMessageHandler; + + /* @var iEngine Reference to the message handler engine */ + CUpnpMessageHandlerEngine& iEngine; + + // @var iDeviceListSizeMessage Reference to a DeviceListSizeMessage used for responding as device list is updated. + // IMPORTANT: This variable is not owned by this module + RMessage2 iDeviceListSizeMessage; + +#ifdef RD_UPNP_REMOTE_ACCESS + /*******IPFiltering*************/ + RMessage2 iIPListSizeMessage; + TInt iSeqNo; + /*******************************/ +#endif + + TBool iMoreNewDevices; + TBool iDeviceListSizeRequested; + TInt iOldId; + + /* @var iAddedDevices Devices that have been added thru this Message Handler session. If the session + is disconnected, devices added thru this session are also removed. This array contains the UUIDs + of devices added. */ + CDesC8ArrayFlat iAddedDevices; + }; + +#endif // C_CUPNPMESSAGEHANDLERSESSION_H