]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Skinny: store accessory status in db instead of memory
authorMathieu Parent <math.parent@gmail.com>
Thu, 14 Apr 2011 11:02:27 +0000 (13:02 +0200)
committerMathieu Parent <math.parent@gmail.com>
Thu, 14 Apr 2011 11:09:15 +0000 (13:09 +0200)
(this is not used yet)

src/mod/endpoints/mod_skinny/mod_skinny.c
src/mod/endpoints/mod_skinny/mod_skinny.h
src/mod/endpoints/mod_skinny/skinny_server.c

index b05806b8d967d65020554e480533b3dddee4446e..65ff5b8f7150691b8de51689881ca5611646fde9 100644 (file)
@@ -58,7 +58,10 @@ static char devices_sql[] =
        "   type             INTEGER,\n"
        "   max_streams      INTEGER,\n"
        "   port             INTEGER,\n"
-       "   codec_string     VARCHAR(255)\n"
+       "   codec_string     VARCHAR(255),\n"
+       "   headset          INTEGER,\n"
+       "   handset          INTEGER,\n"
+       "   speaker          INTEGER\n"
        ");\n";
 
 static char lines_sql[] =
@@ -1916,10 +1919,10 @@ static switch_status_t load_skinny_config(void)
                                        switch_odbc_handle_exec(profile->master_odbc, active_lines_sql, NULL, NULL);
                                } else {
                                        if ((db = switch_core_db_open_file(profile->dbname))) {
-                                               switch_core_db_test_reactive(db, "SELECT * FROM skinny_devices", NULL, devices_sql);
-                                               switch_core_db_test_reactive(db, "SELECT * FROM skinny_lines", NULL, lines_sql);
-                                               switch_core_db_test_reactive(db, "SELECT * FROM skinny_buttons", NULL, buttons_sql);
-                                               switch_core_db_test_reactive(db, "SELECT * FROM skinny_active_lines", NULL, active_lines_sql);
+                                               switch_core_db_test_reactive(db, "SELECT headset FROM skinny_devices", "DROP TABLE skinny_devices", devices_sql);
+                                               switch_core_db_test_reactive(db, "SELECT * FROM skinny_lines", "DROP TABLE skinny_lines", lines_sql);
+                                               switch_core_db_test_reactive(db, "SELECT * FROM skinny_buttons", "DROP TABLE skinny_buttons", buttons_sql);
+                                               switch_core_db_test_reactive(db, "SELECT * FROM skinny_active_lines", "DROP TABLE skinny_active_lines", active_lines_sql);
                                        } else {
                                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot Open SQL Database!\n");
                                                continue;
index 8cd893284c308a9a3703d87adb08f64dfe72698f..eb7e45ebc0595272086e9bc96d42488d9c70a952 100644 (file)
@@ -136,9 +136,6 @@ struct listener {
        char device_name[16];
        uint32_t device_instance;
        uint32_t device_type;
-       uint32_t headset;
-       uint32_t handset;
-       uint32_t speaker;
 
        char firmware_version[16];
        char *soft_key_set_set;
index efe02a98110ccc230cb8702f3d8136fa5366cefd..35cb74adb56ed9e4f723881c488d46684dde37d5 100644 (file)
@@ -1900,16 +1900,20 @@ switch_status_t skinny_handle_soft_key_template_request(listener_t *listener, sk
 
 switch_status_t skinny_headset_status_message(listener_t *listener, skinny_message_t *request)
 {
+       char *sql;
+
        skinny_check_data_length(request, sizeof(request->data.headset_status));
 
-       switch(request->data.headset_status.mode) {
-               case 1:
-                       listener->headset = SKINNY_ACCESSORY_STATE_OFFHOOK;
-                       break;
-               default:
-                       listener->headset = SKINNY_ACCESSORY_STATE_ONHOOK;
-                       break;
+       if ((sql = switch_mprintf(
+                       "UPDATE skinny_devices SET headset=%d WHERE name='%s' and instance=%d",
+                       (request->data.headset_status.mode==1) ? SKINNY_ACCESSORY_STATE_OFFHOOK : SKINNY_ACCESSORY_STATE_ONHOOK,
+                       listener->device_name,
+                       listener->device_instance
+                       ))) {
+               skinny_execute_sql(listener->profile, sql, listener->profile->sql_mutex);
+               switch_safe_free(sql);
        }
+
        return SWITCH_STATUS_SUCCESS;
 }
 
@@ -2037,17 +2041,43 @@ switch_status_t skinny_handle_dialed_phone_book_message(listener_t *listener, sk
 }
 switch_status_t skinny_handle_accessory_status_message(listener_t *listener, skinny_message_t *request)
 {
+       char *sql;
+
        skinny_check_data_length(request, sizeof(request->data.accessory_status));
 
        switch(request->data.accessory_status.accessory_id) {
                case SKINNY_ACCESSORY_HEADSET:
-                       listener->headset = request->data.accessory_status.accessory_status;
+                       if ((sql = switch_mprintf(
+                                       "UPDATE skinny_devices SET headset=%d WHERE name='%s' and instance=%d",
+                                       request->data.accessory_status.accessory_status,
+                                       listener->device_name,
+                                       listener->device_instance
+                                       ))) {
+                               skinny_execute_sql(listener->profile, sql, listener->profile->sql_mutex);
+                               switch_safe_free(sql);
+                       }
                        break;
                case SKINNY_ACCESSORY_HANDSET:
-                       listener->handset = request->data.accessory_status.accessory_status;
+                       if ((sql = switch_mprintf(
+                                       "UPDATE skinny_devices SET handset=%d WHERE name='%s' and instance=%d",
+                                       request->data.accessory_status.accessory_status,
+                                       listener->device_name,
+                                       listener->device_instance
+                                       ))) {
+                               skinny_execute_sql(listener->profile, sql, listener->profile->sql_mutex);
+                               switch_safe_free(sql);
+                       }
                        break;
                case SKINNY_ACCESSORY_SPEAKER:
-                       listener->speaker = request->data.accessory_status.accessory_status;
+                       if ((sql = switch_mprintf(
+                                       "UPDATE skinny_devices SET speaker=%d WHERE name='%s' and instance=%d",
+                                       request->data.accessory_status.accessory_status,
+                                       listener->device_name,
+                                       listener->device_instance
+                                       ))) {
+                               skinny_execute_sql(listener->profile, sql, listener->profile->sql_mutex);
+                               switch_safe_free(sql);
+                       }
                        break;
        }