2 * Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License")
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
24 #include "ua-manager-common.h"
25 #include "ua-manager-database.h"
27 #define SELECT_ALL_DEVICES "SELECT device_id, tech_type, address, " \
28 "ip_address, last_seen, presence_state, os_type, " \
29 "user_id, discriminant, service_id, purpose, duid, device_icon FROM devices"
31 #define SELECT_DEVICE "SELECT device_id, tech_type, address, " \
32 "ip_address, last_seen, presence_state, os_type, " \
33 "user_id, discriminant, service_id, purpose, duid, device_icon FROM devices " \
34 "WHERE device_id = ? AND tech_type = ? AND address = ?"
36 #define SELECT_DEVICE_NUMBER "SELECT device_number FROM devices " \
37 "WHERE device_id = ? AND tech_type = ? AND address = ?"
39 #define INSERT_DEVICE "insert into devices " \
40 "(device_id, tech_type, address, ip_address, last_seen, " \
41 "presence_state, os_type, user_id, discriminant, service_id, " \
42 "purpose, duid, device_icon)" \
43 "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
45 #define UPDATE_LAST_SEEN "UPDATE devices " \
46 "SET last_seen = ? WHERE device_id = ? AND tech_type = ? AND address = ?"
48 #define UPDATE_PRESENCE "UPDATE devices " \
49 "SET presence_state = ? WHERE device_id = ? AND tech_type = ? AND address = ?"
51 #define UPDATE_IP_ADDRESS "UPDATE devices " \
52 "SET ip_address = ? WHERE device_id = ? AND tech_type = ?"
54 #define UPDATE_MAC_ADDRESS "UPDATE devices " \
55 "SET address = ? WHERE device_id = ? AND tech_type = ?"
57 #define UPDATE_DEVICE "UPDATE devices " \
58 "SET (os_type, discriminant, ip_address, service_id, " \
59 "purpose, duid, device_icon) = (?, ?, ?, ?, ?, ?, ?) " \
60 "WHERE device_id = ? AND tech_type = ? AND address = ?"
62 #define DELETE_ALL_DEVICES "delete from devices "
64 #define DELETE_DEVICE_INFO "delete from devices " \
65 "WHERE device_id = ? AND tech_type = ? AND address = ?"
67 static void __uam_device_finalize_delete(void);
69 /* DELETE statements */
70 static sqlite3_stmt *delete_all_devices;
71 static sqlite3_stmt *delete_device_info;
73 /* SELECT statements */
74 static sqlite3_stmt *select_all_devices;
75 static sqlite3_stmt *select_device;
76 static sqlite3_stmt *select_device_number;
78 /* UPDATE statements */
79 static sqlite3_stmt *update_last_seen;
80 static sqlite3_stmt *update_presence;
81 static sqlite3_stmt *update_ip_address;
82 static sqlite3_stmt *update_mac_address;
83 static sqlite3_stmt *update_device;
85 /* INSERT statements */
86 static sqlite3_stmt *insert_device_info;
88 extern sqlite3 *database_handle;
90 static void __uam_device_finalize_delete(void)
94 FINALIZE(delete_all_devices);
95 FINALIZE(delete_device_info);
100 static void __uam_device_finalize_select(void)
104 FINALIZE(select_all_devices);
105 FINALIZE(select_device);
106 FINALIZE(select_device_number);
111 static void __uam_device_finalize_insert(void)
115 FINALIZE(insert_device_info);
120 static void __uam_device_finalize_update(void)
124 FINALIZE(update_last_seen);
125 FINALIZE(update_presence);
126 FINALIZE(update_ip_address);
127 FINALIZE(update_mac_address);
128 FINALIZE(update_device);
133 static int __uam_device_prepare_delete(sqlite3 *db)
137 static int initialized;
144 PREPARE_QUERY(rc, db, delete_all_devices,
145 DELETE_ALL_DEVICES, __uam_device_finalize_delete);
146 PREPARE_QUERY(rc, db, delete_device_info,
147 DELETE_DEVICE_INFO, __uam_device_finalize_delete);
154 static int __uam_device_prepare_select(sqlite3 *db)
158 static int initialized;
165 PREPARE_QUERY(rc, db, select_all_devices,
166 SELECT_ALL_DEVICES, __uam_device_finalize_select);
167 PREPARE_QUERY(rc, db, select_device,
168 SELECT_DEVICE, __uam_device_finalize_select);
169 PREPARE_QUERY(rc, db, select_device_number,
170 SELECT_DEVICE_NUMBER, __uam_device_finalize_select);
177 static int __uam_device_prepare_update(sqlite3 *db)
181 static int initialized;
188 PREPARE_QUERY(rc, db, update_last_seen,
189 UPDATE_LAST_SEEN, __uam_device_finalize_update);
190 PREPARE_QUERY(rc, db, update_presence,
191 UPDATE_PRESENCE, __uam_device_finalize_update);
192 PREPARE_QUERY(rc, db, update_ip_address,
193 UPDATE_IP_ADDRESS, __uam_device_finalize_update);
194 PREPARE_QUERY(rc, db, update_mac_address,
195 UPDATE_MAC_ADDRESS, __uam_device_finalize_update);
196 PREPARE_QUERY(rc, db, update_device,
197 UPDATE_DEVICE, __uam_device_finalize_update);
204 static int __uam_device_prepare_insert(sqlite3 *db)
208 static int initialized;
215 PREPARE_QUERY(rc, db, insert_device_info,
216 INSERT_DEVICE, __uam_device_finalize_insert);
223 static int __uam_device_table_devicesinfo_prepare(sqlite3 *db)
227 int error_code = UAM_ERROR_NONE;
231 return UAM_ERROR_DB_FAILED;
234 DB_ACTION(__uam_device_prepare_delete(db), error_code, handle_error);
235 DB_ACTION(__uam_device_prepare_select(db), error_code, handle_error);
236 DB_ACTION(__uam_device_prepare_update(db), error_code, handle_error);
237 DB_ACTION(__uam_device_prepare_insert(db), error_code, handle_error);
244 static void __uam_device_table_devicesinfo_finalize(void)
247 __uam_device_finalize_delete();
248 __uam_device_finalize_select();
249 __uam_device_finalize_update();
250 __uam_device_finalize_insert();
254 int _uam_device_db_deinitialize(void)
258 retv_if(NULL == database_handle, UAM_ERROR_NONE);
260 __uam_device_table_devicesinfo_finalize();
261 sqlite3_close(database_handle);
264 return UAM_ERROR_NONE;
267 int _uam_device_db_initialize(void)
271 EXEC(UAM_ERROR_NONE, __uam_device_table_devicesinfo_prepare(database_handle), handle_error);
274 return UAM_ERROR_NONE;
277 _uam_device_db_deinitialize();
279 return UAM_ERROR_DB_FAILED;
282 int _uam_device_db_update_device_ip_address(char *device_id, int tech_type,
285 int error_code = UAM_ERROR_NONE;
286 sqlite3_stmt *stmt = update_ip_address;
287 int sql_ret = SQLITE_OK;
289 retv_if(NULL == device_id, UAM_ERROR_INVALID_PARAMETER);
290 retv_if(NULL == ip_address, UAM_ERROR_INVALID_PARAMETER);
292 DB_ACTION(sqlite3_bind_text(stmt, 1, ip_address, -1, SQLITE_TRANSIENT),
293 error_code, handle_error);
294 DB_ACTION(sqlite3_bind_text(stmt, 2, device_id, -1, SQLITE_TRANSIENT),
295 error_code, handle_error);
296 DB_ACTION(sqlite3_bind_int(stmt, 3, tech_type),
297 error_code, handle_error);
299 sql_ret = sqlite3_step(stmt);
300 if (sql_ret != SQLITE_DONE) {
301 UAM_ERR("Failed to update IP address [%d:%s]",
302 sql_ret, sqlite3_errmsg(database_handle));
304 error_code = UAM_ERROR_DB_FAILED;
308 UAM_DBG("[%d] IP address updated [%s]", tech_type, ip_address);
315 int _uam_device_db_update_device_mac_address(char *device_id, int tech_type,
318 int error_code = UAM_ERROR_NONE;
319 sqlite3_stmt *stmt = update_mac_address;
320 int sql_ret = SQLITE_OK;
322 retv_if(NULL == device_id, UAM_ERROR_INVALID_PARAMETER);
323 retv_if(NULL == address, UAM_ERROR_INVALID_PARAMETER);
325 DB_ACTION(sqlite3_bind_text(stmt, 1, address, -1, SQLITE_TRANSIENT),
326 error_code, handle_error);
327 DB_ACTION(sqlite3_bind_text(stmt, 2, device_id, -1, SQLITE_TRANSIENT),
328 error_code, handle_error);
329 DB_ACTION(sqlite3_bind_int(stmt, 3, tech_type),
330 error_code, handle_error);
332 sql_ret = sqlite3_step(stmt);
333 if (sql_ret != SQLITE_DONE) {
334 UAM_ERR("Failed to update MAC address [%d:%s]",
335 sql_ret, sqlite3_errmsg(database_handle));
337 error_code = UAM_ERROR_DB_FAILED;
341 UAM_DBG("[%d] MAC address updated [%s]", tech_type, address);
348 int _uam_device_db_update_device_presence(char *device_id, int tech_type,
349 char *address, int presence_state)
351 int error_code = UAM_ERROR_NONE;
352 sqlite3_stmt *stmt = update_presence;
353 int sql_ret = SQLITE_OK;
355 retv_if(NULL == device_id, UAM_ERROR_INVALID_PARAMETER);
356 retv_if(NULL == address, UAM_ERROR_INVALID_PARAMETER);
358 DB_ACTION(sqlite3_bind_int(stmt, 1, presence_state),
359 error_code, handle_error);
360 DB_ACTION(sqlite3_bind_text(stmt, 2, device_id, -1, SQLITE_TRANSIENT),
361 error_code, handle_error);
362 DB_ACTION(sqlite3_bind_int(stmt, 3, tech_type),
363 error_code, handle_error);
364 DB_ACTION(sqlite3_bind_text(stmt, 4, address, -1, SQLITE_TRANSIENT),
365 error_code, handle_error);
367 sql_ret = sqlite3_step(stmt);
368 if (sql_ret != SQLITE_DONE) {
369 UAM_ERR("Failed to update presence [%d:%s]",
370 sql_ret, sqlite3_errmsg(database_handle));
372 error_code = UAM_ERROR_DB_FAILED;
376 UAM_DBG("presence state updated [%d]", presence_state);
383 int _uam_device_db_update_device_last_seen(char *device_id, int tech_type,
384 char *address, unsigned long long last_seen)
386 int error_code = UAM_ERROR_NONE;
387 sqlite3_stmt *stmt = update_last_seen;
388 int sql_ret = SQLITE_OK;
390 retv_if(NULL == device_id, UAM_ERROR_INVALID_PARAMETER);
391 retv_if(NULL == address, UAM_ERROR_INVALID_PARAMETER);
393 DB_ACTION(sqlite3_bind_int64(stmt, 1, last_seen),
394 error_code, handle_error);
395 DB_ACTION(sqlite3_bind_text(stmt, 2, device_id, -1, SQLITE_TRANSIENT),
396 error_code, handle_error);
397 DB_ACTION(sqlite3_bind_int(stmt, 3, tech_type),
398 error_code, handle_error);
399 DB_ACTION(sqlite3_bind_text(stmt, 4, address, -1, SQLITE_TRANSIENT),
400 error_code, handle_error);
402 sql_ret = sqlite3_step(stmt);
403 if (sql_ret != SQLITE_DONE) {
404 UAM_ERR("Failed to update device last_seen [%d:%s]",
405 sql_ret, sqlite3_errmsg(database_handle));
407 error_code = UAM_ERROR_DB_FAILED;
411 UAM_DBG("Device last_seen updated [%llu]", last_seen);
418 int _uam_device_db_update_device_device(char *device_id, int tech_type,
419 char *address, char *ip, char os_type, char discriminant, uam_ble_payload_s payload)
421 int error_code = UAM_ERROR_NONE;
422 sqlite3_stmt *stmt = update_device;
423 int sql_ret = SQLITE_OK;
425 retv_if(NULL == device_id, UAM_ERROR_INVALID_PARAMETER);
426 retv_if(NULL == address, UAM_ERROR_INVALID_PARAMETER);
428 DB_ACTION(sqlite3_bind_int(stmt, 1, os_type),
429 error_code, handle_error);
430 DB_ACTION(sqlite3_bind_int(stmt, 2, discriminant),
431 error_code, handle_error);
432 DB_ACTION(sqlite3_bind_text(stmt, 3, ip, -1, SQLITE_TRANSIENT),
433 error_code, handle_error);
434 DB_ACTION(sqlite3_bind_text(stmt, 4, &(payload.service_id), 1, SQLITE_TRANSIENT),
435 error_code, handle_error);
436 DB_ACTION(sqlite3_bind_text(stmt, 5, &(payload.purpose), 1, SQLITE_TRANSIENT),
437 error_code, handle_error);
438 DB_ACTION(sqlite3_bind_text(stmt, 6, payload.duid, UAM_BLE_PAYLOAD_DUID_LEN + 1, SQLITE_TRANSIENT),
439 error_code, handle_error);
440 DB_ACTION(sqlite3_bind_text(stmt, 7, &(payload.device_icon), 1, SQLITE_TRANSIENT),
441 error_code, handle_error);
442 DB_ACTION(sqlite3_bind_text(stmt, 8, device_id, -1, SQLITE_TRANSIENT),
443 error_code, handle_error);
444 DB_ACTION(sqlite3_bind_int(stmt, 9, tech_type),
445 error_code, handle_error);
446 DB_ACTION(sqlite3_bind_text(stmt, 10, address, -1, SQLITE_TRANSIENT),
447 error_code, handle_error);
449 sql_ret = sqlite3_step(stmt);
450 if (sql_ret != SQLITE_DONE) {
451 UAM_ERR("Failed to update device discriminant [%d:%s]",
452 sql_ret, sqlite3_errmsg(database_handle));
454 error_code = UAM_ERROR_DB_FAILED;
458 UAM_DBG("Device discriminant updated [%s]", discriminant ? "true" : "false");
465 int _uam_device_db_insert_device_info(int user_id,
466 const uam_device_info_s *dev_info, int presence_state, unsigned long long last_seen)
469 int error_code = UAM_ERROR_NONE;
470 sqlite3_stmt *stmt = insert_device_info;
471 int sql_ret = SQLITE_OK;
473 retv_if(NULL == dev_info, UAM_ERROR_INVALID_PARAMETER);
475 UAM_INFO("%s-%d-%s-%s-%llu-%d-%d-%d-%d-0x%2.2X", dev_info->device_id,
476 dev_info->type, dev_info->mac, dev_info->ipv4_addr,
477 last_seen, presence_state, dev_info->operating_system, dev_info->discriminant,
478 user_id, dev_info->payload.service_id);
480 DB_ACTION(sqlite3_bind_text(stmt, 1, dev_info->device_id, -1, SQLITE_TRANSIENT),
481 error_code, handle_error);
482 DB_ACTION(sqlite3_bind_int(stmt, 2, dev_info->type),
483 error_code, handle_error);
484 DB_ACTION(sqlite3_bind_text(stmt, 3, dev_info->mac, -1, SQLITE_TRANSIENT),
485 error_code, handle_error);
486 DB_ACTION(sqlite3_bind_text(stmt, 4, dev_info->ipv4_addr, -1, SQLITE_TRANSIENT),
487 error_code, handle_error);
488 DB_ACTION(sqlite3_bind_int64(stmt, 5, last_seen),
489 error_code, handle_error);
490 DB_ACTION(sqlite3_bind_int(stmt, 6, presence_state),
491 error_code, handle_error);
492 DB_ACTION(sqlite3_bind_int(stmt, 7, dev_info->operating_system),
493 error_code, handle_error);
494 DB_ACTION(sqlite3_bind_int(stmt, 8, user_id),
495 error_code, handle_error);
496 DB_ACTION(sqlite3_bind_int(stmt, 9, dev_info->discriminant),
497 error_code, handle_error);
498 DB_ACTION(sqlite3_bind_text(stmt, 10, &(dev_info->payload.service_id), 1, SQLITE_TRANSIENT),
499 error_code, handle_error);
500 DB_ACTION(sqlite3_bind_text(stmt, 11, &(dev_info->payload.purpose), 1, SQLITE_TRANSIENT),
501 error_code, handle_error);
502 DB_ACTION(sqlite3_bind_text(stmt, 12, dev_info->payload.duid, UAM_BLE_PAYLOAD_DUID_LEN + 1, SQLITE_TRANSIENT),
503 error_code, handle_error);
504 DB_ACTION(sqlite3_bind_text(stmt, 13, &(dev_info->payload.device_icon), 1, SQLITE_TRANSIENT),
505 error_code, handle_error);
507 sql_ret = sqlite3_step(stmt);
508 if (sql_ret != SQLITE_DONE) {
509 UAM_ERR("Failed to insert device info [%d:%s]",
510 sql_ret, sqlite3_errmsg(database_handle));
511 error_code = UAM_ERROR_DB_FAILED;
515 UAM_DBG("Device info inserted device_id [%s] ", dev_info->device_id);
523 int _uam_device_db_delete_device_info(const char *device_id, int tech_type,
527 int error_code = UAM_ERROR_NONE;
528 sqlite3_stmt *stmt = delete_device_info;
529 int sql_ret = SQLITE_OK;
531 UAM_INFO("DeviceId: %s", device_id);
533 DB_ACTION(sqlite3_bind_text(stmt, 1, device_id, -1, SQLITE_STATIC),
534 error_code, handle_error);
535 DB_ACTION(sqlite3_bind_int(stmt, 2, tech_type),
536 error_code, handle_error);
537 DB_ACTION(sqlite3_bind_text(stmt, 3, address, -1, SQLITE_STATIC),
538 error_code, handle_error);
540 retv_if(UAM_ERROR_NONE != __uam_db_begin_transaction(), UAM_ERROR_DB_FAILED);
541 error_code = _uam_db_delete_device_service_mapping(device_id, tech_type, address);
542 if (UAM_ERROR_NONE != error_code) {
543 UAM_ERR("Failed to delete device service mapping");
544 __uam_db_end_transaction(0);
548 sql_ret = sqlite3_step(stmt);
549 if (sql_ret != SQLITE_DONE) {
550 UAM_ERR("Failed to delete device info [%d:%s]",
551 sql_ret, sqlite3_errmsg(database_handle));
552 error_code = UAM_ERROR_DB_FAILED;
553 __uam_db_end_transaction(0);
556 UAM_DBG("Device info deleted");
558 __uam_db_end_transaction(1);
566 int _uam_device_db_get_device(char *device_id, int tech_type, char *address,
567 db_device_info_t *info)
570 int error_code = UAM_ERROR_NONE;
571 sqlite3_stmt *stmt = select_device;
572 int sql_ret = SQLITE_OK;
575 retv_if(NULL == info, UAM_ERROR_INVALID_PARAMETER);
577 UAM_INFO("UserId: %s", device_id);
579 DB_ACTION(sqlite3_bind_text(stmt, 1, device_id, -1, SQLITE_STATIC),
580 error_code, handle_error);
581 DB_ACTION(sqlite3_bind_int(stmt, 2, tech_type),
582 error_code, handle_error);
583 DB_ACTION(sqlite3_bind_text(stmt, 3, address, -1, SQLITE_STATIC),
584 error_code, handle_error);
586 sql_ret = sqlite3_step(stmt);
587 if (sql_ret != SQLITE_DONE) {
588 UAM_ERR("Failed to select device info [%d:%s]",
589 sql_ret, sqlite3_errmsg(database_handle));
590 error_code = UAM_ERROR_DB_FAILED;
592 UAM_DBG("Device info found");
593 info = g_new0(db_device_info_t, 1);
594 g_strlcpy(info->dev_info.device_id, (char *)sqlite3_column_text(stmt, 0),
595 UAM_DEVICE_ID_MAX_STRING_LEN);
596 info->dev_info.type = sqlite3_column_int(stmt, 1);
597 g_strlcpy(info->dev_info.mac, (char *)sqlite3_column_text(stmt, 2),
598 UAM_MAC_ADDRESS_STRING_LEN);
599 g_strlcpy(info->dev_info.ipv4_addr, (char *)sqlite3_column_text(stmt, 3),
600 UAM_IP_ADDRESS_MAX_STRING_LEN);
601 info->last_seen = sqlite3_column_int64(stmt, 4);
602 info->presence_state = sqlite3_column_int(stmt, 5);
603 info->dev_info.operating_system = sqlite3_column_int(stmt, 6);
604 info->user_id = sqlite3_column_int(stmt, 7);
605 info->dev_info.discriminant = sqlite3_column_int(stmt, 8);
606 memset(info->dev_info.payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
607 buf = (char *)sqlite3_column_text(stmt, 9);
608 info->dev_info.payload.service_id = buf ? *buf : 13;
609 buf = (char *)sqlite3_column_text(stmt, 10);
610 info->dev_info.payload.purpose = buf ? *buf : 1;
611 if ((char*)sqlite3_column_text(stmt, 11))
612 memcpy(info->dev_info.payload.duid, (char *)sqlite3_column_text(stmt, 11),
613 UAM_BLE_PAYLOAD_DUID_LEN);
614 buf = (char *)sqlite3_column_text(stmt, 12);
615 info->dev_info.payload.device_icon = buf ? *buf : 1;
617 UAM_INFO("%s-%d-%s-%s-%llu-%d-%d-%d-%d-0x%2.2X",
618 info->dev_info.device_id,
621 info->dev_info.ipv4_addr,
623 info->presence_state,
624 info->dev_info.operating_system,
626 info->dev_info.discriminant,
627 info->dev_info.payload.service_id);
636 int _uam_db_get_device_number(const char *device_id, int tech_type,
637 const char *address, int *device_number)
640 int error_code = UAM_ERROR_NONE;
641 sqlite3_stmt *stmt = select_device_number;
642 int sql_ret = SQLITE_OK;
644 retv_if(NULL == device_id, UAM_ERROR_INVALID_PARAMETER);
645 retv_if(NULL == address, UAM_ERROR_INVALID_PARAMETER);
647 UAM_INFO("UserId: %s", device_id);
649 DB_ACTION(sqlite3_bind_text(stmt, 1, device_id, -1, SQLITE_STATIC),
650 error_code, handle_error);
651 DB_ACTION(sqlite3_bind_int(stmt, 2, tech_type),
652 error_code, handle_error);
653 DB_ACTION(sqlite3_bind_text(stmt, 3, address, -1, SQLITE_STATIC),
654 error_code, handle_error);
657 sql_ret = sqlite3_step(stmt);
663 UAM_DBG("Device number info found");
664 *device_number = sqlite3_column_int(stmt, 0);
665 UAM_INFO("device_number %d", *device_number);
669 UAM_ERR("Failed to enumerate device info [%d:%s]",
670 sql_ret, sqlite3_errmsg(database_handle));
672 } while (sql_ret == SQLITE_ROW);
680 GSList *_uam_device_db_get_all_devices(void)
683 sqlite3_stmt *stmt = select_all_devices;
684 GSList *device_list = NULL;
685 db_device_info_t *info = NULL;
686 int sql_ret = SQLITE_OK;
690 sql_ret = sqlite3_step(stmt);
696 info = g_new0(db_device_info_t, 1);
697 g_strlcpy(info->dev_info.device_id, (char *)sqlite3_column_text(stmt, 0),
698 UAM_DEVICE_ID_MAX_STRING_LEN);
699 info->dev_info.type = sqlite3_column_int(stmt, 1);
700 g_strlcpy(info->dev_info.mac, (char *)sqlite3_column_text(stmt, 2),
701 UAM_MAC_ADDRESS_STRING_LEN);
702 g_strlcpy(info->dev_info.ipv4_addr, (char *)sqlite3_column_text(stmt, 3),
703 UAM_IP_ADDRESS_MAX_STRING_LEN);
704 info->last_seen = sqlite3_column_int64(stmt, 4);
705 info->presence_state = sqlite3_column_int(stmt, 5);
706 info->dev_info.operating_system = sqlite3_column_int(stmt, 6);
707 info->user_id = sqlite3_column_int(stmt, 7);
708 info->dev_info.discriminant = sqlite3_column_int(stmt, 8);
709 memset(info->dev_info.payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
710 buf = (char *)sqlite3_column_text(stmt, 9);
711 info->dev_info.payload.service_id = buf ? *buf : 13;
712 buf = (char *)sqlite3_column_text(stmt, 10);
713 info->dev_info.payload.purpose = buf ? *buf : 1;
714 if ((char*)sqlite3_column_text(stmt, 11))
715 memcpy(info->dev_info.payload.duid, (char *)sqlite3_column_text(stmt, 11),
716 UAM_BLE_PAYLOAD_DUID_LEN);
717 buf = (char *)sqlite3_column_text(stmt, 12);
718 info->dev_info.payload.device_icon = buf ? *buf : 1;
720 UAM_INFO("%s-%d-%s-%s-%llu-%d-%d-%d-%d-0x%2.2X",
721 info->dev_info.device_id,
724 info->dev_info.ipv4_addr,
726 info->presence_state,
727 info->dev_info.operating_system,
729 info->dev_info.discriminant,
730 info->dev_info.payload.service_id);
732 device_list = g_slist_append(device_list, info);
736 UAM_ERR("Failed to enumerate device info [%d:%s]",
737 sql_ret, sqlite3_errmsg(database_handle));
739 } while (sql_ret == SQLITE_ROW);
746 int _uam_device_db_clear(void)
748 int error_code = UAM_ERROR_NONE;
749 sqlite3_stmt *stmt = delete_all_devices;
750 int sql_ret = SQLITE_OK;
752 sql_ret = sqlite3_step(stmt);
753 if (sql_ret != SQLITE_DONE) {
754 UAM_ERR("Failed to delete device data [%d:%s]",
755 sql_ret, sqlite3_errmsg(database_handle));
756 error_code = UAM_ERROR_DB_FAILED;
759 UAM_DBG("Device data deleted ");