--- /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