#include "uri_ops.h" #include "../../id.h" #include "../../parser/parse_from.h" #include #include int is_simple_rls_target(struct sip_msg *m, char *_template, char *unused) { str from_uid; struct sip_uri furi, turi; str from_uri, to_uri; str tmp; static str sample = STR_STATIC_INIT("$uid"); static str templ; int res = 1; PROF_START(rls_is_simple_rls_target) if (get_from_uid(&from_uid, m) < 0) { ERR("can't get From UID\n"); PROF_STOP(rls_is_simple_rls_target) return -1; } if (_template) { templ.s = _template; templ.len = strlen(_template); } else { templ.s = NULL; templ.len = 0; } from_uri = get_from(m)->uri; to_uri = get_to(m)->uri; if (parse_uri(from_uri.s, from_uri.len, &furi) < 0) { LOG(L_ERR, "Error while parsing From URI\n"); PROF_STOP(rls_is_simple_rls_target) return -1; } if (parse_uri(to_uri.s, to_uri.len, &turi) < 0) { LOG(L_ERR, "Error while parsing To URI\n"); PROF_STOP(rls_is_simple_rls_target) return -1; } /* compare domains */ if (str_nocase_equals(&turi.host, &furi.host) != 0) { /* not equal */ DBG("different domains\n"); PROF_STOP(rls_is_simple_rls_target) return -1; } /* compare usernames */ if (replace_str(&templ, &tmp, &sample, &from_uid) < 0) { ERR("can't allocate memory\n"); PROF_STOP(rls_is_simple_rls_target) return -1; } if (str_nocase_equals(&turi.user, &tmp) != 0) { /* not equal */ DBG("template doesn't match\n"); res = -1; } str_free_content(&tmp); PROF_STOP(rls_is_simple_rls_target) return res; }