Skip to content

PJSUA Android: App Crashes Due to Assertion Failure After Sending DTMF Signal #4316

@DeepumonDev

Description

@DeepumonDev

Describe the bug

After calling an IVR number and sending a DTMF signal using RFC2833 method, an assertion error occurs, causing the app to crash. This issue happens with only one specific IVR number, while signaling works fine for the other two numbers used for testing.

override fun sendDTMFRFCMethod(digit: String) {
    try {
        val dtmfParam = getDTMFParam(DTMFType.OUT_OF_BAND_RFC283, digit)
        activeAudioCall!!.sendDtmf(dtmfParam)
    } catch (e: Exception) {
        // Fall back: RFC Method is not supported, Try sending DTMF signal using SIP INFO Method
        sendDTMFSIPINFOMethod(digit)
    }
}

override fun sendDTMFSIPINFOMethod(digit: String) {
    try {
        val dtmfParam = getDTMFParam(DTMFType.OUT_OF_BAND_SIP_INFO, digit)
        activeAudioCall!!.sendDtmf(dtmfParam)
    } catch (e: Exception) {
    }
}

override fun getDTMFParam(dtmfType: DTMFType, digit: String): CallSendDtmfParam {
    val dtmfParam = CallSendDtmfParam().apply {
        when (dtmfType) {
            DTMFType.OUT_OF_BAND_RFC283 -> {
                method = PJSUA_DTMF_METHOD_RFC2833
            }

            DTMFType.OUT_OF_BAND_SIP_INFO -> {
                method = PJSUA_DTMF_METHOD_SIP_INFO
            }

            else -> {
                method = PJSUA_DTMF_METHOD_RFC2833
            } // Defaults to RFC method
        }

        digits = digit
    }
    return dtmfParam
}

Steps to reproduce

  1. Build PJSIP(2.15.1) for Android kotlin project.
  2. make a call to the given IVR Number
  3. send a DTMF signal using RFC2833 method (combination that caused the crash for that particular number: send DTMF digit 1 and then send 2).
  4. The app crashes due to the following assertion failure.

assertion "a->addr.sa_family == PJ_AF_INET || a->addr.sa_family == PJ_AF_INET6" failed

PJSIP version

2.15.1

Context

  • The issue happens on Android Samsung Galaxy Tab A8 device (didn't try on any other devices).
  • Android version: 11
  • Device architecture: arm64-v8a
  • PJSIP version: 2.15.1 or 2.14.1.
  • Command used to configure PJSIP for Android: TARGET_ABI=arm64-v8a ./configure-android --use-ndk-cflags.
  • Contents of config_site.h file.
    #define PJ_CONFIG_ANDROID 1
    #include <pj/config_site_sample.h>

Log, call stack, etc

Call 0 sending DTMF 2 using RFC2833 method 
Call 0 dialing DTMF 2 Sending DTMF digit id 2 
stop(436): called with 10560 frames delivered Processing incoming message: Request msg INVITE/cseq=101 (rdata0xb400007e4469f8f8) RX 1230 bytes 
Request msg INVITE/cseq=101 (rdata0xb400007e4469f8f8) from UDP 10.150.80.121:5060: 

INVITE sip:+01242120316@10.128.215.66:6000;ob SIP/2.0 Via: SIP/2.0/UDP 10.150.80.121:5060;branch=z9hG4bK17f25543f7fb1e From: sip:+12122638868@ucmmywbdcs01.xyz.org;tag=31526615~91396a45-835e-4589-ae6e-b55e6289590f-57548461 To: sip:+01242120316@ucmmywbdcs01.xyz.org;tag=129e016a-a62f-4af5-8bd5-526095a2669a Date: Wed, 19 Feb 2025 18:07:20 GMT Call-ID: 12aae1ac-5822-4544-bcf0-f90ba691c4da 

Supported: timer,resource-priority,replaces User-Agent: Cisco-CUCM11.5 
Allow: INVITE, OPTIONS, INFO, BYE, CANCEL, ACK, PRACK, UPDATE, REFER, SUBSCRIBE, 
NOTIFY CSeq: 101 INVITE Max-Forwards: 70 Expires: 180 
Allow-Events: presence Session-ID: f15919f7090757d4c047cba117440776;remote=ce0c7aebfe567511ed864faa31526615 

Session-Expires: 1800;refresher=uac Min-SE: 1800 Remote-Party-ID: <sip:25232@10.150.80.121>;party=calling;screen=yes;privacy=off Contact: <sip:+12122638868@10.150.80.121:5060;transport=tcp> 
Content-Type: application/sdp Content-Length: 261 v=0 
o=CiscoSystemsCCM-SIP 31526615 2 IN IP4 10.150.80.121 
s=SIP Call 
c=IN IP4 0.0.0.0 
b=TIAS:64000 
b=AS:64 
t=0 0 
m=audio 25676 RTP/AVP 0 122 b=TIAS:64000 a=ptime:20 
a=rtpmap:0 PCMU/8000 a=inactive 
a=rtpmap:122 telephone-event/8000 a=fmtp:122 0-15

dlg0xb400007e14818908 .Received Request msg INVITE/cseq=101 (rdata0xb400007e4469f8f8) tsx0xb400007de46ca0e8 ...Transaction created for Request msg INVITE/cseq=101 (rdata0xb400007e4469f8f8) tsx0xb400007de46ca0e8 ..Incoming Request msg INVITE/cseq=101 (rdata0xb400007e4469f8f8) in state Null tsx0xb400007de46ca0e8 ...State changed from Null to Trying, event=RX_MSG dlg0xb400007e14818908 ....Transaction tsx0xb400007de46ca0e8 state changed to Trying inv0xb400007e14818908 .....Got SDP offer in Request msg INVITE/cseq=101 (rdata0xb400007e4469f8f8) 
pjsua_call.c .....Call 0: received updated media offer 
pjsua_media.c ......Call 0: re-initializing media..
pjsua_media.c .......Media index 0 selected for audio call 0 
pjsua_media.c .......Call 0: media transport initialization complete: Success sip_util.c .....Response msg 200/INVITE/cseq=101 (tdta0xb400007e149168d8) created inv0xb400007e14818908 .....SDP negotiation done: Success pjsua_call.c ......Call 0:
 remote NAT type is 0 (Unknown) pjsua_media.c ......Call 0: updating media.. 
pjsua_media.c .......Local address change detected, resetting SRTP TX ROC 
pjsua_media.c .......Remote address change detected, resetting SRTP RX ROC
 conference.c .........Remove port 1 requested
 conference.c .........Remove port 1 queued 
strm0xb400007e446ea128 ........Stream destroying 
pjsua_media.c ........Media stream call00:0 is destroyed 
pjsua_aud.c .......Audio channel update for index 0 for call 0…
 strm0xb400007e4471d2a8 ........VAD temporarily disabled
 strm0xb400007e4471d2a8 ........Jitter buffer reset 
rtp.c ........pjmedia_rtp_session_init: ses=0xb400007e44718038, default_pt=0, ssrc=0x2fe83998 rtp.c ........pjmedia_rtp_session_init2: ses=0xb400007e44718038, seq=13823, ts=105760, peer_ssrc=0 rtp.c ........pjmedia_rtp_session_init: ses=0xb400007e44718658, default_pt=0, ssrc=0x2fe83998 rtp.c ........pjmedia_rtp_session_init2: ses=0xb400007e44718658, seq=13823, ts=105760, peer_ssrc=0


conference.c !.Stop any transmission to port 1 (sip:+[12122638868@ucmmywbdcs01.xyz.org](mailto:12122638868@ucmmywbdcs01.nyumc.org):5060)
 conference.c .Port 0 (Android JNI) stop transmitting to port 1 (sip:+12122638868@ucmmywbdcs01.xyz.org:5060) 
Master/sound .Delay buffer is reset 
conference.c .Stop any transmission from port 1 (sip:+[12122638868@ucmmywbdcs01.xyz.org](mailto:12122638868@ucmmywbdcs01.nyumc.org):5060)
conference.c .Port 1 (sip:+12122638868@ucmmywbdcs01.xyz.org:5060) 
stop transmitting to port 0 (Android JNI) conference.c .Removed port 1 (sip:+12122638868@ucmmywbdcs01.xyz.org:5060), port count=1 strm0xb400007e446ea128 .JB summary: size=0/eff=0 prefetch=0 level=0 delay (min/max/avg/dev)=0/0/0/0 ms burst (min/max/avg/dev)=0/0/0/0 frames lost=0 discard=0 empty=654 strm0xb400007e446ea128 .Stream destroyed capdbuf Underflow, buf_cnt=0, will generate 1 frame

libc A ../src/pj/sock_common.c:394: unsigned int pj_sockaddr_get_len(const pj_sockaddr_t *): assertion "a->addr.sa_family == PJ_AF_INET || a->addr.sa_family == PJ_AF_INET6" failed libc 

—---------------Beginning of crash—-----------------------------

Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 26141 (Thread-1474), pid 23767 

pid: 23767, tid: 26141, name: Thread-1474 
#02 pc 00000000004eac80 /lib/arm64/libpjsua2.so (pj_sockaddr_get_len+192) (BuildId: 83555015a1b45b5c31db836f25fd0e603538b350)
#03 pc 000000000040d1c0 /lib/arm64/libpjsua2.so (BuildId: 83555015a1b45b5c31db836f25fd0e603538b350)
#04 pc 0000000000414bac /lib/arm64/libpjsua2.so (BuildId: 83555015a1b45b5c31db836f25fd0e603538b350)
#05 pc 0000000000413a64 /lib/arm64/libpjsua2.so (BuildId: 83555015a1b45b5c31db836f25fd0e603538b350)
#06 pc 00000000004139fc /lib/arm64/libpjsua2.so (BuildId: 83555015a1b45b5c31db836f25fd0e603538b350) 
#07 pc 00000000003ffabc /lib/arm64/libpjsua2.so (BuildId: 83555015a1b45b5c31db836f25fd0e603538b350) 
#08 pc 00000000003fd1ec /lib/arm64/libpjsua2.so (BuildId: 83555015a1b45b5c31db836f25fd0e603538b350) 
#09 pc 00000000003fcc5c /lib/arm64/libpjsua2.so (pjmedia_stream_send_rtcp_sdes+120) (BuildId: 83555015a1b45b5c31db836f25fd0e603538b350) 
#10 pc 00000000003f9e74 /lib/arm64/libpjsua2.so (pjmedia_stream_create+5848) (BuildId: 83555015a1b45b5c31db836f25fd0e603538b350) 
#11 pc 00000000003519dc /lib/arm64/libpjsua2.so (pjsua_aud_channel_update+692) (BuildId: 83555015a1b45b5c31db836f25fd0e603538b350) 
#12 pc 00000000003438d8 /lib/arm64/libpjsua2.so (pjsua_media_channel_update+3088) (BuildId: 83555015a1b45b5c31db836f25fd0e603538b350) 
#13 pc 00000000003231ac /lib/arm64/libpjsua2.so (BuildId: 83555015a1b45b5c31db836f25fd0e603538b350)
 #14 pc 000000000035f0ac /lib/arm64/libpjsua2.so (BuildId: 83555015a1b45b5c31db836f25fd0e603538b350) #15 pc 000000000035b594 /lib/arm64/libpjsua2.so (BuildId: 83555015a1b45b5c31db836f25fd0e603538b350) #16 pc 00000000003612c4 /lib/arm64/libpjsua2.so (BuildId: 83555015a1b45b5c31db836f25fd0e603538b350) #17 pc 000000000035e494 /lib/arm64/libpjsua2.so

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions