Asterisk 中 SIP 消息的任意响应?
Arbitrary response for SIP message in Asterisk?
我有一个IPphone,好像都是标准的SIP,但是当你拿起接收器时,它会向服务器发送"MESSAGE"。
如果它收到“200 OK”,那么它会继续正常工作,并且似乎使用有效的 SIP,但如果它收到错误(Asterisk 最终会产生错误,因为它不是一个有效的序列,使它回复“406 不可接受”),它根本拒绝工作。
有什么方法可以改变 Asterisk 以针对特定用户 "MESSAGE" 响应“200 OK”,而无需从源代码重建 Asterisk 本身,或在其间添加任何类型的代理?
我可以建议以下选项
1) 尝试为消息设置上下文
sip.conf
accept_outofcall_message = yes
outofcall_message_context = messages
auth_message_requests = no
extensions.conf
[messages]
exten => _XXX,1,Hangup
2) 在 asterisk 之前将 kamailio 设置为代理,在 kamailio 上创建消息循环,在 kamailio 上注册您的设备。
虽然@arheops 的回复无效,但它肯定有助于为我指明正确的方向。
phone 发送的 MESSAGE
几乎没有任何内容,甚至没有 Content-Type。
<--- SIP read from UDP:<Phone External IP>:5060 --->
MESSAGE sip:1014@<Server Internal IP>:5060;user=phone SIP/2.0
Via: SIP/2.0/UDP <Phone Internal IP>:5060;branch=z9hG4bK2621781087c1096064fa949
From: "1014" <sip:1014@<Server Internal IP>:5060;user=phone>;tag=2621781087c1096064fa949;fjline-hunt=ML-141
To: <sip:1014@<Server Internal IP>:5060;user=phone>
CSeq: 1 MESSAGE
Call-ID: 00062621781087c1096064fa94900@<Phone Internal IP>
Content-Length: 0
Max-Forwards: 70
User-Agent: Fujitsu SS-170A/B/C V02L001C06
<------------->
--- (9 headers 0 lines) ---
最后我发现了这个问题:
其中指出如果没有内容类型 text/plain,Asterisk 会立即拒绝消息。
当然正确的方法是确实克隆 Asterisk 并从源代码重建它,但考虑到时间限制(和懒惰)我只是使用 Hopper 来查找 "text/plain" 之后字符串文字的偏移量,并使其以 200 OK
响应(末尾有一堆空格)。
现在我可以轻松地通过这个 phone!
呼叫任何人
然而,来电不起作用:它以 OK 响应 Notify,但什么都不做,Asterisk 将呼叫重定向到语音信箱。
而且我也无法查看语音邮件,因为它不会在带内或带外发送 DTMF。
长话短说:不要仅仅因为它便宜而且看起来很酷就在可疑的二手电子产品销售中购买 SIP phone,供应商特定的协议可以是 PITA。
我有一个IPphone,好像都是标准的SIP,但是当你拿起接收器时,它会向服务器发送"MESSAGE"。
如果它收到“200 OK”,那么它会继续正常工作,并且似乎使用有效的 SIP,但如果它收到错误(Asterisk 最终会产生错误,因为它不是一个有效的序列,使它回复“406 不可接受”),它根本拒绝工作。
有什么方法可以改变 Asterisk 以针对特定用户 "MESSAGE" 响应“200 OK”,而无需从源代码重建 Asterisk 本身,或在其间添加任何类型的代理?
我可以建议以下选项
1) 尝试为消息设置上下文 sip.conf
accept_outofcall_message = yes
outofcall_message_context = messages
auth_message_requests = no
extensions.conf
[messages]
exten => _XXX,1,Hangup
2) 在 asterisk 之前将 kamailio 设置为代理,在 kamailio 上创建消息循环,在 kamailio 上注册您的设备。
虽然@arheops 的回复无效,但它肯定有助于为我指明正确的方向。
phone 发送的 MESSAGE
几乎没有任何内容,甚至没有 Content-Type。
<--- SIP read from UDP:<Phone External IP>:5060 --->
MESSAGE sip:1014@<Server Internal IP>:5060;user=phone SIP/2.0
Via: SIP/2.0/UDP <Phone Internal IP>:5060;branch=z9hG4bK2621781087c1096064fa949
From: "1014" <sip:1014@<Server Internal IP>:5060;user=phone>;tag=2621781087c1096064fa949;fjline-hunt=ML-141
To: <sip:1014@<Server Internal IP>:5060;user=phone>
CSeq: 1 MESSAGE
Call-ID: 00062621781087c1096064fa94900@<Phone Internal IP>
Content-Length: 0
Max-Forwards: 70
User-Agent: Fujitsu SS-170A/B/C V02L001C06
<------------->
--- (9 headers 0 lines) ---
最后我发现了这个问题:
其中指出如果没有内容类型 text/plain,Asterisk 会立即拒绝消息。
当然正确的方法是确实克隆 Asterisk 并从源代码重建它,但考虑到时间限制(和懒惰)我只是使用 Hopper 来查找 "text/plain" 之后字符串文字的偏移量,并使其以 200 OK
响应(末尾有一堆空格)。
现在我可以轻松地通过这个 phone!
呼叫任何人然而,来电不起作用:它以 OK 响应 Notify,但什么都不做,Asterisk 将呼叫重定向到语音信箱。
而且我也无法查看语音邮件,因为它不会在带内或带外发送 DTMF。
长话短说:不要仅仅因为它便宜而且看起来很酷就在可疑的二手电子产品销售中购买 SIP phone,供应商特定的协议可以是 PITA。