bluetoothengine/btmac/src/BTMonoCmdHandler/btmcvoipline.cpp
changeset 0 f63038272f30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btmac/src/BTMonoCmdHandler/btmcvoipline.cpp	Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,283 @@
+/*
+* Copyright (c) 2005 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:  VoIP call status handling. 
+*
+*/
+
+#include "btmcvoipline.h"
+#include "btmc_defs.h"
+#include "debug.h"
+#include "btmccallstatus.h"
+#include <ccallinformation.h>
+#include <mcall.h>
+#include <ccallinfoiter.h>
+#include <etelmm.h>
+
+// ==========================================================
+// CBtmcVoIPLine::NewL
+// 
+// ==========================================================
+//
+CBtmcVoIPLine* CBtmcVoIPLine::NewL(CBtmcCallStatus& aParent, RMobilePhone& aPhone) 
+    {
+    CBtmcVoIPLine* self = new (ELeave) CBtmcVoIPLine(aParent, aPhone);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();   
+    return self;
+    }
+
+// ==========================================================
+// CBtmcVoIPLine::ConstructL
+// 
+// ==========================================================
+//
+void CBtmcVoIPLine::ConstructL()
+    {
+    iInfo = CCallInformation::NewL();
+    iInfo->NotifyCallInformationChanges(*this);
+    }
+
+// ==========================================================
+// CBtmcVoIPLine::Phone
+// 
+// ==========================================================
+//
+RMobilePhone& CBtmcVoIPLine::Phone()
+    {    
+    iPhone.Close();
+    return iPhone;
+    }
+
+// ==========================================================
+// CBtmcVoIPLine::CallInformationL
+// 
+// ==========================================================
+//
+const MCall& CBtmcVoIPLine::CallInformationL()
+    {
+    TRACE_FUNC_ENTRY
+    CCallInfoIter& iter = iInfo->GetCallsL();
+    MCall *returnValue = NULL;
+    for( iter.First(); !iter.IsDone(); iter.Next() )
+       {       
+       const MCall& call( iter.Current() );
+       if(call.CallType() == CCPCall::ECallTypePS)
+           {           
+           returnValue = const_cast<MCall*> (&call); 
+           break;                     
+           }            
+       }      
+    TRACE_FUNC_EXIT
+    return *returnValue;
+    }
+
+// ==========================================================
+// CBtmcVoIPLine::CallStatus
+// 
+// ==========================================================
+//
+TInt CBtmcVoIPLine::CallStatusL() const
+    {
+    TRACE_FUNC_ENTRY
+    CCallInfoIter& iter = iInfo->GetCallsL();    
+    TInt mask = 0;    
+    for( iter.First(); !iter.IsDone(); iter.Next() )
+       {
+       const MCall& call( iter.Current() );       
+       if(call.CallType() == CCPCall::ECallTypePS)
+           {                      
+           TInt tempState =  call.CallState();                     
+           switch(call.CallState())
+               {
+               /** Indicates initial call state after call creation. Basic state. */
+               case CCPCall::EStateIdle:
+                   break;
+                /** Indicates that the MT call is ringing but not answered yet by the local user. Basic state.*/
+               case CCPCall::EStateRinging:
+                   {
+                   mask |= KCallRingingBit;
+                   break;
+                   }       
+                /** MO Call: the network notifies to the MS that the remote party is now ringing. Basic state.*/
+               case CCPCall::EStateConnecting:
+                   {
+                   mask |= KCallConnectingBit;
+                   break;
+                   }
+                /** Indicates that call is connected and active. Basic state.*/
+               case CCPCall::EStateConnected:
+                   {
+                   mask |= KCallConnectedBit;
+                   break;
+                   }
+                /** Indicates that call is disconnecting. Basic state.*/
+               case CCPCall::EStateDisconnecting:
+                   break;
+
+                /** Indicates that the call is connected but on hold. Basic state.*/
+               case CCPCall::EStateHold:
+                   {
+                   mask |= KCallHoldBit;
+                   break;
+                   }
+                /** Call is transfering. Optional state.*/
+               case CCPCall::EStateTransferring:
+                /** MO call is being forwarded at receiver end. Optional state. */
+               case CCPCall::EStateForwarding:
+                /** Call is queued locally. Optional state. */
+               case CCPCall::EStateQueued:
+                   break;
+                /** Indicates that the local user has answered the MT call but the network has not
+                    acknowledged the call connection yet.  Must be sent after MCCPCall::Answer method has been completed. */
+               case CCPCall::EStateAnswering:
+                   {
+                   mask |= KCallAnsweringBit;
+                   break;          
+                   }
+               
+                /** Indicates that the call is dialing. Must be sent after MCCPCall::Dial method has been completed. */
+               case CCPCall::EStateDialling:            
+                   {           
+                   mask |= KCallDiallingBit;
+                   break;
+                   }                      
+               }           
+           }
+       }
+    TRACE_INFO((_L("Voip line, CALL STATUS 0x%08x"), mask))    
+    TRACE_FUNC_EXIT
+    return mask;
+    }
+
+// ==========================================================
+// CBtmcVoIPLine::~CBtmcVoIPLine
+// Destructor
+// ==========================================================
+//
+CBtmcVoIPLine::~CBtmcVoIPLine()
+    {
+    if (iInfo != NULL)
+        {
+        iInfo->CancelNotification();
+        delete iInfo;
+        }    
+    }
+
+// ==========================================================
+// CBtmcVoIPLine::ActiveCalls
+// Destructor
+// ==========================================================
+//
+const RPointerArray<CBtmcCallActive>& CBtmcVoIPLine::ActiveCalls() const
+    {
+    TRACE_FUNC
+    return iCallActives;
+    }
+
+// ==========================================================
+// CBtmcVoIPLine::CallInformationChanged
+// Callback
+// ==========================================================
+//
+void CBtmcVoIPLine::CallInformationChanged()
+    {
+    TRACE_FUNC
+    TRAP_IGNORE( CallInformationChangedL() );
+    }
+
+// ==========================================================
+// CBtmcVoIPLine::CBtmcVoIPLine
+// Constructor
+// ==========================================================
+//
+CBtmcVoIPLine::CBtmcVoIPLine(CBtmcCallStatus& aParent, RMobilePhone& aPhone) : iParent(aParent), iPhone(aPhone)
+    {    
+    }
+
+// ==========================================================
+// CBtmcVoIPLine::IsVoIP
+// Returns always ETrue  
+// ==========================================================
+//
+TBool CBtmcVoIPLine::IsVoip()
+    {
+    return ETrue; 
+    }
+
+// ==========================================================
+// CBtmcVoIPLine::CallInformationChangedL
+// Pass the call status change to the owner of this if necessary
+// ==========================================================
+//
+void CBtmcVoIPLine::CallInformationChangedL()
+    {
+    TRACE_FUNC_ENTRY
+    _LIT(KVoip, "VoIP");
+    _LIT(KVoipCall, "VoIP Call");        
+    TPtrC voipPtr(KVoip);    
+
+    CCallInfoIter& iter = iInfo->GetCallsL();    
+    for( iter.First(); !iter.IsDone(); iter.Next() )
+        {
+        const MCall& call( iter.Current() );
+        if(call.CallType() == CCPCall::ECallTypePS)
+            {            
+            switch(call.CallState())
+                {
+                /** Indicates initial call state after call creation. Basic state. */
+                case CCPCall::EStateIdle:
+                    iParent.HandleMobileCallEventL( voipPtr , KVoipCall, RMobileCall::EStatusIdle);
+                    break;
+                    /** Indicates that the MT call is ringing but not answered yet by the local user. Basic state.*/
+                case CCPCall::EStateRinging:
+                    iParent.HandleMobileCallEventL(voipPtr, KVoipCall, RMobileCall::EStatusRinging);
+                    break;
+                    /** MO Call: the network notifies to the MS that the remote party is now ringing. Basic state.*/
+                case CCPCall::EStateConnecting:
+                    iParent.HandleMobileCallEventL(voipPtr, KVoipCall, RMobileCall::EStatusConnecting);
+                    break;
+                    /** Indicates that call is connected and active. Basic state.*/
+                case CCPCall::EStateConnected:                           
+                    iParent.HandleMobileCallEventL(voipPtr, KVoipCall, RMobileCall::EStatusConnected);
+                    break;
+                    /** Indicates that call is disconnecting. Basic state.*/
+                case CCPCall::EStateDisconnecting:
+                    iParent.HandleMobileCallEventL(voipPtr, KVoipCall, RMobileCall::EStatusDisconnecting);
+                    break;
+                    /** Indicates that the call is connected but on hold. Basic state.*/
+                case CCPCall::EStateHold:
+                    iParent.HandleMobileCallEventL(voipPtr, KVoipCall, RMobileCall::EStatusHold);
+                    break;
+                    /** Call is transfering. Optional state.*/
+                case CCPCall::EStateTransferring:
+                    /** MO call is being forwarded at receiver end. Optional state. */
+                case CCPCall::EStateForwarding:
+                    /** Call is queued locally. Optional state. */
+                case CCPCall::EStateQueued:
+                    break;
+                    /** Indicates that the local user has answered the MT call but the network has not
+            acknowledged the call connection yet.  Must be sent after MCCPCall::Answer method has been completed. */
+                case CCPCall::EStateAnswering:
+                    iParent.HandleMobileCallEventL(voipPtr, KVoipCall, RMobileCall::EStatusAnswering);
+                    break;
+                    /** Indicates that the call is dialing. Must be sent after MCCPCall::Dial method has been completed. */
+                case CCPCall::EStateDialling:            
+                    iParent.HandleMobileCallEventL(voipPtr, KVoipCall, RMobileCall::EStatusDialling);
+                    break;
+                }                
+            }
+        }
+    TRACE_FUNC_EXIT
+    }