12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #include "uri_ops.h"
- #include "../../id.h"
- #include "../../parser/parse_from.h"
- #include <cds/sstr.h>
- #include <stdio.h>
- 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;
- }
|