[Freeswitch-svn] [commit] r6612 - freeswitch/trunk/src/mod/endpoints/mod_sofia
Freeswitch SVN
anthm at freeswitch.org
Mon Dec 10 18:48:54 EST 2007
Author: anthm
Date: Mon Dec 10 18:48:54 2007
New Revision: 6612
Modified:
freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c
Log:
make sofia use domain wide params when needed for reg
Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c (original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c Mon Dec 10 18:48:54 2007
@@ -748,7 +748,7 @@
const char *a1_hash = NULL;
char *sql;
char *mailbox = NULL;
- switch_xml_t domain, xml = NULL, user, param, xparams;
+ switch_xml_t domain, xml = NULL, user, param, uparams, dparams;
char hexdigest[2 * SU_MD5_DIGEST_SIZE + 1] = "";
char *pbuf = NULL;
char *domain_name = NULL;
@@ -834,31 +834,51 @@
goto end;
}
- if (!(xparams = switch_xml_child(user, "params"))) {
- ret = AUTH_OK;
- goto end;
- }
-
if (!(mailbox = (char *)switch_xml_attr(user, "mailbox"))) {
mailbox = username;
}
- for (param = switch_xml_child(xparams, "param"); param; param = param->next) {
- const char *var = switch_xml_attr_soft(param, "name");
- const char *val = switch_xml_attr_soft(param, "value");
-
- if (!strcasecmp(var, "password")) {
- passwd = val;
+ dparams = switch_xml_child(domain, "params");
+ uparams = switch_xml_child(user, "params");
+
+ if (!(dparams && uparams)) {
+ ret = AUTH_OK;
+ goto skip_auth;
+ }
+
+ if (dparams) {
+ for (param = switch_xml_child(dparams, "param"); param; param = param->next) {
+ const char *var = switch_xml_attr_soft(param, "name");
+ const char *val = switch_xml_attr_soft(param, "value");
+
+ if (!strcasecmp(var, "password")) {
+ passwd = val;
+ }
+
+ if (!strcasecmp(var, "a1-hash")) {
+ a1_hash = val;
+ }
}
-
- if (!strcasecmp(var, "a1-hash")) {
- a1_hash = val;
+ }
+
+ if (uparams) {
+ for (param = switch_xml_child(uparams, "param"); param; param = param->next) {
+ const char *var = switch_xml_attr_soft(param, "name");
+ const char *val = switch_xml_attr_soft(param, "value");
+
+ if (!strcasecmp(var, "password")) {
+ passwd = val;
+ }
+
+ if (!strcasecmp(var, "a1-hash")) {
+ a1_hash = val;
+ }
}
}
if (switch_strlen_zero(passwd) && switch_strlen_zero(a1_hash)) {
ret = AUTH_OK;
- goto end;
+ goto skip_auth;
}
if (!a1_hash) {
@@ -908,11 +928,16 @@
}
}
+ skip_auth:
+
if (first && ret == AUTH_OK) {
if (v_event) {
switch_event_create(v_event, SWITCH_EVENT_MESSAGE);
}
if (v_event && *v_event) {
+ switch_xml_t xparams[2];
+ int i = 0;
+
switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, "sip_mailbox", "%s", mailbox);
switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, "sip_auth_username", "%s", username);
switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, "sip_auth_realm", "%s", realm);
@@ -920,26 +945,59 @@
switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, "user_name", "%s", username);
switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, "domain_name", "%s", realm);
- if ((xparams = switch_xml_child(user, "variables"))) {
- for (param = switch_xml_child(xparams, "variable"); param; param = param->next) {
- const char *var = switch_xml_attr_soft(param, "name");
- const char *val = switch_xml_attr_soft(param, "value");
- sofia_gateway_t *gateway_ptr = NULL;
+ if ((dparams = switch_xml_child(domain, "variables"))) {
+ xparams[i++] = dparams;
+ }
- if (!switch_strlen_zero(var) && !switch_strlen_zero(val)) {
- switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, var, "%s", val);
+ if ((uparams = switch_xml_child(user, "variables"))) {
+ xparams[i++] = uparams;
+ }
+
+ if (dparams || uparams) {
+ int j = 0;
+
+ for (j = 0; j < i; j++) {
+ for (param = switch_xml_child(xparams[j], "variable"); param; param = param->next) {
+ const char *var = switch_xml_attr_soft(param, "name");
+ const char *val = switch_xml_attr_soft(param, "value");
+ sofia_gateway_t *gateway_ptr = NULL;
+
+ if (!switch_strlen_zero(var) && !switch_strlen_zero(val)) {
+ switch_event_add_header(*v_event, SWITCH_STACK_BOTTOM, var, "%s", val);
- if (!strcasecmp(var, "register-gateway")) {
- if (!strcasecmp(val, "all")) {
- switch_xml_t gateways_tag, gateway_tag;
- if ((gateways_tag = switch_xml_child(user, "gateways"))) {
- for (gateway_tag = switch_xml_child(gateways_tag, "gateway"); gateway_tag; gateway_tag = gateway_tag->next) {
- char *name = (char *) switch_xml_attr_soft(gateway_tag, "name");
- if (switch_strlen_zero(name)) {
- name = "anonymous";
- }
+ if (!strcasecmp(var, "register-gateway")) {
+ if (!strcasecmp(val, "all")) {
+ switch_xml_t gateways_tag, gateway_tag;
+ if ((gateways_tag = switch_xml_child(user, "gateways"))) {
+ for (gateway_tag = switch_xml_child(gateways_tag, "gateway"); gateway_tag; gateway_tag = gateway_tag->next) {
+ char *name = (char *) switch_xml_attr_soft(gateway_tag, "name");
+ if (switch_strlen_zero(name)) {
+ name = "anonymous";
+ }
- if ((gateway_ptr = sofia_reg_find_gateway(name))) {
+ if ((gateway_ptr = sofia_reg_find_gateway(name))) {
+ gateway_ptr->retry = 0;
+ if (exptime) {
+ gateway_ptr->state = REG_STATE_UNREGED;
+ } else {
+ gateway_ptr->state = REG_STATE_UNREGISTER;
+ }
+ sofia_reg_release_gateway(gateway_ptr);
+ }
+
+ }
+ }
+ } else {
+ int x, argc;
+ char *mydata, *argv[50];
+
+ mydata = strdup(val);
+ assert(mydata != NULL);
+
+ argc = switch_separate_string(mydata, ',', argv, (sizeof(argv) / sizeof(argv[0])));
+
+ for (x = 0; x < argc; x++) {
+ if ((gateway_ptr = sofia_reg_find_gateway((char *)argv[x]))) {
gateway_ptr->retry = 0;
if (exptime) {
gateway_ptr->state = REG_STATE_UNREGED;
@@ -947,34 +1005,13 @@
gateway_ptr->state = REG_STATE_UNREGISTER;
}
sofia_reg_release_gateway(gateway_ptr);
- }
-
- }
- }
- } else {
- int x, argc;
- char *mydata, *argv[50];
-
- mydata = strdup(val);
- assert(mydata != NULL);
-
- argc = switch_separate_string(mydata, ',', argv, (sizeof(argv) / sizeof(argv[0])));
-
- for (x = 0; x < argc; x++) {
- if ((gateway_ptr = sofia_reg_find_gateway((char *)argv[x]))) {
- gateway_ptr->retry = 0;
- if (exptime) {
- gateway_ptr->state = REG_STATE_UNREGED;
} else {
- gateway_ptr->state = REG_STATE_UNREGISTER;
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Gateway '%s' not found.\n", argv[x]);
}
- sofia_reg_release_gateway(gateway_ptr);
- } else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Gateway '%s' not found.\n", argv[x]);
}
- }
- free(mydata);
+ free(mydata);
+ }
}
}
}
@@ -982,7 +1019,6 @@
}
}
}
-
end:
if (xml) {
switch_xml_free(xml);
More information about the Freeswitch-svn
mailing list