summaryrefslogtreecommitdiff
path: root/res/res_pjsip.c
diff options
context:
space:
mode:
authorKevin Harwell <kharwell@digium.com>2013-09-27 18:28:41 +0000
committerKevin Harwell <kharwell@digium.com>2013-09-27 18:28:41 +0000
commitd6bceb035019a3df16a3b71da6e855ea249c94a5 (patch)
tree026f75862cd4ef54733b72018d6ac587037e4330 /res/res_pjsip.c
parent7e2a72771dbd538d8c72865406ca5aabb883d9d9 (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.c23
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);