/// <summary> /// Send sip request as new transaction. /// </summary> /// <param name="request">Sip message.</param> /// <param name="destination">User agent server uri.</param> /// <param name="destinationPort">User agent server port.</param> /// <param name="waitForResponse"></param> /// <returns></returns> public async Task <bool> SendSipRequestAsync(SipRequest request, bool waitForResponse = false) { if (request == null) { throw new ArgumentNullException("Request message cann't be null."); } SetNewTransaction(request); string strRequest = request.ToString(); _logger.Debug(string.Format("Sending SIP message\n{0}", strRequest)); bool sendResult = await SendData(Encoding.ASCII.GetBytes(strRequest), SipUri.Host, SipUri.Port); // only ip address is valid at this time return(sendResult); }
public void Shall_stringify_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!")); Assert.That(request.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, ACK, 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!")); }