Opened 11 years ago

Closed 11 years ago

#635 closed defect (fixed)

Disconnect the other call leg when multiple 2xx/OK responses to INVITE are received due to forking

Reported by: bennylp Owned by: bennylp
Priority: normal Milestone: release-1.0-rc3
Component: pjsua-lib Version: trunk
Keywords: Cc:
Backport to 1.x milestone: Backported:

Description (last modified by bennylp)

Currently when more than one 200/OK are received by UAC due to forking, the second one will be ignored since pjsua-lib doesn't support this.

A cleaner solution is to send BYE to the second call leg if the application is not able to handle multiple call leg.

Change History (2)

comment:1 Changed 11 years ago by bennylp

  • Description modified (diff)
  • Summary changed from Better handling of multiple 200/OK received by UAC due to forking to Disconnect the other call leg when multiple 2xx/OK responses to INVITE are received due to forking

comment:2 Changed 11 years ago by bennylp

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

Done in r2315:

  • Implement on_dlg_forked() of the UA layer module to create the forked dialog for the forked 2xx response. This forked dialog is only used to send BYE request for the call leg.
  • Added hangup_forked_call setting in pjsua_config to specify whether forked calls should be hung up. Default is yes. Only disable this feature for testing, since pjsua-lib doesn't support forked media.
  • Some fixes in the sip_dialog.c:
    • fixed bugs in pjsip_dlg_fork(): target and route-set are not initialized correctly from the forked response.
    • handle authentication of the request (e.g. outgoing BYE) since when no invite session is created for the dialog.
  • Some fixes in the sip_ua_layer.c:
    • ignore the response when on_dlg_forked() callback returns NULL. This could happen when forked dialog initialization fails.

Note that this changeset depends on r2314 which fixed a bug in pjsip_auth_clt_clone()

Note: See TracTickets for help on using tickets.