Hi MIke,

As suggested by you, I have implemented *SIMPLE PROOF-OF-CONCEPT
*applications
which  stream over separate and differently-named static channels within
the RDP session.

*STATIC VIRTUAL CHANNEL NAME* : vEcho

*PURPOSE *: Continuously sending data [ Hello ]   from Remote to Local
Browser [ Guacamole Client ]  and receiving same  data [ Hello ] from Local
Browser  [ Guacamole Client ]  to Remote.

RESULT : *It stops sending data after few seconds* whereas It is working
fine in *mstsc and *other HTML5 solutions.


*Guacamole Client Implementation :*

client.onpipe = function(input_stream, mimetype, name) {
>
> if (name == "*vEcho*"  ){
>
> var reader = new Guacamole.ArrayBufferReader(input_stream);
> reader.ondata = function(buffer) {
> var rdpdata = new Uint8Array(buffer);
> var b64encoded = btoa(String.fromCharCode.apply(null, rdpdata));
> console.log("Receiving Data :: Name of the Channel is : - ",name);
> console.log("Data is : - ",b64encoded);
> var output_stream = client.createPipeStream(mimetype, name);
> var writer = new Guacamole.ArrayBufferWriter(output_stream);
> console.log("Sending Data :: Name of the Channel is : - ",name);
> console.log("Data is : - ",rdpdata.buffer);
> *writer.sendData*(rdpdata.buffer);
> };
>
> }
>
>
> };




*Console Logs of the Browser are as follows :-*


Receiving Data :: Name of the Channel is : -  vEcho
> guacamole.js:29322
> Data is : -  SGVsbG8=
> guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho
> guacamole.js:29326
> Data is : -  ArrayBuffer(5) {}byteLength: (...)__proto__: ArrayBuffer
>  guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {}byteLength: (...)__proto__: ArrayBuffer
> guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325
> Sending Data :: Name of the Channel is : -  vEcho guacamole.js:29326
> Data is : -  ArrayBuffer(5) {} guacamole.js:29321
> Receiving Data :: Name of the Channel is : -  vEcho guacamole.js:29322
> Data is : -  SGVsbG8= guacamole.js:29325


*After that it fails sending and receiving data.*

Please find the attachment of Exe files*  :  * *Echo_EXE_files.zip  [
contains 32-bit and 64-bit exe which has to be run on server side i.e.
Remote Server   ] *

*DropBox Link to download the above ZIP file  :
**https://www.dropbox.com/s/sgjcrn4sgcab481/Echo_EXE_files.zip?dl=0
<https://www.dropbox.com/s/sgjcrn4sgcab481/Echo_EXE_files.zip?dl=0>*

Please find the attachment of Echo Project files*  :   vEcho.zip  [
contains the following files ]*


*DropBox Link to download the above ZIP file  :  *
*https://www.dropbox.com/s/sgjcrn4sgcab481/Echo_EXE_files.zip?dl=0
<https://www.dropbox.com/s/sgjcrn4sgcab481/Echo_EXE_files.zip?dl=0>*

*1. Directory  **Echo **--  Project Name*
*2. Echo.sln  --   Main Solution file *
*3. Directory  **Echo/Echo* *-- Server Side Module*
*4. Directory  Echo/EchoClient  --- Client Plugin*

*To view logs on Server-Side  use debugview*


STEPS to reproduce issue are as follows :-

1. Download  *Echo_EXE_files.zip* from the above link  and Copy the exe
file in the Remote Server
2. Copy the below Javascript code and copy in guacamole.js

*Guacamole Client Implementation :*

client.onpipe = function(input_stream, mimetype, name) {
>
> if (name == "*vEcho*"  ){
>
> var reader = new Guacamole.ArrayBufferReader(input_stream);
> reader.ondata = function(buffer) {
> var rdpdata = new Uint8Array(buffer);
> var b64encoded = btoa(String.fromCharCode.apply(null, rdpdata));
> console.log("Receiving Data :: Name of the Channel is : - ",name);
> console.log("Data is : - ",b64encoded);
> var output_stream = client.createPipeStream(mimetype, name);
> var writer = new Guacamole.ArrayBufferWriter(output_stream);
> console.log("Sending Data :: Name of the Channel is : - ",name);
> console.log("Data is : - ",rdpdata.buffer);
> *writer.sendData*(rdpdata.buffer);
> };
>
> }
>
>
> };


3. Take the RDP  of the Remote Server and run the exe file .

Please help me to resolve the above issue and let me know if I need to file
a bug or something in JIRA.

Thanks and Regards,
Amarjeet Singh





On Wed, Feb 7, 2018 at 12:15 PM, Mike Jumper <[email protected]>
wrote:

> On Tue, Feb 6, 2018 at 10:12 PM, Amarjeet Singh <[email protected]>
> wrote:
>
>> @Mike :-
>>
>> *I checked and came to know that the above error is in if else condition
>> which will always come for every static virtual channel.   [ Thanks Mike
>> ] *
>>
>> Point 1 : -
>>
>>   Eltima is sending and receiving data continuously ( within a second
>> there are two to three calls ) which I can see on the console.log which
>> means guacamole is sending and receiving data continuously.
>>
>> Point 2 :-
>>   Other static channels ( hyprint ) are not working when I include Eltima
>> static virtual channel but if I exclude Eltima other static channel works
>> in Guacamole.
>>
>> Point 3:-
>>  In other RDP client all the static virtual channel  ( Eltima and Hyprint
>> ) working fine.
>>
>> Is Eltima blocking other Static Virtual channels because of sending and
>> receiving data continuously ( two to three calls in a seconds ) ?
>>
>>
> I can't speak to what the software running within your remote desktop
> might be doing, but Guacamole does support arbitrarily-many static virtual
> channels within RDP. Multiple pipe streams will be opened and handled at
> the same time.
>
> There are no errors in the GUACD ?
>>
>>
> There are no errors in the way guacd is handling things here, with the
> exception of the incorrect log level. If you suspect this might not be the
> case, the first thing for you to do would be to eliminate Eltima as the
> next most likely cause. I would suggest implementing two simple
> proof-of-concept applications which stream over separate and
> differently-named static channels within the RDP session. If this works,
> then you have confirmed the problem must either be within Eltima or within
> the RDP server.
>
> - Mike
>
>

Reply via email to