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

时间:2017-05-22 14:20:52

标签: android asterisk sip pjsip pjsua2

我在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),然后 我发送RINGING状态(180)响应INVITE。

这是我的 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,PJSIP v2.6编译为Android,Asterisk PJSIP 13,但错误也发生在Aterisk 11上。

1 个答案:

答案 0 :(得分:0)

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

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

如果有人仍然不感兴趣,请点击pjsip.org上有关msg大小的链接以及有关如何减少它的一些提示:

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