phoneclientserver/phoneserver/src/standard/standard_aiw/cphsrvemergencyrequestmanager.cpp
author hgs
Fri, 15 Oct 2010 13:21:28 +0300
changeset 53 25b8d29b7c59
parent 33 8d5d7fcf9b59
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Call Request Manager.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// INCLUDES
hgs
parents:
diff changeset
    21
#include "cphsrvemergencyrequestmanager.h" 
hgs
parents:
diff changeset
    22
#include "cphsrvsubsessionbase.h" 
hgs
parents:
diff changeset
    23
#include "phsrvutils.h" 
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
// CONSTANTS
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
// The size of the Notification manager storage.
hgs
parents:
diff changeset
    29
//const TInt KPhSrvNotificationManagerPendingCallGranularity = 4;
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
// ============================ MEMBER FUNCTIONS ===============================
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    35
// CPhSrvEmergencyRequestManager::CPhSrvEmergencyRequestManager
hgs
parents:
diff changeset
    36
// 
hgs
parents:
diff changeset
    37
// C++ constructor.
hgs
parents:
diff changeset
    38
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    39
//
hgs
parents:
diff changeset
    40
CPhSrvEmergencyRequestManager::CPhSrvEmergencyRequestManager()
hgs
parents:
diff changeset
    41
    : iIsRequestPending( EFalse )
hgs
parents:
diff changeset
    42
    {
hgs
parents:
diff changeset
    43
    }
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    47
// CPhSrvEmergencyRequestManager::~CPhSrvEmergencyRequestManager
hgs
parents:
diff changeset
    48
// 
hgs
parents:
diff changeset
    49
// C++ destructor.
hgs
parents:
diff changeset
    50
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    51
//
hgs
parents:
diff changeset
    52
CPhSrvEmergencyRequestManager::~CPhSrvEmergencyRequestManager()
hgs
parents:
diff changeset
    53
    {
hgs
parents:
diff changeset
    54
    }
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    58
// CPhSrvEmergencyRequestManager::ConstructL
hgs
parents:
diff changeset
    59
// 
hgs
parents:
diff changeset
    60
// Complete construction.
hgs
parents:
diff changeset
    61
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    62
//
hgs
parents:
diff changeset
    63
void CPhSrvEmergencyRequestManager::ConstructL()
hgs
parents:
diff changeset
    64
    {
hgs
parents:
diff changeset
    65
    }
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    69
// CPhSrvEmergencyRequestManager::EmergencyDialL
hgs
parents:
diff changeset
    70
// 
hgs
parents:
diff changeset
    71
// Initiate a dial request - called by the external call
hgs
parents:
diff changeset
    72
// interface. Checks if emergency initiator is ready and sets request pending if 
hgs
parents:
diff changeset
    73
// emergency initiator hasn't been registered yet 
hgs
parents:
diff changeset
    74
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    75
//
hgs
parents:
diff changeset
    76
void CPhSrvEmergencyRequestManager::EmergencyDialL( 
hgs
parents:
diff changeset
    77
    const RMessage2& aMessage )
hgs
parents:
diff changeset
    78
    {
hgs
parents:
diff changeset
    79
    // If we have no registered initiator then we can't make a call.
hgs
parents:
diff changeset
    80
    if ( !iEmergencyInitiator )
hgs
parents:
diff changeset
    81
        {
hgs
parents:
diff changeset
    82
        if( iIsRequestPending )
hgs
parents:
diff changeset
    83
            {
hgs
parents:
diff changeset
    84
            User::Leave( KErrAlreadyExists );
hgs
parents:
diff changeset
    85
            }
hgs
parents:
diff changeset
    86
        else
hgs
parents:
diff changeset
    87
            {
hgs
parents:
diff changeset
    88
            iPendingRequest = aMessage;
hgs
parents:
diff changeset
    89
            iIsRequestPending = ETrue;
hgs
parents:
diff changeset
    90
            }
hgs
parents:
diff changeset
    91
        }
hgs
parents:
diff changeset
    92
    else
hgs
parents:
diff changeset
    93
        {
hgs
parents:
diff changeset
    94
        DoMakeEmergencyDial( aMessage );
hgs
parents:
diff changeset
    95
        }
hgs
parents:
diff changeset
    96
    }
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   100
// CPhSrvEmergencyRequestManager::DoMakeEmergencyDial
hgs
parents:
diff changeset
   101
// 
hgs
parents:
diff changeset
   102
// Do the actual emergency dial request for emergency initiator.
hgs
parents:
diff changeset
   103
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   104
//
hgs
parents:
diff changeset
   105
void CPhSrvEmergencyRequestManager::DoMakeEmergencyDial( const RMessage2& aMessage )
hgs
parents:
diff changeset
   106
    {
hgs
parents:
diff changeset
   107
    iPendingRequestPointer= aMessage;
hgs
parents:
diff changeset
   108
    
hgs
parents:
diff changeset
   109
    // Clear pending request status 
hgs
parents:
diff changeset
   110
    iIsRequestPending = EFalse;
hgs
parents:
diff changeset
   111
    
hgs
parents:
diff changeset
   112
    // Now see if the call notifier (initiator) is ready 
hgs
parents:
diff changeset
   113
    if ( iEmergencyInitiator ->InitiatorIsReadyToMakeEmergencyCall() )
hgs
parents:
diff changeset
   114
        {
hgs
parents:
diff changeset
   115
        // Ask the call initiator to make the call (basically completes the
hgs
parents:
diff changeset
   116
        //phone app engine's outstanding call notifier request).
hgs
parents:
diff changeset
   117
        iEmergencyInitiator ->InitiatorMakeEmergencyCall( aMessage );
hgs
parents:
diff changeset
   118
        }
hgs
parents:
diff changeset
   119
    }
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
hgs
parents:
diff changeset
   122
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   123
// CPhSrvEmergencyRequestManager::EmergencyDialCancel
hgs
parents:
diff changeset
   124
// 
hgs
parents:
diff changeset
   125
// Cancel a pending dial request.
hgs
parents:
diff changeset
   126
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   127
//
hgs
parents:
diff changeset
   128
void CPhSrvEmergencyRequestManager::EmergencyDialCancel()
hgs
parents:
diff changeset
   129
    {
hgs
parents:
diff changeset
   130
    if ( !iPendingRequestPointer.IsNull() )
hgs
parents:
diff changeset
   131
        {
53
hgs
parents: 33
diff changeset
   132
		// Clear pending request status 
hgs
parents: 33
diff changeset
   133
		iIsRequestPending = EFalse;
33
hgs
parents:
diff changeset
   134
        iPendingRequestPointer.Complete( KErrCancel );
hgs
parents:
diff changeset
   135
        }
hgs
parents:
diff changeset
   136
    }
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   140
// CPhSrvEmergencyRequestManager::SetNegotiatorReadyCall
hgs
parents:
diff changeset
   141
// 
hgs
parents:
diff changeset
   142
// Updates the negotiator so that it knows if the notifier
hgs
parents:
diff changeset
   143
// session is able to make a call.
hgs
parents:
diff changeset
   144
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   145
//
hgs
parents:
diff changeset
   146
void CPhSrvEmergencyRequestManager::SetNegotiatorReadyCall(
hgs
parents:
diff changeset
   147
    MPhSrvEmergencyCall& aInitiator )
hgs
parents:
diff changeset
   148
    {
hgs
parents:
diff changeset
   149
    // There mustn't already be a call initiator, or the existing call
hgs
parents:
diff changeset
   150
    // initiator must be the same as the new one (otherwise, panic).
hgs
parents:
diff changeset
   151
    __ASSERT_ALWAYS( !iEmergencyInitiator || &aInitiator == iEmergencyInitiator, 
hgs
parents:
diff changeset
   152
        PhoneServerUtils::Panic( 
hgs
parents:
diff changeset
   153
        EPhoneServerPanicExistingCallInitiatorFault ) );
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
    // Update our pointer
hgs
parents:
diff changeset
   156
    iEmergencyInitiator  = &aInitiator;
hgs
parents:
diff changeset
   157
    
hgs
parents:
diff changeset
   158
    if( iIsRequestPending )
hgs
parents:
diff changeset
   159
        {
hgs
parents:
diff changeset
   160
        DoMakeEmergencyDial( iPendingRequest );
hgs
parents:
diff changeset
   161
        }
hgs
parents:
diff changeset
   162
    }
hgs
parents:
diff changeset
   163
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   166
// CPhSrvEmergencyRequestManager::SetNegotiatorReadyCallCancel
hgs
parents:
diff changeset
   167
// 
hgs
parents:
diff changeset
   168
// Indicates that the initiator is no longer available
hgs
parents:
diff changeset
   169
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   170
//
hgs
parents:
diff changeset
   171
void CPhSrvEmergencyRequestManager::SetNegotiatorReadyCallCancel( 
hgs
parents:
diff changeset
   172
    MPhSrvEmergencyCall& aInitiator )
hgs
parents:
diff changeset
   173
    {
hgs
parents:
diff changeset
   174
    if ( iEmergencyInitiator && iEmergencyInitiator == &aInitiator )
hgs
parents:
diff changeset
   175
        {
hgs
parents:
diff changeset
   176
        iEmergencyInitiator = NULL;
hgs
parents:
diff changeset
   177
        }
hgs
parents:
diff changeset
   178
    }
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   182
// CPhSrvEmergencyRequestManager::SetNegotiatorAttemptedCallResponseValue
hgs
parents:
diff changeset
   183
// 
hgs
parents:
diff changeset
   184
// Handle a response from the phone app engine - this is the 
hgs
parents:
diff changeset
   185
// result of attempting to make a call (based upon a previous
hgs
parents:
diff changeset
   186
// clients external call request)
hgs
parents:
diff changeset
   187
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   188
//
hgs
parents:
diff changeset
   189
void CPhSrvEmergencyRequestManager::SetNegotiatorAttemptedCallResponseValue( 
hgs
parents:
diff changeset
   190
    TPhCltPhoneResults aResult )
hgs
parents:
diff changeset
   191
    {
hgs
parents:
diff changeset
   192
    if ( !iPendingRequestPointer.IsNull() )
hgs
parents:
diff changeset
   193
        {
hgs
parents:
diff changeset
   194
        iPendingRequestPointer.Complete( aResult );
hgs
parents:
diff changeset
   195
        }
hgs
parents:
diff changeset
   196
    }
hgs
parents:
diff changeset
   197
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
// End of File
hgs
parents:
diff changeset
   200