upnp/upnpstack/serviceframework/src/upnpdispatcher.cpp
changeset 0 f5a58ecadc66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upnp/upnpstack/serviceframework/src/upnpdispatcher.cpp	Tue Feb 02 01:12:20 2010 +0200
@@ -0,0 +1,370 @@
+/** @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:  Message dispatcher
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32svr.h>
+#include "upnpdispatcher.pan"
+#include "upnpdispatcher.h"
+#include "upnpdiscoveryobserver.h"
+#include "upnpdispatcherengine.h"
+#include "upnpstring.h"
+#include "upnpsettings.h"
+#include "upnpcustomlog.h"
+
+#ifdef _DEBUG
+#define KLogFile _L("UPnPStack.txt")
+#endif
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::CUpnpDispatcher
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CUpnpDispatcher::CUpnpDispatcher( MUpnpDiscoveryObserver* aParent)
+    : iParent( aParent )
+{
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CUpnpDispatcher::ConstructL( )
+    {
+    //  LOGSH(iHandle, "Dispatcher::ConstructL");
+
+    iEngine = CUpnpDispatcherEngine::NewL( *this );
+    iUpdateId = 0;
+
+    iEngine->UpdateDevicesL(iUpdateId);
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CUpnpDispatcher* CUpnpDispatcher::NewL( MUpnpDiscoveryObserver* aParent )
+{
+    CUpnpDispatcher* self = NewLC( aParent );
+    CleanupStack::Pop( self );
+    return( self );
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CUpnpDispatcher* CUpnpDispatcher::NewLC( MUpnpDiscoveryObserver* aParent )
+{
+    CUpnpDispatcher* self = new (ELeave) CUpnpDispatcher( aParent );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+
+    if( aParent )
+        {
+        self->StartHttpServerL( EFalse , KRandomPort );
+        }
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::~CUpnpDispatcher
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CUpnpDispatcher::~CUpnpDispatcher()
+{
+    delete iEngine;
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::DeviceListReceivedL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CUpnpDispatcher::DeviceListReceivedL(TInt aUpdateId)
+{
+    //LOGSH( iHandle, "Dispatcher DeviceListReceived");
+    UpdateDevicesL(aUpdateId);
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::AddCustomer
+// Adds a customer to this Dispatcher.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpDispatcher::AddCustomer( const MUpnpDispatcherCustomer& aCustomer )
+{
+    //LOGSH( iHandle, "Dispatcher AddCustomer");
+    TRAP_IGNORE(AddCustomerL(aCustomer, ETrue ));
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::RemoveCustomer
+// Removes a customer from Dispatcher.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpDispatcher::RemoveCustomer( const MUpnpDispatcherCustomer& aCustomer )
+{
+    RemoveCustomer(aCustomer, ETrue);
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::AddCustomer
+// Adds a customer to this Dispatcher.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpDispatcher::AddCustomerL( const MUpnpDispatcherCustomer& aCustomer, TBool aIsCP)
+{
+    //LOGSH( iHandle, "Dispatcher AddCustomer");
+    iEngine->AddCustomer( aCustomer );
+    if (aIsCP)
+        {
+        iEngine->AddControlPointClientL( );
+        }
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::RemoveCustomer
+// Removes a customer from Dispatcher.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpDispatcher::RemoveCustomer( const MUpnpDispatcherCustomer& aCustomer,
+                                               TBool aIsCP)
+{
+    LOGS1("CUpnpDispatcher::RemoveCustomer 0x%x", &aCustomer);
+    iEngine->RemoveCustomer( aCustomer );
+    if ( aIsCP )
+        {
+        TRAP_IGNORE(iEngine->RemoveControlPointClientL( ));
+        }
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::SendMessageL
+// Sends a message using Engine's HTTP server,
+// if device is local (third param), used local sending feature, type of message has to be EAction
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpDispatcher::SendMessageL( CUpnpHttpMessage* aMessage,
+                                             MUpnpDispatcherCustomer& aCustomer ,
+                                             TBool /*aIsLocal*/ )
+{
+    //LOGSH( iHandle, "Dispatcher SendMessageL");
+
+    TPtrC8 path(0,0);
+    if (iParent != NULL)
+        {
+        path.Set(iParent->Path());
+        }
+
+
+    HBufC8* wholePath = HBufC8::NewLC( path.Length()
+                                       + 1
+                                       + aCustomer.Path().Length() );
+    TPtr8 ptr = wholePath->Des();
+    ptr.Append( path );
+    ptr.Append( UpnpString::KSlash() );
+    ptr.Append( aCustomer.Path() );
+
+    if ( aMessage )
+    {
+        aMessage->SetSenderPathL( *wholePath );
+        iEngine->SendMessageL( aMessage );
+    }
+
+    CleanupStack::PopAndDestroy(wholePath);
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::UpdateDevicesL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpDispatcher::UpdateDevicesL( TInt aNewId )
+    {
+
+    //LOGSH( iHandle, "Dispatcher UpdateDevicesL");
+    if ( iUpdateId != aNewId )
+        {
+        // Go through the new devices and add them inform
+        // the Control Point of the new devices?
+        const RPointerArray<CUpnpDevice>& newDevices = iEngine->NewDevices();
+        for ( TInt i = 0; i < newDevices.Count(); i++ )
+            {
+            CUpnpDevice* dev = newDevices[i];
+
+            if ( iParent != NULL )
+                {
+
+                if ( dev->Alive() )
+                    {
+                    iParent->DeviceFoundL( *dev );
+                    }
+                else
+                    {
+                    iParent->DeviceLostL( *dev );
+                    }
+                }
+
+            }
+        iEngine->RemoveDevices();
+
+        iUpdateId = aNewId;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::AddLocalDeviceL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpDispatcher::AddLocalDeviceL( const TDesC8& aUuid,
+                                                const TDesC8& aDeviceType,
+                                                const TDesC8& aDescriptionPath,
+                                                const CDesC8Array& aServices,
+                                                const TBool aIsRootDevice )
+{
+    //LOGSH( iHandle, "Dispatcher AddLocalDeviceL");
+    iEngine->AddLocalDeviceL( aUuid, aDeviceType, aDescriptionPath, aServices, aIsRootDevice );
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::RemoveLocalDeviceL
+// -----------------------------------------------------------------------------
+//
+void CUpnpDispatcher::RemoveLocalDeviceL( const TDesC8& aUuid, TBool aSilent )
+{
+    //LOGSH( iHandle, "Dispatcher RemoveLocalDeviceL");
+    iEngine->RemoveLocalDeviceL( aUuid, aSilent );
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::SearchL
+// Sends a SSDP search with given string.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpDispatcher::SearchL( const TDesC8& aSearchString )
+{
+    iEngine->SsdpSearchL( aSearchString );
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::StopFilteringL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpDispatcher::StopFilteringL( const TDesC8& aUuids )
+{
+    iEngine->SsdpStopFilteringL( aUuids );
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::SearchL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpDispatcher::SearchL( const TDesC16& aSearchString )
+{
+    //LOGSH( iHandle, "Dispatcher SearchL");
+    HBufC8* buf = UpnpString::FromUnicodeL( aSearchString );
+    SearchL( *buf );
+    delete buf;
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::HttpServerAddressL
+// Returns the HTTP servers IP address.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInetAddr CUpnpDispatcher::HttpServerAddress()
+    {
+    return iEngine->HttpServerAddress();
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::MacAddressL
+// Returns the MAC address of HTTP server.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+const HBufC8* CUpnpDispatcher::MacAddressL()
+{
+    //LOGSH( iHandle, "Dispatcher MacAddressL");
+    return iEngine->MacAddressL();
+}
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::SetTransactionCreator
+// -----------------------------------------------------------------------------
+//
+void CUpnpDispatcher::SetTransactionCreator( 
+          MUpnpHttpServerTransactionCreator* aTransactionCreator )
+    {
+    iEngine->SetTransactionCreator( aTransactionCreator );
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::StartHttpServerL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpDispatcher::StartHttpServerL( TBool aRegister , const TInt aPort )
+    {
+    iEngine->StartHttpServerL( aRegister , aPort );
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpDispatcher::StopHttpServerL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpDispatcher::StopHttpServer()
+    {
+    iEngine->StopHttpServer();
+    }
+
+EXPORT_C void CUpnpDispatcher::StartIPFilteringL( )
+    {
+    #ifdef RD_UPNP_REMOTE_ACCESS
+    iEngine->HttpServer()->StartIPFilteringL();
+    #endif
+    }
+
+EXPORT_C void CUpnpDispatcher::StopIPFiltering( )
+    {
+    #ifdef RD_UPNP_REMOTE_ACCESS
+    iEngine->HttpServer()->StopIPFiltering( );
+    #endif
+    }
+
+// End of File