I am in favor of the latter; have each Reader send automatic "ack"s by default, with the optional parameter in the constructors for disabling the behavior.
-- Frode On Thu, May 18, 2017 at 12:17 PM, Mike Jumper <[email protected]> wrote: > Hi all, > > As Frode pointed out on the user@ list [1], the BlobReader implementation > does not automatically send the initial "ack" required for streams. > Depending on perspective, this may or may not be a bug. At the very least, > it's undocumented. > > The "ack" instruction was not strictly required in the past, but it is now > required at least for file transfer due to the changes made in GUACAMOLE-44 > [2]. > > From the above, it's clear that there are at least two issues with the > current streaming subsystem: > > 1) It is not clearly documented which streams require explicit "ack"s, nor > that it's up to the guacd-side protocol implementation to require (or not > require) these "ack"s, and up to the JavaScript side to know whether to > send "ack"s. > > 2) The *Reader implementations in guacamole-common-js are inconsistent in > whether "ack"s are sent automatically, and that behavior is not documented > either. > > Looking through the readers, the ack behavior is currently as follows: > > ArrayBufferReader - does not send "ack" responses at all > BlobReader - sends "ack" responses for received "blob" instructions, but > does not send an initial "ack" for the start of the stream. > DataURIReader - does not send "ack" responses at all > JSONReader - does not send "ack" responses at all > StringReader - does not send "ack" responses at all > > This protocol-level details of "ack" and the above behavior should at least > be documented, but given that sending "ack" doesn't hurt anything when not > required, I wonder if perhaps it would be better to simply have each > *Reader send automatic "ack"s by default, with an optional parameter in the > constructors for disabling that behavior. > > Thoughts? > > - Mike > > [1] > https://lists.apache.org/thread.html/f7c733f61f6fefb3ba23a14bf9e3f6775e665789e868bf3b9d7300d4@%3Cuser.guacamole.apache.org%3E > [2] https://issues.apache.org/jira/browse/GUACAMOLE-44 > > ---------- Forwarded message ---------- > From: Frode Langelo <[email protected]> > Date: Thu, May 18, 2017 at 9:05 AM > Subject: Re: We have a problem in our guacamole client implementation such > that we are not receiving onend notification when trying to read the > guacamole stream (So printing is not working) > To: [email protected] > > > odonya; > > Can you try sending an ack "OK" after creating the BlobReader and adding > the event handler: > > guac.onfile = function clientFileReceived(stream, mimetype, filename) { > //this is called > var blobReader = new Guacamole.BlobReader(stream, mimetype); > blobReader.onend = function onend() { > //this is never called > } > // Send ack or the download won't start > stream.sendAck("OK", 0x0000); > } > > > --Frode > > > > On Wed, May 17, 2017 at 11:13 PM, Mike Jumper <[email protected]> > wrote: > >> The only thing that would cause "onend" to not be invoked is if the "end" >> instruction for the stream is never sent (which is unlikely). If you can >> confirm that normal Guacamole downloads the file as expected, then >> something else is likely happening here. >> >> Are you positive it's not being invoked? Could there me some other reason >> that the functionality within your onend handler is not behaving as >> expected? >> >> Any errors in the browser JavaScript console? >> >> - Mike >> >> >> >> On May 17, 2017 11:14, "odonya" <[email protected]> wrote: >> >> We have a problem in our guacamole client implementation such that we are >> not >> receiving onend notification when trying to read the guacamole stream. >> >> Our code snippet looks like this >> >> guac = new Guacamole.Client( >> tunnel >> ); >> >> This is how we are listening on onfile when we are trying to >> print file. >> >> >> guac.onfile = function clientFileReceived(stream, mimetype, >> filename) { >> //this is called >> var blobReader = new Guacamole.BlobReader(stream, mimetype); >> blobReader.onend = function onend() { >> //this is never called >> } >> } >> >> >> My question is why is onend not being called? >> I am using 0.9.12-incubating version of guacamole. >> >> >> >> >> -- >> View this message in context: http://apache-guacamole-incuba >> ting-users.2363388.n4.nabble.com/We-have-a-problem-in-our-gu >> acamole-client-implementation-such-that-we-are-not-receiving >> -onend-notifi-tp974.html >> Sent from the Apache Guacamole (incubating) - Users mailing list archive >> at Nabble.com. >> >> >>
