summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsip-simple/publishc.c
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-simple/publishc.c
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-simple/publishc.c')
-rw-r--r--pjsip/src/pjsip-simple/publishc.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/pjsip/src/pjsip-simple/publishc.c b/pjsip/src/pjsip-simple/publishc.c
index d70442bb..6282923c 100644
--- a/pjsip/src/pjsip-simple/publishc.c
+++ b/pjsip/src/pjsip-simple/publishc.c
@@ -94,6 +94,8 @@ struct pjsip_publishc
pj_uint32_t expires;
pjsip_route_hdr route_set;
pjsip_hdr usr_hdr;
+ pjsip_host_port via_addr;
+ const void *via_tp;
/* Authorization sessions. */
pjsip_auth_clt_sess auth_sess;
@@ -345,6 +347,21 @@ PJ_DEF(pj_status_t) pjsip_publishc_set_headers( pjsip_publishc *pubc,
return PJ_SUCCESS;
}
+PJ_DEF(pj_status_t) pjsip_publishc_set_via_sent_by(pjsip_publishc *pubc,
+ pjsip_host_port *via_addr,
+ pjsip_transport *via_tp)
+{
+ PJ_ASSERT_RETURN(pubc, PJ_EINVAL);
+
+ if (!via_addr)
+ pj_bzero(&pubc->via_addr, sizeof(pubc->via_addr));
+ else
+ pubc->via_addr = *via_addr;
+ pubc->via_tp = via_tp;
+
+ return PJ_SUCCESS;
+}
+
static pj_status_t create_request(pjsip_publishc *pubc,
pjsip_tx_data **p_tdata)
{
@@ -739,6 +756,12 @@ PJ_DEF(pj_status_t) pjsip_publishc_send(pjsip_publishc *pubc,
}
pj_mutex_unlock(pubc->mutex);
+ /* If via_addr is set, use this address for the Via header. */
+ if (pubc->via_addr.host.slen > 0) {
+ tdata->via_addr = pubc->via_addr;
+ tdata->via_tp = pubc->via_tp;
+ }
+
/* Invalidate message buffer. */
pjsip_tx_data_invalidate_msg(tdata);