From 11a77d9cc877329df17df1801e003ab307a951d7 Mon Sep 17 00:00:00 2001 From: Andreas Granig Date: Wed, 22 Feb 2012 16:49:35 +0000 Subject: [PATCH] Fix lookup handling for viabranch. --- daemon/call.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/daemon/call.c b/daemon/call.c index 4007a7177..ea6d17999 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -1352,18 +1352,34 @@ fail: } char *call_lookup_udp(const char **out, struct callmaster *m) { - struct call *c; + struct call *c, *tmp; GQueue q = G_QUEUE_INIT; struct stream st; int num; char *ret; c = g_hash_table_lookup(m->callhash, out[RE_UDP_UL_CALLID]); + tmp = NULL; if (!c) { mylog(LOG_WARNING, "[%s] Got UDP LOOKUP for unknown call-id", out[RE_UDP_UL_CALLID]); asprintf(&ret, "%s 0 " IPF "\n", out[RE_UDP_COOKIE], IPP(m->ipv4)); return ret; } + while(c) { + if(g_strcmp0(out[RE_UDP_UL_VIABRANCH], c->viabranch) == 0) { + /* found viabranch (even if NULL) */ + tmp = c; + break; + } + c = c->next; + } + if (!tmp) { + mylog(LOG_WARNING, "[%s] Got UDP LOOKUP for unknown viabranch '%s' in call-id", + out[RE_UDP_UL_CALLID], VIA2STR(out[RE_UDP_UL_VIABRANCH])); + asprintf(&ret, "%s 0 " IPF "\n", out[RE_UDP_COOKIE], IPP(m->ipv4)); + return ret; + } + c = tmp; strdupfree(&c->called_agent, "UNKNOWN(udp)");