void XSLoadHostThread::run() { QMutexLocker(data->xen_lock); emit progressChanged(0, trUtf8("Connecting to %1").arg(data->name)); data->session = xen_session_login_with_password(call_func, reinterpret_cast<void*>(data), data->username.toUtf8().data(), data->password.toUtf8().data(), xen_api_latest_version); if(data->session == nullptr) return error(trUtf8("Failed to connect to %1").arg(data->name), nullptr); data->connected = true; data->connect_button->setText(trUtf8("Disconnect")); emit progressChanged(10, trUtf8("Fetching Host")); xen_host host_handle = nullptr; if(!xen_session_get_this_host(data->session, &host_handle, data->session)) return error(trUtf8("Failed to fetch host!"), data->session); emit progressChanged(15, trUtf8("Fetching Data")); if(!xen_host_get_record(data->session, &data->data, host_handle)) return error(trUtf8("Failed to fetch data!"), data->session); emit progressChanged(20, trUtf8("Fetching VMs")); xen_vm_xen_vm_record_map *vms; if(!xen_vm_get_all_records(data->session, &vms)) return error(trUtf8("Failed to fetch VMs!"), data->session); data->vm_list_widget->clear(); data->vm_count = vms->size; data->vms = new xsvm_data*[vms->size]; for(size_t i = 0; i < data->vm_count; i++) { xen_vm_record *vm = vms->contents[i].val; xsvm_data *vm_data = new xsvm_data; vm_data->data = vm; vm_data->host = data; vm_data->tunnel = nullptr; vm_data->window = nullptr; data->vms[i] = vm_data; if(vm->is_a_snapshot || vm->is_a_template) continue; doInGUIThread([this,vm_data] { QListWidgetItem *item = new QListWidgetItem(QString::fromUtf8(vm_data->data->name_label), data->vm_list_widget); item->setData(Qt::UserRole, QVariant::fromValue(reinterpret_cast<void*>(vm_data))); }); } doInGUIThread([this] { data->vm_list_widget->setDisabled(false); }); emit progressChanged(100, trUtf8("Connected to %1").arg(data->name)); }
// automatically generated. Do not modify static void testVMs(xen_session *session) { printf("\nGet all the VM Records\n"); xen_vm_set *vm_set; bool d = xen_vm_get_all(session, &vm_set); if (d) { size_t i = 0; for (; i < vm_set->size; ++i) { xen_vm_record *vm_record; xen_vm_get_record(session, &vm_record, vm_set->contents[i]); char *handle = (char*) vm_record->handle; char *opaque = (char*) vm_set->contents[i]; if (strcmp(handle, opaque) == 0) printf("identical: %s\n", opaque); else printf("record->handle[%s] v.s. set->contents[%d][%s]\n", opaque, i, handle); xen_vm_record_free(vm_record); } } else { print_error(session); } xen_vm_set_free(vm_set); #if 0 printf("== Get All VM Records ============================\n\n"); xen_vm_xen_vm_record_map *result; bool ok = xen_vm_get_all_records(session, &result); if(!ok) { print_error(session); } size_t i=0; for(;i<result->size;++i) { xen_vm key = result->contents[i].key; struct xen_vm_record *val = result->contents[i].val; if(strcmp((char*)key, (char*)val->handle)==0) { } else { printf("%s v.s. %s", (char*)key, (char*)val->handle); } xen_vm_record_free(val); xen_vm_free(key); } free(result); #endif printf("\n==============================================\n\n"); }