// Copyright 2012 Citrix Systems, Inc. Licensed under the // Apache License, Version 2.0 (the "License"); you may not use this // file except in compliance with the License. Citrix Systems, Inc. // reserves all rights not expressly granted by 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. // // Automatically generated by addcopyright.py at 04/03/2012 package com.cloud.ovm.object; import java.net.MalformedURLException; import java.net.URL; import java.util.TimeZone; import org.apache.log4j.Logger; import org.apache.xmlrpc.XmlRpcException; import org.apache.xmlrpc.client.TimingOutCallback; import org.apache.xmlrpc.client.XmlRpcClient; import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; import com.cloud.utils.exception.CloudRuntimeException; public class Connection { private static final Logger s_logger = Logger.getLogger(Connection.class); private XmlRpcClientConfigImpl _config = new XmlRpcClientConfigImpl(); XmlRpcClient _client; String _username; String _password; String _ip; Integer _port = 8899; Boolean _isSsl = false; private XmlRpcClient getXmlClient() { XmlRpcClient client = new XmlRpcClient(); URL url; try { url = new URL("http://" + _ip + ":" + _port.toString()); _config.setTimeZone(TimeZone.getTimeZone("UTC")); _config.setServerURL(url); _config.setReplyTimeout(0); // disable, we use asyncexecute to control timeout _config.setConnectionTimeout(6000); _config.setBasicUserName(_username); _config.setBasicPassword(_password); client.setConfig(_config); } catch (MalformedURLException e) { throw new CloudRuntimeException(e.getMessage()); } return client; } public Connection(String ip, Integer port, String username, String password) { _ip = ip; _port = port; _username = username; _password = password; _client = getXmlClient(); } public Connection(String ip, String username, String password) { _ip = ip; _username = username; _password = password; _client = getXmlClient(); } public Object call(String method, Object[] params) throws XmlRpcException { /* default timeout is 10 mins */ return callTimeoutInSec(method, params, 600); } public Object call(String method, Object[] params, boolean debug) throws XmlRpcException { /* default timeout is 10 mins */ return callTimeoutInSec(method, params, 600, debug); } public Object callTimeoutInSec(String method, Object[] params, int timeout, boolean debug) throws XmlRpcException { TimingOutCallback callback = new TimingOutCallback(timeout * 1000); Object[] mParams = new Object[params.length + 1]; mParams[0] = method; for (int i=0; i<params.length; i++) { mParams[i+1] = params[i]; } if (debug) { /* * some parameters including user password should not be printed in log */ s_logger.debug("Call Ovm agent: " + Coder.toJson(mParams)); } long startTime = System.currentTimeMillis(); _client.executeAsync("OvmDispatch", mParams, callback); try { return callback.waitForResponse(); } catch (TimingOutCallback.TimeoutException to) { throw to; } catch (Throwable e) { throw new XmlRpcException(-2, e.getMessage()); } finally { long endTime = System.currentTimeMillis(); float during = (endTime - startTime) / 1000; // in secs s_logger.debug("Ovm call " + method + " finished in " + during + " secs"); } } public Object callTimeoutInSec(String method, Object[] params, int timeout) throws XmlRpcException { return callTimeoutInSec(method, params, timeout, true); } public String getIp() { return _ip; } public Integer getPort() { return _port; } public String getUserName() { return _username; } public String getPassword() { return _password; } public Boolean getIsSsl() { return _isSsl; } }