skinny_globals_t globals;
-SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_codec_string, globals.codec_string);
-SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_codec_rates_string, globals.codec_rates_string);
-
/*****************************************************************************/
/* SQL TABLES */
/*****************************************************************************/
"CREATE TABLE skinny_buttons (\n"
" device_name VARCHAR(16),\n"
" position INTEGER,\n"
- " type VARCHAR(10),\n"
+ " type INTEGER,\n"
" label VARCHAR(40),\n"
" value VARCHAR(24),\n"
" settings VARCHAR(44)\n"
stream->write_function(stream, "Context \t%s\n", profile->context);
stream->write_function(stream, "Keep-Alive \t%d\n", profile->keep_alive);
stream->write_function(stream, "Date-Format \t%s\n", profile->date_format);
- /* db */
stream->write_function(stream, "DBName \t%s\n", profile->dbname ? profile->dbname : switch_str_nil(profile->odbc_dsn));
+ stream->write_function(stream, "Debug \t%d\n", profile->debug);
/* stats */
stream->write_function(stream, "CALLS-IN \t%d\n", profile->ib_calls);
stream->write_function(stream, "FAILED-CALLS-IN \t%d\n", profile->ib_failed_calls);
switch_socket_opt_set(listener->sock, SWITCH_SO_TCP_NODELAY, TRUE);
switch_socket_opt_set(listener->sock, SWITCH_SO_NONBLOCK, TRUE);
- if (globals.debug > 0) {
+ if (listener->profile->debug > 0) {
if (zstr(listener->remote_ip)) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Connection Open\n");
} else {
remove_listener(listener);
- if (globals.debug > 0) {
+ if (listener->profile->debug > 0) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Session complete, waiting for children\n");
}
switch_thread_rwlock_unlock(listener->rwlock);
- if (globals.debug > 0) {
+ if (listener->profile->debug > 0) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Connection Closed\n");
}
profile->dialplan = switch_core_strdup(module_pool, val);
} else if (!strcasecmp(var, "context")) {
profile->context = switch_core_strdup(module_pool, val);
+ } else if (!strcasecmp(var, "date-format")) {
+ strncpy(profile->date_format, val, 6);
} else if (!strcasecmp(var, "odbc-dsn") && !zstr(val)) {
if (switch_odbc_available()) {
profile->odbc_dsn = switch_core_strdup(module_pool, val);
static switch_status_t load_skinny_config(void)
{
char *cf = "skinny.conf";
- switch_xml_t xcfg, xml, xsettings, xprofiles, xprofile, xparam;
+ switch_xml_t xcfg, xml, xprofiles, xprofile;
memset(&globals, 0, sizeof(globals));
globals.running = 1;
return SWITCH_STATUS_TERM;
}
- if ((xsettings = switch_xml_child(xcfg, "settings"))) {
- for (xparam = switch_xml_child(xsettings, "param"); xparam; xparam = xparam->next) {
- char *var = (char *) switch_xml_attr_soft(xparam, "name");
- char *val = (char *) switch_xml_attr_soft(xparam, "value");
-
- if (!strcmp(var, "debug")) {
- globals.debug = atoi(val);
- } else if (!strcmp(var, "codec-prefs")) {
- set_global_codec_string(val);
- globals.codec_order_last = switch_separate_string(globals.codec_string, ',', globals.codec_order, SWITCH_MAX_CODECS);
- } else if (!strcmp(var, "codec-master")) {
- if (!strcasecmp(val, "us")) {
- switch_set_flag(&globals, GFLAG_MY_CODEC_PREFS);
- }
- } else if (!strcmp(var, "codec-rates")) {
- set_global_codec_rates_string(val);
- globals.codec_rates_last = switch_separate_string(globals.codec_rates_string, ',', globals.codec_rates, SWITCH_MAX_CODECS);
- }
- } /* param */
- } /* settings */
-
if ((xprofiles = switch_xml_child(xcfg, "profiles"))) {
for (xprofile = switch_xml_child(xprofiles, "profile"); xprofile; xprofile = xprofile->next) {
char *profile_name = (char *) switch_xml_attr_soft(xprofile, "name");
} else if (!strcmp(var, "keep-alive")) {
profile->keep_alive = atoi(val);
} else if (!strcmp(var, "date-format")) {
- memcpy(profile->date_format, val, 6);
+ skinny_profile_set(profile, "date-format", val);
+ } else if (!strcmp(var, "odbc-dsn")) {
+ skinny_profile_set(profile, "odbc-dsn", val);
+ } else if (!strcmp(var, "debug")) {
+ profile->debug = atoi(val);
}
} /* param */
skinny_profile_set(profile, "context","public");
}
- if (!profile->port) {
+ if (profile->port == 0) {
profile->port = 2000;
}
listener_t *listener = NULL;
skinny_profile_find_listener_by_device_name(profile, device_name, &listener);
if(listener) {
- set_lamp(listener, skinny_str2stimulus(stimulus), atoi(instance), skinny_str2lamp_mode(lamp_mode));
+ set_lamp(listener, skinny_str2button(stimulus), atoi(instance), skinny_str2lamp_mode(lamp_mode));
} else {
stream->write_function(stream, "Listener not found!\n");
}
}
}
- switch_safe_free(globals.codec_string);
- switch_safe_free(globals.codec_rates_string);
-
return SWITCH_STATUS_SUCCESS;
}
#define SKINNY_EVENT_ALARM "skinny::alarm"
struct skinny_globals {
- /* prefs */
- int debug;
- char *codec_string;
- char *codec_order[SWITCH_MAX_CODECS];
- int codec_order_last;
- char *codec_rates_string;
- char *codec_rates[SWITCH_MAX_CODECS];
- int codec_rates_last;
- unsigned int flags;
/* data */
int calls;
switch_mutex_t *calls_mutex;
char *context;
uint32_t keep_alive;
char date_format[6];
+ int debug;
/* db */
char *dbname;
char *odbc_dsn;
SKINNY_DECLARE_ID2STR(skinny_ring_mode2str, SKINNY_RING_MODES, "RingModeUnknown")
SKINNY_DECLARE_STR2ID(skinny_str2ring_mode, SKINNY_RING_MODES, -1)
-struct skinny_table SKINNY_STIMULI[] = {
+struct skinny_table SKINNY_BUTTONS[] = {
{"LastNumberRedial", SKINNY_BUTTON_LAST_NUMBER_REDIAL},
{"SpeedDial", SKINNY_BUTTON_SPEED_DIAL},
{"Line", SKINNY_BUTTON_LINE},
{"Undefined", SKINNY_BUTTON_UNDEFINED},
{NULL, 0}
};
-SKINNY_DECLARE_ID2STR(skinny_stimulus2str, SKINNY_STIMULI, "Unknown")
-SKINNY_DECLARE_STR2ID(skinny_str2stimulus, SKINNY_STIMULI, -1)
+SKINNY_DECLARE_ID2STR(skinny_button2str, SKINNY_BUTTONS, "Unknown")
+SKINNY_DECLARE_STR2ID(skinny_str2button, SKINNY_BUTTONS, -1)
struct skinny_table SKINNY_LAMP_MODES[] = {
{"Off", SKINNY_LAMP_OFF},
if ((sql = switch_mprintf(
"SELECT '%d' AS wanted_position, position, label, value, settings "
- "FROM skinny_buttons WHERE device_name='%s' AND type='line' "
+ "FROM skinny_buttons WHERE device_name='%s' AND type=%d "
"ORDER BY position",
instance,
- listener->device_name
+ listener->device_name,
+ SKINNY_BUTTON_LINE
))) {
skinny_execute_sql_callback(listener->profile, listener->profile->listener_mutex, sql, skinny_line_get_callback, &helper);
switch_safe_free(sql);
if ((sql = switch_mprintf(
"SELECT '%d' AS wanted_position, position, label, value, settings "
- "FROM skinny_buttons WHERE device_name='%s' AND type='speed-dial' "
+ "FROM skinny_buttons WHERE device_name='%s' AND type=%d "
"ORDER BY position",
instance,
- listener->device_name
+ listener->device_name,
+ SKINNY_BUTTON_SPEED_DIAL
))) {
skinny_execute_sql_callback(listener->profile, listener->profile->listener_mutex, sql, skinny_speed_dial_get_callback, &helper);
switch_safe_free(sql);
xbuttons = switch_xml_child(xskinny, "buttons");
if (xbuttons) {
for (xbutton = switch_xml_child(xbuttons, "button"); xbutton; xbutton = xbutton->next) {
- const char *position = switch_xml_attr_soft(xbutton, "position");
- const char *type = switch_xml_attr_soft(xbutton, "type");
+ uint32_t position = atoi(switch_xml_attr_soft(xbutton, "position"));
+ uint32_t type = skinny_str2button(switch_xml_attr_soft(xbutton, "type"));
const char *label = switch_xml_attr_soft(xbutton, "label");
const char *value = switch_xml_attr_soft(xbutton, "value");
const char *settings = switch_xml_attr_soft(xbutton, "settings");
if ((sql = switch_mprintf(
"INSERT INTO skinny_buttons "
"(device_name, position, type, label, value, settings) "
- "VALUES('%s', '%s', '%s', '%s', '%s', '%s')",
+ "VALUES('%s', %d, %d, '%s', '%s', '%s')",
request->data.reg.device_name,
position,
type,
if ((sql = switch_mprintf(
"SELECT name, user_id, instance, '' AS user_name, '' AS server_name, "
- "(SELECT COUNT(*) FROM skinny_buttons WHERE device_name='%s' AND type='line') AS number_lines, "
- "(SELECT COUNT(*) FROM skinny_buttons WHERE device_name='%s' AND type='speed-dial') AS number_speed_dials "
+ "(SELECT COUNT(*) FROM skinny_buttons WHERE device_name='%s' AND type='%s') AS number_lines, "
+ "(SELECT COUNT(*) FROM skinny_buttons WHERE device_name='%s' AND type='%s') AS number_speed_dials "
"FROM skinny_devices WHERE name='%s' ",
listener->device_name,
+ skinny_button2str(SKINNY_BUTTON_LINE),
listener->device_name,
+ skinny_button2str(SKINNY_BUTTON_SPEED_DIAL),
listener->device_name
))) {
skinny_execute_sql_callback(profile, profile->listener_mutex, sql, skinny_config_stat_res_callback, message);
struct button_template_helper {
skinny_message_t *message;
- int count[0xff+1];
+ int count[0xffff+1];
};
int skinny_handle_button_template_request_callback(void *pArg, int argc, char **argv, char **columnNames)
{
struct button_template_helper *helper = pArg;
skinny_message_t *message = helper->message;
- char *device_name = argv[0];
+ /* char *device_name = argv[0]; */
int position = atoi(argv[1]);
- char *type = argv[2];
+ uint32_t type = atoi(argv[2]);
int i;
/* fill buttons between previous one and current one */
message->data.button_template.total_button_count++;
}
+ message->data.button_template.btn[i].instance_number = ++helper->count[type];
+ message->data.button_template.btn[position-1].button_definition = type;
- if (!strcasecmp(type, "line")) {
- message->data.button_template.btn[i].instance_number = ++helper->count[SKINNY_BUTTON_LINE];
- message->data.button_template.btn[position-1].button_definition = SKINNY_BUTTON_LINE;
- } else if (!strcasecmp(type, "speed-dial")) {
- message->data.button_template.btn[i].instance_number = ++helper->count[SKINNY_BUTTON_SPEED_DIAL];
- message->data.button_template.btn[position-1].button_definition = SKINNY_BUTTON_SPEED_DIAL;
- } else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO,
- "Unknown button type %s for device %s.\n", type, device_name);
- }
message->data.button_template.button_count++;
message->data.button_template.total_button_count++;
SKINNY_BUTTON_VOICEMAIL = 0x0F,
SKINNY_BUTTON_UNDEFINED = 0xFF,
};
-struct skinny_table SKINNY_STIMULI[6];
-const char *skinny_stimulus2str(uint32_t id);
-uint32_t skinny_str2stimulus(const char *str);
-#define SKINNY_PUSH_STIMULI SKINNY_DECLARE_PUSH_MATCH(SKINNY_STIMULI)
+struct skinny_table SKINNY_BUTTONS[6];
+const char *skinny_button2str(uint32_t id);
+uint32_t skinny_str2button(const char *str);
+#define SKINNY_PUSH_STIMULI SKINNY_DECLARE_PUSH_MATCH(SKINNY_BUTTONS)
enum skinny_soft_key_event {
SOFTKEY_REDIAL = 0x01,