phoneclientserver/phoneserver/Src/Standard/Standard_Aiw/CPhSrvCallRequestManager.cpp
--- a/phoneclientserver/phoneserver/Src/Standard/Standard_Aiw/CPhSrvCallRequestManager.cpp Mon Aug 23 15:50:31 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,291 +0,0 @@
-/*
-* Copyright (c) 2002-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: Call Request Manager.
-*
-*/
-
-
-
-// INCLUDES
-#include "cphsrvcallrequestmanager.h"
-#include "cphsrvcallrequest.h"
-#include "cphsrvsubsessionbase.h"
-#include "phsrvutils.h"
-
-
-// CONSTANTS
-
-// The size of the Notification manager storage.
-const TInt KPhSrvNotificationManagerPendingCallGranularity = 4;
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CPhSrvCallRequestManager::CPhSrvCallRequestManager
-//
-// C++ constructor.
-// -----------------------------------------------------------------------------
-//
-CPhSrvCallRequestManager::CPhSrvCallRequestManager()
- {
- }
-
-
-// -----------------------------------------------------------------------------
-// CPhSrvCallRequestManager::~CPhSrvCallRequestManager
-//
-// C++ destructor.
-// -----------------------------------------------------------------------------
-//
-CPhSrvCallRequestManager::~CPhSrvCallRequestManager()
- {
- if ( iOutstandingRequestsCall )
- {
- iOutstandingRequestsCall->ResetAndDestroy();
- iOutstandingRequestsCall->Close();
- }
- delete iOutstandingRequestsCall;
- }
-
-
-// -----------------------------------------------------------------------------
-// CPhSrvCallRequestManager::ConstructL
-//
-// Complete construction.
-// -----------------------------------------------------------------------------
-//
-void CPhSrvCallRequestManager::ConstructL()
- {
- iOutstandingRequestsCall = new ( ELeave ) RPointerArray<
- CPhSrvCallRequest >( KPhSrvNotificationManagerPendingCallGranularity );
-
- CPhSrvCallRequest* emergencyCallRequest = CPhSrvCallRequest::NewL();
- CleanupStack::PushL( emergencyCallRequest );
- User::LeaveIfError(
- iOutstandingRequestsCall->Append( emergencyCallRequest ) );
- CleanupStack::Pop(); // emergencyCallRequest
- }
-
-
-// -----------------------------------------------------------------------------
-// CPhSrvCallRequestManager::NegotiatorDialL
-//
-// Initiate a dial request - called by the external call
-// interface.
-// -----------------------------------------------------------------------------
-//
-void CPhSrvCallRequestManager::NegotiatorDialL(
- const RMessage2& aMessage,
- CPhCltExtPhoneDialData& aArgs,
- CPhSrvSubSessionBase& aSubSession )
- {
- // If we have no registered initiator then we can't make a call.
- if ( !iCallInitiator )
- {
- User::Leave( KErrNotReady );
- }
-
- if ( aArgs.TelephoneNumber() == KPhSrvUsedEmergencyCallNumber &&
- ( *iOutstandingRequestsCall )[0]->SubSessionHandle() == 0 )
- {
- ( *iOutstandingRequestsCall )[0]->UpdateEmercgencyCall(
- aMessage,
- aArgs,
- aSubSession.SubSessionUniqueHandle() );
- }
- else
- {
- // Create pending request
- CPhSrvCallRequest* request = CPhSrvCallRequest::NewLC(
- aMessage,
- aArgs,
- aSubSession.SubSessionUniqueHandle() );
-
- User::LeaveIfError( iOutstandingRequestsCall->Append( request ) );
- CleanupStack::Pop( request );
- }
-
- // Now see if the call notifier (initiator) is ready
- if ( iCallInitiator->InitiatorIsReadyToMakeCall() )
- {
- // Ask the call initiator to make the call (basically completes the
- //phone app engine's outstanding call notifier request).
- iCallInitiator->InitiatorMakeAsynchronousCallL( aArgs );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CPhSrvCallRequestManager::NegotiatorDialCancel
-//
-// Cancel a pending dial request.
-// -----------------------------------------------------------------------------
-//
-void CPhSrvCallRequestManager::NegotiatorDialCancelL(
- CPhSrvSubSessionBase& aSubSession )
- {
- // Obtain the subsessions handle
- const TInt handle = aSubSession.SubSessionUniqueHandle();
-
- // Now look for any pending requests that match.
- const TInt count = iOutstandingRequestsCall->Count();
- for( TInt i = 0; i < count; i++ )
- {
- CPhSrvCallRequest* entry = ( *iOutstandingRequestsCall )[i];
- if ( entry->SubSessionHandle() == handle )
- {
- // Found matching entry, so cancel it and clean up
- if ( i == 0 ) // 0 stands for emergency call
- {
- entry->Cancel();
- entry->ClearEmergencyCall();
- }
- else
- {
- iOutstandingRequestsCall->Remove( i );
- entry->Cancel();
- delete entry;
- }
-
- // If we have more than one item in the queue, then we
- // try and fire of the next item here.
- if ( iCallInitiator->InitiatorIsReadyToMakeCall() &&
- ( iOutstandingRequestsCall->Count() > 1 ||
- ( *iOutstandingRequestsCall )[0]->SubSessionHandle() != 0 ) )
- {
- // Get the call at the top of the list (head of the queue)
- CPhSrvCallRequest* head = NULL;
- if ( ( *iOutstandingRequestsCall )[0]->SubSessionHandle() != 0 )
- {
- head = ( *iOutstandingRequestsCall )[0];
- }
- else
- {
- head = ( *iOutstandingRequestsCall )[1];
- }
-
-
- iCallInitiator->InitiatorMakeAsynchronousCallL(
- head->CallArguments() );
- }
-
- return;
- }
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CPhSrvCallRequestManager::SetNegotiatorReadyCall
-//
-// Updates the negotiator so that it knows if the notifier
-// session is able to make a call.
-// -----------------------------------------------------------------------------
-//
-void CPhSrvCallRequestManager::SetNegotiatorReadyCallL(
- MPhSrvInitiatorCall& aInitiator )
- {
- // There mustn't already be a call initiator, or the existing call
- // initiator must be the same as the new one (otherwise, panic).
- __ASSERT_ALWAYS( !iCallInitiator || &aInitiator == iCallInitiator,
- PhoneServerUtils::Panic(
- EPhoneServerPanicExistingCallInitiatorFault ) );
-
- // Update our pointer
- iCallInitiator = &aInitiator;
-
- // If we have more than one item in the queue, then we
- // try and fire of the next item here.
- if ( iCallInitiator->InitiatorIsReadyToMakeCall() &&
- ( iOutstandingRequestsCall->Count() > 1 ||
- ( *iOutstandingRequestsCall )[0]->SubSessionHandle() != 0 ) )
- {
- // Get the call at the top of the list (head of the queue)
- CPhSrvCallRequest* head = NULL;
- if ( ( *iOutstandingRequestsCall )[0]->SubSessionHandle() != 0 )
- {
- head = ( *iOutstandingRequestsCall )[0];
- }
- else
- {
- head = ( *iOutstandingRequestsCall )[1];
- }
-
- iCallInitiator->InitiatorMakeAsynchronousCallL(
- head->CallArguments() );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CPhSrvCallRequestManager::SetNegotiatorReadyCallCancel
-//
-// Indicates that the initiator is no longer available
-// -----------------------------------------------------------------------------
-//
-void CPhSrvCallRequestManager::SetNegotiatorReadyCallCancel(
- MPhSrvInitiatorCall& aInitiator )
- {
- if ( iCallInitiator && iCallInitiator == &aInitiator )
- {
- iCallInitiator = NULL;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CPhSrvCallRequestManager::SetNegotiatorAttemptedCallResponseValue
-//
-// Handle a response from the phone app engine - this is the
-// result of attempting to make a call (based upon a previous
-// clients external call request)
-// -----------------------------------------------------------------------------
-//
-void CPhSrvCallRequestManager::SetNegotiatorAttemptedCallResponseValue(
- TPhCltPhoneResults aResult )
- {
- if ( iOutstandingRequestsCall->Count() > 1 ||
- ( *iOutstandingRequestsCall )[0]->SubSessionHandle() != 0 )
- {
- // Get the first item in the list - this is the oldest, and has the
- // details of the call we had previously initiated.
- CPhSrvCallRequest* head = NULL;
- if ( ( *iOutstandingRequestsCall )[0]->SubSessionHandle() != 0 )
- {
- head = ( *iOutstandingRequestsCall )[0];
- }
- else
- {
- head = ( *iOutstandingRequestsCall )[1];
- }
- // Complete the request so that the external call client knows the
- // result of the call attempt
- head->InformOfCallAttemptResult( aResult );
-
- // Delete the pending request (now that it's been processed) and tidy
- // up
- if ( ( *iOutstandingRequestsCall )[0]->SubSessionHandle() != 0 )
- {
- ( *iOutstandingRequestsCall )[0]->ClearEmergencyCall();
- }
- else
- {
- iOutstandingRequestsCall->Remove( 1 );
- delete head;
- }
- }
- }
-
-
-// End of File