cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ahu...@apache.org
Subject [19/19] git commit: updated refs/heads/4.4 to ec102ec
Date Tue, 08 Apr 2014 07:04:00 GMT
Revert "Applied Tina's patches for removing the xapi jar"

This reverts commit 1439c69b7e4396d0b8b26076585c6465e44624f3.


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/ec102ec9
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/ec102ec9
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/ec102ec9

Branch: refs/heads/4.4
Commit: ec102ec9607480bc363bbd5a2dbfd5c0ebc3f985
Parents: 3661e67
Author: Alex Huang <alex.huang@citrix.com>
Authored: Tue Apr 8 00:03:18 2014 -0700
Committer: Alex Huang <alex.huang@citrix.com>
Committed: Tue Apr 8 00:03:18 2014 -0700

----------------------------------------------------------------------
 .gitignore                                      |     1 -
 deps/XenServerJava/pom.xml                      |    60 +
 deps/XenServerJava/src/LICENSE.Apache-2.0.txt   |   201 +
 deps/XenServerJava/src/LICENSE.txt              |    26 +
 deps/XenServerJava/src/README.txt               |    57 +
 .../src/com/xensource/xenapi/APIVersion.java    |   131 +
 .../src/com/xensource/xenapi/Auth.java          |   114 +
 .../src/com/xensource/xenapi/Blob.java          |   446 +
 .../src/com/xensource/xenapi/Bond.java          |   564 +
 .../src/com/xensource/xenapi/Connection.java    |   367 +
 .../src/com/xensource/xenapi/Console.java       |   419 +
 .../src/com/xensource/xenapi/Crashdump.java     |   358 +
 .../src/com/xensource/xenapi/DRTask.java        |   303 +
 .../src/com/xensource/xenapi/DataSource.java    |   164 +
 .../src/com/xensource/xenapi/Event.java         |   319 +
 .../src/com/xensource/xenapi/GPUGroup.java      |   638 +
 .../src/com/xensource/xenapi/Host.java          |  3024 ++++
 .../src/com/xensource/xenapi/HostCpu.java       |   536 +
 .../src/com/xensource/xenapi/HostCrashdump.java |   417 +
 .../src/com/xensource/xenapi/HostMetrics.java   |   373 +
 .../src/com/xensource/xenapi/HostPatch.java     |   552 +
 .../src/com/xensource/xenapi/Marshalling.java   |    77 +
 .../src/com/xensource/xenapi/Message.java       |   320 +
 .../src/com/xensource/xenapi/Network.java       |   791 +
 .../src/com/xensource/xenapi/PBD.java           |   542 +
 .../src/com/xensource/xenapi/PCI.java           |   418 +
 .../src/com/xensource/xenapi/PGPU.java          |   613 +
 .../src/com/xensource/xenapi/PIF.java           |  1401 ++
 .../src/com/xensource/xenapi/PIFMetrics.java    |   533 +
 .../src/com/xensource/xenapi/Pool.java          |  2392 +++
 .../src/com/xensource/xenapi/PoolPatch.java     |   693 +
 .../src/com/xensource/xenapi/Role.java          |   364 +
 .../src/com/xensource/xenapi/SM.java            |   552 +
 .../src/com/xensource/xenapi/SR.java            |  1449 ++
 .../src/com/xensource/xenapi/Secret.java        |   389 +
 .../src/com/xensource/xenapi/Session.java       |   675 +
 .../src/com/xensource/xenapi/Subject.java       |   396 +
 .../src/com/xensource/xenapi/Task.java          |   688 +
 .../src/com/xensource/xenapi/Tunnel.java        |   474 +
 .../src/com/xensource/xenapi/Types.java         | 13529 +++++++++++++++++
 .../src/com/xensource/xenapi/User.java          |   384 +
 .../src/com/xensource/xenapi/VBD.java           |  1161 ++
 .../src/com/xensource/xenapi/VBDMetrics.java    |   349 +
 .../src/com/xensource/xenapi/VDI.java           |  1997 +++
 .../src/com/xensource/xenapi/VGPU.java          |   494 +
 .../src/com/xensource/xenapi/VGPUType.java      |   461 +
 .../src/com/xensource/xenapi/VIF.java           |  1186 ++
 .../src/com/xensource/xenapi/VIFMetrics.java    |   349 +
 .../src/com/xensource/xenapi/VLAN.java          |   421 +
 .../src/com/xensource/xenapi/VM.java            |  4956 ++++++
 .../src/com/xensource/xenapi/VMAppliance.java   |   655 +
 .../com/xensource/xenapi/VMGuestMetrics.java    |   487 +
 .../src/com/xensource/xenapi/VMMetrics.java     |   510 +
 .../src/com/xensource/xenapi/VMPP.java          |  1158 ++
 .../src/com/xensource/xenapi/VTPM.java          |   290 +
 .../src/com/xensource/xenapi/XenAPIObject.java  |    36 +
 plugins/hypervisors/ovm/pom.xml                 |     4 +-
 plugins/hypervisors/xen/pom.xml                 |     4 +-
 .../xen/resource/XenServerConnectionPool.java   |    15 +-
 .../resource/Xenserver625StorageProcessor.java  |    16 +-
 .../xenserver/XenServerResourceNewBase.java     |    22 +-
 pom.xml                                         |    15 +-
 62 files changed, 50296 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec102ec9/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index a0307a7..d6f5d1c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -64,7 +64,6 @@ awsapi/modules/*
 .settings.xml
 .settings/
 db.properties.override
-replace.properties.override
 awsapi/overlays/
 tools/marvin/marvin/cloudstackAPI/*
 *.egg-info/

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec102ec9/deps/XenServerJava/pom.xml
----------------------------------------------------------------------
diff --git a/deps/XenServerJava/pom.xml b/deps/XenServerJava/pom.xml
new file mode 100644
index 0000000..c9a4e86
--- /dev/null
+++ b/deps/XenServerJava/pom.xml
@@ -0,0 +1,60 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements. See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.cloudstack</groupId>
+    <artifactId>cloudstack</artifactId>
+    <version>4.4.0-SNAPSHOT</version>
+    <relativePath>../../pom.xml</relativePath>
+  </parent>
+  <artifactId>xapi</artifactId>
+  <version>6.2.0-1-SNAPSHOT</version>
+  <name>Apache XenSource XAPI</name>
+  <description>XenSource XAPI Java Bindings</description>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.xmlrpc</groupId>
+      <artifactId>xmlrpc-client</artifactId>
+      <version>${cs.xmlrpc.version}</version>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-checkstyle-plugin</artifactId>
+        <executions>
+          <execution>
+	    <id>cloudstack-checkstyle</id>
+            <phase>none</phase>
+          </execution>
+        </executions>
+        <dependencies>
+          <dependency>
+            <groupId>org.apache.cloudstack</groupId>
+            <artifactId>checkstyle</artifactId>
+            <!-- this project.version differs -->
+            <version>${project.parent.version}</version>
+          </dependency>
+        </dependencies>
+      </plugin>
+    </plugins>
+  </build>
+</project>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec102ec9/deps/XenServerJava/src/LICENSE.Apache-2.0.txt
----------------------------------------------------------------------
diff --git a/deps/XenServerJava/src/LICENSE.Apache-2.0.txt b/deps/XenServerJava/src/LICENSE.Apache-2.0.txt
new file mode 100755
index 0000000..261eeb9
--- /dev/null
+++ b/deps/XenServerJava/src/LICENSE.Apache-2.0.txt
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec102ec9/deps/XenServerJava/src/LICENSE.txt
----------------------------------------------------------------------
diff --git a/deps/XenServerJava/src/LICENSE.txt b/deps/XenServerJava/src/LICENSE.txt
new file mode 100755
index 0000000..76c4a22
--- /dev/null
+++ b/deps/XenServerJava/src/LICENSE.txt
@@ -0,0 +1,26 @@
+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.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec102ec9/deps/XenServerJava/src/README.txt
----------------------------------------------------------------------
diff --git a/deps/XenServerJava/src/README.txt b/deps/XenServerJava/src/README.txt
new file mode 100755
index 0000000..2e6fa45
--- /dev/null
+++ b/deps/XenServerJava/src/README.txt
@@ -0,0 +1,57 @@
+XenServerJava
+=============
+
+NOTE: This is a modified version of Citrix XenServer's SDK. This version of 
+XenServerJava includes some customization which is required to make it work
+with CloudStack.
+
+
+Version 6.2.0-1.
+
+XenServerJava is a complete SDK for Citrix XenServer, exposing the XenServer
+API as Java classes.
+
+For XenServer documentation, see http://docs.xensource.com.
+XenServerJava includes a class for every XenServer class, and a method for
+each XenServer API call, so API documentation and examples written for
+for other languages will apply equally well to Java.
+In particular, the SDK Guide and API Documentation are ideal for developers
+wishing to use XenServerJava.
+
+For community content, blogs, and downloads, visit the XenServer Developer
+Network at http://community.citrix.com/cdn/xs.
+
+XenServerJava is free sofware.  You can redistribute and modify it under the
+terms of the BSD license.  See LICENSE.txt for details.
+
+This library may be accompanied by pedagogical examples. These do not form
+part of this library, and are licensed for redistribution and modification
+under the BSD license. Such examples are licensed clearly at the top
+of each file.
+
+
+Dependencies
+------------
+
+XenServerJava is dependent upon Apache XML-RPC and WS-Commons, both by The
+Apache Software Foundation.  We would like to thank the ASF and the
+Apache XML-RPC development team in particular.
+Both are licensed under the Apache Software License 2.0; see
+LICENSE.Apache-2.0.txt for details.
+
+We test with version 3.1 of Apache XML-RPC, and version 1.0.2 of WS-Commons.
+We recommend that you use these versions, though others may work.
+
+
+Downloads
+---------
+
+XenServerJava is available in the XenServer-6.2.0-SDK.zip in three separate
+folders, one for the compiled binaries, one for the source code,
+and one containing sample code.
+
+The XenServer-6.2.0-SDK.zip is available from
+http://www.citrix.com/downloads/xenserver/.
+
+Apache XML-RPC is available from http://ws.apache.org/xmlrpc/.
+WS-Commons is available from http://ws.apache.org/commons/.

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec102ec9/deps/XenServerJava/src/com/xensource/xenapi/APIVersion.java
----------------------------------------------------------------------
diff --git a/deps/XenServerJava/src/com/xensource/xenapi/APIVersion.java b/deps/XenServerJava/src/com/xensource/xenapi/APIVersion.java
new file mode 100755
index 0000000..9dcdd9f
--- /dev/null
+++ b/deps/XenServerJava/src/com/xensource/xenapi/APIVersion.java
@@ -0,0 +1,131 @@
+/*
+ * 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.
+ */
+
+package com.xensource.xenapi;
+
+public enum APIVersion
+{
+    API_1_1, API_1_2, API_1_3, API_1_4, API_1_5, API_1_6, API_1_7, API_1_8, API_1_9, API_1_10, API_2_0, API_2_1, UNKNOWN;
+
+    public static APIVersion latest()
+    {
+        return API_2_1;
+    }
+
+    public static APIVersion fromMajorMinor(long major, long minor)
+    {
+        if (major == 2 && minor == 1)
+        {
+            return API_2_1;
+        }
+        else if (major == 2 && minor == 0)
+        {
+            return API_2_0;
+        }        
+        else if (major == 1 && minor == 10)
+        {
+            return API_1_10;
+        }
+        else if (major == 1 && minor == 9)
+        {
+            return API_1_9;
+        }
+        else if (major == 1 && minor == 8)
+        {
+            return API_1_8;
+        }
+        else if (major == 1 && minor == 7)
+        {
+            return API_1_7;
+        }
+        else if (major == 1 && minor == 6)
+        {
+            return API_1_6;
+        }
+        else if (major == 1 && minor == 5)
+        {
+            return API_1_5;
+        }
+        else if (major == 1 && minor == 4)
+        {
+            return API_1_4;
+        }
+        else if (major == 1 && minor == 3)
+        {
+            return API_1_3;
+        }
+        else if (major == 1 && minor == 2)
+        {
+            return API_1_2;
+        }
+        else if (major == 1 && minor == 1)
+        {
+            return API_1_1;
+        }
+        else
+        {
+            return UNKNOWN;
+        }
+    }
+
+    @Override
+    public String toString()
+    {
+        switch (this)
+        {
+        case API_1_1:
+            return "1.1";
+        case API_1_2:
+            return "1.2";
+        case API_1_3:
+            return "1.3";
+        case API_1_4:
+            return "1.4";
+        case API_1_5:
+            return "1.5";
+        case API_1_6:
+            return "1.6";
+        case API_1_7:
+            return "1.7";
+        case API_1_8:
+            return "1.8";
+        case API_1_9:
+            return "1.9";
+        case API_1_10:
+            return "1.10";
+        case API_2_0:
+            return "2.0";
+        case API_2_1:
+            return "2.1";
+        default:
+            return "Unknown";
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec102ec9/deps/XenServerJava/src/com/xensource/xenapi/Auth.java
----------------------------------------------------------------------
diff --git a/deps/XenServerJava/src/com/xensource/xenapi/Auth.java b/deps/XenServerJava/src/com/xensource/xenapi/Auth.java
new file mode 100644
index 0000000..4778e6a
--- /dev/null
+++ b/deps/XenServerJava/src/com/xensource/xenapi/Auth.java
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ */
+
+
+package com.xensource.xenapi;
+
+import com.xensource.xenapi.Types.BadServerResponse;
+import com.xensource.xenapi.Types.VersionException;
+import com.xensource.xenapi.Types.XenAPIException;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.xmlrpc.XmlRpcException;
+
+/**
+ * Management of remote authentication services
+ *
+ * @author Citrix Systems, Inc.
+ */
+public class Auth extends XenAPIObject {
+
+
+    public String toWireString() {
+        return null;
+    }
+
+    /**
+     * This call queries the external directory service to obtain the subject_identifier as a string from the human-readable subject_name
+     *
+     * @param subjectName The human-readable subject_name, such as a username or a groupname
+     * @return the subject_identifier obtained from the external directory service
+     */
+    public static String getSubjectIdentifier(Connection c, String subjectName) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "auth.get_subject_identifier";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(subjectName)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toString(result);
+    }
+
+    /**
+     * This call queries the external directory service to obtain the user information (e.g. username, organization etc) from the specified subject_identifier
+     *
+     * @param subjectIdentifier A string containing the subject_identifier, unique in the external directory service
+     * @return key-value pairs containing at least a key called subject_name
+     */
+    public static Map<String, String> getSubjectInformationFromIdentifier(Connection c, String subjectIdentifier) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "auth.get_subject_information_from_identifier";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(subjectIdentifier)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toMapOfStringString(result);
+    }
+
+    /**
+     * This calls queries the external directory service to obtain the transitively-closed set of groups that the the subject_identifier is member of.
+     *
+     * @param subjectIdentifier A string containing the subject_identifier, unique in the external directory service
+     * @return set of subject_identifiers that provides the group membership of subject_identifier passed as argument, it contains, recursively, all groups a subject_identifier is member of.
+     */
+    public static Set<String> getGroupMembership(Connection c, String subjectIdentifier) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "auth.get_group_membership";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(subjectIdentifier)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toSetOfString(result);
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec102ec9/deps/XenServerJava/src/com/xensource/xenapi/Blob.java
----------------------------------------------------------------------
diff --git a/deps/XenServerJava/src/com/xensource/xenapi/Blob.java b/deps/XenServerJava/src/com/xensource/xenapi/Blob.java
new file mode 100644
index 0000000..ec91d87
--- /dev/null
+++ b/deps/XenServerJava/src/com/xensource/xenapi/Blob.java
@@ -0,0 +1,446 @@
+/*
+ * 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.
+ */
+
+
+package com.xensource.xenapi;
+
+import com.xensource.xenapi.Types.BadServerResponse;
+import com.xensource.xenapi.Types.VersionException;
+import com.xensource.xenapi.Types.XenAPIException;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.xmlrpc.XmlRpcException;
+
+/**
+ * A placeholder for a binary blob
+ *
+ * @author Citrix Systems, Inc.
+ */
+public class Blob extends XenAPIObject {
+
+    /**
+     * The XenAPI reference (OpaqueRef) to this object.
+     */
+    protected final String ref;
+
+    /**
+     * For internal use only.
+     */
+    Blob(String ref) {
+       this.ref = ref;
+    }
+
+    /**
+     * @return The XenAPI reference (OpaqueRef) to this object.
+     */
+    public String toWireString() {
+       return this.ref;
+    }
+
+    /**
+     * If obj is a Blob, compares XenAPI references for equality.
+     */
+    @Override
+    public boolean equals(Object obj)
+    {
+        if (obj != null && obj instanceof Blob)
+        {
+            Blob other = (Blob) obj;
+            return other.ref.equals(this.ref);
+        } else
+        {
+            return false;
+        }
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return ref.hashCode();
+    }
+
+    /**
+     * Represents all the fields in a Blob
+     */
+    public static class Record implements Types.Record {
+        public String toString() {
+            StringWriter writer = new StringWriter();
+            PrintWriter print = new PrintWriter(writer);
+            print.printf("%1$20s: %2$s\n", "uuid", this.uuid);
+            print.printf("%1$20s: %2$s\n", "nameLabel", this.nameLabel);
+            print.printf("%1$20s: %2$s\n", "nameDescription", this.nameDescription);
+            print.printf("%1$20s: %2$s\n", "size", this.size);
+            print.printf("%1$20s: %2$s\n", "_public", this._public);
+            print.printf("%1$20s: %2$s\n", "lastUpdated", this.lastUpdated);
+            print.printf("%1$20s: %2$s\n", "mimeType", this.mimeType);
+            return writer.toString();
+        }
+
+        /**
+         * Convert a blob.Record to a Map
+         */
+        public Map<String,Object> toMap() {
+            Map<String,Object> map = new HashMap<String,Object>();
+            map.put("uuid", this.uuid == null ? "" : this.uuid);
+            map.put("name_label", this.nameLabel == null ? "" : this.nameLabel);
+            map.put("name_description", this.nameDescription == null ? "" : this.nameDescription);
+            map.put("size", this.size == null ? 0 : this.size);
+            map.put("public", this._public == null ? false : this._public);
+            map.put("last_updated", this.lastUpdated == null ? new Date(0) : this.lastUpdated);
+            map.put("mime_type", this.mimeType == null ? "" : this.mimeType);
+            return map;
+        }
+
+        /**
+         * Unique identifier/object reference
+         */
+        public String uuid;
+        /**
+         * a human-readable name
+         */
+        public String nameLabel;
+        /**
+         * a notes field containing human-readable description
+         */
+        public String nameDescription;
+        /**
+         * Size of the binary data, in bytes
+         */
+        public Long size;
+        /**
+         * True if the blob is publicly accessible
+         */
+        public Boolean _public;
+        /**
+         * Time at which the data in the blob was last updated
+         */
+        public Date lastUpdated;
+        /**
+         * The mime type associated with this object. Defaults to 'application/octet-stream' if the empty string is supplied
+         */
+        public String mimeType;
+    }
+
+    /**
+     * Get a record containing the current state of the given blob.
+     *
+     * @return all fields from the object
+     */
+    public Blob.Record getRecord(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.get_record";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toBlobRecord(result);
+    }
+
+    /**
+     * Get a reference to the blob instance with the specified UUID.
+     *
+     * @param uuid UUID of object to return
+     * @return reference to the object
+     */
+    public static Blob getByUuid(Connection c, String uuid) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.get_by_uuid";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(uuid)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toBlob(result);
+    }
+
+    /**
+     * Get all the blob instances with the given label.
+     *
+     * @param label label of object to return
+     * @return references to objects with matching names
+     */
+    public static Set<Blob> getByNameLabel(Connection c, String label) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.get_by_name_label";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(label)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toSetOfBlob(result);
+    }
+
+    /**
+     * Get the uuid field of the given blob.
+     *
+     * @return value of the field
+     */
+    public String getUuid(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.get_uuid";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toString(result);
+    }
+
+    /**
+     * Get the name/label field of the given blob.
+     *
+     * @return value of the field
+     */
+    public String getNameLabel(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.get_name_label";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toString(result);
+    }
+
+    /**
+     * Get the name/description field of the given blob.
+     *
+     * @return value of the field
+     */
+    public String getNameDescription(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.get_name_description";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toString(result);
+    }
+
+    /**
+     * Get the size field of the given blob.
+     *
+     * @return value of the field
+     */
+    public Long getSize(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.get_size";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toLong(result);
+    }
+
+    /**
+     * Get the public field of the given blob.
+     *
+     * @return value of the field
+     */
+    public Boolean getPublic(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.get_public";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toBoolean(result);
+    }
+
+    /**
+     * Get the last_updated field of the given blob.
+     *
+     * @return value of the field
+     */
+    public Date getLastUpdated(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.get_last_updated";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toDate(result);
+    }
+
+    /**
+     * Get the mime_type field of the given blob.
+     *
+     * @return value of the field
+     */
+    public String getMimeType(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.get_mime_type";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toString(result);
+    }
+
+    /**
+     * Set the name/label field of the given blob.
+     *
+     * @param label New value to set
+     */
+    public void setNameLabel(Connection c, String label) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.set_name_label";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(label)};
+        Map response = c.dispatch(method_call, method_params);
+        return;
+    }
+
+    /**
+     * Set the name/description field of the given blob.
+     *
+     * @param description New value to set
+     */
+    public void setNameDescription(Connection c, String description) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.set_name_description";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(description)};
+        Map response = c.dispatch(method_call, method_params);
+        return;
+    }
+
+    /**
+     * Set the public field of the given blob.
+     *
+     * @param _public New value to set
+     */
+    public void setPublic(Connection c, Boolean _public) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.set_public";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(_public)};
+        Map response = c.dispatch(method_call, method_params);
+        return;
+    }
+
+    /**
+     * Create a placeholder for a binary blob
+     *
+     * @param mimeType The mime-type of the blob. Defaults to 'application/octet-stream' if the empty string is supplied
+     * @param _public True if the blob should be publicly available
+     * @return The reference to the created blob
+     */
+    public static Blob create(Connection c, String mimeType, Boolean _public) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.create";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(mimeType), Marshalling.toXMLRPC(_public)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toBlob(result);
+    }
+
+    /**
+     * 
+     *
+     */
+    public void destroy(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.destroy";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        return;
+    }
+
+    /**
+     * Return a list of all the blobs known to the system.
+     *
+     * @return references to all objects
+     */
+    public static Set<Blob> getAll(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.get_all";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toSetOfBlob(result);
+    }
+
+    /**
+     * Return a map of blob references to blob records for all blobs known to the system.
+     *
+     * @return records of all objects
+     */
+    public static Map<Blob, Blob.Record> getAllRecords(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "blob.get_all_records";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toMapOfBlobBlobRecord(result);
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec102ec9/deps/XenServerJava/src/com/xensource/xenapi/Bond.java
----------------------------------------------------------------------
diff --git a/deps/XenServerJava/src/com/xensource/xenapi/Bond.java b/deps/XenServerJava/src/com/xensource/xenapi/Bond.java
new file mode 100644
index 0000000..5a54ad2
--- /dev/null
+++ b/deps/XenServerJava/src/com/xensource/xenapi/Bond.java
@@ -0,0 +1,564 @@
+/*
+ * 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.
+ */
+
+
+package com.xensource.xenapi;
+
+import com.xensource.xenapi.Types.BadServerResponse;
+import com.xensource.xenapi.Types.VersionException;
+import com.xensource.xenapi.Types.XenAPIException;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.xmlrpc.XmlRpcException;
+
+/**
+ * 
+ *
+ * @author Citrix Systems, Inc.
+ */
+public class Bond extends XenAPIObject {
+
+    /**
+     * The XenAPI reference (OpaqueRef) to this object.
+     */
+    protected final String ref;
+
+    /**
+     * For internal use only.
+     */
+    Bond(String ref) {
+       this.ref = ref;
+    }
+
+    /**
+     * @return The XenAPI reference (OpaqueRef) to this object.
+     */
+    public String toWireString() {
+       return this.ref;
+    }
+
+    /**
+     * If obj is a Bond, compares XenAPI references for equality.
+     */
+    @Override
+    public boolean equals(Object obj)
+    {
+        if (obj != null && obj instanceof Bond)
+        {
+            Bond other = (Bond) obj;
+            return other.ref.equals(this.ref);
+        } else
+        {
+            return false;
+        }
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return ref.hashCode();
+    }
+
+    /**
+     * Represents all the fields in a Bond
+     */
+    public static class Record implements Types.Record {
+        public String toString() {
+            StringWriter writer = new StringWriter();
+            PrintWriter print = new PrintWriter(writer);
+            print.printf("%1$20s: %2$s\n", "uuid", this.uuid);
+            print.printf("%1$20s: %2$s\n", "master", this.master);
+            print.printf("%1$20s: %2$s\n", "slaves", this.slaves);
+            print.printf("%1$20s: %2$s\n", "otherConfig", this.otherConfig);
+            print.printf("%1$20s: %2$s\n", "primarySlave", this.primarySlave);
+            print.printf("%1$20s: %2$s\n", "mode", this.mode);
+            print.printf("%1$20s: %2$s\n", "properties", this.properties);
+            print.printf("%1$20s: %2$s\n", "linksUp", this.linksUp);
+            return writer.toString();
+        }
+
+        /**
+         * Convert a Bond.Record to a Map
+         */
+        public Map<String,Object> toMap() {
+            Map<String,Object> map = new HashMap<String,Object>();
+            map.put("uuid", this.uuid == null ? "" : this.uuid);
+            map.put("master", this.master == null ? new PIF("OpaqueRef:NULL") : this.master);
+            map.put("slaves", this.slaves == null ? new LinkedHashSet<PIF>() : this.slaves);
+            map.put("other_config", this.otherConfig == null ? new HashMap<String, String>() : this.otherConfig);
+            map.put("primary_slave", this.primarySlave == null ? new PIF("OpaqueRef:NULL") : this.primarySlave);
+            map.put("mode", this.mode == null ? Types.BondMode.UNRECOGNIZED : this.mode);
+            map.put("properties", this.properties == null ? new HashMap<String, String>() : this.properties);
+            map.put("links_up", this.linksUp == null ? 0 : this.linksUp);
+            return map;
+        }
+
+        /**
+         * Unique identifier/object reference
+         */
+        public String uuid;
+        /**
+         * The bonded interface
+         */
+        public PIF master;
+        /**
+         * The interfaces which are part of this bond
+         */
+        public Set<PIF> slaves;
+        /**
+         * additional configuration
+         */
+        public Map<String, String> otherConfig;
+        /**
+         * The PIF of which the IP configuration and MAC were copied to the bond, and which will receive all configuration/VLANs/VIFs on the bond if the bond is destroyed
+         */
+        public PIF primarySlave;
+        /**
+         * The algorithm used to distribute traffic among the bonded NICs
+         */
+        public Types.BondMode mode;
+        /**
+         * Additional configuration properties specific to the bond mode.
+         */
+        public Map<String, String> properties;
+        /**
+         * Number of links up in this bond
+         */
+        public Long linksUp;
+    }
+
+    /**
+     * Get a record containing the current state of the given Bond.
+     *
+     * @return all fields from the object
+     */
+    public Bond.Record getRecord(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.get_record";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toBondRecord(result);
+    }
+
+    /**
+     * Get a reference to the Bond instance with the specified UUID.
+     *
+     * @param uuid UUID of object to return
+     * @return reference to the object
+     */
+    public static Bond getByUuid(Connection c, String uuid) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.get_by_uuid";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(uuid)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toBond(result);
+    }
+
+    /**
+     * Get the uuid field of the given Bond.
+     *
+     * @return value of the field
+     */
+    public String getUuid(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.get_uuid";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toString(result);
+    }
+
+    /**
+     * Get the master field of the given Bond.
+     *
+     * @return value of the field
+     */
+    public PIF getMaster(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.get_master";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toPIF(result);
+    }
+
+    /**
+     * Get the slaves field of the given Bond.
+     *
+     * @return value of the field
+     */
+    public Set<PIF> getSlaves(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.get_slaves";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toSetOfPIF(result);
+    }
+
+    /**
+     * Get the other_config field of the given Bond.
+     *
+     * @return value of the field
+     */
+    public Map<String, String> getOtherConfig(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.get_other_config";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toMapOfStringString(result);
+    }
+
+    /**
+     * Get the primary_slave field of the given Bond.
+     *
+     * @return value of the field
+     */
+    public PIF getPrimarySlave(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.get_primary_slave";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toPIF(result);
+    }
+
+    /**
+     * Get the mode field of the given Bond.
+     *
+     * @return value of the field
+     */
+    public Types.BondMode getMode(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.get_mode";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toBondMode(result);
+    }
+
+    /**
+     * Get the properties field of the given Bond.
+     *
+     * @return value of the field
+     */
+    public Map<String, String> getProperties(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.get_properties";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toMapOfStringString(result);
+    }
+
+    /**
+     * Get the links_up field of the given Bond.
+     *
+     * @return value of the field
+     */
+    public Long getLinksUp(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.get_links_up";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toLong(result);
+    }
+
+    /**
+     * Set the other_config field of the given Bond.
+     *
+     * @param otherConfig New value to set
+     */
+    public void setOtherConfig(Connection c, Map<String, String> otherConfig) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.set_other_config";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(otherConfig)};
+        Map response = c.dispatch(method_call, method_params);
+        return;
+    }
+
+    /**
+     * Add the given key-value pair to the other_config field of the given Bond.
+     *
+     * @param key Key to add
+     * @param value Value to add
+     */
+    public void addToOtherConfig(Connection c, String key, String value) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.add_to_other_config";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(key), Marshalling.toXMLRPC(value)};
+        Map response = c.dispatch(method_call, method_params);
+        return;
+    }
+
+    /**
+     * Remove the given key and its corresponding value from the other_config field of the given Bond.  If the key is not in that Map, then do nothing.
+     *
+     * @param key Key to remove
+     */
+    public void removeFromOtherConfig(Connection c, String key) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.remove_from_other_config";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(key)};
+        Map response = c.dispatch(method_call, method_params);
+        return;
+    }
+
+    /**
+     * Create an interface bond
+     *
+     * @param network Network to add the bonded PIF to
+     * @param members PIFs to add to this bond
+     * @param MAC The MAC address to use on the bond itself. If this parameter is the empty string then the bond will inherit its MAC address from the primary slave.
+     * @param mode Bonding mode to use for the new bond
+     * @param properties Additional configuration parameters specific to the bond mode
+     * @return Task
+     */
+    public static Task createAsync(Connection c, Network network, Set<PIF> members, String MAC, Types.BondMode mode, Map<String, String> properties) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Async.Bond.create";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(network), Marshalling.toXMLRPC(members), Marshalling.toXMLRPC(MAC), Marshalling.toXMLRPC(mode), Marshalling.toXMLRPC(properties)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+        return Types.toTask(result);
+    }
+
+    /**
+     * Create an interface bond
+     *
+     * @param network Network to add the bonded PIF to
+     * @param members PIFs to add to this bond
+     * @param MAC The MAC address to use on the bond itself. If this parameter is the empty string then the bond will inherit its MAC address from the primary slave.
+     * @param mode Bonding mode to use for the new bond
+     * @param properties Additional configuration parameters specific to the bond mode
+     * @return The reference of the created Bond object
+     */
+    public static Bond create(Connection c, Network network, Set<PIF> members, String MAC, Types.BondMode mode, Map<String, String> properties) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.create";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(network), Marshalling.toXMLRPC(members), Marshalling.toXMLRPC(MAC), Marshalling.toXMLRPC(mode), Marshalling.toXMLRPC(properties)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toBond(result);
+    }
+
+    /**
+     * Destroy an interface bond
+     *
+     * @return Task
+     */
+    public Task destroyAsync(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Async.Bond.destroy";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+        return Types.toTask(result);
+    }
+
+    /**
+     * Destroy an interface bond
+     *
+     */
+    public void destroy(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.destroy";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref)};
+        Map response = c.dispatch(method_call, method_params);
+        return;
+    }
+
+    /**
+     * Change the bond mode
+     *
+     * @param value The new bond mode
+     * @return Task
+     */
+    public Task setModeAsync(Connection c, Types.BondMode value) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Async.Bond.set_mode";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(value)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+        return Types.toTask(result);
+    }
+
+    /**
+     * Change the bond mode
+     *
+     * @param value The new bond mode
+     */
+    public void setMode(Connection c, Types.BondMode value) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.set_mode";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(value)};
+        Map response = c.dispatch(method_call, method_params);
+        return;
+    }
+
+    /**
+     * Set the value of a property of the bond
+     *
+     * @param name The property name
+     * @param value The property value
+     * @return Task
+     */
+    public Task setPropertyAsync(Connection c, String name, String value) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Async.Bond.set_property";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(name), Marshalling.toXMLRPC(value)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+        return Types.toTask(result);
+    }
+
+    /**
+     * Set the value of a property of the bond
+     *
+     * @param name The property name
+     * @param value The property value
+     */
+    public void setProperty(Connection c, String name, String value) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.set_property";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session), Marshalling.toXMLRPC(this.ref), Marshalling.toXMLRPC(name), Marshalling.toXMLRPC(value)};
+        Map response = c.dispatch(method_call, method_params);
+        return;
+    }
+
+    /**
+     * Return a list of all the Bonds known to the system.
+     *
+     * @return references to all objects
+     */
+    public static Set<Bond> getAll(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.get_all";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toSetOfBond(result);
+    }
+
+    /**
+     * Return a map of Bond references to Bond records for all Bonds known to the system.
+     *
+     * @return records of all objects
+     */
+    public static Map<Bond, Bond.Record> getAllRecords(Connection c) throws
+       BadServerResponse,
+       XenAPIException,
+       XmlRpcException {
+        String method_call = "Bond.get_all_records";
+        String session = c.getSessionReference();
+        Object[] method_params = {Marshalling.toXMLRPC(session)};
+        Map response = c.dispatch(method_call, method_params);
+        Object result = response.get("Value");
+            return Types.toMapOfBondBondRecord(result);
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ec102ec9/deps/XenServerJava/src/com/xensource/xenapi/Connection.java
----------------------------------------------------------------------
diff --git a/deps/XenServerJava/src/com/xensource/xenapi/Connection.java b/deps/XenServerJava/src/com/xensource/xenapi/Connection.java
new file mode 100755
index 0000000..661724f
--- /dev/null
+++ b/deps/XenServerJava/src/com/xensource/xenapi/Connection.java
@@ -0,0 +1,367 @@
+/*
+ * 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.
+ */
+
+package com.xensource.xenapi;
+
+import java.net.URL;
+import java.util.Map;
+import java.util.TimeZone;
+
+import org.apache.xmlrpc.XmlRpcException;
+import org.apache.xmlrpc.client.XmlRpcClient;
+import org.apache.xmlrpc.client.XmlRpcClientConfig;
+import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
+import org.apache.xmlrpc.client.XmlRpcHttpClientConfig;
+
+import com.xensource.xenapi.Types.BadServerResponse;
+import com.xensource.xenapi.Types.SessionAuthenticationFailed;
+import com.xensource.xenapi.Types.XenAPIException;
+
+/**
+ * Represents a connection to a XenServer. Creating a new instance of this class initialises a new XmlRpcClient that is
+ * then used by all method calls: each method call in xenapi takes a Connection as a parameter, composes an XMLRPC
+ * method call, and dispatches it on the Connection's client via the dispatch method.
+ */
+public class Connection
+{
+    /**
+     * The version of the bindings that this class belongs to.
+     */
+    public static final String BINDINGS_VERSION = "6.2.0-1";
+    
+    private APIVersion apiVersion;
+
+    protected int _wait = 600;
+
+    /**
+     * Updated when Session.login_with_password() is called.
+     */
+    public APIVersion getAPIVersion()
+    {
+        return apiVersion;
+    }
+
+    /**
+     * The opaque reference to the session used by this connection
+     */
+    private String sessionReference;
+
+    /**
+     * As seen by the xmlrpc library. From our point of view it's a server.
+     */
+    private final XmlRpcClient client;
+
+    private final boolean deprecatedConstructorUsed;
+
+    /**
+     * Creates a connection to a particular server using a given username and password. This object can then be passed
+     * in to any other API calls.
+     * 
+     * This constructor calls Session.loginWithPassword, passing itself as the first parameter.
+     * 
+     * When this constructor is used, a call to dispose() (also called in the Connection's finalizer) will attempt a
+     * Session.logout on this connection.
+     * 
+     * @deprecated Use a constructor that takes a URL as the first parameter instead.
+     */
+    @Deprecated
+    public Connection(String client, String username, String password) throws java.net.MalformedURLException,
+        XmlRpcException, BadServerResponse, SessionAuthenticationFailed, XenAPIException
+    {
+        deprecatedConstructorUsed = true;
+
+        final String ApiVersion = APIVersion.latest().toString();
+        this.client = getClientFromURL(new URL(client));
+        try
+        {
+            this.sessionReference = loginWithPassword(this.client, username, password, ApiVersion);
+        } catch (BadServerResponse e)
+        {
+            String[] errDesc = e.errorDescription;
+
+            if (0 == errDesc[0].compareTo("MESSAGE_PARAMETER_COUNT_MISMATCH")
+                    && 0 == errDesc[1].compareTo("session.login_with_password")
+                    && 0 == errDesc[2].compareTo("2")
+                    && 0 == errDesc[3].compareTo("3"))
+            {
+                this.sessionReference = loginWithPassword(this.client, username, password);
+            } else
+            {
+                throw e;
+            }
+        }
+
+        try
+        {
+            setAPIVersion(new Session(sessionReference));
+        }
+        catch (XenAPIException exn)
+        {
+            dispose();
+            throw exn;
+        }
+        catch (XmlRpcException exn)
+        {
+            dispose();
+            throw exn;
+        }
+    }
+
+    /**
+     * Creates a connection to a particular server using a given username and password. This object can then be passed
+     * in to any other API calls.
+     * 
+     * Note this constructor does NOT call Session.loginWithPassword; the programmer is responsible for calling it,
+     * passing the Connection as a parameter. No attempt to connect to the server is made until login is called.
+     * 
+     * When this constructor is used, a call to dispose() will do nothing. The programmer is responsible for manually
+     * logging out the Session.
+     */
+    public Connection(URL url, int wait)
+    {
+        deprecatedConstructorUsed = false;
+        _wait = wait;
+        this.client = getClientFromURL(url);
+    }
+
+    /**
+     * Creates a connection to a particular server using a given username and password. This object can then be passed
+     * in to any other API calls.
+     * 
+     * The additional sessionReference parameter must be a reference to a logged-in Session. Any method calls on this
+     * Connection will use it. This constructor does not call Session.loginWithPassword, and dispose() on the resulting
+     * Connection object does not call Session.logout. The programmer is responsible for ensuring the Session is logged
+     * in and out correctly.
+     */
+    public Connection(URL url, String sessionReference)
+    {
+        deprecatedConstructorUsed = false;
+
+        this.client = getClientFromURL(url);
+        this.sessionReference = sessionReference;
+    }
+
+    protected void finalize() throws Throwable
+    {
+        dispose();
+        super.finalize();
+    }
+
+    /**
+     * Nothrow guarantee.
+     */
+    public void dispose()
+    {
+        if (!deprecatedConstructorUsed)
+        {
+            // We only need to do the Session.logout if they used the old deprecated constructor.
+            return;
+        }
+
+        try
+        {
+            if (sessionReference != null)
+            {
+                String method_call = "session.logout";
+                Object[] method_params = { Marshalling.toXMLRPC(this.sessionReference) };
+                client.execute(method_call, method_params);
+                sessionReference = null;
+            }
+        }
+        catch (XmlRpcException exn)
+        {
+        }
+    }
+
+    /**
+     * @deprecated The programmer is now responsible for calling login/logout themselves.
+     */
+    @Deprecated
+    private static String loginWithPassword(XmlRpcClient client, String username, String password)
+            throws BadServerResponse, XmlRpcException, SessionAuthenticationFailed
+    {
+        String method_call = "session.login_with_password";
+        Object[] method_params = { Marshalling.toXMLRPC(username), Marshalling.toXMLRPC(password) };
+        Map response = (Map) client.execute(method_call, method_params);
+        if (response.get("Status").equals("Success"))
+        {
+            return (String) response.get("Value");
+        } else if (response.get("Status").equals("Failure"))
+        {
+            Object[] error = (Object[]) response.get("ErrorDescription");
+            if (error[0].equals("SESSION_AUTHENTICATION_FAILED"))
+            {
+                throw new SessionAuthenticationFailed();
+            }
+        }
+        throw new BadServerResponse(response);
+    }
+
+    /**
+     * @deprecated The programmer is now responsible for calling login/logout themselves.
+     */
+    @Deprecated
+    private static String loginWithPassword(XmlRpcClient client, String username, String password, String ApiVersion)
+            throws BadServerResponse, XmlRpcException, SessionAuthenticationFailed
+    {
+        String method_call = "session.login_with_password";
+        Object[] method_params = { Marshalling.toXMLRPC(username), Marshalling.toXMLRPC(password),
+                Marshalling.toXMLRPC(ApiVersion) };
+        Map response = (Map) client.execute(method_call, method_params);
+        if (response.get("Status").equals("Success"))
+        {
+            return (String) response.get("Value");
+        } else if (response.get("Status").equals("Failure"))
+        {
+            Object[] error = (Object[]) response.get("ErrorDescription");
+            if (error[0].equals("SESSION_AUTHENTICATION_FAILED"))
+            {
+                throw new SessionAuthenticationFailed();
+            }
+        }
+        throw new BadServerResponse(response);
+    }
+
+    private XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
+
+    public XmlRpcClientConfigImpl getConfig()
+    {
+	return config;
+    }
+    private XmlRpcClient getClientFromURL(URL url)
+    {
+        config.setTimeZone(TimeZone.getTimeZone("UTC"));
+        config.setServerURL(url);
+        config.setReplyTimeout(_wait * 1000);
+        config.setConnectionTimeout(5000);
+        XmlRpcClient client = new XmlRpcClient();
+        client.setConfig(config);
+        return client;
+    }
+
+    /*
+     * Because the binding calls are constructing their own parameter lists, they need to be able to get to 
+     * the session reference directly. This is all rather ugly and needs redone
+     * Changed to public to allow easier integration with HTTP-level streaming interface,
+     * see CA-15447
+     */
+    public String getSessionReference()
+    {
+        return this.sessionReference;
+    }
+
+    /**
+     * The (auto-generated parts of) the bindings dispatch XMLRPC calls on this Connection's client through this method.
+     */
+    protected Map dispatch(String method_call, Object[] method_params) throws XmlRpcException, XenAPIException
+    {
+        Map response = (Map) client.execute(method_call, method_params);
+
+        if (!deprecatedConstructorUsed)
+        {
+            // We are using the new-style constructor which doesn't perform login.
+            // Set this Connection's Session reference from the value returned on the wire.
+            if (method_call.equals("session.login_with_password") &&
+                response.get("Status").equals("Success"))
+            {
+                // Store the Session reference and ask the server what the
+                // API version it's using is.
+                Session session = Types.toSession(response.get("Value"));
+                sessionReference = session.ref;
+                setAPIVersion(session);
+            }
+            else if (method_call.equals("session.slave_local_login_with_password") &&
+                     response.get("Status").equals("Success"))
+            {
+                // Store the Session reference and assume the latest API version.
+                sessionReference = Types.toSession(response.get("Value")).ref;
+                apiVersion = APIVersion.latest();
+            }
+            else if (method_call.equals("session.logout"))
+            {
+                // Work around a bug in XenServer 5.0 and below.
+                // session.login_with_password should have rejected us with
+                // HOST_IS_SLAVE, but instead we don't find out until later.
+                // We don't want to leak the session, so we need to log out
+                // this session from the master instead.
+                if (response.get("Status").equals("Failure"))
+                {
+                    Object[] error = (Object[]) response.get("ErrorDescription");
+                    if (error.length == 2 && error[0].equals("HOST_IS_SLAVE"))
+                    {
+                        try
+                        {
+                            URL client_url =
+                                ((XmlRpcHttpClientConfig)client.getClientConfig()).getServerURL();
+                            Connection tmp_conn =
+                                new Connection(new URL(client_url.getProtocol(),
+                                                       (String)error[1],
+                                                       client_url.getPort(),
+                                                       client_url.getFile()), _wait);
+                            tmp_conn.sessionReference = sessionReference;
+                            try
+                            {
+                                Session.logout(tmp_conn);
+                            }
+                            finally
+                            {
+                                tmp_conn.dispose();
+                            }
+                        }
+                        catch (Exception exn2)
+                        {
+                            // Ignore -- we're going to throw HostIsSlave anyway.
+                        }
+                    }
+                }
+
+                // Clear the stored Session reference.
+                this.sessionReference = null;
+            }
+        }
+
+        return Types.checkResponse(response);
+    }
+
+
+    private void setAPIVersion(Session session) throws XenAPIException, XmlRpcException
+    {
+        try
+        {
+            long major = session.getThisHost(this).getAPIVersionMajor(this);
+            long minor = session.getThisHost(this).getAPIVersionMinor(this);
+            apiVersion = APIVersion.fromMajorMinor(major, minor);
+        }
+        catch (BadServerResponse exn)
+        {
+            apiVersion = APIVersion.UNKNOWN;
+        }
+    }
+}


Mime
View raw message