private void StartCores() { SipCoreSettings settings; IPAddress address; IPAddress subnet; Helper.GetNetworkInfo(out address, out subnet); core1Uri = (SipUri)string.Format("sip:{0}:7725;transport=udp", address); core2Uri = (SipUri)string.Format("sip:{0}:7726;transport=udp", address); settings = new SipCoreSettings(); settings.TransportSettings = new SipTransportSettings[] { new SipTransportSettings(SipTransportType.UDP, new NetworkBinding(core1Uri.Host, core1Uri.Port), 0) }; core1 = new SipBasicCore(settings); core1.SetTraceMode(traceMode); settings = new SipCoreSettings(); settings.TransportSettings = new SipTransportSettings[] { new SipTransportSettings(SipTransportType.UDP, new NetworkBinding(core2Uri.Host, core2Uri.Port), 0) }; core2 = new SipBasicCore(settings); core2.SetTraceMode(traceMode); try { core1.Start(); core2.Start(); } catch { core1.Stop(); core2.Stop(); throw; } }
public void Request_Basic() { SipBasicCore core = null; SipCoreSettings settings; SipRequest request; SipResult result; string serviceUri; try { settings = new SipCoreSettings(); settings.UserName = "******"; settings.Password = "******"; serviceUri = "sip:" + settings.TransportSettings[0].ExternalBinding.ToString(); core = new SipBasicCore(settings); core.RequestReceived += new SipRequestDelegate(OnRequest); core.Start(); request = new SipRequest(SipMethod.Info, serviceUri, null); request.AddHeader("Test", "OK"); result = core.Request(request); Assert.AreEqual(SipStatus.OK, result.Status); } finally { if (core != null) { core.Stop(); } } }
public void Register_Vitelity() { Assert.Inconclusive("Manual Test: Comment this out to perform this test."); // Attempt a registration against the Vitelty.com SIP trunking service. SipBasicCore core = null; SipCoreSettings settings; try { // These settings are hardcoded for my Vitelity.com account // and my home network. This test also assumes that the router // is forwarding UDP port 5060 packets to the test computer. settings = new SipCoreSettings(); settings.LocalContact = "sip:jslill@" + Dns.GetHostEntry("www.lilltek.com").AddressList.IPv4Only()[0].ToString() + ":5060"; settings.UserName = "******"; settings.Password = "******"; core = new SipBasicCore(settings); core.Start(); core.StartAutoRegistration("sip:sip4.vitelity.net", "sip:[email protected]"); Assert.IsTrue(core.AutoRegistration); Assert.IsTrue(core.IsRegistered); // Sleep a while and watch for registration traffic on NetMon. Thread.Sleep(5 * 1000 * 60); core.StopAutoRegistration(); Assert.IsFalse(core.AutoRegistration); Assert.IsFalse(core.IsRegistered); } finally { if (core != null) { core.Stop(); } } }
public void SipCoreSettings_LoadConfig() { try { Config.SetConfig(@" §ion Core LocalContact = sip:www.lilltek.com:5060;transport=tcp OutboundProxy = sip:sip.lilltek.com:5060 TraceMode = ALL AutoAuthenticate = no UserAgent = Foo UserName = Jeff Password = Lill ServerTransactionTTL = 10m EarlyDialogTTL = 5s §ion Transport[0] Type = TCP Binding = 192.168.1.200:SIP BufferSize = 16000 §ion Timers T1 = 1s T2 = 2s T4 = 3s &endsection &endsection §ion Transport[1] Type = UDP Binding = 127.0.0.1:1234 BufferSize = 4000 Timers.T1 = 100ms &endsection &endsection ".Replace('&', '#')); SipCoreSettings settings = SipCoreSettings.LoadConfig("Core"); SipTransportSettings tSettings; Assert.AreEqual("sip:www.lilltek.com:5060;transport=tcp", settings.LocalContact); Assert.AreEqual("sip:sip.lilltek.com:5060", (string)settings.OutboundProxyUri); Assert.AreEqual(SipTraceMode.All, settings.TraceMode); Assert.AreEqual("Foo", settings.UserAgent); Assert.IsFalse(settings.AutoAuthenticate); Assert.AreEqual("Jeff", settings.UserName); Assert.AreEqual("Lill", settings.Password); Assert.AreEqual(TimeSpan.FromMinutes(10), settings.ServerTransactionTTL); Assert.AreEqual(TimeSpan.FromSeconds(5), settings.EarlyDialogTTL); Assert.AreEqual(2, settings.TransportSettings.Length); tSettings = settings.TransportSettings[0]; Assert.AreEqual(SipTransportType.TCP, tSettings.TransportType); Assert.AreEqual(new NetworkBinding("192.168.1.200:SIP"), tSettings.Binding); Assert.AreEqual(16000, tSettings.BufferSize); Assert.AreEqual(TimeSpan.FromSeconds(1), tSettings.BaseTimers.T1); Assert.AreEqual(TimeSpan.FromSeconds(2), tSettings.BaseTimers.T2); Assert.AreEqual(TimeSpan.FromSeconds(3), tSettings.BaseTimers.T4); tSettings = settings.TransportSettings[1]; Assert.AreEqual(SipTransportType.UDP, tSettings.TransportType); Assert.AreEqual(new NetworkBinding("127.0.0.1:1234"), tSettings.Binding); Assert.AreEqual(4000, tSettings.BufferSize); Assert.AreEqual(TimeSpan.FromMilliseconds(100), tSettings.BaseTimers.T1); settings = new SipCoreSettings(); Assert.AreEqual(NetHelper.GetActiveAdapter().ToString(), settings.LocalContact); Assert.IsTrue(settings.AutoAuthenticate); Assert.AreEqual("LillTek SIP v" + Helper.GetVersionString(Assembly.GetExecutingAssembly()), settings.UserAgent); } finally { Config.SetConfig(""); } }
public TestCore(SipCoreSettings settings) : base(settings) { }
private void Blast(SipTransportType transportType) { TestCore serverCore = null; TestCore clientCore = null; SipServerAgent serverAgent; SipClientAgent clientAgent; SipCoreSettings settings; SipRequest request; SipResponse response; SipResult result; try { // Initialize the test cores settings = new SipCoreSettings(); settings.TransportSettings = new SipTransportSettings[] { new SipTransportSettings(SipTransportType.UDP, NetworkBinding.Parse("ANY:5060"), 0), new SipTransportSettings(SipTransportType.TCP, NetworkBinding.Parse("ANY:5060"), 0) }; serverCore = new TestCore(settings); serverAgent = new SipServerAgent(serverCore, serverCore); serverCore.Start(serverAgent); serverCore.SetHandler(new SipRequestDelegate(OnRequest)); settings = new SipCoreSettings(); settings.TransportSettings = new SipTransportSettings[] { new SipTransportSettings(SipTransportType.UDP, NetworkBinding.Parse("ANY:0"), 0), new SipTransportSettings(SipTransportType.TCP, NetworkBinding.Parse("ANY:0"), 0) }; clientCore = new TestCore(settings); clientAgent = new SipClientAgent(clientCore, clientCore); clientCore.Start(clientAgent); clientCore.SetHandler(new SipResponseDelegate(OnResponse)); // Do a bunch of requests for (int i = 0; i < 1000; i++) { Clear(); request = new SipRequest(SipMethod.Register, string.Format("sip:127.0.0.1:5060;transport={0}", transportType.ToString().ToLowerInvariant()), null); request.AddHeader(SipHeader.To, "sip:[email protected]"); request.AddHeader(SipHeader.From, "sip:[email protected]"); request.Contents = new byte[] { (byte)i }; serverOp = ServerOp.OK; result = clientAgent.Request(request, null); response = result.Response; Thread.Sleep(100); Assert.AreEqual(SipStatus.OK, result.Status); CollectionAssert.AreEqual(request.Contents, response.Contents); } } finally { if (clientCore != null) { clientCore.Stop(); } if (serverCore != null) { serverCore.Stop(); } } }
private void Provisional(SipTransportType transportType) { TestCore serverCore = null; TestCore clientCore = null; SipServerAgent serverAgent; SipClientAgent clientAgent; SipCoreSettings settings; SipRequest request; SipResponse response; SipResult result; try { // Initialize the test cores settings = new SipCoreSettings(); settings.TransportSettings = new SipTransportSettings[] { new SipTransportSettings(SipTransportType.UDP, NetworkBinding.Parse("ANY:5060"), 0), new SipTransportSettings(SipTransportType.TCP, NetworkBinding.Parse("ANY:5060"), 0) }; serverCore = new TestCore(settings); serverAgent = new SipServerAgent(serverCore, serverCore); serverCore.Start(serverAgent); serverCore.SetHandler(new SipRequestDelegate(OnRequest)); settings = new SipCoreSettings(); settings.TransportSettings = new SipTransportSettings[] { new SipTransportSettings(SipTransportType.UDP, NetworkBinding.Parse("ANY:0"), 0), new SipTransportSettings(SipTransportType.TCP, NetworkBinding.Parse("ANY:0"), 0) }; clientCore = new TestCore(settings); clientAgent = new SipClientAgent(clientCore, clientCore); clientCore.Start(clientAgent); clientCore.SetHandler(new SipResponseDelegate(OnResponse)); // Verify a transaction with a single provisional response. // // I'm also going to verify that setting SipRequest.ViaInstanceParam // resulted in the "instance" parameter being added to the requests // Via header. Clear(); request = new SipRequest(SipMethod.Register, string.Format("sip:127.0.0.1:5060;transport={0}", transportType.ToString().ToLowerInvariant()), null); request.AddHeader(SipHeader.To, "sip:[email protected]"); request.AddHeader(SipHeader.From, "sip:[email protected]"); serverOp = ServerOp.ProvisionalOK; result = clientAgent.Request(request, null); Thread.Sleep(100); Assert.AreEqual(SipStatus.OK, result.Status); // Verify the response headers request = result.Request; response = result.Response; Assert.AreEqual(1, requestArgs.Count); Assert.AreEqual(2, responseArgs.Count); Assert.AreEqual(SipStatus.Trying, responseArgs[0].Response.Status); Assert.AreEqual(SipStatus.OK, responseArgs[1].Response.Status); Assert.AreEqual(request.Headers[SipHeader.To].Text, new SipValue(request.Headers[SipHeader.To].Text).Text); Assert.IsTrue(string.IsNullOrWhiteSpace(new SipValue(response.Headers[SipHeader.To].Text)["tag"])); Assert.AreEqual(request.Headers[SipHeader.From].Text, response.Headers[SipHeader.From].Text); Assert.AreEqual(request.Headers[SipHeader.CallID].Text, response.Headers[SipHeader.CallID].Text); Assert.AreEqual(request.Headers[SipHeader.CSeq].Text, response.Headers[SipHeader.CSeq].Text); Assert.AreEqual(request.Headers[SipHeader.Via].Text, response.Headers[SipHeader.Via].Text); // Verify a transaction with two provisional responses Clear(); request = new SipRequest(SipMethod.Register, string.Format("sip:127.0.0.1:5060;transport={0}", transportType.ToString().ToLowerInvariant()), null); request.AddHeader(SipHeader.To, "sip:[email protected]"); request.AddHeader(SipHeader.From, "sip:[email protected]"); serverOp = ServerOp.ProvisionalProvisionalOK; result = clientAgent.Request(request, null); Thread.Sleep(100); Assert.AreEqual(SipStatus.OK, result.Status); // Verify the response headers request = result.Request; response = result.Response; Assert.AreEqual(1, requestArgs.Count); Assert.AreEqual(3, responseArgs.Count); Assert.AreEqual(SipStatus.Trying, responseArgs[0].Response.Status); Assert.AreEqual("0", responseArgs[0].Response["Test"].Text); Assert.AreEqual(SipStatus.Trying, responseArgs[1].Response.Status); Assert.AreEqual("1", responseArgs[1].Response["Test"].Text); Assert.AreEqual(SipStatus.OK, responseArgs[2].Response.Status); Assert.AreEqual("2", responseArgs[2].Response["Test"].Text); Assert.AreEqual(request.Headers[SipHeader.To].Text, new SipValue(request.Headers[SipHeader.To].Text).Text); Assert.IsTrue(string.IsNullOrWhiteSpace(new SipValue(response.Headers[SipHeader.To].Text)["tag"])); Assert.AreEqual(request.Headers[SipHeader.From].Text, response.Headers[SipHeader.From].Text); Assert.AreEqual(request.Headers[SipHeader.CallID].Text, response.Headers[SipHeader.CallID].Text); Assert.AreEqual(request.Headers[SipHeader.CSeq].Text, response.Headers[SipHeader.CSeq].Text); Assert.AreEqual(request.Headers[SipHeader.Via].Text, response.Headers[SipHeader.Via].Text); } finally { if (clientCore != null) { clientCore.Stop(); } if (serverCore != null) { serverCore.Stop(); } } }
//--------------------------------------------------------------------- // Tests private void Basic(SipTransportType transportType) { TestCore serverCore = null; TestCore clientCore = null; SipServerAgent serverAgent; SipClientAgent clientAgent; SipCoreSettings settings; SipRequest request; SipResponse response; SipResult result; try { // Initialize the test cores settings = new SipCoreSettings(); settings.TransportSettings = new SipTransportSettings[] { new SipTransportSettings(SipTransportType.UDP, NetworkBinding.Parse("ANY:5060"), 0), new SipTransportSettings(SipTransportType.TCP, NetworkBinding.Parse("ANY:5060"), 0) }; serverCore = new TestCore(settings); serverAgent = new SipServerAgent(serverCore, serverCore); serverCore.Start(serverAgent); serverCore.SetHandler(new SipRequestDelegate(OnRequest)); settings = new SipCoreSettings(); settings.TransportSettings = new SipTransportSettings[] { new SipTransportSettings(SipTransportType.UDP, NetworkBinding.Parse("ANY:0"), 0), new SipTransportSettings(SipTransportType.TCP, NetworkBinding.Parse("ANY:0"), 0) }; clientCore = new TestCore(settings); clientAgent = new SipClientAgent(clientCore, clientCore); clientCore.Start(clientAgent); clientCore.SetHandler(new SipResponseDelegate(OnResponse)); // Verify a basic Request/OK transaction Clear(); request = new SipRequest(SipMethod.Register, string.Format("sip:127.0.0.1:5060;transport={0}", transportType.ToString().ToLowerInvariant()), null); request.AddHeader(SipHeader.To, "sip:[email protected]"); request.AddHeader(SipHeader.From, "sip:[email protected]"); serverOp = ServerOp.OK; result = clientAgent.Request(request, null); Thread.Sleep(100); Assert.AreEqual(SipStatus.OK, result.Status); // Verify the response headers request = result.Request; response = result.Response; Assert.AreEqual(1, requestArgs.Count); Assert.AreEqual(1, responseArgs.Count); Assert.AreEqual(request.Headers[SipHeader.To].Text, new SipValue(request.Headers[SipHeader.To].Text).Text); Assert.IsTrue(string.IsNullOrWhiteSpace(new SipValue(response.Headers[SipHeader.To].Text)["tag"])); Assert.AreEqual(request.Headers[SipHeader.From].Text, response.Headers[SipHeader.From].Text); Assert.AreEqual(request.Headers[SipHeader.CallID].Text, response.Headers[SipHeader.CallID].Text); Assert.AreEqual(request.Headers[SipHeader.CSeq].Text, response.Headers[SipHeader.CSeq].Text); Assert.AreEqual(request.Headers[SipHeader.Via].Text, response.Headers[SipHeader.Via].Text); // Verify that "Max-Forwards: 70" headers were added to the request message. Assert.AreEqual(SipHelper.MaxForwards, requestArgs[0].Request.GetHeaderText(SipHeader.MaxForwards)); // Verify requests that result in errors. Clear(); request = new SipRequest(SipMethod.Register, string.Format("sip:127.0.0.1:5060;transport={0}", transportType.ToString().ToLowerInvariant()), null); request.AddHeader(SipHeader.To, "sip:[email protected]"); request.AddHeader(SipHeader.From, "sip:[email protected]"); serverOp = ServerOp.Error; result = clientAgent.Request(request, null); Thread.Sleep(100); Assert.AreEqual(SipStatus.NotImplemented, result.Status); // Verify the response headers request = result.Request; response = result.Response; Assert.AreEqual(1, requestArgs.Count); Assert.AreEqual(1, responseArgs.Count); Assert.AreEqual(request.Headers[SipHeader.To].Text, new SipValue(request.Headers[SipHeader.To].Text).Text); Assert.IsTrue(string.IsNullOrWhiteSpace(new SipValue(response.Headers[SipHeader.To].Text)["tag"])); Assert.AreEqual(request.Headers[SipHeader.From].Text, response.Headers[SipHeader.From].Text); Assert.AreEqual(request.Headers[SipHeader.CallID].Text, response.Headers[SipHeader.CallID].Text); Assert.AreEqual(request.Headers[SipHeader.CSeq].Text, response.Headers[SipHeader.CSeq].Text); Assert.AreEqual(request.Headers[SipHeader.Via].Text, response.Headers[SipHeader.Via].Text); } finally { if (clientCore != null) { clientCore.Stop(); } if (serverCore != null) { serverCore.Stop(); } } }
public void Invite_Call_Vitelity() { Assert.Inconclusive("Manual Test: Comment this out to perform this test."); // Attempt an outbound call against the Vitelity.com service SipBasicCore core = null; SipDialog dialog = null; SipCoreSettings settings; SipRequest request; string sdp; try { // These settings are hardcoded for my Vitelity.com account // and my home network. This test also assumes that the router // is forwarding UDP port 5060 packets to the test computer. settings = new SipCoreSettings(); settings.LocalContact = "sip:jslill@" + Dns.GetHostEntry("www.lilltek.com").AddressList.IPv4Only()[0].ToString() + ":5060"; settings.UserName = "******"; settings.Password = "******"; core = new SipBasicCore(settings); core.Start(); //core.StartAutoRegistration("sip:sip4.vitelity.net","sip:[email protected]"); //Assert.IsTrue(core.AutoRegistration); //Assert.IsTrue(core.IsRegistered); // Make a call to my cellphone request = new SipRequest(SipMethod.Invite, "sip:[email protected]", null); request.SetHeader(SipHeader.To, new SipContactValue("sip:[email protected]")); request.SetHeader(SipHeader.From, new SipContactValue("sip:[email protected]")); request.SetHeader(SipHeader.ContentType, SipHelper.SdpMimeType); sdp = @"v=0 o=- 0 2 IN IP4 192.168.1.200 s=LillTek SIP c=IN IP4 192.168.1.200 t=0 0 m=audio 29318 RTP/AVP 107 119 100 106 0 105 98 8 101 a=alt:1 1 : AEnD+akt rmmTsDRh 192.168.1.200 29318 a=fmtp:101 0-15 a=rtpmap:107 BV32/16000 a=rtpmap:119 BV32-FEC/16000 a=rtpmap:100 SPEEX/16000 a=rtpmap:106 SPEEX-FEC/16000 a=rtpmap:105 SPEEX-FEC/8000 a=rtpmap:98 iLBC/8000 a=rtpmap:101 telephone-event/8000 a=sendrecv "; request.Contents = Helper.ToUTF8(sdp); dialog = core.CreateDialog(request, (SipContactValue)settings.LocalContact, null); Thread.Sleep(30000); // Wait 30 seconds to monitor the packets via NetMon //core.StopAutoRegistration(); } finally { if (core != null) { core.Stop(); } } }
public void SipMssGateway_Basic() { Assert.Inconclusive("Manual Test: Comment this out to perform this test."); SipBasicCore core = null; SipMssGateway gateway = null; int quit; try { Config.SetConfig(@" §ion Core LocalContact = sip:jslill@$(ip-address):8899 AutoAuthenticate = yes UserName = jslill Password = q0jsrd7y Diagnostics = yes §ion Transport[0] Type = UDP Binding = ANY:8899 &endsection §ion Transport[1] Type = TCP Binding = ANY:8899 &endsection &endsection §ion Gateway SpeechServerUri = sip:$(ip-address):5060 TrunkUri = sip:sip4.vitelity.net Register[0] = sip:[email protected] &endsection ".Replace('&', '#')); core = new SipBasicCore(SipCoreSettings.LoadConfig("Core")); core.SetTraceMode(traceMode); gateway = new SipMssGateway(core, SipMssGatewaySettings.LoadConfig("Gateway")); gateway.Start(); quit = 0; while (quit == 0) { quit = 0; Thread.Sleep(500); // Break here and manually set quit=1 to terminate the test } } finally { Config.SetConfig(null); if (gateway != null) { gateway.Stop(); } if (core != null) { core.Stop(); } } }