diff -r 000000000000 -r 2e3d3ce01487 contextframework/cfw/src/cfclient/cfactionservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contextframework/cfw/src/cfclient/cfactionservice.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,189 @@ +/* +* Copyright (c) 2008-2008 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: CCFActionService class implementation. +* +*/ + + +// SYSTEM INCLUDES +#include + +// USER INCLUDES +#include "cfactionservice.h" +#include "cftrace.h" +#include "cfcommon.h" +#include "CFClientSession.h" +#include "CFActionSubscriptionImpl.h" +#include "CFActionSubscriptionListener.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// C++ constructor. +// --------------------------------------------------------------------------- +// +CCFActionService::CCFActionService( RCFClientSession& aSession, + MCFListener& aListener ) : + CCFServiceBase( CCFServiceBase::ECFActionService, aSession, aListener ) + { + FUNC_LOG; + } + +// --------------------------------------------------------------------------- +// Symbian 2nd phase constructor. +// --------------------------------------------------------------------------- +// +void CCFActionService::ConstructL( ) + { + FUNC_LOG; + + // Create action subscription listener + iActionSubscriptionListener = CCFActionSubscriptionListener::NewL( + iListener, + iSession ); + } + +// --------------------------------------------------------------------------- +// Symbian two phased constructor. +// --------------------------------------------------------------------------- +// +CCFActionService* CCFActionService::NewL( RCFClientSession& aSession, + MCFListener& aListener ) + { + FUNC_LOG; + + CCFActionService* self = CCFActionService::NewLC( aSession, aListener ); + CleanupStack::Pop ( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Symbian two phased constructor. +// Leaves pointer in the cleanup stack. +// --------------------------------------------------------------------------- +// +CCFActionService* CCFActionService::NewLC( RCFClientSession& aSession, + MCFListener& aListener ) + { + FUNC_LOG; + + CCFActionService* self = new( ELeave ) CCFActionService( + aSession, + aListener ); + CleanupStack::PushL ( self ); + self->ConstructL( ); + return self; + } + +// --------------------------------------------------------------------------- +// C++ destructor. +// --------------------------------------------------------------------------- +// +CCFActionService::~CCFActionService( ) + { + FUNC_LOG; + + delete iActionSubscriptionListener; + } + +//---------------------------------------------------------------------------- +// CCFActionService::SubscribeActionL +//---------------------------------------------------------------------------- +// +void CCFActionService::SubscribeActionL( CCFActionSubscription& aSubscription ) + { + FUNC_LOG; + + TInt err = KErrNone; + + // Stream subscription + HBufC8* buffer = WriteStreamActionSubscriptionLC( aSubscription ); + TIpcArgs args( buffer ); + err = iSession.SendSync( ESubscribeAction, args ); + CleanupStack::PopAndDestroy( buffer ); + + User::LeaveIfError( err ); + + if( err == KErrNone ) + { + if( !iActionSubscriptionListener->IsActive() ) + { + // Activate listening + iActionSubscriptionListener->RequestActionIndication(); + } + } + } + +//---------------------------------------------------------------------------- +// CCFActionService::UnsubscribeActionL +//---------------------------------------------------------------------------- +// +void CCFActionService::UnsubscribeActionL( + CCFActionSubscription& aSubscription ) + { + FUNC_LOG; + + TInt err = KErrNone; + + // Stream subscription + HBufC8* buffer = WriteStreamActionSubscriptionLC( aSubscription ); + TIpcArgs args( buffer ); + err = iSession.SendSync( EUnsubscribeAction, args ); + CleanupStack::PopAndDestroy( buffer ); + + User::LeaveIfError( err ); + } + +//---------------------------------------------------------------------------- +// CCFActionService::DefineAction +//---------------------------------------------------------------------------- +// +TInt CCFActionService::DefineAction( const TDesC& aActionIdentifier, + const TSecurityPolicy& aSecurityPolicy ) + { + FUNC_LOG; + + TSecurityPolicyBuf secPolicyBuf( aSecurityPolicy ); + TIpcArgs args( &aActionIdentifier, &secPolicyBuf ); + TInt err = iSession.SendSync( EDefineAction, args ); + + return err; + } + +//---------------------------------------------------------------------------- +// CCFActionService::WriteStreamActionSubscriptionLC +//---------------------------------------------------------------------------- +// +HBufC8* CCFActionService::WriteStreamActionSubscriptionLC( + CCFActionSubscription& aSubscription ) + { + FUNC_LOG; + + CCFActionSubscriptionImpl& subscription = + static_cast( aSubscription ); + + HBufC8* buffer = HBufC8::NewLC( subscription.Size() ); + TPtr8 bufferPtr = buffer->Des(); + + RDesWriteStream stream( bufferPtr ); + stream.PushL(); + subscription.ExternalizeL( stream ); + + // Cleanup + CleanupStack::PopAndDestroy( &stream ); + + return buffer; + } + +// End of file