vtengines/videoteleng/CallCtrl/Src/CVtCtlCallControl.cpp
changeset 0 ed9695c8bcbe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vtengines/videoteleng/CallCtrl/Src/CVtCtlCallControl.cpp	Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,252 @@
+/*
+* Copyright (c) 2007 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:  CVtCtlCallControl class implementation.
+*
+*/
+
+
+#pragma CTC SKIP
+// INCLUDE FILES
+#include <cvtlogger.h>
+#include    "CVtCtlCallControl.h"
+#include    "MVtCtlEventObserver.h"
+#include    "CVtCtlSessionContainer.h"
+#include    "CVtCtlVideoCall.h"
+#include    "VtCtlTypes.h"
+#include    <cvtlogger.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CVtCtlCallControl::NewL
+// two-phase constructor
+// -----------------------------------------------------------------------------
+//
+CVtCtlCallControl* CVtCtlCallControl::NewL(
+            MVtCtlEventObserver& aEventObserver )
+    {
+    __VTPRINTENTER( "CVtCtlCallControl.NewL" )
+    CVtCtlCallControl* self = new ( ELeave )
+        CVtCtlCallControl( aEventObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    __VTPRINTEXIT( "CVtCtlCallControl.NewL" )
+    return self;
+    }
+        
+// -----------------------------------------------------------------------------
+// CVtCtlCallControl::~CVtCtlCallControl
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CVtCtlCallControl::~CVtCtlCallControl()
+    {
+    __VTPRINTENTER( "CVtCtlCallControl.~" )
+    delete iContainer;
+    // uninitialize logging (if enabled)
+    VTLOGUNINIT
+    __VTPRINTEXIT( "CVtCtlCallControl.~" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtCtlCallControl::CVtCtlCallControl
+// c++ constructor
+// -----------------------------------------------------------------------------
+//
+CVtCtlCallControl::CVtCtlCallControl(
+    MVtCtlEventObserver& aEventObserver ) :
+    iEventObserver( aEventObserver )
+    {
+    __VTPRINTENTER( "CVtCtlCallControl.CVtCtlCallControl" )
+    __VTPRINTEXIT( "CVtCtlCallControl.CVtCtlCallControl" )
+    }
+
+
+// -----------------------------------------------------------------------------
+// CVtCtlCallControl::ConstructL
+// 
+// -----------------------------------------------------------------------------
+//
+void CVtCtlCallControl::ConstructL()
+    {
+    __VTPRINTENTER( "CVtCtlCallControl.ConstructL" )
+    // initialize logging (if enabled)
+    VTLOGINIT
+    iContainer = CVtCtlSessionContainer::NewL( *this );
+    __VTPRINTEXIT( "CVtCtlCallControl.ConstructL" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtCtlCallControl::GetDuration
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CVtCtlCallControl::GetDuration(
+    TVtCtlSessionId aId,
+    TVtCtlDuration& aDuration )     
+    {
+    __VTPRINTENTER( "CVtCtlCallControl.GetDuration" )
+    CVtCtlVideoCall* call = iContainer->FindCall( aId );
+    TInt err( KErrNotFound );
+    if ( call )
+        {
+        err = call->GetDuration( aDuration );
+        }
+    __VTPRINTEXIT( "CVtCtlCallControl.GetDuration" )
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtCtlCallControl::GetSessionInfoL
+// 
+// -----------------------------------------------------------------------------
+//
+/*****************************************************
+*   Series 60 Customer / ETel
+*   Series 60  ETel API
+*****************************************************/
+void CVtCtlCallControl::GetSessionInfoL( 
+    TVtCtlSessionId aId,
+    TDes8& aInfo )
+    {
+    __VTPRINTENTER( "CVtCtlCallControl.GetSessionInfoL" )
+    ValidateDataExtensionL( aInfo, EVtCtlCSSessionInfoExtensionId );
+    CVtCtlVideoCall* call = iContainer->FindCall( aId );
+    if ( call )
+        {
+        TPckg<TVtCtlCSSessionInfoV1>& pckg = 
+            reinterpret_cast<TPckg<TVtCtlCSSessionInfoV1>&>( aInfo );
+        TVtCtlCSSessionInfoV1& info = pckg();
+        TInt err( call->UpdateCallInfo() );
+        if ( err == KErrNone )
+            {
+            const RMobileCall::TMobileCallInfoV1& mobileInfo = call->MobileInfo();
+            info.iDuration = mobileInfo.iDuration;
+            info.iTelNumber = mobileInfo.iRemoteParty.iRemoteNumber.iTelNumber;
+            __VTPRINT2( DEBUG_SESSION, "VtCtl: mobile dir=%d", 
+                mobileInfo.iRemoteParty.iDirection  )
+            switch ( mobileInfo.iRemoteParty.iDirection )
+                {
+                case RMobileCall::EMobileOriginated:
+                    info.iDirection = EDirectionMobileOriginated;
+                    break;
+                case RMobileCall::EMobileTerminated:
+                    info.iDirection = DirectionMobileTerminated;
+                    break;
+                case RMobileCall::EDirectionUnknown:
+                default:
+                    info.iDirection = EDirectionUnknown;
+                    break;
+                }
+            }
+        }
+    else
+        {
+        __VTPRINT( DEBUG_SESSION, "CallCtrl.GetSessionInfoL not found" )
+        User::Leave( KErrNotFound );
+        }
+    __VTPRINTEXIT( "CVtCtlCallControl.GetSessionInfoL" )
+    }
+
+
+// -----------------------------------------------------------------------------
+// CVtCtlCallControl::GetState
+// 
+// -----------------------------------------------------------------------------
+//
+MVtCtlCallControl::TVtCtlState CVtCtlCallControl::GetSessionState( 
+    TVtCtlSessionId aId ) const
+    {
+    __VTPRINTENTER( "CVtCtlCallControl.GetSessionState" )
+    __VTPRINT2( DEBUG_SESSION, "CallCtrl.GetSessionState for id:%d",aId )
+    MVtCtlCallControl::TVtCtlState state = EUnknown;
+    CVtCtlVideoCall* call = iContainer->FindCall( aId );
+    if ( call )
+        {
+        call->GetCallState( state );
+        }
+    __VTPRINT3( DEBUG_SESSION, " callPtr=%d state=%d", (TInt) call, state )
+    __VTPRINTEXIT( "CVtCtlCallControl.GetSessionState" )
+    return state;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtCtlCallControl::GetPreviousState
+// 
+// -----------------------------------------------------------------------------
+//
+MVtCtlCallControl::TVtCtlState CVtCtlCallControl::GetPreviousPreviousState(
+    TVtCtlSessionId aId ) const
+    {
+    __VTPRINTENTER( "CVtCtlCallControl.GetPreviousPreviousState" )
+    MVtCtlCallControl::TVtCtlState state = EUnknown;
+    const CVtCtlVideoCall* call = iContainer->FindCall( aId );
+    if ( call )
+        {
+        state = call->CallInfo().iPreviousStatus;
+        }
+    __VTPRINTEXIT( "CVtCtlCallControl.GetPreviousPreviousState" )
+    return state;
+    }
+
+// -----------------------------------------------------------------------------
+// CVtCtlCallControl::HandleCallStatusChangeL
+// Notifies observer about call status change.
+// -----------------------------------------------------------------------------
+//
+void CVtCtlCallControl::HandleCallStatusChangeL(
+    TVtCtlSessionId aId,
+    MVtCtlCallControl::TVtCtlState aStatus,
+    MVtCtlCallControl::TVtCtlState aPreviousStatus )
+    {
+    __VTPRINTENTER( "CVtCtlCallControl.HandleCallStatusChangeL" )
+    __VTPRINT2( DEBUG_SESSION, " status=%d", (TInt) aStatus )
+    
+    TVtCtlSessionStateEvent event;
+    event.iPreviousState = aPreviousStatus;
+    event.iState = aStatus;
+    event.iSessionId = aId;
+
+    TAny* parameter = &event;
+    iEventObserver.HandleVtSessionEventL(
+        KVtCtlEventSessionStatusChanged,
+        parameter );
+    __VTPRINTEXIT( "CVtCtlCallControl.HandleCallStatusChangeL" )
+    }
+
+// -----------------------------------------------------------------------------
+// CVtCtlCallControl::ValidateDataExtensionL
+// Validates extension id of descriptor representation of data type.
+// -----------------------------------------------------------------------------
+//
+void CVtCtlCallControl::ValidateDataExtensionL(
+    TDesC8& aData,
+    TInt aExtension )
+    {
+    __VTPRINTENTER( "CVtCtlCallControl.ValidateDataExtensionL" )
+    TVtCtlType type;
+    TPckg<TVtCtlType> pckg(type);
+    TPtrC8 ptr( aData.Ptr(), sizeof( TVtCtlType ) );
+    pckg.Copy( ptr );
+    if ( type.Extension() != aExtension )
+        {
+        __VTPRINT( DEBUG_SESSION, "CallCtrl.Validate not supported" )
+        User::Leave( KErrNotSupported );
+        }
+    __VTPRINTEXIT( "CVtCtlCallControl.ValidateDataExtensionL" )
+    }
+#pragma CTC ENDSKIP
+//  End of File  
+