[commit] r10521 - in freeswitch/trunk/scripts/contrib/intralanman/C/lcr: mod_lcr sql
Author: intralanman Date: Sat Nov 22 23:13:20 2008 New Revision: 10521 Log: adding support for starting/ending dates and multiple lcr profiles Modified: freeswitch/trunk/scripts/contrib/intralanman/C/lcr/mod_lcr/mod_lcr.c freeswitch/trunk/scripts/contrib/intralanman/C/lcr/sql/mysql-5.0.sql freeswitch/trunk/scripts/contrib/intralanman/C/lcr/sql/postgres-8.3.sql 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 Sat Nov 22 23:13:20 2008 @@ -34,7 +34,7 @@ #include <switch_odbc.h> -#define LCR_SYNTAX "lcr <digits>" +#define LCR_SYNTAX "lcr <digits> [<lcr profile>]" /* SQL Query places */ #define LCR_DIGITS_PLACE 0 @@ -266,7 +266,7 @@ return SWITCH_STATUS_SUCCESS; } -switch_status_t lcr_do_lookup(char *digits, callback_t *cb_struct) { +switch_status_t lcr_do_lookup(callback_t *cb_struct, char *digits, uint16_t lcr_profile) { /* instantiate the object/struct we defined earlier */ switch_stream_handle_t sql_stream = { 0 }; size_t n, digit_len = strlen(digits); @@ -284,18 +284,22 @@ sql_stream.write_function(&sql_stream, "SELECT l.digits, c.carrier_name, l.rate, cg.prefix AS gw_prefix, cg.suffix AS gw_suffix, l.lead_strip, l.trail_strip, l.prefix, l.suffix " ); - sql_stream.write_function(&sql_stream, "FROM lcr l JOIN carriers c ON l.carrier_id=c.id JOIN carrier_gateway cg ON c.id=cg.carrier_id "); + sql_stream.write_function(&sql_stream, "FROM lcr l JOIN carriers c ON l.carrier_id=c.id JOIN carrier_gateway cg ON c.id=cg.carrier_id WHERE digits IN ("); for (n = digit_len; n > 0; n--) { digits_copy[n] = '\0'; - sql_stream.write_function(&sql_stream, "%s digits='%s' ", (n==digit_len ? "WHERE" : "OR"), digits_copy); + sql_stream.write_function(&sql_stream, "%s%s", (n==digit_len ? "" : ", "), digits_copy); + } + sql_stream.write_function(&sql_stream, ") AND CURRENT_TIMESTAMP BETWEEN date_start AND date_end "); + if(lcr_profile > 0) { + sql_stream.write_function(&sql_stream, "AND lcr_profile=%d ", lcr_profile); } sql_stream.write_function(&sql_stream, "ORDER BY digits DESC, rate;"); - + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "%s\n", (char *)sql_stream.data); - + lcr_execute_sql_callback((char *)sql_stream.data, route_add_callback, cb_struct); switch_safe_free(sql_stream.data); - + return SWITCH_STATUS_SUCCESS; } @@ -373,7 +377,8 @@ switch_channel_t *channel = switch_core_session_get_channel(session); callback_t routes = { 0 }; lcr_route cur_route = { 0 }; - char *bridge_data = NULL;; + char *bridge_data = NULL; + uint16_t lcr_profile = 0; if (!caller_profile) { caller_profile = switch_channel_get_caller_profile(channel); @@ -381,7 +386,7 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "LCR Lookup on %s\n", caller_profile->destination_number); routes.lookup_number = caller_profile->destination_number; - if (lcr_do_lookup(caller_profile->destination_number, &routes) == SWITCH_STATUS_SUCCESS) { + if (lcr_do_lookup(&routes, caller_profile->destination_number, lcr_profile) == SWITCH_STATUS_SUCCESS) { if ((extension = switch_caller_extension_new(session, caller_profile->destination_number, caller_profile->destination_number)) == 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "memory error!\n"); destroy_list(&routes.head); @@ -426,6 +431,7 @@ char *rbp = rbuf; switch_size_t l = 0, rbl = sizeof(rbuf); uint32_t cnt = 1; + uint16_t lcr_profile = 0; switch_channel_t *channel = switch_core_session_get_channel(session); char *last_delim = "|"; callback_t routes = { 0 }; @@ -437,10 +443,19 @@ if ((argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))))) { dest = argv[0]; - + if(argc > 1) { + if((uint16_t)atoi(argv[1]) > 0 && (uint16_t)atoi(argv[1]) < 0xFFFF) { + lcr_profile = (uint16_t)atoi(argv[1]); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, + "lcr profile MUST be an integer NOT '%s'\n", argv[1] + ); + } + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "LCR Lookup on %s\n", dest); routes.lookup_number = dest; - if (lcr_do_lookup(dest, &routes) == SWITCH_STATUS_SUCCESS) { + if (lcr_do_lookup(&routes, dest, lcr_profile) == SWITCH_STATUS_SUCCESS) { for (cur_route = routes.head; cur_route; cur_route = cur_route->next) { switch_snprintf(vbuf, sizeof(vbuf), "lcr_route_%d", cnt++); switch_channel_set_variable(channel, vbuf, cur_route->dialstring); @@ -467,6 +482,7 @@ char *mydata = NULL; char *dialstring = NULL; char *destination_number = NULL; + uint16_t lcr_profile = 0; lcr_route current = NULL; max_obj_t maximum_lengths = { 0 }; callback_t cb_struct = { 0 }; @@ -480,6 +496,16 @@ if ((argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))))) { destination_number = strdup(argv[0]); + if(argc > 1) { + if((uint16_t)atoi(argv[1]) > 0 && (uint16_t)atoi(argv[1]) < 0xFFFF) { + lcr_profile = (uint16_t)atoi(argv[1]); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR + , "lcr profile MUST be an integer, NOT '%s'\n", argv[1] + ); + goto usage; + } + } cb_struct.lookup_number = destination_number; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO @@ -487,7 +513,7 @@ ); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO , "lcr lookup returned [%d]\n" - , lcr_do_lookup(destination_number, &cb_struct) + , lcr_do_lookup(&cb_struct, destination_number, lcr_profile) ); if (cb_struct.head != NULL) { size_t len; Modified: freeswitch/trunk/scripts/contrib/intralanman/C/lcr/sql/mysql-5.0.sql ============================================================================== --- freeswitch/trunk/scripts/contrib/intralanman/C/lcr/sql/mysql-5.0.sql (original) +++ freeswitch/trunk/scripts/contrib/intralanman/C/lcr/sql/mysql-5.0.sql Sat Nov 22 23:13:20 2008 @@ -21,6 +21,7 @@ DROP TABLE IF EXISTS `lcr`; CREATE TABLE `lcr` ( + `id` int(11) NOT NULL auto_increment, `digits` varchar(15) default NULL, `rate` float(11,5) unsigned NOT NULL, `carrier_id` int(11) NOT NULL, @@ -33,7 +34,6 @@ `date_end` datetime NOT NULL, `quality` float(10,6) NOT NULL, `reliability` float(10,6) NOT NULL, - `id` int(11) NOT NULL auto_increment, PRIMARY KEY (`id`), KEY `carrier_id` (`carrier_id`), KEY `digits` (`digits`), Modified: freeswitch/trunk/scripts/contrib/intralanman/C/lcr/sql/postgres-8.3.sql ============================================================================== --- freeswitch/trunk/scripts/contrib/intralanman/C/lcr/sql/postgres-8.3.sql (original) +++ freeswitch/trunk/scripts/contrib/intralanman/C/lcr/sql/postgres-8.3.sql Sat Nov 22 23:13:20 2008 @@ -28,7 +28,8 @@ CREATE UNIQUE INDEX gateway ON carrier_gateway - (gateway, term_host, port); + (prefix, suffix); + -- Table: lcr @@ -37,14 +38,14 @@ CREATE TABLE lcr ( id serial NOT NULL, - digits VARCHAR(15), + digits NUMERIC(20, 0), rate numeric(11,5) NOT NULL, carrier_id integer NOT NULL REFERENCES carriers(id), lead_strip integer NOT NULL DEFAULT 0, trail_strip integer NOT NULL DEFAULT 0, prefix VARCHAR(16) NOT NULL DEFAULT '', suffix VARCHAR(16) NOT NULL DEFAULT '', - lcr_profile VARCHAR(32), + lcr_profile INTEGER NOT NULL DEFAULT 0, date_start timestamp with time zone NOT NULL, date_end timestamp with time zone NOT NULL, quality numeric(10,6) NOT NULL DEFAULT 0, @@ -76,4 +77,3 @@ CREATE INDEX unique_route ON lcr (digits, carrier_id); -
participants (1)
-
FreeSWITCH SVN