diff options
author | Kevin Harwell <kharwell@digium.com> | 2013-09-27 18:28:41 +0000 |
---|---|---|
committer | Kevin Harwell <kharwell@digium.com> | 2013-09-27 18:28:41 +0000 |
commit | d6bceb035019a3df16a3b71da6e855ea249c94a5 (patch) | |
tree | 026f75862cd4ef54733b72018d6ac587037e4330 /res/res_pjsip.c | |
parent | 7e2a72771dbd538d8c72865406ca5aabb883d9d9 (diff) |
res_pjsip: crash when using localnet and external_signaling_address options
There was a collision of mod_data use on the transaction between using a nat
hook and an session response callback. During state change it was assumed
what was in the mod_data was nothing or the response callback. However, it
was possible for it to also contain a nat hook thus resulting in a bad cast
and a crash.
Added the ability to store multiple data elements in mod_data via a hash table.
In this instance, mod_data now stores a hash table of the two values that can
be retrieved using an associated string key.
(closes issue ASTERISK-22394)
Reported by: Rusty Newton
Review: https://reviewboard.asterisk.org/r/2843/
........
Merged revisions 399990 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@399991 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res/res_pjsip.c')
-rw-r--r-- | res/res_pjsip.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/res/res_pjsip.c b/res/res_pjsip.c index eab9b1403..c102803a2 100644 --- a/res/res_pjsip.c +++ b/res/res_pjsip.c @@ -1836,6 +1836,29 @@ int ast_sip_thread_is_servant(void) return *servant_id == SIP_SERVANT_ID; } +void *ast_sip_dict_get(void *ht, const char *key) +{ + unsigned int hval; + + if (!ht) { + return NULL; + } + + return pj_hash_get(ht, key, PJ_HASH_KEY_STRING, &hval); +} + +void *ast_sip_dict_set(pj_pool_t* pool, void *ht, + const char *key, void *val) +{ + if (!ht) { + ht = pj_hash_create(pool, 11); + } + + pj_hash_set(pool, ht, key, PJ_HASH_KEY_STRING, 0, val); + + return ht; +} + static void remove_request_headers(pjsip_endpoint *endpt) { const pjsip_hdr *request_headers = pjsip_endpt_get_request_headers(endpt); |