This file is just one class wrapping some libvirt APIs. However,
its formatting is just messy. Resolve this. Best viewed with:

  git show --ignore-space-change

Signed-off-by: Michal Privoznik <[email protected]>
---
 examples/libvirt.php | 2308 +++++++++++++++++++++++++-------------------------
 1 file changed, 1154 insertions(+), 1154 deletions(-)

diff --git a/examples/libvirt.php b/examples/libvirt.php
index cb1a0ad..89aeb9f 100644
--- a/examples/libvirt.php
+++ b/examples/libvirt.php
@@ -1,1177 +1,1177 @@
 <?php
-       class Libvirt {
-               private $conn;
-               private $last_error;
-               private $allow_cached = true;
-               private $dominfos = array();
+class Libvirt {
+    private $conn;
+    private $last_error;
+    private $allow_cached = true;
+    private $dominfos = array();
 
-               function Libvirt($uri = false, $debug=false) {
-                       if ($debug)
-                               $this->set_logfile($debug);
-                       if ($uri != false)
-                               $this->connect($uri);
-               }
+    function Libvirt($uri = false, $debug=false) {
+        if ($debug)
+            $this->set_logfile($debug);
+        if ($uri != false)
+            $this->connect($uri);
+    }
 
-               function _set_last_error()
-               {
-                       $this->last_error = libvirt_get_last_error();
-                       return false;
-               }
+    function _set_last_error()
+    {
+        $this->last_error = libvirt_get_last_error();
+        return false;
+    }
 
-               function set_logfile($filename)
-               {
-                       if (!libvirt_logfile_set($filename))
-                               return $this->_set_last_error();
+    function set_logfile($filename)
+    {
+        if (!libvirt_logfile_set($filename))
+            return $this->_set_last_error();
 
-                       return true;
-               }
+        return true;
+    }
 
-               function print_resources() {
-                       return libvirt_print_binding_resources();
-               }
+    function print_resources() {
+        return libvirt_print_binding_resources();
+    }
 
-               function connect($uri = 'null') {
-                       $this->conn=libvirt_connect($uri, false);
-                       if ($this->conn==false)
-                               return $this->_set_last_error();
-               }
+    function connect($uri = 'null') {
+        $this->conn=libvirt_connect($uri, false);
+        if ($this->conn==false)
+            return $this->_set_last_error();
+    }
 
-                function domain_disk_add($domain, $img, $dev, $type='scsi', 
$driver='raw') {
-                        $dom = $this->get_domain_object($domain);
+    function domain_disk_add($domain, $img, $dev, $type='scsi', $driver='raw') 
{
+        $dom = $this->get_domain_object($domain);
 
-                        $tmp = libvirt_domain_disk_add($dom, $img, $dev, 
$type, $driver);
-                        return ($tmp) ? $tmp : $this->_set_last_error();
+        $tmp = libvirt_domain_disk_add($dom, $img, $dev, $type, $driver);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_change_numVCpus($domain, $num) {
+        $dom = $this->get_domain_object($domain);
+
+        $tmp = libvirt_domain_change_vcpus($dom, $num);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_change_memory_allocation($domain, $memory, $maxmem) {
+        $dom = $this->get_domain_object($domain);
+
+        $tmp = libvirt_domain_change_memory($dom, $memory, $maxmem);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_change_boot_devices($domain, $first, $second) {
+        $dom = $this->get_domain_object($domain);
+
+        $tmp = libvirt_domain_change_boot_devices($dom, $first, $second);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_get_screenshot($domain) {
+        $dom = $this->get_domain_object($domain);
+
+        $tmp = libvirt_domain_get_screenshot($dom, $this->get_hostname() );
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_get_screenshot_thumbnail($domain, $w=120) {
+        $screen = $this->domain_get_screenshot($domain);
+        $imgFile = tempnam("/tmp", "libvirt-php-tmp-resize-XXXXXX");;
+
+        if ($screen) {
+            $fp = fopen($imgFile, "wb");
+            fwrite($fp, $screen);
+            fclose($fp);
+        }
+
+        if (file_exists($imgFile) && $screen) {
+            list($width, $height) = getimagesize($imgFile);
+            $h = ($height / $width) * $w;
+        } else {
+            $w = $h = 1;
+            //$h = $w * (3 / 4.5);
+        }
+
+        $new = imagecreatetruecolor($w, $h);
+        if ($screen) {
+            $img = imagecreatefrompng($imgFile);
+            imagecopyresampled($new,$img,0,0,0,0, $w,$h,$width,$height);
+            imagedestroy($img);
+        }
+        else {
+            $c = imagecolorallocate($new, 255, 255, 255);
+            imagefill($new, 0, 0, $c);
+        }
+
+        imagepng($new, $imgFile);
+        imagedestroy($new);
+
+        $fp = fopen($imgFile, "rb");
+        $data = fread($fp, filesize($imgFile));
+        fclose($fp);
+
+        unlink($imgFile);
+        return $data;
+    }
+
+    function domain_get_screen_dimensions($domain) {
+        $screen = $this->domain_get_screenshot($domain);
+        $imgFile = tempnam("/tmp", "libvirt-php-tmp-resize-XXXXXX");;
+
+        $width = false;
+        $height = false;
+
+        if ($screen) {
+            $fp = fopen($imgFile, "wb");
+            fwrite($fp, $screen);
+            fclose($fp);
+        }
+        if (file_exists($imgFile) && $screen)
+            list($width, $height) = getimagesize($imgFile);
+
+        unlink($imgFile);
+
+        return array('height' => $height, 'width' => $width);
+    }
+
+    function domain_send_keys($domain, $keys) {
+        $dom = $this->get_domain_object($domain);
+
+        $tmp = libvirt_domain_send_keys($dom, $this->get_hostname(), $keys);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_send_pointer_event($domain, $x, $y, $clicked = 1) {
+        $dom = $this->get_domain_object($domain);
+
+        $tmp = libvirt_domain_send_pointer_event($dom, $this->get_hostname(), 
$x, $y, $clicked, true);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_disk_remove($domain, $dev) {
+        $dom = $this->get_domain_object($domain);
+
+        $tmp = libvirt_domain_disk_remove($dom, $dev);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function supports($name) {
+        return libvirt_has_feature($name);
+    }
+
+    function macbyte($val) {
+        if ($val < 16)
+            return '0'.dechex($val);
+
+        return dechex($val);
+    }
+
+    function generate_random_mac_addr($seed=false) {
+        if (!$seed)
+            $seed = 1;
+
+        if ($this->get_hypervisor_name() == 'qemu')
+            $prefix = '52:54:00';
+        else
+            if ($this->get_hypervisor_name() == 'xen')
+                $prefix = '00:16:3e';
+            else
+                $prefix = $this->macbyte(($seed * rand()) % 256).':'.
+                $this->macbyte(($seed * rand()) % 256).':'.
+                $this->macbyte(($seed * rand()) % 256);
+
+        return $prefix.':'.
+            $this->macbyte(($seed * rand()) % 256).':'.
+            $this->macbyte(($seed * rand()) % 256).':'.
+            $this->macbyte(($seed * rand()) % 256);
+    }
+
+    function domain_nic_add($domain, $mac, $network, $model=false) {
+        $dom = $this->get_domain_object($domain);
+
+        if ($model == 'default')
+            $model = false;
+
+        $tmp = libvirt_domain_nic_add($dom, $mac, $network, $model);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_nic_remove($domain, $mac) {
+        $dom = $this->get_domain_object($domain);
+
+        $tmp = libvirt_domain_nic_remove($dom, $mac);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_connection() {
+        return $this->conn;
+    }
+
+    function get_hostname() {
+        return libvirt_connect_get_hostname($this->conn);
+    }
+
+    function get_domain_object($nameRes) {
+        if (is_resource($nameRes))
+            return $nameRes;
+
+        $dom=libvirt_domain_lookup_by_name($this->conn, $nameRes);
+        if (!$dom) {
+            $dom=libvirt_domain_lookup_by_uuid_string($this->conn, $nameRes);
+            if (!$dom)
+                return $this->_set_last_error();
+        }
+
+        return $dom;
+    }
+
+    function get_xpath($domain, $xpath, $inactive = false) {
+        $dom = $this->get_domain_object($domain);
+        $flags = 0;
+        if ($inactive)
+            $flags = VIR_DOMAIN_XML_INACTIVE;
+
+        $tmp = libvirt_domain_xml_xpath($dom, $xpath, $flags);
+        if (!$tmp)
+            return $this->_set_last_error();
+
+        return $tmp;
+    }
+
+    function get_cdrom_stats($domain, $sort=true) {
+        $dom = $this->get_domain_object($domain);
+
+        $buses =  $this->get_xpath($dom, 
'//domain/devices/disk[@device="cdrom"]/target/@bus', false);
+        $disks =  $this->get_xpath($dom, 
'//domain/devices/disk[@device="cdrom"]/target/@dev', false);
+
+        $ret = array();
+        for ($i = 0; $i < $disks['num']; $i++) {
+            $tmp = libvirt_domain_get_block_info($dom, $disks[$i]);
+            if ($tmp) {
+                $tmp['bus'] = $buses[$i];
+                $ret[] = $tmp;
+            }
+            else
+                $this->_set_last_error();
+        }
+
+        if ($sort) {
+            for ($i = 0; $i < sizeof($ret); $i++) {
+                for ($ii = 0; $ii < sizeof($ret); $ii++) {
+                    if (strcmp($ret[$i]['device'], $ret[$ii]['device']) < 0) {
+                        $tmp = $ret[$i];
+                        $ret[$i] = $ret[$ii];
+                        $ret[$ii] = $tmp;
+                    }
                 }
+            }
+        }
 
-               function domain_change_numVCpus($domain, $num) {
-                       $dom = $this->get_domain_object($domain);
+        unset($buses);
+        unset($disks);
 
-                       $tmp = libvirt_domain_change_vcpus($dom, $num);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
+        return $ret;
+    }
 
-               function domain_change_memory_allocation($domain, $memory, 
$maxmem) {
-                       $dom = $this->get_domain_object($domain);
+    function get_disk_stats($domain, $sort=true) {
+        $dom = $this->get_domain_object($domain);
 
-                       $tmp = libvirt_domain_change_memory($dom, $memory, 
$maxmem);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
+        $buses =  $this->get_xpath($dom, 
'//domain/devices/disk[@device="disk"]/target/@bus', false);
+        $disks =  $this->get_xpath($dom, 
'//domain/devices/disk[@device="disk"]/target/@dev', false);
+        // create image as: qemu-img create -f qcow2 -o backing_file=RAW_IMG 
OUT_QCOW_IMG SIZE[K,M,G suffixed]
 
-               function domain_change_boot_devices($domain, $first, $second) {
-                       $dom = $this->get_domain_object($domain);
+        $ret = array();
+        for ($i = 0; $i < $disks['num']; $i++) {
+            $tmp = libvirt_domain_get_block_info($dom, $disks[$i]);
+            if ($tmp) {
+                $tmp['bus'] = $buses[$i];
+                $ret[] = $tmp;
+            }
+            else
+                $this->_set_last_error();
+        }
 
-                       $tmp = libvirt_domain_change_boot_devices($dom, $first, 
$second);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_get_screenshot($domain) {
-                       $dom = $this->get_domain_object($domain);
-
-                       $tmp = libvirt_domain_get_screenshot($dom, 
$this->get_hostname() );
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_get_screenshot_thumbnail($domain, $w=120) {
-                       $screen = $this->domain_get_screenshot($domain);
-                       $imgFile = tempnam("/tmp", 
"libvirt-php-tmp-resize-XXXXXX");;
-
-                       if ($screen) {
-                               $fp = fopen($imgFile, "wb");
-                               fwrite($fp, $screen);
-                               fclose($fp);
-                       }
-
-                       if (file_exists($imgFile) && $screen) {
-                               list($width, $height) = getimagesize($imgFile); 
-                               $h = ($height / $width) * $w;
-                       } else {
-                               $w = $h = 1;
-                               //$h = $w * (3 / 4.5);
-                       }
-
-                       $new = imagecreatetruecolor($w, $h);
-                       if ($screen) {
-                               $img = imagecreatefrompng($imgFile);
-                               imagecopyresampled($new,$img,0,0,0,0, 
$w,$h,$width,$height);
-                               imagedestroy($img);
-                       }
-                       else {
-                               $c = imagecolorallocate($new, 255, 255, 255);
-                               imagefill($new, 0, 0, $c);
-                       }
-
-                       imagepng($new, $imgFile);
-                       imagedestroy($new);
-
-                       $fp = fopen($imgFile, "rb");
-                       $data = fread($fp, filesize($imgFile));
-                       fclose($fp);
-
-                       unlink($imgFile);
-                       return $data;
-               }
-
-                function domain_get_screen_dimensions($domain) {
-                       $screen = $this->domain_get_screenshot($domain);
-                       $imgFile = tempnam("/tmp", 
"libvirt-php-tmp-resize-XXXXXX");;
-
-                       $width = false;
-                       $height = false;
-
-                       if ($screen) {
-                                $fp = fopen($imgFile, "wb");
-                               fwrite($fp, $screen);
-                               fclose($fp);
-                       }
-                       if (file_exists($imgFile) && $screen)
-                               list($width, $height) = getimagesize($imgFile);
-
-                       unlink($imgFile);
-
-                       return array('height' => $height, 'width' => $width);
-               }
-
-               function domain_send_keys($domain, $keys) {
-                       $dom = $this->get_domain_object($domain);
-
-                       $tmp = libvirt_domain_send_keys($dom, 
$this->get_hostname(), $keys);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_send_pointer_event($domain, $x, $y, $clicked = 
1) {
-                       $dom = $this->get_domain_object($domain);
-
-                       $tmp = libvirt_domain_send_pointer_event($dom, 
$this->get_hostname(), $x, $y, $clicked, true);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_disk_remove($domain, $dev) {
-                       $dom = $this->get_domain_object($domain);
-
-                       $tmp = libvirt_domain_disk_remove($dom, $dev);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function supports($name) {
-                       return libvirt_has_feature($name);
-               }
-
-               function macbyte($val) {
-                       if ($val < 16)
-                               return '0'.dechex($val);
-
-                       return dechex($val);
-               }
-
-               function generate_random_mac_addr($seed=false) {
-                       if (!$seed)
-                               $seed = 1;
-
-                       if ($this->get_hypervisor_name() == 'qemu')
-                               $prefix = '52:54:00';
-                       else
-                       if ($this->get_hypervisor_name() == 'xen')
-                               $prefix = '00:16:3e';
-                       else
-                               $prefix = $this->macbyte(($seed * rand()) % 
256).':'.
-                                $this->macbyte(($seed * rand()) % 256).':'.
-                                $this->macbyte(($seed * rand()) % 256);
-
-                       return $prefix.':'.
-                               $this->macbyte(($seed * rand()) % 256).':'.
-                               $this->macbyte(($seed * rand()) % 256).':'.
-                               $this->macbyte(($seed * rand()) % 256);
-               }
-
-               function domain_nic_add($domain, $mac, $network, $model=false) {
-                       $dom = $this->get_domain_object($domain);
-
-                       if ($model == 'default')
-                               $model = false;
-
-                       $tmp = libvirt_domain_nic_add($dom, $mac, $network, 
$model);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_nic_remove($domain, $mac) {
-                       $dom = $this->get_domain_object($domain);
-
-                       $tmp = libvirt_domain_nic_remove($dom, $mac);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_connection() {
-                       return $this->conn;
-               }
-
-               function get_hostname() {
-                       return libvirt_connect_get_hostname($this->conn);
-               }
-
-               function get_domain_object($nameRes) {
-                       if (is_resource($nameRes))
-                               return $nameRes;
-
-                       $dom=libvirt_domain_lookup_by_name($this->conn, 
$nameRes);
-                       if (!$dom) {
-                               
$dom=libvirt_domain_lookup_by_uuid_string($this->conn, $nameRes);
-                               if (!$dom)
-                                       return $this->_set_last_error();
-                       }
-
-                       return $dom;
-               }
-
-               function get_xpath($domain, $xpath, $inactive = false) {
-                       $dom = $this->get_domain_object($domain);
-                       $flags = 0;
-                       if ($inactive)
-                               $flags = VIR_DOMAIN_XML_INACTIVE;
-
-                       $tmp = libvirt_domain_xml_xpath($dom, $xpath, $flags); 
-                       if (!$tmp)
-                               return $this->_set_last_error();
-
-                       return $tmp;
-               }
-
-               function get_cdrom_stats($domain, $sort=true) {
-                       $dom = $this->get_domain_object($domain);
-
-                       $buses =  $this->get_xpath($dom, 
'//domain/devices/disk[@device="cdrom"]/target/@bus', false);
-                       $disks =  $this->get_xpath($dom, 
'//domain/devices/disk[@device="cdrom"]/target/@dev', false);
-
-                       $ret = array();
-                       for ($i = 0; $i < $disks['num']; $i++) {
-                               $tmp = libvirt_domain_get_block_info($dom, 
$disks[$i]);
-                               if ($tmp) {
-                                       $tmp['bus'] = $buses[$i];
-                                       $ret[] = $tmp;
-                               }
-                               else
-                                       $this->_set_last_error();
-                       }
-
-                       if ($sort) {
-                               for ($i = 0; $i < sizeof($ret); $i++) {
-                                       for ($ii = 0; $ii < sizeof($ret); 
$ii++) {
-                                               if (strcmp($ret[$i]['device'], 
$ret[$ii]['device']) < 0) {
-                                                       $tmp = $ret[$i];
-                                                       $ret[$i] = $ret[$ii];
-                                                       $ret[$ii] = $tmp;
-                                               }
-                                       }
-                               }
-                       }
-
-                       unset($buses);
-                       unset($disks);
-
-                       return $ret;
-               }
-
-               function get_disk_stats($domain, $sort=true) {
-                       $dom = $this->get_domain_object($domain);
-
-                       $buses =  $this->get_xpath($dom, 
'//domain/devices/disk[@device="disk"]/target/@bus', false);
-                       $disks =  $this->get_xpath($dom, 
'//domain/devices/disk[@device="disk"]/target/@dev', false);
-                       // create image as: qemu-img create -f qcow2 -o 
backing_file=RAW_IMG OUT_QCOW_IMG SIZE[K,M,G suffixed]
-
-                       $ret = array();
-                       for ($i = 0; $i < $disks['num']; $i++) {
-                               $tmp = libvirt_domain_get_block_info($dom, 
$disks[$i]);
-                               if ($tmp) {
-                                       $tmp['bus'] = $buses[$i];
-                                       $ret[] = $tmp;
-                               }
-                               else
-                                       $this->_set_last_error();
-                       }
-
-                       if ($sort) {
-                               for ($i = 0; $i < sizeof($ret); $i++) {
-                                       for ($ii = 0; $ii < sizeof($ret); 
$ii++) {
-                                               if (strcmp($ret[$i]['device'], 
$ret[$ii]['device']) < 0) {
-                                                       $tmp = $ret[$i];
-                                                       $ret[$i] = $ret[$ii];
-                                                       $ret[$ii] = $tmp;
-                                               }
-                                       }
-                               }
-                       }
-
-                       unset($buses);
-                       unset($disks);
-
-                       return $ret;
-               }
-
-                function get_nic_info($domain) {
-                        $dom = $this->get_domain_object($domain);
-
-                        $macs =  $this->get_xpath($dom, 
'//domain/devices/interface[@type="network"]/mac/@address', false);
-                       if (!$macs)
-                               return $this->_set_last_error();
-
-                       $ret = array();
-                       for ($i = 0; $i < $macs['num']; $i++) {
-                               $tmp = libvirt_domain_get_network_info($dom, 
$macs[$i]);
-                               if ($tmp)
-                                       $ret[] = $tmp;
-                               else
-                                       $this->_set_last_error();
-                       }
-
-                        return $ret;
+        if ($sort) {
+            for ($i = 0; $i < sizeof($ret); $i++) {
+                for ($ii = 0; $ii < sizeof($ret); $ii++) {
+                    if (strcmp($ret[$i]['device'], $ret[$ii]['device']) < 0) {
+                        $tmp = $ret[$i];
+                        $ret[$i] = $ret[$ii];
+                        $ret[$ii] = $tmp;
+                    }
                 }
+            }
+        }
 
-                function get_domain_type($domain) {
-                        $dom = $this->get_domain_object($domain);
+        unset($buses);
+        unset($disks);
 
-                        $tmp = $this->get_xpath($dom, '//domain/@type', false);
-                        if ($tmp['num'] == 0)
-                            return $this->_set_last_error();
+        return $ret;
+    }
 
-                        $ret = $tmp[0];
-                        unset($tmp);
+    function get_nic_info($domain) {
+        $dom = $this->get_domain_object($domain);
 
-                        return $ret;
+        $macs =  $this->get_xpath($dom, 
'//domain/devices/interface[@type="network"]/mac/@address', false);
+        if (!$macs)
+            return $this->_set_last_error();
+
+        $ret = array();
+        for ($i = 0; $i < $macs['num']; $i++) {
+            $tmp = libvirt_domain_get_network_info($dom, $macs[$i]);
+            if ($tmp)
+                $ret[] = $tmp;
+            else
+                $this->_set_last_error();
+        }
+
+        return $ret;
+    }
+
+    function get_domain_type($domain) {
+        $dom = $this->get_domain_object($domain);
+
+        $tmp = $this->get_xpath($dom, '//domain/@type', false);
+        if ($tmp['num'] == 0)
+            return $this->_set_last_error();
+
+        $ret = $tmp[0];
+        unset($tmp);
+
+        return $ret;
+    }
+
+    function get_domain_emulator($domain) {
+        $dom = $this->get_domain_object($domain);
+
+        $tmp =  $this->get_xpath($dom, '//domain/devices/emulator', false);
+        if ($tmp['num'] == 0)
+            return $this->_set_last_error();
+
+        $ret = $tmp[0];
+        unset($tmp);
+
+        return $ret;
+    }
+
+    function get_network_cards($domain) {
+        $dom = $this->get_domain_object($domain);
+
+        $nics =  $this->get_xpath($dom, 
'//domain/devices/interface[@type="network"]', false);
+        if (!is_array($nics))
+            return $this->_set_last_error();
+
+        return $nics['num'];
+    }
+
+    function get_disk_capacity($domain, $physical=false, $disk='*', $unit='?') 
{
+        $dom = $this->get_domain_object($domain);
+        $tmp = $this->get_disk_stats($dom);
+
+        $ret = 0;
+        for ($i = 0; $i < sizeof($tmp); $i++) {
+            if (($disk == '*') || ($tmp[$i]['device'] == $disk))
+                if ($physical)
+                    $ret += $tmp[$i]['physical'];
+                else
+                    $ret += $tmp[$i]['capacity'];
+        }
+        unset($tmp);
+
+        return $this->format_size($ret, 2, $unit);
+    }
+
+    function get_disk_count($domain) {
+        $dom = $this->get_domain_object($domain);
+        $tmp = $this->get_disk_stats($dom);
+        $ret = sizeof($tmp);
+        unset($tmp);
+
+        return $ret;
+    }
+
+    function format_size($value, $decimals, $unit='?') {
+        /* Autodetect unit that's appropriate */
+        if ($unit == '?') {
+            /* (1 << 40) is not working correctly on i386 systems */
+            if ($value > 1099511627776)
+                $unit = 'T';
+            else
+                if ($value > (1 << 30))
+                    $unit = 'G';
+                else
+                    if ($value > (1 << 20))
+                        $unit = 'M';
+                    else
+                        if ($value > (1 << 10))
+                            $unit = 'K';
+                        else
+                            $unit = 'B';
+        }
+
+        $unit = strtoupper($unit);
+
+        switch ($unit) {
+        case 'T': return number_format($value / (float)1099511627776, 
$decimals, '.', ' ').' TB';
+        case 'G': return number_format($value / (float)(1 << 30), $decimals, 
'.', ' ').' GB';
+        case 'M': return number_format($value / (float)(1 << 20), $decimals, 
'.', ' ').' MB';
+        case 'K': return number_format($value / (float)(1 << 10), $decimals, 
'.', ' ').' kB';
+        case 'B': return $value.' B';
+        }
+
+        return false;
+    }
+
+    function get_uri() {
+        $tmp = libvirt_connect_get_uri($this->conn);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_domain_count() {
+        $tmp = libvirt_domain_get_counts($this->conn);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_storagepools() {
+        $tmp = libvirt_list_storagepools($this->conn);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_storagepool_res($res) {
+        if ($res == false)
+            return false;
+        if (is_resource($res))
+            return $res;
+
+        $tmp = libvirt_storagepool_lookup_by_name($this->conn, $res);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_storagepool_info($name) {
+        if (!($res = $this->get_storagepool_res($name)))
+            return false;
+
+        $path = libvirt_storagepool_get_xml_desc($res, '/pool/target/path');
+        if (!$path)
+            return $this->_set_last_error();
+        $perms = libvirt_storagepool_get_xml_desc($res, 
'/pool/target/permissions/mode');
+        if (!$perms)
+            return $this->_set_last_error();
+        $otmp1 = libvirt_storagepool_get_xml_desc($res, 
'/pool/target/permissions/owner');
+        if (!is_string($otmp1))
+            return $this->_set_last_error();
+        $otmp2 = libvirt_storagepool_get_xml_desc($res, 
'/pool/target/permissions/group');
+        if (!is_string($otmp2))
+            return $this->_set_last_error();
+        $tmp = libvirt_storagepool_get_info($res);
+        $tmp['volume_count'] = sizeof( libvirt_storagepool_list_volumes($res) 
);
+        $tmp['active'] = libvirt_storagepool_is_active($res);
+        $tmp['path'] = $path;
+        $tmp['permissions'] = $perms;
+        $tmp['id_user'] = $otmp1;
+        $tmp['id_group'] = $otmp2;
+
+        return $tmp;
+    }
+
+    function storagepool_get_volume_information($pool, $name=false) {
+        if (!is_resource($pool))
+            $pool = $this->get_storagepool_res($pool);
+        if (!$pool)
+            return false;
+
+        $out = array();
+        $tmp = libvirt_storagepool_list_volumes($pool);
+        for ($i = 0; $i < sizeof($tmp); $i++) {
+            if (($tmp[$i] == $name) || ($name == false)) {
+                $r = libvirt_storagevolume_lookup_by_name($pool, $tmp[$i]);
+                $out[$tmp[$i]] = libvirt_storagevolume_get_info($r);
+                $out[$tmp[$i]]['path'] = libvirt_storagevolume_get_path($r);
+                unset($r);
+            }
+        }
+
+        return $out;
+    }
+
+    function storagevolume_delete($path) {
+        $vol = libvirt_storagevolume_lookup_by_path($this->conn, $path);
+        if (!libvirt_storagevolume_delete($vol))
+            return $this->_set_last_error();
+
+        return true;
+    }
+
+    function translate_volume_type($type) {
+        if ($type == 1)
+            return 'Block device';
+
+        return 'File image';
+    }
+
+    function translate_perms($mode) {
+        $mode = (string)((int)$mode);
+
+        $tmp = '---------';
+
+        for ($i = 0; $i < 3; $i++) {
+            $bits = (int)$mode[$i];
+            if ($bits & 4)
+                $tmp[ ($i * 3) ] = 'r';
+            if ($bits & 2)
+                $tmp[ ($i * 3) + 1 ] = 'w';
+            if ($bits & 1)
+                $tmp[ ($i * 3) + 2 ] = 'x';
+        }
+
+
+        return $tmp;
+    }
+
+    function parse_size($size) {
+        $unit = $size[ strlen($size) - 1 ];
+
+        $size = (int)$size;
+        switch (strtoupper($unit)) {
+        case 'T': $size *= 1099511627776;
+        break;
+        case 'G': $size *= 1073741824;
+        break;
+        case 'M': $size *= 1048576;
+        break;
+        case 'K': $size *= 1024;
+        break;
+        }
+
+        return $size;
+    }
+
+    function storagevolume_create($pool, $name, $capacity, $allocation) {
+        $pool = $this->get_storagepool_res($pool);
+
+        $capacity = $this->parse_size($capacity);
+        $allocation = $this->parse_size($allocation);
+
+        $xml = "<volume>\n".
+            "  <name>$name</name>\n".
+            "  <capacity>$capacity</capacity>\n".
+            "  <allocation>$allocation</allocation>\n".
+            "</volume>";
+
+        $tmp = libvirt_storagevolume_create_xml($pool, $xml);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_hypervisor_name() {
+        $tmp = libvirt_connect_get_information($this->conn);
+        $hv = $tmp['hypervisor'];
+        unset($tmp);
+
+        switch (strtoupper($hv)) {
+        case 'QEMU': $type = 'qemu';
+        break;
+        case 'XEN': $type = 'xen';
+        break;
+
+        default:
+        $type = $hv;
+        }
+
+        return $type;
+    }
+
+    function get_connect_information() {
+        $tmp = libvirt_connect_get_information($this->conn);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_change_xml($domain, $xml) {
+        $dom = $this->get_domain_object($domain);
+
+        if (!($old_xml = libvirt_domain_get_xml_desc($dom, NULL)))
+            return $this->_set_last_error();
+        if (!libvirt_domain_undefine($dom))
+            return $this->_set_last_error();
+        if (!libvirt_domain_define_xml($this->conn, $xml)) {
+            $this->last_error = libvirt_get_last_error();
+            libvirt_domain_define_xml($this->conn, $old_xml);
+            return false;
+        }
+
+        return true;
+    }
+
+    function network_change_xml($network, $xml) {
+        $net = $this->get_network_res($network);
+
+        if (!($old_xml = libvirt_network_get_xml_desc($net, NULL))) {
+            return $this->_set_last_error();
+        }
+        if (!libvirt_network_undefine($net)) {
+            return $this->_set_last_error();
+        }
+        if (!libvirt_network_define_xml($this->conn, $xml)) {
+            $this->last_error = libvirt_get_last_error();
+            libvirt_network_define_xml($this->conn, $old_xml);
+            return false;
+        }
+
+        return true;
+    }
+
+    function translate_storagepool_state($state) {
+        switch ($state) {
+        case 0: return 'Not running';
+        break;
+        case 1: return 'Building pool';
+        break;
+        case 2: return 'Running';
+        break;
+        case 3: return 'Running degraded';
+        break;
+        case 4: return 'Running but inaccessible';
+        break;
+        }
+
+        return 'Unknown';
+    }
+
+    function get_domains() {
+        $tmp = libvirt_list_domains($this->conn);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_domain_by_name($name) {
+        $tmp = libvirt_domain_lookup_by_name($this->conn, $name);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_networks($type = VIR_NETWORKS_ALL) {
+        $tmp = libvirt_list_networks($this->conn, $type);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_nic_models() {
+        return array('default', 'rtl8139', 'e1000', 'pcnet', 'ne2k_pci', 
'virtio');
+    }
+
+    function get_network_res($network) {
+        if ($network == false)
+            return false;
+        if (is_resource($network))
+            return $network;
+
+        $tmp = libvirt_network_get($this->conn, $network);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_network_bridge($network) {
+        $res = $this->get_network_res($network);
+        if ($res == false)
+            return false;
+
+        $tmp = libvirt_network_get_bridge($res);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_network_active($network) {
+        $res = $this->get_network_res($network);
+        if ($res == false)
+            return false;
+
+        $tmp = libvirt_network_get_active($res);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function set_network_active($network, $active = true) {
+        $res = $this->get_network_res($network);
+        if ($res == false)
+            return false;
+
+        if (!libvirt_network_set_active($res, $active ? 1 : 0))
+            return $this->_set_last_error();
+
+        return true;
+    }
+
+    function get_network_information($network) {
+        $res = $this->get_network_res($network);
+        if ($res == false)
+            return false;
+
+        $tmp = libvirt_network_get_information($res);
+        if (!$tmp)
+            return $this->_set_last_error();
+        $tmp['active'] = $this->get_network_active($res);
+        return $tmp;
+    }
+
+    function get_network_xml($network) {
+        $res = $this->get_network_res($network);
+        if ($res == false)
+            return false;
+
+        $tmp = libvirt_network_get_xml_desc($res, NULL);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_node_devices($dev = false) {
+        $tmp = ($dev == false) ? libvirt_list_nodedevs($this->conn) : 
libvirt_list_nodedevs($this->conn, $dev);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_node_device_res($res) {
+        if ($res == false)
+            return false;
+        if (is_resource($res))
+            return $res;
+
+        $tmp = libvirt_nodedev_get($this->conn, $res);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_node_device_caps($dev) {
+        $dev = $this->get_node_device_res($dev);
+
+        $tmp = libvirt_nodedev_capabilities($dev);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_node_device_cap_options() {
+        $all = $this->get_node_devices();
+
+        $ret = array();
+        for ($i = 0; $i < sizeof($all); $i++) {
+            $tmp = $this->get_node_device_caps($all[$i]);
+
+            for ($ii = 0; $ii < sizeof($tmp); $ii++)
+                if (!in_array($tmp[$ii], $ret))
+                    $ret[] = $tmp[$ii];
+        }
+
+        return $ret;
+    }
+
+    function get_node_device_xml($dev) {
+        $dev = $this->get_node_device_res($dev);
+
+        $tmp = libvirt_nodedev_get_xml_desc($dev, NULL);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function get_node_device_information($dev) {
+        $dev = $this->get_node_device_res($dev);
+
+        $tmp = libvirt_nodedev_get_information($dev);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_get_name($res) {
+        return libvirt_domain_get_name($res);
+    }
+
+    function domain_get_info($dom) {
+        if (!$this->allow_cached)
+            return libvirt_domain_get_info($dom);
+
+        $domname = libvirt_domain_get_name($dom);
+        if (!array_key_exists($domname, $this->dominfos)) {
+            $info = libvirt_domain_get_info($dom);
+            $this->dominfos[$domname] = $info;
+        }
+
+        return $this->dominfos[$domname];
+    }
+
+    function get_last_error() {
+        return $this->last_error;
+    }
+
+    function domain_get_xml($domain, $get_inactive = false) {
+        $dom = $this->get_domain_object($domain);
+        if (!$dom)
+            return false;
+
+        $tmp = libvirt_domain_get_xml_desc($dom, $get_inactive ? 
VIR_DOMAIN_XML_INACTIVE : 0);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function network_get_xml($network) {
+        $net = $this->get_network_res($network);
+        if (!$net)
+            return false;
+
+        $tmp = libvirt_network_get_xml_desc($net, NULL);
+        return ($tmp) ? $tmp : $this->_set_last_error();;
+    }
+
+    function domain_get_id($domain, $name = false) {
+        $dom = $this->get_domain_object($domain);
+        if ((!$dom) || (!$this->domain_is_running($dom, $name)))
+            return false;
+
+        $tmp = libvirt_domain_get_id($dom);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_get_interface_stats($nameRes, $iface) {
+        $dom = $this->get_domain_object($domain);
+        if (!$dom)
+            return false;
+
+        $tmp = libvirt_domain_interface_stats($dom, $iface);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_get_memory_stats($domain) {
+        $dom = $this->get_domain_object($domain);
+        if (!$dom)
+            return false;
+
+        $tmp = libvirt_domain_memory_stats($dom);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_start($dom) {
+        $dom=$this->get_domain_object($dom);
+        if ($dom) {
+            $ret = libvirt_domain_create($dom);
+            $this->last_error = libvirt_get_last_error();
+            return $ret;
+        }
+
+        $ret = libvirt_domain_create_xml($this->conn, $dom);
+        $this->last_error = libvirt_get_last_error();
+        return $ret;
+    }
+
+    function domain_define($xml) {
+        $tmp = libvirt_domain_define_xml($this->conn, $xml);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_destroy($domain) {
+        $dom = $this->get_domain_object($domain);
+        if (!$dom)
+            return false;
+
+        $tmp = libvirt_domain_destroy($dom);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_reboot($domain) {
+        $dom = $this->get_domain_object($domain);
+        if (!$dom)
+            return false;
+
+        $tmp = libvirt_domain_reboot($dom);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_suspend($domain) {
+        $dom = $this->get_domain_object($domain);
+        if (!$dom)
+            return false;
+
+        $tmp = libvirt_domain_suspend($dom);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_resume($domain) {
+        $dom = $this->get_domain_object($domain);
+        if (!$dom)
+            return false;
+
+        $tmp = libvirt_domain_resume($dom);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_get_name_by_uuid($uuid) {
+        $dom = libvirt_domain_lookup_by_uuid_string($this->conn, $uuid);
+        if (!$dom)
+            return false;
+        $tmp = libvirt_domain_get_name($dom);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_shutdown($domain) {
+        $dom = $this->get_domain_object($domain);
+        if (!$dom)
+            return false;
+
+        $tmp = libvirt_domain_shutdown($dom);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_undefine($domain) {
+        $dom = $this->get_domain_object($domain);
+        if (!$dom)
+            return false;
+
+        $tmp = libvirt_domain_undefine($dom);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+
+    function domain_is_running($domain, $name = false) {
+        $dom = $this->get_domain_object($domain);
+        if (!$dom)
+            return false;
+        $tmp = $this->domain_get_info($dom);
+        if (!$tmp)
+            return $this->_set_last_error();
+        $ret = ( ($tmp['state'] == VIR_DOMAIN_RUNNING) || ($tmp['state'] == 
VIR_DOMAIN_BLOCKED) );
+        unset($tmp);
+        return $ret;
+    }
+
+    function domain_state_translate($state) {
+        switch ($state) {
+        case VIR_DOMAIN_RUNNING:  return 'running';
+        case VIR_DOMAIN_NOSTATE:  return 'nostate';
+        case VIR_DOMAIN_BLOCKED:  return 'blocked';
+        case VIR_DOMAIN_PAUSED:   return 'paused';
+        case VIR_DOMAIN_SHUTDOWN: return 'shutdown';
+        case VIR_DOMAIN_SHUTOFF:  return 'shutoff';
+        case VIR_DOMAIN_CRASHED:  return 'crashed';
+        }
+
+        return 'unknown';
+    }
+
+    function domain_get_vnc_port($domain) {
+        $tmp = $this->get_xpath($domain, '//domain/devices/graphics/@port', 
false);
+        $var = (int)$tmp[0];
+        unset($tmp);
+
+        return $var;
+    }
+
+    function domain_get_arch($domain) {
+        $domain = $this->get_domain_object($domain);
+
+        $tmp = $this->get_xpath($domain, '//domain/os/type/@arch', false);
+        $var = $tmp[0];
+        unset($tmp);
+
+        return $var;
+    }
+
+    function domain_get_description($domain) {
+        $tmp = $this->get_xpath($domain, '//domain/description', false);
+        $var = $tmp[0];
+        unset($tmp);
+
+        return $var;
+    }
+
+    function domain_get_clock_offset($domain) {
+        $tmp = $this->get_xpath($domain, '//domain/clock/@offset', false);
+        $var = $tmp[0];
+        unset($tmp);
+
+        return $var;
+    }
+
+    function domain_get_feature($domain, $feature) {
+        $tmp = $this->get_xpath($domain, '//domain/features/'.$feature.'/..', 
false);
+        $ret = ($tmp != false);
+        unset($tmp);
+
+        return $ret;
+    }
+
+    function domain_get_boot_devices($domain) {
+        $tmp = $this->get_xpath($domain, '//domain/os/boot/@dev', false);
+        if (!$tmp)
+            return false;
+
+        $devs = array();
+        for ($i = 0; $i < $tmp['num']; $i++)
+            $devs[] = $tmp[$i];
+
+        return $devs;
+    }
+
+    function _get_single_xpath_result($domain, $xpath) {
+        $tmp = $this->get_xpath($domain, $xpath, false);
+        if (!$tmp)
+            return false;
+
+        if ($tmp['num'] == 0)
+            return false;
+
+        return $tmp[0];
+    }
+
+    function domain_get_multimedia_device($domain, $type, $display=false) {
+        $domain = $this->get_domain_object($domain);
+
+        if ($type == 'console') {
+            $type = $this->_get_single_xpath_result($domain, 
'//domain/devices/console/@type');
+            $targetType = $this->_get_single_xpath_result($domain, 
'//domain/devices/console/target/@type');
+            $targetPort = $this->_get_single_xpath_result($domain, 
'//domain/devices/console/target/@port');
+
+            if ($display)
+                return $type.' ('.$targetType.' on port '.$targetPort.')';
+            else
+                return array('type' => $type, 'targetType' => $targetType, 
'targetPort' => $targetPort);
+        }
+        else
+            if ($type == 'input') {
+                $type = $this->_get_single_xpath_result($domain, 
'//domain/devices/input/@type');
+                $bus  = $this->_get_single_xpath_result($domain, 
'//domain/devices/input/@bus');
+
+                if ($display)
+                    return $type.' on '.$bus;
+                else
+                    return array('type' => $type, 'bus' => $bus);
+            }
+            else
+                if ($type == 'graphics') {
+                    $type = $this->_get_single_xpath_result($domain, 
'//domain/devices/graphics/@type');
+                    $port = $this->_get_single_xpath_result($domain, 
'//domain/devices/graphics/@port');
+                    $autoport = $this->_get_single_xpath_result($domain, 
'//domain/devices/graphics/@autoport');
+
+                    if ($display)
+                        return $type.' on port '.$port.' with'.($autoport ? '' 
: 'out').' autoport enabled';
+                    else
+                        return array('type' => $type, 'port' => $port, 
'autoport' => $autoport);
                 }
-
-                function get_domain_emulator($domain) {
-                        $dom = $this->get_domain_object($domain);
-
-                        $tmp =  $this->get_xpath($dom, 
'//domain/devices/emulator', false);
-                        if ($tmp['num'] == 0)
-                            return $this->_set_last_error();
-
-                        $ret = $tmp[0];
-                        unset($tmp);
-
-                        return $ret;
-                }
-
-               function get_network_cards($domain) {
-                       $dom = $this->get_domain_object($domain);
-
-                       $nics =  $this->get_xpath($dom, 
'//domain/devices/interface[@type="network"]', false);
-                       if (!is_array($nics))
-                               return $this->_set_last_error();
-
-                       return $nics['num'];
-               }
-
-               function get_disk_capacity($domain, $physical=false, $disk='*', 
$unit='?') {
-                       $dom = $this->get_domain_object($domain);
-                       $tmp = $this->get_disk_stats($dom);
-
-                       $ret = 0;
-                       for ($i = 0; $i < sizeof($tmp); $i++) {
-                               if (($disk == '*') || ($tmp[$i]['device'] == 
$disk))
-                                       if ($physical)
-                                               $ret += $tmp[$i]['physical'];
-                                       else
-                                               $ret += $tmp[$i]['capacity'];
-                       }
-                       unset($tmp);
-
-                       return $this->format_size($ret, 2, $unit);
-               }
-
-               function get_disk_count($domain) {
-                       $dom = $this->get_domain_object($domain);
-                       $tmp = $this->get_disk_stats($dom);
-                       $ret = sizeof($tmp);
-                       unset($tmp);
-
-                       return $ret;
-               }
-
-               function format_size($value, $decimals, $unit='?') {
-                       /* Autodetect unit that's appropriate */
-                       if ($unit == '?') {
-                               /* (1 << 40) is not working correctly on i386 
systems */
-                               if ($value > 1099511627776)
-                                       $unit = 'T';
-                               else
-                               if ($value > (1 << 30))
-                                       $unit = 'G';
-                               else
-                               if ($value > (1 << 20))
-                                       $unit = 'M';
-                               else
-                               if ($value > (1 << 10))
-                                       $unit = 'K';
-                               else
-                                       $unit = 'B';
-                       }
-
-                       $unit = strtoupper($unit);
-
-                       switch ($unit) {
-                               case 'T': return number_format($value / 
(float)1099511627776, $decimals, '.', ' ').' TB';
-                               case 'G': return number_format($value / 
(float)(1 << 30), $decimals, '.', ' ').' GB';
-                               case 'M': return number_format($value / 
(float)(1 << 20), $decimals, '.', ' ').' MB';
-                               case 'K': return number_format($value / 
(float)(1 << 10), $decimals, '.', ' ').' kB';
-                               case 'B': return $value.' B';
-                       }
-
-                       return false;
-               }
-
-               function get_uri() {
-                       $tmp = libvirt_connect_get_uri($this->conn);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_domain_count() {
-                       $tmp = libvirt_domain_get_counts($this->conn);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_storagepools() {
-                       $tmp = libvirt_list_storagepools($this->conn);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_storagepool_res($res) {
-                       if ($res == false)
-                               return false;
-                       if (is_resource($res))
-                               return $res;
-
-                       $tmp = libvirt_storagepool_lookup_by_name($this->conn, 
$res);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_storagepool_info($name) {
-                       if (!($res = $this->get_storagepool_res($name)))
-                               return false;
-
-                       $path = libvirt_storagepool_get_xml_desc($res, 
'/pool/target/path');
-                       if (!$path)
-                               return $this->_set_last_error();
-                       $perms = libvirt_storagepool_get_xml_desc($res, 
'/pool/target/permissions/mode');
-                       if (!$perms)
-                               return $this->_set_last_error();
-                       $otmp1 = libvirt_storagepool_get_xml_desc($res, 
'/pool/target/permissions/owner');
-                       if (!is_string($otmp1))
-                               return $this->_set_last_error();
-                       $otmp2 = libvirt_storagepool_get_xml_desc($res, 
'/pool/target/permissions/group');
-                       if (!is_string($otmp2))
-                               return $this->_set_last_error();
-                       $tmp = libvirt_storagepool_get_info($res);
-                       $tmp['volume_count'] = sizeof( 
libvirt_storagepool_list_volumes($res) );
-                       $tmp['active'] = libvirt_storagepool_is_active($res);
-                       $tmp['path'] = $path;
-                       $tmp['permissions'] = $perms;
-                       $tmp['id_user'] = $otmp1;
-                       $tmp['id_group'] = $otmp2;
-
-                       return $tmp;
-               }
-
-               function storagepool_get_volume_information($pool, $name=false) 
{
-                       if (!is_resource($pool))
-                               $pool = $this->get_storagepool_res($pool);
-                       if (!$pool)
-                               return false;
-
-                       $out = array();
-                       $tmp = libvirt_storagepool_list_volumes($pool);
-                       for ($i = 0; $i < sizeof($tmp); $i++) {
-                               if (($tmp[$i] == $name) || ($name == false)) {
-                                       $r = 
libvirt_storagevolume_lookup_by_name($pool, $tmp[$i]);
-                                       $out[$tmp[$i]] = 
libvirt_storagevolume_get_info($r);
-                                       $out[$tmp[$i]]['path'] = 
libvirt_storagevolume_get_path($r);
-                                       unset($r);
-                               }
-                       }
-
-                       return $out;
-               }
-
-               function storagevolume_delete($path) {
-                       $vol = 
libvirt_storagevolume_lookup_by_path($this->conn, $path);
-                       if (!libvirt_storagevolume_delete($vol))
-                               return $this->_set_last_error();
-
-                       return true;
-               }
-
-               function translate_volume_type($type) {
-                       if ($type == 1)
-                               return 'Block device';
-
-                       return 'File image';
-               }
-
-               function translate_perms($mode) {
-                       $mode = (string)((int)$mode);
-
-                       $tmp = '---------';
-
-                       for ($i = 0; $i < 3; $i++) {
-                               $bits = (int)$mode[$i];
-                               if ($bits & 4)
-                                       $tmp[ ($i * 3) ] = 'r';
-                               if ($bits & 2)
-                                       $tmp[ ($i * 3) + 1 ] = 'w';
-                               if ($bits & 1)
-                                       $tmp[ ($i * 3) + 2 ] = 'x';
-                       }
-                       
-
-                       return $tmp;
-               }
-
-               function parse_size($size) {
-                       $unit = $size[ strlen($size) - 1 ];
-
-                       $size = (int)$size;
-                       switch (strtoupper($unit)) {
-                               case 'T': $size *= 1099511627776;
-                                         break;
-                               case 'G': $size *= 1073741824;
-                                         break;
-                               case 'M': $size *= 1048576;
-                                         break;
-                               case 'K': $size *= 1024;
-                                         break;
-                       }
-
-                       return $size;
-               }
-
-               function storagevolume_create($pool, $name, $capacity, 
$allocation) {
-                       $pool = $this->get_storagepool_res($pool);
-
-                       $capacity = $this->parse_size($capacity);
-                       $allocation = $this->parse_size($allocation);
-
-                       $xml = "<volume>\n".
-                               "  <name>$name</name>\n".
-                               "  <capacity>$capacity</capacity>\n".
-                               "  <allocation>$allocation</allocation>\n".
-                               "</volume>";
-
-                       $tmp = libvirt_storagevolume_create_xml($pool, $xml);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_hypervisor_name() {
-                       $tmp = libvirt_connect_get_information($this->conn);
-                       $hv = $tmp['hypervisor'];
-                       unset($tmp);
-
-                       switch (strtoupper($hv)) {
-                               case 'QEMU': $type = 'qemu';
-                                       break;
-                               case 'XEN': $type = 'xen';
-                                       break;
-
-                               default:
-                                       $type = $hv;
-                       }
-
-                       return $type;
-               }
-
-               function get_connect_information() {
-                       $tmp = libvirt_connect_get_information($this->conn);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_change_xml($domain, $xml) {
-                       $dom = $this->get_domain_object($domain);
-
-                       if (!($old_xml = libvirt_domain_get_xml_desc($dom, 
NULL)))
-                               return $this->_set_last_error();
-                       if (!libvirt_domain_undefine($dom))
-                               return $this->_set_last_error();
-                       if (!libvirt_domain_define_xml($this->conn, $xml)) {
-                               $this->last_error = libvirt_get_last_error();
-                               libvirt_domain_define_xml($this->conn, 
$old_xml);
-                               return false;
-                       }
-
-                       return true;
-               }
-
-               function network_change_xml($network, $xml) {
-                       $net = $this->get_network_res($network);
-
-                       if (!($old_xml = libvirt_network_get_xml_desc($net, 
NULL))) {
-                               return $this->_set_last_error();
-                       }
-                       if (!libvirt_network_undefine($net)) {
-                               return $this->_set_last_error();
-                       }
-                       if (!libvirt_network_define_xml($this->conn, $xml)) {
-                               $this->last_error = libvirt_get_last_error();
-                               libvirt_network_define_xml($this->conn, 
$old_xml);
-                               return false;
-                       }
-
-                       return true;
-               }
-
-               function translate_storagepool_state($state) {
-                       switch ($state) {
-                               case 0: return 'Not running';
-                                       break;
-                               case 1: return 'Building pool';
-                                       break;
-                               case 2: return 'Running';
-                                       break;
-                               case 3: return 'Running degraded';
-                                       break;
-                               case 4: return 'Running but inaccessible';
-                                       break;
-                       }
-
-                       return 'Unknown';
-               }
-
-               function get_domains() {
-                       $tmp = libvirt_list_domains($this->conn);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_domain_by_name($name) {
-                       $tmp = libvirt_domain_lookup_by_name($this->conn, 
$name);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_networks($type = VIR_NETWORKS_ALL) {
-                       $tmp = libvirt_list_networks($this->conn, $type);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_nic_models() {
-                       return array('default', 'rtl8139', 'e1000', 'pcnet', 
'ne2k_pci', 'virtio');
-               }
-
-               function get_network_res($network) {
-                       if ($network == false)
-                               return false;
-                       if (is_resource($network))
-                               return $network;
-
-                       $tmp = libvirt_network_get($this->conn, $network);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_network_bridge($network) {
-                       $res = $this->get_network_res($network);
-                       if ($res == false)
-                               return false;
-
-                       $tmp = libvirt_network_get_bridge($res);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_network_active($network) {
-                       $res = $this->get_network_res($network);
-                       if ($res == false)
-                               return false;
-
-                       $tmp = libvirt_network_get_active($res);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function set_network_active($network, $active = true) {
-                       $res = $this->get_network_res($network);
-                       if ($res == false)
-                               return false;
-
-                       if (!libvirt_network_set_active($res, $active ? 1 : 0))
-                               return $this->_set_last_error();
-
-                       return true;
-               }
-
-               function get_network_information($network) {
-                       $res = $this->get_network_res($network);
-                       if ($res == false)
-                               return false;
-
-                       $tmp = libvirt_network_get_information($res);
-                       if (!$tmp)
-                               return $this->_set_last_error();
-                       $tmp['active'] = $this->get_network_active($res);
-                       return $tmp;
-               }
-
-               function get_network_xml($network) {
-                       $res = $this->get_network_res($network);
-                       if ($res == false)
-                               return false;
-
-                       $tmp = libvirt_network_get_xml_desc($res, NULL);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_node_devices($dev = false) {
-                       $tmp = ($dev == false) ? 
libvirt_list_nodedevs($this->conn) : libvirt_list_nodedevs($this->conn, $dev);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_node_device_res($res) {
-                       if ($res == false)
-                               return false;
-                       if (is_resource($res))
-                               return $res;
-
-                       $tmp = libvirt_nodedev_get($this->conn, $res);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_node_device_caps($dev) {
-                       $dev = $this->get_node_device_res($dev);
-
-                       $tmp = libvirt_nodedev_capabilities($dev);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_node_device_cap_options() {
-                       $all = $this->get_node_devices();
-
-                       $ret = array();
-                       for ($i = 0; $i < sizeof($all); $i++) {
-                               $tmp = $this->get_node_device_caps($all[$i]);
-
-                               for ($ii = 0; $ii < sizeof($tmp); $ii++)
-                                       if (!in_array($tmp[$ii], $ret))
-                                               $ret[] = $tmp[$ii];
-                       }
-
-                       return $ret;
-               }
-
-               function get_node_device_xml($dev) {
-                       $dev = $this->get_node_device_res($dev);
-
-                       $tmp = libvirt_nodedev_get_xml_desc($dev, NULL);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function get_node_device_information($dev) {
-                       $dev = $this->get_node_device_res($dev);
-
-                       $tmp = libvirt_nodedev_get_information($dev);           
        
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_get_name($res) {
-                       return libvirt_domain_get_name($res);
-               }
-
-               function domain_get_info($dom) {
-                       if (!$this->allow_cached)
-                               return libvirt_domain_get_info($dom);
-
-                       $domname = libvirt_domain_get_name($dom);
-                       if (!array_key_exists($domname, $this->dominfos)) {
-                               $info = libvirt_domain_get_info($dom);
-                               $this->dominfos[$domname] = $info;
-                       }
-
-                       return $this->dominfos[$domname];
-               }
-
-               function get_last_error() {
-                       return $this->last_error;
-               }
-
-               function domain_get_xml($domain, $get_inactive = false) {
-                       $dom = $this->get_domain_object($domain);
-                       if (!$dom)
-                               return false;
-
-                       $tmp = libvirt_domain_get_xml_desc($dom, $get_inactive 
? VIR_DOMAIN_XML_INACTIVE : 0);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function network_get_xml($network) {
-                       $net = $this->get_network_res($network);
-                       if (!$net)
-                               return false;
-
-                       $tmp = libvirt_network_get_xml_desc($net, NULL);
-                       return ($tmp) ? $tmp : $this->_set_last_error();;
-               }
-
-               function domain_get_id($domain, $name = false) {
-                       $dom = $this->get_domain_object($domain);
-                       if ((!$dom) || (!$this->domain_is_running($dom, $name)))
-                               return false;
-
-                       $tmp = libvirt_domain_get_id($dom);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_get_interface_stats($nameRes, $iface) {
-                       $dom = $this->get_domain_object($domain);
-                       if (!$dom)
-                               return false;
-
-                       $tmp = libvirt_domain_interface_stats($dom, $iface);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_get_memory_stats($domain) {
-                       $dom = $this->get_domain_object($domain);
-                       if (!$dom)
-                               return false;
-
-                       $tmp = libvirt_domain_memory_stats($dom);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_start($dom) {
-                       $dom=$this->get_domain_object($dom);
-                       if ($dom) {
-                               $ret = libvirt_domain_create($dom);
-                               $this->last_error = libvirt_get_last_error();
-                               return $ret;
-                       }
-
-                       $ret = libvirt_domain_create_xml($this->conn, $dom);
-                       $this->last_error = libvirt_get_last_error();
-                       return $ret;
-               }
-
-               function domain_define($xml) {
-                       $tmp = libvirt_domain_define_xml($this->conn, $xml);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_destroy($domain) {
-                       $dom = $this->get_domain_object($domain);
-                       if (!$dom)
-                               return false;
-
-                       $tmp = libvirt_domain_destroy($dom);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_reboot($domain) {
-                       $dom = $this->get_domain_object($domain);
-                       if (!$dom)
-                               return false;
-
-                       $tmp = libvirt_domain_reboot($dom);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_suspend($domain) {
-                       $dom = $this->get_domain_object($domain);
-                       if (!$dom)
-                               return false;
-
-                       $tmp = libvirt_domain_suspend($dom);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_resume($domain) {
-                       $dom = $this->get_domain_object($domain);
-                       if (!$dom)
-                               return false;
-
-                       $tmp = libvirt_domain_resume($dom);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_get_name_by_uuid($uuid) {
-                       $dom = 
libvirt_domain_lookup_by_uuid_string($this->conn, $uuid);
-                       if (!$dom)
-                               return false;
-                       $tmp = libvirt_domain_get_name($dom);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_shutdown($domain) {
-                       $dom = $this->get_domain_object($domain);
-                       if (!$dom)
-                               return false;
-
-                       $tmp = libvirt_domain_shutdown($dom);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_undefine($domain) {
-                       $dom = $this->get_domain_object($domain);
-                       if (!$dom)
-                               return false;
-
-                       $tmp = libvirt_domain_undefine($dom);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-
-               function domain_is_running($domain, $name = false) {
-                       $dom = $this->get_domain_object($domain);
-                       if (!$dom)
-                               return false;
-                       $tmp = $this->domain_get_info($dom);
-                       if (!$tmp)
-                               return $this->_set_last_error();
-                       $ret = ( ($tmp['state'] == VIR_DOMAIN_RUNNING) || 
($tmp['state'] == VIR_DOMAIN_BLOCKED) );
-                       unset($tmp);
-                       return $ret;
-               }
-
-               function domain_state_translate($state) {
-                       switch ($state) {
-                               case VIR_DOMAIN_RUNNING:  return 'running';
-                               case VIR_DOMAIN_NOSTATE:  return 'nostate';
-                               case VIR_DOMAIN_BLOCKED:  return 'blocked';
-                               case VIR_DOMAIN_PAUSED:   return 'paused';
-                               case VIR_DOMAIN_SHUTDOWN: return 'shutdown';
-                               case VIR_DOMAIN_SHUTOFF:  return 'shutoff';
-                               case VIR_DOMAIN_CRASHED:  return 'crashed';
-                       }
-
-                       return 'unknown';
-               }
-
-               function domain_get_vnc_port($domain) {
-                       $tmp = $this->get_xpath($domain, 
'//domain/devices/graphics/@port', false);
-                       $var = (int)$tmp[0];
-                       unset($tmp);
-
-                       return $var;
-               }
-
-               function domain_get_arch($domain) {
-                       $domain = $this->get_domain_object($domain);
-
-                       $tmp = $this->get_xpath($domain, 
'//domain/os/type/@arch', false);
-                       $var = $tmp[0];
-                       unset($tmp);
-
-                       return $var;
-               }
-
-               function domain_get_description($domain) {
-                       $tmp = $this->get_xpath($domain, 
'//domain/description', false);
-                       $var = $tmp[0];
-                       unset($tmp);
-
-                       return $var;
-               }
-
-               function domain_get_clock_offset($domain) {
-                       $tmp = $this->get_xpath($domain, 
'//domain/clock/@offset', false);
-                       $var = $tmp[0];
-                       unset($tmp);
-
-                       return $var;
-               }
-
-               function domain_get_feature($domain, $feature) {
-                       $tmp = $this->get_xpath($domain, 
'//domain/features/'.$feature.'/..', false);
-                       $ret = ($tmp != false);
-                       unset($tmp);
-
-                       return $ret;
-               }
-
-               function domain_get_boot_devices($domain) {
-                       $tmp = $this->get_xpath($domain, 
'//domain/os/boot/@dev', false);
-                       if (!$tmp)
-                               return false;
-
-                       $devs = array();
-                       for ($i = 0; $i < $tmp['num']; $i++)
-                               $devs[] = $tmp[$i];
-
-                       return $devs;
-               }
-
-               function _get_single_xpath_result($domain, $xpath) {
-                       $tmp = $this->get_xpath($domain, $xpath, false);
-                       if (!$tmp)
-                               return false;
-
-                       if ($tmp['num'] == 0)
-                               return false;
-
-                       return $tmp[0];
-               }
-
-               function domain_get_multimedia_device($domain, $type, 
$display=false) {
-                       $domain = $this->get_domain_object($domain);
-
-                       if ($type == 'console') {
-                               $type = 
$this->_get_single_xpath_result($domain, '//domain/devices/console/@type');
-                               $targetType = 
$this->_get_single_xpath_result($domain, 
'//domain/devices/console/target/@type');
-                               $targetPort = 
$this->_get_single_xpath_result($domain, 
'//domain/devices/console/target/@port');
-
-                               if ($display)
-                                       return $type.' ('.$targetType.' on port 
'.$targetPort.')';
-                               else
-                                       return array('type' => $type, 
'targetType' => $targetType, 'targetPort' => $targetPort);
-                       }
-                       else
-                       if ($type == 'input') {
-                               $type = 
$this->_get_single_xpath_result($domain, '//domain/devices/input/@type');
-                               $bus  = 
$this->_get_single_xpath_result($domain, '//domain/devices/input/@bus');
-
-                               if ($display)
-                                       return $type.' on '.$bus;
-                               else
-                                       return array('type' => $type, 'bus' => 
$bus);
-                       }
-                       else
-                       if ($type == 'graphics') {
-                               $type = 
$this->_get_single_xpath_result($domain, '//domain/devices/graphics/@type');
-                               $port = 
$this->_get_single_xpath_result($domain, '//domain/devices/graphics/@port');
-                               $autoport = 
$this->_get_single_xpath_result($domain, '//domain/devices/graphics/@autoport');
-
-                               if ($display)
-                                       return $type.' on port '.$port.' 
with'.($autoport ? '' : 'out').' autoport enabled';
-                               else
-                                       return array('type' => $type, 'port' => 
$port, 'autoport' => $autoport);
-                       }
-                       else
-                       if ($type == 'video') {
-                               $type  = 
$this->_get_single_xpath_result($domain, '//domain/devices/video/model/@type');
-                               $vram  = 
$this->_get_single_xpath_result($domain, '//domain/devices/video/model/@vram');
-                               $heads = 
$this->_get_single_xpath_result($domain, '//domain/devices/video/model/@heads');
-
-                               if ($display)
-                                       return $type.' with '.($vram / 1024).' 
MB VRAM, '.$heads.' head(s)';
-                               else
-                                       return array('type' => $type, 'vram' => 
$vram, 'heads' => $heads);
-                       }
-                       else
-                               return false;
-               }
-
-               function domain_get_host_devices_pci($domain) {
-                       $xpath = 
'//domain/devices/hostdev[@type="pci"]/source/address/@';
-
-                       $dom  = $this->get_xpath($domain, $xpath.'domain', 
false);
-                       $bus  = $this->get_xpath($domain, $xpath.'bus', false);
-                       $slot = $this->get_xpath($domain, $xpath.'slot', false);
-                       $func = $this->get_xpath($domain, $xpath.'function', 
false);
-
-                       $devs = array();
-                       for ($i = 0; $i < $bus['num']; $i++) {
-                               $d = str_replace('0x', '', $dom[$i]);
-                               $b = str_replace('0x', '', $bus[$i]);
-                               $s = str_replace('0x', '', $slot[$i]);
-                               $f = str_replace('0x', '', $func[$i]);
-                               $devid = 'pci_'.$d.'_'.$b.'_'.$s.'_'.$f;
-                               $tmp2 = 
$this->get_node_device_information($devid);
-                               $devs[] = array('domain' => $dom[$i], 'bus' => 
$bus[$i],
-                                               'slot' => $slot[$i], 'func' => 
$func[$i],
-                                               'vendor' => 
$tmp2['vendor_name'],
-                                               'vendor_id' => 
$tmp2['vendor_id'],
-                                               'product' => 
$tmp2['product_name'],
-                                               'product_id' => 
$tmp2['product_id']);
-                       }
-
-                       return $devs;
-               }
-
-               function _lookup_device_usb($vendor_id, $product_id) {
-                       $tmp = $this->get_node_devices(false);
-                       for ($i = 0; $i < sizeof($tmp); $i++) {
-                               $tmp2 = 
$this->get_node_device_information($tmp[$i]);
-                               if (array_key_exists('product_id', $tmp2)) {
-                                       if (($tmp2['product_id'] == $product_id)
-                                               && ($tmp2['vendor_id'] == 
$vendor_id))
-                                                       return $tmp2;
-                               }
-                       }
-
-                       return false;
-               }
-
-               function domain_get_host_devices_usb($domain) {
-                       $xpath = 
'//domain/devices/hostdev[@type="usb"]/source/';
-
-                       $vid = $this->get_xpath($domain, $xpath.'vendor/@id', 
false);
-                       $pid = $this->get_xpath($domain, $xpath.'product/@id', 
false);
-
-                       $devs = array();
-                       for ($i = 0; $i < $vid['num']; $i++) {
-                               $dev = $this->_lookup_device_usb($vid[$i], 
$pid[$i]);
-                               $devs[] = array('vendor_id' => $vid[$i], 
'product_id' => $pid[$i],
-                                               'product' => 
$dev['product_name'],
-                                               'vendor' => 
$dev['vendor_name']);
-                       }
-
-                       return $devs;
-               }
-
-               function domain_get_host_devices($domain) {
-                       $domain = $this->get_domain_object($domain);
-
-                       $devs_pci = $this->domain_get_host_devices_pci($domain);
-                       $devs_usb = $this->domain_get_host_devices_usb($domain);
-
-                       return array('pci' => $devs_pci, 'usb' => $devs_usb);
-               }
-
-               function domain_set_feature($domain, $feature, $val) {
-                       $domain = $this->get_domain_object($domain);
-
-                       if ($this->domain_get_feature($domain, $feature) == 
$val)
-                               return true;
-
-                       $xml = $this->domain_get_xml($domain, true);
-                       if ($val) {
-                               if (strpos('features', $xml))
-                                       $xml = str_replace('<features>', 
"<features>\n<$feature/>", $xml);
-                               else
-                                       $xml = str_replace('</os>', 
"</os><features>\n<$feature/></features>", $xml);
-                       }
-                       else
-                               $xml = str_replace("<$feature/>\n", '', $xml);
-
-                       return $this->domain_change_xml($domain, $xml);
-               }
-
-               function domain_set_clock_offset($domain, $offset) {
-                       $domain = $this->get_domain_object($domain);
-
-                       if (($old_offset = 
$this->domain_get_clock_offset($domain)) == $offset)
-                               return true;
-
-                       $xml = $this->domain_get_xml($domain, true);
-                       $xml = str_replace("<clock offset='$old_offset'/>", 
"<clock offset='$offset'/>", $xml);
-
-                       return $this->domain_change_xml($domain, $xml);
-               }
-
-               function domain_set_description($domain, $desc) {
-                       $domain = $this->get_domain_object($domain);
-
-                       $description = $this->domain_get_description($domain);
-                       if ($description == $desc)
-                               return true;
-
-                       $xml = $this->domain_get_xml($domain, true);
-                       if (!$description)
-                               $xml = str_replace("</uuid>", 
"</uuid><description>$desc</description>", $xml);
-                       else {
-                               $tmp = explode("\n", $xml);
-                               for ($i = 0; $i < sizeof($tmp); $i++)
-                                       if (strpos('.'.$tmp[$i], 
'<description'))
-                                               $tmp[$i] = 
"<description>$desc</description>";
-
-                               $xml = join("\n", $tmp);
-                       }
-
-                       return $this->domain_change_xml($domain, $xml);
-               }
-
-               function host_get_node_info() {
-                       $tmp = libvirt_node_get_info($this->conn);
-                       return ($tmp) ? $tmp : $this->_set_last_error();
-               }
-       }
+                else
+                    if ($type == 'video') {
+                        $type  = $this->_get_single_xpath_result($domain, 
'//domain/devices/video/model/@type');
+                        $vram  = $this->_get_single_xpath_result($domain, 
'//domain/devices/video/model/@vram');
+                        $heads = $this->_get_single_xpath_result($domain, 
'//domain/devices/video/model/@heads');
+
+                        if ($display)
+                            return $type.' with '.($vram / 1024).' MB VRAM, 
'.$heads.' head(s)';
+                        else
+                            return array('type' => $type, 'vram' => $vram, 
'heads' => $heads);
+                    }
+                    else
+                        return false;
+    }
+
+    function domain_get_host_devices_pci($domain) {
+        $xpath = '//domain/devices/hostdev[@type="pci"]/source/address/@';
+
+        $dom  = $this->get_xpath($domain, $xpath.'domain', false);
+        $bus  = $this->get_xpath($domain, $xpath.'bus', false);
+        $slot = $this->get_xpath($domain, $xpath.'slot', false);
+        $func = $this->get_xpath($domain, $xpath.'function', false);
+
+        $devs = array();
+        for ($i = 0; $i < $bus['num']; $i++) {
+            $d = str_replace('0x', '', $dom[$i]);
+            $b = str_replace('0x', '', $bus[$i]);
+            $s = str_replace('0x', '', $slot[$i]);
+            $f = str_replace('0x', '', $func[$i]);
+            $devid = 'pci_'.$d.'_'.$b.'_'.$s.'_'.$f;
+            $tmp2 = $this->get_node_device_information($devid);
+            $devs[] = array('domain' => $dom[$i], 'bus' => $bus[$i],
+                'slot' => $slot[$i], 'func' => $func[$i],
+                'vendor' => $tmp2['vendor_name'],
+                'vendor_id' => $tmp2['vendor_id'],
+                'product' => $tmp2['product_name'],
+                'product_id' => $tmp2['product_id']);
+        }
+
+        return $devs;
+    }
+
+    function _lookup_device_usb($vendor_id, $product_id) {
+        $tmp = $this->get_node_devices(false);
+        for ($i = 0; $i < sizeof($tmp); $i++) {
+            $tmp2 = $this->get_node_device_information($tmp[$i]);
+            if (array_key_exists('product_id', $tmp2)) {
+                if (($tmp2['product_id'] == $product_id)
+                    && ($tmp2['vendor_id'] == $vendor_id))
+                    return $tmp2;
+            }
+        }
+
+        return false;
+    }
+
+    function domain_get_host_devices_usb($domain) {
+        $xpath = '//domain/devices/hostdev[@type="usb"]/source/';
+
+        $vid = $this->get_xpath($domain, $xpath.'vendor/@id', false);
+        $pid = $this->get_xpath($domain, $xpath.'product/@id', false);
+
+        $devs = array();
+        for ($i = 0; $i < $vid['num']; $i++) {
+            $dev = $this->_lookup_device_usb($vid[$i], $pid[$i]);
+            $devs[] = array('vendor_id' => $vid[$i], 'product_id' => $pid[$i],
+                'product' => $dev['product_name'],
+                'vendor' => $dev['vendor_name']);
+        }
+
+        return $devs;
+    }
+
+    function domain_get_host_devices($domain) {
+        $domain = $this->get_domain_object($domain);
+
+        $devs_pci = $this->domain_get_host_devices_pci($domain);
+        $devs_usb = $this->domain_get_host_devices_usb($domain);
+
+        return array('pci' => $devs_pci, 'usb' => $devs_usb);
+    }
+
+    function domain_set_feature($domain, $feature, $val) {
+        $domain = $this->get_domain_object($domain);
+
+        if ($this->domain_get_feature($domain, $feature) == $val)
+            return true;
+
+        $xml = $this->domain_get_xml($domain, true);
+        if ($val) {
+            if (strpos('features', $xml))
+                $xml = str_replace('<features>', "<features>\n<$feature/>", 
$xml);
+            else
+                $xml = str_replace('</os>', 
"</os><features>\n<$feature/></features>", $xml);
+        }
+        else
+            $xml = str_replace("<$feature/>\n", '', $xml);
+
+        return $this->domain_change_xml($domain, $xml);
+    }
+
+    function domain_set_clock_offset($domain, $offset) {
+        $domain = $this->get_domain_object($domain);
+
+        if (($old_offset = $this->domain_get_clock_offset($domain)) == $offset)
+            return true;
+
+        $xml = $this->domain_get_xml($domain, true);
+        $xml = str_replace("<clock offset='$old_offset'/>", "<clock 
offset='$offset'/>", $xml);
+
+        return $this->domain_change_xml($domain, $xml);
+    }
+
+    function domain_set_description($domain, $desc) {
+        $domain = $this->get_domain_object($domain);
+
+        $description = $this->domain_get_description($domain);
+        if ($description == $desc)
+            return true;
+
+        $xml = $this->domain_get_xml($domain, true);
+        if (!$description)
+            $xml = str_replace("</uuid>", 
"</uuid><description>$desc</description>", $xml);
+        else {
+            $tmp = explode("\n", $xml);
+            for ($i = 0; $i < sizeof($tmp); $i++)
+                if (strpos('.'.$tmp[$i], '<description'))
+                    $tmp[$i] = "<description>$desc</description>";
+
+            $xml = join("\n", $tmp);
+        }
+
+        return $this->domain_change_xml($domain, $xml);
+    }
+
+    function host_get_node_info() {
+        $tmp = libvirt_node_get_info($this->conn);
+        return ($tmp) ? $tmp : $this->_set_last_error();
+    }
+}
 ?>
-- 
2.8.4

--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to