int start_sdp_server(uint16_t mtu, uint32_t flags) { int compat = flags & SDP_SERVER_COMPAT; int master = flags & SDP_SERVER_MASTER; GIOChannel *io; info("Starting SDP server"); if (init_server(mtu, master, compat) < 0) { error("Server initialization failed"); return -1; } if (main_opts.did_source > 0) register_device_id(); io = g_io_channel_unix_new(l2cap_sock); g_io_channel_set_close_on_unref(io, TRUE); l2cap_id = g_io_add_watch(io, G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL, io_accept_event, &l2cap_sock); g_io_channel_unref(io); if (compat && unix_sock > fileno(stderr)) { io = g_io_channel_unix_new(unix_sock); g_io_channel_set_close_on_unref(io, TRUE); unix_id = g_io_add_watch(io, G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL, io_accept_event, &unix_sock); g_io_channel_unref(io); } return 0; }
int start_sdp_server(uint16_t mtu, const char *did, uint32_t flags) { int compat = flags & SDP_SERVER_COMPAT; int master = flags & SDP_SERVER_MASTER; GIOChannel *io; info("Starting SDP server"); if (init_server(mtu, master, compat) < 0) { error("Server initialization failed"); return -1; } if (did && strlen(did) > 0) { const char *ptr = did; uint16_t vid = 0x0000, pid = 0x0000, ver = 0x0000; vid = (uint16_t) strtol(ptr, NULL, 16); ptr = strchr(ptr, ':'); if (ptr) { pid = (uint16_t) strtol(ptr + 1, NULL, 16); ptr = strchr(ptr + 1, ':'); if (ptr) ver = (uint16_t) strtol(ptr + 1, NULL, 16); register_device_id(vid, pid, ver); } } io = g_io_channel_unix_new(l2cap_sock); g_io_channel_set_close_on_unref(io, TRUE); l2cap_id = g_io_add_watch(io, G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL, io_accept_event, &l2cap_sock); g_io_channel_unref(io); if (compat && unix_sock > fileno(stderr)) { io = g_io_channel_unix_new(unix_sock); g_io_channel_set_close_on_unref(io, TRUE); unix_id = g_io_add_watch(io, G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL, io_accept_event, &unix_sock); g_io_channel_unref(io); } return 0; }
static device_id_t get_device_id(bool do_regist) { char device[PROP_VALUE_MAX]; char build_id[PROP_VALUE_MAX]; device_id_t device_id; const char *check_name; char name_buf[PROP_NAME_MAX]; sqlite3_stmt *st; int rc; int i; if (!init_database()) { return DEVICE_NOT_SUPPORTED; } __system_property_get("ro.product.model", device); __system_property_get("ro.build.display.id", build_id); device_id = DEVICE_NOT_SUPPORTED; check_name = NULL; rc = sqlite3_prepare(db, SQL_QUERY_DEVICE, -1, &st, NULL); if (!IS_SQL_ERROR(rc)) { rc = sqlite3_reset(st); } if (!IS_SQL_ERROR(rc)) { rc = sqlite3_bind_text(st, 1, device, -1, SQLITE_STATIC); } if (!IS_SQL_ERROR(rc)) { rc = sqlite3_bind_text(st, 2, build_id, -1, SQLITE_STATIC); } if (!IS_SQL_ERROR(rc)) { for (rc = execute_sql(st); rc == SQLITE_ROW; rc = execute_sql(st)) { const char *check_value; device_id = sqlite3_column_int(st, 0); check_name = sqlite3_column_text(st, 1); check_value = sqlite3_column_text(st, 2); if (!check_name && !check_value) { break; } if (check_name && check_value) { char property_value[PROP_VALUE_MAX]; __system_property_get(check_name, property_value); if (strcmp(property_value, check_value) == 0) { break; } strncpy(name_buf, check_name, sizeof (name_buf) - 1); name_buf[sizeof (name_buf) - 1] = '\0'; check_name = name_buf; } device_id = DEVICE_NOT_SUPPORTED; } } if (IS_SQL_ERROR(rc)) { printf("%s(%d)\n", sqlite3_errmsg(db), sqlite3_errcode(db)); sqlite3_finalize(st); return device_id; } sqlite3_finalize(st); if (!do_regist || device_id != DEVICE_NOT_SUPPORTED) { return device_id; } return register_device_id(check_name); }