Updated Branches:
  refs/heads/master 93ac01db0 -> 3609e44b5

commit for https://reviews.apache.org/r/6608/


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

Branch: refs/heads/master
Commit: 3609e44b58cb1c3fe6d29014d807b42c7eafed3a
Parents: 93ac01d
Author: Kelven Yang <[email protected]>
Authored: Mon Aug 27 10:39:49 2012 -0700
Committer: Kelven Yang <[email protected]>
Committed: Mon Aug 27 10:39:49 2012 -0700

----------------------------------------------------------------------
 .../com/cloud/consoleproxy/AjaxFIFOImageCache.java |   39 ++++---
 .../consoleproxy/ConsoleProxyAjaxImageHandler.java |   85 +++++++++++----
 .../src/com/cloud/servlet/ConsoleProxyServlet.java |    5 +-
 3 files changed, 88 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3609e44b/console-proxy/src/com/cloud/consoleproxy/AjaxFIFOImageCache.java
----------------------------------------------------------------------
diff --git a/console-proxy/src/com/cloud/consoleproxy/AjaxFIFOImageCache.java 
b/console-proxy/src/com/cloud/consoleproxy/AjaxFIFOImageCache.java
index c9b5b60..a745d0d 100644
--- a/console-proxy/src/com/cloud/consoleproxy/AjaxFIFOImageCache.java
+++ b/console-proxy/src/com/cloud/consoleproxy/AjaxFIFOImageCache.java
@@ -29,7 +29,7 @@ public class AjaxFIFOImageCache {
        private List<Integer> fifoQueue;
        private Map<Integer, byte[]> cache;
        private int cacheSize;
-       private int nextKey = 1;
+    private int nextKey = 0;
        
        public AjaxFIFOImageCache(int cacheSize) {
                this.cacheSize = cacheSize;
@@ -61,20 +61,23 @@ public class AjaxFIFOImageCache {
                return key;
        }
        
-       public synchronized byte[] getImage(int key) {
-               if(cache.containsKey(key)) {
-                       if(s_logger.isTraceEnabled())
-                               s_logger.trace("Retrieve image from cache, key: 
" + key);
-                       
-                       return cache.get(key);
-               }
-               
-               if(s_logger.isTraceEnabled())
-                       s_logger.trace("Image is no long in cache, key: " + 
key);
-               return null;
-       }
-       
-       public synchronized int getNextKey() {
-               return nextKey++;
-       }
-}
+    public synchronized byte[] getImage(int key) {
+        if (key == 0) {
+            key = nextKey;
+        }
+        if (cache.containsKey(key)) {
+            if (s_logger.isTraceEnabled())
+                s_logger.trace("Retrieve image from cache, key: " + key);
+
+            return cache.get(key);
+        }
+
+        if (s_logger.isTraceEnabled())
+            s_logger.trace("Image is no long in cache, key: " + key);
+        return null;
+    }
+
+    public synchronized int getNextKey() {
+        return ++nextKey;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3609e44b/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java
----------------------------------------------------------------------
diff --git 
a/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java 
b/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java
index 1fdda2e..9c00948 100644
--- a/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java
+++ b/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java
@@ -16,6 +16,10 @@
 // under the License.
 package com.cloud.consoleproxy;
 
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Map;
@@ -65,7 +69,14 @@ public class ConsoleProxyAjaxImageHandler implements 
HttpHandler {
                String tag = queryMap.get("tag");
                String ticket = queryMap.get("ticket");
                String keyStr = queryMap.get("key");
-               int key = 0;
+               String console_url = queryMap.get("consoleurl");
+               String console_host_session = queryMap.get("sessionref");
+                String w = queryMap.get("w");          
+                String h = queryMap.get("h");
+               
+                int key = 0;
+                int width = 144;
+                int height = 110;
                
                if(tag == null)
                        tag = "";
@@ -81,9 +92,16 @@ public class ConsoleProxyAjaxImageHandler implements 
HttpHandler {
                        throw new IllegalArgumentException(e);
                }
                
-               try {
-                       key = Integer.parseInt(keyStr);
-               } catch (NumberFormatException e) {
+               try {
+                    if (keyStr != null)
+                       key = Integer.parseInt(keyStr);
+                    if(null != w)
+                       width = Integer.parseInt(w);
+
+                    if(null != h)
+                       height = Integer.parseInt(h);
+
+             } catch (NumberFormatException e) {
                        s_logger.warn("Invalid numeric parameter in query 
string: " + keyStr);
                        throw new IllegalArgumentException(e);
                }
@@ -94,23 +112,48 @@ public class ConsoleProxyAjaxImageHandler implements 
HttpHandler {
                param.setClientHostPassword(sid);
                param.setClientTag(tag);
                param.setTicket(ticket);
-               ConsoleProxyClient viewer = ConsoleProxy.getVncViewer(param);
-               byte[] img = viewer.getAjaxImageCache().getImage(key);
-               if(img != null) {
-                       Headers hds = t.getResponseHeaders();
-                       hds.set("Content-Type", "image/jpeg");
-                       t.sendResponseHeaders(200, img.length);
-                       
-                       OutputStream os = t.getResponseBody();
-                       try {
-                               os.write(img, 0, img.length);
-                       } finally {
-                               os.close();
-                       }
-               } else {
-                       if(s_logger.isInfoEnabled())
-                               s_logger.info("Image has already been swept 
out, key: " + key);
-                       t.sendResponseHeaders(404, -1);
+               param.setClientTunnelUrl(console_url);
+               param.setClientTunnelSession(console_host_session);
+
+               ConsoleProxyClient viewer = ConsoleProxy.getVncViewer(param);
+
+               if (key == 0) {
+                       Image scaledImage = viewer.getClientScaledImage(width, 
height);
+                       BufferedImage bufferedImage = new BufferedImage(width, 
height,
+                                       BufferedImage.TYPE_3BYTE_BGR);
+                       Graphics2D bufImageGraphics = 
bufferedImage.createGraphics();
+                       bufImageGraphics.drawImage(scaledImage, 0, 0, null);
+                       ByteArrayOutputStream bos = new 
ByteArrayOutputStream(8196);
+                       javax.imageio.ImageIO.write(bufferedImage, "jpg", bos);
+                       byte[] bs = bos.toByteArray();
+                       Headers hds = t.getResponseHeaders();
+                       hds.set("Content-Type", "image/jpeg");
+                       hds.set("Cache-Control", "no-cache");
+                       hds.set("Cache-Control", "no-store");
+                       t.sendResponseHeaders(200, bs.length);
+                       OutputStream os = t.getResponseBody();
+                       os.write(bs);
+                       os.close();
+               } else {
+                       AjaxFIFOImageCache imageCache = 
viewer.getAjaxImageCache();
+                       byte[] img = imageCache.getImage(key);
+       
+                       if(img != null) {
+                               Headers hds = t.getResponseHeaders();
+                               hds.set("Content-Type", "image/jpeg");
+                               t.sendResponseHeaders(200, img.length);
+                               
+                               OutputStream os = t.getResponseBody();
+                               try {
+                                       os.write(img, 0, img.length);
+                               } finally {
+                                       os.close();
+                               }
+                       } else {
+                               if(s_logger.isInfoEnabled())
+                                       s_logger.info("Image has already been 
swept out, key: " + key);
+                               t.sendResponseHeaders(404, -1);
+                       }
                }
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3609e44b/server/src/com/cloud/servlet/ConsoleProxyServlet.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/servlet/ConsoleProxyServlet.java 
b/server/src/com/cloud/servlet/ConsoleProxyServlet.java
index a8519fe..7f073f1 100644
--- a/server/src/com/cloud/servlet/ConsoleProxyServlet.java
+++ b/server/src/com/cloud/servlet/ConsoleProxyServlet.java
@@ -336,8 +336,9 @@ public class ConsoleProxyServlet extends HttpServlet {
             param.setClientTunnelSession(parsedHostInfo.third());
         }
 
-        sb.append("/ajaximg?token=" + 
encryptor.encryptObject(ConsoleProxyClientParam.class, param));
-        sb.append("&w=").append(w).append("&h=").append(h);
+        sb.append("/ajaximg?token="
+                + encryptor.encryptObject(ConsoleProxyClientParam.class, 
param));
+        sb.append("&w=").append(w).append("&h=").append(h).append("&key=0");
 
         if(s_logger.isDebugEnabled()) {
             s_logger.debug("Compose thumbnail url: " + sb.toString());

Reply via email to