[libvirt] [PATCH] Auth code to review

Bryan Kearney bkearney at redhat.com
Sat Jul 25 12:02:14 UTC 2009


---
 src/org/libvirt/Connect.java                  |  187 ++++++++++++++---------
 src/org/libvirt/ConnectAuth.java              |   15 ++-
 src/org/libvirt/Domain.java                   |    7 +-
 src/org/libvirt/ErrorHandler.java             |    3 +-
 src/org/libvirt/Network.java                  |    5 +-
 src/org/libvirt/StoragePool.java              |  129 ++++++++++------
 src/org/libvirt/StoragePoolInfo.java          |    6 +
 src/org/libvirt/StorageVol.java               |   67 ++++++---
 src/org/libvirt/StorageVolInfo.java           |    6 +
 src/org/libvirt/jna/Libvirt.java              |  209 +++++++++++++++----------
 src/org/libvirt/jna/virConnectAuth.java       |   11 ++
 src/org/libvirt/jna/virConnectCredential.java |   12 ++
 src/test.java                                 |   16 +-
 13 files changed, 438 insertions(+), 235 deletions(-)
 create mode 100644 src/org/libvirt/jna/virConnectAuth.java
 create mode 100644 src/org/libvirt/jna/virConnectCredential.java

diff --git a/src/org/libvirt/Connect.java b/src/org/libvirt/Connect.java
index bab1d23..900f6fc 100644
--- a/src/org/libvirt/Connect.java
+++ b/src/org/libvirt/Connect.java
@@ -1,13 +1,22 @@
 package org.libvirt;
 
+import java.util.Arrays;
+
 import org.libvirt.LibvirtException;
 import org.libvirt.StoragePool;
 import org.libvirt.StorageVol;
+import org.libvirt.jna.ConnectionPointer;
+import org.libvirt.jna.DomainPointer;
 import org.libvirt.jna.Libvirt;
+import org.libvirt.jna.NetworkPointer;
+import org.libvirt.jna.StoragePoolPointer;
+import org.libvirt.jna.StorageVolPointer;
+import org.libvirt.jna.virConnectAuth;
 import org.libvirt.jna.virError;
 import org.libvirt.jna.virNodeInfo;
 
 import com.sun.jna.Native;
+import com.sun.jna.NativeLong;
 import com.sun.jna.Pointer;
 import com.sun.jna.ptr.ByReference;
 import com.sun.jna.ptr.LongByReference;
@@ -34,7 +43,7 @@ public class Connect {
 	/**
 	 * the native virConnectPtr.
 	 */
-	protected Pointer VCP;
+	protected ConnectionPointer VCP;
 
 
 	/**
@@ -82,8 +91,18 @@ public class Connect {
 	 * @see <a href="http://libvirt.org/uri.html">The URI documentation</a>
 	 */
 	public Connect(String uri, ConnectAuth auth, int flags) throws LibvirtException {
-        throw new RuntimeException("Not Implemented") ;      
-//		VCP = _openAuth(uri, auth, flags);
+		virConnectAuth vAuth = new virConnectAuth() ;
+		vAuth.cb = auth ;
+		vAuth.cbdata = null ;
+		vAuth.ncredtype = auth.credType.length ;
+		vAuth.credtype = new int[vAuth.ncredtype] ;
+		
+		for (int x = 0 ; x < vAuth.ncredtype ; x++) {
+			vAuth.credtype[x] = auth.credType[x].ordinal() ;
+		}
+		
+        VCP = libvirt.virConnectOpenAuth(uri, vAuth, flags) ;      
+        processError() ;
 	}
 
 	/**
@@ -378,7 +397,7 @@ public class Connect {
 	public Network networkLookupByName(String name)
 	throws LibvirtException {
 	    Network returnValue = null ;
-	    Pointer ptr = libvirt.virNetworkLookupByName(VCP, name) ;
+	    NetworkPointer ptr = libvirt.virNetworkLookupByName(VCP, name) ;
         processError() ;        	    
 	    if (ptr != null) {
 	        returnValue = new Network(this, ptr) ;
@@ -397,12 +416,9 @@ public class Connect {
 	 */
 	public Network networkLookupByUUID(int[] UUID)
 	throws LibvirtException {
-	    StringBuilder uuidString = new StringBuilder() ;
-	    for (int i : UUID) {
-	        uuidString.append(i) ;
-	    }
+        String uuidString = Connect.createUUIDString(UUID) ;
         Network returnValue = null ;
-        Pointer ptr = libvirt.virNetworkLookupByUUID(VCP, uuidString.toString()) ;
+        NetworkPointer ptr = libvirt.virNetworkLookupByUUID(VCP, uuidString) ;
         processError() ;        
         if (ptr != null) {
             returnValue = new Network(this, ptr) ;
@@ -421,7 +437,7 @@ public class Connect {
 	public Network networkLookupByUUIDString(String UUID)
 	throws LibvirtException {
         Network returnValue = null ;
-        Pointer ptr = libvirt.virNetworkLookupByUUIDString(VCP, UUID);
+        NetworkPointer ptr = libvirt.virNetworkLookupByUUIDString(VCP, UUID);
         processError() ;                
         if (ptr != null) {
             returnValue = new Network(this, ptr) ;
@@ -442,7 +458,7 @@ public class Connect {
 	public Network networkCreateXML(String xmlDesc)
 	throws LibvirtException {
         Network returnValue = null ;
-        Pointer ptr = libvirt.virNetworkCreateXML(VCP, xmlDesc) ;
+        NetworkPointer ptr = libvirt.virNetworkCreateXML(VCP, xmlDesc) ;
         processError() ;                
         if (ptr != null) {
             returnValue = new Network(this, ptr) ;
@@ -463,7 +479,7 @@ public class Connect {
 	public Network networkDefineXML(String xmlDesc)
 	throws LibvirtException {
         Network returnValue = null ;
-        Pointer ptr = libvirt.virNetworkDefineXML(VCP, xmlDesc) ;
+        NetworkPointer ptr = libvirt.virNetworkDefineXML(VCP, xmlDesc) ;
         processError() ;                
         if (ptr != null) {
             returnValue = new Network(this, ptr) ;
@@ -481,7 +497,7 @@ public class Connect {
 	 */
 	public Domain domainLookupByID(int id) throws LibvirtException {
         Domain returnValue = null ;
-        Pointer ptr = libvirt.virDomainLookupByID(VCP, id) ;
+        DomainPointer ptr = libvirt.virDomainLookupByID(VCP, id) ;
         processError() ;        
         if (ptr != null) {
             returnValue = new Domain(this, ptr) ;
@@ -499,7 +515,7 @@ public class Connect {
 	 */
 	public Domain domainLookupByName(String name) throws LibvirtException {
         Domain returnValue = null ;
-        Pointer ptr = libvirt.virDomainLookupByName(VCP, name) ;
+        DomainPointer ptr = libvirt.virDomainLookupByName(VCP, name) ;
         processError() ;                
         if (ptr != null) {
             returnValue = new Domain(this, ptr) ;
@@ -517,12 +533,9 @@ public class Connect {
 	 * @throws LibvirtException
 	 */
 	public Domain domainLookupByUUID(int[] UUID) throws LibvirtException {
-        StringBuilder uuidString = new StringBuilder() ;
-        for (int i : UUID) {
-            uuidString.append(i) ;
-        }
+        String uuidString = Connect.createUUIDString(UUID) ;
         Domain returnValue = null ;
-        Pointer ptr = libvirt.virDomainLookupByUUID(VCP, uuidString.toString()) ;
+        DomainPointer ptr = libvirt.virDomainLookupByUUID(VCP, uuidString) ;
         processError() ;        
         if (ptr != null) {
             returnValue = new Domain(this, ptr) ;
@@ -540,7 +553,7 @@ public class Connect {
 	public Domain domainLookupByUUIDString(String UUID)
 	throws LibvirtException {
         Domain returnValue = null ;
-        Pointer ptr = libvirt.virDomainLookupByUUIDString(VCP, UUID) ;
+        DomainPointer ptr = libvirt.virDomainLookupByUUIDString(VCP, UUID) ;
         processError() ;                
         if (ptr != null) {
             returnValue = new Domain(this, ptr) ;
@@ -563,7 +576,7 @@ public class Connect {
 	public Domain domainCreateLinux(String xmlDesc, int flags)
 	throws LibvirtException {
         Domain returnValue = null ;
-        Pointer ptr = libvirt.virDomainCreateLinux(VCP, xmlDesc, flags) ;
+        DomainPointer ptr = libvirt.virDomainCreateLinux(VCP, xmlDesc, flags) ;
         processError() ;                
         if (ptr != null) {
             returnValue = new Domain(this, ptr) ;
@@ -582,7 +595,7 @@ public class Connect {
 	 */
 	public Domain domainDefineXML(String xmlDesc) throws LibvirtException {
         Domain returnValue = null ;
-        Pointer ptr = libvirt.virDomainDefineXML(VCP, xmlDesc) ;
+        DomainPointer ptr = libvirt.virDomainDefineXML(VCP, xmlDesc) ;
         processError() ;                
         if (ptr != null) {
             returnValue = new Domain(this, ptr) ;
@@ -601,7 +614,7 @@ public class Connect {
      */
     public Domain domainCreateXML(String xmlDesc, int flags) throws LibvirtException {
         Domain returnValue = null ;
-        Pointer ptr = libvirt.virDomainCreateXML(VCP, xmlDesc, flags) ;
+        DomainPointer ptr = libvirt.virDomainCreateXML(VCP, xmlDesc, flags) ;
         processError() ;                
         if (ptr != null) {
             returnValue = new Domain(this, ptr) ;
@@ -617,12 +630,10 @@ public class Connect {
 	 * @throws LibvirtException
 	 */
 	public void restore(String from) throws LibvirtException {
-	    throw new RuntimeException("Not Implemented") ;
-//		_virDomainRestore(VCP, from);
+		libvirt.virDomainRestore(VCP, from);
+		processError() ;
 	}
 
-//	private native int _virDomainRestore(long VCP, String from)
-//	throws LibvirtException;
 
 	/**
 	 * Returns a NodeInfo object describing the hardware configuration of the node.
@@ -647,11 +658,10 @@ public class Connect {
 	 * @throws LibvirtException
 	 */
 	public void setDom0Memory(long memory) throws LibvirtException {
-	    throw new RuntimeException("Not Implemented") ;
-//		_setDom0Memory(memory);
+	    libvirt.virDomainSetMemory(null, new NativeLong(memory)) ;
+        processError() ;               	    
 	}
 
-//	private native int _setDom0Memory(long memory) throws LibvirtException;
 
 	/**
 	 * Provides the number of inactive storage pools
@@ -660,11 +670,11 @@ public class Connect {
 	 * @throws LibvirtException
 	 */
 	public int numOfDefinedStoragePools() throws LibvirtException {
-	    throw new RuntimeException("Not Implemented") ;
-//		return _numOfDefinedStoragePools(VCP);
+		int returnValue = libvirt.virConnectNumOfDefinedStoragePools(VCP);
+		processError() ;
+		return returnValue ;
 	}
 
-//	private native int _numOfDefinedStoragePools(long VCP) throws LibvirtException;
 
 	/**
 	 * Provides the number of active storage pools
@@ -673,11 +683,11 @@ public class Connect {
 	 * @throws LibvirtException
 	 */
 	public int numOfStoragePools() throws LibvirtException {
-	    throw new RuntimeException("Not Implemented") ;	    
-//		return _numOfStoragePools(VCP);
+        int returnValue = libvirt.virConnectNumOfStoragePools(VCP);
+        processError() ;
+        return returnValue ;
 	}
 
-//	private native int _numOfStoragePools(long VCP) throws LibvirtException;
 
 	/**
 	 * Provides the list of names of inactive storage pools.
@@ -686,12 +696,13 @@ public class Connect {
 	 * @throws LibvirtException
 	 */
 	public String[] listDefinedStoragePools() throws LibvirtException {
-	    throw new RuntimeException("Not Implemented") ;	    
-//		return _listDefinedStoragePools(VCP);
+	    int num = this.numOfDefinedStoragePools() ;
+	    String[] returnValue = new String[num] ;
+	    libvirt.virConnectListDefinedStoragePools(VCP, returnValue, num) ;
+	    processError() ;
+	    return returnValue ;
 	}
 
-//	private native String[] _listDefinedStoragePools(long VCP)
-//	throws LibvirtException;
 
 	/**
 	 * Provides the list of names of active storage pools.
@@ -700,12 +711,13 @@ public class Connect {
 	 * @throws LibvirtException
 	 */
 	public String[] listStoragePools() throws LibvirtException {
-	    throw new RuntimeException("Not Implemented") ;	    
-//		return _listStoragePools(VCP);
+        int num = this.numOfStoragePools() ;
+        String[] returnValue = new String[num] ;
+        libvirt.virConnectListStoragePools(VCP, returnValue, num) ;
+        processError() ;
+        return returnValue ;
 	}
 
-//	private native String[] _listStoragePools(long VCP)
-//	throws LibvirtException;
 
 	/**
 	 * Create a new storage based on its XML description.
@@ -718,12 +730,11 @@ public class Connect {
 	 */
 	public StoragePool storagePoolCreateXML(String xmlDesc, int flags)
 	throws LibvirtException {
-	    throw new RuntimeException("Not Implemented") ;
-//		return new StoragePool(this, _virStoragePoolCreateXML(VCP, xmlDesc, flags));
+	    StoragePoolPointer ptr = libvirt.virStoragePoolCreateXML(VCP, xmlDesc, flags) ;	    
+	    processError() ;
+	    return new StoragePool(this, ptr) ;
 	}
 
-//	private native long _virStoragePoolCreateXML(long VCP, String xmlDesc, int flags)
-//	throws LibvirtException;
 
 	/**
 	 * Define a new inactive storage pool based on its XML description.
@@ -736,12 +747,11 @@ public class Connect {
 	 */
 	public StoragePool storagePoolDefineXML(String xml, int flags)
 	throws LibvirtException {
-	    throw new RuntimeException("Not Implemented") ;	    
-//		return new StoragePool(this, _virStoragePoolDefineXML(VCP, xml, flags));
+        StoragePoolPointer ptr = libvirt.virStoragePoolDefineXML(VCP, xml, flags) ;     
+        processError() ;
+        return new StoragePool(this, ptr) ;
 	}
 
-//	private native long _virStoragePoolDefineXML(long VCP, String xml, int flags)
-//	throws LibvirtException;
 
 	/**
 	 * Fetch a storage pool based on its unique name
@@ -752,12 +762,11 @@ public class Connect {
 	 */
 	public StoragePool storagePoolLookupByName(String name)
 	throws LibvirtException {
-	    throw new RuntimeException("Not Implemented") ;	    
-//		return new StoragePool(this, _virStoragePoolLookupByName(VCP, name));
+        StoragePoolPointer ptr = libvirt.virStoragePoolLookupByName(VCP, name) ;     
+        processError() ;
+        return new StoragePool(this, ptr) ;
 	}
 
-//	private native long _virStoragePoolLookupByName(long VCP, String name)
-//	throws LibvirtException;
 
 	/**
 	 * Fetch a storage pool based on its globally unique id
@@ -768,11 +777,16 @@ public class Connect {
 	 */
 	public StoragePool storagePoolLookupByUUID(int[] UUID)
 	throws LibvirtException {
-	    throw new RuntimeException("Not Implemented") ;	    
-//		return new StoragePool(this, _virStoragePoolLookupByUUID(VCP, UUID));
+	    String uuidString = Connect.createUUIDString(UUID) ;
+        StoragePool returnValue = null ;
+        StoragePoolPointer ptr = libvirt.virStoragePoolLookupByUUID(VCP, uuidString) ;
+        processError() ;        
+        if (ptr != null) {
+            returnValue = new StoragePool(this, ptr) ;
+        }
+        return returnValue ;
 	}
 
-//	private native long _virStoragePoolLookupByUUID(long VCP, int[] UUID);
 
 	/**
 	 * Fetch a storage pool based on its globally unique id
@@ -782,13 +796,16 @@ public class Connect {
 	 * @throws LibvirtException
 	 */
 	public StoragePool storagePoolLookupByUUIDString(String UUID)
-	throws LibvirtException {
-	    throw new RuntimeException("Not Implemented") ;	    
-//		return new StoragePool(this, _virStoragePoolLookupByUUIDString(VCP, UUID));
+	throws LibvirtException {	    
+	    StoragePool returnValue = null ;
+	    StoragePoolPointer ptr = libvirt.virStoragePoolLookupByUUIDString(VCP, UUID) ;
+        processError() ;                
+        if (ptr != null) {
+            returnValue = new StoragePool(this, ptr) ;
+        }
+        return returnValue ;
 	}
 
-//	private native long _virStoragePoolLookupByUUIDString(long VCP, String UUID)
-//	throws LibvirtException;
 
 	/**
 	 * Fetch a a storage volume based on its globally unique key
@@ -796,12 +813,13 @@ public class Connect {
 	 * @param key globally unique key
 	 * @return a storage volume
 	 */
-	public StorageVol storageVolLookupByKey(String key){
-	    throw new RuntimeException("Not Implemented") ;
-//		return new StorageVol(this, _virStorageVolLookupByKey(VCP, key));
+	public StorageVol storageVolLookupByKey(String key) 
+	throws LibvirtException {
+        StorageVolPointer sPtr = libvirt.virStorageVolLookupByKey(VCP, key) ;
+        processError() ;
+        return new StorageVol(this, sPtr) ;
 	}
 
-//	private native long _virStorageVolLookupByKey(long VCP, String key);
 
 	/**
 	 * Fetch a storage volume based on its locally (host) unique path
@@ -809,18 +827,28 @@ public class Connect {
 	 * @param path locally unique path
 	 * @return	a storage volume
 	 */
-	public StorageVol storageVolLookupByPath(String path){
-	    throw new RuntimeException("Not Implemented") ;	    
-//		return new StorageVol(this, _virStorageVolLookupByPath(VCP, path));
+	public StorageVol storageVolLookupByPath(String path)
+    throws LibvirtException {
+        StorageVolPointer sPtr = libvirt.virStorageVolLookupByPath(VCP, path) ;
+        processError() ;
+        return new StorageVol(this, sPtr) ;
 	}
 
-//	private native long _virStorageVolLookupByPath(long VCP, String path);
-
 
+	/**
+	 * call the error handling logic. Should be called after
+	 * every libvirt call
+	 * @throws LibvirtException
+	 */
     protected void processError() throws LibvirtException {
         ErrorHandler.processError(libvirt, VCP) ;
     }
     
+    
+    /**
+     * Helper function to convert bytes into ints for the 
+     * UUID calls
+     */
     public static int[] convertUUIDBytes(byte bytes[]) {
         int[] returnValue = new int[Libvirt.VIR_UUID_BUFLEN] ;
         for (int x = 0 ; x < Libvirt.VIR_UUID_BUFLEN ; x++) {
@@ -828,5 +856,18 @@ public class Connect {
         }
         return returnValue ;
     }
+    
+    
+    /**
+     * Helper function to convert UUIDs into a stirng
+     * for the UUID calls
+     */    
+    public static String createUUIDString(int[] UUID) {
+        StringBuilder uuidString = new StringBuilder() ;
+        for (int i : UUID) {
+            uuidString.append(i) ;
+        }        
+        return uuidString.toString() ;
+    }
                       
 }
diff --git a/src/org/libvirt/ConnectAuth.java b/src/org/libvirt/ConnectAuth.java
index b18a47b..ad70365 100644
--- a/src/org/libvirt/ConnectAuth.java
+++ b/src/org/libvirt/ConnectAuth.java
@@ -1,5 +1,10 @@
 package org.libvirt;
 
+import org.libvirt.jna.Libvirt;
+import org.libvirt.jna.virConnectCredential;
+
+import com.sun.jna.Pointer;
+
 /**
  * We diverge from the C implementation
  * There is no explicit cbdata field, you should just add any extra data to the child class's instance.
@@ -7,7 +12,7 @@ package org.libvirt;
  * @author stoty
  *
  */
-public abstract class ConnectAuth {
+public abstract class ConnectAuth implements Libvirt.VirConnectAuthCallback {
 	/**
 	 * @author stoty
 	 *
@@ -126,6 +131,13 @@ public abstract class ConnectAuth {
 
 
 	}
+	
+
+	public int authCallback(virConnectCredential[] cred, int ncred, Pointer cbdata) {
+		System.out.println("HELLO!!!!!!!!!!!!!!!!!!!!!!!!!") ;
+		return 1 ;
+	}
+	
 	/**
 	 * List of supported ConnectCredential.CredentialType values
 	 */
@@ -137,4 +149,5 @@ public abstract class ConnectAuth {
 	 * @return 0 if the defresult field contains a vailde response, -1 otherwise
 	 */
 	public abstract int callback(Credential[] cred);
+	
 }
diff --git a/src/org/libvirt/Domain.java b/src/org/libvirt/Domain.java
index ab8cd94..6f57b96 100644
--- a/src/org/libvirt/Domain.java
+++ b/src/org/libvirt/Domain.java
@@ -1,5 +1,6 @@
 package org.libvirt;
 
+import org.libvirt.jna.DomainPointer;
 import org.libvirt.jna.Libvirt;
 import org.libvirt.jna.virDomainBlockStats;
 import org.libvirt.jna.virDomainInfo;
@@ -39,7 +40,7 @@ public class Domain {
 	/**
 	 * the native virDomainPtr.
 	 */
-	private Pointer  VDP;
+	private DomainPointer  VDP;
 
 	/**
 	 * The Connect Object that represents the Hypervisor of this Domain
@@ -59,7 +60,7 @@ public class Domain {
 	 * @param virConnect the Domain's hypervisor
 	 * @param VDP the native virDomainPtr
 	 */
-	Domain(Connect virConnect, Pointer VDP){
+	Domain(Connect virConnect, DomainPointer VDP){
 		this.virConnect = virConnect;
 		this.VDP = VDP;
         this.libvirt = virConnect.libvirt ;		
@@ -540,7 +541,7 @@ public class Domain {
 	 * @throws LibvirtException
 	 */
 	public Domain migrate(Connect dconn, long flags, String dname, String uri, long bandwidth) throws LibvirtException{
-	    Pointer newPtr = libvirt.virDomainMigrate(VDP, dconn.VCP, new NativeLong(flags), dname, uri, new NativeLong(bandwidth)) ;
+	    DomainPointer newPtr = libvirt.virDomainMigrate(VDP, dconn.VCP, new NativeLong(flags), dname, uri, new NativeLong(bandwidth)) ;
 	    processError() ;
 	    return new Domain(dconn, newPtr) ;  
 	}
diff --git a/src/org/libvirt/ErrorHandler.java b/src/org/libvirt/ErrorHandler.java
index 7f77937..2cc260a 100644
--- a/src/org/libvirt/ErrorHandler.java
+++ b/src/org/libvirt/ErrorHandler.java
@@ -1,5 +1,6 @@
 package org.libvirt;
 
+import org.libvirt.jna.ConnectionPointer;
 import org.libvirt.jna.Libvirt;
 import org.libvirt.jna.virError;
 
@@ -18,7 +19,7 @@ public class ErrorHandler
         }        
     }
     
-    public static void processError(Libvirt libvirt, Pointer conn) throws LibvirtException
+    public static void processError(Libvirt libvirt, ConnectionPointer conn) throws LibvirtException
     {
         virError vError = new virError() ;
         int errorCode = libvirt.virConnCopyLastError(conn, vError) ;
diff --git a/src/org/libvirt/Network.java b/src/org/libvirt/Network.java
index c18f239..39afde2 100644
--- a/src/org/libvirt/Network.java
+++ b/src/org/libvirt/Network.java
@@ -1,6 +1,7 @@
 package org.libvirt;
 
 import org.libvirt.jna.Libvirt;
+import org.libvirt.jna.NetworkPointer;
 
 import com.sun.jna.Native;
 import com.sun.jna.Pointer;
@@ -12,7 +13,7 @@ public class Network {
 	/**
 	 * The native virNetworkPtr
 	 */
-	protected Pointer VNP;
+	protected NetworkPointer VNP;
 	
 	/**
 	 * The Connect Object that represents the Hypervisor of this Network
@@ -31,7 +32,7 @@ public class Network {
 	 * @param virConnect
 	 * @param VNP
 	 */
-	Network(Connect virConnect, Pointer VNP){	
+	Network(Connect virConnect, NetworkPointer VNP){	
 		this.virConnect = virConnect;
 		this.VNP = VNP;
 		this.libvirt = virConnect.libvirt ;
diff --git a/src/org/libvirt/StoragePool.java b/src/org/libvirt/StoragePool.java
index 6fc3db4..5ef5423 100644
--- a/src/org/libvirt/StoragePool.java
+++ b/src/org/libvirt/StoragePool.java
@@ -1,5 +1,13 @@
 package org.libvirt;
 
+import org.libvirt.jna.Libvirt;
+import org.libvirt.jna.StoragePoolPointer;
+import org.libvirt.jna.StorageVolPointer;
+import org.libvirt.jna.virStoragePoolInfo;
+
+import com.sun.jna.Native;
+import com.sun.jna.ptr.IntByReference;
+
 public class StoragePool {
 
 	static final class BuildFlags{
@@ -31,12 +39,17 @@ public class StoragePool {
 	/**
 	 * the native virStoragePoolPtr.
 	 */
-	private long  VSPP;
+	protected StoragePoolPointer  VSPP;
 
 	/**
 	 * The VirConnect Object that represents the Hypervisor of this Domain
 	 */
-	private Connect virConnect;
+	protected Connect virConnect;
+	
+	/**
+	 * the libvirt instance
+	 */
+	protected Libvirt libvirt ;
 
 
 	/**
@@ -46,9 +59,10 @@ public class StoragePool {
 	 * @param virConnect the Domain's hypervisor
 	 * @param VSPP the native virStoragePoolPtr
 	 */
-	StoragePool(Connect virConnect, long VSPP){
+	StoragePool(Connect virConnect, StoragePoolPointer VSPP){
 		this.virConnect = virConnect;
 		this.VSPP = VSPP;
+		this.libvirt = virConnect.libvirt ;
 	}
 
 	/**
@@ -57,10 +71,10 @@ public class StoragePool {
 	 * @param flags future flags, use 0 for now
 	 */
 	public void build(int flags) throws LibvirtException{
-		_build(VSPP, flags);
+		libvirt.virStoragePoolBuild(VSPP, flags);
+		processError() ;
 	}
 
-	private native int _build(long VSPP, int flags) throws LibvirtException;
 
 	/**
 	 * Starts this inactive storage pool
@@ -68,11 +82,11 @@ public class StoragePool {
 	 * @param flags future flags, use 0 for now
 	 */
 	public void create(int flags) throws LibvirtException{
-		_create(VSPP, flags);
+        libvirt.virStoragePoolCreate(VSPP, flags);
+        processError() ;
 	}
 
-	private native int _create(long VSPP, int flags) throws LibvirtException;
-
+	
 	/**
 	 * Delete the underlying pool resources. This is a non-recoverable operation.
 	 * The virStoragePool object itself is not free'd.
@@ -80,10 +94,10 @@ public class StoragePool {
 	 * @param flags flags for obliteration process
 	 */
 	public void delete(int flags) throws LibvirtException{
-		_delete(VSPP, flags);
+        libvirt.virStoragePoolDelete(VSPP, flags);
+        processError() ;
 	}
 
-	private native int _delete(long VSPP, int flags) throws LibvirtException;
 
 	/**
 	 * Destroy an active storage pool.
@@ -92,20 +106,20 @@ public class StoragePool {
 	 * This does not free the associated virStoragePoolPtr object.
 	 */
 	public void destroy() throws LibvirtException{
-		_destroy(VSPP);
+        libvirt.virStoragePoolDestroy(VSPP);
+        processError() ;
 	}
 
-	private native int _destroy(long VSPP) throws LibvirtException;
 
 	/**
 	 * Free a storage pool object, releasing all memory associated with it.
 	 * Does not change the state of the pool on the host.
 	 */
 	public void free() throws LibvirtException{
-		_free(VSPP);
+        libvirt.virStoragePoolFree(VSPP);
+        processError() ;
 	}
 
-	private native int _free(long VSPP) throws LibvirtException;
 
 
 	/**
@@ -115,10 +129,12 @@ public class StoragePool {
 	 * @throws LibvirtException
 	 */
 	public boolean getAutostart() throws LibvirtException{
-		return _getAutostart(VSPP);
+        IntByReference autoStart = new IntByReference() ;
+        libvirt.virStoragePoolGetAutostart(VSPP, autoStart) ;
+        processError() ;        
+        return autoStart.getValue() != 0 ? true : false ;
 	}
 
-	private native boolean _getAutostart(long VSPP) throws LibvirtException;
 
 	/**
 	 * Provides the connection pointer associated with a storage pool.
@@ -128,6 +144,8 @@ public class StoragePool {
 	public Connect getConnect(){
 		return virConnect;
 	}
+	
+	
 	/**
 	 * Get volatile information about the storage pool such as free space / usage summary
 	 *
@@ -135,10 +153,12 @@ public class StoragePool {
 	 * @throws LibvirtException
 	 */
 	public StoragePoolInfo getInfo() throws LibvirtException{
-		return _getInfo(VSPP);
+		virStoragePoolInfo vInfo = new virStoragePoolInfo() ;
+		libvirt.virStoragePoolGetInfo(VSPP, vInfo ) ;
+		processError() ;
+		return new StoragePoolInfo(vInfo) ;
 	}
 
-	private native StoragePoolInfo _getInfo(long VSPP) throws LibvirtException;
 
 	/**
 	 * Fetch the locally unique name of the storage pool
@@ -147,10 +167,11 @@ public class StoragePool {
 	 * @throws LibvirtException
 	 */
 	public String getName() throws LibvirtException{
-		return _getName(VSPP);
+		String returnValue = libvirt.virStoragePoolGetName(VSPP) ;
+		processError() ;
+		return returnValue ;
 	}
 
-	private native String _getName(long VSPP) throws LibvirtException;
 
 	/**
 	 * Fetch the globally unique ID of this storage pool
@@ -159,11 +180,16 @@ public class StoragePool {
 	 * @throws LibvirtException
 	 */
 	public int[] getUUID() throws LibvirtException{
-		return _getUUID(VSPP);
+        byte[] bytes = new byte[Libvirt.VIR_UUID_BUFLEN] ;
+        int success = libvirt.virStoragePoolGetUUID(VSPP, bytes) ;
+        processError() ;        
+        int[] returnValue = new int[0] ; 
+        if (success == 0) {
+            returnValue = Connect.convertUUIDBytes(bytes) ;
+        }
+        return returnValue ;   
 	}
 
-	private native int[] _getUUID(long VSPP) throws LibvirtException;
-
 
 	/**
 	 * Fetch the globally unique ID of the storage pool as a string
@@ -172,10 +198,16 @@ public class StoragePool {
 	 * @throws LibvirtException
 	 */
 	public String getUUIDString() throws LibvirtException{
-		return _getUUIDString(VSPP);
+        byte[] bytes = new byte[Libvirt.VIR_UUID_STRING_BUFLEN] ;
+        int success = libvirt.virStoragePoolGetUUIDString(VSPP, bytes) ;
+        processError() ;        
+        String returnValue = null ; 
+        if (success == 0) {
+            returnValue = Native.toString(bytes) ;
+        }
+        return returnValue ;       
 	}
 
-	private native String _getUUIDString(long VSPP) throws LibvirtException;
 
 	/**
 	 * Fetch an XML document describing all aspects of the storage pool.
@@ -186,10 +218,11 @@ public class StoragePool {
 	 *-java @throws LibvirtException
 	 */
 	public String getXMLDesc(int flags) throws LibvirtException{
-		return _getXMLDesc(VSPP, flags);
+        String returnValue = libvirt.virStoragePoolGetXMLDesc(VSPP, flags) ;
+        processError() ;
+        return returnValue  ;
 	}
 
-	private native String _getXMLDesc(long VSPP, int flags) throws LibvirtException;
 
 	/**
 	 * Fetch list of storage volume names
@@ -198,11 +231,13 @@ public class StoragePool {
 	 * @throws LibvirtException
 	 */
 	public String[] listVolumes() throws LibvirtException {
-		return _listVolumes(VSPP);
+		int num = this.numOfVolumes() ;
+		String[] returnValue = new String[num] ;
+		libvirt.virStoragePoolListVolumes(VSPP, returnValue, num) ;
+		processError() ;
+		return returnValue ;
 	}
 
-	private native String[] _listVolumes(long VSPP)
-	throws LibvirtException;
 
 	/**
 	 * Fetch the number of storage volumes within a pool
@@ -211,10 +246,11 @@ public class StoragePool {
 	 * @throws LibvirtException
 	 */
 	public int numOfVolumes() throws LibvirtException {
-		return _numOfVolumes(VSPP);
+		int returnValue = libvirt.virStoragePoolNumOfVolumes(VSPP) ;
+		processError() ;
+		return returnValue ;
 	}
 
-	private native int _numOfVolumes(long VSPP) throws LibvirtException;
 
 	/**
 	 * Request that the pool refresh its list of volumes.
@@ -224,10 +260,10 @@ public class StoragePool {
 	 * @throws LibvirtException
 	 */
 	public void refresh(int flags) throws LibvirtException {
-		_refresh(VSPP, flags);
+        libvirt.virStoragePoolRefresh(VSPP) ;
+        processError() ;
 	}
 
-	private native int _refresh(long VSPP, int flags) throws LibvirtException;
 
 	/**
 	 * Sets the autostart flag
@@ -236,10 +272,9 @@ public class StoragePool {
 	 * @throws LibvirtException
 	 */
 	public void setAutostart(int autostart) throws LibvirtException {
-		_setAutostart(VSPP, autostart);
+		libvirt.virStoragePoolSetAutostart(VSPP, autostart) ;
 	}
 
-	private native int _setAutostart(long VSPP, int autostart) throws LibvirtException;
 
 	/**
 	 * Undefine an inactive storage pool
@@ -247,10 +282,10 @@ public class StoragePool {
 	 * @throws LibvirtException
 	 */
 	public void undefine() throws LibvirtException {
-		_undefine(VSPP);
+        libvirt.virStoragePoolUndefine(VSPP) ;
+        processError() ;
 	}
-
-	private native int _undefine(long VSPP) throws LibvirtException;
+	
 
 	/**
 	 * Fetch an object representing to a storage volume based on its name within a pool
@@ -261,11 +296,11 @@ public class StoragePool {
 	 */
 	public StorageVol storageVolLookupByName(String name)
 	throws LibvirtException {
-		return new StorageVol(virConnect, _storageVolLookupByName(VSPP, name));
+        StorageVolPointer sPtr = libvirt.virStorageVolLookupByName(VSPP, name) ;
+        processError() ;
+        return new StorageVol(virConnect, sPtr) ;
 	}
 
-	private native long _storageVolLookupByName(long VSPP, String name)
-	throws LibvirtException;
 
 	/**
 	 * Create a storage volume within a pool based on an XML description. Not all pools support creation of volumes
@@ -277,10 +312,14 @@ public class StoragePool {
 	 */
 	public StorageVol storageVolCreateXML(String xmlDesc, int flags)
 	throws LibvirtException {
-		return new StorageVol(virConnect, _storageVolCreateXML(VSPP, xmlDesc, flags));
+	    StorageVolPointer sPtr = libvirt.virStorageVolCreateXML(VSPP, xmlDesc, flags) ;
+	    processError() ;
+		return new StorageVol(virConnect, sPtr) ;
 	}
 
-	private native long _storageVolCreateXML(long VSPP, String xmlDesc, int flags)
-	throws LibvirtException;
+	
+    protected void processError() throws LibvirtException {
+        virConnect.processError() ;
+    }   	
 
 }
diff --git a/src/org/libvirt/StoragePoolInfo.java b/src/org/libvirt/StoragePoolInfo.java
index 33a3758..2b5b601 100644
--- a/src/org/libvirt/StoragePoolInfo.java
+++ b/src/org/libvirt/StoragePoolInfo.java
@@ -1,5 +1,7 @@
 package org.libvirt;
 
+import org.libvirt.jna.virStoragePoolInfo;
+
 public class StoragePoolInfo {
 
 	/**
@@ -61,6 +63,10 @@ public class StoragePoolInfo {
 		this.allocation = allocation;
 		this.available = available;
 	}
+	
+	StoragePoolInfo(virStoragePoolInfo vInfo) {
+	    this(vInfo.state, vInfo.capacity, vInfo.allocation, vInfo.available) ;
+	}
 
 	public String toString(){
 		StringBuffer result = new StringBuffer("");
diff --git a/src/org/libvirt/StorageVol.java b/src/org/libvirt/StorageVol.java
index 97694e1..0eb4efb 100644
--- a/src/org/libvirt/StorageVol.java
+++ b/src/org/libvirt/StorageVol.java
@@ -1,5 +1,10 @@
 package org.libvirt;
 
+import org.libvirt.jna.Libvirt;
+import org.libvirt.jna.StoragePoolPointer;
+import org.libvirt.jna.StorageVolPointer;
+import org.libvirt.jna.virStorageVolInfo;
+
 public class StorageVol {
 
 	static final class DeleteFlags{
@@ -27,12 +32,17 @@ public class StorageVol {
 	/**
 	 * the native virStorageVolPtr.
 	 */
-	private long  VSVP;
+	protected StorageVolPointer  VSVP;
 
 	/**
 	 * The VirConnect Object that represents the Hypervisor of this Domain
 	 */
-	private Connect virConnect;
+	protected Connect virConnect;
+	
+    /**
+     * the libvirt instance
+     */
+    protected Libvirt libvirt ;	
 
 
 	/**
@@ -42,9 +52,10 @@ public class StorageVol {
 	 * @param virConnect the Domain's hypervisor
 	 * @param VSVP the native virStorageVolPtr
 	 */
-	StorageVol(Connect virConnect, long VSVP){
+	StorageVol(Connect virConnect, StorageVolPointer VSVP){
 		this.virConnect = virConnect;
 		this.VSVP = VSVP;
+		this.libvirt = virConnect.libvirt ;
 	}
 
 	/**
@@ -55,11 +66,11 @@ public class StorageVol {
 	 */
 	public StoragePool storagePoolLookupByVolume()
 	throws LibvirtException {
-		return new StoragePool(virConnect, _storagePoolLookupByVolume(VSVP));
+	    StoragePoolPointer ptr = libvirt.virStoragePoolLookupByVolume(VSVP) ;
+	    processError() ;
+	    return new StoragePool(virConnect, ptr) ;
 	}
-
-	private native long _storagePoolLookupByVolume(long VSVP)
-	throws LibvirtException;
+	
 
 	/**
 	 * Delete the storage volume from the pool
@@ -68,10 +79,10 @@ public class StorageVol {
 	 * @throws LibvirtException
 	 */
 	public void delete(int flags) throws LibvirtException{
-		_delete(VSVP, flags);
+		libvirt.virStorageVolDelete(VSVP, flags) ;
+		processError() ;
 	}
 
-	private native int _delete(long VSVP, int flags) throws LibvirtException;
 
 	/**
 	 * Release the storage volume handle. The underlying storage volume contains to exist
@@ -79,10 +90,10 @@ public class StorageVol {
 	 * @throws LibvirtException
 	 */
 	public void free() throws LibvirtException{
-		_free(VSVP);
+        libvirt.virStorageVolFree(VSVP) ;
+        processError() ;
 	}
 
-	private native int _free(long VSVP) throws LibvirtException;
 
 	/**
 	 * Provides the connection object associated with a storage volume. The reference counter on the connection is not increased by this call.
@@ -100,10 +111,12 @@ public class StorageVol {
 	 * @throws LibvirtException
 	 */
 	public StorageVolInfo getInfo() throws LibvirtException{
-		return _getInfo(VSVP);
+	    virStorageVolInfo vInfo = new virStorageVolInfo() ;
+	    libvirt.virStorageVolGetInfo(VSVP, vInfo) ;
+	    processError() ;
+		return new StorageVolInfo(vInfo) ;
 	}
 
-	private native StorageVolInfo _getInfo(long VSVP) throws LibvirtException;
 
 	/**
 	 * Fetch the storage volume key. This is globally unique, so the same volume will have the same key no matter what host it is accessed from
@@ -112,10 +125,11 @@ public class StorageVol {
 	 * @throws LibvirtException
 	 */
 	public String getKey() throws LibvirtException{
-		return _getKey(VSVP);
+		String returnValue = libvirt.virStorageVolGetKey(VSVP) ;
+		processError() ;
+		return returnValue ;
 	}
 
-	private native String _getKey(long VSVP) throws LibvirtException;
 
 	/**
 	 * Fetch the storage volume name. This is unique within the scope of a pool
@@ -124,10 +138,11 @@ public class StorageVol {
 	 * @throws LibvirtException
 	 */
 	public String getName() throws LibvirtException{
-		return _getName(VSVP);
+		String returnValue = libvirt.virStorageVolGetName(VSVP) ;
+		processError() ;
+		return returnValue ;
 	}
 
-	private native String _getName(long VSVP) throws LibvirtException;
 
 	/**
 	 * Fetch the storage volume path.
@@ -138,10 +153,11 @@ public class StorageVol {
 	 * @throws LibvirtException
 	 */
 	public String getPath() throws LibvirtException{
-		return _getPath(VSVP);
+		String returnValue = libvirt.virStorageVolGetPath(VSVP) ;
+		processError() ;
+		return returnValue ;
 	}
 
-	private native String _getPath(long VSVP) throws LibvirtException;
 
 	/**
 	 * Fetch an XML document describing all aspects of this storage volume
@@ -151,8 +167,17 @@ public class StorageVol {
 	 * @throws LibvirtException
 	 */
 	public String getXMLDesc(int flags) throws LibvirtException{
-		return _getXMLDesc(VSVP, flags);
+		String returnValue = libvirt.virStorageVolGetXMLDesc(VSVP, flags) ;
+		processError() ;
+		return returnValue ;
 	}
 
-	private native String _getXMLDesc(long VSVP, int flags) throws LibvirtException;
+
+	/**
+	 * Error handling logic which should be called after every libvirt call
+	 * @throws LibvirtException
+	 */
+    protected void processError() throws LibvirtException {
+        virConnect.processError() ;
+    }       	
 }
diff --git a/src/org/libvirt/StorageVolInfo.java b/src/org/libvirt/StorageVolInfo.java
index e63b823..9887d4a 100644
--- a/src/org/libvirt/StorageVolInfo.java
+++ b/src/org/libvirt/StorageVolInfo.java
@@ -1,5 +1,7 @@
 package org.libvirt;
 
+import org.libvirt.jna.virStorageVolInfo;
+
 public class StorageVolInfo {
 
 	/**
@@ -42,6 +44,10 @@ public class StorageVolInfo {
 		this.capacity = capacity;
 		this.allocation = allocation;
 	}
+	
+	StorageVolInfo(virStorageVolInfo volInfo) {
+	    this(volInfo.type, volInfo.capacity, volInfo.allocation) ;
+	}
 
 	public String toString(){
 		StringBuffer result = new StringBuffer("");
diff --git a/src/org/libvirt/jna/Libvirt.java b/src/org/libvirt/jna/Libvirt.java
index ec67c6f..1d51e2d 100644
--- a/src/org/libvirt/jna/Libvirt.java
+++ b/src/org/libvirt/jna/Libvirt.java
@@ -2,14 +2,12 @@ package org.libvirt.jna;
 
 
 import com.sun.jna.Callback;
-import com.sun.jna.Library ;
+import com.sun.jna.Library;
 import com.sun.jna.Native;
 import com.sun.jna.NativeLong;
 import com.sun.jna.Pointer;
-import com.sun.jna.Structure.ByReference;
 import com.sun.jna.ptr.IntByReference;
 import com.sun.jna.ptr.LongByReference;
-import com.sun.jna.ptr.PointerByReference;
 
 public interface Libvirt extends Library
 {
@@ -28,88 +26,137 @@ public interface Libvirt extends Library
     public void virResetLastError() ;
     
     //Connection Functions
-    public int virConnCopyLastError(Pointer virConnectPtr, virError to) ;        
-    public int virConnectClose(Pointer virConnectPtr) ;    
-    public String virConnectGetCapabilities(Pointer virConnectPtr) ;
-    public String virConnectGetHostname(Pointer virConnectPtr) ;    
-    public virError virConnGetLastError(Pointer virConnectPtr)  ;    
-    public int virConnectGetMaxVcpus(Pointer virConnectPtr, String type) ;
-    public String virConnectGetType(Pointer virConnectPtr) ;
-    public String virConnectGetURI(Pointer virConnectPtr) ; 
-    public int virConnectGetVersion(Pointer virConnectPtr, LongByReference hvVer) ;  
-    public int virConnectListDomains(Pointer virConnectPtr, int[] ids, int maxnames) ;
-    public int virConnectListNetworks(Pointer virConnectPtr, String[] name, int maxnames) ;       
-    public int virConnectListDefinedDomains(Pointer virConnectPtr, String[] name, int maxnames) ;
-    public int virConnectListDefinedNetworks(Pointer virConnectPtr, String[] name, int maxnames) ;    
-    public int virConnectNumOfDomains(Pointer virConnectPtr) ;
-    public int virConnectNumOfDefinedDomains(Pointer virConnectPtr) ;    
-    public int virConnectNumOfDefinedNetworks(Pointer virConnectPtr) ;
-    public int virConnectNumOfNetworks(Pointer virConnectPtr) ;    
-    public int virConnResetLastError(Pointer virConnectPtr) ;    
-    public Pointer virConnectOpen(String name) ;
-    public Pointer virConnectOpenReadOnly(String name) ;
+    public int virConnCopyLastError(ConnectionPointer virConnectPtr, virError to) ;        
+    public int virConnectClose(ConnectionPointer virConnectPtr) ;    
+    public String virConnectGetCapabilities(ConnectionPointer virConnectPtr) ;
+    public String virConnectGetHostname(ConnectionPointer virConnectPtr) ;    
+    public virError virConnGetLastError(ConnectionPointer virConnectPtr)  ;    
+    public int virConnectGetMaxVcpus(ConnectionPointer virConnectPtr, String type) ;
+    public String virConnectGetType(ConnectionPointer virConnectPtr) ;
+    public String virConnectGetURI(ConnectionPointer virConnectPtr) ; 
+    public int virConnectGetVersion(ConnectionPointer virConnectPtr, LongByReference hvVer) ;  
+    public int virConnectListDomains(ConnectionPointer virConnectPtr, int[] ids, int maxnames) ;
+    public int virConnectListNetworks(ConnectionPointer virConnectPtr, String[] name, int maxnames) ;
+    public int virConnectListStoragePools(ConnectionPointer virConnectPtr, String[] names, int maxnames) ;    
+    public int virConnectListDefinedStoragePools(ConnectionPointer virConnectPtr, String[] names, int maxnames) ;    
+    public int virConnectListDefinedDomains(ConnectionPointer virConnectPtr, String[] name, int maxnames) ;
+    public int virConnectListDefinedNetworks(ConnectionPointer virConnectPtr, String[] name, int maxnames) ;    
+    public int virConnectNumOfDomains(ConnectionPointer virConnectPtr) ;
+    public int virConnectNumOfDefinedDomains(ConnectionPointer virConnectPtr) ;    
+    public int virConnectNumOfDefinedNetworks(ConnectionPointer virConnectPtr) ;
+    public int virConnectNumOfDefinedStoragePools(ConnectionPointer virConnectPtr) ;      
+    public int virConnectNumOfNetworks(ConnectionPointer virConnectPtr) ;
+    public int virConnectNumOfStoragePools(ConnectionPointer virConnectPtr) ;    
+    public int virConnResetLastError(ConnectionPointer virConnectPtr) ;    
+    public ConnectionPointer virConnectOpen(String name) ;
+    public ConnectionPointer virConnectOpenAuth(String name, virConnectAuth auth, int flags) ;
+    public ConnectionPointer virConnectOpenReadOnly(String name) ;
     
     // Node functions
-    public int virNodeGetInfo(Pointer virConnectPtr, virNodeInfo virNodeInfo) ;
+    public int virNodeGetInfo(ConnectionPointer virConnectPtr, virNodeInfo virNodeInfo) ;
+    
+    // Storage Pool            
+    public int virStoragePoolBuild(StoragePoolPointer storagePoolPtr, int flags) ;
+    public int virStoragePoolCreate(StoragePoolPointer storagePoolPtr, int flags) ;
+    public StoragePoolPointer virStoragePoolCreateXML(ConnectionPointer virConnectPtr, String xml, int flags) ; 
+    public StoragePoolPointer virStoragePoolDefineXML(ConnectionPointer virConnectPtr, String xml, int flags) ;     
+    public int virStoragePoolDelete(StoragePoolPointer storagePoolPtr, int flags) ;
+    public int virStoragePoolDestroy(StoragePoolPointer storagePoolPtr) ;
+    public int virStoragePoolFree(StoragePoolPointer storagePoolPtr) ;     
+    public int virStoragePoolGetAutostart(StoragePoolPointer storagePoolPtr, IntByReference value) ;   
+    public int virStoragePoolGetInfo(StoragePoolPointer storagePoolPtr, virStoragePoolInfo info) ;   
+    public String virStoragePoolGetName(StoragePoolPointer storagePoolPtr) ;
+    public int virStoragePoolGetUUID(StoragePoolPointer storagePoolPtr, byte[] uuidString) ;    
+    public int virStoragePoolGetUUIDString(StoragePoolPointer storagePoolPtr, byte[] uuidString) ;
+    public String virStoragePoolGetXMLDesc(StoragePoolPointer storagePoolPtr, int flags) ;    
+    public int virStoragePoolListVolumes(StoragePoolPointer storagePoolPtr, String[] names, int maxnames) ;     
+    public StoragePoolPointer virStoragePoolLookupByName(ConnectionPointer virConnectPtr, String name) ;
+    public StoragePoolPointer virStoragePoolLookupByUUIDString(ConnectionPointer virConnectPtr, String uuidstr) ;    
+    public StoragePoolPointer virStoragePoolLookupByUUID(ConnectionPointer virConnectPtr, String uuidstr) ;
+    public StoragePoolPointer virStoragePoolLookupByVolume(StorageVolPointer storageVolPtr) ;
+    public int virStoragePoolNumOfVolumes(StoragePoolPointer storagePoolPtr) ;    
+    public int virStoragePoolRefresh(StoragePoolPointer storagePoolPtr) ;    
+    public int virStoragePoolSetAutostart(StoragePoolPointer storagePoolPtr, int autostart) ; 
+    public int virStoragePoolUndefine(StoragePoolPointer storagePoolPtr) ;    
+    
+    // Storage Vol
+    public StorageVolPointer virStorageVolCreateXML(StoragePoolPointer storagePoolPtr, String xml, int flags) ;
+    public StorageVolPointer virStorageVolLookupByKey(ConnectionPointer virConnectPtr, String name) ;        
+    public StorageVolPointer virStorageVolLookupByName(StoragePoolPointer storagePoolPtr, String name) ;
+    public StorageVolPointer virStorageVolLookupByPath(ConnectionPointer virConnectPtr, String path) ;     
+    public int virStorageVolDelete(StorageVolPointer storageVolPtr, int flags) ;
+    public int virStorageVolFree(StorageVolPointer storageVolPtr) ;  
+    public int virStorageVolGetInfo(StorageVolPointer storageVolPtr, virStorageVolInfo info) ;
+    public String virStorageVolGetKey(StorageVolPointer storageVolPtr) ;       
+    public String virStorageVolGetName(StorageVolPointer storageVolPtr) ;
+    public String virStorageVolGetPath(StorageVolPointer storageVolPtr) ;
+    public String virStorageVolGetXMLDesc(StorageVolPointer storageVolPtr, int flags) ;     
     
     // Network functions
-    public int virNetworkCreate(Pointer virConnectPtr) ;    
-    public Pointer virNetworkCreateXML(Pointer virConnectPtr, String xmlDesc) ;
-    public Pointer virNetworkDefineXML(Pointer virConnectPtr, String xmlDesc) ;  
-    public int virNetworkDestroy(Pointer virConnectPtr) ;
-    public int virNetworkFree(Pointer virConnectPtr) ;        
-    public int virNetworkGetAutostart(Pointer virNetworkPtr, IntByReference value) ;   
-    public String virNetworkGetBridgeName(Pointer virNetworkPtr) ;
-    public String virNetworkGetName(Pointer virNetworkPtr) ;
-    public int virNetworkGetUUID(Pointer virNetworkPtr, byte[] uuidString) ;    
-    public int virNetworkGetUUIDString(Pointer virNetworkPtr, byte[] uuidString) ;
-    public String virNetworkGetXMLDesc(Pointer virNetworkPtr, int flags) ;     
-    public Pointer virNetworkLookupByName(Pointer virConnectPtr, String name) ;
-    public Pointer virNetworkLookupByUUIDString(Pointer virConnectPtr, String uuidstr) ;    
-    public Pointer virNetworkLookupByUUID(Pointer virConnectPtr, String uuidstr) ;       
-    public int virNetworkSetAutostart(Pointer virConnectPtr, int autoStart) ;
-    public int virNetworkUndefine(Pointer virConnectPtr) ;       
+    public int virNetworkCreate(NetworkPointer virConnectPtr) ;    
+    public NetworkPointer virNetworkCreateXML(ConnectionPointer virConnectPtr, String xmlDesc) ;
+    public NetworkPointer virNetworkDefineXML(ConnectionPointer virConnectPtr, String xmlDesc) ;  
+    public int virNetworkDestroy(NetworkPointer virConnectPtr) ;
+    public int virNetworkFree(NetworkPointer virConnectPtr) ;        
+    public int virNetworkGetAutostart(NetworkPointer virNetworkPtr, IntByReference value) ;   
+    public String virNetworkGetBridgeName(NetworkPointer virNetworkPtr) ;
+    public String virNetworkGetName(NetworkPointer virNetworkPtr) ;
+    public int virNetworkGetUUID(NetworkPointer virNetworkPtr, byte[] uuidString) ;    
+    public int virNetworkGetUUIDString(NetworkPointer virNetworkPtr, byte[] uuidString) ;
+    public String virNetworkGetXMLDesc(NetworkPointer virNetworkPtr, int flags) ;     
+    public NetworkPointer virNetworkLookupByName(ConnectionPointer virConnectPtr, String name) ;
+    public NetworkPointer virNetworkLookupByUUIDString(ConnectionPointer virConnectPtr, String uuidstr) ;    
+    public NetworkPointer virNetworkLookupByUUID(ConnectionPointer virConnectPtr, String uuidstr) ;       
+    public int virNetworkSetAutostart(NetworkPointer virConnectPtr, int autoStart) ;
+    public int virNetworkUndefine(NetworkPointer virConnectPtr) ;       
     
     // Domain functions
-    public int virDomainAttachDevice(Pointer virDomainPtr, String deviceXML) ;    
-    public int virDomainBlockStats(Pointer virDomainPtr, String path, virDomainBlockStats stats, int size) ;
-    public int virDomainCreate(Pointer virDomainPtr) ;       
-    public Pointer virDomainCreateLinux(Pointer virConnectPtr, String xmlDesc, int flags) ;    
-    public Pointer virDomainCreateXML(Pointer virConnectPtr, String xmlDesc, int flags) ;
-    public int virDomainCoreDump(Pointer virDomainPtr, String to, int flags) ;
-    public Pointer virDomainDefineXML(Pointer virConnectPtr, String xmlDesc) ; 
-    public int virDomainDetachDevice(Pointer virDomainPtr, String deviceXML) ;  
-    public int virDomainDestroy(Pointer virDomainPtr) ;        
-    public int virDomainFree(Pointer virDomainPtr) ;       
-    public int virDomainGetAutostart(Pointer virDomainPtr, IntByReference value) ;
-    public int virDomainGetID(Pointer virDomainPtr) ;      
-    public int virDomainGetInfo(Pointer virDomainPtr, virDomainInfo vInfo) ;
-    public NativeLong virDomainGetMaxMemory(Pointer virDomainPtr) ;
-    public int virDomainGetMaxVcpus(Pointer virDomainPtr) ;
-    public String virDomainGetName(Pointer virDomainPtr) ;    
-    public String virDomainGetOSType(Pointer virDomainPtr) ;        
-    public int virDomainGetUUID(Pointer virDomainPtr, byte[] uuidString) ;    
-    public int virDomainGetUUIDString(Pointer virDomainPtr, byte[] uuidString) ;    
-    public String virDomainGetXMLDesc(Pointer virDomainPtr, int flags) ;
-    public String virDomainGetSchedulerType(Pointer virDomainPtr, IntByReference nparams) ;
-    public int virDomainGetSchedulerParameters(Pointer virDomainPtr, virSchedParameter[] params, IntByReference nparams) ;
-    public int virDomainGetVcpus(Pointer virDomainPtr, virVcpuInfo[] info, int maxInfo, byte[] cpumaps, int maplen) ;
-    public int virDomainInterfaceStats(Pointer virDomainPtr, String path, virDomainInterfaceStats stats, int size) ;
-    public Pointer virDomainLookupByID(Pointer virConnectPtr, int id) ;
-    public Pointer virDomainLookupByName(Pointer virConnectPtr, String name) ;    
-    public Pointer virDomainLookupByUUID(Pointer virConnectPtr, String uuidstr) ;    
-    public Pointer virDomainLookupByUUIDString(Pointer virConnectPtr, String uuidstr) ;
-    public Pointer virDomainMigrate(Pointer virDomainPtr, Pointer virConnectPtr, NativeLong flags, String dname, String uri, NativeLong bandwidth) ;
-    public int virDomainPinVcpu(Pointer virDomainPtr, int vcpu, byte[] cpumap, int maplen) ;    
-    public int virDomainReboot(Pointer virDomainPtr, int flags) ;
-    public int virDomainResume(Pointer virDomainPtr) ;    
-    public int virDomainSave(Pointer virDomainPtr, String to) ; 
-    public int virDomainSetAutostart(Pointer virDomainPtr, int autoStart) ;
-    public int virDomainSetSchedulerParameters(Pointer virDomainPtr, virSchedParameter[] params, IntByReference nparams) ;     
-    public int virDomainSetMaxMemory(Pointer virDomainPtr, NativeLong maxMemory) ;
-    public int virDomainSetMemory(Pointer virDomainPtr, NativeLong maxMemory) ;    
-    public int virDomainSetVcpus(Pointer virDomainPtr, int nvcpus) ;    
-    public int virDomainShutdown(Pointer virDomainPtr) ;        
-    public int virDomainSuspend(Pointer virDomainPtr) ;    
-    public int virDomainUndefine(Pointer virDomainPtr) ;   
+    public int virDomainAttachDevice(DomainPointer virDomainPtr, String deviceXML) ;    
+    public int virDomainBlockStats(DomainPointer virDomainPtr, String path, virDomainBlockStats stats, int size) ;
+    public int virDomainCreate(DomainPointer virDomainPtr) ;       
+    public DomainPointer virDomainCreateLinux(ConnectionPointer virConnectPtr, String xmlDesc, int flags) ;    
+    public DomainPointer virDomainCreateXML(ConnectionPointer virConnectPtr, String xmlDesc, int flags) ;
+    public int virDomainCoreDump(DomainPointer virDomainPtr, String to, int flags) ;
+    public DomainPointer virDomainDefineXML(ConnectionPointer virConnectPtr, String xmlDesc) ; 
+    public int virDomainDetachDevice(DomainPointer virDomainPtr, String deviceXML) ;  
+    public int virDomainDestroy(DomainPointer virDomainPtr) ;        
+    public int virDomainFree(DomainPointer virDomainPtr) ;       
+    public int virDomainGetAutostart(DomainPointer virDomainPtr, IntByReference value) ;
+    public int virDomainGetID(DomainPointer virDomainPtr) ;      
+    public int virDomainGetInfo(DomainPointer virDomainPtr, virDomainInfo vInfo) ;
+    public NativeLong virDomainGetMaxMemory(DomainPointer virDomainPtr) ;
+    public int virDomainGetMaxVcpus(DomainPointer virDomainPtr) ;
+    public String virDomainGetName(DomainPointer virDomainPtr) ;    
+    public String virDomainGetOSType(DomainPointer virDomainPtr) ;        
+    public int virDomainGetUUID(DomainPointer virDomainPtr, byte[] uuidString) ;    
+    public int virDomainGetUUIDString(DomainPointer virDomainPtr, byte[] uuidString) ;    
+    public String virDomainGetXMLDesc(DomainPointer virDomainPtr, int flags) ;
+    public String virDomainGetSchedulerType(DomainPointer virDomainPtr, IntByReference nparams) ;
+    public int virDomainGetSchedulerParameters(DomainPointer virDomainPtr, virSchedParameter[] params, IntByReference nparams) ;
+    public int virDomainGetVcpus(DomainPointer virDomainPtr, virVcpuInfo[] info, int maxInfo, byte[] cpumaps, int maplen) ;
+    public int virDomainInterfaceStats(DomainPointer virDomainPtr, String path, virDomainInterfaceStats stats, int size) ;
+    public DomainPointer virDomainLookupByID(ConnectionPointer virConnectPtr, int id) ;
+    public DomainPointer virDomainLookupByName(ConnectionPointer virConnectPtr, String name) ;    
+    public DomainPointer virDomainLookupByUUID(ConnectionPointer virConnectPtr, String uuidstr) ;    
+    public DomainPointer virDomainLookupByUUIDString(ConnectionPointer virConnectPtr, String uuidstr) ;
+    public DomainPointer virDomainMigrate(DomainPointer virDomainPtr, ConnectionPointer virConnectPtr, NativeLong flags, String dname, String uri, NativeLong bandwidth) ;
+    public int virDomainPinVcpu(DomainPointer virDomainPtr, int vcpu, byte[] cpumap, int maplen) ;    
+    public int virDomainReboot(DomainPointer virDomainPtr, int flags) ;
+    public int virDomainResume(DomainPointer virDomainPtr) ;  
+    public int virDomainRestore(ConnectionPointer virConnectPtr, String from) ;    
+    public int virDomainSave(DomainPointer virDomainPtr, String to) ; 
+    public int virDomainSetAutostart(DomainPointer virDomainPtr, int autoStart) ;
+    public int virDomainSetSchedulerParameters(DomainPointer virDomainPtr, virSchedParameter[] params, IntByReference nparams) ;     
+    public int virDomainSetMaxMemory(DomainPointer virDomainPtr, NativeLong maxMemory) ;
+    public int virDomainSetMemory(DomainPointer virDomainPtr, NativeLong maxMemory) ;    
+    public int virDomainSetVcpus(DomainPointer virDomainPtr, int nvcpus) ;    
+    public int virDomainShutdown(DomainPointer virDomainPtr) ;        
+    public int virDomainSuspend(DomainPointer virDomainPtr) ;    
+    public int virDomainUndefine(DomainPointer virDomainPtr) ;   
+    
+    // Callbacks
+    interface VirConnectAuthCallback extends Callback {
+    	public int authCallback(virConnectCredential[] cred, int ncred, Pointer cbdata) ;
+    	
+    }
 }
diff --git a/src/org/libvirt/jna/virConnectAuth.java b/src/org/libvirt/jna/virConnectAuth.java
new file mode 100644
index 0000000..8c94b6e
--- /dev/null
+++ b/src/org/libvirt/jna/virConnectAuth.java
@@ -0,0 +1,11 @@
+package org.libvirt.jna;
+
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+
+public class virConnectAuth extends Structure {
+	public int[] credtype ;
+	public int ncredtype ;
+	public Libvirt.VirConnectAuthCallback cb ;
+	public Pointer cbdata ;
+}
diff --git a/src/org/libvirt/jna/virConnectCredential.java b/src/org/libvirt/jna/virConnectCredential.java
new file mode 100644
index 0000000..1fbd5e7
--- /dev/null
+++ b/src/org/libvirt/jna/virConnectCredential.java
@@ -0,0 +1,12 @@
+package org.libvirt.jna;
+
+import com.sun.jna.Structure;
+
+public class virConnectCredential extends Structure {
+	public int type ;
+	public String prompt ;
+	public String challenge ;
+	public String defresult ;
+	public String[] result ;
+	public int resultlen ;
+}
\ No newline at end of file
diff --git a/src/test.java b/src/test.java
index 40e0afc..24ed75e 100644
--- a/src/test.java
+++ b/src/test.java
@@ -19,17 +19,17 @@ public class test {
 				Integer.decode("0xf0"), Integer.decode("0x3c"), Integer.decode("0x87"), Integer.decode("0xd2"), Integer.decode("0x1e"), Integer.decode("0x67")} ;
 
 		//For testing the authentication
-//		ConnectAuth defaultAuth = new ConnectAuthDefault(); 
+		ConnectAuth defaultAuth = new ConnectAuthDefault(); 
 		
 		//You need to configure your libvirtd for remote/authenticated connections, and adjust the URL below 
 		//for this to work. Otherwise, you'll get an error
-//		try{
-//			conn = new Connect("test+tcp://localhost/default", defaultAuth, 0);
-//			System.out.println("Encrypted connection successful!");
-//		} catch (LibvirtException e){
-//			System.out.println("exception caught:"+e);
-//			System.out.println(e.getError());
-//		}
+		try{
+			conn = new Connect("test+tcp://localhost/default", defaultAuth, 0);
+			System.out.println("Encrypted connection successful!");
+		} catch (LibvirtException e){
+			System.out.println("exception caught:"+e);
+			System.out.println(e.getError());
+		}
 		
 		try{
 			conn = new Connect("test:///default", false);
-- 
1.6.0.6




More information about the libvir-list mailing list