diff options
author | Liong Sauw Ming <ming@teluu.com> | 2016-10-07 08:41:55 +0000 |
---|---|---|
committer | Liong Sauw Ming <ming@teluu.com> | 2016-10-07 08:41:55 +0000 |
commit | ed1e39fc77252282e4c7e4140bb40fe20c9469a6 (patch) | |
tree | fe9ff75bc2b872c79775227843a9ef8fe1564a65 | |
parent | e9389f9490b5a50b35c85756d89a3a9c59fa01eb (diff) |
Fixed #1967: Add function pjsip_tdata_get_dlg
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5456 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r-- | pjsip/include/pjsip/sip_dialog.h | 10 | ||||
-rw-r--r-- | pjsip/src/pjsip/sip_dialog.c | 9 | ||||
-rw-r--r-- | pjsip/src/pjsip/sip_ua_layer.c | 5 |
3 files changed, 24 insertions, 0 deletions
diff --git a/pjsip/include/pjsip/sip_dialog.h b/pjsip/include/pjsip/sip_dialog.h index 7f68476c..f56a60e1 100644 --- a/pjsip/include/pjsip/sip_dialog.h +++ b/pjsip/include/pjsip/sip_dialog.h @@ -557,6 +557,16 @@ PJ_DECL(void) pjsip_dlg_dec_lock( pjsip_dialog *dlg ); PJ_DECL(pjsip_dialog*) pjsip_rdata_get_dlg( pjsip_rx_data *rdata ); /** + * Get the dialog instance for the outgoing tdata. Returns NULL if the message + * wasn't sent from a dialog. + * + * @param tdata Outgoing message buffer. + * + * @return The dialog instance that "owns" the message. + */ +PJ_DECL(pjsip_dialog*) pjsip_tdata_get_dlg( pjsip_tx_data *tdata ); + +/** * Get the associated dialog for the specified transaction, if any. * * @param tsx The transaction. diff --git a/pjsip/src/pjsip/sip_dialog.c b/pjsip/src/pjsip/sip_dialog.c index 421ddc41..c83f2e92 100644 --- a/pjsip/src/pjsip/sip_dialog.c +++ b/pjsip/src/pjsip/sip_dialog.c @@ -1124,6 +1124,9 @@ static pj_status_t dlg_create_request_throw( pjsip_dialog *dlg, if (status != PJ_SUCCESS) return status; + /* Put this dialog in tdata's mod_data */ + tdata->mod_data[dlg->ua->id] = dlg; + /* Just copy dialog route-set to Route header. * The transaction will do the processing as specified in Section 12.2.1 * of RFC 3261 in function tsx_process_route() in sip_transaction.c. @@ -1224,6 +1227,9 @@ PJ_DEF(pj_status_t) pjsip_dlg_send_request( pjsip_dialog *dlg, /* Lock and increment session */ pjsip_dlg_inc_lock(dlg); + /* Put this dialog in tdata's mod_data */ + tdata->mod_data[dlg->ua->id] = dlg; + /* If via_addr is set, use this address for the Via header. */ if (dlg->via_addr.host.slen > 0) { tdata->via_addr = dlg->via_addr; @@ -1406,6 +1412,9 @@ PJ_DEF(pj_status_t) pjsip_dlg_create_response( pjsip_dialog *dlg, /* Lock the dialog. */ pjsip_dlg_inc_lock(dlg); + /* Put this dialog in tdata's mod_data */ + tdata->mod_data[dlg->ua->id] = dlg; + dlg_beautify_response(dlg, PJ_FALSE, st_code, tdata); /* Unlock the dialog. */ diff --git a/pjsip/src/pjsip/sip_ua_layer.c b/pjsip/src/pjsip/sip_ua_layer.c index 7b6c11b5..2cc55343 100644 --- a/pjsip/src/pjsip/sip_ua_layer.c +++ b/pjsip/src/pjsip/sip_ua_layer.c @@ -412,6 +412,11 @@ PJ_DEF(pjsip_dialog*) pjsip_rdata_get_dlg( pjsip_rx_data *rdata ) return (pjsip_dialog*) rdata->endpt_info.mod_data[mod_ua.mod.id]; } +PJ_DEF(pjsip_dialog*) pjsip_tdata_get_dlg( pjsip_tx_data *tdata ) +{ + return (pjsip_dialog*) tdata->mod_data[mod_ua.mod.id]; +} + PJ_DEF(pjsip_dialog*) pjsip_tsx_get_dlg( pjsip_transaction *tsx ) { return (pjsip_dialog*) tsx->mod_data[mod_ua.mod.id]; |