From de680eabb3f56bb8d4b11f9c89dfa73a98197c20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Fri, 14 Dec 2012 11:47:39 +0000 Subject: [PATCH] Adding notification of ip/hostname of client (so we can get "source" of the conecction inside user services) --- nxtransport/jar/nxtransport.jar | Bin 24418 -> 27097 bytes .../src/es/virtualcable/nx/LinuxApplet.java | 7 +- .../src/es/virtualcable/nx/MacApplet.java | 7 +- .../src/es/virtualcable/nx/WindowsApplet.java | 7 +- nxtransport/src/es/virtualcable/nx/util.java | 98 ++++++++++++++++++ 5 files changed, 113 insertions(+), 6 deletions(-) create mode 100644 nxtransport/src/es/virtualcable/nx/util.java diff --git a/nxtransport/jar/nxtransport.jar b/nxtransport/jar/nxtransport.jar index c859f30cdcaefc2451c74939737fae6e389423d0..8d3496acb7cd0a55a22e312d402877883c522077 100644 GIT binary patch delta 21202 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 XI&BuW3xhx^;>$%G#j!441A+bp#qE{W diff --git a/nxtransport/src/es/virtualcable/nx/LinuxApplet.java b/nxtransport/src/es/virtualcable/nx/LinuxApplet.java index d85e504b..d57f6426 100644 --- a/nxtransport/src/es/virtualcable/nx/LinuxApplet.java +++ b/nxtransport/src/es/virtualcable/nx/LinuxApplet.java @@ -13,7 +13,7 @@ public class LinuxApplet implements OsApplet { private Hashtable params; private String tmpDir = ""; - // private String baseUrl = ""; + private String baseUrl = ""; private String nxFileName = ""; private String scrWidth; private String scrHeight; @@ -26,6 +26,9 @@ public class LinuxApplet implements OsApplet { String height = params.get("height"); boolean fullScreen = false; + // Notifies to broker the hostname/ip + util.notifyHostname(baseUrl, params.get("is")); + if( width.equals("-1")) { width = scrWidth; @@ -96,7 +99,7 @@ public class LinuxApplet implements OsApplet { public void setParameters(Hashtable parameters, String urlBase, int screenWidth, int screenHeight) { params = parameters; - // baseUrl = urlBase; + baseUrl = urlBase; scrWidth = Integer.toString(screenWidth); scrHeight = Integer.toString(screenHeight); } diff --git a/nxtransport/src/es/virtualcable/nx/MacApplet.java b/nxtransport/src/es/virtualcable/nx/MacApplet.java index 67891f36..36ce7092 100644 --- a/nxtransport/src/es/virtualcable/nx/MacApplet.java +++ b/nxtransport/src/es/virtualcable/nx/MacApplet.java @@ -13,7 +13,7 @@ public class MacApplet implements OsApplet { private Hashtable params; private String tmpDir = ""; - // private String baseUrl = ""; + private String baseUrl = ""; private String nxFileName = ""; private String scrWidth; private String scrHeight; @@ -26,6 +26,9 @@ public class MacApplet implements OsApplet { String height = params.get("height"); boolean fullScreen = false; + // Notifies to broker the hostname/ip + util.notifyHostname(baseUrl, params.get("is")); + if( width.equals("-1")) { width = scrWidth; @@ -96,7 +99,7 @@ public class MacApplet implements OsApplet { public void setParameters(Hashtable parameters, String urlBase, int screenWidth, int screenHeight) { params = parameters; - // baseUrl = urlBase; + baseUrl = urlBase; scrWidth = Integer.toString(screenWidth); scrHeight = Integer.toString(screenHeight); } diff --git a/nxtransport/src/es/virtualcable/nx/WindowsApplet.java b/nxtransport/src/es/virtualcable/nx/WindowsApplet.java index 2588cea2..75cf8bd6 100644 --- a/nxtransport/src/es/virtualcable/nx/WindowsApplet.java +++ b/nxtransport/src/es/virtualcable/nx/WindowsApplet.java @@ -11,7 +11,7 @@ public class WindowsApplet implements OsApplet { private Hashtable params; private String tmpDir = ""; - // private String baseUrl = ""; + private String baseUrl = ""; private String nxFileName = ""; private String scrWidth; private String scrHeight; @@ -19,7 +19,7 @@ public class WindowsApplet implements OsApplet { public void setParameters(Hashtable parameters, String urlBase, int screenWidth, int screenHeight) { params = parameters; - // baseUrl = urlBase; + baseUrl = urlBase; scrWidth = Integer.toString(screenWidth); scrHeight = Integer.toString(screenHeight); } @@ -34,6 +34,9 @@ public class WindowsApplet implements OsApplet { String height = params.get("height"); boolean fullScreen = false; + // Notifies to broker the hostname/ip + util.notifyHostname(baseUrl, params.get("is")); + if( width.equals("-1")) { width = scrWidth; diff --git a/nxtransport/src/es/virtualcable/nx/util.java b/nxtransport/src/es/virtualcable/nx/util.java new file mode 100644 index 00000000..83d5ed56 --- /dev/null +++ b/nxtransport/src/es/virtualcable/nx/util.java @@ -0,0 +1,98 @@ +package es.virtualcable.nx; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URLEncoder; + +public class util { + + public static boolean download(String baseUrl, String id, String outputFileName) + { + try { + java.net.URL u = new java.net.URL(baseUrl + id); + java.net.URLConnection uc = u.openConnection(); + String contentType = uc.getContentType(); + int contentLength = uc.getContentLength(); + if (contentType.startsWith("text/") || contentLength == -1) { + throw new IOException("This is not a binary file."); + } + InputStream raw = uc.getInputStream(); + InputStream in = new BufferedInputStream(raw); + byte[] data = new byte[contentLength]; + int bytesRead = 0; + int offset = 0; + while (offset < contentLength) { + bytesRead = in.read(data, offset, data.length - offset); + if (bytesRead == -1) + break; + offset += bytesRead; + } + in.close(); + + if (offset != contentLength) { + throw new IOException("Only read " + offset + " bytes; Expected " + contentLength + " bytes"); + } + + java.io.FileOutputStream out = new java.io.FileOutputStream(outputFileName); + out.write(data); + out.flush(); + out.close(); + + } catch(Exception e) { + System.out.println("Unable to download file, already present or network error? " + e.getMessage()); + return false; + } + return true; + } + + + public static String getUrl(String url) { + try { + java.net.URL u = new java.net.URL(url); + BufferedReader in = new BufferedReader(new InputStreamReader(u.openStream())); + StringBuilder data = new StringBuilder(); + + String inputLine; + while ((inputLine = in.readLine()) != null) { + data.append(inputLine); + data.append("\n"); + } + + in.close(); + return data.toString(); + + } catch(Exception e) { + System.out.println("Unable to get url. Network error? " + e.getMessage()); + return null; + } + + } + + @SuppressWarnings("deprecation") + public static void notifyHostname(String baseUrl, String serviceId) { + String[] urlComponents = baseUrl.split("/"); + String hostname; + String ip; + String url=""; + + try { + hostname = java.net.InetAddress.getLocalHost().getHostName(); + ip = java.net.InetAddress.getLocalHost().getHostAddress(); + } catch(Exception e) { + hostname = "unknown"; + ip = "0.0.0.0"; + } + + try { + // An url is "http[s]://.....:/, + url = urlComponents[0] + "//" + urlComponents[2] + "/sernotify/" + serviceId + "/hostname?hostname="+URLEncoder.encode(hostname)+"&ip="+URLEncoder.encode(ip); + getUrl(url); + } catch(Exception e) { + System.out.println("Unable to get url? " + e.getMessage()); + } + } + +}