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")); }
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)); }
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); }
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)")); }
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); }
public void Must_not_result_in_header(string headerValue) { Assert.That(ViaHeader.ParseMany(headerValue), Is.Empty); }
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); }