phoneengine/callhandling/src/cpeconferencecall.cpp
changeset 0 5f000ab63145
child 21 92ab7f8d0eab
equal deleted inserted replaced
-1:000000000000 0:5f000ab63145
       
     1 /*
       
     2 * Copyright (c) 2002-2008 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 CPEConferenceCall  class 
       
    15 *                member functions.
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 // INCLUDE FILES
       
    21 #include "cpeconferencecall.h"
       
    22 #include "mpemessagesender.h"
       
    23 #include <pevirtualengine.h>
       
    24 #include <talogger.h>
       
    25 #include <mccpconferencecallobserver.h>
       
    26 #include <pepanic.pan>
       
    27 
       
    28 // EXTERNAL DATA STRUCTURES
       
    29 // None.
       
    30 
       
    31 // EXTERNAL FUNCTION PROTOTYPES  
       
    32 // None.
       
    33 
       
    34 // CONSTANTS
       
    35 // None.
       
    36 
       
    37 // MACROS
       
    38 // None.
       
    39 
       
    40 // LOCAL CONSTANTS AND MACROS
       
    41 // None.
       
    42 
       
    43 // MODULE DATA STRUCTURES
       
    44 // None.
       
    45 
       
    46 // LOCAL FUNCTION PROTOTYPES
       
    47 // None.
       
    48 
       
    49 // ==================== LOCAL FUNCTIONS ====================
       
    50 // None.
       
    51 
       
    52 // ================= MEMBER FUNCTIONS =======================================
       
    53 
       
    54 // -----------------------------------------------------------------------------
       
    55 // CPEConferenceCall::CPEConferenceCall
       
    56 // C++ default constructor can NOT contain any code, that
       
    57 // might leave.
       
    58 // -----------------------------------------------------------------------------
       
    59 //
       
    60 CPEConferenceCall::CPEConferenceCall( 
       
    61         MPEMessageSender& aOwner,
       
    62         MCCEConferenceCall& aCall
       
    63         ) : CPECall( aOwner ), iConferenceCall( &aCall )
       
    64     {
       
    65     TEFLOGSTRING( KTAOBJECT, "cpecall: CPEConferenceCall::CPEConferenceCall start." );
       
    66     SetCallState( EPEStateConferenceIdle );
       
    67     TEFLOGSTRING( KTAOBJECT, "cpecall: CPEConferenceCall::CPEConferenceCall complete." );
       
    68     }
       
    69     
       
    70     // Destructor
       
    71 CPEConferenceCall::~CPEConferenceCall
       
    72         (
       
    73         // None.
       
    74         )
       
    75     {
       
    76     TEFLOGSTRING( KTAOBJECT, "cpecall: CPEConferenceCall::~CPEConferenceCall: Start." );
       
    77     iConferenceCall->Release();
       
    78     TEFLOGSTRING( KTAOBJECT, "cpecall: CPEConferenceCall::~CPEConferenceCall: Complete." );
       
    79     } 
       
    80 
       
    81 // -----------------------------------------------------------------------------
       
    82 // CPEConferenceCall::ConstructL
       
    83 // Symbian 2nd phase constructor can leave.
       
    84 // -----------------------------------------------------------------------------
       
    85 //
       
    86 void CPEConferenceCall::ConstructL(
       
    87 		CCCE& aConvergedCallEngine )
       
    88     {
       
    89     TEFLOGSTRING( KTAOBJECT, "cpecallgsm: CPEGsmConferenceCall::ConstructL start." );
       
    90     iConferenceCall = &( aConvergedCallEngine.ConferenceCallL( *this ) );
       
    91     iConferenceCall->SetObserver( *this );
       
    92     TEFLOGSTRING( KTAOBJECT, "cpecallgsm: CPEGsmConferenceCall::ConstructL complete." );
       
    93     }
       
    94 
       
    95 // -----------------------------------------------------------------------------
       
    96 // CPEConferenceCall::NewL
       
    97 // Two-phased constructor.
       
    98 // -----------------------------------------------------------------------------
       
    99 //
       
   100 CPEConferenceCall* CPEConferenceCall::NewL( 
       
   101         MPEMessageSender& aOwner,
       
   102         CCCE& aConvergedCallEngine
       
   103         )
       
   104     {
       
   105     TEFLOGSTRING( KTAOBJECT, "cpecallgsm: CPEGsmConferenceCall::NewL start." );
       
   106     MCCEConferenceCall* temp = NULL;
       
   107     
       
   108     CPEConferenceCall* self = new ( ELeave ) CPEConferenceCall( aOwner, *temp );
       
   109     CleanupStack::PushL( self );
       
   110     self->ConstructL( aConvergedCallEngine );
       
   111     CleanupStack::Pop( self );
       
   112 
       
   113     TEFLOGSTRING( KTAOBJECT, "cpecallgsm: CPEGsmConferenceCall::NewL complete." );
       
   114     return self;
       
   115     }
       
   116 
       
   117 // -----------------------------------------------------------------------------
       
   118 // CPEConferenceCall::NewL
       
   119 // Two-phased constructor.
       
   120 // -----------------------------------------------------------------------------
       
   121 //
       
   122 CPEConferenceCall* CPEConferenceCall::NewL( 
       
   123         MPEMessageSender& aOwner,
       
   124         MCCEConferenceCall& aCall
       
   125         )
       
   126     {
       
   127     TEFLOGSTRING( KTAOBJECT, "cpecallgsm: CPEGsmConferenceCall::NewL start." );
       
   128     
       
   129     CPEConferenceCall* self = new ( ELeave ) CPEConferenceCall( aOwner, aCall );
       
   130     CleanupStack::PushL( self );
       
   131     self->ConstructL();
       
   132     CleanupStack::Pop( self );
       
   133 
       
   134     TEFLOGSTRING( KTAOBJECT, "cpecallgsm: CPEGsmConferenceCall::NewL complete." );
       
   135     return self;
       
   136     }
       
   137 
       
   138 // -----------------------------------------------------------------------------
       
   139 // CPEConferenceCall::ConstructL
       
   140 // Symbian 2nd phase constructor can leave.
       
   141 // -----------------------------------------------------------------------------
       
   142 //
       
   143 void CPEConferenceCall::ConstructL()
       
   144     {
       
   145     TEFLOGSTRING( KTAOBJECT, "cpecallgsm: CPEGsmConferenceCall::ConstructL start." );
       
   146     iConferenceCall->SetObserver( *this );
       
   147     TEFLOGSTRING( KTAOBJECT, "cpecallgsm: CPEGsmConferenceCall::ConstructL complete." );
       
   148     }
       
   149 
       
   150 // -----------------------------------------------------------------------------
       
   151 // CPEConferenceCall::AddCall
       
   152 // Adds new member to Conference Call
       
   153 // -----------------------------------------------------------------------------
       
   154 //
       
   155 void CPEConferenceCall::AddCallL
       
   156         ( 
       
   157         MCCECall& aCall
       
   158         )
       
   159     {
       
   160     if( GetCallState() == EPEStateConferenceIdle )
       
   161         {
       
   162         SetCallState( EPEStateCreatingConference );
       
   163         }
       
   164     iConferenceCall->AddCallL( aCall );
       
   165     }
       
   166 
       
   167 // -----------------------------------------------------------------------------
       
   168 // CPEConferenceCall::CallEventOccurred
       
   169 // A conference call event has occurred.
       
   170 // -----------------------------------------------------------------------------
       
   171 //
       
   172 EXPORT_C void CPEConferenceCall::CallEventOccurred( 
       
   173         const MCCEConferenceCallObserver::TCCEConferenceCallEvent aEvent,
       
   174         MCCECall* aReferredCall  )
       
   175 	{
       
   176 	TEFLOGSTRING2( KTAREQEND, "CALL CPEConferenceCall::ConferenceCallEventOccurred, event: %d", aEvent );
       
   177 	
       
   178 	if ( aReferredCall )
       
   179 		{
       
   180 		//resolve the referred call first
       
   181 		RMobileCall::TMobileCallInfoV1 callInfo;
       
   182 		RMobileCall::TMobileCallInfoV1Pckg callInfoPckg( callInfo );
       
   183 	    TEFLOGSTRING( KTAREQOUT, "CALL CPEConferenceCall::ConferenceCallEventOccurred: Request MCCECall::GetMobileCallInfo()" );
       
   184 	    aReferredCall->GetMobileCallInfo( callInfoPckg );
       
   185 	    callInfo = callInfoPckg();
       
   186 	    iCallName = callInfo.iCallName;
       
   187 	    
       
   188 	    // now that the call name has been stored, owner may fetch it
       
   189 	    // upon receiving a conference call related indication
       
   190 	   	}
       
   191 	else
       
   192 		{
       
   193 		iCallName = KNullDesC;
       
   194 		}
       
   195 
       
   196     switch ( aEvent )
       
   197         {
       
   198         case MCCEConferenceCallObserver::ECCEConferenceCallAdded:
       
   199             {
       
   200             TEFLOGSTRING( KTAINT, "CALL CPEConferenceCall::CallEventOccurred, Call added to conference" );
       
   201             SendMessage( MEngineMonitor::EPEMessageAddedConferenceMember, iCallName );
       
   202             break;
       
   203             }
       
   204         case MCCEConferenceCallObserver::ECCEConferenceCallRemoved:
       
   205             {
       
   206             TEFLOGSTRING( KTAINT, "CALL CPEConferenceCall::CallEventOccurred, Call removed from conference" );
       
   207             SendMessage( MEngineMonitor::EPEMessageDroppedConferenceMember, iCallName );
       
   208             break;
       
   209             }
       
   210         case MCCEConferenceCallObserver::ECCEConferenceBuilt:
       
   211             {
       
   212             TEFLOGSTRING( KTAINT, "CALL CPEConferenceCall::CallEventOccurred, Conference call was built" );
       
   213             break;
       
   214             }
       
   215         case MCCEConferenceCallObserver::ECCEConferenceTerminated:
       
   216             {
       
   217             TEFLOGSTRING( KTAINT, "CALL CPEConferenceCall::CallEventOccurred, Conference call was terminated" );
       
   218             break;
       
   219             }
       
   220         case MCCEConferenceCallObserver::ECCEConferenceSwapped:
       
   221             {
       
   222             TEFLOGSTRING( KTAINT, "CALL CPEConferenceCall::CallEventOccurred, Conference call was swapped" );
       
   223             break;
       
   224             }
       
   225         case MCCEConferenceCallObserver::ECCEConferenceSplit:
       
   226             {
       
   227             TEFLOGSTRING( KTAINT, "CALL CPEConferenceCall::CallEventOccurred, Conference call was split" );
       
   228             SendMessage( MEngineMonitor::EPEMessageWentOneToOne, iCallName );
       
   229             break;
       
   230             }
       
   231         default:
       
   232             {
       
   233             TEFLOGSTRING( KTAERROR, "CALL CPEConferenceCall::CallEventOccurred, UNKNOWN CONFERENCE EVENT!" );       
       
   234             break;
       
   235             }
       
   236         }
       
   237 	}
       
   238 
       
   239 // -----------------------------------------------------------------------------
       
   240 // CPEConferenceCall::CallStateChanged
       
   241 // A conference call state has changed.
       
   242 // -----------------------------------------------------------------------------
       
   243 //
       
   244 EXPORT_C void CPEConferenceCall::CallStateChanged( 
       
   245          const MCCEConferenceCallObserver::TCCEConferenceCallState aState )
       
   246     {
       
   247     switch ( aState )
       
   248         {
       
   249         case MCCEConferenceCallObserver::ECCEConferenceIdle:
       
   250             {
       
   251             TEFLOGSTRING( KTAINT, "CALL CPEConferenceCall::CallStateChanged, ECCEConferenceIdle" );
       
   252             SetCallState( EPEStateConferenceIdle );
       
   253             iLastConferenceDuration = iDuration;
       
   254             SendMessage( MEngineMonitor::EPEMessageConferenceIdle );
       
   255             break;
       
   256             }
       
   257         case MCCEConferenceCallObserver::ECCEConferenceActive:
       
   258             {
       
   259             TEFLOGSTRING( KTAINT, "CALL CPEConferenceCall::CallStateChanged, ECCEConferenceActive" );
       
   260             SetCallState( EPEStateConnectedConference );
       
   261             SendMessage( MEngineMonitor::EPEMessageConnectedConference );
       
   262             break;
       
   263             }
       
   264         case MCCEConferenceCallObserver::ECCEConferenceHold:
       
   265             {
       
   266             TEFLOGSTRING( KTAINT, "CALL CPEConferenceCall::CallStateChanged, ECCEConferenceHold" );
       
   267             SetCallState( EPEStateHeldConference );
       
   268             SendMessage( MEngineMonitor::EPEMessageHeldConference );
       
   269             break;
       
   270             }
       
   271         default:
       
   272             {
       
   273             TEFLOGSTRING( KTAERROR, "CALL CPEConferenceCall::CallStateChanged, UNKNOWN CONFERENCE STATE!" );       
       
   274             break;
       
   275             }
       
   276         }
       
   277     }
       
   278     
       
   279 // -----------------------------------------------------------------------------
       
   280 // CPEConferenceCall::CallCapsChanged
       
   281 // Conference call capabilities have changed.
       
   282 // -----------------------------------------------------------------------------
       
   283 //
       
   284 EXPORT_C void CPEConferenceCall::CallCapsChanged( 
       
   285 		const MCCEConferenceCallObserver::TCCEConferenceCallCaps aCaps )
       
   286 	{
       
   287 	TEFLOGSTRING2( KTAREQEND, "CALL CPEConferenceCall::CallCapsChanged, caps: %d", aCaps );
       
   288 	iCaps = aCaps;
       
   289 	SendMessage( MEngineMonitor::EPEMessageConferenceCapsChange );
       
   290 	}
       
   291 	
       
   292 // -----------------------------------------------------------------------------
       
   293 // CPEConferenceCall::ErrorOccurred
       
   294 // 
       
   295 // -----------------------------------------------------------------------------
       
   296 //
       
   297 EXPORT_C void CPEConferenceCall::ErrorOccurred( TCCPConferenceCallError aError )
       
   298 	{
       
   299 	TEFLOGSTRING2( KTAERROR, "CALL CPEConferenceCall::ErrorOccurred, error: %d", aError );
       
   300 	
       
   301 	iOwner.SendErrorMessage( KPEConferenceCallID, aError );
       
   302 
       
   303 	}
       
   304 	
       
   305 // -----------------------------------------------------------------------------
       
   306 // CPEConferenceCall::SendMessage
       
   307 // Forwards message to CPEConferenceCall object
       
   308 // -----------------------------------------------------------------------------
       
   309 //
       
   310 void CPEConferenceCall::SendMessage( 
       
   311         const MEngineMonitor::TPEMessagesFromPhoneEngine aMessage )
       
   312     {
       
   313     iOwner.SendMessage( aMessage, KPEConferenceCallID );
       
   314     }
       
   315 
       
   316 	
       
   317 // -----------------------------------------------------------------------------
       
   318 // CPEConferenceCall::SendMessage
       
   319 // Forwards message to CPEConferenceCall object
       
   320 // -----------------------------------------------------------------------------
       
   321 //
       
   322 void CPEConferenceCall::SendMessage( 
       
   323         const MEngineMonitor::TPEMessagesFromPhoneEngine aMessage,
       
   324         const TName& aName )
       
   325     {
       
   326     iOwner.SendMessage( aMessage, aName );
       
   327     }
       
   328 // -----------------------------------------------------------------------------
       
   329 // CPEConferenceCall::GetConferenceDuration
       
   330 // Returns Conference duration.
       
   331 // -----------------------------------------------------------------------------
       
   332 //
       
   333 void CPEConferenceCall::GetCallDuration
       
   334         (
       
   335         TTimeIntervalSeconds& aDuration
       
   336         )
       
   337     {    
       
   338     TPEState callState = GetCallState();
       
   339     if ( callState != EPEStateConferenceIdle )
       
   340         {
       
   341         aDuration = iDuration;
       
   342         }
       
   343     else
       
   344         {
       
   345         aDuration = iLastConferenceDuration;
       
   346         }
       
   347     }
       
   348 
       
   349 // -----------------------------------------------------------------------------
       
   350 // CPEConferenceCall::EnumerateCalls
       
   351 // Returns number of conference members
       
   352 // -----------------------------------------------------------------------------
       
   353 //
       
   354 TInt CPEConferenceCall::EnumerateCalls()
       
   355     {
       
   356     TEFLOGSTRING( KTAREQOUT, "cpecall: CPEConferenceCall::EnumerateCalls: MCCEConferenceCall::EnumerateCalls()" );    
       
   357     return iConferenceCall->EnumerateCalls();
       
   358     }
       
   359 
       
   360 // -----------------------------------------------------------------------------
       
   361 // CPEConferenceCall::GetCallCaps
       
   362 // Returns conference call capabilities
       
   363 // -----------------------------------------------------------------------------
       
   364 //
       
   365 MCCEConferenceCallObserver::TCCEConferenceCallCaps 
       
   366     CPEConferenceCall::CallCaps()
       
   367     {
       
   368     return iCaps;
       
   369     }
       
   370 
       
   371 // -----------------------------------------------------------------------------
       
   372 // CPEConferenceCall::HangUp
       
   373 // Ends conference call.
       
   374 // -----------------------------------------------------------------------------
       
   375 //
       
   376 TInt CPEConferenceCall::HangUp()
       
   377     {
       
   378     return iConferenceCall->HangUp();
       
   379     }
       
   380         
       
   381 // -----------------------------------------------------------------------------
       
   382 // CPEConferenceCall::Swap
       
   383 // Swaps conference between active and held states
       
   384 // -----------------------------------------------------------------------------
       
   385 //
       
   386 TInt CPEConferenceCall::Swap()
       
   387     {
       
   388     return iConferenceCall->Swap();
       
   389     }
       
   390 
       
   391 
       
   392 // -----------------------------------------------------------------------------
       
   393 // CPEConferenceCall::GetConferenceMemberName
       
   394 // Returns TName information of added or removed member
       
   395 // -----------------------------------------------------------------------------
       
   396 //
       
   397 void CPEConferenceCall::GetConferenceMemberName
       
   398         ( 
       
   399         TName& aCallName
       
   400         ) const
       
   401     {
       
   402     aCallName = iCallName;
       
   403     }
       
   404 
       
   405 // -----------------------------------------------------------------------------
       
   406 // CPEConferenceCall::GoOneToOneL
       
   407 // Go one to one
       
   408 // -----------------------------------------------------------------------------
       
   409 //
       
   410 void CPEConferenceCall::GoOneToOneL( MCCECall& aCall )
       
   411     {
       
   412     iConferenceCall->GoOneToOneL( aCall );
       
   413     }
       
   414 
       
   415 
       
   416 // -----------------------------------------------------------------------------
       
   417 // CPEConferenceCall::CallDurationChanged
       
   418 // -----------------------------------------------------------------------------
       
   419 //    
       
   420 void CPEConferenceCall::CallDurationChanged( const TTimeIntervalSeconds aDuration )
       
   421     {
       
   422     iDuration = aDuration;
       
   423     iOwner.SendMessage( MEngineMonitor::EPEMessageChangedCallDuration, iCallId );
       
   424     }
       
   425 
       
   426 // End Of File