/* * Copyright (c) Citrix Systems, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1) Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2) Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; namespace XenAPI { /// /// A physical USB device /// First published in XenServer 7.3. /// public partial class PUSB : XenObject { public PUSB() { } public PUSB(string uuid, XenRef USB_group, XenRef host, string path, string vendor_id, string vendor_desc, string product_id, string product_desc, string serial, string version, string description, bool passthrough_enabled, Dictionary other_config) { this.uuid = uuid; this.USB_group = USB_group; this.host = host; this.path = path; this.vendor_id = vendor_id; this.vendor_desc = vendor_desc; this.product_id = product_id; this.product_desc = product_desc; this.serial = serial; this.version = version; this.description = description; this.passthrough_enabled = passthrough_enabled; this.other_config = other_config; } /// /// Creates a new PUSB from a Proxy_PUSB. /// /// public PUSB(Proxy_PUSB proxy) { this.UpdateFromProxy(proxy); } /// /// Updates each field of this instance with the value of /// the corresponding field of a given PUSB. /// public override void UpdateFrom(PUSB update) { uuid = update.uuid; USB_group = update.USB_group; host = update.host; path = update.path; vendor_id = update.vendor_id; vendor_desc = update.vendor_desc; product_id = update.product_id; product_desc = update.product_desc; serial = update.serial; version = update.version; description = update.description; passthrough_enabled = update.passthrough_enabled; other_config = update.other_config; } internal void UpdateFromProxy(Proxy_PUSB proxy) { uuid = proxy.uuid == null ? null : (string)proxy.uuid; USB_group = proxy.USB_group == null ? null : XenRef.Create(proxy.USB_group); host = proxy.host == null ? null : XenRef.Create(proxy.host); path = proxy.path == null ? null : (string)proxy.path; vendor_id = proxy.vendor_id == null ? null : (string)proxy.vendor_id; vendor_desc = proxy.vendor_desc == null ? null : (string)proxy.vendor_desc; product_id = proxy.product_id == null ? null : (string)proxy.product_id; product_desc = proxy.product_desc == null ? null : (string)proxy.product_desc; serial = proxy.serial == null ? null : (string)proxy.serial; version = proxy.version == null ? null : (string)proxy.version; description = proxy.description == null ? null : (string)proxy.description; passthrough_enabled = (bool)proxy.passthrough_enabled; other_config = proxy.other_config == null ? null : Maps.convert_from_proxy_string_string(proxy.other_config); } public Proxy_PUSB ToProxy() { Proxy_PUSB result_ = new Proxy_PUSB(); result_.uuid = uuid ?? ""; result_.USB_group = USB_group ?? ""; result_.host = host ?? ""; result_.path = path ?? ""; result_.vendor_id = vendor_id ?? ""; result_.vendor_desc = vendor_desc ?? ""; result_.product_id = product_id ?? ""; result_.product_desc = product_desc ?? ""; result_.serial = serial ?? ""; result_.version = version ?? ""; result_.description = description ?? ""; result_.passthrough_enabled = passthrough_enabled; result_.other_config = Maps.convert_to_proxy_string_string(other_config); return result_; } /// /// Creates a new PUSB from a Hashtable. /// Note that the fields not contained in the Hashtable /// will be created with their default values. /// /// public PUSB(Hashtable table) : this() { UpdateFrom(table); } /// /// Given a Hashtable with field-value pairs, it updates the fields of this PUSB /// with the values listed in the Hashtable. Note that only the fields contained /// in the Hashtable will be updated and the rest will remain the same. /// /// public void UpdateFrom(Hashtable table) { if (table.ContainsKey("uuid")) uuid = Marshalling.ParseString(table, "uuid"); if (table.ContainsKey("USB_group")) USB_group = Marshalling.ParseRef(table, "USB_group"); if (table.ContainsKey("host")) host = Marshalling.ParseRef(table, "host"); if (table.ContainsKey("path")) path = Marshalling.ParseString(table, "path"); if (table.ContainsKey("vendor_id")) vendor_id = Marshalling.ParseString(table, "vendor_id"); if (table.ContainsKey("vendor_desc")) vendor_desc = Marshalling.ParseString(table, "vendor_desc"); if (table.ContainsKey("product_id")) product_id = Marshalling.ParseString(table, "product_id"); if (table.ContainsKey("product_desc")) product_desc = Marshalling.ParseString(table, "product_desc"); if (table.ContainsKey("serial")) serial = Marshalling.ParseString(table, "serial"); if (table.ContainsKey("version")) version = Marshalling.ParseString(table, "version"); if (table.ContainsKey("description")) description = Marshalling.ParseString(table, "description"); if (table.ContainsKey("passthrough_enabled")) passthrough_enabled = Marshalling.ParseBool(table, "passthrough_enabled"); if (table.ContainsKey("other_config")) other_config = Maps.convert_from_proxy_string_string(Marshalling.ParseHashTable(table, "other_config")); } public bool DeepEquals(PUSB other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return Helper.AreEqual2(this._uuid, other._uuid) && Helper.AreEqual2(this._USB_group, other._USB_group) && Helper.AreEqual2(this._host, other._host) && Helper.AreEqual2(this._path, other._path) && Helper.AreEqual2(this._vendor_id, other._vendor_id) && Helper.AreEqual2(this._vendor_desc, other._vendor_desc) && Helper.AreEqual2(this._product_id, other._product_id) && Helper.AreEqual2(this._product_desc, other._product_desc) && Helper.AreEqual2(this._serial, other._serial) && Helper.AreEqual2(this._version, other._version) && Helper.AreEqual2(this._description, other._description) && Helper.AreEqual2(this._passthrough_enabled, other._passthrough_enabled) && Helper.AreEqual2(this._other_config, other._other_config); } internal static List ProxyArrayToObjectList(Proxy_PUSB[] input) { var result = new List(); foreach (var item in input) result.Add(new PUSB(item)); return result; } public override string SaveChanges(Session session, string opaqueRef, PUSB server) { if (opaqueRef == null) { System.Diagnostics.Debug.Assert(false, "Cannot create instances of this type on the server"); return ""; } else { if (!Helper.AreEqual2(_other_config, server._other_config)) { PUSB.set_other_config(session, opaqueRef, _other_config); } return null; } } /// /// Get a record containing the current state of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static PUSB get_record(Session session, string _pusb) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_record(session.opaque_ref, _pusb); else return new PUSB((Proxy_PUSB)session.proxy.pusb_get_record(session.opaque_ref, _pusb ?? "").parse()); } /// /// Get a reference to the PUSB instance with the specified UUID. /// First published in XenServer 7.3. /// /// The session /// UUID of object to return public static XenRef get_by_uuid(Session session, string _uuid) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_by_uuid(session.opaque_ref, _uuid); else return XenRef.Create(session.proxy.pusb_get_by_uuid(session.opaque_ref, _uuid ?? "").parse()); } /// /// Get the uuid field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_uuid(Session session, string _pusb) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_uuid(session.opaque_ref, _pusb); else return (string)session.proxy.pusb_get_uuid(session.opaque_ref, _pusb ?? "").parse(); } /// /// Get the USB_group field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static XenRef get_USB_group(Session session, string _pusb) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_usb_group(session.opaque_ref, _pusb); else return XenRef.Create(session.proxy.pusb_get_usb_group(session.opaque_ref, _pusb ?? "").parse()); } /// /// Get the host field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static XenRef get_host(Session session, string _pusb) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_host(session.opaque_ref, _pusb); else return XenRef.Create(session.proxy.pusb_get_host(session.opaque_ref, _pusb ?? "").parse()); } /// /// Get the path field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_path(Session session, string _pusb) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_path(session.opaque_ref, _pusb); else return (string)session.proxy.pusb_get_path(session.opaque_ref, _pusb ?? "").parse(); } /// /// Get the vendor_id field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_vendor_id(Session session, string _pusb) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_vendor_id(session.opaque_ref, _pusb); else return (string)session.proxy.pusb_get_vendor_id(session.opaque_ref, _pusb ?? "").parse(); } /// /// Get the vendor_desc field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_vendor_desc(Session session, string _pusb) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_vendor_desc(session.opaque_ref, _pusb); else return (string)session.proxy.pusb_get_vendor_desc(session.opaque_ref, _pusb ?? "").parse(); } /// /// Get the product_id field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_product_id(Session session, string _pusb) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_product_id(session.opaque_ref, _pusb); else return (string)session.proxy.pusb_get_product_id(session.opaque_ref, _pusb ?? "").parse(); } /// /// Get the product_desc field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_product_desc(Session session, string _pusb) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_product_desc(session.opaque_ref, _pusb); else return (string)session.proxy.pusb_get_product_desc(session.opaque_ref, _pusb ?? "").parse(); } /// /// Get the serial field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_serial(Session session, string _pusb) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_serial(session.opaque_ref, _pusb); else return (string)session.proxy.pusb_get_serial(session.opaque_ref, _pusb ?? "").parse(); } /// /// Get the version field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_version(Session session, string _pusb) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_version(session.opaque_ref, _pusb); else return (string)session.proxy.pusb_get_version(session.opaque_ref, _pusb ?? "").parse(); } /// /// Get the description field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static string get_description(Session session, string _pusb) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_description(session.opaque_ref, _pusb); else return (string)session.proxy.pusb_get_description(session.opaque_ref, _pusb ?? "").parse(); } /// /// Get the passthrough_enabled field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static bool get_passthrough_enabled(Session session, string _pusb) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_passthrough_enabled(session.opaque_ref, _pusb); else return (bool)session.proxy.pusb_get_passthrough_enabled(session.opaque_ref, _pusb ?? "").parse(); } /// /// Get the other_config field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb public static Dictionary get_other_config(Session session, string _pusb) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_other_config(session.opaque_ref, _pusb); else return Maps.convert_from_proxy_string_string(session.proxy.pusb_get_other_config(session.opaque_ref, _pusb ?? "").parse()); } /// /// Set the other_config field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb /// New value to set public static void set_other_config(Session session, string _pusb, Dictionary _other_config) { if (session.JsonRpcClient != null) session.JsonRpcClient.pusb_set_other_config(session.opaque_ref, _pusb, _other_config); else session.proxy.pusb_set_other_config(session.opaque_ref, _pusb ?? "", Maps.convert_to_proxy_string_string(_other_config)).parse(); } /// /// Add the given key-value pair to the other_config field of the given PUSB. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb /// Key to add /// Value to add public static void add_to_other_config(Session session, string _pusb, string _key, string _value) { if (session.JsonRpcClient != null) session.JsonRpcClient.pusb_add_to_other_config(session.opaque_ref, _pusb, _key, _value); else session.proxy.pusb_add_to_other_config(session.opaque_ref, _pusb ?? "", _key ?? "", _value ?? "").parse(); } /// /// Remove the given key and its corresponding value from the other_config field of the given PUSB. If the key is not in that Map, then do nothing. /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb /// Key to remove public static void remove_from_other_config(Session session, string _pusb, string _key) { if (session.JsonRpcClient != null) session.JsonRpcClient.pusb_remove_from_other_config(session.opaque_ref, _pusb, _key); else session.proxy.pusb_remove_from_other_config(session.opaque_ref, _pusb ?? "", _key ?? "").parse(); } /// /// /// First published in XenServer 7.3. /// /// The session /// The host public static void scan(Session session, string _host) { if (session.JsonRpcClient != null) session.JsonRpcClient.pusb_scan(session.opaque_ref, _host); else session.proxy.pusb_scan(session.opaque_ref, _host ?? "").parse(); } /// /// /// First published in XenServer 7.3. /// /// The session /// The host public static XenRef async_scan(Session session, string _host) { if (session.JsonRpcClient != null) return session.JsonRpcClient.async_pusb_scan(session.opaque_ref, _host); else return XenRef.Create(session.proxy.async_pusb_scan(session.opaque_ref, _host ?? "").parse()); } /// /// /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb /// passthrough is enabled when true and disabled with false public static void set_passthrough_enabled(Session session, string _pusb, bool _value) { if (session.JsonRpcClient != null) session.JsonRpcClient.pusb_set_passthrough_enabled(session.opaque_ref, _pusb, _value); else session.proxy.pusb_set_passthrough_enabled(session.opaque_ref, _pusb ?? "", _value).parse(); } /// /// /// First published in XenServer 7.3. /// /// The session /// The opaque_ref of the given pusb /// passthrough is enabled when true and disabled with false public static XenRef async_set_passthrough_enabled(Session session, string _pusb, bool _value) { if (session.JsonRpcClient != null) return session.JsonRpcClient.async_pusb_set_passthrough_enabled(session.opaque_ref, _pusb, _value); else return XenRef.Create(session.proxy.async_pusb_set_passthrough_enabled(session.opaque_ref, _pusb ?? "", _value).parse()); } /// /// Return a list of all the PUSBs known to the system. /// First published in XenServer 7.3. /// /// The session public static List> get_all(Session session) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_all(session.opaque_ref); else return XenRef.Create(session.proxy.pusb_get_all(session.opaque_ref).parse()); } /// /// Get all the PUSB Records at once, in a single XML RPC call /// First published in XenServer 7.3. /// /// The session public static Dictionary, PUSB> get_all_records(Session session) { if (session.JsonRpcClient != null) return session.JsonRpcClient.pusb_get_all_records(session.opaque_ref); else return XenRef.Create(session.proxy.pusb_get_all_records(session.opaque_ref).parse()); } /// /// Unique identifier/object reference /// public virtual string uuid { get { return _uuid; } set { if (!Helper.AreEqual(value, _uuid)) { _uuid = value; Changed = true; NotifyPropertyChanged("uuid"); } } } private string _uuid = ""; /// /// USB group the PUSB is contained in /// [JsonConverter(typeof(XenRefConverter))] public virtual XenRef USB_group { get { return _USB_group; } set { if (!Helper.AreEqual(value, _USB_group)) { _USB_group = value; Changed = true; NotifyPropertyChanged("USB_group"); } } } private XenRef _USB_group = new XenRef("OpaqueRef:NULL"); /// /// Physical machine that owns the USB device /// [JsonConverter(typeof(XenRefConverter))] public virtual XenRef host { get { return _host; } set { if (!Helper.AreEqual(value, _host)) { _host = value; Changed = true; NotifyPropertyChanged("host"); } } } private XenRef _host = new XenRef("OpaqueRef:NULL"); /// /// port path of USB device /// public virtual string path { get { return _path; } set { if (!Helper.AreEqual(value, _path)) { _path = value; Changed = true; NotifyPropertyChanged("path"); } } } private string _path = ""; /// /// vendor id of the USB device /// public virtual string vendor_id { get { return _vendor_id; } set { if (!Helper.AreEqual(value, _vendor_id)) { _vendor_id = value; Changed = true; NotifyPropertyChanged("vendor_id"); } } } private string _vendor_id = ""; /// /// vendor description of the USB device /// public virtual string vendor_desc { get { return _vendor_desc; } set { if (!Helper.AreEqual(value, _vendor_desc)) { _vendor_desc = value; Changed = true; NotifyPropertyChanged("vendor_desc"); } } } private string _vendor_desc = ""; /// /// product id of the USB device /// public virtual string product_id { get { return _product_id; } set { if (!Helper.AreEqual(value, _product_id)) { _product_id = value; Changed = true; NotifyPropertyChanged("product_id"); } } } private string _product_id = ""; /// /// product description of the USB device /// public virtual string product_desc { get { return _product_desc; } set { if (!Helper.AreEqual(value, _product_desc)) { _product_desc = value; Changed = true; NotifyPropertyChanged("product_desc"); } } } private string _product_desc = ""; /// /// serial of the USB device /// public virtual string serial { get { return _serial; } set { if (!Helper.AreEqual(value, _serial)) { _serial = value; Changed = true; NotifyPropertyChanged("serial"); } } } private string _serial = ""; /// /// USB device version /// public virtual string version { get { return _version; } set { if (!Helper.AreEqual(value, _version)) { _version = value; Changed = true; NotifyPropertyChanged("version"); } } } private string _version = ""; /// /// USB device description /// public virtual string description { get { return _description; } set { if (!Helper.AreEqual(value, _description)) { _description = value; Changed = true; NotifyPropertyChanged("description"); } } } private string _description = ""; /// /// enabled for passthrough /// public virtual bool passthrough_enabled { get { return _passthrough_enabled; } set { if (!Helper.AreEqual(value, _passthrough_enabled)) { _passthrough_enabled = value; Changed = true; NotifyPropertyChanged("passthrough_enabled"); } } } private bool _passthrough_enabled = false; /// /// additional configuration /// [JsonConverter(typeof(StringStringMapConverter))] public virtual Dictionary other_config { get { return _other_config; } set { if (!Helper.AreEqual(value, _other_config)) { _other_config = value; Changed = true; NotifyPropertyChanged("other_config"); } } } private Dictionary _other_config = new Dictionary() {}; } }