Asterisk 不通过 sip 响应应用程序请求
Asterisk not responding to app requests over sip
我正在努力让事情变得简单 click-to-call app
。我安装了 asterisk 服务器,我可以使用免费 softphone
拨打电话。但是当我使用我的应用程序发送内容时,我没有收到任何回复。
我以前没有使用过套接字。所以,可能是这样。
这是我的代码:
string registerHeader = "REGISTER sip:asteriskip;transport=UDP SIP/2.0\r\n";
string toHeader = "To: <sip:1@asteriskip;transport=UDP>\r\n";
string fromHeader = "From: <sip:1@asteriskip;transport=UDP>\r\n";
string callId = "Call-ID: 1\r\n";
string CSeq = "CSeq: 1 REGISTER\r\n";
string expires = "Expires: 3600\r\n";
string via = "Via: SIP/2.0/UDP myip:myport;branch=z9hG4bK-1\r\n";
string maxF = "Max-Forwards: 70\r\n";
string UA = "User-Agent: MySoftphone\r\n";
string contact = "Contact: <sip:1@myip:myport;transport=UDP>\r\n";
string contLength = "Content-Length: 0\r\n\r\n";
Socket cl = new Socket(SocketType.Dgram, ProtocolType.Udp);
byte[] registerMsg = Encoding.ASCII.GetBytes(registerHeader + toHeader +
fromHeader + callId + CSeq + expires+via+maxF+UA+contact+contLength);
IPEndPoint server = new IPEndPoint(IPAddress.Parse("asteriskip"), 5060);
cl.Connect(server);
cl.Send(registerMsg);//(registerMsg, registerMsg.Length);
int bytesCount = 0;
do
{
byte[] response = new byte[] { };
cl.Receive(response);//(ref server);
bytesCount = response.Length;
string resp = Encoding.ASCII.GetString(response);
Console.WriteLine(resp);
}
while (bytesCount == 0);
Console.ReadKey();
此请求与 softphone's
几乎相同,取自 wireshark
。但是 softphone
得到响应而这个请求没有。应该有 Register CSeq 2,我尝试发送它 - 仍然没有,如果我没记错的话我应该在 Register.
的第一部分之后收到类似 401-Unauthorized
的东西
经过一些研究,我发现我缺少 tag
参数。如果未设置 tag
,服务器将忽略请求。
我正在努力让事情变得简单 click-to-call app
。我安装了 asterisk 服务器,我可以使用免费 softphone
拨打电话。但是当我使用我的应用程序发送内容时,我没有收到任何回复。
我以前没有使用过套接字。所以,可能是这样。
这是我的代码:
string registerHeader = "REGISTER sip:asteriskip;transport=UDP SIP/2.0\r\n";
string toHeader = "To: <sip:1@asteriskip;transport=UDP>\r\n";
string fromHeader = "From: <sip:1@asteriskip;transport=UDP>\r\n";
string callId = "Call-ID: 1\r\n";
string CSeq = "CSeq: 1 REGISTER\r\n";
string expires = "Expires: 3600\r\n";
string via = "Via: SIP/2.0/UDP myip:myport;branch=z9hG4bK-1\r\n";
string maxF = "Max-Forwards: 70\r\n";
string UA = "User-Agent: MySoftphone\r\n";
string contact = "Contact: <sip:1@myip:myport;transport=UDP>\r\n";
string contLength = "Content-Length: 0\r\n\r\n";
Socket cl = new Socket(SocketType.Dgram, ProtocolType.Udp);
byte[] registerMsg = Encoding.ASCII.GetBytes(registerHeader + toHeader +
fromHeader + callId + CSeq + expires+via+maxF+UA+contact+contLength);
IPEndPoint server = new IPEndPoint(IPAddress.Parse("asteriskip"), 5060);
cl.Connect(server);
cl.Send(registerMsg);//(registerMsg, registerMsg.Length);
int bytesCount = 0;
do
{
byte[] response = new byte[] { };
cl.Receive(response);//(ref server);
bytesCount = response.Length;
string resp = Encoding.ASCII.GetString(response);
Console.WriteLine(resp);
}
while (bytesCount == 0);
Console.ReadKey();
此请求与 softphone's
几乎相同,取自 wireshark
。但是 softphone
得到响应而这个请求没有。应该有 Register CSeq 2,我尝试发送它 - 仍然没有,如果我没记错的话我应该在 Register.
401-Unauthorized
的东西
经过一些研究,我发现我缺少 tag
参数。如果未设置 tag
,服务器将忽略请求。