package org.libvirt; import org.libvirt.jna.Libvirt; import org.libvirt.jna.SecretPointer; import org.libvirt.jna.SizeT; import org.libvirt.jna.SizeTByReference; import static org.libvirt.Library.libvirt; import static org.libvirt.ErrorHandler.processError; import com.sun.jna.Native; import com.sun.jna.Pointer; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; /** * A secret defined by libvirt */ public class Secret { /** * the native virSecretPtr. */ SecretPointer vsp; /** * The Connect Object that represents the Hypervisor of this Domain */ private final Connect virConnect; Secret(final Connect virConnect, final SecretPointer vsp) { this.virConnect = virConnect; this.vsp = vsp; } @Override protected void finalize() throws LibvirtException { free(); } /** * Release the secret handle. The underlying secret continues to exist. * * @throws LibvirtException * @return ignore (always 0) */ public int free() throws LibvirtException { int success = 0; if (vsp != null) { success = processError(libvirt.virSecretFree(vsp)); vsp = null; } return success; } /** * Get the unique identifier of the object with which this secret is to be * used. * * @return a string identifying the object using the secret, or NULL upon * error * @throws LibvirtException */ public String getUsageID() throws LibvirtException { return processError(libvirt.virSecretGetUsageID(vsp)); } public SecretUsageType getUsageType() throws LibvirtException { final int ret = processError(libvirt.virSecretGetUsageType(this.vsp)); return Library.getConstant(SecretUsageType.class, ret); } /** * Get the UUID for this secret. * * @return the UUID as an unpacked int array * @throws LibvirtException * @see rfc4122 */ public int[] getUUID() throws LibvirtException { byte[] bytes = new byte[Libvirt.VIR_UUID_BUFLEN]; processError(libvirt.virSecretGetUUID(vsp, bytes)); return Connect.convertUUIDBytes(bytes); } /** * Gets the UUID for this secret as string. * * @return the UUID in canonical String format * @throws LibvirtException * @see rfc4122 */ public String getUUIDString() throws LibvirtException { byte[] bytes = new byte[Libvirt.VIR_UUID_STRING_BUFLEN]; processError(libvirt.virSecretGetUUIDString(vsp, bytes)); return Native.toString(bytes); } /** * Fetches the value of the secret as a string (note that * this may not always work and getByteValue() is more reliable) * This is just kept for backward compatibility * * @return the value of the secret, or null on failure. * @throws org.libvirt.LibvirtException */ public String getValue() throws LibvirtException { String returnValue; try { returnValue = new String(getByteValue(), "UTF-8"); } catch (UnsupportedEncodingException ex) { returnValue = null; } return returnValue; } /** * Fetches the value of the secret as a byte array * * @return the value of the secret, or null on failure. * @throws org.libvirt.LibvirtException */ public byte[] getByteValue() throws LibvirtException { SizeTByReference valueSize = new SizeTByReference(); Pointer value = processError(libvirt.virSecretGetValue(vsp, valueSize, 0)); ByteBuffer bb = value.getByteBuffer(0, valueSize.getValue()); byte[] returnValue = new byte[bb.remaining()]; bb.get(returnValue); return returnValue; } /** * Fetches an XML document describing attributes of the secret. * * @return the XML document * @throws org.libvirt.LibvirtException */ public String getXMLDesc() throws LibvirtException { return processError(libvirt.virSecretGetXMLDesc(vsp, 0)).toString(); } /** * Sets the value of the secret * * @param value * @return ignore (always 0) * @throws org.libvirt.LibvirtException */ public int setValue(final String value) throws LibvirtException { return processError(libvirt.virSecretSetValue(vsp, value, new SizeT(value.length()), 0)); } /** * Sets the value of the secret * * @param value * @return ignore (always 0) * @throws org.libvirt.LibvirtException */ public int setValue(final byte[] value) throws LibvirtException { return processError(libvirt.virSecretSetValue(vsp, value, new SizeT(value.length), 0)); } /** * Undefines, but does not free, the Secret. * * @return ignore (always 0) * @throws org.libvirt.LibvirtException */ public int undefine() throws LibvirtException { return processError(libvirt.virSecretUndefine(vsp)); } }