diff options
Diffstat (limited to 'pjsip/src/pjsip-simple/publishc.c')
-rw-r--r-- | pjsip/src/pjsip-simple/publishc.c | 23 |
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); |