summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsip-simple/publishc.c
diff options
context:
space:
mode:
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);