1

我在 REGISTER reuqest 中将联系人标头中的一些附加信息发送到服务器,一切正常,但是当我尝试处理来电时 - 应用程序在发送 RINGING 响应后崩溃,日志中没有错误。

这是我的注册信息:

REGISTER sip:8022@XXX.XXX.XXX.XXX SIP/2.0
Via: SIP/2.0/UDP XXX.XXX.XXX.XXX:5060;rport;branch=z9hG4bKPj2ec0a45d-ed19-
4638-82fd-fd99c0c0ec2a
Route: <sip:8022@XXX.XXX.XXX.XXX:5060;lr>
Max-Forwards: 70
From: <sip:XXXX@XXX.XXX.XXX.XXX>;tag=f11614bc-65b3-4742-846a-f36b207b27ad
To: <sip:8022@XXX.XXX.XXX.XXX>
Call-ID: 708c9a3b-be50-4c45-b49c-ac6843547ad0
CSeq: 59316 REGISTER
User-Agent: Pjsua2 Android 2.6
Contact: <sip:XXXX@XXX.XXX.XXX.XXX:5060;app-id=my.app;pn-type=android;pn-
tok=<token_string_here>;ob>
Expires: 300
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, 
REFER, MESSAGE, OPTIONS
Authorization: Digest username="8022", realm="asterisk", 
nonce="1495458128/d947e48afff90d90490a665850fde439", 
uri="sip:8022@XXX.XXX.XXX.XXX", response="291fbdfd407ba19d3d916ec28a88e1a2", 
algorithm=md5, cnonce="e55f14a6-95f3-4ace-a4cb-a24cdf4f2bdc", 
opaque="0c274aee613c50ab", qop=auth, nc=00000001
Content-Length:  0
--end msg--

附加的东西,如 app-id、pn-type、pn-tok 是通过添加的

accCfg.getSipConfig().setContactUriParams(myContactParams);

当 INVITE 请求到来时,PJSUA 发送 TRYING 响应(SIP 状态 100),然后我向 INVITE 发送 RINGING 状态(180)响应。

这是我的RINGING回复:

Response msg 180/INVITE/cseq=6662 (tdta0xac62c838) to TCP XXX.XXX.XXX.XXX:52891:
SIP/2.0 180 Ringing
Via: SIP/2.0/TCP XXX.XXX.XXX.XXX:5060;rport=52891;received=XXX.XXX.XXX.XXX;branch=z9hG4bKPje30b530e-e7f3-4404-b937-61d8046a43f8;alias
Call-ID: 43da8440-9a30-49ed-8345-17a2e515c590
From: <sip:8003@XXX.XXX.XXX.XXX>;tag=4b2008cd-14db-4edc-97f5-c5fde8ffccb8
To: <sip:8022@XXX.XXX.XXX.XXX;app-id=my.app;pn-type=android;pn-tok=<token_string_here>;ob>;tag=fd58966e-ef74-48f6-9595-542d85f1e87d
CSeq: 6662 INVITE
Contact: <sip:8022@XXX.XXX.XXX.XXX:5060;app-id=my.app;pn-type=android;pn-tok=<token_string_here>;ob>
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Content-Length:  0
--end msg--

然后我在 PJSUA 的 logcat 中又多了两行

I/PJSUA2: 16:46:22.408  tsx0xac3c3f7c  ....State changed from Proceeding to Proceeding, event=TX_MSG
I/PJSUA2: 16:46:22.408  dlg0xac479014  .....Transaction tsx0xac3c3f7c state changed to Proceeding

并且应用程序立即崩溃,日志中没有任何 PJSUA 消息。

是的,在联系人标题中没有任何附加信息的情况下,一切都可以完美运行。

有没有办法解决这个问题?如果 PJSIP 有限制 - 我可以通过在编译之前设置一些标志来更改它,还是有另一种方法可以在 REGISTER 请求中发送额外的联系信息?

我们使用华为 P8 Lite (Android 6.0) 和 Android Studio 2.3.2,为 Android 编译的 PJSIP v2.6,Asterisk PJSIP 13,但错误也发生在 Aterisk 11 上。

4

1 回答 1

0

问题是关于接触的令牌长度。

我已经通过使用我们的 REST API 发送令牌来解决这个问题。我的主题并没有太深入,在通过 UDP 发送 sip 消息时,它似乎超过了 MTU 大小。只要我的项目中不需要 TCP 传输,我就没有测试过通过 TCP 发送该消息。

如果有人仍然不感兴趣,这里是 pjsip.org 上关于味精大小的链接以及关于如何减少它的一些提示:

https://trac.pjsip.org/repos/wiki/FAQ#sip-msg-size

于 2017-06-22T15:06:29.570 回答