Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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();
                }
            }
        }
Exemple #3
0
        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();
                }
            }
        }
Exemple #4
0
        public void SipCoreSettings_LoadConfig()
        {
            try
            {
                Config.SetConfig(@"
&section 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

    &section Transport[0]

        Type       = TCP
        Binding    = 192.168.1.200:SIP
        BufferSize = 16000

        &section Timers
            T1     = 1s
            T2     = 2s
            T4     = 3s
        &endsection

    &endsection

    &section 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("");
            }
        }
Exemple #5
0
 public TestCore(SipCoreSettings settings)
     : base(settings)
 {
 }
Exemple #6
0
        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();
                }
            }
        }
Exemple #7
0
        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();
                }
            }
        }
Exemple #8
0
        //---------------------------------------------------------------------
        // 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();
                }
            }
        }
Exemple #9
0
        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();
                }
            }
        }
Exemple #10
0
        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(@"
&section Core

    LocalContact     = sip:jslill@$(ip-address):8899
    AutoAuthenticate = yes
    UserName         = jslill
    Password         = q0jsrd7y
    Diagnostics      = yes

    &section Transport[0]

        Type    = UDP
        Binding = ANY:8899

    &endsection

    &section Transport[1]

        Type    = TCP
        Binding = ANY:8899

    &endsection

&endsection

&section 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();
                }
            }
        }