Author: mikej Date: Fri May 15 10:45:39 2009 New Revision: 13320 Log: Tue May 12 11:05:19 CDT 2009 Pekka Pessi <first.last@nokia.com> * nua: NUTAG_AUTOACK(0) is now obeyed always when media is disabled Ignore-this: c5960a8330904eae5a1428158e4498c7 If media is enabled, stack autoacks 2XX responses to re-INVITEs unless NUTAG_AUTOACK(0) is set on handle. Also documenting NUTAG_AUTOACK() behaviour with re-INVITEs. Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Fri May 15 10:45:39 2009 @@ -1 +1 @@ -Fri May 15 10:43:59 CDT 2009 +Fri May 15 10:45:11 CDT 2009 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c Fri May 15 10:45:39 2009 @@ -1108,8 +1108,9 @@ if (next_state == nua_callstate_completing) { if (NH_PGET(nh, auto_ack) || - /* Auto-ACK response to re-INVITE unless auto_ack is set to 0 */ - (ss->ss_state == nua_callstate_ready && + /* Auto-ACK response to re-INVITE when media is enabled + and auto_ack is not set to 0 on handle */ + (ss->ss_state == nua_callstate_ready && nh->nh_soa && !NH_PISSET(nh, auto_ack))) { nua_client_request_t *cru; @@ -1867,8 +1868,10 @@ /* There is an un-ACK-ed INVITE there */ assert(du->du_cr->cr_method == sip_method_invite); if (NH_PGET(nh, auto_ack) || - /* Auto-ACK response to re-INVITE unless auto_ack is set to 0 */ - (ss->ss_state == nua_callstate_ready && !NH_PISSET(nh, auto_ack))) { + /* Auto-ACK response to re-INVITE when media is enabled + and auto_ack is not set to 0 on handle */ + (ss->ss_state == nua_callstate_ready && nh->nh_soa && + !NH_PISSET(nh, auto_ack))) { /* There should be no UPDATE with offer/answer if PRACK with offer/answer was ongoing! */ if (nua_invite_client_ack(du->du_cr, NULL) > 0) @@ -3407,8 +3410,10 @@ assert(du->du_cr->cr_method == sip_method_invite); if (NH_PGET(nh, auto_ack) || - /* Auto-ACK response to re-INVITE unless auto_ack is set to 0 */ - (ss->ss_state == nua_callstate_ready && !NH_PISSET(nh, auto_ack))) { + /* Auto-ACK response to re-INVITE when media is enabled + and auto_ack is not set to 0 on handle */ + (ss->ss_state == nua_callstate_ready && nh->nh_soa && + !NH_PISSET(nh, auto_ack))) { if (nua_invite_client_ack(du->du_cr, NULL) > 0) next_state = nua_callstate_ready; else Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c Fri May 15 10:45:39 2009 @@ -1319,6 +1319,12 @@ * * Default value is NUTAG_AUTOACK(1). * + * @par Auto ACK with Re-INVITE requests + * By default, NUA tries to auto-ACK the final response to re-INVITE used to + * refresh the session when the media is enabled. Set NUTAG_AUTOACK(0) on + * the call handle (e.g., include the tag with nua_invite() or + * nua_respond()) in order to disable the auto ACK with re-INVITE. + * * Corresponding tag taking reference parameter is NUTAG_AUTOACK_REF(). */ tag_typedef_t nutag_autoack = BOOLTAG_TYPEDEF(autoACK);