private void StartNewCallSync(SIPCallDescriptor callDescriptor) { try { callDescriptor.DialPlanContextID = (m_dialPlanContext != null) ? m_dialPlanContext.DialPlanContextID : Guid.Empty; if (callDescriptor.DelaySeconds != 0) { callDescriptor.DelayMRE = new ManualResetEvent(false); lock (m_delayedCalls) { m_delayedCalls.Add(callDescriptor); } int delaySeconds = (callDescriptor.DelaySeconds > MAX_DELAY_SECONDS) ? MAX_DELAY_SECONDS : callDescriptor.DelaySeconds; FireProxyLogEvent(new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.AppServer, SIPMonitorEventTypesEnum.DialPlan, "Delaying call leg to " + callDescriptor.Uri + " by " + delaySeconds + "s.", m_username)); callDescriptor.DelayMRE.WaitOne(delaySeconds * 1000); } lock (m_delayedCalls) { m_delayedCalls.Remove(callDescriptor); } if (!m_callAnswered && !m_commandCancelled) { ISIPClientUserAgent uacCall = null; if (callDescriptor.ToSIPAccount == null) { if (callDescriptor.IsGoogleVoiceCall) { FireProxyLogEvent(new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.AppServer, SIPMonitorEventTypesEnum.DialPlan, "Creating Google Voice user agent for " + callDescriptor.Uri + ".", m_username)); uacCall = new GoogleVoiceUserAgent(m_sipTransport, m_callManager, m_statefulProxyLogEvent, m_username, m_adminMemberId, m_outboundProxySocket); } else { uacCall = new SIPClientUserAgent(m_sipTransport, m_outboundProxySocket, m_username, m_adminMemberId, m_statefulProxyLogEvent, m_customerAccountDataLayer.GetRtccCustomer, m_customerAccountDataLayer.GetRtccRate, m_customerAccountDataLayer.GetBalance, m_customerAccountDataLayer.ReserveInitialCredit, m_customerAccountDataLayer.UpdateRealTimeCallControlCDRID); } } else { if (QueueNewCall_External == null) { FireProxyLogEvent(new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.AppServer, SIPMonitorEventTypesEnum.DialPlan, "B2B calls are not supported in this dialplan manifestation.", m_username)); } else { FireProxyLogEvent(new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.AppServer, SIPMonitorEventTypesEnum.DialPlan, "Creating B2B call for " + callDescriptor.Uri + ".", m_username)); uacCall = new SIPB2BUserAgent(m_statefulProxyLogEvent, QueueNewCall_External, m_sipTransport, m_username, m_adminMemberId); } } //ISIPClientUserAgent uacCall = new JingleUserAgent(m_username, m_adminMemberId, m_statefulProxyLogEvent); if (uacCall != null) { lock (m_switchCalls) { m_switchCalls.Add(uacCall); } uacCall.CallAnswered += UACCallAnswered; uacCall.CallFailed += UACCallFailed; uacCall.CallRinging += UACCallProgress; //uacCall.CallTrying += UACCallTrying; uacCall.Call(callDescriptor); } } } catch (Exception excp) { logger.Error("Exception ForkCall StartNewCall. " + excp.Message); } }
private void StartNewCallSync(SIPCallDescriptor callDescriptor) { try { // A call will not be delayed if there are no other calls being attempted. if (callDescriptor.DelaySeconds != 0 && m_switchCalls.Count > 0) { callDescriptor.DelayMRE = new ManualResetEvent(false); lock (m_delayedCalls) { m_delayedCalls.Add(callDescriptor); } int delaySeconds = (callDescriptor.DelaySeconds > MAX_DELAY_SECONDS) ? MAX_DELAY_SECONDS : callDescriptor.DelaySeconds; FireProxyLogEvent(new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.AppServer, SIPMonitorEventTypesEnum.DialPlan, "Delaying call leg to " + callDescriptor.Uri + " by " + delaySeconds + "s.", m_username)); callDescriptor.DelayMRE.WaitOne(delaySeconds * 1000); } lock (m_delayedCalls) { m_delayedCalls.Remove(callDescriptor); } if (!m_callAnswered && !m_commandCancelled) { ISIPClientUserAgent uacCall = null; if (callDescriptor.ToSIPAccount == null) { if (callDescriptor.IsGoogleVoiceCall) { FireProxyLogEvent(new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.AppServer, SIPMonitorEventTypesEnum.DialPlan, "Creating Google Voice user agent for " + callDescriptor.Uri + ".", m_username)); uacCall = new GoogleVoiceUserAgent(m_sipTransport, m_callManager, m_statefulProxyLogEvent, m_username, m_adminMemberId, m_outboundProxySocket); } else { uacCall = new SIPClientUserAgent(m_sipTransport, m_outboundProxySocket, m_username, m_adminMemberId, m_statefulProxyLogEvent); } } else { FireProxyLogEvent(new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.AppServer, SIPMonitorEventTypesEnum.DialPlan, "Creating B2B call for " + callDescriptor.Uri + ".", m_username)); uacCall = new SIPB2BUserAgent(m_statefulProxyLogEvent, QueueNewCall_External, m_sipTransport, m_username, m_adminMemberId); } //ISIPClientUserAgent uacCall = new JingleUserAgent(m_username, m_adminMemberId, m_statefulProxyLogEvent); lock (m_switchCalls) { m_switchCalls.Add(uacCall); } uacCall.CallAnswered += UACCallAnswered; uacCall.CallFailed += UACCallFailed; uacCall.CallRinging += UACCallProgress; //uacCall.CallTrying += UACCallTrying; uacCall.Call(callDescriptor); } } catch (Exception excp) { logger.Error("Exception ForkCall StartNewCall. " + excp.Message); } }