From bca25d77003a21aa8ef9b690ae07ed023d8e25cc Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 17 Jan 2013 11:13:17 -0500 Subject: [PATCH] make call_lookup_udp() remember viabranches like call_update_udp() --- daemon/call.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/daemon/call.c b/daemon/call.c index a0052c9..ac2cb90 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -1591,7 +1591,7 @@ restart: rwlock_unlock_r(&m->hashlock); } - if (viabranch && !g_hash_table_lookup(c->branches, viabranch)) + if (viabranch && *viabranch && !g_hash_table_lookup(c->branches, viabranch)) g_hash_table_insert(c->branches, call_strdup(c, viabranch), (void *) 0x1); @@ -1688,31 +1688,29 @@ char *call_lookup_udp(const char **out, struct callmaster *m) { struct stream st; int num; char *ret; + const char *branch; rwlock_lock_r(&m->hashlock); c = g_hash_table_lookup(m->callhash, out[RE_UDP_UL_CALLID]); if (c) mutex_lock(&c->lock); - else - goto not_found; - - if (!out[RE_UDP_UL_VIABRANCH] || !*out[RE_UDP_UL_VIABRANCH]) - goto skip_branch; - - if (!g_hash_table_lookup(c->branches, out[RE_UDP_UL_VIABRANCH])) { - mutex_unlock(&c->lock); -not_found: + else { rwlock_unlock_r(&m->hashlock); mylog(LOG_WARNING, LOG_PREFIX_CI "Got UDP LOOKUP for unknown call-id or unknown via-branch", out[RE_UDP_UL_CALLID], out[RE_UDP_UL_VIABRANCH]); xasprintf(&ret, "%s 0 " IPF "\n", out[RE_UDP_COOKIE], IPP(m->conf.ipv4)); return ret; } -skip_branch: + obj_hold(c); rwlock_unlock_r(&m->hashlock); - log_info = out[RE_UDP_UL_VIABRANCH]; + branch = out[RE_UDP_UL_VIABRANCH]; + if (branch && *branch && !g_hash_table_lookup(c->branches, branch)) + g_hash_table_insert(c->branches, call_strdup(c, branch), + (void *) 0x1); + + log_info = branch; c->called_agent = "UNKNOWN(udp)"; if (addr_parse_udp(&st, out))