phoneclientserver/phoneserver/Src/CommandHandler/CPhSrvSubSessionCommandHandlerNotify.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneclientserver/phoneserver/Src/CommandHandler/CPhSrvSubSessionCommandHandlerNotify.cpp Tue Feb 02 01:11:09 2010 +0200
@@ -0,0 +1,281 @@
+/*
+* Copyright (c) 2003-2004 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: Sub Session Command handler notify.
+* The stub version of this file can be found from file
+* CPhSrvSubSessionCommandHandlerNotifyStub.cpp
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CPhSrvSubSessionCommandHandlerNotify.h"
+#include "CPhSrvSession.h"
+#include "CPhSrvServer.h"
+#include <PhCltTypes.h>
+#include "MPhSrvComHandNegotiators.h"
+
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// CPhSrvSubSessionCommandHandlerNotify::CPhSrvSubSessionCommandHandlerNotify
+//
+// Constructor.
+// -----------------------------------------------------------------------------
+//
+CPhSrvSubSessionCommandHandlerNotify::CPhSrvSubSessionCommandHandlerNotify(
+ CPhSrvSession& aSession )
+: CPhSrvSubSessionBase( aSession, EPhSrvSubSessionTypeComHandNotify )
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPhSrvSubSessionCommandHandlerNotify::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPhSrvSubSessionBase*
+ CPhSrvSubSessionCommandHandlerNotify::NewL(
+ CPhSrvSession& aSession )
+ {
+ // Just to make sure that the destructor does not leave.
+ aSession.PhoneServer().ComHandNegotiatorL();
+
+ CPhSrvSubSessionBase* self =
+ new( ELeave ) CPhSrvSubSessionCommandHandlerNotify( aSession );
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPhSrvSubSessionCommandHandlerNotify::~CPhSrvSubSessionCommandHandlerNotify
+//
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CPhSrvSubSessionCommandHandlerNotify::~CPhSrvSubSessionCommandHandlerNotify()
+ {
+ // Inform that we are not ready to process requests anymore.
+ if ( PhoneSession().PhoneServer().IsComHandNegotiator() )
+ {
+ PhoneSession().
+ PhoneServer().
+ ComHandNegotiator().
+ SetNegotiatorReadyRequestCancel( *this );
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPhSrvSubSessionCommandHandlerNotify::PhSrvMessageDecoderCanProcessMessage
+//
+// Framework function. Returns ETrue for the op codes that
+// this subsession can handle.
+// -----------------------------------------------------------------------------
+//
+TBool
+ CPhSrvSubSessionCommandHandlerNotify::PhSrvMessageDecoderCanProcessMessage(
+ TInt aFunction )
+ {
+ switch( aFunction )
+ {
+ case EPhoneServerComHandNotifySubSessionClose:
+ case EPhoneServerComHandNotifySubSessionComHandRequest:
+ case EPhoneServerComHandNotifySubSessionComHandRequestCancel:
+ case EPhoneServerComHandNotifySubSessionReportComHandResult:
+ return ETrue;
+
+ default:
+ return EFalse;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPhSrvSubSessionCommandHandlerNotify::PhSrvMessageProcessorHandleMessageL
+//
+// Framework function. Handle any op-codes here.
+// -----------------------------------------------------------------------------
+//
+void CPhSrvSubSessionCommandHandlerNotify::PhSrvMessageProcessorHandleMessageL(
+ const RMessage2& aMessage )
+ {
+ switch( aMessage.Function() )
+ {
+ case EPhoneServerComHandNotifySubSessionClose:
+ CmdSubSessionClose( aMessage );
+ break;
+
+ case EPhoneServerComHandNotifySubSessionComHandRequest:
+ CmdSubSessionComHandNotifyRequestL( aMessage );
+ break;
+
+ case EPhoneServerComHandNotifySubSessionComHandRequestCancel:
+ CmdSubSessionComHandNotifyRequestCancelL( aMessage );
+ break;
+
+ case EPhoneServerComHandNotifySubSessionReportComHandResult:
+ CmdSubSessionComHandNotifyReportL( aMessage );
+ break;
+
+ default:
+ PhoneSession().PanicClient(
+ aMessage,
+ EPhCltServerInitiatedPanicInvalidRequest );
+ break;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPhSrvSubSessionCommandHandlerNotify::InitiatorMakeAsynchronousComHandRequest
+//
+// Called by the command handler negotiator when it wants this object to
+// initiate a command handler request (on behalf of the external interface).
+// -----------------------------------------------------------------------------
+//
+void CPhSrvSubSessionCommandHandlerNotify::
+ InitiatorMakeAsynchronousComHandRequest(
+ const TPhCltComHandCommandParameters& aParams )
+ {
+ // Package up the data to send
+ TPckgC< TPhCltComHandCommandParameters >
+ comHandDetails( aParams );
+
+ // Write to command handler notifier's address space
+ PhoneSession().Write(
+ iPendingComHandRequestPointer,
+ 0,
+ comHandDetails );
+
+ // Indicate that the command handler notifier should try to perform the
+ // request.
+ if ( !iPendingComHandRequestPointer.IsNull() )
+ {
+ iPendingComHandRequestPointer.Complete( KErrNone );
+ }
+ iHavePendingComHandRequestPointer = EFalse;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPhSrvSubSessionCommandHandlerNotify::InitiatorIsReadyToPerformRequest
+//
+// Does this session have a pending request?
+// -----------------------------------------------------------------------------
+//
+TBool CPhSrvSubSessionCommandHandlerNotify::InitiatorIsReadyToPerformRequest()
+ const
+ {
+ return iHavePendingComHandRequestPointer;
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CPhSrvSubSessionCommandHandlerNotify::CmdSubSessionClose
+//
+// Close the sub-session.
+// -----------------------------------------------------------------------------
+//
+void CPhSrvSubSessionCommandHandlerNotify::CmdSubSessionClose(
+ const RMessage2& aMessage )
+ {
+ PhoneSession().CloseSubSession( aMessage );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPhSrvSubSessionCommandHandlerNotify::CmdSubSessionComHandNotifyRequestL
+//
+// Handle command handler notifier's request.
+// -----------------------------------------------------------------------------
+//
+void CPhSrvSubSessionCommandHandlerNotify::CmdSubSessionComHandNotifyRequestL(
+ const RMessage2& aMessage )
+ {
+ // Update our pending request pointer if it's not already set
+ if ( iHavePendingComHandRequestPointer )
+ {
+ PhoneSession().PanicClient(
+ aMessage,
+ EPhCltServerInitiatedPanicRequestAlreadyActive );
+ }
+ else
+ {
+ iPendingComHandRequestPointer = aMessage;
+ iHavePendingComHandRequestPointer = ETrue;
+
+ // The phone app engine is ready to process a command handler request.
+ // Tell the negotiator that we're ready to process any pending
+ // requests.
+ MPhSrvComHandNegotiator& comHandNegotiator =
+ PhoneSession().PhoneServer().ComHandNegotiatorL();
+ comHandNegotiator.SetNegotiatorReadyRequestL( *this );
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPhSrvSubSessionCommandHandlerNotify::
+// CmdSubSessionComHandNotifyRequestCancelL
+//
+// Handle command handler notifier's request cancel.
+// -----------------------------------------------------------------------------
+//
+void CPhSrvSubSessionCommandHandlerNotify::
+ CmdSubSessionComHandNotifyRequestCancelL(
+ const RMessage2& aMessage )
+ {
+ if ( iHavePendingComHandRequestPointer )
+ {
+ iPendingComHandRequestPointer.Complete( KErrCancel );
+ iHavePendingComHandRequestPointer = EFalse;
+ }
+
+ aMessage.Complete( KErrNone );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPhSrvSubSessionCommandHandlerNotify::CmdSubSessionComHandNotifyReportL
+//
+// Tell the result of the request execution to the command handler client.
+// -----------------------------------------------------------------------------
+//
+void CPhSrvSubSessionCommandHandlerNotify::CmdSubSessionComHandNotifyReportL(
+ const RMessage2& aMessage )
+ {
+ // Get result
+ const TPhCltPhoneResults result =
+ static_cast< TPhCltPhoneResults >( aMessage.Int0() );
+
+ // Tell command handler negotiator of result
+ MPhSrvComHandNegotiator& comHandNegotiator =
+ PhoneSession().PhoneServer().ComHandNegotiatorL();
+ comHandNegotiator.SetNegotiatorAttemptedRequestResponseValue( result );
+
+ // Complete the request
+ aMessage.Complete( KErrNone );
+ }
+
+
+// End of File