C# 使用SIP巫术C订阅响应#

C# 使用SIP巫术C订阅响应#,c#,sip,C#,Sip,我正试图在一个C#sip客户端项目中使用codeplex的sip巫术,向我的服务器发送和接收请求和响应。当我使用SIPUDPChannel.Send('remoteEP','msg')时,我可以看到订阅数据包被发送到我的服务器,并且我的服务器用状态响应进行应答 但是我如何用SIP Sorcery API捕捉响应/请求事件呢?回答您在评论中提出的第二个问题,关于为什么第二个订阅请求在对话框中(或者更准确地说在事务中);不是 但是,由于您正在使用从对第一个订阅请求的响应中获得的SIP头,因此最终会设

我正试图在一个C#sip客户端项目中使用codeplex的sip巫术,向我的服务器发送和接收请求和响应。当我使用SIPUDPChannel.Send('remoteEP','msg')时,我可以看到订阅数据包被发送到我的服务器,并且我的服务器用状态响应进行应答


但是我如何用SIP Sorcery API捕捉响应/请求事件呢?

回答您在评论中提出的第二个问题,关于为什么第二个订阅请求在对话框中(或者更准确地说在事务中);不是

但是,由于您正在使用从对第一个订阅请求的响应中获得的SIP头,因此最终会设置一些头,使其看起来好像是现有事务的一部分

正确的方法是重新使用原始SIP请求中的头,增加CSeq并重新生成CallID。下面的代码(注意,我编译它不是为了检查语法错误)

更新2:

向SIP请求发送简单响应的最简单方法如下所示

static void Transport_SIPTransportRequestReceived(SIPEndPoint localSIPEndPoint, SIPEndPoint remoteEndPoint, SIPRequest sipRequest)
{
    SIPResponse response = SIPTransport.GetResponse(sipRequest, SIPResponseStatusCodesEnum.Ok, null);
    _sipTransport.SendResponse(response);
}

你能发一段代码吗?我知道如何接收回复。这里有一个片段,但我现在有另一个问题(当然是因为)。当我在Transport_SIPTransportResponseReceived()中发送一个新通道.Send()时,我可以看到它正在发送一个不应该发送的对话框,因为我还没有通过服务器的身份验证。我可以从响应中使用Www身份验证发出新请求,而不必将其放在对话请求中??在创建到我的服务器的传输/通道连接时是否有任何方法应用用户名和密码??上一个线程的简短后续。如果我想在收到来自服务器的通知后发送200个OK数据包,这是执行此操作的方法吗??header.CallId而不是header.CallId
SIPAuthorisationDigest authDigest = sipResponse.Header.AuthenticationHeader.SIPDigest;
authDigest.SetCredentials(username, password, uri, SIPMethodsEnum.INVITE.ToString());
authRequest.Header.AuthenticationHeader = new SIPAuthenticationHeader(authDigest);
authRequest.Header.AuthenticationHeader.SIPDigest.Response = authDigest.Digest;
static void Transport_SIPTransportRequestReceived(SIPEndPoint localSIPEndPoint, SIPEndPoint remoteEndPoint, SIPRequest sipRequest)
{
    SIPResponse response = SIPTransport.GetResponse(sipRequest, SIPResponseStatusCodesEnum.Ok, null);
    _sipTransport.SendResponse(response);
}