From d4547e6151c420c4e579d52e47d2c10d47958dc6 Mon Sep 17 00:00:00 2001 From: Andrey Volk Date: Sat, 1 Aug 2020 02:09:50 +0400 Subject: [PATCH] [Sofia-Sip] Add various accessors and helpers to nua. --- libs/sofia-sip/.update | 2 +- libs/sofia-sip/libsofia-sip-ua/nua/nua.c | 63 ++++++++++++++++++- .../libsofia-sip-ua/nua/sofia-sip/nua.h | 14 +++++ 3 files changed, 77 insertions(+), 2 deletions(-) diff --git a/libs/sofia-sip/.update b/libs/sofia-sip/.update index f2ecef0016..67ed62e0fe 100644 --- a/libs/sofia-sip/.update +++ b/libs/sofia-sip/.update @@ -1 +1 @@ -Tue May 12 18:04:14 UTC 2020 +Fri Jul 31 17:46:57 CDT 2020 diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/nua.c b/libs/sofia-sip/libsofia-sip-ua/nua/nua.c index 451cebb134..fdeac3cad9 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/nua.c +++ b/libs/sofia-sip/libsofia-sip-ua/nua/nua.c @@ -234,10 +234,14 @@ void nua_destroy(nua_t *nua) #if HAVE_SMIME /* Start NRC Boston */ sm_destroy(nua->sm); #endif /* End NRC Boston */ - su_home_unref(nua->nua_home); + nua_unref(nua); } } +void nua_unref(nua_t *nua) { + if (nua) su_home_unref(nua->nua_home); +} + /** Fetch callback context from nua. * * @param nua Pointer to @nua stack object @@ -1089,3 +1093,60 @@ nua_handle_t *nua_handle_by_call_id(nua_t *nua, const char *call_id) } return NULL; } + +/** Get leg from dialog. */ +const nta_leg_t *nua_get_dialog_state_leg(nua_handle_t *nh) +{ + if (nh && nh->nh_ds) + return nh->nh_ds->ds_leg; + else + return NULL; +} + +/** Get su_home_t from nua handle. */ +su_home_t *nua_handle_get_home(nua_handle_t *nh) +{ + if (nh && nh->nh_home) + return nh->nh_home; + else + return NULL; +} + +/** Get su_home_t from nua. */ +su_home_t *nua_get_home(nua_t *nua) +{ + if (nua && nua->nua_home) + return nua->nua_home; + else + return NULL; +} + +/** Get nta_agent_t from nua. */ +nta_agent_t *nua_get_agent(nua_t *nua) +{ + if (nua && nua->nua_nta) + return nua->nua_nta; + else + return NULL; +} + +/** Set has invite of a nua handle */ +void nua_handle_set_has_invite(nua_handle_t *nh, unsigned val) +{ + if (nh) + nh->nh_has_invite = val; +} + +/** Check if nua handle is destroyed */ +unsigned nua_handle_is_destroyed(nua_handle_t *nh) +{ + assert(nh); + return nh->nh_destroyed; +} + +void nua_handle_dialog_usage_set_refresh_range(nua_handle_t *nh, + unsigned min, unsigned max) { + if (nh && nh->nh_ds && nh->nh_ds->ds_usage) { + nua_dialog_usage_set_refresh_range(nh->nh_ds->ds_usage, min, max); + } +} \ No newline at end of file diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua.h b/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua.h index 37b7667792..5a698359cb 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua.h +++ b/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua.h @@ -47,6 +47,10 @@ #include #endif +#ifndef NTA_H +#include +#endif + #ifndef NUA_TAG_H #include #endif @@ -386,6 +390,16 @@ SOFIAPUBFUN nua_handle_t *nua_handle_by_replaces(nua_t *nua, nua_handle_t *nua_handle_by_call_id(nua_t *nua, const char *call_id); +SOFIAPUBFUN const nta_leg_t *nua_get_dialog_state_leg(nua_handle_t *nh); +SOFIAPUBFUN su_home_t *nua_handle_get_home(nua_handle_t *nh); +SOFIAPUBFUN void nua_unref(nua_t *nua); +SOFIAPUBFUN su_home_t *nua_get_home(nua_t *nua); +SOFIAPUBFUN nta_agent_t *nua_get_agent(nua_t *nua); +SOFIAPUBFUN void nua_handle_set_has_invite(nua_handle_t *nh, unsigned val); +SOFIAPUBFUN unsigned nua_handle_is_destroyed(nua_handle_t *nh); +SOFIAPUBFUN void nua_handle_dialog_usage_set_refresh_range(nua_handle_t *nh, + unsigned min, unsigned max); + SOFIA_END_DECLS #endif