convergedcallengine/csplugin/src/cspcalladdedhandler.cpp
branchRCL_3
changeset 20 987c9837762f
parent 0 ff3b6d0fd310
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/convergedcallengine/csplugin/src/cspcalladdedhandler.cpp	Wed Sep 01 12:15:03 2010 +0100
@@ -0,0 +1,262 @@
+/*
+* Copyright (c) 2007-2009 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:  Implements the class CSPCallAddedHandler
+*
+*/
+
+
+#include "cspcalladdedhandler.h"
+
+#include <etelmm.h>
+#include <mccpcsobserver.h>
+
+#include "cspcallarray.h"
+#include "cspetellinestatusmonitor.h"
+#include "mcsplinestatusobserver.h"
+#include "rcsplinecontainer.h"
+#include "csplogger.h"
+#include "cspclientvoicecall.h"
+#include "cspclientvideocall.h"
+#include "rcsplinecontainer.h"
+#include "mcspcommoninfo.h"
+#include "cspconsts.h"
+
+
+// ---------------------------------------------------------------------------
+// CSPCallAddedHandler::NewL.
+// ---------------------------------------------------------------------------
+//
+CSPCallAddedHandler* CSPCallAddedHandler::NewL( 
+                                   const MCCPCSObserver& aObserver,
+                                   RCSPLineContainer& aLineContainer,
+                                   CSPCallArray& aCallArray,
+                                   MCSPCommonInfo& aCommonInfo,
+                                   CSPAudioHandler& aAudioHandler )
+    {
+    CSPLOGSTRING(CSPOBJECT, "CSPCallAddedHandler::NewL()" );
+    CSPCallAddedHandler* self = new ( ELeave ) CSPCallAddedHandler( 
+                                        aObserver, aLineContainer,
+                                        aCallArray, aCommonInfo, 
+                                        aAudioHandler );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;    
+    }
+
+// ---------------------------------------------------------------------------
+// Destructs the object by canceling first ongoing monitoring.
+// ---------------------------------------------------------------------------
+//
+CSPCallAddedHandler::~CSPCallAddedHandler( )
+    {
+    CSPLOGSTRING(CSPOBJECT, "CSPCallAddedHandler::~CSPCallAddedHandler" );
+    delete iAuxLineMonitor;
+    delete iVoiceLineMonitor;
+    delete iDataLineMonitor;
+    }
+
+// ---------------------------------------------------------------------------
+// CSPCallAddedHandler::CallAdded
+// ---------------------------------------------------------------------------
+//
+void CSPCallAddedHandler::CallAdded( RMobileLine& aLine, 
+                        TName aCallName,
+                        RCSPLineContainer::TCSPLineId aLineId )
+    {
+    CSPLOGSTRING2(CSPINT, 
+            "CSPCallAddedHandler::CallAdded line: %d", aLineId);
+    CSPLOGSTRING2(CSPINT, 
+            "CSPCallAddedHandler::CallAdded call name: %S", &aCallName);
+    
+    // Find call by name
+    if ( !iCallArray.FindCall( aCallName ) )
+        {        
+        TInt err( KErrNone );
+        
+        // Resolve call type
+        TUint32 serviceId( 0 );
+        CCPCall::TCallType callType;
+        CCCECallParameters::TCCELineType lineType;
+
+        iLineContainer.ResolveCallInfo( aLineId, serviceId, callType, lineType );
+        
+        CSPCall* call = NULL;
+        CCCECallParameters* callParameters = NULL;
+        
+        TRAP_IGNORE( callParameters = CCCECallParameters::NewL() );
+        if ( callParameters )
+            {
+            callParameters->SetServiceId(serviceId);
+            callParameters->SetCallType(callType);
+            callParameters->SetLineType(lineType);
+
+            CSPLOGSTRING2(CSPINT, 
+                    "CSPCallAddedHandler::CallAdded call type: %d", callType );
+            
+            if ( callType == CCPCall::ECallTypeCSVoice )
+                {
+                TRAP( err, call = CSPClientVoiceCall::NewL( aCallName, 
+                                                    aLine, *callParameters, 
+                                                    iCommonInfo ));
+                }                
+            else if ( callType == CCPCall::ECallTypeVideo )
+                {
+                CSPLOGSTRING(CSPINT, 
+                        "CSPCallAddedHandler::CallAdded creating video call");
+                TRAP( err, call = CSPClientVideoCall::NewL( aCallName, 
+                                                    aLine, *callParameters, 
+                                                    iCommonInfo ));
+                }
+
+            delete callParameters;
+            callParameters = NULL; 
+            }
+        
+        CSPLOGSTRING2(CSPINT, 
+           "CSPCallAddedHandler::CallAdded Client call creation res %d", err );
+        
+        if ( call )
+            {
+            // Set audio handler for DevSound
+            call->SetAudioHandler( &iAudioHandler );
+            
+            MCCPCallObserver::TCCPCallState callState = call->State(); 
+            CSPLOGSTRING2(CSPINT, 
+                    "CSPCallAddedHandler::CallAdded call state: %d", callState );
+            
+            if ( callState == MCCPCallObserver::ECCPStateDialling )
+               {                   
+               CSPLOGSTRING(CSPINT, 
+                       "CSPCallAddedHandler::CallAdded add Dialling call" );
+               
+               iCallArray.Add( call );
+               
+               CSPLOGSTRING(CSPINT, 
+                       "CSPCallAddedHandler::CallAdded notifying dialling state" );
+               
+               call->NotifyCallStateChangedETel( RMobileCall::EStatusDialling ); 
+               }
+            else if ( callState == MCCPCallObserver::ECCPStateConnecting || 
+                      callState == MCCPCallObserver::ECCPStateConnected )
+               {
+               CSPLOGSTRING(CSPINT, 
+                       "CSPCallAddedHandler::CallAdded add Connecting/Connected call" );
+               iCallArray.Add( call );                              
+               iCommonInfo.IndicateClientCall( call );
+               }
+            else 
+                {
+                CSPLOGSTRING(CSPERROR, 
+                        "CSPCallAddedHandler::CallAdded ignore call" );
+                delete call;
+                }
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSPCallAddedHandler::LineStatusChanged
+// ---------------------------------------------------------------------------
+//
+void CSPCallAddedHandler::LineStatusChanged( RMobileLine& aLine, 
+                                             RCSPLineContainer::TCSPLineId aLineId,
+                                             RMobileCall::TMobileCallStatus& aLineStatus )
+    {    
+    CSPLOGSTRING2(CSPINT, 
+            "CSPCallAddedHandler::LineStatusChanged line: %d", aLineId );
+    CSPLOGSTRING2(CSPINT, 
+            "CSPCallAddedHandler::LineStatusChanged line status: %d", 
+            aLineStatus );
+    
+    if ( aLineStatus == RMobileCall::EStatusDialling )
+        {
+        TInt err(KErrNone);
+        RLine::TLineInfo lineInfo;
+        err = aLine.GetInfo( lineInfo );
+        TName callName; 
+        
+        if ( err == KErrNone )
+            {
+            callName = lineInfo.iNameOfLastCallAdded;
+            CallAdded( aLine, callName, aLineId); 
+            }
+        else 
+            {
+            CSPLOGSTRING2(CSPERROR, 
+                    "CSPCallAddedHandler::LineStatusChanged get info err:%d", 
+                    err);
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Constructs the monitor.
+// ---------------------------------------------------------------------------
+//
+CSPCallAddedHandler::CSPCallAddedHandler(
+            const MCCPCSObserver& aObserver,
+            RCSPLineContainer& aLineContainer,
+            CSPCallArray& aCallArray,
+            MCSPCommonInfo& aCommonInfo,
+            CSPAudioHandler& aAudioHandler ) :
+            iLineContainer( aLineContainer ),
+            iObserver( aObserver ),            
+            iCallArray( aCallArray ),
+            iCommonInfo( aCommonInfo ),
+            iAudioHandler( aAudioHandler )
+    {
+    CSPLOGSTRING(CSPOBJECT, "CSPCallAddedHandler::CSPCallAddedHandler");
+    }
+    
+// ---------------------------------------------------------------------------
+// Second phase construction.
+// ---------------------------------------------------------------------------
+//
+void CSPCallAddedHandler::ConstructL()
+    {
+    CSPLOGSTRING(CSPOBJECT, "CSPCallAddedHandler::ConstructL <");
+    
+    if ( iLineContainer.LineIsOpen( RCSPLineContainer::ECSPLineSpeech ) )
+        {
+        RMobileLine& line = iLineContainer.LineByType( 
+                                RCSPLineContainer::ECSPLineSpeech );
+        iVoiceLineMonitor = CSPEtelLineStatusMonitor::NewL( *this, line, 
+                                            RCSPLineContainer::ECSPLineSpeech );
+        iVoiceLineMonitor->StartMonitoring();
+        }
+    // This is for videocalls
+    if ( iLineContainer.LineIsOpen( RCSPLineContainer::ECSPLineData ) )
+        {
+        RMobileLine& line = iLineContainer.LineByType( 
+                                RCSPLineContainer::ECSPLineData );
+
+        iDataLineMonitor = CSPEtelLineStatusMonitor::NewL( *this, line, 
+                                                    RCSPLineContainer::ECSPLineData );
+        iDataLineMonitor->StartMonitoring();
+        }
+
+    if ( iLineContainer.LineIsOpen( RCSPLineContainer::ECSPLineAuxSpeech ) )
+        {
+        RMobileLine& line = iLineContainer.LineByType( 
+                                RCSPLineContainer::ECSPLineAuxSpeech );
+        iAuxLineMonitor = CSPEtelLineStatusMonitor::NewL( *this, line, 
+                                            RCSPLineContainer::ECSPLineAuxSpeech );
+        iAuxLineMonitor->StartMonitoring();
+        }
+    
+    CSPLOGSTRING(CSPOBJECT, "CSPCallAddedHandler::ConstructL >");
+    }
+    
+// End of File