public void Start() { try { logger.Debug("WatchTowerDaemon starting..."); // Send events from this process to the monitoring socket. if (m_monitorEventLoopbackPort != 0) { m_monitorEventWriter = new SIPMonitorEventWriter(m_monitorEventLoopbackPort); } List<SIPChannel> sipChannels = SIPTransportConfig.ParseSIPChannelsNode(m_transportNode); m_sipTransport = new SIPTransport(SIPDNSManager.ResolveSIPService, new SIPTransactionEngine()); m_sipTransport.AddSIPChannel(sipChannels); if (m_sipAppServerWorkersNode != null) { m_appServerManager = new SIPAppServerManager( FireSIPMonitorEvent, m_sipTransport, m_sipAppServerWorkersNode, m_proxyAppServerEndPointsPath); } //m_sipTransport.SIPTransportRequestReceived += GotRequest; //m_sipTransport.SIPTransportResponseReceived += GotResponse; } catch (Exception excp) { logger.Error("Exception WatchTowerDaemon Start. " + excp.Message); } }
public void Start() { try { logger.Debug("RTCC Daemon starting..."); // Pre-flight checks. if (m_rtccSIPSocketsNode == null || m_rtccSIPSocketsNode.ChildNodes.Count == 0) { throw new ApplicationException("The RTCC server cannot start without a SIP socket, please check config file."); } // Send events from this process to the monitoring socket. if (m_monitorLoopbackPort != 0) { // Events will be sent by the monitor channel to the loopback interface and this port. m_monitorEventWriter = new SIPMonitorEventWriter(m_monitorLoopbackPort); logger.Debug("Monitor channel initialised for 127.0.0.1:" + m_monitorLoopbackPort + "."); } // Configure the SIP transport layer. m_sipTransport = new SIPTransport(SIPDNSManager.ResolveSIPService, new SIPTransactionEngine(), false); List<SIPChannel> sipChannels = SIPTransportConfig.ParseSIPChannelsNode(m_rtccSIPSocketsNode); m_sipTransport.AddSIPChannel(sipChannels); if (m_cdrDataLayer != null) { SIPCDR.CDRCreated += m_cdrDataLayer.Add; SIPCDR.CDRAnswered += m_cdrDataLayer.Update; SIPCDR.CDRHungup += m_cdrDataLayer.Update; SIPCDR.CDRUpdated += m_cdrDataLayer.Update; } 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_rtccCore = new RTCCCore( FireSIPMonitorEvent, m_sipDialogueManager, m_sipSorceryPersistor.SIPDialoguePersistor); m_rtccCore.Start(); m_rateUpdater = new RateBulkUpdater(FireSIPMonitorEvent); m_rateUpdater.Start(); logger.Debug("RTCC Daemon successfully started."); } catch (Exception excp) { logger.Error("Exception RTCCDaemon Start. " + excp.Message); } }
static void Main(string[] args) { try { // Configure the SIP transport layer. _sipTransport = new SIPTransport(SIPDNSManager.ResolveSIPService, new SIPTransactionEngine()); if (_sipSocketsNode != null) { // Set up the SIP channels based on the app.config file. List<SIPChannel> sipChannels = SIPTransportConfig.ParseSIPChannelsNode(_sipSocketsNode); _sipTransport.AddSIPChannel(sipChannels); } else { // Use default options to set up a SIP channel. int port = FreePort.FindNextAvailableUDPPort(_defaultSIPUdpPort); var sipChannel = new SIPUDPChannel(new IPEndPoint(_defaultLocalAddress, port)); _sipTransport.AddSIPChannel(sipChannel); } // Wire up the transport layer so SIP requests and responses have somewhere to go. _sipTransport.SIPTransportRequestReceived += SIPTransportRequestReceived; _sipTransport.SIPTransportResponseReceived += SIPTransportResponseReceived; // If you want to see ALL the nitty gritty SIP traffic wire up the events below. //_sipTransport.SIPBadRequestInTraceEvent += SIPBadRequestInTraceEvent; //_sipTransport.SIPBadResponseInTraceEvent += SIPBadResponseInTraceEvent; //_sipTransport.SIPRequestInTraceEvent += SIPRequestInTraceEvent; //_sipTransport.SIPRequestOutTraceEvent += SIPRequestOutTraceEvent; //_sipTransport.SIPResponseInTraceEvent += SIPResponseInTraceEvent; //_sipTransport.SIPResponseOutTraceEvent += SIPResponseOutTraceEvent; ManualResetEvent mre = new ManualResetEvent(false); mre.WaitOne(); } catch (Exception excp) { Console.WriteLine("Exception Main. " + excp); } finally { Console.WriteLine("Press any key to exit..."); Console.ReadLine(); } }
public void B2BOptionsStatefulProxyTest() { SIPTransactionEngine transactionEngine1 = new SIPTransactionEngine(); SIPTransport sipTransport1 = new SIPTransport(SIPDNSManager.Resolve, transactionEngine1, true, false); sipTransport1.AddSIPChannel(new SIPUDPChannel(new IPEndPoint(IPAddress.Loopback, 3000))); SIPAppServerCore appServerCore1 = new SIPAppServerCore(sipTransport1, null, statefulProxyCore1_StatefulProxyLogEvent, null, null, null); SIPTransactionEngine transactionEngine2 = new SIPTransactionEngine(); SIPTransport sipTransport2 = new SIPTransport(SIPDNSManager.Resolve, transactionEngine2, true, false); sipTransport2.AddSIPChannel(new SIPUDPChannel(new IPEndPoint(IPAddress.Loopback, 3001))); SIPAppServerCore appServerCore2 = new SIPAppServerCore(sipTransport2, null, statefulProxyCore2_StatefulProxyLogEvent, null, null, null); sipTransport1.SIPRequestOutTraceEvent += sipTransport1_SIPRequestOutTraceEvent; sipTransport1.SIPResponseInTraceEvent += sipTransport1_SIPResponseInTraceEvent; sipTransport2.SIPRequestInTraceEvent += sipTransport2_SIPRequestInTraceEvent; SIPRequest optionsRequest = GetOptionsRequest(SIPURI.ParseSIPURI("sip:127.0.0.1:3001"), 1, sipTransport1.GetDefaultTransportContact(SIPProtocolsEnum.udp).SocketEndPoint); sipTransport1.SendRequest(optionsRequest); Thread.Sleep(200); // Check the NUnit Console.Out to make sure there are SIP requests and responses being displayed. sipTransport1.Shutdown(); sipTransport2.Shutdown(); }
public void B2BInviteTransactionUserFoundStatefulProxyTest() { SIPTransactionEngine transactionEngine1 = new SIPTransactionEngine(); SIPTransport sipTransport1 = new SIPTransport(SIPDNSManager.Resolve, transactionEngine1, true, false); IPEndPoint sipTransport1EndPoint = new IPEndPoint(IPAddress.Loopback, 3000); sipTransport1.AddSIPChannel(new SIPUDPChannel(sipTransport1EndPoint)); SIPAppServerCore statefulProxyCore1 = new SIPAppServerCore(sipTransport1, null, statefulProxyCore1_StatefulProxyLogEvent, null, null, null); SIPTransactionEngine transactionEngine2 = new SIPTransactionEngine(); SIPTransport sipTransport2 = new SIPTransport(SIPDNSManager.Resolve, transactionEngine2, true, false); IPEndPoint sipTransport2EndPoint = new IPEndPoint(IPAddress.Loopback, 3001); sipTransport2.AddSIPChannel(new SIPUDPChannel(sipTransport2EndPoint)); SIPAppServerCore statefulProxyCore2 = new SIPAppServerCore( sipTransport2, statefulProxyCore2_GetCanonicalDomain, statefulProxyCore2_StatefulProxyLogEvent, null, null, null); //statefulProxyCore2.GetExtensionOwner += new GetExtensionOwnerDelegate(statefulProxyCore2_GetExtensionOwner); sipTransport1.SIPRequestOutTraceEvent += sipTransport1_SIPRequestOutTraceEvent; sipTransport1.SIPResponseInTraceEvent += sipTransport1_SIPResponseInTraceEvent; sipTransport2.SIPRequestInTraceEvent += sipTransport2_SIPRequestInTraceEvent; sipTransport2.SIPResponseOutTraceEvent += sipTransport2_SIPResponseOutTraceEvent; //statefulProxyCore2.LoadDialPlan += new LoadDialPlanDelegate(statefulProxyCore2_LoadDialPlan); SIPRequest inviteRequest = GetInviteRequest(sipTransport1EndPoint, null, sipTransport2EndPoint); UACInviteTransaction uacInvite = sipTransport1.CreateUACTransaction(inviteRequest, new SIPEndPoint(SIPProtocolsEnum.udp, sipTransport2EndPoint), new SIPEndPoint(SIPProtocolsEnum.udp, sipTransport1EndPoint), null); uacInvite.SendInviteRequest(new SIPEndPoint(SIPProtocolsEnum.udp, sipTransport2EndPoint), inviteRequest); Thread.Sleep(1000); // Check the NUnit Console.Out to make sure there are SIP requests and responses being displayed. sipTransport1.Shutdown(); sipTransport2.Shutdown(); }
public void B2BInviteStatefulProxyTest() { SIPTransactionEngine transactionEngine1 = new SIPTransactionEngine(); SIPTransport sipTransport1 = new SIPTransport(SIPDNSManager.Resolve, transactionEngine1, true, false); IPEndPoint sipTransport1EndPoint = new IPEndPoint(IPAddress.Loopback, 3000); sipTransport1.AddSIPChannel(new SIPUDPChannel(sipTransport1EndPoint)); SIPAppServerCore statefulProxyCore1 = new SIPAppServerCore(sipTransport1, null, statefulProxyCore1_StatefulProxyLogEvent, null, null, null); SIPTransactionEngine transactionEngine2 = new SIPTransactionEngine(); SIPTransport sipTransport2 = new SIPTransport(SIPDNSManager.Resolve, transactionEngine2, true, false); IPEndPoint sipTransport2EndPoint = new IPEndPoint(IPAddress.Loopback, 3001); sipTransport2.AddSIPChannel(new SIPUDPChannel(sipTransport2EndPoint)); SIPAppServerCore statefulProxyCore2 = new SIPAppServerCore(sipTransport2, statefulProxyCore2_GetCanonicalDomain, statefulProxyCore2_StatefulProxyLogEvent, null, null, null); sipTransport1.SIPRequestOutTraceEvent += sipTransport1_SIPRequestOutTraceEvent; sipTransport1.SIPResponseInTraceEvent += sipTransport1_SIPResponseInTraceEvent; sipTransport2.SIPRequestInTraceEvent += sipTransport2_SIPRequestInTraceEvent; sipTransport2.SIPResponseOutTraceEvent += sipTransport2_SIPResponseOutTraceEvent; SIPRequest inviteRequest = GetInviteRequest(sipTransport1EndPoint, null, sipTransport2EndPoint); sipTransport1.SendRequest(inviteRequest); Thread.Sleep(200); // Check the NUnit Console.Out to make sure there are SIP requests and responses being displayed. sipTransport1.Shutdown(); sipTransport2.Shutdown(); }
private static void InitialiseSIP(XmlNode sipSocketsNode, IPAddress publicIPAddress) { m_sipTransport = new SIPTransport(SIPDNSManager.ResolveSIPService, new SIPTransactionEngine(), true); m_sipTransport.ContactIPAddress = publicIPAddress; SIPDNSManager.SIPMonitorLogEvent = LogTraceMessage; List<SIPChannel> sipChannels = SIPTransportConfig.ParseSIPChannelsNode(sipSocketsNode); m_sipTransport.AddSIPChannel(sipChannels); m_sipTransport.SIPTransportRequestReceived += SIPTransportRequestReceived; //m_sipTransport.SIPRequestInTraceEvent += (localSIPEndPoint, endPoint, sipRequest) => { Console.WriteLine("Request Received : " + localSIPEndPoint + "<-" + endPoint + "\r\n" + sipRequest.ToString()); }; //m_sipTransport.SIPRequestOutTraceEvent += (localSIPEndPoint, endPoint, sipRequest) => { Console.WriteLine("Request Sent: " + localSIPEndPoint + "->" + endPoint + "\r\n" + sipRequest.ToString()); }; //m_sipTransport.SIPResponseInTraceEvent += (localSIPEndPoint, endPoint, sipResponse) => { Console.WriteLine("Response Received: " + localSIPEndPoint + "<-" + endPoint + "\r\n" + sipResponse.ToString()); }; //m_sipTransport.SIPResponseOutTraceEvent += (localSIPEndPoint, endPoint, sipResponse) => { Console.WriteLine("Response Sent: " + localSIPEndPoint + "->" + endPoint + "\r\n" + sipResponse.ToString()); }; }
/// <summary> /// Initialises the SIP transport layer. /// </summary> private void InitialiseSIP() { // Configure the SIP transport layer. m_sipTransport = new SIPTransport(SIPDNSManager.ResolveSIPService, new SIPTransactionEngine()); if (m_sipSocketsNode != null) { // Set up the SIP channels based on the app.config file. List<SIPChannel> sipChannels = SIPTransportConfig.ParseSIPChannelsNode(m_sipSocketsNode); m_sipTransport.AddSIPChannel(sipChannels); } else { // Use default options to set up a SIP channel. int port = FreePort.FindNextAvailableUDPPort(_defaultSIPUdpPort); var sipChannel = new SIPUDPChannel(new IPEndPoint(_defaultLocalAddress, port)); m_sipTransport.AddSIPChannel(sipChannel); } // Wire up the transport layer so incoming SIP requests have somewhere to go. m_sipTransport.SIPTransportRequestReceived += SIPTransportRequestReceived; // Log all SIP packets received to a log file. m_sipTransport.SIPRequestInTraceEvent += (localSIPEndPoint, endPoint, sipRequest) => { _sipTraceLogger.Debug("Request Received : " + localSIPEndPoint + "<-" + endPoint + "\r\n" + sipRequest.ToString()); }; m_sipTransport.SIPRequestOutTraceEvent += (localSIPEndPoint, endPoint, sipRequest) => { _sipTraceLogger.Debug("Request Sent: " + localSIPEndPoint + "->" + endPoint + "\r\n" + sipRequest.ToString()); }; m_sipTransport.SIPResponseInTraceEvent += (localSIPEndPoint, endPoint, sipResponse) => { _sipTraceLogger.Debug("Response Received: " + localSIPEndPoint + "<-" + endPoint + "\r\n" + sipResponse.ToString()); }; m_sipTransport.SIPResponseOutTraceEvent += (localSIPEndPoint, endPoint, sipResponse) => { _sipTraceLogger.Debug("Response Sent: " + localSIPEndPoint + "->" + endPoint + "\r\n" + sipResponse.ToString()); }; }
private void InitialiseSIP(object state) { // Configure the SIP transport layer. m_sipTransport = new SIPTransport(SIPDNSManager.ResolveSIPService, new SIPTransactionEngine()); List<SIPChannel> sipChannels = SIPTransportConfig.ParseSIPChannelsNode(m_sipSocketsNode); m_sipTransport.AddSIPChannel(sipChannels); m_sipTransport.SIPTransportRequestReceived += SIPTransportRequestReceived; m_sipTransport.SIPRequestInTraceEvent += (localSIPEndPoint, endPoint, sipRequest) => { AppendSIPTransportTraceMessage("Request Received : " + localSIPEndPoint + "<-" + endPoint + "\r\n" + sipRequest.ToString()); }; m_sipTransport.SIPRequestOutTraceEvent += (localSIPEndPoint, endPoint, sipRequest) => { AppendSIPTransportTraceMessage("Request Sent: " + localSIPEndPoint + "->" + endPoint + "\r\n" + sipRequest.ToString()); }; m_sipTransport.SIPResponseInTraceEvent += (localSIPEndPoint, endPoint, sipResponse) => { AppendSIPTransportTraceMessage("Response Received: " + localSIPEndPoint + "<-" + endPoint + "\r\n" + sipResponse.ToString()); }; m_sipTransport.SIPResponseOutTraceEvent += (localSIPEndPoint, endPoint, sipResponse) => { AppendSIPTransportTraceMessage("Response Sent: " + localSIPEndPoint + "->" + endPoint + "\r\n" + sipResponse.ToString()); }; }
public void StrictRoutePriorToProxyUnitTest() { Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name); string sipMsg = "INVITE sip:82.195.148.216:5062;lr SIP/2.0" + m_CRLF + "Via: SIP/2.0/UDP 192.168.1.2:5065;rport;branch=z9hG4bKFBB7EAC06934405182D13950BD51F001" + m_CRLF + "Route: <sip:89.100.92.186:45270;lr>,<sip:[email protected]>" + m_CRLF + "From: SER Test X <sip:[email protected]:5065>;tag=196468136" + m_CRLF + "To: <sip:[email protected]>" + m_CRLF + "Contact: <sip:[email protected]:5065>" + m_CRLF + "Call-ID: [email protected]" + m_CRLF + "CSeq: 49429 INVITE" + m_CRLF + "Max-Forwards: 70" + m_CRLF + "Content-Type: application/sdp" + m_CRLF + "User-Agent: X-PRO release 1103v" + m_CRLF + m_CRLF; SIPMessage sipMessage = SIPMessage.ParseSIPMessage(Encoding.UTF8.GetBytes(sipMsg), null, null); SIPRequest inviteReq = SIPRequest.ParseSIPRequest(sipMessage); SIPTransport mockSIPTransport = new SIPTransport(MockSIPDNSManager.Resolve, null, false); mockSIPTransport.AddSIPChannel(new MockSIPChannel(IPSocket.ParseSocketString("82.195.148.216:5062"))); mockSIPTransport.PreProcessRouteInfo(inviteReq); Console.WriteLine(inviteReq.ToString()); Console.WriteLine("Next Route=" + inviteReq.Header.Routes.TopRoute.ToString()); Console.WriteLine("Request URI=" + inviteReq.URI.ToString()); Assert.IsTrue(inviteReq.Header.Routes.TopRoute.ToString() == "<sip:89.100.92.186:45270;lr>", "Top route was not correct."); Assert.IsTrue(inviteReq.URI.ToString() == "sip:[email protected]", "The request URI was incorrectly adjusted."); Assert.IsTrue(inviteReq.Header.Routes.Length == 1, "The route set was not correct."); }
public void AvayaInviteUnitTest() { Console.WriteLine("--> " + System.Reflection.MethodBase.GetCurrentMethod().Name); string sipMsg = "INVITE sip:194.213.29.100:5060 SIP/2.0" + m_CRLF + "Via: SIP/2.0/UDP 10.1.1.241;branch=z9hG4bK94fc63626" + m_CRLF + "To: UNKNOWN <sip:[email protected]>" + m_CRLF + "From: 'Joe Bloggs' <sip:[email protected]>;tag=cc16d34c122e5fe" + m_CRLF + "Call-ID: [email protected]" + m_CRLF + "CSeq: 2009546910 INVITE" + m_CRLF + "Contact: 'Val Gavin' <sip:[email protected]>" + m_CRLF + "Max-Forwards: 70" + m_CRLF + "Route: <sip:[email protected]>" + m_CRLF + // Strict Route header (this header is actually a fault but it ends up being a strict route). "User-Agent: NeuralX MxSF/v3.2.6.26" + m_CRLF + "Content-Type: application/sdp" + m_CRLF + "Content-Length: 318" + m_CRLF + "P-Asserted-Identity: 'Joe Bloggs' <sip:[email protected]>" + m_CRLF + "Allow: INVITE" + m_CRLF + "Allow: CANCEL" + m_CRLF + "Allow: OPTIONS" + m_CRLF + "Allow: BYE" + m_CRLF + "Allow: REFER" + m_CRLF + "Allow: INFO" + m_CRLF + "Allow: UPDATE" + m_CRLF + "Supported: replaces" + m_CRLF + m_CRLF + "v=0" + m_CRLF + "o=xxxxx 1174909600 1174909601 IN IP4 10.1.1.241" + m_CRLF + "s=-" + m_CRLF + "c=IN IP4 10.1.1.241" + m_CRLF + "t=0 0" + m_CRLF + "a=sendrecv" + m_CRLF + "m=audio 20026 RTP/AVP 8 0 18 101" + m_CRLF + "a=rtpmap:8 PCMA/8000" + m_CRLF + "a=rtpmap:0 PCMU/8000" + m_CRLF + "a=rtpmap:18 G729/8000" + m_CRLF + "a=rtpmap:101 telephone-event/8000" + m_CRLF + "a=fmtp:18 annexb=no" + m_CRLF + "a=fmtp:101 0-15" + m_CRLF + "a=ptime:20" + m_CRLF + "a=rtcp:20027 IN IP4 10.1.1.241"; SIPMessage sipMessage = SIPMessage.ParseSIPMessage(Encoding.UTF8.GetBytes(sipMsg), null, null); SIPRequest inviteReq = SIPRequest.ParseSIPRequest(sipMessage); SIPTransport mockSIPTransport = new SIPTransport(MockSIPDNSManager.Resolve, null, false); mockSIPTransport.AddSIPChannel(new MockSIPChannel(IPSocket.ParseSocketString("194.213.29.100:5060"))); mockSIPTransport.PreProcessRouteInfo(inviteReq); Console.WriteLine(inviteReq.ToString()); Assert.IsTrue(inviteReq.URI.ToString() == "sip:[email protected]", "The request URI was not updated to the strict route."); Assert.IsTrue(inviteReq.Header.Routes.TopRoute.URI.ToString() == "sip:194.213.29.100:5060", "The route set was not correctly updated."); Console.WriteLine("-----------------------------------------"); }
public void Start() { try { logger.Debug("SIP Registration Agent daemon starting..."); if (m_sipRegAgentSocketsNode == null) { throw new ApplicationException("The SIP Registration Agent could not be started, no SIP transport sockets node could be found."); } // Pre-flight checks. if (m_sipRegAgentSocketsNode == null || m_sipRegAgentSocketsNode.ChildNodes.Count == 0) { throw new ApplicationException("The SIP Registration Agent cannot start without at least one socket specified to listen on, please check config file."); } // Send events from this process to the monitoring socket. if (m_monitorLoopbackPort != 0) { // Events will be sent by the monitor channel to the loopback interface and this port. m_monitorEventWriter = new SIPMonitorEventWriter(m_monitorLoopbackPort); logger.Debug("Monitor channel initialised for 127.0.0.1:" + m_monitorLoopbackPort + "."); } // Configure the SIP transport layer. m_sipTransport = new SIPTransport(SIPDNSManager.ResolveSIPService, new SIPTransactionEngine(), true); m_sipTransport.PerformanceMonitorPrefix = SIPSorceryPerformanceMonitor.REGISTRATION_AGENT_PREFIX; List<SIPChannel> sipChannels = SIPTransportConfig.ParseSIPChannelsNode(m_sipRegAgentSocketsNode); m_sipTransport.AddSIPChannel(sipChannels); m_sipRegAgentCore = new SIPRegistrationAgentCore( FireSIPMonitorEvent, m_sipTransport, m_outboundProxy, m_providerPersistor.Get, m_providerPersistor.Update, m_providerPersistor.UpdateProperty, m_bindingPersistor, m_disallowPrivateIPRegistrars); m_sipRegAgentCore.Start(m_threadCount); logger.Debug("SIP Registration Agent successfully started."); } catch (Exception excp) { logger.Error("Exception SIPRegAgentDaemon Start. " + excp.Message); } }
static void Main(string[] args) { try { if (args == null || args.Count() == 0) { Console.WriteLine(USAGE_STRING); } else { bool validArgs = ParseArgs(args); if (validArgs) { Console.WriteLine("XMPP Test Console:"); m_sipTransport = new SIPTransport(SIPDNSManager.ResolveSIPService, new SIPTransactionEngine()); SIPUDPChannel udpChannel = new SIPUDPChannel(new IPEndPoint(m_ipAddress, m_port)); m_sipTransport.AddSIPChannel(udpChannel); m_sipTransport.SIPTransportRequestReceived += SIPTransportRequestReceived; Console.WriteLine("Waiting for SIP INVITE..."); ManualResetEvent mre = new ManualResetEvent(false); mre.WaitOne(); } } } catch (Exception excp) { Console.WriteLine("Exception Main. " + excp.Message); } }
public void Start() { try { logger.Debug("SIP Registrar daemon starting..."); // Pre-flight checks. if (m_sipRegistrarSocketsNode == null || m_sipRegistrarSocketsNode.ChildNodes.Count == 0) { throw new ApplicationException("The SIP Registrar cannot start without at least one socket specified to listen on, please check config file."); } // Send events from this process to the monitoring socket. if (m_monitorLoopbackPort != 0) { // Events will be sent by the monitor channel to the loopback interface and this port. m_monitorEventWriter = new SIPMonitorEventWriter(m_monitorLoopbackPort); logger.Debug("Monitor channel initialised for 127.0.0.1:" + m_monitorLoopbackPort + "."); } // Configure the SIP transport layer. m_sipTransport = new SIPTransport(SIPDNSManager.ResolveSIPService, new SIPTransactionEngine(), false); m_sipTransport.PerformanceMonitorPrefix = SIPSorceryPerformanceMonitor.REGISTRAR_PREFIX; List<SIPChannel> sipChannels = SIPTransportConfig.ParseSIPChannelsNode(m_sipRegistrarSocketsNode); m_sipTransport.AddSIPChannel(sipChannels); // Create and configure the SIP Registrar core. if (m_natKeepAliveRelaySocket != null) { m_natKeepAliveSender = new UdpClient(); } SIPUserAgentConfigurationManager userAgentConfigManager = new SIPUserAgentConfigurationManager(m_userAgentsConfigNode); if (m_userAgentsConfigNode == null) { logger.Warn("The UserAgent config's node was missing."); } m_registrarBindingsManager = new SIPRegistrarBindingsManager(FireSIPMonitorEvent, m_registrarBindingsPersistor, SendNATKeepAlive, m_maximumAccountBindings, userAgentConfigManager); m_registrarBindingsManager.Start(); m_registrarCore = new RegistrarCore(m_sipTransport, m_registrarBindingsManager, GetSIPAccount_External, GetCanonicalDomain_External, true, true, FireSIPMonitorEvent, userAgentConfigManager, SIPAuthenticateRequest_External, m_switchboardCertificateName); m_registrarCore.Start(m_threadCount); m_sipTransport.SIPTransportRequestReceived += m_registrarCore.AddRegisterRequest; logger.Debug("SIP Registrar successfully started."); } catch (Exception excp) { logger.Error("Exception SIPRegistrarDaemon Start. " + excp.Message); } }
public void Start() { try { logger.Debug("SIP Notifier Daemon starting..."); // Pre-flight checks. if (m_sipNotifierSocketsNode == null || m_sipNotifierSocketsNode.ChildNodes.Count == 0) { throw new ApplicationException("The SIP Notifier cannot start without at least one socket specified to listen on, please check config file."); } // Send events from this process to the monitoring socket. if (m_monitorLoopbackPort != 0) { // Events will be sent by the monitor channel to the loopback interface and this port. m_monitorEventWriter = new SIPMonitorEventWriter(m_monitorLoopbackPort); logger.Debug("Monitor channel initialised for 127.0.0.1:" + m_monitorLoopbackPort + "."); } // Configure the SIP transport layer. m_sipTransport = new SIPTransport(SIPDNSManager.ResolveSIPService, new SIPTransactionEngine(), false); List<SIPChannel> sipChannels = SIPTransportConfig.ParseSIPChannelsNode(m_sipNotifierSocketsNode); m_sipTransport.AddSIPChannel(sipChannels); m_notifierCore = new NotifierCore( FireSIPMonitorEvent, m_sipTransport, GetCustomer_External, GetDialogues_External, GetDialogue_External, GetCanonicalDomain_External, m_sipAssetPersistor, GetBindingsCount_External, SIPAuthenticateRequest_External, m_outboundProxy, m_publisher); m_notifyManager = new SIPNotifyManager( m_sipTransport, m_outboundProxy, FireSIPMonitorEvent, m_sipAssetPersistor.Get, GetSIPRegistrarBindings_External, GetCanonicalDomain_External); m_sipTransport.SIPTransportRequestReceived += GotRequest; logger.Debug("SIP Notifier Daemon successfully started."); } catch (Exception excp) { logger.Error("Exception SIPNotifierDaemon Start. " + excp.Message); } }
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(); m_appServerCore = new SIPAppServerCore( m_sipTransport, m_sipSorceryPersistor.SIPDomainManager.GetDomain, m_sipSorceryPersistor.SIPAccountsPersistor.Get, 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; } }
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(); if (m_sipProxyEnabled) { m_sipProxyDaemon = new SIPProxyDaemon(); m_sipProxyDaemon.Start(); if (m_sipProxyDaemon.PublicIPAddress != null) { m_publicIPAddress = m_sipProxyDaemon.PublicIPAddress; DialStringParser.PublicIPAddress = m_sipProxyDaemon.PublicIPAddress; DialPlanScriptFacade.PublicIPAddress = m_sipProxyDaemon.PublicIPAddress; SIPDialogueManager.PublicIPAddress = m_sipProxyDaemon.PublicIPAddress; } else { m_sipProxyDaemon.PublicIPAddressUpdated += (ipAddress) => { if (ipAddress != null && (m_publicIPAddress == null || ipAddress.ToString() != m_publicIPAddress.ToString())) { m_publicIPAddress = ipAddress; DialStringParser.PublicIPAddress = ipAddress; DialPlanScriptFacade.PublicIPAddress = ipAddress; SIPDialogueManager.PublicIPAddress = ipAddress; } }; } } if (m_sipMonitorEnabled) { m_sipMonitorPublisher = new SIPMonitorClientManager(null); m_sipMonitorDaemon = new SIPMonitorDaemon(m_sipMonitorPublisher); m_sipMonitorDaemon.Start(); } if (m_sipRegistrarEnabled) { m_sipRegistrarDaemon = new SIPRegistrarDaemon( m_sipSorceryPersistor.SIPDomainManager.GetDomain, m_sipSorceryPersistor.SIPAccountsPersistor.Get, m_sipSorceryPersistor.SIPRegistrarBindingPersistor, SIPRequestAuthenticator.AuthenticateSIPRequest, m_customerSessionManager.CustomerPersistor); m_sipRegistrarDaemon.Start(); } if (m_sipRegAgentEnabled) { m_sipRegAgentDaemon = new SIPRegAgentDaemon( m_sipSorceryPersistor.SIPProvidersPersistor, m_sipSorceryPersistor.SIPProviderBindingsPersistor); m_sipRegAgentDaemon.Start(); } if (m_sipNotifierEnabled) { m_sipNotifierDaemon = new SIPNotifierDaemon( m_customerSessionManager.CustomerPersistor.Get, m_sipSorceryPersistor.SIPDialoguePersistor.Get, m_sipSorceryPersistor.SIPDialoguePersistor.Get, m_sipSorceryPersistor.SIPDomainManager.GetDomain, m_sipSorceryPersistor.SIPAccountsPersistor, m_sipSorceryPersistor.SIPRegistrarBindingPersistor.Get, m_sipSorceryPersistor.SIPAccountsPersistor.Get, m_sipSorceryPersistor.SIPRegistrarBindingPersistor.Count, SIPRequestAuthenticator.AuthenticateSIPRequest, m_sipMonitorPublisher); //new SIPMonitorUDPSink("127.0.0.1:10003")); m_sipNotifierDaemon.Start(); } if (m_sshServerEnabled) { SSHServerDaemon daemon = new SSHServerDaemon(m_customerSessionManager, m_sipMonitorPublisher); // Uses memory to transfer events. //SSHServerDaemon daemon = new SSHServerDaemon(m_customerSessionManager, new SIPMonitorUDPSink("127.0.0.1:10002")); daemon.Start(); } #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_sipSorceryPersistor.SIPAccountsPersistor, //m_sipSorceryPersistor.SIPRegistrarBindingPersistor.Get, //m_sipSorceryPersistor.SIPDialPlanPersistor, //m_sipSorceryPersistor.SIPDialoguePersistor, 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(); m_appServerCore = new SIPAppServerCore( m_sipTransport, m_sipSorceryPersistor.SIPDomainManager.GetDomain, m_sipSorceryPersistor.SIPAccountsPersistor.Get, FireSIPMonitorEvent, m_callManager, m_sipDialogueManager, SIPRequestAuthenticator.AuthenticateSIPRequest, m_outboundProxy); m_rtccCore = new RTCCCore( FireSIPMonitorEvent, m_sipDialogueManager, m_sipSorceryPersistor.SIPDialoguePersistor); m_rtccCore.Start(); m_rateUpdater = new RateBulkUpdater(FireSIPMonitorEvent); m_rateUpdater.Start(); #endregion #region Initialise WCF services. try { if (WCFUtility.DoesWCFServiceExist(typeof(SIPProvisioningWebService).FullName.ToString())) { if (m_sipSorceryPersistor == null) { logger.Warn("Provisioning hosted service could not be started as Persistor object was null."); } else { SIPProviderBindingSynchroniser sipProviderBindingSynchroniser = new SIPProviderBindingSynchroniser(m_sipSorceryPersistor.SIPProviderBindingsPersistor); m_sipSorceryPersistor.SIPProvidersPersistor.Added += sipProviderBindingSynchroniser.SIPProviderAdded; m_sipSorceryPersistor.SIPProvidersPersistor.Updated += sipProviderBindingSynchroniser.SIPProviderUpdated; m_sipSorceryPersistor.SIPProvidersPersistor.Deleted += sipProviderBindingSynchroniser.SIPProviderDeleted; ProvisioningServiceInstanceProvider instanceProvider = new ProvisioningServiceInstanceProvider( m_sipSorceryPersistor.SIPAccountsPersistor, m_sipSorceryPersistor.SIPDialPlanPersistor, m_sipSorceryPersistor.SIPProvidersPersistor, m_sipSorceryPersistor.SIPProviderBindingsPersistor, m_sipSorceryPersistor.SIPRegistrarBindingPersistor, m_sipSorceryPersistor.SIPDialoguePersistor, m_sipSorceryPersistor.SIPCDRPersistor, m_customerSessionManager, m_sipSorceryPersistor.SIPDomainManager, FireSIPMonitorEvent, 0, false); m_sipProvisioningHost = new ServiceHost(typeof(SIPProvisioningWebService)); m_sipProvisioningHost.Description.Behaviors.Add(instanceProvider); m_sipProvisioningHost.Open(); if (m_sipRegAgentDaemon == null) { m_sipRegAgentDaemon = new SIPRegAgentDaemon( m_sipSorceryPersistor.SIPProvidersPersistor, m_sipSorceryPersistor.SIPProviderBindingsPersistor); } logger.Debug("Provisioning hosted service successfully started on " + m_sipProvisioningHost.BaseAddresses[0].AbsoluteUri + "."); } } } catch (Exception excp) { logger.Warn("Exception starting Provisioning hosted service. " + excp.Message); } try { if (WCFUtility.DoesWCFServiceExist(typeof(CrossDomainService).FullName.ToString())) { m_accessPolicyHost = new ServiceHost(typeof(CrossDomainService)); m_accessPolicyHost.Open(); logger.Debug("CrossDomain hosted service successfully started on " + m_accessPolicyHost.BaseAddresses[0].AbsoluteUri + "."); } } catch (Exception excp) { logger.Warn("Exception starting CrossDomain hosted service. " + excp.Message); } 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); } if (WCFUtility.DoesWCFServiceExist(typeof(SIPNotifierService).FullName.ToString())) { if (m_sipMonitorPublisher != null) { try { SIPNotifierService notifierService = new SIPNotifierService(m_sipMonitorPublisher, m_customerSessionManager); m_sipNotificationsHost = new ServiceHost(notifierService); m_sipNotificationsHost.Open(); logger.Debug("SIPNotificationsService hosted service successfully started on " + m_sipNotificationsHost.BaseAddresses[0].AbsoluteUri + "."); } catch (Exception excp) { logger.Warn("Exception starting SIPNotificationsService hosted service. " + excp.Message); } } } #endregion } catch (Exception excp) { logger.Error("Exception SIPAppServerDaemon Start. " + excp.Message); throw excp; } }
public void Start() { try { logger.Debug("SIP Proxy daemon starting..."); // Pre-flight checks. if (!File.Exists(m_proxyRuntimeScriptPath)) { throw new ApplicationException("The proxy cannot start without a runtime script. Path " + m_proxyRuntimeScriptPath + " could not be loaded."); } else if (m_sipProxySocketsNode == null || m_sipProxySocketsNode.ChildNodes.Count == 0) { throw new ApplicationException("The proxy cannot start without at least one socket specified to listen on, please check config file."); } // Send events from this process to the monitoring socket. if (m_monitorPort != 0) { // Events will be sent by the monitor channel to the loopback interface and this port. m_monitorEventWriter = new SIPMonitorEventWriter(m_monitorPort); logger.Debug(" SIP Proxy monitor sender initialised for 127.0.0.1:" + m_monitorPort + "."); } // Configure the SIP transport layer. m_sipTransport = new SIPTransport(SIPDNSManager.ResolveSIPService, null, false); SIPDNSManager.SIPMonitorLogEvent = FireSIPMonitorEvent; m_sipTransport.PerformanceMonitorPrefix = SIPSorceryPerformanceMonitor.PROXY_PREFIX; List<SIPChannel> sipChannels = SIPTransportConfig.ParseSIPChannelsNode(m_sipProxySocketsNode); m_sipTransport.AddSIPChannel(sipChannels); // Create the SIP stateless proxy core. m_statelessProxyCore = new SIPProxyCore(FireSIPMonitorEvent, m_sipTransport, m_proxyRuntimeScriptPath, m_appServerEndPointsPath); if (!m_publicIPAddressStr.IsNullOrBlank()) { PublicIPAddress = IPAddress.Parse(m_publicIPAddressStr); m_statelessProxyCore.PublicIPAddress = PublicIPAddress; } else if (!m_stunServerHostname.IsNullOrBlank()) { // If a STUN server hostname has been specified start the STUN client thread. ThreadPool.QueueUserWorkItem(delegate { StartSTUNClient(); }); } // Logging. m_sipTransport.SIPRequestInTraceEvent += LogSIPRequestIn; m_sipTransport.SIPRequestOutTraceEvent += LogSIPRequestOut; m_sipTransport.SIPResponseInTraceEvent += LogSIPResponseIn; m_sipTransport.SIPResponseOutTraceEvent += LogSIPResponseOut; m_sipTransport.SIPBadRequestInTraceEvent += LogSIPBadRequestIn; m_sipTransport.SIPBadResponseInTraceEvent += LogSIPBadResponseIn; if (m_natKeepAliveSocket != null) { m_natKeepAliveRelay = new NATKeepAliveRelay(m_sipTransport, m_natKeepAliveSocket, FireSIPMonitorEvent); } // Allow silverlight clients to connect to the proxy server's SIP sockets. m_silverlightPolicyServer = new SilverlightPolicyServer(); logger.Debug("SIP Proxy daemon successfully started."); } catch (Exception excp) { logger.Error("Exception SIPProxyDaemon Start. " + excp.Message); } }