Hi, thanks, I'll test next week, no bandwidth today. Going to "fail" seems a bit strange by the way, as we'd want to skip such messages, not fail - but I'm new to the codebase so I could be wrong - I'll test. Thanks again.
regards, krajo On Fri, Jan 22, 2021 at 8:32 AM Armin Novak via FreeRDP-devel < freerdp-devel@lists.sourceforge.net> wrote: > Hi, > > > while this does not fix guacamole sending events too early I´ve created > > https://github.com/FreeRDP/FreeRDP/pull/6742 to just discard such events > before sending (and being noisy about it) > > > regards > > Armin > > On 21.01.21 20:59, George Krajcsovits via FreeRDP-devel wrote: > > Hi, > > > > for now I'll be using this patch to Guacamole, which is ugly AF, but > works > > around the problem: > > > > diff --git a/src/protocols/rdp/input.c b/src/protocols/rdp/input.c > > index cb9bb10e..b221c1ee 100644 > > --- a/src/protocols/rdp/input.c > > +++ b/src/protocols/rdp/input.c > > @@ -33,6 +33,8 @@ > > > > #include <stdlib.h> > > > > +#define CONNECTION_IS_ACTIVE(rdpinstance) > > (*((int*)(rdpinstance->context->rdp))==14) > > + > > int guac_rdp_user_mouse_handler(guac_user* user, int x, int y, int > mask) { > > > > guac_client* client = user->client; > > @@ -52,6 +54,11 @@ int guac_rdp_user_mouse_handler(guac_user* user, int > x, > > int y, int mask) { > > if (rdp_client->recording != NULL) > > guac_common_recording_report_mouse(rdp_client->recording, x, y, > > mask); > > > > + if (!CONNECTION_IS_ACTIVE(rdp_inst)) { > > + rdp_client->mouse_button_mask = mask; > > + goto complete; > > + } > > + > > /* If button mask unchanged, just send move event */ > > if (mask == rdp_client->mouse_button_mask) > > rdp_inst->input->MouseEvent(rdp_inst->input, PTR_FLAGS_MOVE, > x, y); > > @@ -135,8 +142,9 @@ int guac_rdp_user_key_handler(guac_user* user, int > > keysym, int pressed) { > > guac_common_recording_report_key(rdp_client->recording, > > keysym, pressed); > > > > + freerdp* rdp_inst = rdp_client->rdp_inst; > > /* Skip if keyboard not yet ready */ > > - if (rdp_client->keyboard == NULL) > > + if (rdp_client->keyboard == NULL || rdp_inst == NULL || > > !CONNECTION_IS_ACTIVE(rdp_inst)) > > goto complete; > > > > /* Update keysym state */ > > @@ -161,8 +169,10 @@ int guac_rdp_user_size_handler(guac_user* user, int > > width, int height) { > > width = width * settings->resolution / > user->info.optimal_resolution; > > height = height * settings->resolution / > user->info.optimal_resolution; > > > > - /* Send display update */ > > - guac_rdp_disp_set_size(rdp_client->disp, settings, rdp_inst, width, > > height); > > + if (rdp_inst != NULL || CONNECTION_IS_ACTIVE(rdp_inst)) { > > + /* Send display update */ > > + guac_rdp_disp_set_size(rdp_client->disp, settings, rdp_inst, > > width, height); > > + } > > > > return 0; > > > > > > Obviously won't be sending this upstream. > > > > regards, krajo > > > > On Wed, Jan 20, 2021 at 5:36 PM George Krajcsovits < > > george.krajcsov...@gmail.com> wrote: > > > >> Hi, > >> > >> so it seems like the "Activated" event would be perfect to restart > sending > >> input messages to freerdp, and I can wait for it by: > >> PubSub_SubscribeActivated(context->pubSub, my_callback); > >> > >> However I don't see what event / callback to use for sensing when to > stop > >> sending the input messages. I'd rather not modify libfreerdp and solve > this > >> in Guacamole, but haven't found a good way. The events I tried were > >> Terminate, ErrorInfo, GraphicsReset which did not happen. > >> ChannelDisconnect does happen, but those channels aren't mandatory so > >> that's a no go. Also I'm not sure if an event is fast enough to stop > >> messages anyway - are events real time or come from some queue? > >> > >> Also PreConnect callback does not happen on redirect, so that doesn't > work > >> either. > >> > >> regards, krajo > >> > >> On Wed, Jan 20, 2021 at 2:16 PM George Krajcsovits < > >> george.krajcsov...@gmail.com> wrote: > >> > >>> Hi, > >>> > >>> thank you, I'll take a look. In the meantime I did find an interesting > >>> commit in FreeRDP that seems related: > >>> > >>> > https://github.com/FreeRDP/FreeRDP/commit/2ae7c2a6d480a647059e85c6cee2a493641137e3 > >>> > >>> I'll see if guacamole does something like this and if it can be fixed > if > >>> not. > >>> > >>> regards, krajo > >>> > >>> On Wed, Jan 20, 2021 at 1:54 PM Darren DeHaven <clearmin...@gmail.com> > >>> wrote: > >>> > >>>> Hi George, > >>>> > >>>> (Note: I'm just a user.) > >>>> > >>>> Your issue sounds similar to either of these bugs: > >>>> > >>>> guacd, Release 1.2.0 segfaults in connection with RDP-Sessions > >>>> https://issues.apache.org/jira/browse/GUACAMOLE-1203 > >>>> > >>>> Tolerate RDP protocol violations where possible: > >>>> https://issues.apache.org/jira/browse/GUACAMOLE-1059 > >>>> (this bug shows as fixed in 1.2.0. I wonder if this "fix" is causing > >>>> the 1203 bug?) > >>>> > >>>> * Additional reference: > >>>> rdpbcgr connection sequence: > >>>> > >>>> > https://securitylab.github.com/static/09944e314cb4d4cf299530f0d9383846/179f0/image5.png > >>>> > >>>> > https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/023f1e69-cfe8-4ee6-9ee0-7e759fb4e4ee > >>>> > >>>> Other rdp details: > >>>> https://securitylab.github.com/research/fuzzing-sockets-FreeRDP > >>>> > >>>> > >>>> On Wed, Jan 20, 2021 at 3:35 AM George Krajcsovits via FreeRDP-devel < > >>>> freerdp-devel@lists.sourceforge.net> wrote: > >>>> > >>>>> Hi, > >>>>> > >>>>> I'm using freerdp 2.2.0 via Guacamole 1.3.0 on Ubuntu 18.04 LTS. > >>>>> In my use case, first there is a TLS security connection to the > server, > >>>>> which then redirects to the final connection , which is using NLA. > >>>>> > >>>>> If I move the mouse during the redirection (or do any other input), > then > >>>>> NLA connection fails because the server receives INPUT PDUs during > the > >>>>> connection phase and aborts due to protocol violation. If I don't > make > >>>>> inputs, then everything is fine. > >>>>> > >>>>> Weirdly xfreerdp, remmina work ok, I just cannot figure out what > they do > >>>>> differently to I guess inhibit sending input events while the new > >>>>> connection is made. > >>>>> > >>>>> Any tips? Is there some callback about this (I don't see PreConnect > >>>>> callback)? I just started to go through the libfreerdp, xfreerdp and > >>>>> guacamole code to figure out a solution. > >>>>> > >>>>> thanks & regards, krajo > >>>>> > >>>>> > >>>>> -- > >>>>> Learn to separate truth from illusion, because in this world, it's > the > >>>>> hardest thing to do. > >>>>> > >>>>> _______________________________________________ > >>>>> FreeRDP-devel mailing list > >>>>> FreeRDP-devel@lists.sourceforge.net > >>>>> https://lists.sourceforge.net/lists/listinfo/freerdp-devel > >>>>> > >>> -- > >>> Learn to separate truth from illusion, because in this world, it's the > >>> hardest thing to do. > >>> > >> > >> -- > >> Learn to separate truth from illusion, because in this world, it's the > >> hardest thing to do. > >> > > > > > _______________________________________________ > FreeRDP-devel mailing list > FreeRDP-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/freerdp-devel > -- Learn to separate truth from illusion, because in this world, it's the hardest thing to do. _______________________________________________ FreeRDP-devel mailing list FreeRDP-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freerdp-devel