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));
}
示例#2
0
// 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");
}