You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mi...@apache.org on 2012/08/13 09:35:57 UTC
[3/8] Remove @author tag from non third-party source files in
console-proxy folder and repalce tab indention with 4 spaces
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b25122bd/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyGCThread.java
----------------------------------------------------------------------
diff --git a/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyGCThread.java b/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyGCThread.java
index f14cd5a..158f9fe 100644
--- a/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyGCThread.java
+++ b/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyGCThread.java
@@ -14,96 +14,95 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
-package com.cloud.consoleproxy;
-
-import java.io.File;
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-import org.apache.log4j.Logger;
-
-/**
- *
- * @author Kelven Yang
- * ConsoleProxyGCThread does house-keeping work for the process, it helps cleanup log files,
- * recycle idle client sessions without front-end activities and report client stats to external
- * management software
- */
-public class ConsoleProxyGCThread extends Thread {
- private static final Logger s_logger = Logger.getLogger(ConsoleProxyGCThread.class);
-
- private final static int MAX_SESSION_IDLE_SECONDS = 180;
-
- private Hashtable<String, ConsoleProxyClient> connMap;
- private long lastLogScan = 0;
-
- public ConsoleProxyGCThread(Hashtable<String, ConsoleProxyClient> connMap) {
- this.connMap = connMap;
- }
-
- private void cleanupLogging() {
- if(lastLogScan != 0 && System.currentTimeMillis() - lastLogScan < 3600000)
- return;
-
- lastLogScan = System.currentTimeMillis();
-
- File logDir = new File("./logs");
- File files[] = logDir.listFiles();
- if(files != null) {
- for(File file : files) {
- if(System.currentTimeMillis() - file.lastModified() >= 86400000L) {
- try {
- file.delete();
- } catch(Throwable e) {
- }
- }
- }
- }
- }
-
- @Override
+package com.cloud.consoleproxy;
+
+import java.io.File;
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+import org.apache.log4j.Logger;
+
+/**
+ *
+ * ConsoleProxyGCThread does house-keeping work for the process, it helps cleanup log files,
+ * recycle idle client sessions without front-end activities and report client stats to external
+ * management software
+ */
+public class ConsoleProxyGCThread extends Thread {
+ private static final Logger s_logger = Logger.getLogger(ConsoleProxyGCThread.class);
+
+ private final static int MAX_SESSION_IDLE_SECONDS = 180;
+
+ private Hashtable<String, ConsoleProxyClient> connMap;
+ private long lastLogScan = 0;
+
+ public ConsoleProxyGCThread(Hashtable<String, ConsoleProxyClient> connMap) {
+ this.connMap = connMap;
+ }
+
+ private void cleanupLogging() {
+ if(lastLogScan != 0 && System.currentTimeMillis() - lastLogScan < 3600000)
+ return;
+
+ lastLogScan = System.currentTimeMillis();
+
+ File logDir = new File("./logs");
+ File files[] = logDir.listFiles();
+ if(files != null) {
+ for(File file : files) {
+ if(System.currentTimeMillis() - file.lastModified() >= 86400000L) {
+ try {
+ file.delete();
+ } catch(Throwable e) {
+ }
+ }
+ }
+ }
+ }
+
+ @Override
public void run() {
-
- boolean bReportLoad = false;
- while (true) {
- cleanupLogging();
- bReportLoad = false;
-
- if(s_logger.isDebugEnabled())
- s_logger.debug("connMap=" + connMap);
- Enumeration<String> e = connMap.keys();
- while (e.hasMoreElements()) {
- String key;
- ConsoleProxyClient client;
-
- synchronized (connMap) {
- key = e.nextElement();
- client = connMap.get(key);
- }
-
- long seconds_unused = (System.currentTimeMillis() - client.getClientLastFrontEndActivityTime()) / 1000;
- if (seconds_unused < MAX_SESSION_IDLE_SECONDS) {
- continue;
- }
-
- synchronized (connMap) {
- connMap.remove(key);
- }
-
- // close the server connection
- s_logger.info("Dropping " + client + " which has not been used for " + seconds_unused + " seconds");
- client.closeClient();
- }
-
- if(bReportLoad) {
- // report load changes
- String loadInfo = new ConsoleProxyClientStatsCollector(connMap).getStatsReport();
- ConsoleProxy.reportLoadInfo(loadInfo);
- if(s_logger.isDebugEnabled())
- s_logger.debug("Report load change : " + loadInfo);
- }
-
- try { Thread.sleep(5000); } catch (InterruptedException ex) {}
- }
- }
-}
+
+ boolean bReportLoad = false;
+ while (true) {
+ cleanupLogging();
+ bReportLoad = false;
+
+ if(s_logger.isDebugEnabled())
+ s_logger.debug("connMap=" + connMap);
+ Enumeration<String> e = connMap.keys();
+ while (e.hasMoreElements()) {
+ String key;
+ ConsoleProxyClient client;
+
+ synchronized (connMap) {
+ key = e.nextElement();
+ client = connMap.get(key);
+ }
+
+ long seconds_unused = (System.currentTimeMillis() - client.getClientLastFrontEndActivityTime()) / 1000;
+ if (seconds_unused < MAX_SESSION_IDLE_SECONDS) {
+ continue;
+ }
+
+ synchronized (connMap) {
+ connMap.remove(key);
+ }
+
+ // close the server connection
+ s_logger.info("Dropping " + client + " which has not been used for " + seconds_unused + " seconds");
+ client.closeClient();
+ }
+
+ if(bReportLoad) {
+ // report load changes
+ String loadInfo = new ConsoleProxyClientStatsCollector(connMap).getStatsReport();
+ ConsoleProxy.reportLoadInfo(loadInfo);
+ if(s_logger.isDebugEnabled())
+ s_logger.debug("Report load change : " + loadInfo);
+ }
+
+ try { Thread.sleep(5000); } catch (InterruptedException ex) {}
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b25122bd/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyPasswordBasedEncryptor.java
----------------------------------------------------------------------
diff --git a/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyPasswordBasedEncryptor.java b/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyPasswordBasedEncryptor.java
index 3ef22c5..29826f0 100644
--- a/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyPasswordBasedEncryptor.java
+++ b/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyPasswordBasedEncryptor.java
@@ -14,130 +14,129 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
-package com.cloud.consoleproxy;
-
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.Cipher;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.spec.SecretKeySpec;
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.log4j.Logger;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-
-/**
- *
- * @author Kelven Yang
- * A simple password based encyrptor based on DES. It can serialize simple POJO object into URL safe string
- * and deserialize it back.
- *
- */
-public class ConsoleProxyPasswordBasedEncryptor {
- private static final Logger s_logger = Logger.getLogger(ConsoleProxyPasswordBasedEncryptor.class);
-
- private String password;
- private Gson gson;
-
- public ConsoleProxyPasswordBasedEncryptor(String password) {
- this.password = password;
- gson = new GsonBuilder().create();
- }
-
- public String encryptText(String text) {
- if(text == null || text.isEmpty())
- return text;
-
- assert(password != null);
- assert(!password.isEmpty());
-
- try {
- Cipher cipher = Cipher.getInstance("DES");
- int maxKeySize = 8;
- SecretKeySpec keySpec = new SecretKeySpec(normalizeKey(password.getBytes(), maxKeySize), "DES");
- cipher.init(Cipher.ENCRYPT_MODE, keySpec);
- byte[] encryptedBytes = cipher.doFinal(text.getBytes());
- return Base64.encodeBase64URLSafeString(encryptedBytes);
- } catch (NoSuchAlgorithmException e) {
- s_logger.error("Unexpected exception ", e);
- return null;
- } catch (NoSuchPaddingException e) {
- s_logger.error("Unexpected exception ", e);
- return null;
- } catch (IllegalBlockSizeException e) {
- s_logger.error("Unexpected exception ", e);
- return null;
- } catch (BadPaddingException e) {
- s_logger.error("Unexpected exception ", e);
- return null;
- } catch (InvalidKeyException e) {
- s_logger.error("Unexpected exception ", e);
- return null;
- }
- }
-
- public String decryptText(String encryptedText) {
- if(encryptedText == null || encryptedText.isEmpty())
- return encryptedText;
-
- assert(password != null);
- assert(!password.isEmpty());
-
- try {
- Cipher cipher = Cipher.getInstance("DES");
- int maxKeySize = 8;
- SecretKeySpec keySpec = new SecretKeySpec(normalizeKey(password.getBytes(), maxKeySize), "DES");
- cipher.init(Cipher.DECRYPT_MODE, keySpec);
-
- byte[] encryptedBytes = Base64.decodeBase64(encryptedText);
- return new String(cipher.doFinal(encryptedBytes));
- } catch (NoSuchAlgorithmException e) {
- s_logger.error("Unexpected exception ", e);
- return null;
- } catch (NoSuchPaddingException e) {
- s_logger.error("Unexpected exception ", e);
- return null;
- } catch (IllegalBlockSizeException e) {
- s_logger.error("Unexpected exception ", e);
- return null;
- } catch (BadPaddingException e) {
- s_logger.error("Unexpected exception ", e);
- return null;
- } catch (InvalidKeyException e) {
- s_logger.error("Unexpected exception ", e);
- return null;
- }
- }
-
- public <T> String encryptObject(Class<?> clz, T obj) {
- if(obj == null)
- return null;
-
- String json = gson.toJson(obj);
- return encryptText(json);
- }
-
- @SuppressWarnings("unchecked")
- public <T> T decryptObject(Class<?> clz, String encrypted) {
- if(encrypted == null || encrypted.isEmpty())
- return null;
-
- String json = decryptText(encrypted);
- return (T)gson.fromJson(json, clz);
- }
-
- private static byte[] normalizeKey(byte[] keyBytes, int keySize) {
- assert(keySize > 0);
- byte[] key = new byte[keySize];
-
- for(int i = 0; i < keyBytes.length; i++)
- key[i%keySize] ^= keyBytes[i];
-
- return key;
- }
-}
+package com.cloud.consoleproxy;
+
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.SecretKeySpec;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.log4j.Logger;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+/**
+ *
+ * A simple password based encyrptor based on DES. It can serialize simple POJO object into URL safe string
+ * and deserialize it back.
+ *
+ */
+public class ConsoleProxyPasswordBasedEncryptor {
+ private static final Logger s_logger = Logger.getLogger(ConsoleProxyPasswordBasedEncryptor.class);
+
+ private String password;
+ private Gson gson;
+
+ public ConsoleProxyPasswordBasedEncryptor(String password) {
+ this.password = password;
+ gson = new GsonBuilder().create();
+ }
+
+ public String encryptText(String text) {
+ if(text == null || text.isEmpty())
+ return text;
+
+ assert(password != null);
+ assert(!password.isEmpty());
+
+ try {
+ Cipher cipher = Cipher.getInstance("DES");
+ int maxKeySize = 8;
+ SecretKeySpec keySpec = new SecretKeySpec(normalizeKey(password.getBytes(), maxKeySize), "DES");
+ cipher.init(Cipher.ENCRYPT_MODE, keySpec);
+ byte[] encryptedBytes = cipher.doFinal(text.getBytes());
+ return Base64.encodeBase64URLSafeString(encryptedBytes);
+ } catch (NoSuchAlgorithmException e) {
+ s_logger.error("Unexpected exception ", e);
+ return null;
+ } catch (NoSuchPaddingException e) {
+ s_logger.error("Unexpected exception ", e);
+ return null;
+ } catch (IllegalBlockSizeException e) {
+ s_logger.error("Unexpected exception ", e);
+ return null;
+ } catch (BadPaddingException e) {
+ s_logger.error("Unexpected exception ", e);
+ return null;
+ } catch (InvalidKeyException e) {
+ s_logger.error("Unexpected exception ", e);
+ return null;
+ }
+ }
+
+ public String decryptText(String encryptedText) {
+ if(encryptedText == null || encryptedText.isEmpty())
+ return encryptedText;
+
+ assert(password != null);
+ assert(!password.isEmpty());
+
+ try {
+ Cipher cipher = Cipher.getInstance("DES");
+ int maxKeySize = 8;
+ SecretKeySpec keySpec = new SecretKeySpec(normalizeKey(password.getBytes(), maxKeySize), "DES");
+ cipher.init(Cipher.DECRYPT_MODE, keySpec);
+
+ byte[] encryptedBytes = Base64.decodeBase64(encryptedText);
+ return new String(cipher.doFinal(encryptedBytes));
+ } catch (NoSuchAlgorithmException e) {
+ s_logger.error("Unexpected exception ", e);
+ return null;
+ } catch (NoSuchPaddingException e) {
+ s_logger.error("Unexpected exception ", e);
+ return null;
+ } catch (IllegalBlockSizeException e) {
+ s_logger.error("Unexpected exception ", e);
+ return null;
+ } catch (BadPaddingException e) {
+ s_logger.error("Unexpected exception ", e);
+ return null;
+ } catch (InvalidKeyException e) {
+ s_logger.error("Unexpected exception ", e);
+ return null;
+ }
+ }
+
+ public <T> String encryptObject(Class<?> clz, T obj) {
+ if(obj == null)
+ return null;
+
+ String json = gson.toJson(obj);
+ return encryptText(json);
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> T decryptObject(Class<?> clz, String encrypted) {
+ if(encrypted == null || encrypted.isEmpty())
+ return null;
+
+ String json = decryptText(encrypted);
+ return (T)gson.fromJson(json, clz);
+ }
+
+ private static byte[] normalizeKey(byte[] keyBytes, int keySize) {
+ assert(keySize > 0);
+ byte[] key = new byte[keySize];
+
+ for(int i = 0; i < keyBytes.length; i++)
+ key[i%keySize] ^= keyBytes[i];
+
+ return key;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b25122bd/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyVncClient.java
----------------------------------------------------------------------
diff --git a/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyVncClient.java b/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyVncClient.java
index 77a9977..6a473b5 100644
--- a/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyVncClient.java
+++ b/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyVncClient.java
@@ -14,223 +14,222 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
-package com.cloud.consoleproxy;
-
-import java.io.IOException;
+package com.cloud.consoleproxy;
+
+import java.io.IOException;
import java.net.URI;
-import java.net.UnknownHostException;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.consoleproxy.vnc.FrameBufferCanvas;
-import com.cloud.consoleproxy.vnc.RfbConstants;
-import com.cloud.consoleproxy.vnc.VncClient;
-
-/**
- *
- * @author Kelven Yang
- * ConsoleProxyVncClient bridges a VNC engine with the front-end AJAX viewer
- *
- */
-public class ConsoleProxyVncClient extends ConsoleProxyClientBase {
- private static final Logger s_logger = Logger.getLogger(ConsoleProxyVncClient.class);
+import java.net.UnknownHostException;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.consoleproxy.vnc.FrameBufferCanvas;
+import com.cloud.consoleproxy.vnc.RfbConstants;
+import com.cloud.consoleproxy.vnc.VncClient;
+
+/**
+ *
+ * ConsoleProxyVncClient bridges a VNC engine with the front-end AJAX viewer
+ *
+ */
+public class ConsoleProxyVncClient extends ConsoleProxyClientBase {
+ private static final Logger s_logger = Logger.getLogger(ConsoleProxyVncClient.class);
+
+ private static final int SHIFT_KEY_MASK = 64;
+ private static final int CTRL_KEY_MASK = 128;
+ private static final int META_KEY_MASK = 256;
+ private static final int ALT_KEY_MASK = 512;
+
+ private static final int X11_KEY_SHIFT = 0xffe1;
+ private static final int X11_KEY_CTRL = 0xffe3;
+ private static final int X11_KEY_ALT = 0xffe9;
+ private static final int X11_KEY_META = 0xffe7;
+
+ private VncClient client;
+ private Thread worker;
+ private boolean workerDone = false;
+
+ private int lastModifierStates = 0;
+ private int lastPointerMask = 0;
+
+ public ConsoleProxyVncClient() {
+ }
+
+ public boolean isHostConnected() {
+ if(client != null)
+ return client.isHostConnected();
+
+ return false;
+ }
+
+ @Override
+ public boolean isFrontEndAlive() {
+ if(workerDone || System.currentTimeMillis() - getClientLastFrontEndActivityTime() > ConsoleProxy.VIEWER_LINGER_SECONDS*1000) {
+ s_logger.info("Front end has been idle for too long");
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public void initClient(ConsoleProxyClientParam param) {
+ setClientParam(param);
+
+ client = new VncClient(this);
+ worker = new Thread(new Runnable() {
+ public void run() {
+ String tunnelUrl = getClientParam().getClientTunnelUrl();
+ String tunnelSession = getClientParam().getClientTunnelSession();
+
+ for(int i = 0; i < 15; i++) {
+ try {
+ if(tunnelUrl != null && !tunnelUrl.isEmpty() && tunnelSession != null && !tunnelSession.isEmpty()) {
+ URI uri = new URI(tunnelUrl);
+ s_logger.info("Connect to VNC server via tunnel. url: " + tunnelUrl + ", session: " + tunnelSession);
+
+ ConsoleProxy.ensureRoute(uri.getHost());
+ client.connectTo(
+ uri.getHost(), uri.getPort(),
+ uri.getPath() + "?" + uri.getQuery(),
+ tunnelSession, "https".equalsIgnoreCase(uri.getScheme()),
+ getClientHostPassword());
+ } else {
+ s_logger.info("Connect to VNC server directly. host: " + getClientHostAddress() + ", port: " + getClientHostPort());
+ ConsoleProxy.ensureRoute(getClientHostAddress());
+ client.connectTo(getClientHostAddress(), getClientHostPort(), getClientHostPassword());
+ }
+ } catch (UnknownHostException e) {
+ s_logger.error("Unexpected exception (will retry until timeout)", e);
+ } catch (IOException e) {
+ s_logger.error("Unexpected exception (will retry until timeout) ", e);
+ } catch (Throwable e) {
+ s_logger.error("Unexpected exception (will retry until timeout) ", e);
+ }
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ }
+
+ if(tunnelUrl != null && !tunnelUrl.isEmpty() && tunnelSession != null && !tunnelSession.isEmpty()) {
+ ConsoleProxyAuthenticationResult authResult = ConsoleProxy.reAuthenticationExternally(getClientParam());
+ if(authResult != null && authResult.isSuccess()) {
+ if(authResult.getTunnelUrl() != null && !authResult.getTunnelUrl().isEmpty() &&
+ authResult.getTunnelSession() != null && !authResult.getTunnelSession().isEmpty()) {
+ tunnelUrl = authResult.getTunnelUrl();
+ tunnelSession = authResult.getTunnelSession();
+
+ s_logger.info("Reset XAPI session. url: " + tunnelUrl + ", session: " + tunnelSession);
+ }
+ }
+ }
+ }
- private static final int SHIFT_KEY_MASK = 64;
- private static final int CTRL_KEY_MASK = 128;
- private static final int META_KEY_MASK = 256;
- private static final int ALT_KEY_MASK = 512;
-
- private static final int X11_KEY_SHIFT = 0xffe1;
- private static final int X11_KEY_CTRL = 0xffe3;
- private static final int X11_KEY_ALT = 0xffe9;
- private static final int X11_KEY_META = 0xffe7;
-
- private VncClient client;
- private Thread worker;
- private boolean workerDone = false;
-
- private int lastModifierStates = 0;
- private int lastPointerMask = 0;
-
- public ConsoleProxyVncClient() {
- }
-
- public boolean isHostConnected() {
- if(client != null)
- return client.isHostConnected();
-
- return false;
- }
-
- @Override
- public boolean isFrontEndAlive() {
- if(workerDone || System.currentTimeMillis() - getClientLastFrontEndActivityTime() > ConsoleProxy.VIEWER_LINGER_SECONDS*1000) {
- s_logger.info("Front end has been idle for too long");
- return false;
- }
- return true;
- }
-
- @Override
- public void initClient(ConsoleProxyClientParam param) {
- setClientParam(param);
-
- client = new VncClient(this);
- worker = new Thread(new Runnable() {
- public void run() {
- String tunnelUrl = getClientParam().getClientTunnelUrl();
- String tunnelSession = getClientParam().getClientTunnelSession();
-
- for(int i = 0; i < 15; i++) {
- try {
- if(tunnelUrl != null && !tunnelUrl.isEmpty() && tunnelSession != null && !tunnelSession.isEmpty()) {
- URI uri = new URI(tunnelUrl);
- s_logger.info("Connect to VNC server via tunnel. url: " + tunnelUrl + ", session: " + tunnelSession);
-
- ConsoleProxy.ensureRoute(uri.getHost());
- client.connectTo(
- uri.getHost(), uri.getPort(),
- uri.getPath() + "?" + uri.getQuery(),
- tunnelSession, "https".equalsIgnoreCase(uri.getScheme()),
- getClientHostPassword());
- } else {
- s_logger.info("Connect to VNC server directly. host: " + getClientHostAddress() + ", port: " + getClientHostPort());
- ConsoleProxy.ensureRoute(getClientHostAddress());
- client.connectTo(getClientHostAddress(), getClientHostPort(), getClientHostPassword());
- }
- } catch (UnknownHostException e) {
- s_logger.error("Unexpected exception (will retry until timeout)", e);
- } catch (IOException e) {
- s_logger.error("Unexpected exception (will retry until timeout) ", e);
- } catch (Throwable e) {
- s_logger.error("Unexpected exception (will retry until timeout) ", e);
- }
-
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- }
+ s_logger.info("Receiver thread stopped.");
+ workerDone = true;
+ client.getClientListener().onClientClose();
+ }
+ });
+
+ worker.setDaemon(true);
+ worker.start();
+ }
+
+ @Override
+ public void closeClient() {
+ if(client != null)
+ client.shutdown();
+ }
+
+ @Override
+ public void onClientConnected() {
+ }
+
+ public void onClientClose() {
+ s_logger.info("Received client close indication. remove viewer from map.");
+
+ ConsoleProxy.removeViewer(this);
+ }
+
+ @Override
+ public void onFramebufferUpdate(int x, int y, int w, int h) {
+ super.onFramebufferUpdate(x, y, w, h);
+ client.requestUpdate(false);
+ }
- if(tunnelUrl != null && !tunnelUrl.isEmpty() && tunnelSession != null && !tunnelSession.isEmpty()) {
- ConsoleProxyAuthenticationResult authResult = ConsoleProxy.reAuthenticationExternally(getClientParam());
- if(authResult != null && authResult.isSuccess()) {
- if(authResult.getTunnelUrl() != null && !authResult.getTunnelUrl().isEmpty() &&
- authResult.getTunnelSession() != null && !authResult.getTunnelSession().isEmpty()) {
- tunnelUrl = authResult.getTunnelUrl();
- tunnelSession = authResult.getTunnelSession();
-
- s_logger.info("Reset XAPI session. url: " + tunnelUrl + ", session: " + tunnelSession);
- }
- }
- }
- }
+ public void sendClientRawKeyboardEvent(InputEventType event, int code, int modifiers) {
+ if(client == null)
+ return;
+
+ updateFrontEndActivityTime();
+
+ switch(event) {
+ case KEY_DOWN :
+ sendModifierEvents(modifiers);
+ client.sendClientKeyboardEvent(RfbConstants.KEY_DOWN, code, 0);
+ break;
+
+ case KEY_UP :
+ client.sendClientKeyboardEvent(RfbConstants.KEY_UP, code, 0);
+ sendModifierEvents(0);
+ break;
+
+ case KEY_PRESS :
+ break;
+
+ default :
+ assert(false);
+ break;
+ }
+ }
+
+ public void sendClientMouseEvent(InputEventType event, int x, int y, int code, int modifiers) {
+ if(client == null)
+ return;
+
+ updateFrontEndActivityTime();
- s_logger.info("Receiver thread stopped.");
- workerDone = true;
- client.getClientListener().onClientClose();
- }
- });
-
- worker.setDaemon(true);
- worker.start();
- }
-
- @Override
- public void closeClient() {
- if(client != null)
- client.shutdown();
- }
-
- @Override
- public void onClientConnected() {
- }
-
- public void onClientClose() {
- s_logger.info("Received client close indication. remove viewer from map.");
-
- ConsoleProxy.removeViewer(this);
- }
-
- @Override
- public void onFramebufferUpdate(int x, int y, int w, int h) {
- super.onFramebufferUpdate(x, y, w, h);
- client.requestUpdate(false);
- }
-
- public void sendClientRawKeyboardEvent(InputEventType event, int code, int modifiers) {
- if(client == null)
- return;
-
- updateFrontEndActivityTime();
-
- switch(event) {
- case KEY_DOWN :
- sendModifierEvents(modifiers);
- client.sendClientKeyboardEvent(RfbConstants.KEY_DOWN, code, 0);
- break;
-
- case KEY_UP :
- client.sendClientKeyboardEvent(RfbConstants.KEY_UP, code, 0);
- sendModifierEvents(0);
- break;
-
- case KEY_PRESS :
- break;
-
- default :
- assert(false);
- break;
- }
- }
-
- public void sendClientMouseEvent(InputEventType event, int x, int y, int code, int modifiers) {
- if(client == null)
- return;
-
- updateFrontEndActivityTime();
-
- if (event == InputEventType.MOUSE_DOWN) {
- if (code == 2) {
- lastPointerMask |= 4;
- } else if (code == 0) {
- lastPointerMask |= 1;
- }
- }
-
- if (event == InputEventType.MOUSE_UP) {
- if (code == 2) {
- lastPointerMask ^= 4;
- } else if (code == 0) {
- lastPointerMask ^= 1;
- }
- }
-
- sendModifierEvents(modifiers);
- client.sendClientMouseEvent(lastPointerMask, x, y, code, modifiers);
- if(lastPointerMask == 0)
- sendModifierEvents(0);
- }
-
- @Override
- protected FrameBufferCanvas getFrameBufferCavas() {
- if(client != null)
- return client.getFrameBufferCanvas();
- return null;
- }
-
- private void sendModifierEvents(int modifiers) {
- if((modifiers & SHIFT_KEY_MASK) != (lastModifierStates & SHIFT_KEY_MASK))
- client.sendClientKeyboardEvent((modifiers & SHIFT_KEY_MASK) != 0 ? RfbConstants.KEY_DOWN : RfbConstants.KEY_UP, X11_KEY_SHIFT, 0);
-
- if((modifiers & CTRL_KEY_MASK) != (lastModifierStates & CTRL_KEY_MASK))
- client.sendClientKeyboardEvent((modifiers & CTRL_KEY_MASK) != 0 ? RfbConstants.KEY_DOWN : RfbConstants.KEY_UP, X11_KEY_CTRL, 0);
+ if (event == InputEventType.MOUSE_DOWN) {
+ if (code == 2) {
+ lastPointerMask |= 4;
+ } else if (code == 0) {
+ lastPointerMask |= 1;
+ }
+ }
+
+ if (event == InputEventType.MOUSE_UP) {
+ if (code == 2) {
+ lastPointerMask ^= 4;
+ } else if (code == 0) {
+ lastPointerMask ^= 1;
+ }
+ }
+
+ sendModifierEvents(modifiers);
+ client.sendClientMouseEvent(lastPointerMask, x, y, code, modifiers);
+ if(lastPointerMask == 0)
+ sendModifierEvents(0);
+ }
+
+ @Override
+ protected FrameBufferCanvas getFrameBufferCavas() {
+ if(client != null)
+ return client.getFrameBufferCanvas();
+ return null;
+ }
+
+ private void sendModifierEvents(int modifiers) {
+ if((modifiers & SHIFT_KEY_MASK) != (lastModifierStates & SHIFT_KEY_MASK))
+ client.sendClientKeyboardEvent((modifiers & SHIFT_KEY_MASK) != 0 ? RfbConstants.KEY_DOWN : RfbConstants.KEY_UP, X11_KEY_SHIFT, 0);
+
+ if((modifiers & CTRL_KEY_MASK) != (lastModifierStates & CTRL_KEY_MASK))
+ client.sendClientKeyboardEvent((modifiers & CTRL_KEY_MASK) != 0 ? RfbConstants.KEY_DOWN : RfbConstants.KEY_UP, X11_KEY_CTRL, 0);
- if((modifiers & META_KEY_MASK) != (lastModifierStates & META_KEY_MASK))
- client.sendClientKeyboardEvent((modifiers & META_KEY_MASK) != 0 ? RfbConstants.KEY_DOWN : RfbConstants.KEY_UP, X11_KEY_META, 0);
-
- if((modifiers & ALT_KEY_MASK) != (lastModifierStates & ALT_KEY_MASK))
- client.sendClientKeyboardEvent((modifiers & ALT_KEY_MASK) != 0 ? RfbConstants.KEY_DOWN : RfbConstants.KEY_UP, X11_KEY_ALT, 0);
-
- lastModifierStates = modifiers;
- }
-}
+ if((modifiers & META_KEY_MASK) != (lastModifierStates & META_KEY_MASK))
+ client.sendClientKeyboardEvent((modifiers & META_KEY_MASK) != 0 ? RfbConstants.KEY_DOWN : RfbConstants.KEY_UP, X11_KEY_META, 0);
+
+ if((modifiers & ALT_KEY_MASK) != (lastModifierStates & ALT_KEY_MASK))
+ client.sendClientKeyboardEvent((modifiers & ALT_KEY_MASK) != 0 ? RfbConstants.KEY_DOWN : RfbConstants.KEY_UP, X11_KEY_ALT, 0);
+
+ lastModifierStates = modifiers;
+ }
+}