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


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

Reply via email to