Result StoragePoolControlThread::getStoragePoolXMLDesc() { Result result; QString name = task.object; bool read = false; char *Returns = NULL; virStoragePoolPtr storagePool = virStoragePoolLookupByName( *task.srcConnPtr, name.toUtf8().data()); if ( storagePool!=NULL ) { Returns = (virStoragePoolGetXMLDesc(storagePool, VIR_STORAGE_XML_INACTIVE)); if ( Returns==NULL ) result.err = sendConnErrors(); else read = true; virStoragePoolFree(storagePool); } else result.err = sendConnErrors(); QTemporaryFile f; f.setAutoRemove(false); f.setFileTemplate(QString("%1%2XML_Desc-XXXXXX.xml") .arg(QDir::tempPath()).arg(QDir::separator())); read = f.open(); if (read) f.write(Returns); result.fileName.append(f.fileName()); f.close(); if ( Returns!=NULL ) free(Returns); result.msg.append(QString("'<b>%1</b>' StoragePool %2 XML'ed") .arg(name).arg((read)?"":"don't")); result.name = name; result.result = read; return result; }
Result StoragePoolControlThread::getAllStoragePoolDataList() { Result result; QStringList storagePoolDataList; if ( task.srcConnPtr!=NULL && keep_alive ) { virStoragePoolPtr *storagePool = NULL; unsigned int flags = VIR_CONNECT_LIST_STORAGE_POOLS_ACTIVE | VIR_CONNECT_LIST_STORAGE_POOLS_INACTIVE; int ret = virConnectListAllStoragePools( *task.srcConnPtr, &storagePool, flags); if ( ret<0 ) { result.err = sendConnErrors(); result.result = false; result.msg = storagePoolDataList; return result; }; // therefore correctly to use for() command, because storagePool[0] can not exist. for (int i = 0; i < ret; i++) { QStringList currentAttr; QString type, source, target; char *Returns = (virStoragePoolGetXMLDesc(storagePool[i], VIR_STORAGE_XML_INACTIVE)); if ( Returns!=NULL ) { QDomDocument doc; QString s; QTextStream str; str.setString(&s); doc.setContent(QString(Returns)); QDomElement _pool, _el; _pool= doc.firstChildElement("pool"); type = _pool.attribute("type"); _el = _pool.firstChildElement("source"); _el.save(str, 4); source = str.readAll(); _el = _pool.firstChildElement("target"); _el.save(str, 4); target = str.readAll(); free(Returns); }; currentAttr<< QString::fromUtf8( virStoragePoolGetName(storagePool[i]) ) << type << source << target; storagePoolDataList.append(currentAttr.join(DFR)); //qDebug()<<currentAttr; virStoragePoolFree(storagePool[i]); }; free(storagePool); result.result = true; } else { result.result = false; }; result.msg = storagePoolDataList; return result; }
QStringList StoragePoolControlThread::getStoragePoolXMLDesc() { QStringList result; QString name = args.first(); /* virStoragePoolPtr *storagePool; unsigned int flags = VIR_CONNECT_LIST_STORAGE_POOLS_ACTIVE | VIR_CONNECT_LIST_STORAGE_POOLS_INACTIVE; int ret = virConnectListAllStoragePools( currWorkConnect, &storagePool, flags); if ( ret<0 ) { sendConnErrors(); free(storagePool); return result; }; //qDebug()<<QString(virConnectGetURI(currWorkConnect)); int i = 0; */ bool read = false; char *Returns = NULL; /* while ( storagePool[i] != NULL ) { QString currNetName = QString( virStoragePoolGetName(storagePool[i]) ); if ( !read && currNetName==name ) { Returns = (virStoragePoolGetXMLDesc(storagePool[i], VIR_STORAGE_XML_INACTIVE)); if ( Returns==NULL ) sendGlobalErrors(); else read = true; }; virStoragePoolFree(storagePool[i]); i++; }; free(storagePool); */ virStoragePoolPtr storagePool = virStoragePoolLookupByName(currWorkConnect, name.toUtf8().data()); if ( storagePool!=NULL ) { Returns = (virStoragePoolGetXMLDesc(storagePool, VIR_STORAGE_XML_INACTIVE)); if ( Returns==NULL ) sendConnErrors(); else read = true; virStoragePoolFree(storagePool); } else sendConnErrors(); QTemporaryFile f; f.setAutoRemove(false); f.setFileTemplate(QString("%1%2XML_Desc-XXXXXX.xml").arg(QDir::tempPath()).arg(QDir::separator())); read = f.open(); if (read) f.write(Returns); result.append(f.fileName()); f.close(); free(Returns); result.append(QString("'<b>%1</b>' StoragePool %2 XML'ed").arg(name).arg((read)?"":"don't")); return result; }
/** * gvir_storage_pool_get_config: * @pool: the storage_pool * @flags: the flags * @err: Place-holder for possible errors * * Returns: (transfer full): the config. The returned object should be * unreffed with g_object_unref() when no longer needed. */ GVirConfigStoragePool *gvir_storage_pool_get_config(GVirStoragePool *pool, guint flags, GError **err) { GVirStoragePoolPrivate *priv; gchar *xml; g_return_val_if_fail(GVIR_IS_STORAGE_POOL(pool), NULL); g_return_val_if_fail(err == NULL || *err == NULL, NULL); priv = pool->priv; if (!(xml = virStoragePoolGetXMLDesc(priv->handle, flags))) { gvir_set_error_literal(err, GVIR_STORAGE_POOL_ERROR, 0, "Unable to get storage_pool XML config"); return NULL; } GVirConfigStoragePool *conf = gvir_config_storage_pool_new_from_xml(xml, err); free(xml); return conf; }