Ticket #2008 (closed defect: fixed)

Opened 6 months ago

Last modified 4 months ago

iOS specific issue: Error 488 when answering call after app goes background

Reported by: nanang Owned by: bennylp
Priority: normal Milestone: release-2.7
Component: pjnath Version: trunk
Keywords: Cc:
Backport to 1.x milestone: Backported: no

Description

Reproducing steps:

  • Call from device A to device B.
  • When device B starts ringing, wait until display goes off so the running application is switched to background after a while.
  • Then unlock device B and try answering the call. Error 488 is returned on device B, call fails.

Log:

17:01:43.099 utsx0x128ac32e  .....STUN client transaction created
17:01:43.099 utsx0x128ac32e  .....STUN sending message (transmit count=1)
17:01:43.099 udprel0x12804f  ......socket send(): Destination address required
17:01:43.099 utsx0x128ac32e  ......STUN error sending message: Destination address required
17:01:43.099 stun_session.c  .....tdata 0x128ac30a8 destroy request, force=0, tsx=0x128ac32ec
17:01:43.099 utsx0x128ac32e  .....STUN transaction 0x128ac32ec schedule destroy
17:01:43.099 udprel0x12804f  .....Error sending STUN request: Destination address required
17:01:43.099        icetp00  ....Destroying ICE session 0x1281b1828
17:01:43.099 stuse0x1281320  ....STUN session 0x128132428 destroy request, ref_cnt=25
17:01:43.099 stuse0x1280c50  ....STUN session 0x1280c5428 destroy request, ref_cnt=24
17:01:43.099        icetp00  ....ICE restart failed (status=120039)!
17:01:43.099  pjsua_media.c  ....pjmedia_transport_media_start() failed for call_id 2 media 0: Destination address required

TURN socket (UDP) is somehow in a bad state after a while of ringing in the background mode (see also #1107 and #1225). Unfortunately TURN socket uses only pj_activesock_send() which is not equipped with UDP socket replacement procedure (while pj_activesock_sendto() is). In this case, the attempt of sending with the bad state UDP socket fails with EDESTADDRREQ. After testing using pj_activesock_sendto(), the issue seems to disappear.

Thanks Dusan Klinec for the report, the analysis and the patch (and sorry, somehow we missed the bug report). Thanks Ryan Callens for re-reporting and pointing this out.

Change History

comment:1 Changed 6 months ago by nanang

  • Component changed from applications to pjnath
  • Milestone set to release-2.7

comment:2 Changed 6 months ago by nanang

  • Status changed from new to closed
  • Resolution set to fixed

In 5578:

Fixed #2008: Updated TURN socket to use pj_activesock_sendto() for UDP connection (was always using pj_activesock_send()).

comment:3 Changed 4 months ago by ming

In 5596:

Re #2008: Fixed error "Socket is already connected" when trying to connect to TURN server using the above patch

Note: See TracTickets for help on using tickets.