Esempio n. 1
0
        public void Shall_parse_header()
        {
            const string str = "SIP/2.0/UDP foo.bar.com:1234;foo=bar (a comment)";

            Assert.That(ViaHeader.TryParse(str, out ViaHeader header), Is.True);
            Assert.That(header.Version, Is.EqualTo("2.0"));
            Assert.That(header.Protocol, Is.EqualTo("UDP"));
            Assert.That(header.Host, Is.EqualTo("foo.bar.com"));
            Assert.That(header.Port, Is.EqualTo("1234"));
            Assert.That(header.Comment, Is.EqualTo("a comment"));
            Assert.That(header.Parameters[0].Name, Is.EqualTo("foo"));
            Assert.That(header.Parameters[0].Value, Is.EqualTo("bar"));
        }
Esempio n. 2
0
            public void Must_parse_correctly(object[] parameters)
            {
                var headerValue    = (string)parameters[0];
                var receivedFields = new List <Tuple <string, string> >();

                for (int i = 1; i < parameters.Length; i += 2)
                {
                    receivedFields.Add(new Tuple <string, string>((string)parameters[i], (string)parameters[i + 1]));
                }

                IEnumerable <ViaHeader> headers = ViaHeader.ParseMany(headerValue);

                Assert.That(headers.Select(arg => new Tuple <string, string>(arg.ReceivedProtocol, arg.ReceivedBy)), Is.EquivalentTo(receivedFields));
            }
Esempio n. 3
0
 private void CreateCommonHeaders(SipUser sipUser, LocalSipUserAgentServer localSipUas, SipTransportManager sipTransportManager)
 {
     this.viaHeader     = new ViaHeader(localSipUas, sipTransportManager.SipProtocol, sipTransportManager.SipTransport);
     this.fromHeader    = new FromHeader(sipUser, localSipUas, sipTransportManager.SipProtocol);
     this.toHeader      = new ToHeader(localSipUas, sipTransportManager.SipProtocol);
     this.callIdHeader  = new CallIdHeader();
     this.contactHeader = new ContactHeader(localSipUas, sipTransportManager.SipProtocol);
     this.routeHeader   = new RouteHeader(localSipUas, sipTransportManager.SipProtocol);
     this.userAgent     = new UserAgentHeader();
     this.expiresHeader = new ExpiresHeader();
     this.maxForwards   = new MaxForwardsHeader();
     this.allowHeader   = new AllowHeader();
     this.contentLength = new ContentLength(body);
 }
Esempio n. 4
0
        public void Shall_clone_header()
        {
            ViaHeader original = ViaHeader.Parse("SIP/2.0/UDP foo.bar.com:1234 (a comment)");
            ViaHeader cloned   = original.DeepClone();

            original.Version  = "1.1";
            original.Protocol = "TCP";
            original.Host     = "qwerty.dvorak.com";
            original.Port     = "5678";
            original.Comment  = "another comment";
            original.Parameters.Add(new GenericParameter("foo", "bar"));

            Assert.That(cloned.ToString(), Is.EqualTo("SIP/2.0/UDP foo.bar.com:1234 (a comment)"));
            Assert.That(original.ToString(), Is.EqualTo("SIP/1.1/TCP qwerty.dvorak.com:5678;foo=bar (another comment)"));
        }
Esempio n. 5
0
        public void Shall_stringify_header()
        {
            var header = new ViaHeader
            {
                Version    = "2.0",
                Protocol   = "UDP",
                Host       = "foo.bar.com",
                Port       = "1234",
                Comment    = "a comment",
                Parameters =
                {
                    new GenericParameter("foo", "bar")
                }
            };

            Assert.That(header.ToString(), Is.EqualTo("SIP/2.0/UDP foo.bar.com:1234;foo=bar (a comment)"));
        }
        public void ParseFullHeader()
        {
            var header = "SIP/2.0/UDP  server10.biloxi.com  ; branch=  z9hG4bKnashds8 ; received =192.0.2.3;test";

            var result     = ViaHeader.TryParse(header, out var parsed);
            var parameters = parsed.Parameters.GetEnumerator();

            Assert.True(result);
            Assert.Equal("SIP/2.0", parsed.Version);
            Assert.Equal("UDP", parsed.Protocol);
            Assert.Equal("server10.biloxi.com", parsed.Host);
            Assert.True(parameters.MoveNext());
            Assert.Equal("branch", parameters.Current.Name);
            Assert.Equal("z9hG4bKnashds8", parameters.Current.Value);
            Assert.True(parameters.MoveNext());
            Assert.Equal("received", parameters.Current.Name);
            Assert.Equal("192.0.2.3", parameters.Current.Value);
            Assert.True(parameters.MoveNext());
            Assert.Equal("test", parameters.Current.Name);
        }
Esempio n. 7
0
 public void Must_not_result_in_header(string headerValue)
 {
     Assert.That(ViaHeader.ParseMany(headerValue), Is.Empty);
 }
Esempio n. 8
0
        public void Shall_byteify_request()
        {
            var request = new SipRequest
            {
                Version     = "SIP/2.0",
                Method      = "INVITE",
                RequestUri  = SipUri.Parse("sip:[email protected]"),
                From        = NameAddressHeader.Parse("John Smith <sip:[email protected]>"),
                To          = NameAddressHeader.Parse("Joe Shmoe <sip:[email protected]>"),
                CallId      = CallIdHeader.Parse("*****@*****.**"),
                CSeq        = CSeqHeader.Parse("1 INVITE"),
                ContentType = ContentTypeHeader.Parse("text/plain"),
                MimeVersion = ContentLengthHeader.Parse("1.0")
            };

            request.Vias.Add(ViaHeader.Parse("SIP/2.0/UDP foo.bar.com"));
            request.RecordRoutes.Add(NameAddressHeader.Parse("Tommy Atkins <sip:[email protected]>"));
            request.Routes.Add(NameAddressHeader.Parse("John Doe <sip:[email protected]>"));
            request.Contacts.Add(NameAddressHeader.Parse("Prisoner X <sip:[email protected]>"));
            request.Authorizations.Add(AuthorizationHeader.Parse("Digest username=\"Alice\""));
            request.WwwAuthenticates.Add(WwwAuthenticateHeader.Parse("Digest realm=\"abc.com\""));
            request.ProxyAuthenticates.Add(WwwAuthenticateHeader.Parse("Digest realm=\"xyz.com\""));
            request.ProxyAuthorizations.Add(AuthorizationHeader.Parse("Digest username=\"Bob\""));
            request.CallInfos.Add(CallInfoHeader.Parse("<http://www.abc.com/photo.png>;purpose=icon"));
            request.Allows.Add(ContentLengthHeader.Parse("INVITE, ACK, BYE"));
            request.ContentEncodings.Add(ContentLengthHeader.Parse("deflate"));
            request.AlertInfos.Add(CallInfoHeader.Parse("<http://www.abc.com/sound.wav>"));
            request.ErrorInfos.Add(CallInfoHeader.Parse("<sip:[email protected]>"));
            request.Accepts.Add(ContentTypeHeader.Parse("application/sdp"));
            request.AcceptEncodings.Add(AcceptEncodingHeader.Parse("gzip"));
            request.AcceptLanguages.Add(AcceptEncodingHeader.Parse("en"));
            request.AuthenticationInfos.Add(AuthenticationInfoHeader.Parse("nextnonce=\"abc\""));
            request.ProxyAuthenticationInfos.Add(AuthenticationInfoHeader.Parse("nextnonce=\"def\""));
            request.OtherHeaders.Add(new GenericHeader("P-Asserted-Identity", "sip:[email protected]"));
            request.Bodies.Add(SipBody.Parse("Hello world!"));

            var buffer  = new byte[ushort.MaxValue];
            var success = request.TryCopyTo(buffer, 0, out int length);

            Assert.That(success, Is.True);

            var request2 = SipMessage.Parse(new ArraySegment <byte>(buffer, 0, length));

            Assert.That(request2.ToString(), Is.EqualTo(
                            "INVITE sip:[email protected] SIP/2.0\r\n" +
                            "Via: SIP/2.0/UDP foo.bar.com\r\n" +
                            "Record-Route: Tommy Atkins <sip:[email protected]>\r\n" +
                            "Route: John Doe <sip:[email protected]>\r\n" +
                            "From: John Smith <sip:[email protected]>\r\n" +
                            "To: Joe Shmoe <sip:[email protected]>\r\n" +
                            "Call-ID: [email protected]\r\n" +
                            "CSeq: 1 INVITE\r\n" +
                            "Contact: Prisoner X <sip:[email protected]>\r\n" +
                            "Authorization: Digest username=\"Alice\"\r\n" +
                            "WWW-Authenticate: Digest realm=\"abc.com\"\r\n" +
                            "Proxy-Authenticate: Digest realm=\"xyz.com\"\r\n" +
                            "Proxy-Authorization: Digest username=\"Bob\"\r\n" +
                            "Call-Info: <http://www.abc.com/photo.png>;purpose=icon\r\n" +
                            "Content-Type: text/plain\r\n" +
                            "Mime-Version: 1.0\r\n" +
                            "Allow: INVITE\r\n" +
                            "Allow: ACK\r\n" +
                            "Allow: BYE\r\n" +
                            "Content-Encoding: deflate\r\n" +
                            "Alert-Info: <http://www.abc.com/sound.wav>\r\n" +
                            "Error-Info: <sip:[email protected]>\r\n" +
                            "Accept: application/sdp\r\n" +
                            "Accept-Encoding: gzip\r\n" +
                            "Accept-Language: en\r\n" +
                            "Authentication-Info: nextnonce=\"abc\"\r\n" +
                            "Proxy-Authentication-Info: nextnonce=\"def\"\r\n" +
                            "P-asserted-identity: sip:[email protected]\r\n" +
                            "Content-Length:    12\r\n" +
                            "\r\n" +
                            "Hello world!"));
        }
        public void ParseHeader_HeaderIsValid(string header)
        {
            var result = ViaHeader.TryParse(header, out var parsed);

            Assert.True(result);
        }