[libvirt] [libvirt-php][PATCH 04/14] examples: Reformat libvirt.php

Michal Privoznik mprivozn at redhat.com
Fri Jul 8 13:23:13 UTC 2016


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 <mprivozn at redhat.com>
---
 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




More information about the libvir-list mailing list