phoneengine/callhandling/src/cpesinglecallobserver.cpp
changeset 37 ba76fc04e6c2
child 51 f39ed5e045e0
equal deleted inserted replaced
36:2eacb6118286 37:ba76fc04e6c2
       
     1 /*
       
     2 * Copyright (c) 2003-2007 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  This file contains the implementation of CPESingleCallObserver class 
       
    15 *                member functions.
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 // INCLUDE FILES
       
    21 #include <talogger.h>
       
    22 #include <pepanic.pan>
       
    23 
       
    24 #include "cpesinglecallobserver.h"
       
    25 #include "mpemessagesender.h"
       
    26 
       
    27 // ================= MEMBER FUNCTIONS =======================
       
    28 
       
    29 // -----------------------------------------------------------------------------
       
    30 // CPESingleCallObserver::CPESingleCallObserver
       
    31 // C++ default constructor can NOT contain any code, that
       
    32 // might leave.
       
    33 // -----------------------------------------------------------------------------
       
    34 //
       
    35 CPESingleCallObserver::CPESingleCallObserver( MPEMessageSender& aOwner )
       
    36     : CPECall( aOwner ),
       
    37     iDialledNumber( KNullDesC )
       
    38     {
       
    39     TEFLOGSTRING( KTAOBJECT, "CALL CPESingleCallObserver::CPESingleCallObserver start." );
       
    40     TEFLOGSTRING( KTAOBJECT, "CALL CPESingleCallObserver::CPESingleCallObserver complete." );
       
    41     }
       
    42 
       
    43 // Destructor
       
    44 CPESingleCallObserver::~CPESingleCallObserver()
       
    45     {
       
    46     TEFLOGSTRING( KTAOBJECT, "CALL CPESingleCallObserver::~CPESingleCallObserver: Start." );
       
    47     if( iCall )
       
    48         {
       
    49         TEFLOGSTRING( KTAOBJECT, "CALL CPESingleCallObserver::~CPESingleCallObserver: Release" );
       
    50         iCall->Release();
       
    51         }
       
    52     TEFLOGSTRING( KTAOBJECT, "CALL CPESingleCallObserver::~CPESingleCallObserver: Complete." );
       
    53     }
       
    54 
       
    55 // -----------------------------------------------------------------------------
       
    56 // CPESingleCallObserver::ErrorOccurred
       
    57 // Asynchronous call errors are notified using this interface. 
       
    58 // -----------------------------------------------------------------------------
       
    59 //
       
    60 EXPORT_C void CPESingleCallObserver::ErrorOccurred( const TCCPError aError )
       
    61     {
       
    62     TInt error = static_cast < TInt > ( aError );
       
    63     TEFLOGSTRING2( KTAERROR, "CALL CPESINGLECALLOBSERVER::ERROROCCURRED, ! ERROR CODE: %d !", error );
       
    64     // Currently completes also with KErrNone
       
    65     // Need to prevent forwarding in no-error situation
       
    66     if( ECCPErrorBusy == aError )
       
    67         {
       
    68         iErrorCode = aError;
       
    69         CPECall::SendMessage( MEngineMonitor::EPEMessageRemoteBusy );
       
    70         }
       
    71     else if( ECCPErrorRejected == aError )
       
    72         {
       
    73         // Don't send error message.
       
    74         SetMissedCall( EFalse );
       
    75         }
       
    76     else if( aError != KErrNone )
       
    77         {
       
    78         CPECall::SendErrorMessage( error );
       
    79         }
       
    80     }
       
    81 
       
    82 // -----------------------------------------------------------------------------
       
    83 // CPESingleCallObserver::CallStateChanged
       
    84 // Notifies observer the change in call state. The observer needs to verify
       
    85 // event correctness.
       
    86 // -----------------------------------------------------------------------------
       
    87 //
       
    88 EXPORT_C void CPESingleCallObserver::CallStateChanged( const CCPCall::TCallState aState )
       
    89     {
       
    90     TEFLOGSTRING2( KTAREQIN, "CALL CPESingleCallObserver::CallStateChanged, Call state: %d", aState );
       
    91 
       
    92     switch ( aState )
       
    93         {
       
    94         case CCPCall::EStateIdle:
       
    95             {
       
    96             SetCallState( EPEStateIdle );
       
    97             SendMessage( MEngineMonitor::EPEMessageIdle );
       
    98             break;
       
    99             }
       
   100         case CCPCall::EStateRinging:
       
   101             {
       
   102             SetCallState( EPEStateRinging );
       
   103             SendMessage( MEngineMonitor::EPEMessageIncoming );
       
   104             SetMissedCall( ETrue );
       
   105             break;
       
   106             }
       
   107         case CCPCall::EStateConnecting:
       
   108             {
       
   109             SetCallState( EPEStateConnecting );
       
   110             SendMessage( MEngineMonitor::EPEMessageConnecting );
       
   111             break;
       
   112             }
       
   113         case CCPCall::EStateConnected:
       
   114             {
       
   115             SetCallState( EPEStateConnected );
       
   116             SendMessage( MEngineMonitor::EPEMessageConnected );
       
   117             SetMissedCall( EFalse );
       
   118             break;
       
   119             }
       
   120         case CCPCall::EStateDisconnecting:
       
   121             {
       
   122             SetCallState( EPEStateDisconnecting );
       
   123             SendMessage( MEngineMonitor::EPEMessageDisconnecting );
       
   124             break;
       
   125             }
       
   126         case CCPCall::EStateHold:
       
   127             {
       
   128             SetCallState( EPEStateHeld );
       
   129             SendMessage( MEngineMonitor::EPEMessageHeld );
       
   130             break;  
       
   131             }
       
   132         case CCPCall::EStateAnswering:
       
   133             {
       
   134             SetCallState( EPEStateAnswering );
       
   135             SendMessage( MEngineMonitor::EPEMessageAnswering );
       
   136             break;
       
   137             }
       
   138         case CCPCall::EStateDialling:
       
   139             {
       
   140             SetCallState( EPEStateDialing );
       
   141             SendMessage( MEngineMonitor::EPEMessageDialing );
       
   142             break;
       
   143             }
       
   144         case CCPCall::EStateQueued:
       
   145             {
       
   146             SetCallState( EPEStateRinging );
       
   147             SendMessage( MEngineMonitor::EPEMessageIncoming );
       
   148             SetMissedCall( ETrue );
       
   149             break;
       
   150             }
       
   151 
       
   152         case CCPCall::EStateTransferring:
       
   153 
       
   154             {
       
   155             // Not supported -> Ignored
       
   156             TEFLOGSTRING( KTAERROR, "CALL CPESingleCallObserver::CALLSTATECHANGED ! STATE IGNORED !" );
       
   157             break;
       
   158             }
       
   159         default:
       
   160             {
       
   161             break;
       
   162             }
       
   163         }
       
   164     }
       
   165 // -----------------------------------------------------------------------------
       
   166 // CPESingleCallObserver::CallStateChangedWithInband
       
   167 // 
       
   168 // -----------------------------------------------------------------------------
       
   169 //
       
   170 EXPORT_C void CPESingleCallObserver::CallStateChangedWithInband( 
       
   171         const CCPCall::TCallState aState )
       
   172     {
       
   173     TEFLOGSTRING2( 
       
   174         KTAREQIN, 
       
   175         "CALL CPESingleCallObserver::CallStateChangedWithInband, Call state: %d", 
       
   176         aState );
       
   177 
       
   178     switch ( aState )
       
   179         {
       
   180         case CCPCall::EStateConnecting:
       
   181             {
       
   182             SetCallState( EPEStateConnecting );
       
   183             SendMessage( MEngineMonitor::EPEMessageConnectingWithInband );
       
   184             break;
       
   185             }
       
   186         case CCPCall::EStateDisconnecting:
       
   187             {
       
   188             SetCallState( EPEStateDisconnecting );
       
   189             SendMessage( MEngineMonitor::EPEMessageDisconnectingWithInband );
       
   190             break;
       
   191             }
       
   192         default:
       
   193             {
       
   194             break;
       
   195             }
       
   196         }
       
   197     }
       
   198         
       
   199 // -----------------------------------------------------------------------------
       
   200 // CPESingleCallObserver::CallEventOccurred
       
   201 // An event for the call has occurred. The observer needs to verify
       
   202 // event correctness.
       
   203 // -----------------------------------------------------------------------------
       
   204 //
       
   205 EXPORT_C void CPESingleCallObserver::CallEventOccurred( const MCCECallObserver::TCCECallEvent aEvent )
       
   206     {
       
   207     TEFLOGSTRING2( KTAREQIN, "CALL CPESingleCallObserver::CallEventOccurred, Call event: %d", aEvent );
       
   208 
       
   209     switch ( aEvent )
       
   210         {
       
   211         case MCCECallObserver::ERemoteTerminated:
       
   212             {
       
   213             TEFLOGSTRING( KTAINT, "CALL CPESingleCallObserver::CallEventOccurred, Remotely terminated" );
       
   214             SendMessage( MEngineMonitor::EPEMessageRemoteTerminated );
       
   215             break;
       
   216             }
       
   217         case MCCECallObserver::ESecureSession: // fall through
       
   218         case MCCECallObserver::ENotSecureSession: // fall through
       
   219         case MCCECallObserver::EVoIPEventNotSecureSessionWithSips:
       
   220             {
       
   221             TEFLOGSTRING( KTAINT, "CALL CPESingleCallObserver::CallEventOccurred, Secure information changed" );
       
   222             SendMessage( MEngineMonitor::EPEMessageCallSecureStatusChanged );
       
   223             break;
       
   224             }
       
   225         case MCCECallObserver::ECCESecureNotSpecified: 
       
   226             {
       
   227             TEFLOGSTRING( KTAINT, "CALL CPESingleCallObserver::CallEventOccurred, Secure not specified" );
       
   228             SendMessage( MEngineMonitor::EPEMessageSecureNotSpecified );
       
   229             break;
       
   230             }            
       
   231         case MCCECallObserver::ELocalHold:
       
   232             {
       
   233             TEFLOGSTRING( KTAINT, "CALL CPESingleCallObserver::CallEventOccurred, Locally held, IGNORED" );
       
   234             break;
       
   235             }
       
   236         case MCCECallObserver::ELocalResume:
       
   237             {
       
   238             TEFLOGSTRING( KTAINT, "CALL CPESingleCallObserver::CallEventOccurred, Locally resumed, IGNORED" );
       
   239             break;
       
   240             }
       
   241         case MCCECallObserver::ERemoteHold:
       
   242             {
       
   243             TEFLOGSTRING( KTAINT, "CALL CPESingleCallObserver::CallEventOccurred, Remotely held" );
       
   244             SendMessage( MEngineMonitor::EPEMessageRemoteHeld );
       
   245             break;
       
   246             }
       
   247         case MCCECallObserver::ERemoteResume:
       
   248             {
       
   249             TEFLOGSTRING( KTAINT, "CALL CPESingleCallObserver::CallEventOccurred, Remotely resumed" );
       
   250             SendMessage( MEngineMonitor::EPEMessageRemoteResumed );
       
   251             break;
       
   252             }
       
   253         case MCCECallObserver::ERemoteConferenceCreate:
       
   254             {
       
   255             TEFLOGSTRING( KTAINT, "CALL CPESingleCallObserver::CallEventOccurred, Remotely created conference" );
       
   256             SendMessage( MEngineMonitor::EPEMessageRemoteCreatedConference );
       
   257             break;
       
   258             }
       
   259         case MCCECallObserver::ELocalTransfer:
       
   260             {
       
   261             TEFLOGSTRING( KTAINT, "CALL CPESingleCallObserver::ELocalTransfer" );
       
   262             SendMessage( MEngineMonitor::EPEMessageTransferDone );
       
   263             break;
       
   264             }
       
   265         case MCCECallObserver::ERemoteTransferring:
       
   266         case MCCECallObserver::ERemoteTransferAlerting:
       
   267             {
       
   268             TEFLOGSTRING( KTAINT, "CALL CPESingleCallObserver::ERemoteTransferring or ERemoteTransferAlerting" );
       
   269             SendMessage( MEngineMonitor::EPEMessageTransferring );
       
   270             break;
       
   271             }
       
   272         case MCCECallObserver::ECCENotifyRemotePartyInfoChange:
       
   273             {
       
   274             TEFLOGSTRING( KTAINT, "CALL CPESingleCallObserver::ECCENotifyRemotePartyInfoChange" );
       
   275             SendMessage( MEngineMonitor::EPEMessageRemotePartyInfoChanged );
       
   276             break;
       
   277             }
       
   278         
       
   279         // Indicates that network or call provider has started to play
       
   280         // inband tone so our tone playing must be stopped.
       
   281         case MCCECallObserver::EVoIPEventEarlyMediaStarted:
       
   282             {
       
   283             TEFLOGSTRING( KTAINT, "CALL CPESingleCallObserver::EVoIPEventEarlyMediaStarted" );
       
   284             iOwner.HandleInternalMessage( MPEPhoneModel::EPEMessageStopTonePlay );
       
   285             break;
       
   286             }
       
   287             
       
   288         case MCCECallObserver::ERemoteForwarding:
       
   289             {
       
   290             TEFLOGSTRING( KTAINT, "CALL CPESingleCallObserver::EPEMessageRemoteForwarding" );
       
   291             SendMessage( MEngineMonitor::EPEMessageRemoteForwarding );
       
   292             break;
       
   293             }
       
   294         case MCCECallObserver::EVoIPEventMovedPermanently:
       
   295             {
       
   296             TEFLOGSTRING( KTAINT, "CALL CPESingleCallObserver::EMovedPermanently" );
       
   297             SendMessage( MEngineMonitor::EPEMessageMovedPermanently );
       
   298             break;
       
   299             }
       
   300         case MCCECallObserver::EVoIPEventMultipleChoices:
       
   301             {
       
   302             TEFLOGSTRING( KTAINT, "CALL CPESingleCallObserver::EMovedPermanently" );
       
   303             SendMessage( MEngineMonitor::EPEMessageMultipleChoices );
       
   304             break;
       
   305             }             
       
   306         
       
   307         case MCCECallObserver::ELocalDeflectCall:
       
   308         case MCCECallObserver::ERemoteBarred:
       
   309         case MCCECallObserver::ERemoteWaiting:
       
   310         case MCCECallObserver::ELocalBarred:
       
   311         default:
       
   312             {
       
   313             TEFLOGSTRING2( KTAINT, "CALL CPESingleCallObserver::CallEventOccurred, Unspecified/protocol specific call event: %d", aEvent );
       
   314             break;
       
   315             }
       
   316         }
       
   317     } 
       
   318 
       
   319 // -----------------------------------------------------------------------------
       
   320 // CPESingleCallObserver::CallDurationChanged
       
   321 // Notifies observer the change in call duration.
       
   322 // -----------------------------------------------------------------------------
       
   323 //    
       
   324 EXPORT_C void CPESingleCallObserver::CallDurationChanged( const TTimeIntervalSeconds aDuration )
       
   325     {
       
   326     TEFLOGSTRING( KTAREQIN, "CALL CPESingleCallObserver::CallDurationChanged" );
       
   327     iDuration = aDuration;
       
   328     SendMessage( MEngineMonitor::EPEMessageChangedCallDuration );
       
   329     }
       
   330 
       
   331 // -----------------------------------------------------------------------------
       
   332 // CPESingleCallObserver::CallCapsChanged
       
   333 // Notifies observer about the changes in call control caps.
       
   334 // -----------------------------------------------------------------------------
       
   335 //
       
   336 EXPORT_C void CPESingleCallObserver::CallCapsChanged( const MCCECallObserver::TCCECallControlCaps aCaps )
       
   337     {
       
   338     TEFLOGSTRING( KTAREQIN, "CALL CPESingleCallObserver::CallCapsChanged" );
       
   339     iControlCaps = aCaps;
       
   340     SendMessage( MEngineMonitor::EPEMessageCallControlCapsChanged );
       
   341     }
       
   342 
       
   343 // -----------------------------------------------------------------------------
       
   344 // CPESingleCallObserver::HandleTransfer
       
   345 // Notifies observer about transfer made by remote end
       
   346 // -----------------------------------------------------------------------------
       
   347 //
       
   348 EXPORT_C void CPESingleCallObserver::HandleTransfer( const TBool aAttended, 
       
   349                                  const TDesC& aDestination )
       
   350     {
       
   351     TEFLOGSTRING3( KTAREQIN, "CALL CPESingleCallObserver::HandleTransfer: Remote transfer request, attended: %d, destination: %S", aAttended, &aDestination );
       
   352     TEFLOGSTRING( KTAREQIN, "CALL CPESingleCallObserver::HandleTransfer: Currently not supported" );
       
   353     if ( KNullDesC() != aDestination && EFalse == aAttended && 
       
   354             aDestination.Length() <= iTransferTarget.MaxLength() )
       
   355         {
       
   356         iTransferTarget = aDestination;
       
   357         SendMessage( MEngineMonitor::EPEMessageUnattendedTransferRequest );
       
   358         }
       
   359     else
       
   360         {
       
   361         iCall->AcceptTransfer( EFalse );
       
   362         }
       
   363     }
       
   364 
       
   365 // -----------------------------------------------------------------------------
       
   366 // CPESingleCallObserver::GetCallDuration
       
   367 // Method returns the duration of the current call.
       
   368 // -----------------------------------------------------------------------------
       
   369 //
       
   370 void CPESingleCallObserver::GetCallDuration(
       
   371         TTimeIntervalSeconds& aDuration )
       
   372     {
       
   373     TEFLOGSTRING2( 
       
   374         KTAINT, 
       
   375         "CALL CPESingleCallObserver::GetCallDuration, iDuration: %d", 
       
   376         iDuration.Int() );
       
   377     aDuration = iDuration;
       
   378     }
       
   379 
       
   380 // -----------------------------------------------------------------------------
       
   381 // CPESingleCallObserver::GetCallControlCaps
       
   382 // Method returns call control caps
       
   383 // -----------------------------------------------------------------------------
       
   384 //
       
   385 void CPESingleCallObserver::GetCallControlCaps(
       
   386         MCCECallObserver::TCCECallControlCaps& aCallControlCaps )  const
       
   387     {
       
   388     TEFLOGSTRING2( KTAINT, "CALL CPESingleCallObserver::GetCallControlCaps, iControlCaps: %d", iControlCaps );
       
   389     aCallControlCaps = iControlCaps;
       
   390     }
       
   391 
       
   392 // -----------------------------------------------------------------------------
       
   393 // CPESingleCallObserver::Call
       
   394 // Returns reference to MCCECall handle
       
   395 // -----------------------------------------------------------------------------
       
   396 //
       
   397 MCCECall& CPESingleCallObserver::Call()
       
   398     {
       
   399     TEFLOGSTRING2( KTAINT, "CALL CPESingleCallObserver::Call, iCall: %d", iCall );
       
   400     return *iCall;
       
   401     }
       
   402     
       
   403 
       
   404 // -----------------------------------------------------------------------------
       
   405 // CPESingleCallObserver::SetCall
       
   406 // 
       
   407 // -----------------------------------------------------------------------------
       
   408 //
       
   409 void CPESingleCallObserver::SetCall( MCCECall& aCall )
       
   410     {
       
   411     TEFLOGSTRING2( KTAINT, "CALL CPESingleCallObserver::SetCall, aCall: %d", &aCall );
       
   412     iCall = &aCall;
       
   413     iCall->SetObserver( *this );
       
   414     iControlCaps = iCall->Caps();
       
   415     TEFLOGSTRING2( KTAINT, "CALL CPESingleCallObserver::SetCall, iControlCaps: %b", iControlCaps );
       
   416     }
       
   417 
       
   418 
       
   419 // -----------------------------------------------------------------------------
       
   420 // CPESingleCallObserver::UnattendedTransferTarget
       
   421 // -----------------------------------------------------------------------------
       
   422 //
       
   423 const TPEPhoneNumber& CPESingleCallObserver::UnattendedTransferTarget() const
       
   424     {
       
   425     TEFLOGSTRING2( KTAREQIN, 
       
   426         "CALL CPESingleCallObserver::UnattendedTransferTarget: %S",
       
   427         &iTransferTarget );
       
   428     
       
   429     return iTransferTarget;
       
   430     }
       
   431 
       
   432 
       
   433 // -----------------------------------------------------------------------------
       
   434 // CPESingleCallObserver::ForwardAddressChoices
       
   435 // -----------------------------------------------------------------------------
       
   436 //
       
   437 const CDesC8Array* CPESingleCallObserver::ForwardAddressChoices() const
       
   438     {
       
   439     const CDesC8Array* array = NULL;
       
   440     TRAP_IGNORE( array = &iCall->GetForwardAddressChoicesL() );
       
   441 
       
   442     return array;
       
   443     }
       
   444 
       
   445 // End of File