Could you upload the source for what you're working with somewhere that you
could link to (GitHub, etc.)? The code provided is extremely difficult to
read.

- Mike

On Dec 28, 2017 22:30, "Go Target" <wadeli...@gmail.com> wrote:

> Dear :
>
> I created a lab. I am using sample code :
>
> public class DemoServlet extends GuacamoleHTTPTunnelServlet {
> private static final long serialVersionUID = 1L;
> private final Logger logger = LoggerFactory.getLogger(DemoServlet.class);
> public static SimpleGuacamoleTunnel tunnel = null;
> @Override
> protected GuacamoleTunnel doConnect(HttpServletRequest request) throws
> GuacamoleException{
> try {
> if( tunnel == null) {
> tunnel = inner();
> }
> return tunnel;
> }catch(GuacamoleException e) {
> logger.error(e.getMessage(), e);
> throw e;
> }catch(Exception e) {
> logger.error(e.getMessage(), e);
> throw e;
> }
> }
> private static SimpleGuacamoleTunnel inner() throws GuacamoleException{
> GuacamoleConfiguration config = new GuacamoleConfiguration();
> config.setProtocol("rdp");
> config.setParameter("hostname", "10.200.200.199");
> config.setParameter("port", "3389");
> config.setParameter("security", "nla");
> config.setParameter("username", "admin");
> config.setParameter("password", "P@ssw0rd");
> config.setParameter("ignore-cert", "true");
> config.setParameter("enable-drive", "true");
> config.setParameter("drive-path", "/home/guacdshare");
> config.setParameter("recording-path", "/anchor_dvr");
> config.setParameter("create-recording-path", "true");
> config.setParameter("recording-name", "test.guac");
> InetGuacamoleSocket inet_socket = new InetGuacamoleSocket("10.200.
> 200.200",
> 4822);
> GuacamoleSocket socket = new ConfiguredGuacamoleSocket(
> inet_socket,config);
> return new SimpleGuacamoleTunnel(socket);
> }
> }
>
>
> It is ok.  I can connet to target from browser.
>
>
> Next, I try to extends【GuacamoleWebSocketTunnelEndpoint】
>
> @ServerEndpoint ("/test_Tunnel")
> public class DemoEndPoint extends GuacamoleWebSocketTunnelEndpoint {
> @Override
> protected GuacamoleTunnel createTunnel(Session arg0, EndpointConfig arg1)
> throws GuacamoleException {
> *GuacamoleConfiguration target_config =
> Help.createGuacamoleConfiguration();*
> * GuacamoleClientInformation browser_config = **Help*
> *.createGuacamoleClientInformation();*
> * GuacamoleSocket gua_server_socket = **Help**.
> createInetGuacamoleSocket();*
> * ConfiguredGuacamoleSocket socket = new ConfiguredGuacamoleSocket(
> gua_server_socket, target_config, browser_config);*
> * GuacamoleTunnel tunnel = **Help**.assignGuacamoleTunnel(socket);*
> * return tunnel;*
> }
> }
>
>
>
> public class *Help*{
> public static GuacamoleConfiguration *createGuacamoleConfiguration*(){
> GuacamoleConfiguration config = new GuacamoleConfiguration();
> config.setParameter("port", "3389");
> config.setParameter("username", "admin");
> config.setParameter("hostname", "10.200.200.199");
> config.setParameter("ignore-cert", "true");
> config.setParameter("security", "nla");
> config.setParameter("password", "P@ssw0rd");
> config.setProtocol("rdp");
> return config;
> }
> public static GuacamoleClientInformation *createGuacamoleClientInformati
> on*
> (){
>         GuacamoleClientInformation info = new GuacamoleClientInformation();
>         info.setOptimalScreenWidth(800);
>         info.setOptimalScreenHeight(600);
>         info.setOptimalResolution(72);
>         return info;
>     }
> public static InetGuacamoleSocket *createInetGuacamoleSocket*() throws
> GuacamoleException{
>     return new InetGuacamoleSocket("10.200.200.200", 4822);
>
>     }
> public static GuacamoleTunnel *assignGuacamoleTunnel*(final GuacamoleSocket
> socket) {
>         return new AbstractGuacamoleTunnel() {
>             @Override
>             public GuacamoleSocket getSocket() {
>                 return socket;
>             }
>
>             @Override
>             public UUID getUUID() {
>             return UUID.randomUUID();
>             }
>         };
>     }
> }
>
>
> But I get a error, So i add logger at [ *GuacamoleWebSocketTunnelEndpoi
> nt*]
>
> @Override
>     @OnOpen
>     public void onOpen(final Session session, EndpointConfig config) {
>     logger.error("into onOpen");
>         try {
>
>             // Get tunnel
>             tunnel = createTunnel(session, config);
>             if (tunnel == null) {
>                 closeConnection(session,
> GuacamoleStatus.RESOURCE_NOT_FOUND);
>                 return;
>             }
>
>         }
>         catch (GuacamoleException e) {
>             logger.error("Creation of WebSocket tunnel to guacd failed:
> {}", e.getMessage());
>             logger.debug("Error connecting WebSocket tunnel.", e);
>             closeConnection(session, e.getStatus());
>             return;
>         }
>
>         // Manually register message handler
>         session.addMessageHandler(new MessageHandler.Whole<String>() {
>
>             @Override
>             public void onMessage(String message) {
>                 GuacamoleWebSocketTunnelEndpoint.this.onMessage(message);
>             }
>
>         });
>
>         // Prepare read transfer thread
>         Thread readThread = new Thread() {
>
>             /**
>              * Remote (client) side of this connection
>              */
>             private final RemoteEndpoint.Basic remote =
> session.getBasicRemote();
>
>             @Override
>             public void run() {
>             logger.error("into run");
>                 StringBuilder buffer = new StringBuilder(BUFFER_SIZE);
>                 GuacamoleReader reader = tunnel.acquireReader();
>                 char[] readMessage;
>
>                 try {
>                 logger.error("point 1");
>
>                     String text = null;
>                     {
>                 logger.error("point 1----   a");
>                 String uuid = tunnel.getUUID().toString();
>
>                 logger.error("point 1----   b");
>                     String code = GuacamoleTunnel.INTERNAL_DATA_OPCODE;
>
>                     logger.error("point 1----   c");
>                     GuacamoleInstruction lab = new
> GuacamoleInstruction(code,  uuid);
>
>                     logger.error("point 1----   d");
>                     text = lab.toString();
>
>                     logger.error("point 1----   e");
>                     }
>                     logger.error("remote class : {}", remote.getClass());
>                     logger.error("text : {}", text);
>                     //tunnel close on this line.
>                     remote.sendText(text);
>                     logger.error("point 2");
>                     try {
>
>                     logger.error("point 3");
>                         // Attempt to read
>                         while ((readMessage = reader.read()) != null) {
>
>                             // Buffer message
>                             buffer.append(readMessage);
>
>                             // Flush if we expect to wait or buffer is
> getting full
>                             if (!reader.available() || buffer.length() >=
> BUFFER_SIZE) {
>                                 remote.sendText(buffer.toString());
>                                 buffer.setLength(0);
>                             }
>
>                         }
>                         logger.error("point 4");
>                         // No more data
>                         closeConnection(session, GuacamoleStatus.SUCCESS);
>                         logger.error("point 5");
>                     }
>
>                     // Catch any thrown guacamole exception and attempt
>                     // to pass within the WebSocket connection, logging
>                     // each error appropriately.
>                     catch (GuacamoleClientException e) {
>                         logger.error("WebSocket connection terminated: {}",
> e.getMessage());
>                         logger.error("WebSocket connection terminated due
> to client error.", e);
>                         closeConnection(session, e.getStatus());
>                     }
>                     catch (GuacamoleConnectionClosedException e) {
>                         logger.error("Connection to guacd closed.", e);
>                         closeConnection(session, GuacamoleStatus.SUCCESS);
>                     }
>                     catch (GuacamoleException e) {
>                         logger.error("Connection to guacd terminated
> abnormally: {}", e.getMessage());
>                         logger.error("Internal error during connection to
> guacd.", e);
>                         closeConnection(session, e.getStatus());
>                     }
>                     logger.error("point 6");
>                 }
>                 catch (IOException e) {
>                     logger.error("I/O error prevents further reads.", e);
>                     closeConnection(session, GuacamoleStatus.SERVER_ERROR);
>                 }catch (Exception e) {
>                     logger.error(e.getMessage(), e);
>                     closeConnection(session, GuacamoleStatus.SERVER_ERROR);
>                 }finally {
>                 logger.error("out run");
>                 }
>
>             }
>
>         };
>
>         readThread.start();
>
>     }
>
>
> *Logger content is : *
>
> [11:37:14.552][http-nio-443-exec-7][DEBUG][org.apache.guacamole.net.
> InetGuacamoleSocket:90]【Connecting
> to guacd at 10.200.200.200:4822.】
> [11:37:14.571][http-nio-443-exec-7][ERROR][org.apache.guacamole.protocol.
> ConfiguredGuacamoleSocket:135]【無connection
> ID, 走getProtocal()路線】
> [11:37:14.571][http-nio-443-exec-7][ERROR][org.apache.guacamole.protocol.
> ConfiguredGuacamoleSocket:141]【最後select_arg的結果
> : rdp】
> [11:37:14.585][http-nio-443-exec-7][ERROR][org.apache.guacamole.protocol.
> ConfiguredGuacamoleSocket:199]【arg_values
> : [10.200.200.199, 3389, , admin, P@ssw0rd, , , , , , , , , , , , , , nla,
> true, , , , , , , , , , , , , , , , , , , , , , , , , , , , ]】
> [11:37:14.614][http-nio-443-exec-7][ERROR][org.apache.guacamole.protocol.
> ConfiguredGuacamoleSocket:211]【id
> : $f99d685d-ac59-4bd2-b06f-48bce3a3c66b】
> [11:37:14.614][http-nio-443-exec-7][ERROR][help.Help$1:54]【into
> AbstractGuacamoleTunnel】
> [11:37:14.630][Thread-6][ERROR][org.apache.guacamole.websocket.
> GuacamoleWebSocketTunnelEndpoint:144]【into
> run】
> [11:37:14.630][Thread-6][ERROR][help.Help$1:68]【into acquireReader】
> [11:37:14.630][Thread-6][ERROR][org.apache.guacamole.websocket.
> GuacamoleWebSocketTunnelEndpoint:150]【point
> 1】
> [11:37:14.630][Thread-6][ERROR][org.apache.guacamole.websocket.
> GuacamoleWebSocketTunnelEndpoint:154]【point
> 1----   a】
> [11:37:14.630][Thread-6][ERROR][help.Help:59]【into getUUID】
> [11:37:14.645][Thread-6][ERROR][org.apache.guacamole.websocket.
> GuacamoleWebSocketTunnelEndpoint:156]【point
> 1----   b】
> [11:37:14.645][Thread-6][ERROR][org.apache.guacamole.websocket.
> GuacamoleWebSocketTunnelEndpoint:158]【point
> 1----   c】
> [11:37:14.645][Thread-6][ERROR][org.apache.guacamole.websocket.
> GuacamoleWebSocketTunnelEndpoint:160]【point
> 1----   d】
> [11:37:14.645][Thread-6][ERROR][org.apache.guacamole.websocket.
> GuacamoleWebSocketTunnelEndpoint:162]【point
> 1----   e】
> [11:37:14.645][Thread-6][ERROR][org.apache.guacamole.websocket.
> GuacamoleWebSocketTunnelEndpoint:166]【remote
> class : class org.apache.tomcat.websocket.WsRemoteEndpointBasic】
> [11:37:14.645][Thread-6][ERROR][org.apache.guacamole.websocket.
> GuacamoleWebSocketTunnelEndpoint:169]【text
> : 0.,36.4045a0fa-c415-473f-938a-ba0b116b86c1;】
> [11:37:14.645][http-nio-443-exec-4][ERROR][org.apache.
> guacamole.websocket.*GuacamoleWebSocketTunnelEndpoint:261]【into
> onClose】*
> [11:37:14.661][Thread-6][ERROR][org.apache.guacamole.websocket.
> GuacamoleWebSocketTunnelEndpoint:220]【Deflater
> has been closed】
> java.lang.NullPointerException: Deflater has been closed
> at java.util.zip.Deflater.ensureOpen(Unknown Source) ~[na:1.7.0_79]
> at java.util.zip.Deflater.deflate(Unknown Source) ~[na:1.7.0_79]
> at
> org.apache.tomcat.websocket.PerMessageDeflate.sendMessagePart(
> PerMessageDeflate.java:345)
> ~[tomcat-websocket.jar:8.0.36]
> at
> org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessage(
> WsRemoteEndpointImplBase.java:300)
> ~[tomcat-websocket.jar:8.0.36]
> at
> org.apache.tomcat.websocket.WsRemoteEndpointImplBase$
> TextMessageSendHandler.write(WsRemoteEndpointImplBase.java:759)
> ~[tomcat-websocket.jar:8.0.36]
> at
> org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendPartialString(
> WsRemoteEndpointImplBase.java:252)
> ~[tomcat-websocket.jar:8.0.36]
> at
> org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendString(
> WsRemoteEndpointImplBase.java:195)
> ~[tomcat-websocket.jar:8.0.36]
> at
> org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(
> WsRemoteEndpointBasic.java:37)
> ~[tomcat-websocket.jar:8.0.36]
> at
> org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint$2.run(
> GuacamoleWebSocketTunnelEndpoint.java:172)
> ~[guacamole-common-0.9.13-incubating.jar:na]
> [11:37:14.661][Thread-6][ERROR][org.apache.guacamole.websocket.
> GuacamoleWebSocketTunnelEndpoint:76]【into
> closeConnection】
> [11:37:14.661][Thread-6][ERROR][org.apache.guacamole.websocket.
> GuacamoleWebSocketTunnelEndpoint:223]【out
> run】
>
>
> I don't know why tunnel run close method....
>
>
> I need help . thanks
>
>
>
> On Browser Side JavaScript file (which is named lab.js)
>
>
>
> (function(window){
> "use strict";
> window.lab = {
> save : function(key, API){
> this[key] = API;
> },
> exports : function(key){
> return this[key];
> }
> };
> }(window));
>
>
> (function(window, alert, Guacamole, lab){
> "use strict";
> function create_gua_client( path, place ){
> var websocket_tunnel = new Guacamole.WebSocketTunnel(path);
> var guac_client = new Guacamole.Client(websocket_tunnel);
> var display = document.getElementById( place );
>
> display.appendChild(guac_client.getDisplay().getElement());
>
> guac_client.onerror = function(error) {
> alert(error);
> };
>
> window.onunload = function() {
> guac_client.disconnect();
> };
>
> return {
> client : guac_client,
> play_element : guac_client.getDisplay().getElement(),
> root_element : display,
> };
> }
>
> lab.save("create_gua_client", create_gua_client);
> }(window, window.alert, window.Guacamole, window.lab));
>
>
> (function(window, Guacamole, lab){
> "use strict";
> function register_mouse( gua_client ){
> var mouse = new
> Guacamole.Mouse(gua_client.client.getDisplay().getElement());
> mouse.onmousedown = mouse.onmouseup = mouse.onmousemove =
> function(mouseState) {
> gua_client.client.sendMouseState(mouseState);
> };
> }
> lab.save("register_mouse", register_mouse);
> }(window, window.Guacamole, window.lab));
>
>
> (function(window, Guacamole, lab){
> "use strict";
> function register_keyboard( gua_client ){
> var keyboard = new Guacamole.Keyboard(document.getElementById("body"));
>
> keyboard.onkeydown = function(keysym) {
> gua_client.client.sendKeyEvent(1, keysym);
> return true;
> };
>
> keyboard.onkeyup = function(keysym) {
> gua_client.client.sendKeyEvent(0, keysym);
> return true;
> };
> }
> lab.save("register_keyboard", register_keyboard);
> }(window, window.Guacamole, window.lab));
>
>
> (function(window, Guacamole, lab){
> "use strict";
> function register_touch_screen( gua_client ){
> var touchScreen = new Guacamole.Mouse.Touchscreen(
> gua_client.play_element);
> touchScreen.onmousedown =
> touchScreen.onmousemove =
> touchScreen.onmouseup = function(mouseState) {
> gua_client.client.sendMouseState(mouseState);
> };
> }
> lab.save("register_touch_screen", register_touch_screen);
> }(window, window.Guacamole, window.lab));
>
>
>
>
> (function(window, $, Guacamole, lab){
> "use strict";
> function register_on_screen_keyboard( gua_client ){
> var keyboard = new Guacamole.OnScreenKeyboard(lab.keyJson);
>
>
> keyboard.onkeydown = function(keysym) {
> gua_client.client.sendKeyEvent(1, keysym);
> return true;
> };
>
> keyboard.onkeyup = function(keysym) {
> gua_client.client.sendKeyEvent(0, keysym);
> return true;
> };
>
>
> $(".osk").bind("blur", function(){
> keyboard.reset();
> });
>
>   $(".osk").append(keyboard.getElement());
>
>   keyboard.resize(600);
>
> }
> lab.save("register_on_screen_keyboard", register_on_screen_keyboard);
> }(window, window.$, window.Guacamole, window.lab));
>
>
> (function(window, Guacamole, lab){
> "use strict";
> function connect( gua_client, query_string ){
> gua_client.client.connect(query_string);
>
> }
> lab.save("connect", connect);
> }(window, window.Guacamole, window.lab));
>
>
> (function(window, Guacamole, lab){
> "use strict";
>
> var create_gua_client = lab.exports("create_gua_client");
> var register_mouse = lab.exports("register_mouse");
> var register_keyboard = lab.exports("register_keyboard");
> var register_touch_screen = lab.exports("register_touch_screen");
> var register_on_screen_keyboard =
> lab.exports("register_on_screen_keyboard");
> var connect = lab.exports("connect");
>
> function start( path, place ){
> var client = create_gua_client(path, place);
> register_mouse(client);
> register_keyboard(client);
> register_touch_screen(client);
> register_on_screen_keyboard(client);
> connect(client, "anQueryString");
> }
> lab.save("start", start);
> }(window, window.Guacamole, window.lab));
>
>
> *Html code is*
>
> <!DOCTYPE HTML>
> <html>
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
> <link rel=stylesheet type="text/css" href="./css/core/guacamole.css">
> <style>
> .resize-sensor {
> height: 100%;
>     width: 100%;
>     position: absolute;
>     left: 0;
>     top: 0;
>     overflow: hidden;
>     border: none;
> }
> </style>
> </head>
> <body id="body">
> <!-- style="width:600px;height:480px;overflow: auto;" -->
> <div style="margin:50px 0 0 50px;">
> <div id="displayPlace" ></div>
> </div>
> <div style="margin:50px 0 0 50px;">
> <div class="osk" style="width:600px;"> </div>
> </div>
> </body>
>
>
> <script type="text/javascript" src="./js/core/all.js"></script>
> <script type="text/javascript"
> src="./js/third/jquery-3.2.1.min.js"></script>
> <script type="text/javascript" src="./js/rd2/lab.js"></script>
> <script type="text/javascript" src="./js/rd2/lab_depend.js"></script>
>
> <script type="text/javascript">
> (function(window, lab){
> var start = lab.exports("start");
> $(function(){
> start("test_Tunnel", "displayPlace");
> });
>
> }(window, window.lab));
> </script>
>
>
> </html>
>
>
>
> Thanks.
>

Reply via email to