#pragma warning restore CS0067 public SIPNonInviteServerUserAgent( SIPTransport sipTransport, SIPEndPoint outboundProxy, string sipUsername, string sipDomain, SIPCallDirection callDirection, GetSIPAccountDelegate getSIPAccount, SIPAuthenticateRequestDelegate sipAuthenticateRequest, SIPMonitorLogDelegate logDelegate, SIPNonInviteTransaction transaction) { m_sipTransport = sipTransport; m_outboundProxy = outboundProxy; m_sipUsername = sipUsername; m_sipDomain = sipDomain; m_sipCallDirection = callDirection; GetSIPAccount_External = getSIPAccount; SIPAuthenticateRequest_External = sipAuthenticateRequest; Log_External = logDelegate ?? Log_External; m_transaction = transaction; m_transaction.TransactionTraceMessage += TransactionTraceMessage; //m_uasTransaction.UASInviteTransactionTimedOut += ClientTimedOut; //m_uasTransaction.UASInviteTransactionCancelled += UASTransactionCancelled; //m_uasTransaction.TransactionRemoved += new SIPTransactionRemovedDelegate(UASTransaction_TransactionRemoved); //m_uasTransaction.TransactionStateChanged += (t) => { logger.LogDebug("Transaction state change to " + t.TransactionState + ", uri=" + t.TransactionRequestURI.ToString() + "."); }; }
public SIPServerUserAgent( SIPTransport sipTransport, SIPEndPoint outboundProxy, string sipUsername, string sipDomain, SIPCallDirection callDirection, GetSIPAccountDelegate getSIPAccount, SIPAuthenticateRequestDelegate sipAuthenticateRequest, SIPMonitorLogDelegate logDelegate, UASInviteTransaction uasTransaction) { m_sipTransport = sipTransport; m_outboundProxy = outboundProxy; m_sipUsername = sipUsername; m_sipDomain = sipDomain; CallDirection = callDirection; GetSIPAccount_External = getSIPAccount; SIPAuthenticateRequest_External = sipAuthenticateRequest; Log_External = logDelegate ?? Log_External; m_uasTransaction = uasTransaction; m_uasTransaction.TransactionTraceMessage += TransactionTraceMessage; m_uasTransaction.UASInviteTransactionTimedOut += ClientTimedOut; m_uasTransaction.UASInviteTransactionCancelled += UASTransactionCancelled; m_uasTransaction.TransactionRemoved += new SIPTransactionRemovedDelegate(UASTransaction_TransactionRemoved); }
//private SIPNotifyManager m_notifyManager; public SIPAppServerCore( SIPTransport sipTransport, GetCanonicalDomainDelegate getCanonicalDomain, GetSIPAccountDelegate getSIPAccount, SIPMonitorLogDelegate proxyLog, SIPCallManager callManager, SIPDialogueManager sipDialogueManager, //SIPNotifyManager notifyManager, SIPAuthenticateRequestDelegate sipAuthenticateRequest, SIPEndPoint outboundProxy) { try { m_sipTransport = sipTransport; m_callManager = callManager; m_sipDialogueManager = sipDialogueManager; //m_notifyManager = notifyManager; m_sipTransport.SIPTransportRequestReceived += GotRequest; m_sipTransport.SIPTransportResponseReceived += GotResponse; m_outboundProxy = outboundProxy; GetCanonicalDomain_External = getCanonicalDomain; GetSIPAccount_External = getSIPAccount; SIPMonitorLogEvent_External = proxyLog; SIPRequestAuthenticator_External = sipAuthenticateRequest; } catch (Exception excp) { logger.Error("Exception SIPAppServerCore (ctor). " + excp.Message); throw excp; } }
public void Start() { try { logger.Debug("pid=" + Process.GetCurrentProcess().Id + "."); logger.Debug("os=" + System.Environment.OSVersion + "."); logger.Debug("current directory=" + m_currentDirectory + "."); logger.Debug("base directory=" + AppDomain.CurrentDomain.BaseDirectory + "."); SIPDNSManager.SIPMonitorLogEvent = FireSIPMonitorEvent; m_sipSorceryPersistor = new SIPSorceryPersistor(m_storageType, m_connectionString); m_customerSessionManager = new CustomerSessionManager(m_storageType, m_connectionString); m_cdrDataLayer = new Entities.CDRDataLayer(); #region Initialise the SIP Application Server and its logging mechanisms including CDRs. logger.Debug("Initiating SIP Application Server Agent."); // Send events from this process to the monitoring socket. if (m_monitorEventLoopbackPort != 0) { m_monitorEventWriter = new SIPMonitorEventWriter(m_monitorEventLoopbackPort); } if (m_cdrDataLayer != null) { SIPCDR.CDRCreated += m_cdrDataLayer.Add; SIPCDR.CDRAnswered += m_cdrDataLayer.Update; SIPCDR.CDRHungup += m_cdrDataLayer.Update; SIPCDR.CDRUpdated += m_cdrDataLayer.Update; } #region Initialise the SIPTransport layers. m_sipTransport = new SIPTransport(SIPDNSManager.ResolveSIPService, new SIPTransactionEngine(), true); if (m_appServerEndPoint != null) { if (m_appServerEndPoint.Protocol == SIPProtocolsEnum.udp) { logger.Debug("Using single SIP transport socket for App Server " + m_appServerEndPoint.ToString() + "."); m_sipTransport.AddSIPChannel(new SIPUDPChannel(m_appServerEndPoint.GetIPEndPoint())); } else if (m_appServerEndPoint.Protocol == SIPProtocolsEnum.tcp) { logger.Debug("Using single SIP transport socket for App Server " + m_appServerEndPoint.ToString() + "."); m_sipTransport.AddSIPChannel(new SIPTCPChannel(m_appServerEndPoint.GetIPEndPoint())); } else { throw new ApplicationException("The SIP End Point of " + m_appServerEndPoint + " cannot be used with the App Server transport layer."); } } else if (m_sipAppServerSocketsNode != null) { m_sipTransport.AddSIPChannel(SIPTransportConfig.ParseSIPChannelsNode(m_sipAppServerSocketsNode)); } else { throw new ApplicationException("The SIP App Server could not be started, no SIP sockets have been configured."); } m_sipTransport.SIPRequestInTraceEvent += LogSIPRequestIn; m_sipTransport.SIPRequestOutTraceEvent += LogSIPRequestOut; m_sipTransport.SIPResponseInTraceEvent += LogSIPResponseIn; m_sipTransport.SIPResponseOutTraceEvent += LogSIPResponseOut; m_sipTransport.SIPBadRequestInTraceEvent += LogSIPBadRequestIn; m_sipTransport.SIPBadResponseInTraceEvent += LogSIPBadResponseIn; #endregion m_dialPlanEngine = new DialPlanEngine( m_sipTransport, m_sipSorceryPersistor.SIPDomainManager.GetDomain, FireSIPMonitorEvent, m_sipSorceryPersistor, m_outboundProxy, m_rubyScriptCommonPath, m_dialplanImpersonationUsername, m_dialplanImpersonationPassword, m_maxDialPlanExecutionLimit); m_sipDialogueManager = new SIPDialogueManager( m_sipTransport, m_outboundProxy, FireSIPMonitorEvent, m_sipSorceryPersistor.SIPDialoguePersistor, m_sipSorceryPersistor.SIPCDRPersistor, SIPRequestAuthenticator.AuthenticateSIPRequest, m_sipSorceryPersistor.SIPAccountsPersistor.Get, m_sipSorceryPersistor.SIPDomainManager.GetDomain); m_callManager = new SIPCallManager( m_sipTransport, m_outboundProxy, FireSIPMonitorEvent, m_sipDialogueManager, m_sipSorceryPersistor.SIPDialoguePersistor, m_sipSorceryPersistor.SIPCDRPersistor, m_dialPlanEngine, m_sipSorceryPersistor.SIPDialPlanPersistor.Get, m_sipSorceryPersistor.SIPAccountsPersistor.Get, m_sipSorceryPersistor.SIPRegistrarBindingPersistor.Get, m_sipSorceryPersistor.SIPProvidersPersistor.Get, m_sipSorceryPersistor.SIPDomainManager.GetDomain, m_customerSessionManager.CustomerPersistor, m_sipSorceryPersistor.SIPDialPlanPersistor, m_traceDirectory, m_monitorCalls, m_dailyCallLimit); m_callManager.Start(); GetSIPAccountDelegate getSIPAccount = (username, domain) => { return(m_sipSorceryPersistor.SIPAccountsPersistor.Get(x => x.SIPUsername == username && x.SIPDomain == domain).SIPAccount); }; m_appServerCore = new SIPAppServerCore( m_sipTransport, m_sipSorceryPersistor.SIPDomainManager.GetDomain, getSIPAccount, FireSIPMonitorEvent, m_callManager, m_sipDialogueManager, SIPRequestAuthenticator.AuthenticateSIPRequest, m_outboundProxy); #endregion #region Initialise WCF services. try { if (WCFUtility.DoesWCFServiceExist(typeof(CallManagerServices).FullName.ToString())) { CallManagerServiceInstanceProvider callManagerSvcInstanceProvider = new CallManagerServiceInstanceProvider(m_callManager, m_sipDialogueManager); Uri callManagerBaseAddress = null; if (m_callManagerServiceAddress != null) { logger.Debug("Adding service address to Call Manager Service " + m_callManagerServiceAddress + "."); callManagerBaseAddress = new Uri(m_callManagerServiceAddress); } if (callManagerBaseAddress != null) { m_callManagerSvcHost = new ServiceHost(typeof(CallManagerServices), callManagerBaseAddress); } else { m_callManagerSvcHost = new ServiceHost(typeof(CallManagerServices)); } m_callManagerSvcHost.Description.Behaviors.Add(callManagerSvcInstanceProvider); m_callManagerSvcHost.Open(); logger.Debug("CallManager hosted service successfully started on " + m_callManagerSvcHost.BaseAddresses[0].AbsoluteUri + "."); } } catch (Exception excp) { logger.Warn("Exception starting CallManager hosted service. " + excp.Message); } #endregion } catch (Exception excp) { logger.Error("Exception SIPAppServerDaemon Start. " + excp.Message); throw excp; } }