[Freeswitch-svn] [commit] r10650 - in freeswitch/trunk/scripts/contrib/intralanman/C/lcr: . mod_lcr
FreeSWITCH SVN
intralanman at freeswitch.org
Sun Dec 7 21:33:40 PST 2008
Author: intralanman
Date: Mon Dec 8 00:33:39 2008
New Revision: 10650
Log:
update to allow secondary order by
Modified:
freeswitch/trunk/scripts/contrib/intralanman/C/lcr/lcr.conf.xml
freeswitch/trunk/scripts/contrib/intralanman/C/lcr/mod_lcr/mod_lcr.c
Modified: freeswitch/trunk/scripts/contrib/intralanman/C/lcr/lcr.conf.xml
==============================================================================
--- freeswitch/trunk/scripts/contrib/intralanman/C/lcr/lcr.conf.xml (original)
+++ freeswitch/trunk/scripts/contrib/intralanman/C/lcr/lcr.conf.xml Mon Dec 8 00:33:39 2008
@@ -6,15 +6,15 @@
<profiles>
<profile name="default">
<param name="id" value="0"/>
- <param name="order_by" value="rate"/>
+ <param name="order_by" value="rate,quality,reliability"/>
</profile>
- <profile name="quality">
+ <profile name="qual_rel">
<param name="id" value="1"/>
- <param name="order_by" value="quality"/>
+ <param name="order_by" value="quality,reliability"/>
</profile>
- <profile name="reliability">
+ <profile name="rel_qual">
<param name="id" value="2"/>
- <param name="order_by" value="reliability"/>
+ <param name="order_by" value="reliability,quality"/>
</profile>
</profiles>
</configuration>
Modified: freeswitch/trunk/scripts/contrib/intralanman/C/lcr/mod_lcr/mod_lcr.c
==============================================================================
--- freeswitch/trunk/scripts/contrib/intralanman/C/lcr/mod_lcr/mod_lcr.c (original)
+++ freeswitch/trunk/scripts/contrib/intralanman/C/lcr/mod_lcr/mod_lcr.c Mon Dec 8 00:33:39 2008
@@ -339,7 +339,7 @@
if(profile->id > 0) {
sql_stream.write_function(&sql_stream, "AND lcr_profile=%d ", profile->id);
}
- sql_stream.write_function(&sql_stream, "ORDER BY digits DESC, %s", profile->order_by);
+ sql_stream.write_function(&sql_stream, "ORDER BY digits DESC%s", profile->order_by);
if(db_random) {
sql_stream.write_function(&sql_stream, ", %s", db_random);
}
@@ -392,16 +392,19 @@
/* define default profile */
profile = switch_core_alloc(globals.pool, sizeof(*profile));
profile->name = "global_default";
- profile->order_by = "rate";
+ profile->order_by = ", rate";
globals.default_profile = profile;
switch_core_hash_init(&globals.profile_hash, globals.pool);
if((x_profiles = switch_xml_child(cfg, "profiles"))) {
for (x_profile = switch_xml_child(x_profiles, "profile"); x_profile; x_profile = x_profile->next) {
char *name = (char *) switch_xml_attr_soft(x_profile, "name");
- char *order_by = NULL;
+ switch_stream_handle_t order_by = { 0 };
char *id_s = NULL;
+ int argc, x = 0;
+ char *argv[4] = { 0 };
+ SWITCH_STANDARD_STREAM(order_by);
for (param = switch_xml_child(x_profile, "param"); param; param = param->next) {
char *var, *val;
@@ -409,12 +412,30 @@
val = (char *) switch_xml_attr_soft(param, "value");
if (!strcasecmp(var, "order_by") && !switch_strlen_zero(val)) {
- if (!strcasecmp(val, "quality")) {
- order_by = "quality DESC";
- } else if(!strcasecmp(val, "reliability")) {
- order_by = "reliability DESC";
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "param val is %s\n", val);
+ if ((argc = switch_separate_string(val, ',', argv, (sizeof(argv) / sizeof(argv[0]))))) {
+ for (x=0; x<argc; x++) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "arg #%d/%d is %s\n", x, argc, argv[x]);
+ if(!switch_strlen_zero(argv[x])) {
+ if (!strcasecmp(argv[x], "quality")) {
+ order_by.write_function(&order_by, ", quality DESC");
+ } else if(!strcasecmp(argv[x], "reliability")) {
+ order_by.write_function(&order_by, ", reliability DESC");
+ } else {
+ order_by.write_function(&order_by, ", %s", argv[x]);
+ }
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "arg #%d is empty\n", x);
+ }
+ }
} else {
- order_by = val;
+ if (!strcasecmp(val, "quality")) {
+ order_by.write_function(&order_by, ", quality DESC");
+ } else if(!strcasecmp(val, "reliability")) {
+ order_by.write_function(&order_by, ", reliability DESC");
+ } else {
+ order_by.write_function(&order_by, ", %s", val);
+ }
}
} else if (!strcasecmp(var, "id") && !switch_strlen_zero(val)) {
id_s = val;
@@ -427,11 +448,12 @@
profile = switch_core_alloc(globals.pool, sizeof(*profile));
profile->name = switch_core_strdup(globals.pool, name);
- if(!switch_strlen_zero(order_by)) {
- profile->order_by = switch_core_strdup(globals.pool, order_by);
+ if(!switch_strlen_zero((char *)order_by.data)) {
+ profile->order_by = switch_core_strdup(globals.pool, (char *)order_by.data);
+ switch_safe_free(order_by.data);
} else {
/* default to rate */
- profile->order_by = "rate";
+ profile->order_by = ", rate";
}
if(!switch_strlen_zero(id_s)) {
profile->id = atoi(id_s);
More information about the Freeswitch-svn
mailing list