upnp/upnpstack/serviceframework/src/upnpaction.cpp
changeset 0 f5a58ecadc66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upnp/upnpstack/serviceframework/src/upnpaction.cpp	Tue Feb 02 01:12:20 2010 +0200
@@ -0,0 +1,407 @@
+/** @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:  CUpnpAction
+ *
+ */
+
+// INCLUDE FILES
+#include "upnpaction.h"
+#include "upnpargument.h"
+#include "upnpstring.h"
+#include "upnpsoapmessage.h"
+#include "upnpservice.h"
+#define KLogFile _L("UPnPStack.txt")
+#include "upnpcustomlog.h"
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::CUpnpAction
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+
+CUpnpAction::CUpnpAction( CUpnpService& aParentService ) :
+    iParentService( aParentService )
+    {
+    iError = KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CUpnpAction::ConstructL( CUpnpAction& aAction )
+    {
+    RPointerArray<CUpnpArgument>& argumentList = aAction.ArgumentList();
+
+    for ( TInt index = 0; index < argumentList.Count(); index++ )
+        {
+        CUpnpArgument* arg = CUpnpArgument::NewL( *argumentList[index],
+            iParentService );
+        CleanupStack::PushL( arg );
+        iArguments.AppendL( arg );
+        CleanupStack::Pop( arg );
+        }
+
+    iName = aAction.Name().AllocL();
+    iDestinationPath = HBufC8::NewL( 0 );
+
+    iSessionId = CUpnpHttpMessage::NewSessionIdL();
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CUpnpAction* CUpnpAction::NewLC( CUpnpAction& aAction,
+    CUpnpService& aParentService )
+    {
+    CUpnpAction* self = new (ELeave) CUpnpAction( aParentService );
+
+    CleanupStack::PushL( self );
+    self->ConstructL( aAction );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::~CUpnpAction
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CUpnpAction::~CUpnpAction()
+    {
+    iArguments.ResetAndDestroy();
+    iArguments.Close();
+
+    delete iName;
+    delete iDestinationPath;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::SetArgumentL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CUpnpAction::SetArgumentL( const TDesC8& aName,
+    const TDesC8& aValue )
+    {
+    for ( TInt i = 0; i < iArguments.Count(); i++ )
+        {
+        CUpnpArgument* arg = iArguments[i];
+
+        if ( aName.Compare( arg->Name() ) == 0 )
+            {
+            arg->SetValueL( aValue );
+            return KErrNone;
+            }
+        }
+    return KErrBadName;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::ArgumentValue
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CUpnpAction::ArgumentValue( const TDesC8& aName )
+    {
+    for ( TInt i = 0; i < iArguments.Count(); i++ )
+        {
+        CUpnpArgument* arg = iArguments[i];
+
+        if ( aName.Compare( arg->Name() ) == 0 )
+            {
+            return arg->Value();
+            }
+        }
+    return KNullDesC8();
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::Argument
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CUpnpArgument* CUpnpAction::Argument( const TDesC8& aName )
+    {
+    for ( TInt i = 0; i < iArguments.Count(); i++ )
+        {
+        CUpnpArgument* arg = iArguments[i];
+
+        if ( aName.Compare( arg->Name() ) == 0 )
+            {
+            return arg;
+            }
+        }
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::SetDestinationPathL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpAction::SetDestinationPathL( const TDesC8& aDestination )
+    {
+    delete iDestinationPath;
+    iDestinationPath = NULL;
+    iDestinationPath = aDestination.AllocL();
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::DestinationPath
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CUpnpAction::DestinationPath()
+    {
+    return *iDestinationPath;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::SetSender
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpAction::SetSender( const TInetAddr & aSender )
+    {
+    iSender = aSender;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::Sender
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInetAddr& CUpnpAction::Sender()
+    {
+    return iSender;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::Name
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TDesC8& CUpnpAction::Name()
+    {
+    return *iName;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::ArgumentList
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RPointerArray<CUpnpArgument>& CUpnpAction::ArgumentList()
+    {
+    return iArguments;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::DestinationAddr
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInetAddr CUpnpAction::DestinationAddr() const
+    {
+    return iDestinationAddr;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::ArgumentType
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CUpnpAction::ArgumentType( const TDesC8 &aArgumentName )
+    {
+    for ( TInt i = 0; i < iArguments.Count(); i++ )
+        {
+        CUpnpArgument* arg = iArguments[i];
+
+        if ( aArgumentName.Compare( arg->Name() ) == 0 )
+            {
+            return arg->Type();
+            }
+        }
+
+    return EUndefined;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::ServiceType
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TDesC8& CUpnpAction::ServiceType()
+    {
+    return const_cast<TDesC8&>( iParentService.ServiceType() );
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::SessionId
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CUpnpAction::SessionId() const
+    {
+    return iSessionId;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::SessionId
+//
+// -----------------------------------------------------------------------------
+//
+void CUpnpAction::SetSessionId( TInt aId )
+    {
+    iSessionId = aId;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::SetDestinationAddr
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpAction::SetDestinationAddr( const TInetAddr & aAddr )
+    {
+    iDestinationAddr = aAddr;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::Error
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CUpnpAction::Error() const
+    {
+    return iError;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::Service
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CUpnpService& CUpnpAction::Service()
+    {
+    return iParentService;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::SetError
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpAction::SetError( TInt aError )
+    {
+    iError = aError;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::Local
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CUpnpAction::Local() const
+    {
+    return iLocal;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::SetLocal
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CUpnpAction::SetLocal( TBool aLocal )
+    {
+    iLocal = aLocal;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::NewL
+// for TESTS only
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CUpnpAction* CUpnpAction::NewL( const TDesC8& aActionName )
+    {
+    CUpnpAction* self = new (ELeave) CUpnpAction();
+    CleanupStack::PushL( self );
+    self->SetNameL( aActionName );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::NewL
+// -----------------------------------------------------------------------------
+//
+CUpnpAction* CUpnpAction::NewL( CUpnpService& aParentService )
+    {
+    CUpnpAction* self = new (ELeave) CUpnpAction( aParentService );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::NewL
+// -----------------------------------------------------------------------------
+//
+void CUpnpAction::SetNameL( const TDesC8& aName )
+    {
+    HBufC8* tmp = aName.AllocL();
+    delete iName;
+    iName = tmp;
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::NewL
+// -----------------------------------------------------------------------------
+//
+void CUpnpAction::AddArgumentL( CUpnpArgument& aAction )
+    {
+    iArguments.AppendL( &aAction );
+    }
+
+// -----------------------------------------------------------------------------
+// ConstructL
+// -----------------------------------------------------------------------------
+//
+void CUpnpAction::ConstructL()
+    {
+    iSessionId = CUpnpHttpMessage::NewSessionIdL();
+    iDestinationPath = HBufC8::NewL( 0 );
+    iName = HBufC8::NewL( 0 );
+    }
+
+// -----------------------------------------------------------------------------
+// CUpnpAction::CUpnpAction
+// for TESTS only. Object isn't completely valid. 
+// -----------------------------------------------------------------------------
+//
+CUpnpAction::CUpnpAction() 
+: iParentService(*(CUpnpService*)1)//tests only iParentService shouldn't be used
+    {
+    }
+
+// End of File