summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsip-ua
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2012-06-20 10:39:05 +0000
committerLiong Sauw Ming <ming@teluu.com>2012-06-20 10:39:05 +0000
commit8f176cf7c8af5c681b7b616500b6eb32adb28887 (patch)
treeb4aba22b23c9d59115b0f190e161933c05f6d667 /pjsip/src/pjsip-ua
parent253bf3c598087e7d4b11d0c0cb3940551becfcdc (diff)
Fixed #1537: Via rewrite: putting the right IP address in Via sent-by for outgoing requests
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4173 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsip-ua')
-rw-r--r--pjsip/src/pjsip-ua/sip_reg.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/pjsip/src/pjsip-ua/sip_reg.c b/pjsip/src/pjsip-ua/sip_reg.c
index c02c17bb..2bbc81b9 100644
--- a/pjsip/src/pjsip-ua/sip_reg.c
+++ b/pjsip/src/pjsip-ua/sip_reg.c
@@ -90,6 +90,8 @@ struct pjsip_regc
pj_uint32_t delay_before_refresh;
pjsip_route_hdr route_set;
pjsip_hdr hdr_list;
+ pjsip_host_port via_addr;
+ const void *via_tp;
/* Authorization sessions. */
pjsip_auth_clt_sess auth_sess;
@@ -808,6 +810,21 @@ static void schedule_registration ( pjsip_regc *regc, pj_int32_t expiration )
}
}
+PJ_DEF(pj_status_t) pjsip_regc_set_via_sent_by( pjsip_regc *regc,
+ pjsip_host_port *via_addr,
+ pjsip_transport *via_tp)
+{
+ PJ_ASSERT_RETURN(regc, PJ_EINVAL);
+
+ if (!via_addr)
+ pj_bzero(&regc->via_addr, sizeof(regc->via_addr));
+ else
+ regc->via_addr = *via_addr;
+ regc->via_tp = via_tp;
+
+ return PJ_SUCCESS;
+}
+
PJ_DEF(pj_status_t)
pjsip_regc_set_delay_before_refresh( pjsip_regc *regc,
pj_uint32_t delay )
@@ -1262,6 +1279,12 @@ PJ_DEF(pj_status_t) pjsip_regc_send(pjsip_regc *regc, pjsip_tx_data *tdata)
*/
pjsip_tx_data_add_ref(tdata);
+ /* If via_addr is set, use this address for the Via header. */
+ if (regc->via_addr.host.slen > 0) {
+ tdata->via_addr = regc->via_addr;
+ tdata->via_tp = regc->via_tp;
+ }
+
/* Need to unlock the regc temporarily while sending the message to
* prevent deadlock (https://trac.pjsip.org/repos/ticket/1247).
* It should be safe to do this since the regc's refcount has been