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
>
>