Ignore:
Timestamp:
Dec 6, 2016 11:23:39 AM (4 years ago)
Author:
ming
Message:

Fixed #1983: Add option to update call Via address

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_call.c

    r5492 r5493  
    570570{ 
    571571    opt->flag &= ~(PJSUA_CALL_UNHOLD | PJSUA_CALL_UPDATE_CONTACT | 
    572                    PJSUA_CALL_NO_SDP_OFFER | PJSUA_CALL_REINIT_MEDIA); 
     572                   PJSUA_CALL_NO_SDP_OFFER | PJSUA_CALL_REINIT_MEDIA | 
     573                   PJSUA_CALL_UPDATE_VIA); 
    573574} 
    574575 
     
    637638 
    638639    return PJ_SUCCESS; 
     640} 
     641 
     642static void dlg_set_via(pjsip_dialog *dlg, pjsua_acc *acc) 
     643{ 
     644    if (acc->cfg.allow_via_rewrite && acc->via_addr.host.slen > 0) { 
     645        pjsip_dlg_set_via_sent_by(dlg, &acc->via_addr, acc->via_tp); 
     646    } else if (!pjsua_sip_acc_is_using_stun(acc->index)) { 
     647        /* Choose local interface to use in Via if acc is not using 
     648         * STUN. See https://trac.pjsip.org/repos/ticket/1804 
     649         */ 
     650        pjsip_host_port via_addr; 
     651        const void *via_tp; 
     652 
     653        if (pjsua_acc_get_uac_addr(acc->index, dlg->pool, &acc->cfg.id, 
     654                                   &via_addr, NULL, NULL, 
     655                                   &via_tp) == PJ_SUCCESS) 
     656        { 
     657            pjsip_dlg_set_via_sent_by(dlg, &via_addr, 
     658                                      (pjsip_transport*)via_tp); 
     659        } 
     660    } 
    639661} 
    640662 
     
    778800    pjsip_dlg_inc_lock(dlg); 
    779801 
    780     if (acc->cfg.allow_via_rewrite && acc->via_addr.host.slen > 0) { 
    781         pjsip_dlg_set_via_sent_by(dlg, &acc->via_addr, acc->via_tp); 
    782     } else if (!pjsua_sip_acc_is_using_stun(acc_id)) { 
    783         /* Choose local interface to use in Via if acc is not using 
    784          * STUN. See https://trac.pjsip.org/repos/ticket/1804 
    785          */ 
    786         pjsip_host_port via_addr; 
    787         const void *via_tp; 
    788  
    789         if (pjsua_acc_get_uac_addr(acc_id, dlg->pool, &acc->cfg.id, 
    790                                    &via_addr, NULL, NULL, 
    791                                    &via_tp) == PJ_SUCCESS) 
    792         { 
    793             pjsip_dlg_set_via_sent_by(dlg, &via_addr, 
    794                                       (pjsip_transport*)via_tp); 
    795         } 
    796     } 
     802    dlg_set_via(dlg, acc); 
    797803 
    798804    /* Calculate call's secure level */ 
     
    25002506    } 
    25012507 
     2508    if ((options & PJSUA_CALL_UPDATE_VIA) && 
     2509        pjsua_acc_is_valid(call->acc_id)) 
     2510    { 
     2511        dlg_set_via(call->inv->dlg, &pjsua_var.acc[call->acc_id]); 
     2512    } 
     2513 
    25022514    /* Create re-INVITE with new offer */ 
    25032515    status = pjsip_inv_reinvite( call->inv, new_contact, sdp, &tdata); 
     
    26212633    } 
    26222634 
     2635    if ((call->opt.flag & PJSUA_CALL_UPDATE_VIA) && 
     2636        pjsua_acc_is_valid(call->acc_id)) 
     2637    { 
     2638        dlg_set_via(call->inv->dlg, &pjsua_var.acc[call->acc_id]); 
     2639    } 
     2640 
    26232641    /* Create re-INVITE with new offer */ 
    26242642    status = pjsip_inv_reinvite( call->inv, new_contact, sdp, &tdata); 
     
    27282746    { 
    27292747        new_contact = &pjsua_var.acc[call->acc_id].contact; 
     2748    } 
     2749 
     2750    if ((call->opt.flag & PJSUA_CALL_UPDATE_VIA) && 
     2751        pjsua_acc_is_valid(call->acc_id)) 
     2752    { 
     2753        dlg_set_via(call->inv->dlg, &pjsua_var.acc[call->acc_id]); 
    27302754    } 
    27312755 
Note: See TracChangeset for help on using the changeset viewer.