PJSUA 在从服务器获得响铃响应后在 Android 上崩溃

PJSUA crash on Android after getting Ringing response from server

我在 REGISTER reuqest 中向服务器发送联系人 header 中的一些额外信息,一切正常,但是当我尝试处理来电时 - 应用程序在发送 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) 响应。

这是我的 正在响铃 回复:

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 消息。

是的,一切正常,无需联系任何其他信息 header。

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

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

问题与联系中的令牌长度有关。

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

如果有人仍然不感兴趣,这里是 link pjsip.org 关于消息大小和一些关于如何减少它的提示:

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