/// <summary>
        /// Gets all current call data.
        /// </summary>
        /// <param name="incoming">Incoming calldata instance to be filled.</param>
        /// <param name="active">Active calldata instance to be filled.</param>
        /// <param name="held">Held calldata instance to be filled.</param>
        /// <exception cref="InvalidOperationException">Thrown when method failed due to invalid operation.</exception>
        public void GetAllCallData(out CallData incoming, out CallData active, out CallData held)
        {
            int ret = Interop.CallManager.GetAllCallData(_handle, out IntPtr incomingCall, out IntPtr activeCall, out IntPtr heldCall);

            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get all call data, Error: " + (CmError)ret);
                CmUtility.ThrowCmException(ret, _handle);
            }

            incoming = CmUtility.GetCallData(incomingCall);
            active   = CmUtility.GetCallData(activeCall);
            held     = CmUtility.GetCallData(heldCall);
        }
Exemple #2
0
        internal static CallData GetCallData(IntPtr handle)
        {
            if (handle == IntPtr.Zero)
            {
                return(null);
            }

            CallData data = new CallData();
            int      ret  = Interop.CallManager.GetCallId(handle, out uint id);

            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get call ID from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.CallId = id;
            }

            ret = Interop.CallManager.GetCallDirection(handle, out CallDirection direction);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get call direction from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.CallDirection = direction;
            }

            ret = Interop.CallManager.GetCallNumber(handle, out string number);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get call number from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.Number = number;
            }

            ret = Interop.CallManager.GetCallingName(handle, out string name);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get calling name from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.Name = name;
            }

            ret = Interop.CallManager.GetCallType(handle, out CallType type);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get call type from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.CallType = type;
            }

            ret = Interop.CallManager.GetCallState(handle, out CallState state);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get call state from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.CallState = state;
            }

            ret = Interop.CallManager.GetCallMemberCount(handle, out int count);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get call member count from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.Count = count;
            }

            ret = Interop.CallManager.IsEmergencyCall(handle, out bool isEmergency);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to check if the call is emergency from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.IsEcc = isEmergency;
            }

            ret = Interop.CallManager.IsVoiceMailNumber(handle, out bool isVoiceMail);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to check if the number is voicemail number from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.IsVoiceMail = isVoiceMail;
            }

            ret = Interop.CallManager.GetCallDomain(handle, out CallDomain domain);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get call domain from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.CallDomain = domain;
            }

            ret = Interop.CallManager.GetPersonId(handle, out int personId);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get person ID from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.PersonIndex = personId;
            }

            ret = Interop.CallManager.GetStartTime(handle, out long startTime);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get start time from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.CallStartTime = startTime;
            }

            ret = Interop.CallManager.GetNameMode(handle, out CallNameMode nameMode);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get name mode from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.CallNameMode = nameMode;
            }

            ret = Interop.CallManager.GetSessionId(handle, out int sessionId);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get session ID from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.SessionIdIms = sessionId;
            }

            ret = Interop.CallManager.GetHdIconState(handle, out int isHdEnable);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get HD icon state from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.IsHdEnableIms = (isHdEnable == 1) ? true : false;
            }

            ret = Interop.CallManager.IsWiFiCalling(handle, out int isWiFiCalling);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to identify WiFi calling from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.IsWiFiCall = (isWiFiCalling == 1) ? true : false;
            }

            ret = Interop.CallManager.GetUpgradeDowngradeState(handle, out int isEnable);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get updagrade downgrade state from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.IsUpgradeDowngrade = (isEnable == 1) ? true : false;
            }

            ret = Interop.CallManager.IsRemoteOnHold(handle, out int isHold);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to get remote on hold state from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.IsRemoteHold = (isHold == 1) ? true : false;
            }

            ret = Interop.CallManager.IsAddedToConference(handle, out int isAdded);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to check if the call is in conf state from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.IsAddedToConf = (isAdded == 1) ? true : false;
            }

            ret = Interop.CallManager.IsForwardedCall(handle, out bool isForwarded);
            if (ret != (int)CmError.None)
            {
                Log.Error(CmUtility.LogTag, "Failed to check if the call is forwarded call from call data, Error: " + (CmError)ret);
            }

            else
            {
                data.IsForwardedCall = isForwarded;
            }

            return(data);
        }
Exemple #3
0
        internal static CallEventData GetCallEventData(CallEvent callEvent, IntPtr handle)
        {
            if (handle == IntPtr.Zero)
            {
                return(null);
            }

            CallEventData eventData = new CallEventData();

            if (callEvent == CallEvent.Active)
            {
                int ret = Interop.CallManager.GetEventDataCallId(handle, out uint id);
                if (ret != (int)CmError.None)
                {
                    Log.Error(CmUtility.LogTag, "Failed to get event data call ID, Error: " + (CmError)ret);
                }

                else
                {
                    eventData.EventId = id;
                }

                ret = Interop.CallManager.GetSimSlot(handle, out MultiSimSlot simSlot);
                if (ret != (int)CmError.None)
                {
                    Log.Error(CmUtility.LogTag, "Failed to get event data sim slot, Error: " + (CmError)ret);
                }

                else
                {
                    eventData.Slot = simSlot;
                }

                ret = Interop.CallManager.GetIncomingCallData(handle, out IntPtr incoming);
                if (ret != (int)CmError.None)
                {
                    Log.Error(CmUtility.LogTag, "Failed to get incoming call data, Error: " + (CmError)ret);
                }

                else
                {
                    CallData incomingData = GetCallData(incoming);
                    if (incomingData != null)
                    {
                        ret = Interop.CallManager.FreeCallData(incoming);
                        if (ret != (int)CmError.None)
                        {
                            Log.Error(CmUtility.LogTag, "Failed to free incoming call data, Error: " + (CmError)ret);
                        }
                    }

                    eventData.Incoming = incomingData;
                }

                ret = Interop.CallManager.GetActiveCall(handle, out IntPtr active);
                if (ret != (int)CmError.None)
                {
                    Log.Error(CmUtility.LogTag, "Failed to get active call data, Error: " + (CmError)ret);
                }

                else
                {
                    CallData activeData = GetCallData(active);
                    if (activeData != null)
                    {
                        ret = Interop.CallManager.FreeCallData(active);
                        if (ret != (int)CmError.None)
                        {
                            Log.Error(CmUtility.LogTag, "Failed to free active call data, Error: " + (CmError)ret);
                        }
                    }

                    eventData.Active = activeData;
                }

                ret = Interop.CallManager.GetHeldCall(handle, out IntPtr held);
                if (ret != (int)CmError.None)
                {
                    Log.Error(CmUtility.LogTag, "Failed to get held call data, Error: " + (CmError)ret);
                }

                else
                {
                    CallData heldData = GetCallData(held);
                    if (heldData != null)
                    {
                        ret = Interop.CallManager.FreeCallData(held);
                        if (ret != (int)CmError.None)
                        {
                            Log.Error(CmUtility.LogTag, "Failed to free held call data, Error: " + (CmError)ret);
                        }
                    }

                    eventData.Held = heldData;
                }
            }

            else if (callEvent == CallEvent.Idle)
            {
                int ret = Interop.CallManager.GetEndCause(handle, out CallEndCause endCause);
                if (ret != (int)CmError.None)
                {
                    Log.Error(CmUtility.LogTag, "Failed to get end cause, Error: " + (CmError)ret);
                }

                else
                {
                    eventData.Cause = endCause;
                }
            }

            return(eventData);
        }