xrdp: handle 3 byte PDU
This commit is contained in:
parent
f0c0976d1d
commit
409878666f
@ -138,13 +138,43 @@ xrdp_process_data_in(struct trans *self)
|
|||||||
}
|
}
|
||||||
if (pro->session->up_and_running)
|
if (pro->session->up_and_running)
|
||||||
{
|
{
|
||||||
|
pro->server_trans->header_size = 2;
|
||||||
pro->server_trans->extra_flags = 1;
|
pro->server_trans->extra_flags = 1;
|
||||||
pro->server_trans->header_size = 4;
|
|
||||||
init_stream(s, 0);
|
init_stream(s, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
|
/* we got 2 bytes */
|
||||||
|
if (s->p[0] == 3)
|
||||||
|
{
|
||||||
|
pro->server_trans->header_size = 4;
|
||||||
|
pro->server_trans->extra_flags = 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (s->p[1] & 0x80)
|
||||||
|
{
|
||||||
|
pro->server_trans->header_size = 3;
|
||||||
|
pro->server_trans->extra_flags = 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
len = (tui8)(s->p[1]);
|
||||||
|
pro->server_trans->header_size = len;
|
||||||
|
pro->server_trans->extra_flags = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
len = (int) (s->end - s->data);
|
||||||
|
if (pro->server_trans->header_size > len)
|
||||||
|
{
|
||||||
|
/* not enough data read yet */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
|
||||||
|
case 2:
|
||||||
/* we have enough now to get the PDU bytes */
|
/* we have enough now to get the PDU bytes */
|
||||||
len = libxrdp_get_pdu_bytes(s->p);
|
len = libxrdp_get_pdu_bytes(s->p);
|
||||||
if (len == -1)
|
if (len == -1)
|
||||||
@ -154,10 +184,18 @@ xrdp_process_data_in(struct trans *self)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
pro->server_trans->header_size = len;
|
pro->server_trans->header_size = len;
|
||||||
pro->server_trans->extra_flags = 2;
|
pro->server_trans->extra_flags = 3;
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
len = (int) (s->end - s->data);
|
||||||
|
if (pro->server_trans->header_size > len)
|
||||||
|
{
|
||||||
|
/* not enough data read yet */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
g_writeln("here");
|
||||||
|
|
||||||
|
case 3:
|
||||||
/* the whole PDU is read in now process */
|
/* the whole PDU is read in now process */
|
||||||
s->p = s->data;
|
s->p = s->data;
|
||||||
if (xrdp_process_loop(pro, s) != 0)
|
if (xrdp_process_loop(pro, s) != 0)
|
||||||
@ -167,7 +205,7 @@ xrdp_process_data_in(struct trans *self)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
init_stream(s, 0);
|
init_stream(s, 0);
|
||||||
pro->server_trans->header_size = 4;
|
pro->server_trans->header_size = 2;
|
||||||
pro->server_trans->extra_flags = 1;
|
pro->server_trans->extra_flags = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user