diff options
author | Benny Prijono <bennylp@teluu.com> | 2007-10-04 09:48:25 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2007-10-04 09:48:25 +0000 |
commit | 5a17c9a249ae2804b3b0ae558a0a63275ef14259 (patch) | |
tree | 873830ecbe756906a3bb7909b443244b29f51657 /pjsip/src/pjsip-ua/sip_reg.c | |
parent | 3e7fd859b0c02776768f4ef1649a06929918fbe3 (diff) |
Ticket #390: Register session will keep transport instance so that keep-alive is sent
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1472 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsip-ua/sip_reg.c')
-rw-r--r-- | pjsip/src/pjsip-ua/sip_reg.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/pjsip/src/pjsip-ua/sip_reg.c b/pjsip/src/pjsip-ua/sip_reg.c index bbabf0c5..7e061537 100644 --- a/pjsip/src/pjsip-ua/sip_reg.c +++ b/pjsip/src/pjsip-ua/sip_reg.c @@ -84,6 +84,11 @@ struct pjsip_regc /* Transport selector */ pjsip_tpselector tp_sel; + + /* Last transport used. We acquire the transport to keep + * it open. + */ + pjsip_transport *last_transport; }; @@ -133,6 +138,10 @@ PJ_DEF(pj_status_t) pjsip_regc_destroy(pjsip_regc *regc) regc->cb = NULL; } else { pjsip_tpselector_dec_ref(®c->tp_sel); + if (regc->last_transport) { + pjsip_transport_dec_ref(regc->last_transport); + regc->last_transport = NULL; + } pjsip_endpt_release_pool(regc->endpt, regc->pool); } @@ -609,6 +618,19 @@ static void tsx_callback(void *token, pjsip_event *event) pj_assert(regc->has_tsx); regc->has_tsx = PJ_FALSE; + /* Add reference to the transport */ + if (tsx->transport != regc->last_transport) { + if (regc->last_transport) { + pjsip_transport_dec_ref(regc->last_transport); + regc->last_transport = NULL; + } + + if (tsx->transport) { + regc->last_transport = tsx->transport; + pjsip_transport_add_ref(regc->last_transport); + } + } + /* Handle 401/407 challenge (even when _delete_flag is set) */ if (tsx->status_code == PJSIP_SC_PROXY_AUTHENTICATION_REQUIRED || tsx->status_code == PJSIP_SC_UNAUTHORIZED) |